Sha256: c0cc2af33edf027d95275e7c3cf0bb54fbd9a95165a00108c17b0dbcd4bb10d4

Contents?: true

Size: 1.55 KB

Versions: 5

Compression:

Stored size: 1.55 KB

Contents

# encoding: utf-8
# frozen_string_literal: true

module Traits
  class Association
    module Intermediate
      # class Person
      #   has_and_belongs_to_many :groups
      #
      # person_traits.associations[:groups].intermediate? => true
      #
      def intermediate?
        has_and_belongs_to_many?
      end

      def intermediate_table
        Arel::Table.new(reflection.join_table) if intermediate?
      end

      def intermediate_table_name
        return unless intermediate?
        unless @im_table_name
          name           = reflection.join_table
          @im_table_name = name.kind_of?(String) ? name.to_sym : name
        end
        @im_table_name
      end

      def intermediate_to_key
        if intermediate?
          intermediate_table[intermediate_to_key_name]
        end
      end

      def intermediate_to_key_name
        if intermediate?
          @im_to_key_name ||= reflection.foreign_key.to_sym
        end
      end

      def intermediate_from_key
        if intermediate?
          intermediate_table[intermediate_from_key_name]
        end
      end

      def intermediate_from_key_name
        if intermediate?
          @im_from_key_name ||= reflection.association_foreign_key.to_sym
        end
      end

      def to_hash
        super.merge!(
          intermediate:               intermediate?,
          intermediate_table_name:    intermediate_table_name,
          intermediate_to_key_name:   intermediate_to_key_name,
          intermediate_from_key_name: intermediate_from_key_name
        )
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
activerecord-traits-1.1.1 lib/traits/association/intermediate.rb
activerecord-traits-1.1.0 lib/traits/association/intermediate.rb
activerecord-traits-1.0.3 lib/traits/association/intermediate.rb
activerecord-traits-1.0.2 lib/traits/association/intermediate.rb
activerecord-traits-1.0.1 lib/traits/association/intermediate.rb