module Ehon::ClassMethods

Attributes

contents[RW]
default_options[RW]

Public Instance Methods

[](*queries)
Alias for: find
all() click to toggle source
# File lib/ehon.rb, line 62
def all
  self.contents.values
end
create_accessors!() click to toggle source
# File lib/ehon.rb, line 57
def create_accessors!
  create_readers!
  create_writers!
end
create_readers!() click to toggle source
# File lib/ehon.rb, line 49
def create_readers!
  options.each {|option| define_reader option }
end
create_writers!() click to toggle source
# File lib/ehon.rb, line 53
def create_writers!
  options.each {|option| define_writer option }
end
default(options = {}) click to toggle source
# File lib/ehon.rb, line 45
def default(options = {})
  self.default_options.merge!(options)
end
enum(id, options = {}, &block) click to toggle source
# File lib/ehon.rb, line 38
def enum(id, options = {}, &block)
  instance = new(id, options)
  instance.instance_eval(&block) if block_given?
  self.contents[id] = instance
  instance
end
find(*queries) click to toggle source
# File lib/ehon.rb, line 66
def find(*queries)
  queries.flatten!
  findeds = queries.map {|query|
    next self.contents[query] unless query.is_a?(Hash)
    self.contents.values.select {|instance|
      query.all? {|key, value| instance.read_attribute(key) == value }
    }
  }.flatten.compact
  single = if queries.any? {|query| query.is_a?(Hash) }
    queries.size == 1 && findeds.size <= 1
  else
    queries.size == 1
  end
  single ? findeds.first : findeds
end
Also aliased as: []

Private Instance Methods

define_reader(symbol) click to toggle source
# File lib/ehon.rb, line 88
def define_reader(symbol)
  class_eval do
    define_method(symbol) { read_attribute(symbol) }
  end
end
define_writer(symbol) click to toggle source
# File lib/ehon.rb, line 94
def define_writer(symbol)
  return if symbol == :id
  class_eval do
    define_method("#{symbol}=") {|value| @options[symbol] = value }
  end
end
options() click to toggle source
# File lib/ehon.rb, line 84
def options
  self.contents.values.map {|e| e.options.keys }.flatten.uniq
end