class Model

Constants

VERSION

Attributes

defaults[W]
keys[W]

Public Class Methods

defaults() click to toggle source
# File lib/model.rb, line 13
def defaults
  @defaults ||= {}
end
inherited(subclass) click to toggle source
# File lib/model.rb, line 17
def inherited(subclass)
  subclass.keys = keys.dup
  subclass.defaults = defaults.dup
end
key(symbol, &block) click to toggle source

define a key and an optional block that provides a default value for the key

# File lib/model.rb, line 23
def key(symbol, &block)
  keys << symbol unless @keys.include? symbol
  attr_accessor symbol
  defaults[symbol] = block if block
end
keys() click to toggle source
# File lib/model.rb, line 9
def keys
  @keys ||= []
end
new(hash={}) click to toggle source
# File lib/model.rb, line 30
def initialize(hash={})
  unknown = hash.keys - keys
  if unknown.count > 0
    raise ArgumentError, "unknown keyword#{'s' if unknown.count > 1}: #{unknown.join', '}"
  end
  hash.each_pair {|key, v| instance_variable_set "@#{key}", v}
  (self.class.defaults.keys - hash.keys).each do |key|
    block = self.class.defaults[key]
    instance_variable_set("@#{key}", instance_exec(&block))
  end
end

Public Instance Methods

==(other)
Alias for: eql?
[](key) click to toggle source
# File lib/model.rb, line 46
def [] key
  send key
end
eql?(other) click to toggle source
# File lib/model.rb, line 50
def eql?(other)
  keys.all? { |k| send(k) == other[k] }
end
Also aliased as: ==
keys() click to toggle source
# File lib/model.rb, line 42
def keys
  self.class.keys
end