Sha256: 8f017c5d0f17bfb3427553baa4d222b6c01ca6e2cedf1cc7d3073f951eb3e118

Contents?: true

Size: 1.03 KB

Versions: 12

Compression:

Stored size: 1.03 KB

Contents

module PassiveRecord
  module Associations
    class HasOneAssociation < Struct.new(:parent_class, :child_class_name, :child_name_sym)
      def to_relation(parent_model)
        HasOneRelation.new(self, parent_model)
      end

      def target_name_symbol
        child_name_sym
      end
    end

    class Relation < Struct.new(:association, :parent_model)
      def singular?
        true
      end
    end

    class HasOneRelation < Relation
      def lookup
        child_class.find_by(parent_model_id_field => parent_model.id)
      end

      def create(attrs={})
        child_class.create(
          attrs.merge(
            parent_model_id_field => parent_model.id
          )
        )
      end

      def parent_model_id_field
        parent_class_name + "_id"
      end

      def parent_class_name
        association.parent_class.name.split('::').last.underscore
      end

      def child_class
        Object.const_get(association.child_class_name.singularize)
      end

      def id
        parent_model.id
      end
    end
  end
end

Version data entries

12 entries across 12 versions & 1 rubygems

Version Path
passive_record-0.3.12 lib/passive_record/associations/has_one.rb
passive_record-0.3.11 lib/passive_record/associations/has_one.rb
passive_record-0.3.10 lib/passive_record/associations/has_one.rb
passive_record-0.3.9 lib/passive_record/associations/has_one.rb
passive_record-0.3.8 lib/passive_record/associations/has_one.rb
passive_record-0.3.7 lib/passive_record/associations/has_one.rb
passive_record-0.3.6 lib/passive_record/associations/has_one.rb
passive_record-0.3.5 lib/passive_record/associations/has_one.rb
passive_record-0.3.4 lib/passive_record/associations/has_one.rb
passive_record-0.3.3 lib/passive_record/associations/has_one.rb
passive_record-0.3.2 lib/passive_record/associations/has_one.rb
passive_record-0.3.1 lib/passive_record/associations/has_one.rb