Sha256: a019b19c1970353938d8e8ab89a56da7c26f87fb3171b6936a104f0864485bd9

Contents?: true

Size: 1.02 KB

Versions: 1

Compression:

Stored size: 1.02 KB

Contents

module RailsProperties
  module Scopes
    def with_properties
      result = joins("INNER JOIN properties ON #{properties_join_condition}")

      if ActiveRecord::VERSION::MAJOR < 5
        result.uniq
      else
        result.distinct
      end
    end

    def with_properties_for(var)
      raise ArgumentError.new('Symbol expected!') unless var.is_a?(Symbol)
      joins("INNER JOIN properties ON #{properties_join_condition} AND properties.var = '#{var}'")
    end

    def without_properties
      joins("LEFT JOIN properties ON #{properties_join_condition}").
      where('properties.id IS NULL')
    end

    def without_properties_for(var)
      raise ArgumentError.new('Symbol expected!') unless var.is_a?(Symbol)
      joins("LEFT JOIN properties ON  #{properties_join_condition} AND properties.var = '#{var}'").
      where('properties.id IS NULL')
    end

    def properties_join_condition
      "properties.target_id   = #{table_name}.#{primary_key} AND
       properties.target_type = '#{base_class.name}'"
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
rails-properties-3.4.3 lib/rails-properties/scopes.rb