module Spyke::Associations::ClassMethods
Public Instance Methods
accepts_nested_attributes_for(*names)
click to toggle source
# File lib/spyke/associations.rb, line 46 def accepts_nested_attributes_for(*names) names.each do |association_name| class_eval <<-RUBY, __FILE__, __LINE__ + 1 def #{association_name}_attributes=(association_attributes) association(:#{association_name}).assign_nested_attributes(association_attributes) end RUBY end end
belongs_to(name, options = {})
click to toggle source
# File lib/spyke/associations.rb, line 38 def belongs_to(name, options = {}) create_association(name, BelongsTo, options) define_method "build_#{name}" do |attributes = nil| association(name).build(attributes) end end
has_many(name, options = {})
click to toggle source
# File lib/spyke/associations.rb, line 17 def has_many(name, options = {}) create_association(name, HasMany, options) define_method "#{name.to_s.singularize}_ids=" do |ids| attributes[name] = [] ids.reject(&:blank?).each { |id| association(name).build(id: id) } end define_method "#{name.to_s.singularize}_ids" do association(name).map(&:id) end end
has_one(name, options = {})
click to toggle source
# File lib/spyke/associations.rb, line 30 def has_one(name, options = {}) create_association(name, HasOne, options) define_method "build_#{name}" do |attributes = nil| association(name).build(attributes) end end
reflect_on_association(name)
click to toggle source
# File lib/spyke/associations.rb, line 56 def reflect_on_association(name) # Just enough to support nested_form gem associations[name] || associations[name.to_s.pluralize.to_sym] end
Private Instance Methods
create_association(name, type, options)
click to toggle source
# File lib/spyke/associations.rb, line 63 def create_association(name, type, options) self.associations = associations.merge(name => Builder.new(self, name, type, options)) end