- Rails 4 ready.
- Adds ability to wildcard controllers like:
grant_on '.*search#index', badge: 'searcher', multiple: true
- Allows custom fields to be defined on badges [97c998f]. Example: Merit::Badge.create!({ id: 1, name: 'best-unicorn', custom_fields: { category: 'fantasy' } })
- Adds
Merit::ActivityLog
join model betweenMerit::Action
andMerit::BadgesSash
andMerit::Score::Point
for logging purposes. Every time a badge is granted or removed, or points are changed, a newActivityLog
object gets created. - Namespaces
Badge
,Sash
andBadgesSash
intoMerit
module. If your app uses any of those class names, you should add aMerit::
prefix. - Removes undocumented
log:string
column frommerit_actions
.
Run the following migration to upgrade from 1.4.0:
class UpgradeMeritTo150 < ActiveRecord::Migration
def self.up
remove_column :merit_actions, :log
create_table "merit_activity_logs", :force => true do |t|
t.integer "action_id"
t.string "related_change_type"
t.integer "related_change_id"
t.string "description"
t.datetime "created_at"
end
end
end
- Removed
BadgesSash#set_notified!
undocumented method from code base. :to
option for points and badges granting may now return an array of objects. For instance:
# All user's comments earn points
score 2, to: :user_comments, on: 'comments#vote'
Adds two methods meant to display a leaderboard.
-
Badge.last_granted(options = {})
. Accepts options::since_date
(1.month.ago
by default):limit
(10 by default).
It lists last 10 badge grants in the last month, unless you change query parameters.
-
Merit::Score.top_scored(options = {})
. Accepts options::table_name
(users
by default):since_date
(1.month.ago
by default):limit
(10 by default).
It lists top 10 scored objects in the last month, unless you change query parameters.
Badge#grant_to(meritable_object)
no longer exists. Usemeritable_object.add_badge(badge_id)
(may add badges more than once).Badge#delete_from(meritable_object)
no longer exists. Usemeritable_object.rm_badge(badge_id)
.
Code refactorings. Support for Ruby 1.8.7 has been dropped.
Adds Merit::Point#created_at
(merit_score_points
table) attribute.
May already be added if upgrading from merit < 1).
Points granting history is now logged.
- Attribute
points
and methodpoints=
don't exist anymore (methodpoints
still works for querying number of points for a resource). - There are new methods
add_points(num_points, log_message)
andremove_points(num_points, log_message)
in meritable resources to manually change their amount of points, keeping a history log.
Run the following migration to have the new DB tables:
class UpgradeMerit < ActiveRecord::Migration
def self.up
create_table :merit_scores do |t|
t.references :sash
t.string :category, :default => 'default'
end
create_table :merit_score_points do |t|
t.references :score
t.integer :num_points, :default => 0
t.string :log
t.datetime :created_at
end
end
def self.down
drop_table :merit_scores
drop_table :merit_score_points
end
end
# This will create a single point entry log, with previous points granted
# to each meritable resource. Code example for a User class.
class UpgradeMeritableResources < ActiveRecord::Migration
def up
User.find_each do |user|
unless user.sash
user.sash = Sash.create!
user.save
end
user.sash.scores << Merit::Score.create
user.add_points(user.read_attribute(:points), 'Initial merit points import.')
end
remove_column :users, :points
end
end
If you get an ActiveRecord::DangerousAttributeError: points
exception, you
may need to temporarily tweak your meritable model, as explained in
http://stackoverflow.com/a/1515571/356060.
badges_sashes
table gets a primary key id
column. Run the following migration:
class AddIdToBadgesSashes < ActiveRecord::Migration
def self.up
add_column :badges_sashes, :id, :primary_key
end
def self.down
remove_column :badges_sashes, :id
end
end
set_notified!(badge = nil, sash = nil)
no longer exists, just call set_notified!
over the badge_sash
object, with no parameters.
Adds allow_multiple
boolean option to Badge#grant_to
(defaults to
false
). If you used this method to grant a badge it will now grant only if
resource doesn't have the badge.
Use badge.grant_to resource, :allow_multiple => true
where needed.
No changes needed. Adds Mongoid support.
No changes needed. Adds :multiple
boolean option to grant_on
to grant
badge multiple times.
MeritBadgeRules, MeritPointRules and MeritRankRules are now namespaced into Merit module. Move and change:
app/models/merit_{badge|point|rank}_rules.rb -> app/models/merit/{badge|point|rank}_rules.rb
-class Merit{Badge|Point|Rank}Rules - include Merit::{Badge|Point|Rank}Rules +module Merit + class {Badge|Point|Rank}Rules + include Merit::{Badge|Point|Rank}RulesMethods
Add log:string column to merit_actions table.
Rankings are now integer attributes (level), they are not badges anymore. set_rank doesn't accept badge_name anymore.
Badges data is now stored in config/initializers/merit.rb using ambry syntax (not in the DB anymore, as that table needed to be in sync in all development environments).
Added had_errors boolean attribute to merit_actions table.