Module: Conversion::EnumerableConverter
- Defined in:
- lib/conversion/core.rb
Overview
:nodoc:
Class Method Summary collapse
-
.to_converter_proc ⇒ Object
See Conversion.converter, Object#convert_to.
Class Method Details
.to_converter_proc ⇒ Object
See Conversion.converter, Object#convert_to
327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 |
# File 'lib/conversion/core.rb', line 327 def to_converter_proc proc { |converter| converter.nil? ? nil : proc { |value| # challenging recursive mechanism found at http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/20469 proc { |builder| proc { |f| f.call(f) }.call( proc { |f| builder.call(proc { |*value| f.call(f).call(*value) }) }) }.call(proc { |recurse| # the recursive proc proc { |value| if value.is_a?(Hash) value.inject(value.dup.clear) { |h, (key, entry)| h[key] = recurse.call(entry) h } elsif value.is_a?(Enumerable) && !value.is_a?(String) value.inject(value.dup.clear) { |e, entry| e << recurse.call(entry) } else converter.call(value) end } }).call(value) } } end |