Module: Ardm::ActiveRecord::Associations::ClassMethods
- Defined in:
- lib/ardm/active_record/associations.rb
Instance Method Summary collapse
- #belongs_to(field, *args) ⇒ Object
- #dump_associations_hash(options) ⇒ Object
- #has(count, name, *args) ⇒ Object
- #n ⇒ Object
-
#relationships ⇒ Object
The reflections returned here don’t look like datamapper relationships.
Instance Method Details
#belongs_to(field, *args) ⇒ Object
69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 |
# File 'lib/ardm/active_record/associations.rb', line 69 def belongs_to(field, *args) = args.shift || {} if String === || Class === # belongs_to :name, 'Class', options: 'here' = (args.last || {}).merge(:model => .to_s) end unless Hash === raise ArgumentError, "bad belongs_to #{field} options format #{options.inspect}" end .delete(:default) .delete(:required) opts = Ardm::ActiveRecord::Associations.(self, ) super field, *opts klass = self Ardm::ActiveRecord::Finalize.on_finalize do assoc = reflect_on_association(field) klass.class_eval do # @todo String is a hack... hoping AR can convert strings to integers during save for integer keys. property assoc.foreign_key, assoc.primary_key_column.sql_type == "Integer" ? Integer : String, key: false end end nil end |
#dump_associations_hash(options) ⇒ Object
51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
# File 'lib/ardm/active_record/associations.rb', line 51 def dump_associations_hash() .inject({}) do |new_attrs, (key, value)| if reflection = reflect_on_association(key.to_sym) if value.is_a?(ActiveRecord::Base) new_attrs[reflection.foreign_key] = value.id if reflection.respond_to?(:polymorphic?) && reflection.polymorphic? new_attrs[reflection.foreign_type] = value.class.base_class end else new_attrs[reflection.foreign_key] = value end else new_attrs[key] = value end new_attrs end end |
#has(count, name, *args) ⇒ Object
99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 |
# File 'lib/ardm/active_record/associations.rb', line 99 def has(count, name, *args) = args.shift || {} if String === || Class === # has n, :name, 'Class', options: 'here' = (args.last || {}).merge(:model => .to_s) end unless Hash === raise ArgumentError, "bad has #{count} options format #{options.inspect}" end [:order] = Ardm::ActiveRecord::Query.order(self, [:order]) if [:order] opts = Ardm::ActiveRecord::Associations.(self, , :through, :order, :source) case count when 1 then has_one name, *opts when "many" then has_many name, *opts end end |
#n ⇒ Object
95 96 97 |
# File 'lib/ardm/active_record/associations.rb', line 95 def n "many" end |
#relationships ⇒ Object
TODO:
improve this if needed with a wrapper
The reflections returned here don’t look like datamapper relationships.
47 48 49 |
# File 'lib/ardm/active_record/associations.rb', line 47 def relationships reflections end |