ledermann/rails-settings

View on GitHub
lib/rails-settings/scopes.rb

Summary

Maintainability
A
0 mins
Test Coverage
module RailsSettings
  module Scopes
    def with_settings
      result = joins("INNER JOIN settings ON #{settings_join_condition}")
      result.distinct
    end

    def with_settings_for(var)
      raise ArgumentError.new('Symbol expected!') unless var.is_a?(Symbol)
      joins(
        "INNER JOIN settings ON #{settings_join_condition} AND settings.var = '#{var}'",
      )
    end

    def without_settings
      joins("LEFT JOIN settings ON #{settings_join_condition}").where(
        'settings.id IS NULL',
      )
    end

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

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