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
308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 |
# File 'lib/conversion/core.rb', line 308 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 |