Sha256: 0ecd5a77249ba5d44acb97dff36b3459e0f39994a5d47accd4ffa8bae26d3cb7

Contents?: true

Size: 1 KB

Versions: 1

Compression:

Stored size: 1 KB

Contents

# frozen_string_literal: true

module ActiveRecord
  module Dbt
    module Column
      module Testable
        module UniqueTestable
          REQUIRED_UNIQUE_TESTABLE_METHODS = %i[table_name column_name primary_keys].freeze

          REQUIRED_UNIQUE_TESTABLE_METHODS.each do |method_name|
            define_method(method_name) do
              raise NotImplementedError, "You must implement #{self.class}##{__method__}"
            end
          end

          def unique_test
            unique? ? 'unique' : nil
          end

          private

          def unique?
            primary_keys.include?(column_name) || unique_columns.include?(column_name)
          end

          def unique_columns
            ActiveRecord::Base.connection.indexes(table_name).each_with_object([]) do |index, array|
              if index.unique == true && (unique_indexes = index.columns).size == 1
                array << unique_indexes.first
              end
            end
          end
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
activerecord-dbt-0.1.0 lib/active_record/dbt/column/testable/unique_testable.rb