merit 0.2.0 → 0.2.1
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/README.rdoc
CHANGED
@@ -28,6 +28,8 @@ Define rules on +app/models/merit_badge_rules.rb+:
|
|
28
28
|
* :+to+: method name over target_object which obtains user to badge.
|
29
29
|
* :+temporary+ (boolean): if the condition doesn't hold and the receiver had
|
30
30
|
the badge, it gets removed. +false+ by default (badges are kept forever).
|
31
|
+
* :+model_name+ (string): when controller's name differs from the model being
|
32
|
+
worked (like RegistrationsController for User model).
|
31
33
|
* &+block+
|
32
34
|
* empty (always grants)
|
33
35
|
* a block which evaluates to boolean (recieves target object as parameter)
|
@@ -125,6 +127,8 @@ To run the test application inside this gem follow:
|
|
125
127
|
= To-do list
|
126
128
|
|
127
129
|
* Test points granting with different options.
|
130
|
+
* Test model_name attribute for badge_rules.
|
131
|
+
* Add model_name option on rank and point rules.
|
128
132
|
* Ranking should not be badges, so .badges doesn't return them (2-stars shouldn't be badge).
|
129
133
|
* grep -r 'FIXME\|TODO' .
|
130
134
|
* :value parameter (for star voting for example) should be configurable (depends
|
data/app/models/merit_action.rb
CHANGED
@@ -38,9 +38,10 @@ class MeritAction < ActiveRecord::Base
|
|
38
38
|
end
|
39
39
|
|
40
40
|
# Action's target object
|
41
|
-
def target_object
|
42
|
-
|
43
|
-
klass.
|
41
|
+
def target_object(model_name = nil)
|
42
|
+
# Grab custom model_name from Rule, or target_model from MeritAction triggered
|
43
|
+
klass = model_name || target_model.singularize
|
44
|
+
klass.camelize.constantize.find_by_id(target_id)
|
44
45
|
end
|
45
46
|
|
46
47
|
# Mark merit_action as processed
|
@@ -33,7 +33,7 @@ class MeritBadgeRules
|
|
33
33
|
# end
|
34
34
|
|
35
35
|
# Changes his name by one wider than 4 chars (arbitrary ruby code case)
|
36
|
-
# grant_on '
|
36
|
+
# grant_on 'registrations#update', :badge => 'autobiographer', :temporary => true, :model_name => 'User' do |user|
|
37
37
|
# user.name.length > 4
|
38
38
|
# end
|
39
39
|
end
|
@@ -10,7 +10,7 @@ module Merit
|
|
10
10
|
point_rules = ::MeritPointRules.new
|
11
11
|
if badge_rules.defined_rules[action].present? || point_rules.actions_to_point[action].present?
|
12
12
|
target_id = params[:id]
|
13
|
-
# TODO: target_object should be configurable (now it's singularized controller name)
|
13
|
+
# TODO: target_object should be configurable (now it's singularized controller name) // Should be using model_name? Only for badges now
|
14
14
|
target_object = instance_variable_get(:"@#{controller_name.singularize}")
|
15
15
|
unless target_id =~ /^[0-9]+$/ # id nil, or string (friendly_id)?
|
16
16
|
target_id = target_object.try(:id)
|
data/lib/merit/rule.rb
CHANGED
@@ -2,7 +2,7 @@ module Merit
|
|
2
2
|
# Rules has a badge name and level, a target to badge, a conditions block
|
3
3
|
# and a temporary option.
|
4
4
|
class Rule
|
5
|
-
attr_accessor :badge_name, :level, :to, :temporary, :block
|
5
|
+
attr_accessor :badge_name, :level, :to, :temporary, :block, :model_name
|
6
6
|
|
7
7
|
# Does this rule's condition block apply?
|
8
8
|
def applies?(target_obj = nil)
|
@@ -38,7 +38,7 @@ module Merit
|
|
38
38
|
# then remove it.
|
39
39
|
def grant_or_delete_badge(action)
|
40
40
|
if sash = sash_to_badge(action)
|
41
|
-
if applies? action.target_object
|
41
|
+
if applies? action.target_object(model_name)
|
42
42
|
badge.grant_to sash
|
43
43
|
elsif temporary?
|
44
44
|
badge.delete_from sash
|
@@ -54,10 +54,10 @@ module Merit
|
|
54
54
|
when :action_user
|
55
55
|
User.find_by_id(action.user_id) # _by_id doens't raise ActiveRecord::RecordNotFound
|
56
56
|
when :itself
|
57
|
-
action.target_object
|
57
|
+
action.target_object(model_name)
|
58
58
|
else
|
59
59
|
begin
|
60
|
-
action.target_object.send(to)
|
60
|
+
action.target_object(model_name).send(to)
|
61
61
|
rescue
|
62
62
|
Rails.logger.warn "[merit] #{action.target_model.singularize}.find(#{action.target_id}) not found, no badges giving today"
|
63
63
|
return
|
data/lib/merit/rules_badge.rb
CHANGED
@@ -40,6 +40,7 @@ module Merit
|
|
40
40
|
rule.level = options[:level]
|
41
41
|
rule.to = options[:to] || :action_user
|
42
42
|
rule.temporary = options[:temporary] || false
|
43
|
+
rule.model_name = options[:model_name] || action.split('#')[0]
|
43
44
|
rule.block = block
|
44
45
|
|
45
46
|
actions = action.kind_of?(String) ? [action] : action
|
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.2.
|
4
|
+
version: 0.2.1
|
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-02-
|
12
|
+
date: 2012-02-09 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
14
|
description: General reputation Rails engine.
|
15
15
|
email: tutecosta@gmail.com
|