class Contrackt::Base
Public Class Methods
[]()
click to toggle source
# File lib/contrackt/base.rb, line 31 def self.[] Collection.new(self) end
clone_props()
click to toggle source
# File lib/contrackt/base.rb, line 27 def self.clone_props props.reduce({}) { |props, kvp| props.merge(kvp[0] => kvp[1].clone) } end
define_prop(prop)
click to toggle source
# File lib/contrackt/base.rb, line 17 def self.define_prop(prop) symbol_key = prop.key.to_sym attr_reader symbol_key props[symbol_key] = prop end
determine_contract_class(json)
click to toggle source
# File lib/contrackt/base.rb, line 40 def self.determine_contract_class(json) if @discriminator class_key = json[@discriminator] (@mapping && @mapping[class_key]) || Object.const_get(class_key) else self end end
discriminator(discriminator, mapping = nil)
click to toggle source
# File lib/contrackt/base.rb, line 11 def self.discriminator(discriminator, mapping = nil) @discriminator = discriminator @mapping = mapping define_prop(Props::Required.new(discriminator)) end
new(json)
click to toggle source
Calls superclass method
# File lib/contrackt/base.rb, line 35 def self.new(json) klass = determine_contract_class(json) klass == self ? super(json) : klass.new(json) end
new(json)
click to toggle source
# File lib/contrackt/base.rb, line 49 def initialize(json) self.class.props.each do |symbol_key, prop| instance_variable_set "@#{prop.key}", prop.parse(json) end end
optional(key)
click to toggle source
# File lib/contrackt/base.rb, line 7 def self.optional(key) define_prop(Props::Optional.new(key)) end
props()
click to toggle source
# File lib/contrackt/base.rb, line 23 def self.props @props ||= superclass == Contrackt::Base ? {} : superclass.clone_props end
required(key)
click to toggle source
# File lib/contrackt/base.rb, line 3 def self.required(key) define_prop(Props::Required.new(key)) end
Public Instance Methods
to_hash()
click to toggle source
# File lib/contrackt/base.rb, line 55 def to_hash self.class.props.reduce({}) do |hash, array| symbol_key, prop = array hash.merge(prop.hashify(send(symbol_key))) end end