- Removes deprecated methods:
Merit::Badge.last_grantedandMerit::Score.top_scored. - Removes
add_pointslogparameter. - Adds points category option.
- Deprecates
Merit::Badge.last_grantedandMerit::Score.top_scored. Code can be readded to client applications following instructions in: https://github.com/tute/merit/wiki/How-to-show-a-points-leaderboard https://github.com/tute/merit/wiki/How-to-show-last-granted-badges - Deprecates
add_pointslogparameter.
- Completes implementation of observer patter for getting reputation grant notifications to the client app. See: https://github.com/tute/merit#getting- notifications.
- Work on mongoid adapter (not yet ready), and other internals polishing.
- Adds support for dynamic scoring
substract_pointsis deprecated in favor ofsubtract_points. Careless computers didn't mind my misspellings. ;-)- JRuby and Rubinius compatibility
- 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::ActivityLogjoin model betweenMerit::ActionandMerit::BadgesSashandMerit::Score::Pointfor logging purposes. Every time a badge is granted or removed, or points are changed, a newActivityLogobject gets created. - Namespaces
Badge,SashandBadgesSashintoMeritmodule. If your app uses any of those class names, you should add aMerit::prefix. - Removes undocumented
log:stringcolumn 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. :tooption 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.agoby 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(usersby default):since_date(1.month.agoby 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
pointsand methodpoints=don't exist anymore (methodpointsstill 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.