Skip to content

Commit b0b1325

Browse files
committed
Resolve CSV::Converters and HeaderConverters lazy
It's for Ractor. If you want to use the built-in converters, you should call Ractor.make_shareable(CSV::Converters) and/or Ractor.make_shareable(CSV::HeaderConverters).
1 parent 1f9cbc1 commit b0b1325

File tree

2 files changed

+8
-4
lines changed

2 files changed

+8
-4
lines changed

lib/csv.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2694,7 +2694,7 @@ def parser_fields_converter
26942694

26952695
def build_parser_fields_converter
26962696
specific_options = {
2697-
builtin_converters: Converters,
2697+
builtin_converters_name: :Converters,
26982698
}
26992699
options = @base_fields_converter_options.merge(specific_options)
27002700
build_fields_converter(@initial_converters, options)
@@ -2706,7 +2706,7 @@ def header_fields_converter
27062706

27072707
def build_header_fields_converter
27082708
specific_options = {
2709-
builtin_converters: HeaderConverters,
2709+
builtin_converters_name: :HeaderConverters,
27102710
accept_nil: true,
27112711
}
27122712
options = @base_fields_converter_options.merge(specific_options)

lib/csv/fields_converter.rb

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,15 @@ def initialize(options={})
1616
@empty_value = options[:empty_value]
1717
@empty_value_is_empty_string = (@empty_value == "")
1818
@accept_nil = options[:accept_nil]
19-
@builtin_converters = options[:builtin_converters]
19+
@builtin_converters_name = options[:builtin_converters_name]
2020
@need_static_convert = need_static_convert?
2121
end
2222

2323
def add_converter(name=nil, &converter)
2424
if name.nil? # custom converter
2525
@converters << converter
2626
else # named converter
27-
combo = @builtin_converters[name]
27+
combo = builtin_converters[name]
2828
case combo
2929
when Array # combo converter
3030
combo.each do |sub_name|
@@ -80,5 +80,9 @@ def need_convert?
8080
@need_static_convert or
8181
(not @converters.empty?)
8282
end
83+
84+
def builtin_converters
85+
@builtin_converters ||= ::CSV.const_get(@builtin_converters_name)
86+
end
8387
end
8488
end

0 commit comments

Comments
 (0)