1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

[ruby/csv] 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).

https://github.com/ruby/csv/commit/b0b1325d6b
This commit is contained in:
Sutou Kouhei 2021-09-15 15:58:57 +09:00 committed by Sutou Kouhei
parent 8aaa1c279f
commit 39ecdabe67
Notes: git 2021-10-24 05:58:05 +09:00
2 changed files with 8 additions and 4 deletions

View file

@ -2575,7 +2575,7 @@ class CSV
def build_parser_fields_converter
specific_options = {
builtin_converters: Converters,
builtin_converters_name: :Converters,
}
options = @base_fields_converter_options.merge(specific_options)
build_fields_converter(@initial_converters, options)
@ -2587,7 +2587,7 @@ class CSV
def build_header_fields_converter
specific_options = {
builtin_converters: HeaderConverters,
builtin_converters_name: :HeaderConverters,
accept_nil: true,
}
options = @base_fields_converter_options.merge(specific_options)

View file

@ -16,7 +16,7 @@ class CSV
@empty_value = options[:empty_value]
@empty_value_is_empty_string = (@empty_value == "")
@accept_nil = options[:accept_nil]
@builtin_converters = options[:builtin_converters]
@builtin_converters_name = options[:builtin_converters_name]
@need_static_convert = need_static_convert?
end
@ -24,7 +24,7 @@ class CSV
if name.nil? # custom converter
@converters << converter
else # named converter
combo = @builtin_converters[name]
combo = builtin_converters[name]
case combo
when Array # combo converter
combo.each do |sub_name|
@ -80,5 +80,9 @@ class CSV
@need_static_convert or
(not @converters.empty?)
end
def builtin_converters
@builtin_converters ||= ::CSV.const_get(@builtin_converters_name)
end
end
end