Skip to content

Instantly share code, notes, and snippets.

@Veejay
Created September 30, 2010 14:45
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Veejay/604689 to your computer and use it in GitHub Desktop.
Save Veejay/604689 to your computer and use it in GitHub Desktop.
module Criterion
@@registered = {}
def self.register(name, &block)
@@registered[name] = block
end
def self.format_age(date)
begin
age = Date.today.year - date.year
if Date.today.month < date.month || (Date.today.month == date.month && date.day >= Date.today.day)
age = age - 1
end
if age >= User::MINIMUM_AGE
age
else
"unknown"
end
rescue
"unknown"
end
end
# Returns a boolean indicating if the user passed
# as a parameter satisfies the criterion
def self.satisfied_by?(user, name, *args)
begin
@@registered[name].call(user, *args)
rescue Exception => e
HoptoadNotifier.notify(:error_class => "User attributes error", :error_message => "Error with user #{user.id}: #{e.message}")
return false
end
end
# Add new criteria here where the logic is centralized
Criterion.register(:age) do |user, age|
self.format_age(user.date_of_birth).to_i > age
end
Criterion.register(:country) do |user, country|
Country.find(user.location_country_id).code == country
end
Criterion.register(:sex) do |user, sex|
Sex.const_get(sex.upcase.to_sym) == user.sex
end
Criterion.register(:region) do |user, region|
region.include? Region.find(user.location.region).iso_id
end
Criterion.register(:language) do |user, language|
language == user.user_settings.language
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment