Sha256: af5780a26cc16813f169d695751704c126e0cf782ee65ceb41de5f32b50eae78

Contents?: true

Size: 1.48 KB

Versions: 13

Compression:

Stored size: 1.48 KB

Contents

module NinjaModel
  module Associations
    class SingularAssociation < Association
      def reader(force_reload = false)
        if force_reload
          klass.uncached { reload }
        elsif !loaded? || stale_target?
          reload
        end

        target
      end

      def writer(record)
        replace(record)
      end

      def create(attributes = {}, options = {}, &block)
        create_record(attributes, options, &block)
      end

      def create!(attributes = {}, options = {}, &block)
        create_record(attributes, options, true, &block)
      end

      def build(attributes = {}, options = {})
        record = build_record(attributes, options)
        yield(record) if block_given?
        set_new_record(record)
        record
      end

      private

      def create_scope
        scoped.scope_for_create.stringify_keys.except(klass.primary_key)
      end

      def find_target
        scoped.first.tap { |record| set_inverse_instance(record) }
      end

      def replace(record)
        raise NotImplementedError, "Subclasses must implement a replace(record) method"
      end

      def set_new_record(record)
        replace(record)
      end

      def create_record(attributes, options, raise_error = false)
        record = build_record(attributes, options)
        yield(record) if block_given?
        saved = record.save
        set_new_record(record)
        raise RecordInvalid.new(record) if !saved && raise_error
        record
      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/singular_association.rb
ninja-model-1.0.4 lib/ninja_model/associations/singular_association.rb
ninja-model-1.0.3 lib/ninja_model/associations/singular_association.rb
ninja-model-1.0.2 lib/ninja_model/associations/singular_association.rb
ninja-model-1.0.1 lib/ninja_model/associations/singular_association.rb
ninja-model-1.0.0 lib/ninja_model/associations/singular_association.rb
ninja-model-0.9.6 lib/ninja_model/associations/singular_association.rb
ninja-model-0.9.5 lib/ninja_model/associations/singular_association.rb
ninja-model-0.9.4 lib/ninja_model/associations/singular_association.rb
ninja-model-0.9.3 lib/ninja_model/associations/singular_association.rb
ninja-model-0.9.2 lib/ninja_model/associations/singular_association.rb
ninja-model-0.9.1 lib/ninja_model/associations/singular_association.rb
ninja-model-0.9.0 lib/ninja_model/associations/singular_association.rb