treasure_hunt 0.1.1 → 0.1.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 +43 -0
- data/VERSION +1 -1
- data/lib/generators/treasure_hunt/install/templates/migration.rb +1 -0
- data/lib/treasure_hunt/achievement.rb +1 -0
- data/lib/treasure_hunt/treasure_hunter.rb +2 -2
- data/spec/support/active_record.rb +10 -0
- data/spec/treasure_hunt/treasure_hunter_spec.rb +14 -0
- data/treasure_hunt.gemspec +2 -2
- metadata +25 -25
data/README.rdoc
CHANGED
@@ -2,6 +2,49 @@
|
|
2
2
|
|
3
3
|
DSL and models for application User's Reward management.
|
4
4
|
|
5
|
+
== Installation
|
6
|
+
|
7
|
+
Add to your Gemfile
|
8
|
+
|
9
|
+
gem 'treasure_hunt'
|
10
|
+
|
11
|
+
Run generator
|
12
|
+
|
13
|
+
rails generate treasure_hunt:install
|
14
|
+
|
15
|
+
Add :points column to your users table
|
16
|
+
|
17
|
+
rails generate migration AddPointsToUsers points:integer
|
18
|
+
|
19
|
+
Run migrations
|
20
|
+
|
21
|
+
rake db:migrate
|
22
|
+
|
23
|
+
Finally add 'acts_as_treasure_hunter' to your model:
|
24
|
+
|
25
|
+
class User < ActiveRecord:Base
|
26
|
+
acts_as_treasure_hunter
|
27
|
+
# ...
|
28
|
+
end
|
29
|
+
|
30
|
+
== Usage
|
31
|
+
|
32
|
+
Set up your rewards (only once)
|
33
|
+
|
34
|
+
Reward.create(:name => 'Invite friends', :points => 50, :every => 1.day)
|
35
|
+
|
36
|
+
Use it!
|
37
|
+
|
38
|
+
jane = User.find(42)
|
39
|
+
|
40
|
+
if @jane.can_achieve?(:invite_friends)
|
41
|
+
jane.achieve!(:invite_friends)
|
42
|
+
jane.reload
|
43
|
+
end
|
44
|
+
|
45
|
+
@points = jane.points
|
46
|
+
@time_to_unlock = @jane.time_to_unlock(:invite_friends)
|
47
|
+
|
5
48
|
== Contributing to treasure_hunt
|
6
49
|
|
7
50
|
* Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.2
|
@@ -33,9 +33,9 @@ module TreasureHunt
|
|
33
33
|
::Achievement.new(:user => self, :reward => reward).valid?
|
34
34
|
end
|
35
35
|
|
36
|
-
def achieve!(reward)
|
36
|
+
def achieve!(reward, target=nil)
|
37
37
|
reward = ::Reward.find_by_name(reward.to_s.humanize) if reward.is_a? Symbol
|
38
|
-
achievement = ::Achievement.create(:reward => reward)
|
38
|
+
achievement = ::Achievement.create(:reward => reward, :targetable => target)
|
39
39
|
self.achievements << achievement
|
40
40
|
|
41
41
|
achievement
|
@@ -15,6 +15,7 @@ ActiveRecord::Schema.define do
|
|
15
15
|
t.references :user
|
16
16
|
t.references :reward
|
17
17
|
t.integer :points
|
18
|
+
t.references :targetable, :polymorphic => true
|
18
19
|
t.timestamps
|
19
20
|
end
|
20
21
|
|
@@ -24,6 +25,10 @@ ActiveRecord::Schema.define do
|
|
24
25
|
t.integer :every, :default => 0, :null => false
|
25
26
|
t.integer :limit, :default => 1, :null => false
|
26
27
|
end
|
28
|
+
|
29
|
+
create_table :chosen_answers, :force => true do |t|
|
30
|
+
t.integer :answer_id
|
31
|
+
end
|
27
32
|
end
|
28
33
|
|
29
34
|
class User < ActiveRecord::Base
|
@@ -32,8 +37,13 @@ end
|
|
32
37
|
|
33
38
|
class Achievement < ActiveRecord::Base
|
34
39
|
include TreasureHunt::Achievement
|
40
|
+
|
41
|
+
has_one :chosen_answer, :as => :targetable
|
35
42
|
end
|
36
43
|
|
37
44
|
class Reward < ActiveRecord::Base
|
38
45
|
include TreasureHunt::Reward
|
39
46
|
end
|
47
|
+
|
48
|
+
class ChosenAnswer < ActiveRecord::Base
|
49
|
+
end
|
@@ -5,6 +5,7 @@ describe TreasureHunt::Hunter do
|
|
5
5
|
User.delete_all
|
6
6
|
@jane = User.create(:name => 'Jane')
|
7
7
|
@joe = User.create(:name => 'Joe')
|
8
|
+
@chosen_answer = ChosenAnswer.create(:answer_id => 1)
|
8
9
|
end
|
9
10
|
|
10
11
|
context "when achieved something" do
|
@@ -19,6 +20,12 @@ describe TreasureHunt::Hunter do
|
|
19
20
|
@jane.rewards.should =~ [@reward]
|
20
21
|
end
|
21
22
|
|
23
|
+
it "should have target" do
|
24
|
+
@jane.achievements.create(:reward => @reward, :targetable => @chosen_answer)
|
25
|
+
|
26
|
+
@jane.achievements.last.targetable.should == @chosen_answer
|
27
|
+
end
|
28
|
+
|
22
29
|
it "should receive points" do
|
23
30
|
@jane.achievements.size.should == 0
|
24
31
|
3.times do
|
@@ -70,6 +77,7 @@ describe TreasureHunt::Hunter do
|
|
70
77
|
before do
|
71
78
|
Reward.delete_all
|
72
79
|
@invite_friends = Reward.create(:name => 'Invite friends', :points => 50, :every => 1.day)
|
80
|
+
@corret_answer = Reward.create(:name => 'Correct answer', :points => 50)
|
73
81
|
end
|
74
82
|
|
75
83
|
it "should achieve and lock reward" do
|
@@ -80,5 +88,11 @@ describe TreasureHunt::Hunter do
|
|
80
88
|
@jane.can_achieve?(:invite_friends).should be_false
|
81
89
|
@jane.time_to_unlock(:invite_friends).should <= 1.day
|
82
90
|
end
|
91
|
+
|
92
|
+
it "should achieve and log target" do
|
93
|
+
@jane.can_achieve?(:correct_answer).should be_true
|
94
|
+
@jane.achieve!(:correct_answer, @chosen_answer).should be_persisted
|
95
|
+
@jane.achievements.last.targetable.should == @chosen_answer
|
96
|
+
end
|
83
97
|
end
|
84
98
|
end
|
data/treasure_hunt.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{treasure_hunt}
|
8
|
-
s.version = "0.1.
|
8
|
+
s.version = "0.1.2"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = [%q{Jan Dupal}]
|
12
|
-
s.date = %q{2011-
|
12
|
+
s.date = %q{2011-12-12}
|
13
13
|
s.description = %q{Allow your application users to start fantastic hunt for big treasure}
|
14
14
|
s.email = %q{dupal.j@gmail.com}
|
15
15
|
s.extra_rdoc_files = [
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: treasure_hunt
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2011-
|
12
|
+
date: 2011-12-12 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activerecord
|
16
|
-
requirement: &
|
16
|
+
requirement: &77866510 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *77866510
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: guard
|
27
|
-
requirement: &
|
27
|
+
requirement: &77866230 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *77866230
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: guard-rspec
|
38
|
-
requirement: &
|
38
|
+
requirement: &77865930 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: '0'
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *77865930
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: rb-inotify
|
49
|
-
requirement: &
|
49
|
+
requirement: &77865650 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ! '>='
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: '0'
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *77865650
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: libnotify
|
60
|
-
requirement: &
|
60
|
+
requirement: &77865360 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ! '>='
|
@@ -65,10 +65,10 @@ dependencies:
|
|
65
65
|
version: '0'
|
66
66
|
type: :development
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *77865360
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: rspec
|
71
|
-
requirement: &
|
71
|
+
requirement: &77865110 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - ~>
|
@@ -76,10 +76,10 @@ dependencies:
|
|
76
76
|
version: 2.5.0
|
77
77
|
type: :development
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *77865110
|
80
80
|
- !ruby/object:Gem::Dependency
|
81
81
|
name: generator_spec
|
82
|
-
requirement: &
|
82
|
+
requirement: &77864850 !ruby/object:Gem::Requirement
|
83
83
|
none: false
|
84
84
|
requirements:
|
85
85
|
- - ! '>='
|
@@ -87,10 +87,10 @@ dependencies:
|
|
87
87
|
version: '0'
|
88
88
|
type: :development
|
89
89
|
prerelease: false
|
90
|
-
version_requirements: *
|
90
|
+
version_requirements: *77864850
|
91
91
|
- !ruby/object:Gem::Dependency
|
92
92
|
name: bundler
|
93
|
-
requirement: &
|
93
|
+
requirement: &77864580 !ruby/object:Gem::Requirement
|
94
94
|
none: false
|
95
95
|
requirements:
|
96
96
|
- - ~>
|
@@ -98,10 +98,10 @@ dependencies:
|
|
98
98
|
version: 1.0.0
|
99
99
|
type: :development
|
100
100
|
prerelease: false
|
101
|
-
version_requirements: *
|
101
|
+
version_requirements: *77864580
|
102
102
|
- !ruby/object:Gem::Dependency
|
103
103
|
name: jeweler
|
104
|
-
requirement: &
|
104
|
+
requirement: &77864290 !ruby/object:Gem::Requirement
|
105
105
|
none: false
|
106
106
|
requirements:
|
107
107
|
- - ~>
|
@@ -109,10 +109,10 @@ dependencies:
|
|
109
109
|
version: 1.6.4
|
110
110
|
type: :development
|
111
111
|
prerelease: false
|
112
|
-
version_requirements: *
|
112
|
+
version_requirements: *77864290
|
113
113
|
- !ruby/object:Gem::Dependency
|
114
114
|
name: rcov
|
115
|
-
requirement: &
|
115
|
+
requirement: &77863970 !ruby/object:Gem::Requirement
|
116
116
|
none: false
|
117
117
|
requirements:
|
118
118
|
- - ! '>='
|
@@ -120,10 +120,10 @@ dependencies:
|
|
120
120
|
version: '0'
|
121
121
|
type: :development
|
122
122
|
prerelease: false
|
123
|
-
version_requirements: *
|
123
|
+
version_requirements: *77863970
|
124
124
|
- !ruby/object:Gem::Dependency
|
125
125
|
name: sqlite3
|
126
|
-
requirement: &
|
126
|
+
requirement: &77863630 !ruby/object:Gem::Requirement
|
127
127
|
none: false
|
128
128
|
requirements:
|
129
129
|
- - ! '>='
|
@@ -131,7 +131,7 @@ dependencies:
|
|
131
131
|
version: '0'
|
132
132
|
type: :development
|
133
133
|
prerelease: false
|
134
|
-
version_requirements: *
|
134
|
+
version_requirements: *77863630
|
135
135
|
description: Allow your application users to start fantastic hunt for big treasure
|
136
136
|
email: dupal.j@gmail.com
|
137
137
|
executables: []
|
@@ -180,7 +180,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
180
180
|
version: '0'
|
181
181
|
segments:
|
182
182
|
- 0
|
183
|
-
hash:
|
183
|
+
hash: 797920019
|
184
184
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
185
185
|
none: false
|
186
186
|
requirements:
|