merit 0.9.4 → 0.9.5
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.
- data/Gemfile.lock +1 -1
- data/README.md +2 -8
- data/app/models/merit_action.rb +36 -32
- data/lib/merit/rules_badge.rb +1 -1
- data/lib/merit/rules_points.rb +7 -7
- data/merit.gemspec +1 -1
- data/test/dummy/app/models/merit/point_rules.rb +4 -3
- data/test/integration/navigation_test.rb +1 -1
- metadata +2 -2
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -4,11 +4,6 @@
|
|
4
4
|
|
5
5
|
[](http://travis-ci.org/tute/merit)
|
6
6
|
|
7
|
-
|
8
|
-
# Requirements
|
9
|
-
|
10
|
-
* ActiveRecord or Mongoid
|
11
|
-
|
12
7
|
# Installation
|
13
8
|
|
14
9
|
1. Add `gem 'merit'` to your `Gemfile`
|
@@ -79,9 +74,7 @@ method(s) defined in the `:to` option. Define rules on
|
|
79
74
|
## Examples
|
80
75
|
|
81
76
|
```ruby
|
82
|
-
score 10, :on =>
|
83
|
-
'users#update'
|
84
|
-
]
|
77
|
+
score 10, :to => :post_creator, :on => 'comments#create'
|
85
78
|
|
86
79
|
score 20, :on => [
|
87
80
|
'comments#create',
|
@@ -145,6 +138,7 @@ end
|
|
145
138
|
* :value parameter (for star voting for example) should be configurable
|
146
139
|
(depends on params[:value] on the controller).
|
147
140
|
* Make fixtures for integration testing (now creating objects on test file!).
|
141
|
+
* Rules should be cached? Calling *Rules.new more than once
|
148
142
|
|
149
143
|
---
|
150
144
|
|
data/app/models/merit_action.rb
CHANGED
@@ -4,44 +4,48 @@ class MeritAction
|
|
4
4
|
attr_accessible :user_id, :action_method, :action_value, :had_errors, :target_model, :target_id, :processed, :log
|
5
5
|
|
6
6
|
# Check rules defined for a merit_action
|
7
|
-
def check_rules
|
8
|
-
action_name = "#{target_model}\##{action_method}"
|
9
|
-
|
7
|
+
def check_rules
|
10
8
|
unless had_errors
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
9
|
+
check_badge_rules
|
10
|
+
check_point_rules
|
11
|
+
end
|
12
|
+
processed!
|
13
|
+
end
|
14
|
+
|
15
|
+
def check_badge_rules
|
16
|
+
defined_rules = Merit::BadgeRules.new.defined_rules["#{target_model}\##{action_method}"]
|
17
|
+
return if defined_rules.nil?
|
17
18
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
19
|
+
defined_rules.each do |rule|
|
20
|
+
rule.grant_or_delete_badge(self)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def check_point_rules
|
25
|
+
actions_to_point = Merit::PointRules.new.actions_to_point["#{target_model}\##{action_method}"]
|
26
|
+
return if actions_to_point.nil?
|
27
|
+
|
28
|
+
actions_to_point.each do |point_rule|
|
29
|
+
point_rule[:to].each do |to|
|
30
|
+
if to == :action_user
|
31
|
+
target = Merit.user_model.find_by_id(user_id)
|
32
|
+
if target.nil?
|
33
|
+
Rails.logger.warn "[merit] no user found to grant points"
|
34
|
+
return
|
35
|
+
end
|
36
|
+
else
|
37
|
+
begin
|
38
|
+
target = target_object.send(to)
|
39
|
+
rescue NoMethodError
|
40
|
+
Rails.logger.warn "[merit] No target_object found on check_rules."
|
41
|
+
return
|
36
42
|
end
|
37
|
-
target.points += point_rule[:score]
|
38
|
-
target.save
|
39
|
-
log!("points_granted:#{point_rule[:score]}")
|
40
43
|
end
|
44
|
+
target.points += point_rule[:score]
|
45
|
+
target.save
|
46
|
+
log!("points_granted:#{point_rule[:score]}")
|
41
47
|
end
|
42
48
|
end
|
43
|
-
|
44
|
-
processed!
|
45
49
|
end
|
46
50
|
|
47
51
|
# Action's target object
|
data/lib/merit/rules_badge.rb
CHANGED
data/lib/merit/rules_points.rb
CHANGED
@@ -6,14 +6,14 @@ module Merit
|
|
6
6
|
# Define rules on certaing actions for giving points
|
7
7
|
def score(points, *args, &block)
|
8
8
|
options = args.extract_options!
|
9
|
-
|
10
|
-
actions = options[:on].kind_of?(Array) ? options[:on] : [options[:on]]
|
11
9
|
options[:to] ||= [:action_user]
|
12
|
-
|
10
|
+
|
11
|
+
actions = Array.wrap(options[:on])
|
13
12
|
actions.each do |action|
|
14
|
-
actions_to_point[action]
|
15
|
-
|
16
|
-
:score => points
|
13
|
+
actions_to_point[action] ||= []
|
14
|
+
actions_to_point[action] << {
|
15
|
+
:score => points,
|
16
|
+
:to => Array.wrap(options[:to])
|
17
17
|
}
|
18
18
|
end
|
19
19
|
end
|
@@ -23,4 +23,4 @@ module Merit
|
|
23
23
|
@actions_to_point ||= {}
|
24
24
|
end
|
25
25
|
end
|
26
|
-
end
|
26
|
+
end
|
data/merit.gemspec
CHANGED
@@ -4,7 +4,7 @@ Gem::Specification.new do |s|
|
|
4
4
|
s.description = "Manage badges, points and rankings (reputation) of resources in a Rails application."
|
5
5
|
s.homepage = "http://github.com/tute/merit"
|
6
6
|
s.files = `git ls-files`.split("\n").reject{|f| f =~ /^\./ }
|
7
|
-
s.version = "0.9.
|
7
|
+
s.version = "0.9.5"
|
8
8
|
s.authors = ["Tute Costa"]
|
9
9
|
s.email = 'tutecosta@gmail.com'
|
10
10
|
s.add_dependency 'ambry', '~> 0.3.0'
|
@@ -7,9 +7,10 @@ module Merit
|
|
7
7
|
include Merit::PointRulesMethods
|
8
8
|
|
9
9
|
def initialize
|
10
|
-
|
11
|
-
|
12
|
-
|
10
|
+
# Thanks for voting point
|
11
|
+
score 1, :on => 'comments#vote'
|
12
|
+
# Points to voted user
|
13
|
+
score 5, :to => :user, :on => 'comments#vote'
|
13
14
|
|
14
15
|
score 20, :on => [
|
15
16
|
'comments#create',
|
@@ -104,7 +104,7 @@ class NavigationTest < ActiveSupport::IntegrationCase
|
|
104
104
|
|
105
105
|
visit "/comments/#{Comment.last.id}/vote/4"
|
106
106
|
user = User.first
|
107
|
-
assert_equal
|
107
|
+
assert_equal 46, user.points, 'Voting comments should grant 5 points for voted, and 1 point for voting'
|
108
108
|
end
|
109
109
|
|
110
110
|
test 'user workflow should grant levels at some times' do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: merit
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.
|
4
|
+
version: 0.9.5
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-08-
|
12
|
+
date: 2012-08-02 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: ambry
|