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