# Upgrading

## to 1.0.1

Adds Merit::Point#created_at attribute.

## to 1.0.0

Points granting history is now logged.

* Attribute `points` and method `points=` don't exist anymore (method `points`
  still works for querying number of points for a resource).
* There are new methods `add_points(num_points, log_message)` and
  `remove_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
        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|
          user.sash.scores << Merit::Score.create
          user.add_points(user.points, 'Initial merit points import.')
        end
        remove_column :users, :points
      end
    end

## to 0.10.0

`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.

## to 0.9.0

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.

## to 0.8.0

No changes needed. Adds Mongoid support.

## to 0.7.0

No changes needed. Adds `:multiple` boolean option to `grant_on` to grant
badge multiple times.

## to 0.6.0

<tt>MeritBadgeRules</tt>, <tt>MeritPointRules</tt> and <tt>MeritRankRules</tt>
are now namespaced into Merit module. Move and change:

<pre>
app/models/merit_{badge|point|rank}_rules.rb -> app/models/merit/{badge|point|rank}_rules.rb
</pre>
<pre>
-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
</pre>

## to 0.5.0

Add <tt>log:string</tt> column to <tt>merit_actions</tt> table.

## to 0.4.0

Rankings are now integer attributes (<tt>level</tt>), they are not badges
anymore. <tt>set_rank</tt> doesn't accept <tt>badge_name</tt> anymore.

## to 0.3.0

Badges data is now stored in <tt>config/initializers/merit.rb</tt> using
<tt>ambry</tt> syntax (not in the DB anymore, as that table needed to be in
sync in all development environments).

## to 0.2.0

Added <tt>had_errors</tt> boolean attribute to <tt>merit_actions</tt> table.