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