Skip to content

Commit

Permalink
Scopes simplified by using class methods
Browse files Browse the repository at this point in the history
  • Loading branch information
ledermann committed Mar 8, 2013
1 parent 41f13f9 commit ea8729a
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 26 deletions.
4 changes: 2 additions & 2 deletions lib/rails-settings.rb
Expand Up @@ -7,8 +7,8 @@
def self.has_settings(*args, &block)
RailsSettings::Configuration.new(*args.unshift(self), &block)

include RailsSettings::Base unless self.include?(RailsSettings::Base)
include RailsSettings::Scopes unless self.include?(RailsSettings::Scopes)
include RailsSettings::Base
extend RailsSettings::Scopes
end
end

44 changes: 20 additions & 24 deletions lib/rails-settings/scopes.rb
@@ -1,33 +1,29 @@
module RailsSettings
module Scopes
def self.included(base)
base.class_eval do
scope :with_settings, lambda {
joins("INNER JOIN settings ON #{settings_join_condition}").
uniq
}
def with_settings
joins("INNER JOIN settings ON #{settings_join_condition}").
uniq
end

scope :with_settings_for, lambda { |var|
raise ArgumentError unless var.is_a?(Symbol)
joins("INNER JOIN settings ON #{settings_join_condition} AND settings.var = '#{var}'")
}
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

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

scope :without_settings_for, lambda { |var|
raise ArgumentError unless var.is_a?(Symbol)
joins("LEFT JOIN settings ON #{settings_join_condition} AND settings.var = '#{var}'").
where('settings.id IS NULL')
}
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 self.settings_join_condition
"settings.target_id = #{table_name}.#{primary_key} AND
settings.target_type = '#{base_class.name}'"
end
end
def settings_join_condition
"settings.target_id = #{table_name}.#{primary_key} AND
settings.target_type = '#{base_class.name}'"
end
end
end

0 comments on commit ea8729a

Please sign in to comment.