module Riveter::Attributes::Converters

Public Class Methods

converter_for(data_type, options={}) click to toggle source

supply a built-in converter for the given type

# File lib/riveter/attributes.rb, line 431
def self.converter_for(data_type, options={})
  case data_type
  when :string
    lambda {|v, opt| v.to_s }

  when :boolean
    lambda {|v, opt| v.to_b }

  when :integer
    lambda {|v, opt| Integer(v) rescue v }

  when :decimal, :float
    lambda {|v, opt| Float(v) rescue v }

  when :date
    lambda {|v, opt| Date.parse(v) rescue v }

  when :time
    lambda {|v, opt| Time.parse(v) rescue v }

  when :enum
    lambda {|enum, v, opt|
      enum.values.include?(v) ? v : enum.value_for(v)
    }.curry[options[:enum]]

  when :class
    lambda {|models, v, opt|
      models[v] || v
    }.curry[options[:classes].inject({}) {|list, klass| list[klass.name] = klass; list }]

  else # object etc...
    lambda {|v, opt| v }
  end
end