Sha256: bde0896b1e24b5d1347dfc612fb2c82e31c9ec7c65499a61498a6d175577ae76

Contents?: true

Size: 830 Bytes

Versions: 5

Compression:

Stored size: 830 Bytes

Contents

require 'ambry'
require 'ambry/active_model'

class Badge
  extend Ambry::Model
  extend Ambry::ActiveModel

  field :id, :name, :level, :image, :description

  validates_presence_of :id, :name
  validates_uniqueness_of :id

  filters do
    def find_by_id(ids)
      ids = Array.wrap(ids)
      find{|b| ids.include? b[:id] }
    end
    def by_name(name)
      find{|b| b.name == name.to_s }
    end
    def by_level(level)
      find{|b| b.level.to_s == level.to_s }
    end
  end

  def self.find_by_name_and_level(name, level)
    badges = Badge.by_name(name)
    badges = badges.by_level(level) unless level.nil?
    if !(badge = badges.first)
      raise ::Merit::BadgeNotFound, "No badge '#{name}'#{level.nil? ? '' : " with level #{level}"} found. Define it in 'config/initializers/merit.rb'."
    end
    badge
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
merit-1.2.3 app/models/badge.rb
merit-1.2.2 app/models/badge.rb
merit-1.2.1 app/models/badge.rb
merit-1.2.0 app/models/badge.rb
merit-1.1.2 app/models/badge.rb