module JSON
Public Class Methods
mapping(klass, fields)
click to toggle source
# 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