Module: JSON
- Defined in:
- lib/json/mapping.rb,
lib/json/mapping/version.rb
Defined Under Namespace
Classes: Mapping
Class Method Summary collapse
Class Method Details
.mapping(klass, fields) ⇒ Object
11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
# File 'lib/json/mapping.rb', line 11 def self.mapping(klass, fields) fields.each do |name, typ| klass.attr_reader name klass.define_method "#{name}=" do |value| value = typ.new(value) if typ.respond_to?(:from_json) unless value.is_a?(typ) raise JSON::Mapping::Error, "Wrong field type #{self.class} for '#{name}' - should be '#{typ}'" end instance_variable_set "@#{name}", value end end klass.define_method :initialize do |params = {}| params.each do |name, value| unless fields.key?(name.to_sym) raise JSON::Mapping::Error, "Missing field definition for '#{name}'" end send("#{name}=", value) end end klass.define_singleton_method :from_json do |string| klass.new(JSON.parse(string)) end end |