Sha256: 295e23ea53200d89596651b834f47c56be792912c8f4572008f8758de61a9113

Contents?: true

Size: 1.28 KB

Versions: 13

Compression:

Stored size: 1.28 KB

Contents

module NinjaModel
  module Associations
    module Builder
      class Association
        class_attribute :valid_options

        self.valid_options = [:class_name, :foreign_key, :select, :conditions, :extend]

        class_attribute :macro

        attr_reader :model, :name, :options, :reflection

        def self.build(model, name, options)
          new(model, name, options).build
        end

        def initialize(model, name, options)
          @model, @name, @options = model, name, options
        end

        def build
          validate_options
          reflection = model.create_reflection(self.class.macro, name, options, model)
          define_accessors
          reflection
        end

        private

        def validate_options
          options.assert_valid_keys(self.class.valid_options)
        end

        def define_accessors
          define_readers
          define_writers
        end

        def define_readers
          name = self.name

          model.redefine_method(name) do |*params|
            association(name).reader(*params)
          end
        end

        def define_writers
          name = self.name

          model.redefine_method("#{name}=") do |value|
            association(name).writer(value)
          end
        end
      end
    end
  end
end

Version data entries

13 entries across 13 versions & 1 rubygems

Version Path
ninja-model-1.0.5 lib/ninja_model/associations/builder/association.rb
ninja-model-1.0.4 lib/ninja_model/associations/builder/association.rb
ninja-model-1.0.3 lib/ninja_model/associations/builder/association.rb
ninja-model-1.0.2 lib/ninja_model/associations/builder/association.rb
ninja-model-1.0.1 lib/ninja_model/associations/builder/association.rb
ninja-model-1.0.0 lib/ninja_model/associations/builder/association.rb
ninja-model-0.9.6 lib/ninja_model/associations/builder/association.rb
ninja-model-0.9.5 lib/ninja_model/associations/builder/association.rb
ninja-model-0.9.4 lib/ninja_model/associations/builder/association.rb
ninja-model-0.9.3 lib/ninja_model/associations/builder/association.rb
ninja-model-0.9.2 lib/ninja_model/associations/builder/association.rb
ninja-model-0.9.1 lib/ninja_model/associations/builder/association.rb
ninja-model-0.9.0 lib/ninja_model/associations/builder/association.rb