module ManaPotion::Pool::ClassMethods

Public Instance Methods

mana_pool_for(association, limit: 1, period: 1.day, allow_nil: false) click to toggle source
# File lib/mana-potion/pool.rb, line 12
def mana_pool_for(association, limit: 1, period: 1.day, allow_nil: false)
  before_validation do
    owner = send(association)

    if owner.nil?
      raise MissingOwnerError, "#{self.class.name} it's missing its #{association}. If you want to allow that, include the allow_nil: true option in your Pool configuration." unless allow_nil
      next
    end

    limit = instance_exec &limit if limit.respond_to?(:call)
    period = instance_exec &period if period.respond_to?(:call)

    check_usage = ManaPotion::CheckUsage.new(self, owner, limit, period)
    if check_usage.exceeded?
      errors.add(association, :limit, limit: limit, count: check_usage.count)
    end
  end
end