treasure_hunt 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.0
1
+ 0.1.1
@@ -12,6 +12,9 @@ module TreasureHunt
12
12
  validate :reward_cannot_be_achieved_above_limits
13
13
 
14
14
  before_save :fill_points
15
+
16
+ after_save :update_user_points
17
+ after_destroy :update_user_points
15
18
  end
16
19
 
17
20
  module ClassMethods
@@ -53,5 +56,10 @@ module TreasureHunt
53
56
 
54
57
  end
55
58
 
59
+ private
60
+ def update_user_points
61
+ self.user.update_points
62
+ end
63
+
56
64
  end
57
65
  end
@@ -19,8 +19,12 @@ module TreasureHunt
19
19
 
20
20
  module InstanceMethods
21
21
 
22
- def points
23
- self.achievements.collect(&:points).sum rescue 0
22
+ def rank
23
+ self.class.count(:all, :conditions => ['points > ?', self.points]) + 1
24
+ end
25
+
26
+ def update_points
27
+ self.update_attribute(:points, self.achievements.sum(:points))
24
28
  end
25
29
 
26
30
  def can_achieve?(reward)
@@ -8,6 +8,7 @@ ActiveRecord::Migration.verbose = false
8
8
  ActiveRecord::Schema.define do
9
9
  create_table :users, :force => true do |t|
10
10
  t.string :name, :null => false
11
+ t.integer :points, :default => 0, :null => false
11
12
  end
12
13
 
13
14
  create_table :achievements, :force => true do |t|
@@ -2,6 +2,7 @@ require 'spec_helper'
2
2
 
3
3
  describe TreasureHunt::Hunter do
4
4
  before do
5
+ User.delete_all
5
6
  @jane = User.create(:name => 'Jane')
6
7
  @joe = User.create(:name => 'Joe')
7
8
  end
@@ -25,6 +26,43 @@ describe TreasureHunt::Hunter do
25
26
  end
26
27
  @jane.reload
27
28
  @jane.points.should == 3*7
29
+
30
+ last = @jane.achievements.last
31
+ last.points = 5
32
+ last.save
33
+
34
+ @jane.reload
35
+ @jane.points.should == 2*7 + 5
36
+
37
+ @jane.achievements.destroy(last)
38
+
39
+ @jane.reload
40
+ @jane.points.should == 2*7
41
+ end
42
+
43
+ it "should get better rank" do
44
+ User.count.should == 2
45
+
46
+ @jane.rank.should == 1
47
+ @joe.rank.should == 1
48
+
49
+ @jane.achievements << Achievement.create(:reward => @reward)
50
+ [@jane, @joe].each(&:reload)
51
+
52
+ @jane.rank.should == 1
53
+ @joe.rank.should == 2
54
+
55
+ @joe.achievements << Achievement.create(:reward => @reward)
56
+ [@jane, @joe].each(&:reload)
57
+
58
+ @jane.rank.should == 1
59
+ @joe.rank.should == 1
60
+
61
+ @joe.achievements << Achievement.create(:reward => @reward)
62
+ [@jane, @joe].each(&:reload)
63
+
64
+ @jane.rank.should == 2
65
+ @joe.rank.should == 1
28
66
  end
29
67
  end
30
68
 
@@ -0,0 +1,94 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{treasure_hunt}
8
+ s.version = "0.1.1"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = [%q{Jan Dupal}]
12
+ s.date = %q{2011-10-25}
13
+ s.description = %q{Allow your application users to start fantastic hunt for big treasure}
14
+ s.email = %q{dupal.j@gmail.com}
15
+ s.extra_rdoc_files = [
16
+ "LICENSE.txt",
17
+ "README.rdoc"
18
+ ]
19
+ s.files = [
20
+ ".document",
21
+ ".rspec",
22
+ ".rvmrc",
23
+ "Gemfile",
24
+ "Gemfile.lock",
25
+ "Guardfile",
26
+ "LICENSE.txt",
27
+ "README.rdoc",
28
+ "Rakefile",
29
+ "VERSION",
30
+ "lib/generators/treasure_hunt/install/install_generator.rb",
31
+ "lib/generators/treasure_hunt/install/templates/achievement.rb",
32
+ "lib/generators/treasure_hunt/install/templates/migration.rb",
33
+ "lib/generators/treasure_hunt/install/templates/reward.rb",
34
+ "lib/treasure_hunt.rb",
35
+ "lib/treasure_hunt/achievement.rb",
36
+ "lib/treasure_hunt/reward.rb",
37
+ "lib/treasure_hunt/treasure_hunter.rb",
38
+ "spec/generators/treasure_hunt/install/install_generator_spec.rb",
39
+ "spec/spec_helper.rb",
40
+ "spec/support/active_record.rb",
41
+ "spec/treasure_hunt/achievement_spec.rb",
42
+ "spec/treasure_hunt/reward_spec.rb",
43
+ "spec/treasure_hunt/treasure_hunter_spec.rb",
44
+ "treasure_hunt.gemspec"
45
+ ]
46
+ s.homepage = %q{http://github.com/SmartMedia/treasure_hunt}
47
+ s.licenses = [%q{MIT}]
48
+ s.require_paths = [%q{lib}]
49
+ s.rubygems_version = %q{1.8.6}
50
+ s.summary = %q{DSL and models for application User’s Reward management}
51
+
52
+ if s.respond_to? :specification_version then
53
+ s.specification_version = 3
54
+
55
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
56
+ s.add_runtime_dependency(%q<activerecord>, [">= 0"])
57
+ s.add_development_dependency(%q<guard>, [">= 0"])
58
+ s.add_development_dependency(%q<guard-rspec>, [">= 0"])
59
+ s.add_development_dependency(%q<rb-inotify>, [">= 0"])
60
+ s.add_development_dependency(%q<libnotify>, [">= 0"])
61
+ s.add_development_dependency(%q<rspec>, ["~> 2.5.0"])
62
+ s.add_development_dependency(%q<generator_spec>, [">= 0"])
63
+ s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
64
+ s.add_development_dependency(%q<jeweler>, ["~> 1.6.4"])
65
+ s.add_development_dependency(%q<rcov>, [">= 0"])
66
+ s.add_development_dependency(%q<sqlite3>, [">= 0"])
67
+ else
68
+ s.add_dependency(%q<activerecord>, [">= 0"])
69
+ s.add_dependency(%q<guard>, [">= 0"])
70
+ s.add_dependency(%q<guard-rspec>, [">= 0"])
71
+ s.add_dependency(%q<rb-inotify>, [">= 0"])
72
+ s.add_dependency(%q<libnotify>, [">= 0"])
73
+ s.add_dependency(%q<rspec>, ["~> 2.5.0"])
74
+ s.add_dependency(%q<generator_spec>, [">= 0"])
75
+ s.add_dependency(%q<bundler>, ["~> 1.0.0"])
76
+ s.add_dependency(%q<jeweler>, ["~> 1.6.4"])
77
+ s.add_dependency(%q<rcov>, [">= 0"])
78
+ s.add_dependency(%q<sqlite3>, [">= 0"])
79
+ end
80
+ else
81
+ s.add_dependency(%q<activerecord>, [">= 0"])
82
+ s.add_dependency(%q<guard>, [">= 0"])
83
+ s.add_dependency(%q<guard-rspec>, [">= 0"])
84
+ s.add_dependency(%q<rb-inotify>, [">= 0"])
85
+ s.add_dependency(%q<libnotify>, [">= 0"])
86
+ s.add_dependency(%q<rspec>, ["~> 2.5.0"])
87
+ s.add_dependency(%q<generator_spec>, [">= 0"])
88
+ s.add_dependency(%q<bundler>, ["~> 1.0.0"])
89
+ s.add_dependency(%q<jeweler>, ["~> 1.6.4"])
90
+ s.add_dependency(%q<rcov>, [">= 0"])
91
+ s.add_dependency(%q<sqlite3>, [">= 0"])
92
+ end
93
+ end
94
+
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.0
4
+ version: 0.1.1
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-10-23 00:00:00.000000000Z
12
+ date: 2011-10-25 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activerecord
16
- requirement: &81214610 !ruby/object:Gem::Requirement
16
+ requirement: &81187380 !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: *81214610
24
+ version_requirements: *81187380
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: guard
27
- requirement: &81214310 !ruby/object:Gem::Requirement
27
+ requirement: &81187090 !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: *81214310
35
+ version_requirements: *81187090
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: guard-rspec
38
- requirement: &81213940 !ruby/object:Gem::Requirement
38
+ requirement: &81186550 !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: *81213940
46
+ version_requirements: *81186550
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: rb-inotify
49
- requirement: &81213050 !ruby/object:Gem::Requirement
49
+ requirement: &81185750 !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: *81213050
57
+ version_requirements: *81185750
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: libnotify
60
- requirement: &81212530 !ruby/object:Gem::Requirement
60
+ requirement: &81185280 !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: *81212530
68
+ version_requirements: *81185280
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rspec
71
- requirement: &81212140 !ruby/object:Gem::Requirement
71
+ requirement: &81184960 !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: *81212140
79
+ version_requirements: *81184960
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: generator_spec
82
- requirement: &81211840 !ruby/object:Gem::Requirement
82
+ requirement: &81184600 !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: *81211840
90
+ version_requirements: *81184600
91
91
  - !ruby/object:Gem::Dependency
92
92
  name: bundler
93
- requirement: &81211520 !ruby/object:Gem::Requirement
93
+ requirement: &81184290 !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: *81211520
101
+ version_requirements: *81184290
102
102
  - !ruby/object:Gem::Dependency
103
103
  name: jeweler
104
- requirement: &81211190 !ruby/object:Gem::Requirement
104
+ requirement: &81183920 !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: *81211190
112
+ version_requirements: *81183920
113
113
  - !ruby/object:Gem::Dependency
114
114
  name: rcov
115
- requirement: &81210830 !ruby/object:Gem::Requirement
115
+ requirement: &81183620 !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: *81210830
123
+ version_requirements: *81183620
124
124
  - !ruby/object:Gem::Dependency
125
125
  name: sqlite3
126
- requirement: &81210500 !ruby/object:Gem::Requirement
126
+ requirement: &81183340 !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: *81210500
134
+ version_requirements: *81183340
135
135
  description: Allow your application users to start fantastic hunt for big treasure
136
136
  email: dupal.j@gmail.com
137
137
  executables: []
@@ -164,6 +164,7 @@ files:
164
164
  - spec/treasure_hunt/achievement_spec.rb
165
165
  - spec/treasure_hunt/reward_spec.rb
166
166
  - spec/treasure_hunt/treasure_hunter_spec.rb
167
+ - treasure_hunt.gemspec
167
168
  homepage: http://github.com/SmartMedia/treasure_hunt
168
169
  licenses:
169
170
  - MIT
@@ -179,7 +180,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
179
180
  version: '0'
180
181
  segments:
181
182
  - 0
182
- hash: 915069359
183
+ hash: 997579581
183
184
  required_rubygems_version: !ruby/object:Gem::Requirement
184
185
  none: false
185
186
  requirements: