class Decidim::Gamification::BadgeRegistry

This class represents a repository of badges. New badges can be registered thanks to its DSL and will be validated prior to being inserted.

Public Class Methods

new() click to toggle source

Public: Initializes the badge registry.

# File lib/decidim/gamification/badge_registry.rb, line 11
def initialize
  @badges = {}
end

Public Instance Methods

all() click to toggle source

Public: Returns all the registered badges.

Returns Array<Badge>.

# File lib/decidim/gamification/badge_registry.rb, line 18
def all
  @badges.values
end
find(name) click to toggle source

Public: Finds a badge given its name.

name - The name of the badge to find.

Returns a Badge if found or nil otherwise.

# File lib/decidim/gamification/badge_registry.rb, line 27
def find(name)
  @badges[name.to_s]
end
register(name, &block) click to toggle source

Public: Registers a new badge.

name - The name of the badge to register. &block - A block that gets the new badge as argument.

Example:

register(:fake){ |badge| badge.levels = [1, 3, 10] }

Returns a Badge when registered successfully, raises an exception otherwise.

# File lib/decidim/gamification/badge_registry.rb, line 41
def register(name, &block)
  name = name.to_s

  badge = Badge.new(name: name).tap do |object|
    object.instance_eval(&block)
  end

  badge.validate!

  @badges[name] = badge
end
unregister(name) click to toggle source

Public: Unregisters a previously registered badge.

name - The name of the badge to unregister.

Returns the deleted Badge if found, nil otherwise.

# File lib/decidim/gamification/badge_registry.rb, line 58
def unregister(name)
  @badges.delete(name.to_s)
end