merit 2.3.2 → 2.3.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/NEWS.md +8 -0
- data/README.md +38 -5
- data/lib/generators/active_record/merit_generator.rb +2 -2
- data/lib/generators/active_record/remove_generator.rb +4 -2
- data/lib/generators/active_record/templates/{add_fields_to_model.rb → add_merit_fields_to_model.rb} +1 -1
- data/lib/generators/active_record/templates/{remove_fields_from_model.rb → remove_merit_fields_from_model.rb} +1 -1
- data/lib/merit/models/active_record/merit/badges_sash.rb +3 -0
- data/lib/merit/models/base/sash.rb +2 -2
- data/merit.gemspec +5 -4
- data/test/integration/navigation_test.rb +8 -0
- metadata +98 -11
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5d79f50b24ec0f6cf605b5b77fbd9d2b96c41f16
|
4
|
+
data.tar.gz: 862c1a7af32018b9344bdccb43d462b97d7339e0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 783a96fce0128b18e34eba63999a84675011576d8ca0031251d5c4fe5d967007488616b0afe07258b0df2ac1b5c3e853e95b10e712b35a3b93f2e943b94e7c65
|
7
|
+
data.tar.gz: 0453aa9d1395d6a6d1f86f11276d076ba1d07a2e13b4622b3e07e077cc445e5055c64e99103a5074af555ead4217d05c749f2fc2918d3c9f4e7b264ec1ff04dc
|
data/NEWS.md
CHANGED
@@ -2,6 +2,14 @@
|
|
2
2
|
|
3
3
|
User-visible changes worth mentioning.
|
4
4
|
|
5
|
+
## 2.3.3
|
6
|
+
|
7
|
+
- [#215] Bug fix in API where a `BadgeSash` would be created without failures
|
8
|
+
with a nil `badge_id`.
|
9
|
+
- Add validations to `BadgesSash`
|
10
|
+
- Rename generated migration files to explicitly name merit
|
11
|
+
- README improvements
|
12
|
+
|
5
13
|
## 2.3.2
|
6
14
|
|
7
15
|
- [#218] Implement I18n for internationalization support
|
data/README.md
CHANGED
@@ -26,7 +26,9 @@ and Rankings.
|
|
26
26
|
- [Defining Rules](#defining-rules-2)
|
27
27
|
- [Examples](#examples-2)
|
28
28
|
- [Displaying Rankings](#displaying-rankings)
|
29
|
+
- [How merit finds the target object](#how-merit-finds-the-target-object)
|
29
30
|
- [Getting Notifications](#getting-notifications)
|
31
|
+
- [I18n](#i18n)
|
30
32
|
- [Uninstalling Merit](#uninstalling-merit)
|
31
33
|
|
32
34
|
|
@@ -135,9 +137,9 @@ badges:
|
|
135
137
|
|
136
138
|
```erb
|
137
139
|
<ul>
|
138
|
-
<% current_user.badges.each do |badge| %>
|
139
|
-
|
140
|
-
<% end %>
|
140
|
+
<% current_user.badges.each do |badge| %>
|
141
|
+
<li><%= badge.name %></li>
|
142
|
+
<% end %>
|
141
143
|
</ul>
|
142
144
|
```
|
143
145
|
|
@@ -155,9 +157,9 @@ action user or to the method(s) defined in the `:to` option. Define rules on
|
|
155
157
|
* `score`
|
156
158
|
* `Integer`
|
157
159
|
* `Proc`, or any object that accepts `call` which takes one argument, where
|
158
|
-
the
|
160
|
+
the target object is passed in and the return value is used as the score.
|
159
161
|
* `:on` action as string or array of strings (like `controller#action`, similar to Rails routes)
|
160
|
-
* `:to` method(s) to send to the
|
162
|
+
* `:to` method(s) to send to the target object (who should be scored?)
|
161
163
|
* `:model_name` (optional) to specify the model name if it cannot be guessed
|
162
164
|
from the controller. (e.g. `model_name: 'User'` for `RegistrationsController`,
|
163
165
|
or `model_name: 'Comment'` for `Api::CommentsController`)
|
@@ -258,6 +260,37 @@ end
|
|
258
260
|
```
|
259
261
|
|
260
262
|
|
263
|
+
# How merit finds the target object
|
264
|
+
|
265
|
+
Merit fetches the rule’s target object (the parameter it receives) from its
|
266
|
+
`:model_name` option, or from the controller’s instance variable.
|
267
|
+
|
268
|
+
To read it from the controller merit searches for the instance variable named
|
269
|
+
after the singularized controller name. For example, a rule like:
|
270
|
+
|
271
|
+
```ruby
|
272
|
+
grant_on 'comments#update', badge_id: 1 do |target_object|
|
273
|
+
# target_object would be better named comment in this sample
|
274
|
+
end
|
275
|
+
```
|
276
|
+
|
277
|
+
Would make merit try to find the `@comment` instance variable in the
|
278
|
+
`CommentsController#update` action. If the rule had the `:model_name` option
|
279
|
+
specified:
|
280
|
+
|
281
|
+
```ruby
|
282
|
+
grant_on 'comments#update', badge_id: 1, model_name: "Article" do |target_object|
|
283
|
+
# target_object would be better named article in this sample
|
284
|
+
end
|
285
|
+
```
|
286
|
+
|
287
|
+
Merit would fetch the `Article` object from the database, found by the `:id`
|
288
|
+
param sent in that `update` action.
|
289
|
+
|
290
|
+
If none of these methods find the target, Merit will log a `no target_obj`
|
291
|
+
warning, with a comment to check the configuration for the rule.
|
292
|
+
|
293
|
+
|
261
294
|
# Getting Notifications
|
262
295
|
|
263
296
|
You can get observers notified any time merit changes reputation in your
|
@@ -13,8 +13,8 @@ module ActiveRecord
|
|
13
13
|
end
|
14
14
|
|
15
15
|
def copy_migrations_and_model
|
16
|
-
migration_template '
|
17
|
-
"db/migrate/
|
16
|
+
migration_template 'add_merit_fields_to_model.rb',
|
17
|
+
"db/migrate/add_merit_fields_to_#{table_name}.rb"
|
18
18
|
end
|
19
19
|
end
|
20
20
|
end
|
@@ -16,8 +16,10 @@ module ActiveRecord
|
|
16
16
|
migration_template 'remove_merit_tables.rb',
|
17
17
|
'db/migrate/remove_merit_tables.rb'
|
18
18
|
|
19
|
-
migration_template
|
20
|
-
|
19
|
+
migration_template(
|
20
|
+
'remove_merit_fields_from_model.rb',
|
21
|
+
"db/migrate/remove_merit_fields_from_#{table_name}.rb"
|
22
|
+
)
|
21
23
|
end
|
22
24
|
end
|
23
25
|
end
|
data/lib/generators/active_record/templates/{add_fields_to_model.rb → add_merit_fields_to_model.rb}
RENAMED
@@ -1,4 +1,4 @@
|
|
1
|
-
class
|
1
|
+
class AddMeritFieldsTo<%= table_name.camelize %> < ActiveRecord::Migration
|
2
2
|
def change
|
3
3
|
add_column :<%= table_name %>, :sash_id, :integer
|
4
4
|
add_column :<%= table_name %>, :level, :integer, :default => 0
|
@@ -1,10 +1,13 @@
|
|
1
1
|
module Merit
|
2
2
|
class BadgesSash < ActiveRecord::Base
|
3
3
|
include Base::BadgesSash
|
4
|
+
|
4
5
|
has_many :activity_logs,
|
5
6
|
class_name: 'Merit::ActivityLog',
|
6
7
|
as: :related_change
|
7
8
|
|
9
|
+
validates_presence_of :badge_id, :sash
|
10
|
+
|
8
11
|
attr_accessible :badge_id if show_attr_accessible?
|
9
12
|
end
|
10
13
|
end
|
@@ -10,13 +10,13 @@ module Merit
|
|
10
10
|
end
|
11
11
|
|
12
12
|
def add_badge(badge_id)
|
13
|
-
bs = Merit::BadgesSash.new(badge_id: badge_id)
|
13
|
+
bs = Merit::BadgesSash.new(badge_id: badge_id.to_i)
|
14
14
|
badges_sashes << bs
|
15
15
|
bs
|
16
16
|
end
|
17
17
|
|
18
18
|
def rm_badge(badge_id)
|
19
|
-
badges_sashes.where(badge_id: badge_id).first.try(:destroy)
|
19
|
+
badges_sashes.where(badge_id: badge_id.to_i).first.try(:destroy)
|
20
20
|
end
|
21
21
|
|
22
22
|
# Retrieve the number of points from a category
|
data/merit.gemspec
CHANGED
@@ -1,11 +1,12 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = "merit"
|
3
|
-
s.summary = "
|
4
|
-
s.description = "Manage badges, points and rankings (reputation)
|
5
|
-
s.homepage = "
|
3
|
+
s.summary = "Reputation engine for Rails apps"
|
4
|
+
s.description = "Manage badges, points and rankings (reputation) in your Rails app."
|
5
|
+
s.homepage = "https://github.com/merit-gem/merit"
|
6
6
|
s.files = `git ls-files`.split("\n").reject{|f| f =~ /^\./ }
|
7
|
+
s.test_files = `git ls-files -- test/*`.split("\n")
|
7
8
|
s.license = 'MIT'
|
8
|
-
s.version = '2.3.
|
9
|
+
s.version = '2.3.3'
|
9
10
|
s.authors = ["Tute Costa"]
|
10
11
|
s.email = 'tutecosta@gmail.com'
|
11
12
|
|
@@ -36,6 +36,14 @@ class NavigationTest < ActionDispatch::IntegrationTest
|
|
36
36
|
|
37
37
|
user.rm_badge badge.id
|
38
38
|
assert_equal [badge], user.reload.badges
|
39
|
+
|
40
|
+
assert_raise NoMethodError do
|
41
|
+
user.add_badge badge
|
42
|
+
end
|
43
|
+
|
44
|
+
assert_raise NoMethodError do
|
45
|
+
user.rm_badge badge
|
46
|
+
end
|
39
47
|
end
|
40
48
|
|
41
49
|
test 'Remove inexistent badge should do nothing' do
|
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: 2.3.
|
4
|
+
version: 2.3.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tute Costa
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-02-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ambry
|
@@ -108,8 +108,7 @@ dependencies:
|
|
108
108
|
- - '='
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: 1.1.0
|
111
|
-
description: Manage badges, points and rankings (reputation)
|
112
|
-
application.
|
111
|
+
description: Manage badges, points and rankings (reputation) in your Rails app.
|
113
112
|
email: tutecosta@gmail.com
|
114
113
|
executables: []
|
115
114
|
extensions: []
|
@@ -129,14 +128,14 @@ files:
|
|
129
128
|
- lib/generators/active_record/install_generator.rb
|
130
129
|
- lib/generators/active_record/merit_generator.rb
|
131
130
|
- lib/generators/active_record/remove_generator.rb
|
132
|
-
- lib/generators/active_record/templates/
|
131
|
+
- lib/generators/active_record/templates/add_merit_fields_to_model.rb
|
133
132
|
- lib/generators/active_record/templates/add_target_data_to_merit_actions.rb
|
134
133
|
- lib/generators/active_record/templates/create_badges_sashes.rb
|
135
134
|
- lib/generators/active_record/templates/create_merit_actions.rb
|
136
135
|
- lib/generators/active_record/templates/create_merit_activity_logs.rb
|
137
136
|
- lib/generators/active_record/templates/create_sashes.rb
|
138
137
|
- lib/generators/active_record/templates/create_scores_and_points.rb
|
139
|
-
- lib/generators/active_record/templates/
|
138
|
+
- lib/generators/active_record/templates/remove_merit_fields_from_model.rb
|
140
139
|
- lib/generators/active_record/templates/remove_merit_tables.rb
|
141
140
|
- lib/generators/active_record/upgrade_generator.rb
|
142
141
|
- lib/generators/merit/install_generator.rb
|
@@ -262,7 +261,7 @@ files:
|
|
262
261
|
- test/unit/sash_test.rb
|
263
262
|
- test/unit/score_test.rb
|
264
263
|
- test/unit/target_finder_test.rb
|
265
|
-
homepage:
|
264
|
+
homepage: https://github.com/merit-gem/merit
|
266
265
|
licenses:
|
267
266
|
- MIT
|
268
267
|
metadata: {}
|
@@ -282,9 +281,97 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
282
281
|
version: '0'
|
283
282
|
requirements: []
|
284
283
|
rubyforge_project:
|
285
|
-
rubygems_version: 2.
|
284
|
+
rubygems_version: 2.5.1
|
286
285
|
signing_key:
|
287
286
|
specification_version: 4
|
288
|
-
summary:
|
289
|
-
test_files:
|
290
|
-
|
287
|
+
summary: Reputation engine for Rails apps
|
288
|
+
test_files:
|
289
|
+
- test/dummy/Rakefile
|
290
|
+
- test/dummy/app/controllers/admin/users_controller.rb
|
291
|
+
- test/dummy/app/controllers/api/comments_controller.rb
|
292
|
+
- test/dummy/app/controllers/api/users_controller.rb
|
293
|
+
- test/dummy/app/controllers/application_controller.rb
|
294
|
+
- test/dummy/app/controllers/comments_controller.rb
|
295
|
+
- test/dummy/app/controllers/registrations_controller.rb
|
296
|
+
- test/dummy/app/controllers/users_controller.rb
|
297
|
+
- test/dummy/app/helpers/application_helper.rb
|
298
|
+
- test/dummy/app/models/address.rb
|
299
|
+
- test/dummy/app/models/comment.rb
|
300
|
+
- test/dummy/app/models/dummy_observer.rb
|
301
|
+
- test/dummy/app/models/merit/badge_rules.rb
|
302
|
+
- test/dummy/app/models/merit/point_rules.rb
|
303
|
+
- test/dummy/app/models/merit/rank_rules.rb
|
304
|
+
- test/dummy/app/models/user.rb
|
305
|
+
- test/dummy/app/views/admin/users/index.html.erb
|
306
|
+
- test/dummy/app/views/comments/_form.html.erb
|
307
|
+
- test/dummy/app/views/comments/edit.html.erb
|
308
|
+
- test/dummy/app/views/comments/index.html.erb
|
309
|
+
- test/dummy/app/views/comments/new.html.erb
|
310
|
+
- test/dummy/app/views/comments/show.html.erb
|
311
|
+
- test/dummy/app/views/layouts/application.html.erb
|
312
|
+
- test/dummy/app/views/users/_form.html.erb
|
313
|
+
- test/dummy/app/views/users/edit.html.erb
|
314
|
+
- test/dummy/app/views/users/index.html.erb
|
315
|
+
- test/dummy/app/views/users/new.html.erb
|
316
|
+
- test/dummy/app/views/users/show.html.erb
|
317
|
+
- test/dummy/config.ru
|
318
|
+
- test/dummy/config/application.rb
|
319
|
+
- test/dummy/config/boot.rb
|
320
|
+
- test/dummy/config/database.yml
|
321
|
+
- test/dummy/config/environment.rb
|
322
|
+
- test/dummy/config/environments/development.rb
|
323
|
+
- test/dummy/config/environments/production.rb
|
324
|
+
- test/dummy/config/environments/test.rb
|
325
|
+
- test/dummy/config/initializers/backtrace_silencers.rb
|
326
|
+
- test/dummy/config/initializers/inflections.rb
|
327
|
+
- test/dummy/config/initializers/merit.rb
|
328
|
+
- test/dummy/config/initializers/mime_types.rb
|
329
|
+
- test/dummy/config/initializers/secret_token.rb
|
330
|
+
- test/dummy/config/initializers/session_store.rb
|
331
|
+
- test/dummy/config/locales/en.yml
|
332
|
+
- test/dummy/config/mongoid.yml
|
333
|
+
- test/dummy/config/routes.rb
|
334
|
+
- test/dummy/db/migrate/20110421191249_create_users.rb
|
335
|
+
- test/dummy/db/migrate/20110421191250_create_comments.rb
|
336
|
+
- test/dummy/db/migrate/20120318022220_add_fields_to_users.rb
|
337
|
+
- test/dummy/db/migrate/20130321082817_add_fields_to_comments.rb
|
338
|
+
- test/dummy/db/migrate/20130329224406_create_merit_actions.rb
|
339
|
+
- test/dummy/db/migrate/20130329224407_create_merit_activity_logs.rb
|
340
|
+
- test/dummy/db/migrate/20130329224408_create_sashes.rb
|
341
|
+
- test/dummy/db/migrate/20130329224409_create_badges_sashes.rb
|
342
|
+
- test/dummy/db/migrate/20130329224410_create_scores_and_points.rb
|
343
|
+
- test/dummy/db/migrate/20140211144001_create_addresses.rb
|
344
|
+
- test/dummy/db/migrate/20140819133931_add_target_data_to_merit_actions.rb
|
345
|
+
- test/dummy/db/migrate/20140906225844_create_players.rb
|
346
|
+
- test/dummy/db/schema.rb
|
347
|
+
- test/dummy/db/seeds.rb
|
348
|
+
- test/dummy/public/404.html
|
349
|
+
- test/dummy/public/422.html
|
350
|
+
- test/dummy/public/500.html
|
351
|
+
- test/dummy/public/favicon.ico
|
352
|
+
- test/dummy/public/javascripts/application.js
|
353
|
+
- test/dummy/public/javascripts/controls.js
|
354
|
+
- test/dummy/public/javascripts/dragdrop.js
|
355
|
+
- test/dummy/public/javascripts/effects.js
|
356
|
+
- test/dummy/public/javascripts/prototype.js
|
357
|
+
- test/dummy/public/javascripts/rails.js
|
358
|
+
- test/dummy/public/rails.js
|
359
|
+
- test/dummy/public/stylesheets/.gitkeep
|
360
|
+
- test/dummy/public/stylesheets/scaffold.css
|
361
|
+
- test/dummy/script/rails
|
362
|
+
- test/integration/navigation_test.rb
|
363
|
+
- test/orm/active_record.rb
|
364
|
+
- test/orm/mongoid.rb
|
365
|
+
- test/orm_models/active_record.rb
|
366
|
+
- test/orm_models/mongoid.rb
|
367
|
+
- test/support/integration_case.rb
|
368
|
+
- test/test_helper.rb
|
369
|
+
- test/unit/action_test.rb
|
370
|
+
- test/unit/base_target_finder_test.rb
|
371
|
+
- test/unit/merit_unit_test.rb
|
372
|
+
- test/unit/rule_unit_test.rb
|
373
|
+
- test/unit/rules_matcher_test.rb
|
374
|
+
- test/unit/sash_finder_test.rb
|
375
|
+
- test/unit/sash_test.rb
|
376
|
+
- test/unit/score_test.rb
|
377
|
+
- test/unit/target_finder_test.rb
|