badgeable 0.3.0 → 0.3.2
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 +4 -2
- data/features/step_definitions/badging_steps.rb +35 -2
- data/features/unseen_badges.feature +18 -0
- data/lib/badgeable.rb +13 -1
- data/lib/badgeable/adapters/active_record_adapter.rb +6 -1
- data/lib/badgeable/adapters/mongoid_adapter.rb +28 -23
- data/lib/badgeable/adapters/mongoid_adapter/badge.rb +15 -0
- data/lib/badgeable/adapters/mongoid_adapter/badging.rb +11 -0
- data/lib/badgeable/version.rb +1 -1
- metadata +6 -3
data/README.rdoc
CHANGED
@@ -70,7 +70,9 @@ in Rails.root/lib/badges.rb
|
|
70
70
|
|
71
71
|
== Requirements
|
72
72
|
|
73
|
-
|
73
|
+
=== Supported ORMs
|
74
|
+
* Mongoid
|
75
|
+
* ActiveRecord
|
74
76
|
|
75
77
|
= License
|
76
78
|
|
@@ -94,4 +96,4 @@ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
94
96
|
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
95
97
|
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
96
98
|
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
97
|
-
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
99
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
@@ -37,18 +37,22 @@ When /^a diner creates (\d+) meals$/ do |num|
|
|
37
37
|
end
|
38
38
|
|
39
39
|
When /^the user has completed their profile$/ do
|
40
|
-
|
40
|
+
Given %Q{I am a user}
|
41
41
|
@user.profile_completeness = 100
|
42
42
|
@user.save
|
43
43
|
end
|
44
44
|
|
45
45
|
When /^the user has written (\d+) reviews$/ do |num|
|
46
|
-
|
46
|
+
Given %Q{I am a user}
|
47
47
|
num.to_i.times do
|
48
48
|
@user.reviews.create
|
49
49
|
end
|
50
50
|
end
|
51
51
|
|
52
|
+
Given /^I am a user$/ do
|
53
|
+
@user = User.create
|
54
|
+
end
|
55
|
+
|
52
56
|
Then /^the diner should have the "([^\"]*)" badge$/ do |badge_name|
|
53
57
|
@diner.should have_badge_named(badge_name)
|
54
58
|
end
|
@@ -56,3 +60,32 @@ end
|
|
56
60
|
Then /^the user should have the "([^\"]*)" badge$/ do |badge_name|
|
57
61
|
@user.should have_badge_named(badge_name)
|
58
62
|
end
|
63
|
+
|
64
|
+
Given /^I have (\d+) badges already$/ do |num|
|
65
|
+
Given %Q{I am a user}
|
66
|
+
num.to_i.times do |n|
|
67
|
+
badging = @user.award_badge("Badge #{n}")
|
68
|
+
badging.update_attributes(:seen => true)
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
Given /^I have just been awarded (\d+) badges$/ do |num|
|
73
|
+
Given %Q{I am a user}
|
74
|
+
num.to_i.times do |n|
|
75
|
+
@user.award_badge("Unseen Badge #{n}")
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
Then /^I should have (\d+) unseen badges$/ do |num|
|
80
|
+
@user.badgings.unseen.count.should eql(num.to_i)
|
81
|
+
end
|
82
|
+
|
83
|
+
Given /^I have (\d+) badges$/ do |num|
|
84
|
+
Given %Q{I have #{num} badges already}
|
85
|
+
end
|
86
|
+
|
87
|
+
When /^my unseen badges are marked as seen$/ do
|
88
|
+
@user.badgings.each do |badging|
|
89
|
+
badging.mark_as_seen
|
90
|
+
end
|
91
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
Feature: Badges are marked as unseen until a user sees that they've won them
|
2
|
+
So that I know which badges I've been awarded
|
3
|
+
As a user who just had badges awarded
|
4
|
+
I want to see my unseen badges, and once I've seen them, they should go away
|
5
|
+
|
6
|
+
Scenario: Unseen badges
|
7
|
+
Given I have 3 badges already
|
8
|
+
And I have just been awarded 2 badges
|
9
|
+
When I should have 2 unseen badges
|
10
|
+
|
11
|
+
Scenario: Mark badges as seen
|
12
|
+
Given I have 0 badges
|
13
|
+
And I have just been awarded 2 badges
|
14
|
+
When my unseen badges are marked as seen
|
15
|
+
Then I should have 0 unseen badges
|
16
|
+
|
17
|
+
|
18
|
+
|
data/lib/badgeable.rb
CHANGED
@@ -3,7 +3,17 @@ require 'active_support/callbacks'
|
|
3
3
|
require 'active_support/inflector'
|
4
4
|
require 'active_support/dependencies'
|
5
5
|
require 'active_support/concern'
|
6
|
-
|
6
|
+
|
7
|
+
# if defined?(Mongoid)
|
8
|
+
autoload :Badge, 'badgeable/adapters/mongoid_adapter/badge'
|
9
|
+
autoload :Badging, 'badgeable/adapters/mongoid_adapter/badging'
|
10
|
+
# end
|
11
|
+
#
|
12
|
+
# if defined?(ActiveRecord)
|
13
|
+
# autoload :Badge, 'badgeable/adapters/active_record/badge'
|
14
|
+
# autoload :Badging, 'badgeable/adapters/active_record/badging'
|
15
|
+
# end
|
16
|
+
|
7
17
|
|
8
18
|
module Badgeable
|
9
19
|
autoload :Adapters, 'badgeable/adapters'
|
@@ -18,4 +28,6 @@ module Badgeable
|
|
18
28
|
end
|
19
29
|
end
|
20
30
|
|
31
|
+
require 'badgeable/railtie' if defined?(Rails)
|
32
|
+
|
21
33
|
module Badgeable; end
|
@@ -25,6 +25,11 @@ end
|
|
25
25
|
|
26
26
|
class Badging < ActiveRecord::Base
|
27
27
|
belongs_to :badge
|
28
|
+
scope :unseen, {:where => {:seen => false}}
|
29
|
+
|
30
|
+
def mark_as_seen
|
31
|
+
update_attributes(:seen => true)
|
32
|
+
end
|
28
33
|
end
|
29
34
|
|
30
35
|
class Badge < ActiveRecord::Base
|
@@ -33,6 +38,6 @@ class Badge < ActiveRecord::Base
|
|
33
38
|
end
|
34
39
|
|
35
40
|
def icon
|
36
|
-
"/images/#{name}"
|
41
|
+
"/images/#{name.parameterize}.jpg"
|
37
42
|
end
|
38
43
|
end
|
@@ -2,34 +2,39 @@ module Badgeable
|
|
2
2
|
module Adapters
|
3
3
|
module MongoidAdapter
|
4
4
|
def self.included(receiver)
|
5
|
-
receiver.class_eval
|
6
|
-
|
7
|
-
|
5
|
+
receiver.class_eval do
|
6
|
+
embeds_many :badgings
|
7
|
+
end
|
8
8
|
|
9
|
-
|
10
|
-
|
9
|
+
::Badging.class_eval %Q{
|
10
|
+
embedded_in :#{receiver.to_s.underscore}, :inverse_of => :badgings
|
11
|
+
def receiver
|
12
|
+
#{receiver.to_s.underscore}
|
13
|
+
end
|
14
|
+
}
|
11
15
|
|
16
|
+
::Badge.class_eval %Q{
|
12
17
|
def recipients
|
13
|
-
#{receiver}.where(
|
18
|
+
#{receiver}.where("badgings.badge_id" => id)
|
14
19
|
end
|
15
20
|
}
|
21
|
+
receiver.send(:include, InstanceMethods)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
module InstanceMethods
|
26
|
+
def award_badge(name)
|
27
|
+
badge = Badge.find_or_create_by_name(name)
|
28
|
+
badgings.create(:badge_id => badge.id) unless has_badge?(badge)
|
29
|
+
end
|
30
|
+
|
31
|
+
def badges
|
32
|
+
Badge.where(:_id.in => badgings.map(&:badge_id))
|
33
|
+
end
|
34
|
+
|
35
|
+
def unseen_badges
|
36
|
+
Badge.where(:_id.in => badgings.unseen.map(&:badge_id))
|
16
37
|
end
|
17
38
|
end
|
18
39
|
end
|
19
|
-
end
|
20
|
-
|
21
|
-
class Badge
|
22
|
-
include Mongoid::Document
|
23
|
-
include Mongoid::Timestamps
|
24
|
-
|
25
|
-
field :name
|
26
|
-
index :name
|
27
|
-
|
28
|
-
def self.find_or_create_by_name(name)
|
29
|
-
criteria.where(:name => name).first || create(:name => name)
|
30
|
-
end
|
31
|
-
|
32
|
-
def icon
|
33
|
-
"/images/#{name}"
|
34
|
-
end
|
35
|
-
end
|
40
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
class Badge
|
2
|
+
include Mongoid::Document
|
3
|
+
include Mongoid::Timestamps
|
4
|
+
|
5
|
+
field :name
|
6
|
+
index :name
|
7
|
+
|
8
|
+
def self.find_or_create_by_name(name)
|
9
|
+
criteria.where(:name => name).first || create(:name => name)
|
10
|
+
end
|
11
|
+
|
12
|
+
def icon
|
13
|
+
"#{name.parameterize}.png"
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
class Badging
|
2
|
+
include Mongoid::Document
|
3
|
+
include Mongoid::Timestamps
|
4
|
+
referenced_in :badge
|
5
|
+
field :seen, :type => Boolean, :default => false
|
6
|
+
scope :unseen, {:where => {:seen => false}}
|
7
|
+
|
8
|
+
def mark_as_seen
|
9
|
+
update_attributes(:seen => true)
|
10
|
+
end
|
11
|
+
end
|
data/lib/badgeable/version.rb
CHANGED
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 3
|
8
|
-
-
|
9
|
-
version: 0.3.
|
8
|
+
- 2
|
9
|
+
version: 0.3.2
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Scott Burton
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-11-
|
17
|
+
date: 2010-11-03 00:00:00 -07:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -100,10 +100,13 @@ files:
|
|
100
100
|
- features/support/test_models/meal.rb
|
101
101
|
- features/support/test_models/review.rb
|
102
102
|
- features/support/test_models/user.rb
|
103
|
+
- features/unseen_badges.feature
|
103
104
|
- lib/badgeable.rb
|
104
105
|
- lib/badgeable/adapters.rb
|
105
106
|
- lib/badgeable/adapters/active_record_adapter.rb
|
106
107
|
- lib/badgeable/adapters/mongoid_adapter.rb
|
108
|
+
- lib/badgeable/adapters/mongoid_adapter/badge.rb
|
109
|
+
- lib/badgeable/adapters/mongoid_adapter/badging.rb
|
107
110
|
- lib/badgeable/award.rb
|
108
111
|
- lib/badgeable/config.rb
|
109
112
|
- lib/badgeable/dsl.rb
|