module TreasureHunt::Achievement::InstanceMethods

Public Instance Methods

fill_points() click to toggle source
# File lib/treasure_hunt/achievement.rb, line 28
def fill_points
  self.points = self.reward.points unless self.points
end
find_all_recently_achieved() click to toggle source
# File lib/treasure_hunt/achievement.rb, line 54
def find_all_recently_achieved
  limit = self.reward.limit rescue 1.0/0 # Yep, that's Infinity

  find_all_similar_and_younger.limit(limit)
end
find_all_similar() click to toggle source
# File lib/treasure_hunt/achievement.rb, line 41
def find_all_similar
  ret =  self.class.where(:user_id => self.user_id, :reward_id => self.reward_id).order('updated_at DESC')
  ret = ret.where('id != ?', self.id) if self.id

  ret
end
find_all_similar_and_younger() click to toggle source
# File lib/treasure_hunt/achievement.rb, line 48
def find_all_similar_and_younger
  age = Time.now - self.reward.every rescue 0

  find_all_similar.where('updated_at > ?', age)
end
reward_cannot_be_achieved_above_limits() click to toggle source

TODO refactoring to Validator

# File lib/treasure_hunt/achievement.rb, line 33
def reward_cannot_be_achieved_above_limits
  limit = self.reward.limit rescue 1.0/0

  if self.find_all_similar_and_younger.size >= limit
    errors.add(:reward, "can't achieve reward at current time")
  end
end