Module: Zodiac::ActiveRecord::ClassMethods
- Defined in:
- lib/zodiac/activerecord.rb
Instance Attribute Summary collapse
-
#date_for_zodiac ⇒ Object
readonly
Returns the value of attribute date_for_zodiac.
-
#zodiac_sign_id_field ⇒ Object
readonly
Returns the value of attribute zodiac_sign_id_field.
Instance Method Summary collapse
Instance Attribute Details
#date_for_zodiac ⇒ Object (readonly)
Returns the value of attribute date_for_zodiac.
26 27 28 |
# File 'lib/zodiac/activerecord.rb', line 26 def date_for_zodiac @date_for_zodiac end |
#zodiac_sign_id_field ⇒ Object (readonly)
Returns the value of attribute zodiac_sign_id_field.
26 27 28 |
# File 'lib/zodiac/activerecord.rb', line 26 def zodiac_sign_id_field @zodiac_sign_id_field end |
Instance Method Details
#zodiac_reader(dob_attribute, options = { sign_id_attribute: :zodiac_sign_id }) ⇒ Object
28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
# File 'lib/zodiac/activerecord.rb', line 28 def zodiac_reader(dob_attribute, = { sign_id_attribute: :zodiac_sign_id }) @date_for_zodiac = dob_attribute @zodiac_sign_id_field = [:sign_id_attribute] # if the migration was applied, we should update the sign attribute before each save # and define some scopes if self.column_names.include?(@zodiac_sign_id_field.to_s) self.before_save do |object| object.send(:update_sign_id) end # Person.by_zodiac(7 || :libra) == Person.where(zodiac_sign_id: 7) scope :by_zodiac, ->(sign) do case sign when Symbol where(self.zodiac_sign_id_field => Zodiac::Finder::SIGN_IDS[sign]) when Fixnum where(self.zodiac_sign_id_field => sign) else raise ArgumentError, "Invalid attribute type #{sign.class} for #{self}.by_zodiac" end end # Person.gemini == Person.by_zodiac(3) Zodiac.each_sign do |symbol, integer| scope symbol, -> { by_zodiac(integer) } end end end |