merit 3.0.3 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +1 -9
  3. data/NEWS.md +7 -0
  4. data/README.md +14 -2
  5. data/app/models/merit/badge.rb +1 -9
  6. data/lib/merit.rb +6 -36
  7. data/lib/merit/{rules_badge_methods.rb → badge_rules_methods.rb} +0 -0
  8. data/lib/merit/base_target_finder.rb +1 -6
  9. data/lib/merit/{model_additions.rb → class_methods.rb} +0 -11
  10. data/lib/merit/controller_extensions.rb +4 -22
  11. data/lib/{generators → merit/generators}/active_record/install_generator.rb +8 -8
  12. data/lib/{generators → merit/generators}/active_record/merit_generator.rb +3 -3
  13. data/lib/{generators → merit/generators}/active_record/remove_generator.rb +5 -5
  14. data/lib/{generators/active_record/templates/add_merit_fields_to_model.rb → merit/generators/active_record/templates/add_merit_fields_to_model.erb} +0 -0
  15. data/lib/{generators/active_record/templates/create_badges_sashes.rb → merit/generators/active_record/templates/create_badges_sashes.erb} +0 -0
  16. data/lib/{generators/active_record/templates/create_merit_actions.rb → merit/generators/active_record/templates/create_merit_actions.erb} +0 -0
  17. data/lib/{generators/active_record/templates/create_merit_activity_logs.rb → merit/generators/active_record/templates/create_merit_activity_logs.erb} +0 -0
  18. data/lib/{generators/active_record/templates/create_sashes.rb → merit/generators/active_record/templates/create_sashes.erb} +0 -0
  19. data/lib/{generators/active_record/templates/create_scores_and_points.rb → merit/generators/active_record/templates/create_scores_and_points.erb} +1 -1
  20. data/lib/{generators/active_record/templates/remove_merit_fields_from_model.rb → merit/generators/active_record/templates/remove_merit_fields_from_model.erb} +0 -0
  21. data/lib/{generators/active_record/templates/remove_merit_tables.rb → merit/generators/active_record/templates/remove_merit_tables.erb} +0 -0
  22. data/lib/merit/generators/install_generator.rb +18 -0
  23. data/lib/{generators/merit → merit/generators}/merit_generator.rb +3 -1
  24. data/lib/{generators/merit → merit/generators}/remove_generator.rb +3 -1
  25. data/lib/{generators/merit/templates/merit.rb → merit/generators/templates/merit.erb} +0 -3
  26. data/lib/{generators/merit/templates/merit_badge_rules.rb → merit/generators/templates/merit_badge_rules.erb} +0 -0
  27. data/lib/{generators/merit/templates/merit_point_rules.rb → merit/generators/templates/merit_point_rules.erb} +0 -0
  28. data/lib/{generators/merit/templates/merit_rank_rules.rb → merit/generators/templates/merit_rank_rules.erb} +0 -0
  29. data/{app/models/merit/action.rb → lib/merit/models/action_concern.rb} +12 -10
  30. data/lib/merit/models/active_record/{merit/action.rb → action.rb} +5 -1
  31. data/lib/merit/models/active_record/{merit/activity_log.rb → activity_log.rb} +3 -1
  32. data/lib/merit/models/active_record/{merit/badges_sash.rb → badges_sash.rb} +4 -2
  33. data/lib/merit/models/active_record/{merit/sash.rb → sash.rb} +5 -2
  34. data/lib/merit/models/active_record/{merit/score.rb → score.rb} +4 -1
  35. data/lib/merit/models/badges_sash_concern.rb +13 -0
  36. data/lib/merit/models/base/badges_sash.rb +1 -1
  37. data/lib/merit/models/base/sash.rb +1 -1
  38. data/lib/merit/models/sash_concern.rb +53 -0
  39. data/lib/merit/{rules_points_methods.rb → point_rules_methods.rb} +0 -0
  40. data/lib/merit/{rules_rank_methods.rb → rank_rules_methods.rb} +3 -18
  41. data/merit.gemspec +4 -2
  42. data/test/dummy/app/models/address.rb +1 -12
  43. data/test/dummy/app/models/comment.rb +3 -21
  44. data/test/dummy/app/models/user.rb +1 -14
  45. data/test/dummy/config/application.rb +5 -1
  46. data/test/dummy/config/application_api_only.rb +1 -1
  47. data/test/dummy/db/schema.rb +1 -6
  48. data/test/integration/navigation_test.rb +2 -2
  49. data/test/test_helper.rb +0 -2
  50. data/test/unit/base_target_finder_test.rb +7 -26
  51. data/test/unit/merit_unit_test.rb +6 -8
  52. data/test/unit/rule_unit_test.rb +8 -8
  53. data/test/unit/rules_matcher_test.rb +9 -6
  54. data/test/unit/sash_finder_test.rb +5 -5
  55. data/test/unit/score_test.rb +1 -1
  56. data/test/unit/target_finder_test.rb +13 -13
  57. metadata +47 -59
  58. data/UPGRADING.md +0 -256
  59. data/lib/generators/active_record/templates/add_target_data_to_merit_actions.rb +0 -5
  60. data/lib/generators/active_record/upgrade_generator.rb +0 -40
  61. data/lib/generators/merit/install_generator.rb +0 -16
  62. data/lib/generators/merit/upgrade_generator.rb +0 -7
  63. data/lib/merit/models/mongoid/merit/action.rb +0 -18
  64. data/lib/merit/models/mongoid/merit/activity_log.rb +0 -11
  65. data/lib/merit/models/mongoid/merit/badges_sash.rb +0 -20
  66. data/lib/merit/models/mongoid/merit/sash.rb +0 -30
  67. data/lib/merit/models/mongoid/merit/score.rb +0 -45
  68. data/test/dummy/db/migrate/20140906225844_create_players.rb +0 -8
  69. data/test/dummy/public/javascripts/application.js +0 -2
  70. data/test/dummy/public/javascripts/controls.js +0 -965
  71. data/test/dummy/public/javascripts/dragdrop.js +0 -974
  72. data/test/dummy/public/javascripts/effects.js +0 -1123
  73. data/test/dummy/public/javascripts/prototype.js +0 -6001
  74. data/test/dummy/public/javascripts/rails.js +0 -191
  75. data/test/orm_models/active_record.rb +0 -11
  76. data/test/orm_models/mongoid.rb +0 -15
@@ -5,29 +5,32 @@ describe Merit::RulesMatcher do
5
5
  describe 'rules actions are treated as a regexp' do
6
6
  it 'selects matching rules (suffix)' do
7
7
  matcher = Merit::RulesMatcher.new('comments', 'update')
8
- matcher.select_from(
8
+ selected = matcher.select_from(
9
9
  'comments#update' => 'comments#update',
10
10
  'comments#up' => 'comments#up',
11
11
  'comments#up$' => 'comments#up$',
12
12
  'comments#up.+$' => 'comments#up.+$',
13
- ).must_be :==, ['comments#update', 'comments#up.+$']
13
+ )
14
+ _(selected).must_be :==, ['comments#update', 'comments#up.+$']
14
15
 
15
16
  matcher = Merit::RulesMatcher.new('comments', 'up')
16
- matcher.select_from(
17
+ selected = matcher.select_from(
17
18
  'comments#update' => 'comments#update',
18
19
  'comments#up' => 'comments#up',
19
20
  'comments#up$' => 'comments#up$',
20
21
  'comments#up.+$' => 'comments#up.+$',
21
- ).must_be :==, ['comments#up', 'comments#up$']
22
+ )
23
+ _(selected).must_be :==, ['comments#up', 'comments#up$']
22
24
  end
23
25
 
24
26
  it 'selects matching rules (prefix)' do
25
27
  matcher = Merit::RulesMatcher.new('/posts/1/comments', 'create')
26
- matcher.select_from(
28
+ selected = matcher.select_from(
27
29
  'comments#create' => 'comments#create',
28
30
  '^comments#create' => '^comments#create',
29
31
  '^.*/comments#create' => '^.*/comments#create',
30
- ).must_be :==, ['^.*/comments#create']
32
+ )
33
+ _(selected).must_be :==, ['^.*/comments#create']
31
34
  end
32
35
  end
33
36
 
@@ -3,11 +3,11 @@ require 'test_helper'
3
3
  describe Merit::SashFinder do
4
4
  it 'should return an array of sashes of the target objects' do
5
5
  sash_1 = Merit::Sash.new
6
- user_1 = Player.new
6
+ user_1 = User.new
7
7
  user_1.stubs(:_sash).returns(sash_1)
8
8
 
9
9
  sash_2 = Merit::Sash.new
10
- user_2 = Player.new
10
+ user_2 = User.new
11
11
  user_2.stubs(:_sash).returns(sash_2)
12
12
 
13
13
  # TODO: With stub we are not exercising compact
@@ -20,8 +20,8 @@ describe Merit::SashFinder do
20
20
 
21
21
  Merit::SashFinder.stubs(:targets).returns(users)
22
22
  sashes = Merit::SashFinder.find(rule, action)
23
- sashes.count.must_be :==, 2
24
- sashes.must_include sash_1
25
- sashes.must_include sash_2
23
+ _(sashes.count).must_be :==, 2
24
+ _(sashes).must_include sash_1
25
+ _(sashes).must_include sash_2
26
26
  end
27
27
  end
@@ -8,6 +8,6 @@ describe Merit::Score do
8
8
  point = Merit::Score::Point.new
9
9
  point.score = score
10
10
 
11
- point.sash_id.must_be :==, score.sash_id
11
+ _(point.sash_id).must_be :==, score.sash_id
12
12
  end
13
13
  end
@@ -17,14 +17,14 @@ describe Merit::TargetFinder do
17
17
 
18
18
  finder = Merit::TargetFinder.new(rule, action)
19
19
  collection = finder.find
20
- collection.size.must_be :==, 1
21
- collection.must_include comment
20
+ _(collection.size).must_be :==, 1
21
+ _(collection).must_include comment
22
22
  end
23
23
  end
24
24
 
25
25
  describe 'rule#to is :action_user' do
26
26
  before do
27
- Merit.setup { |config| config.user_model_name = 'Player' }
27
+ Merit.setup { |config| config.user_model_name = 'User' }
28
28
  end
29
29
  after do
30
30
  Merit.setup { |config| config.user_model_name = 'User' }
@@ -34,14 +34,14 @@ describe Merit::TargetFinder do
34
34
  rule = Merit::Rule.new
35
35
  rule.to = :action_user
36
36
  action = Merit::Action.new(user_id: 22)
37
- user = Player.new
37
+ user = User.new
38
38
 
39
- Player.stubs(:find_by_id).with(22).returns(user)
39
+ User.stubs(:find_by_id).with(22).returns(user)
40
40
 
41
41
  finder = Merit::TargetFinder.new(rule, action)
42
42
  collection = finder.find
43
- collection.size.must_be :==, 1
44
- collection.must_include user
43
+ _(collection.size).must_be :==, 1
44
+ _(collection).must_include user
45
45
  end
46
46
 
47
47
  describe 'when user does not exist' do
@@ -50,9 +50,9 @@ describe Merit::TargetFinder do
50
50
  rule.to = :action_user
51
51
  action = Merit::Action.new(user_id: 22)
52
52
 
53
- Rails.logger.expects(:warn).with('[merit] no Player found with id 22')
53
+ Rails.logger.expects(:warn).with('[merit] no User found with id 22')
54
54
  finder = Merit::TargetFinder.new(rule, action)
55
- finder.find.must_be_empty
55
+ _(finder.find).must_be_empty
56
56
  end
57
57
  end
58
58
  end
@@ -64,15 +64,15 @@ describe Merit::TargetFinder do
64
64
  rule.model_name = 'comments'
65
65
  action = Merit::Action.new(target_id: 40)
66
66
 
67
- user = Player.new
67
+ user = User.new
68
68
  comment = Comment.new
69
69
  comment.stubs(:user).returns(user)
70
70
  Comment.stubs(:find_by_id).with(40).returns(comment)
71
71
 
72
72
  finder = Merit::TargetFinder.new(rule, action)
73
73
  collection = finder.find
74
- collection.size.must_be :==, 1
75
- collection.must_include user
74
+ _(collection.size).must_be :==, 1
75
+ _(collection).must_include user
76
76
  end
77
77
 
78
78
  describe 'rule#to does not exist as a method on the original target' do
@@ -90,7 +90,7 @@ describe Merit::TargetFinder do
90
90
 
91
91
  Rails.logger.expects(:warn).with(str)
92
92
  finder = Merit::TargetFinder.new(rule, action)
93
- finder.find.must_be_empty
93
+ _(finder.find).must_be_empty
94
94
  end
95
95
  end
96
96
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: merit
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.3
4
+ version: 4.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tute Costa
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-08-30 00:00:00.000000000 Z
11
+ date: 2020-06-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ambry
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: 1.0.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: zeitwerk
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: rails
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -122,54 +136,47 @@ files:
122
136
  - RELEASING.md
123
137
  - Rakefile
124
138
  - TESTING.txt
125
- - UPGRADING.md
126
- - app/models/merit/action.rb
127
139
  - app/models/merit/badge.rb
128
140
  - config/locales/en.yml
129
- - lib/generators/active_record/install_generator.rb
130
- - lib/generators/active_record/merit_generator.rb
131
- - lib/generators/active_record/remove_generator.rb
132
- - lib/generators/active_record/templates/add_merit_fields_to_model.rb
133
- - lib/generators/active_record/templates/add_target_data_to_merit_actions.rb
134
- - lib/generators/active_record/templates/create_badges_sashes.rb
135
- - lib/generators/active_record/templates/create_merit_actions.rb
136
- - lib/generators/active_record/templates/create_merit_activity_logs.rb
137
- - lib/generators/active_record/templates/create_sashes.rb
138
- - lib/generators/active_record/templates/create_scores_and_points.rb
139
- - lib/generators/active_record/templates/remove_merit_fields_from_model.rb
140
- - lib/generators/active_record/templates/remove_merit_tables.rb
141
- - lib/generators/active_record/upgrade_generator.rb
142
- - lib/generators/merit/install_generator.rb
143
- - lib/generators/merit/merit_generator.rb
144
- - lib/generators/merit/remove_generator.rb
145
- - lib/generators/merit/templates/merit.rb
146
- - lib/generators/merit/templates/merit_badge_rules.rb
147
- - lib/generators/merit/templates/merit_point_rules.rb
148
- - lib/generators/merit/templates/merit_rank_rules.rb
149
- - lib/generators/merit/upgrade_generator.rb
150
141
  - lib/merit.rb
142
+ - lib/merit/badge_rules_methods.rb
151
143
  - lib/merit/base_target_finder.rb
144
+ - lib/merit/class_methods.rb
152
145
  - lib/merit/controller_extensions.rb
146
+ - lib/merit/generators/active_record/install_generator.rb
147
+ - lib/merit/generators/active_record/merit_generator.rb
148
+ - lib/merit/generators/active_record/remove_generator.rb
149
+ - lib/merit/generators/active_record/templates/add_merit_fields_to_model.erb
150
+ - lib/merit/generators/active_record/templates/create_badges_sashes.erb
151
+ - lib/merit/generators/active_record/templates/create_merit_actions.erb
152
+ - lib/merit/generators/active_record/templates/create_merit_activity_logs.erb
153
+ - lib/merit/generators/active_record/templates/create_sashes.erb
154
+ - lib/merit/generators/active_record/templates/create_scores_and_points.erb
155
+ - lib/merit/generators/active_record/templates/remove_merit_fields_from_model.erb
156
+ - lib/merit/generators/active_record/templates/remove_merit_tables.erb
157
+ - lib/merit/generators/install_generator.rb
158
+ - lib/merit/generators/merit_generator.rb
159
+ - lib/merit/generators/remove_generator.rb
160
+ - lib/merit/generators/templates/merit.erb
161
+ - lib/merit/generators/templates/merit_badge_rules.erb
162
+ - lib/merit/generators/templates/merit_point_rules.erb
163
+ - lib/merit/generators/templates/merit_rank_rules.erb
153
164
  - lib/merit/judge.rb
154
- - lib/merit/model_additions.rb
155
- - lib/merit/models/active_record/merit/action.rb
156
- - lib/merit/models/active_record/merit/activity_log.rb
157
- - lib/merit/models/active_record/merit/badges_sash.rb
158
- - lib/merit/models/active_record/merit/sash.rb
159
- - lib/merit/models/active_record/merit/score.rb
165
+ - lib/merit/models/action_concern.rb
166
+ - lib/merit/models/active_record/action.rb
167
+ - lib/merit/models/active_record/activity_log.rb
168
+ - lib/merit/models/active_record/badges_sash.rb
169
+ - lib/merit/models/active_record/sash.rb
170
+ - lib/merit/models/active_record/score.rb
171
+ - lib/merit/models/badges_sash_concern.rb
160
172
  - lib/merit/models/base/badges_sash.rb
161
173
  - lib/merit/models/base/sash.rb
162
- - lib/merit/models/mongoid/merit/action.rb
163
- - lib/merit/models/mongoid/merit/activity_log.rb
164
- - lib/merit/models/mongoid/merit/badges_sash.rb
165
- - lib/merit/models/mongoid/merit/sash.rb
166
- - lib/merit/models/mongoid/merit/score.rb
174
+ - lib/merit/models/sash_concern.rb
175
+ - lib/merit/point_rules_methods.rb
176
+ - lib/merit/rank_rules_methods.rb
167
177
  - lib/merit/reputation_change_observer.rb
168
178
  - lib/merit/rule.rb
169
- - lib/merit/rules_badge_methods.rb
170
179
  - lib/merit/rules_matcher.rb
171
- - lib/merit/rules_points_methods.rb
172
- - lib/merit/rules_rank_methods.rb
173
180
  - lib/merit/sash_finder.rb
174
181
  - lib/merit/target_finder.rb
175
182
  - merit.gemspec
@@ -232,26 +239,17 @@ files:
232
239
  - test/dummy/db/migrate/20130329224410_create_scores_and_points.rb
233
240
  - test/dummy/db/migrate/20140211144001_create_addresses.rb
234
241
  - test/dummy/db/migrate/20140819133931_add_target_data_to_merit_actions.rb
235
- - test/dummy/db/migrate/20140906225844_create_players.rb
236
242
  - test/dummy/db/schema.rb
237
243
  - test/dummy/db/seeds.rb
238
244
  - test/dummy/public/404.html
239
245
  - test/dummy/public/422.html
240
246
  - test/dummy/public/500.html
241
247
  - test/dummy/public/favicon.ico
242
- - test/dummy/public/javascripts/application.js
243
- - test/dummy/public/javascripts/controls.js
244
- - test/dummy/public/javascripts/dragdrop.js
245
- - test/dummy/public/javascripts/effects.js
246
- - test/dummy/public/javascripts/prototype.js
247
- - test/dummy/public/javascripts/rails.js
248
248
  - test/dummy/public/rails.js
249
249
  - test/dummy/public/stylesheets/.gitkeep
250
250
  - test/dummy/public/stylesheets/scaffold.css
251
251
  - test/dummy/script/rails
252
252
  - test/integration/navigation_test.rb
253
- - test/orm_models/active_record.rb
254
- - test/orm_models/mongoid.rb
255
253
  - test/support/integration_case.rb
256
254
  - test/test_helper.rb
257
255
  - test/unit/action_test.rb
@@ -282,8 +280,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
282
280
  - !ruby/object:Gem::Version
283
281
  version: '0'
284
282
  requirements: []
285
- rubyforge_project:
286
- rubygems_version: 2.7.6.2
283
+ rubygems_version: 3.0.3
287
284
  signing_key:
288
285
  specification_version: 4
289
286
  summary: Reputation engine for Rails apps
@@ -347,26 +344,17 @@ test_files:
347
344
  - test/dummy/db/migrate/20130329224410_create_scores_and_points.rb
348
345
  - test/dummy/db/migrate/20140211144001_create_addresses.rb
349
346
  - test/dummy/db/migrate/20140819133931_add_target_data_to_merit_actions.rb
350
- - test/dummy/db/migrate/20140906225844_create_players.rb
351
347
  - test/dummy/db/schema.rb
352
348
  - test/dummy/db/seeds.rb
353
349
  - test/dummy/public/404.html
354
350
  - test/dummy/public/422.html
355
351
  - test/dummy/public/500.html
356
352
  - test/dummy/public/favicon.ico
357
- - test/dummy/public/javascripts/application.js
358
- - test/dummy/public/javascripts/controls.js
359
- - test/dummy/public/javascripts/dragdrop.js
360
- - test/dummy/public/javascripts/effects.js
361
- - test/dummy/public/javascripts/prototype.js
362
- - test/dummy/public/javascripts/rails.js
363
353
  - test/dummy/public/rails.js
364
354
  - test/dummy/public/stylesheets/.gitkeep
365
355
  - test/dummy/public/stylesheets/scaffold.css
366
356
  - test/dummy/script/rails
367
357
  - test/integration/navigation_test.rb
368
- - test/orm_models/active_record.rb
369
- - test/orm_models/mongoid.rb
370
358
  - test/support/integration_case.rb
371
359
  - test/test_helper.rb
372
360
  - test/unit/action_test.rb
@@ -1,256 +0,0 @@
1
- # Main Changes / Upgrading Notes
2
-
3
- ## 2.1.0
4
-
5
- Adds serialisation of destroyed target models so that reputation can be awarded
6
- when the item is already deleted from the DB. For this to work you need a new
7
- column, to add it you can run:
8
-
9
- ```
10
- rails generate merit:upgrade
11
- rake db:migrate
12
- ```
13
-
14
- This is a backwards compatible addition, so if you don't add the column but
15
- upgrade, your application should continue to work well, without the new feature.
16
-
17
- ## 2.0.0
18
-
19
- * Removes deprecated methods: `Merit::Badge.last_granted` and
20
- `Merit::Score.top_scored`.
21
- * Removes `add_points` `log` parameter.
22
- * Adds points category option.
23
-
24
- ## 1.9.0
25
-
26
- * Deprecates `Merit::Badge.last_granted` and `Merit::Score.top_scored`.
27
- Code can be readded to client applications following instructions in:
28
- https://github.com/tute/merit/wiki/How-to-show-a-points-leaderboard
29
- https://github.com/tute/merit/wiki/How-to-show-last-granted-badges
30
- * Deprecates `add_points` `log` parameter.
31
-
32
- ## 1.8.0
33
-
34
- * Completes implementation of observer patter for getting reputation grant
35
- notifications to the client app. See: https://github.com/tute/merit#getting-
36
- notifications.
37
- * Work on mongoid adapter (not yet ready), and other internals polishing.
38
-
39
- ## 1.7.0
40
-
41
- * Adds support for dynamic scoring
42
- * `substract_points` is deprecated in favor of `subtract_points`. Careless
43
- computers didn't mind my misspellings. ;-)
44
- * JRuby and Rubinius compatibility
45
-
46
- ## 1.6.0
47
-
48
- * Rails 4 ready.
49
- * Adds ability to wildcard controllers like:
50
- ```ruby
51
- grant_on '.*search#index', badge: 'searcher', multiple: true
52
- ```
53
- * Allows custom fields to be defined on badges [97c998f]. Example:
54
- Merit::Badge.create!({
55
- id: 1,
56
- name: 'best-unicorn',
57
- custom_fields: { category: 'fantasy' }
58
- })
59
-
60
- ## 1.5.0
61
-
62
- * Adds `Merit::ActivityLog` join model between `Merit::Action` and
63
- `Merit::BadgesSash` and `Merit::Score::Point` for logging purposes. Every
64
- time a badge is granted or removed, or points are changed, a new
65
- `ActivityLog` object gets created.
66
- * Namespaces `Badge`, `Sash` and `BadgesSash` into `Merit` module. If your app
67
- uses any of those class names, you should add a `Merit::` prefix.
68
- * Removes undocumented `log:string` column from `merit_actions`.
69
-
70
- Run the following migration to upgrade from 1.4.0:
71
-
72
- ```ruby
73
- class UpgradeMeritTo150 < ActiveRecord::Migration
74
- def self.up
75
- remove_column :merit_actions, :log
76
- create_table "merit_activity_logs", :force => true do |t|
77
- t.integer "action_id"
78
- t.string "related_change_type"
79
- t.integer "related_change_id"
80
- t.string "description"
81
- t.datetime "created_at"
82
- end
83
- end
84
- end
85
- ```
86
-
87
- ## 1.4.0
88
-
89
- * Removed `BadgesSash#set_notified!` undocumented method from code base.
90
- * `:to` option for points and badges granting may now return an array of
91
- objects. For instance:
92
-
93
- ```ruby
94
- # All user's comments earn points
95
- score 2, to: :user_comments, on: 'comments#vote'
96
- ```
97
-
98
- ## to 1.3.0
99
-
100
- Adds two methods meant to display a leaderboard.
101
-
102
- * `Badge.last_granted(options = {})`. Accepts options:
103
- * `:since_date` (`1.month.ago` by default)
104
- * `:limit` (10 by default).
105
-
106
- It lists last 10 badge grants in the last month, unless you change query
107
- parameters.
108
-
109
- * `Merit::Score.top_scored(options = {})`. Accepts options:
110
- * `:table_name` (`users` by default)
111
- * `:since_date` (`1.month.ago` by default)
112
- * `:limit` (10 by default).
113
-
114
- It lists top 10 scored objects in the last month, unless you change query
115
- parameters.
116
-
117
- ## to 1.2.0
118
-
119
- * `Badge#grant_to(meritable_object)` no longer exists. Use
120
- `meritable_object.add_badge(badge_id)` (may add badges more than once).
121
- * `Badge#delete_from(meritable_object)` no longer exists. Use
122
- `meritable_object.rm_badge(badge_id)`.
123
-
124
- ## to 1.1.0
125
-
126
- Code refactorings. Support for Ruby 1.8.7 has been dropped.
127
-
128
- ## to 1.0.1
129
-
130
- Adds `Merit::Point#created_at` (`merit_score_points` table) attribute.
131
- May already be added if upgrading from merit < 1).
132
-
133
- ## to 1.0.0
134
-
135
- Points granting history is now logged.
136
-
137
- * Attribute `points` and method `points=` don't exist anymore (method `points`
138
- still works for querying number of points for a resource).
139
- * There are new methods `add_points(num_points, log_message)` and
140
- `remove_points(num_points, log_message)` in meritable resources to manually
141
- change their amount of points, keeping a history log.
142
-
143
- Run the following migration to have the new DB tables:
144
-
145
- class UpgradeMerit < ActiveRecord::Migration
146
- def self.up
147
- create_table :merit_scores do |t|
148
- t.references :sash
149
- t.string :category, :default => 'default'
150
- end
151
-
152
- create_table :merit_score_points do |t|
153
- t.references :score
154
- t.integer :num_points, :default => 0
155
- t.string :log
156
- t.datetime :created_at
157
- end
158
- end
159
-
160
- def self.down
161
- drop_table :merit_scores
162
- drop_table :merit_score_points
163
- end
164
- end
165
-
166
- # This will create a single point entry log, with previous points granted
167
- # to each meritable resource. Code example for a User class.
168
-
169
- class UpgradeMeritableResources < ActiveRecord::Migration
170
- def up
171
- User.find_each do |user|
172
- unless user.sash
173
- user.sash = Sash.create!
174
- user.save
175
- end
176
-
177
- user.sash.scores << Merit::Score.create
178
- user.add_points(user.read_attribute(:points), 'Initial merit points import.')
179
- end
180
- remove_column :users, :points
181
- end
182
- end
183
-
184
- If you get an `ActiveRecord::DangerousAttributeError: points` exception, you
185
- may need to temporarily tweak your meritable model, as explained in
186
- http://stackoverflow.com/a/1515571/356060.
187
-
188
-
189
- ## to 0.10.0
190
-
191
- `badges_sashes` table gets a primary key `id` column. Run the following migration:
192
-
193
- class AddIdToBadgesSashes < ActiveRecord::Migration
194
- def self.up
195
- add_column :badges_sashes, :id, :primary_key
196
- end
197
-
198
- def self.down
199
- remove_column :badges_sashes, :id
200
- end
201
- end
202
-
203
- `set_notified!(badge = nil, sash = nil)` no longer exists, just call `set_notified!`
204
- over the `badge_sash` object, with no parameters.
205
-
206
- ## to 0.9.0
207
-
208
- Adds `allow_multiple` boolean option to `Badge#grant_to` (defaults to
209
- `false`). If you used this method to grant a badge it will now grant only if
210
- resource doesn't have the badge.
211
-
212
- Use `badge.grant_to resource, :allow_multiple => true` where needed.
213
-
214
- ## to 0.8.0
215
-
216
- No changes needed. Adds Mongoid support.
217
-
218
- ## to 0.7.0
219
-
220
- No changes needed. Adds `:multiple` boolean option to `grant_on` to grant
221
- badge multiple times.
222
-
223
- ## to 0.6.0
224
-
225
- <tt>MeritBadgeRules</tt>, <tt>MeritPointRules</tt> and <tt>MeritRankRules</tt>
226
- are now namespaced into Merit module. Move and change:
227
-
228
- <pre>
229
- app/models/merit_{badge|point|rank}_rules.rb -> app/models/merit/{badge|point|rank}_rules.rb
230
- </pre>
231
- <pre>
232
- -class Merit{Badge|Point|Rank}Rules
233
- - include Merit::{Badge|Point|Rank}Rules
234
- +module Merit
235
- + class {Badge|Point|Rank}Rules
236
- + include Merit::{Badge|Point|Rank}RulesMethods
237
- </pre>
238
-
239
- ## to 0.5.0
240
-
241
- Add <tt>log:string</tt> column to <tt>merit_actions</tt> table.
242
-
243
- ## to 0.4.0
244
-
245
- Rankings are now integer attributes (<tt>level</tt>), they are not badges
246
- anymore. <tt>set_rank</tt> doesn't accept <tt>badge_name</tt> anymore.
247
-
248
- ## to 0.3.0
249
-
250
- Badges data is now stored in <tt>config/initializers/merit.rb</tt> using
251
- <tt>ambry</tt> syntax (not in the DB anymore, as that table needed to be in
252
- sync in all development environments).
253
-
254
- ## to 0.2.0
255
-
256
- Added <tt>had_errors</tt> boolean attribute to <tt>merit_actions</tt> table.