class ActiveEnumeration::Base
Public Class Methods
all()
click to toggle source
# File lib/active_enumeration/base.rb, line 21 def self.all @active_enumeration_values.keys.map { |id| self.find(id) } end
count()
click to toggle source
# File lib/active_enumeration/base.rb, line 25 def self.count @active_enumeration_values.count end
find(id)
click to toggle source
# File lib/active_enumeration/base.rb, line 6 def self.find(id) id = id.to_i @instances ||= {} unless @instances[id] || !@active_enumeration_values[id] @instances[id] = self.new *@active_enumeration_values[id] end @instances[id] end
new(*attributes)
click to toggle source
# File lib/active_enumeration/base.rb, line 45 def initialize(*attributes) key_index = self.class.active_enumeration_index_location self.instance_variable_set("@active_enumeration_id", attributes[key_index].to_i) self.class.active_enumeration_attributes.each_with_index do |attr_name, index| self.instance_variable_set("@#{attr_name}", attributes[index]) end end
to_a()
click to toggle source
# File lib/active_enumeration/base.rb, line 29 def self.to_a all.map { |e| [e.to_s, e.instance_variable_get("@active_enumeration_id")] } end
where(filters)
click to toggle source
# File lib/active_enumeration/base.rb, line 15 def self.where(filters) self.all.select do |enum| filters.keys.all? { |k| enum.send(k) == filters[k] } end end
Protected Class Methods
active_enumeration_attributes()
click to toggle source
# File lib/active_enumeration/base.rb, line 54 def self.active_enumeration_attributes @active_enumeration_attributes end
active_enumeration_index_location()
click to toggle source
# File lib/active_enumeration/base.rb, line 62 def self.active_enumeration_index_location active_enumeration_attributes.index(:id) || 0 end
active_enumeration_symbols()
click to toggle source
# File lib/active_enumeration/base.rb, line 58 def self.active_enumeration_symbols @active_enumeration_symbols end
attr_reader(*attributes)
click to toggle source
Calls superclass method
# File lib/active_enumeration/base.rb, line 39 def self.attr_reader(*attributes) super @active_enumeration_attributes ||= [] @active_enumeration_attributes.concat(attributes.map(&:to_sym)) end
belongs_to(name, options = {})
click to toggle source
# File lib/active_enumeration/base.rb, line 85 def self.belongs_to(name, options = {}) class_name = (options[:class_name] || name.to_s.camelize).to_s foreign_key = (options[:foreign_key] || "#{name}_id").to_s self.send(:define_method, name) { klass = class_name.constantize klass.find(self.send(foreign_key)) } self.send(:define_singleton_method, "active_enumeration_belongs_to_#{class_name.underscore}".upcase) { var_name = "@active_enumeration_belongs_to_#{class_name.underscore}" return instance_variable_get(var_name) if instance_variable_get(var_name) hash = Hash.new {Array.new} self.all.each do |obj| hash[obj.send(foreign_key)] = hash[obj.send(foreign_key)] << obj end instance_variable_set(var_name, hash) hash } end
groups(hash)
click to toggle source
# File lib/active_enumeration/base.rb, line 77 def self.groups(hash) hash.each do |group, ids| self.send(:define_singleton_method, group) do ids.map { |id| self.find(id) } end end end
has_many(name, options = {})
click to toggle source
# File lib/active_enumeration/base.rb, line 106 def self.has_many(name, options = {}) class_name = (options[:class_name] || name.to_s.singularize.camelize).to_s self.send(:define_method, name) { klass = class_name.constantize klass.send("active_enumeration_belongs_to_#{self.class.name.underscore}".upcase)[self.id] } end
values(values)
click to toggle source
# File lib/active_enumeration/base.rb, line 66 def self.values(values) @active_enumeration_values ||= Hash.new @active_enumeration_symbols ||= Hash.new if values.class == Hash values.each_with_index { |(k, v), i| handle_hash_values(k, v, i) } elsif values.class == Array values.each_with_index { |v, i| handle_array_values(v, i) } end end
Private Class Methods
handle_array_values(v, i)
click to toggle source
# File lib/active_enumeration/base.rb, line 133 def self.handle_array_values(v, i) v = [v] unless v.class == Array values_key = v[active_enumeration_index_location].to_i @active_enumeration_values[values_key] = v end
handle_hash_values(k, v, i)
click to toggle source
# File lib/active_enumeration/base.rb, line 116 def self.handle_hash_values(k, v, i) v = [v] unless v.class == Array values_key = v[active_enumeration_index_location].to_i @active_enumeration_values[values_key] = v unless active_enumeration_attributes.index(:symbol) @active_enumeration_symbols[values_key] = k.to_sym self.send(:define_method, :symbol) { self.class.active_enumeration_symbols[self.instance_variable_get("@active_enumeration_id")] } end self.send(:define_singleton_method, k) { self.find(values_key) } self.send(:define_method, "#{k}?") { self.instance_variable_get("@active_enumeration_id") == values_key } const_set(k.to_s.upcase, values_key) end
Public Instance Methods
symbol()
click to toggle source
# File lib/active_enumeration/base.rb, line 33 def symbol self.instance_variable_get("@symbol") end