Module: RSchema::CoercionMapper
- Defined in:
- lib/rschema.rb
Class Method Summary collapse
- .coerce_hash(schema, value) ⇒ Object
- .postwalk(schema, value) ⇒ Object
- .prewalk(schema, value) ⇒ Object
- .try_convert(x) ⇒ Object
Class Method Details
.coerce_hash(schema, value) ⇒ Object
119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 |
# File 'lib/rschema.rb', line 119 def self.coerce_hash(schema, value) symbol_keys = Set.new(schema.keys.select{ |k| k.is_a?(Symbol) }.map(&:to_s)) value.reduce({}) do |accum, (k, v)| # convert string keys to symbol keys, if needed if k.is_a?(String) && symbol_keys.include?(k) k = k.to_sym end # strip out keys that don't exist in the schema if schema.has_key?(k) accum[k] = v end accum end end |
.postwalk(schema, value) ⇒ Object
109 110 111 |
# File 'lib/rschema.rb', line 109 def self.postwalk(schema, value) value end |
.prewalk(schema, value) ⇒ Object
87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 |
# File 'lib/rschema.rb', line 87 def self.prewalk(schema, value) if schema == Integer && value.is_a?(String) try_convert(value) { Integer(value) } elsif schema == Float && value.is_a?(String) try_convert(value) { Float(value) } elsif schema == Float && value.is_a?(Integer) value.to_f elsif schema == Symbol && value.is_a?(String) value.to_sym elsif schema == String && value.is_a?(Symbol) value.to_s elsif schema == Array && value.is_a?(Set) value.to_a elsif (schema == Set || schema.is_a?(GenericSetSchema)) && value.is_a?(Array) Set.new(value) elsif(schema.is_a?(Hash) && value.is_a?(Hash)) coerce_hash(schema, value) else value end end |
.try_convert(x) ⇒ Object
113 114 115 116 117 |
# File 'lib/rschema.rb', line 113 def self.try_convert(x) yield x rescue x end |