badgeville_berlin 1.0.2 → 1.0.3

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/badgeville.gemspec CHANGED
@@ -10,7 +10,8 @@ Gem::Specification.new do |s|
10
10
  s.homepage = "https://github.com/badgeville/badgeville-ruby"
11
11
  s.summary = %q{A Ruby wrapper for the Badgeville RESTful Berlin API.}
12
12
  s.description = %q{This is an open source Ruby wrapper for interacting with the Badgeville RESTful Berlin API.}
13
-
13
+ s.license = 'MIT'
14
+
14
15
  s.rubyforge_project = "badgeville_berlin"
15
16
 
16
17
  s.files = `git ls-files`.split("\n")
@@ -26,9 +27,6 @@ Gem::Specification.new do |s|
26
27
  s.add_development_dependency "rspec"
27
28
  s.add_development_dependency "fakeweb"
28
29
  s.add_development_dependency "factory_girl", '=2.4.0'
29
- s.add_development_dependency "ZenTest"
30
- s.add_development_dependency "autotest"
31
- s.add_development_dependency "autotest-growl"
32
30
  s.add_development_dependency "logger", ">=1.2.8"
33
31
 
34
32
  s.add_runtime_dependency "activeresource", "~> 3.1"
@@ -80,13 +80,13 @@ module BadgevilleBerlin
80
80
  @errors ||= BadgevilleBerlin::Errors.new(self)
81
81
  end
82
82
 
83
- # Overrides the ActiveResource isntance method in module Validations
83
+ # Overrides the ActiveResource instance method in module Validations
84
84
  # in order to load_remote_errors() for the case where the format is
85
85
  # the custom BadgevilleJson format. Loads the set of remote errors into
86
86
  # the object’s Errors collection based on the content-type of the
87
87
  # error-block received.
88
88
  #
89
- # @param remote_errors errors from teh remote server
89
+ # @param remote_errors errors from the remote server
90
90
  # @param [Object] save_cache flag that directs the errors cache to be
91
91
  # cleared by default
92
92
  def load_remote_errors(remote_errors, save_cache = false ) #:nodoc:
@@ -1,5 +1,6 @@
1
1
  # Subclasses BaseResource to represent a remote resource model class.
2
2
  module BadgevilleBerlin
3
3
  class Group < BadgevilleBerlin::BaseResource
4
+ COMPLEX_ATTRIBUTES = [:adjustment]
4
5
  end
5
6
  end
@@ -1,5 +1,6 @@
1
1
  # Subclasses BaseResource to represent a remote resource model class.
2
2
  module BadgevilleBerlin
3
3
  class Leaderboard < BadgevilleBerlin::BaseResource
4
+ COMPLEX_ATTRIBUTES = [:selector]
4
5
  end
5
6
  end
@@ -1,5 +1,6 @@
1
1
  # Subclasses BaseResource to represent a remote resource model class.
2
2
  module BadgevilleBerlin
3
3
  class RewardDefinition < BadgevilleBerlin::BaseResource
4
+ COMPLEX_ATTRIBUTES = [:adjustment]
4
5
  end
5
6
  end
@@ -1,3 +1,3 @@
1
1
  module BadgevilleBerlin
2
- VERSION = "1.0.2"
2
+ VERSION = "1.0.3"
3
3
  end
@@ -1,315 +1,409 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  module BadgevilleBerlin
4
- describe "README use case example set" do
4
+ describe "BadgevilleBerlin" do
5
5
  before(:all) do
6
6
  # Initializations
7
7
  @rand1 = rand(5000)
8
8
  @rand2 = rand(5000)
9
9
  @my_network_id = '<my_network_id>'
10
-
10
+
11
11
  # Set FakeWeb to allow a real connection to the Badgeville server as
12
12
  # configured in spec_helper.rb
13
13
  FakeWeb.allow_net_connect = true
14
14
 
15
15
  # Configure the gem with the host site and the API Key
16
-
17
16
  my_hostname = '<http://myhostname.com>'
18
17
  my_api_key = '<my_api_key>'
19
-
18
+
20
19
  Config.conf(:host_name => my_hostname, :api_key => my_api_key)
21
-
22
- # Basic README: Create a new site
23
- @new_site = Site.new(
24
- :name => "My Website #{@rand1}",
25
- :url => "mydomain#{@rand1}.com" ,
26
- :network_id => @my_network_id )
27
- @site_created = @new_site.save
28
-
29
- # Basic README: Create a new user
30
- @new_user = User.new(
31
- :name => "visitor#{@rand1}",
32
- :network_id => @my_network_id,
33
- :email => "visitor#{@rand1}@emailserver.com",
34
- :password => 'visitor_password' )
35
- @user_created = @new_user.save
36
-
37
- # Basic README: See error messages from the remote server
38
- @new_user2 = User.new(
39
- :name => "visitor#{@rand1}",
40
- :network_id => @my_network_id,
41
- :email => "visitor#{@rand1}@emailserver.com",
42
- :password => 'visitor_password' )
43
- @user_creation_failed = @new_user2.save
44
- @attr_specific_err = @new_user2.errors[:email]
45
-
46
- # Basic README: Create a player
47
- # Basic README: Find existing players that match the given email
48
- @new_player = Player.new(
49
- :site_id => @new_site.id,
50
- :user_id => @new_user.id ,
51
- :display_name => "Visitor #{@rand1}" )
52
- @player_created = @new_player.save
53
-
54
- # Advanced README: Create an activity (register a behavior 'share') for the newly created player
55
- @share_activity = Activity.new(
56
- :verb => "share",
57
- :player_id => @new_player.id )
58
- @share_activity_created = @share_activity.save
59
-
60
- # Advanced README: Create an activity definition to specify that a player will earn 4
61
- # points each time they perform the "comment" behavior.
62
- @new_activity_definition = ActivityDefinition.new(
63
- :selector => {:verb => :comment},
64
- :name => "A Cool Comment Behavior #{@rand1}",
65
- :site_id => @new_site.id,
66
- :adjustment => {:points => 3}
67
- )
68
- @new_activity_defn_created = @new_activity_definition.save
69
-
70
- # Advanced README: Update the activity definition such that a player
71
- # on your site will earn 3 points rather than 4 each time they
72
- # perform the "comment" behavior.
73
- @new_activity_definition.adjustment = {:points => 3}
74
- @new_activity_defn_updated = @new_activity_definition.save
75
-
76
- # Advanced README: Update the activity definition to include a rate
77
- # limit in order to prevent players from gaming the system.
78
- @new_activity_definition.enable_rate_limiting = true
79
- @new_activity_definition.bucket_drain_rate = 180
80
- @new_activity_definition.bucket_max_capacity = 25
81
- @new_activity_defn_updated_again = @new_activity_definition.save
82
-
83
- # Advanced README: Create a reward definition
84
- @new_reward_defn = RewardDefinition.new(
85
- :site_id => @new_site.id,
86
- :name => 'Comment Rockstar',
87
- :reward_template => '{"message":"Congrats, you are a Comment Rockstar!"}',
88
- :components => '[{"comparator":{"$gte":1},"where":{"verb":"comment","player_id":"%player_id"},"command":"count"}]',
89
- :active => true )
90
- @new_reward_defn_created = @new_reward_defn.save
91
-
92
- # Create a mission which includes this reward definition
93
- @new_group = Group.new(
94
- :site_id => @new_site.id,
95
- :name => 'Comment Rockstar Mission'
96
- )
97
- @new_group_created = @new_group.save
98
-
99
- # Advanced README: Register a player behavior (e.g. comment) for an
100
- # existing player.
101
- @comment_activity = Activity.new(
102
- :verb => "comment",
103
- :player_id => @new_player.id )
104
- @comment_activity_created = @comment_activity.save
105
-
106
- end
107
-
108
- # CREATE Site
109
- it "should have created a new site", :affects_bv_server => true do
110
- @site_created.should == true
111
- end
112
-
113
- it "should have a new site with the name: My Website #{@rand1}", :affects_bv_server => true do
114
- @new_site.name.should == "My Website #{@rand1}"
115
- end
116
-
117
- # CREATE User
118
- it "should have created a new user", :affects_bv_server => true do
119
- @user_created.should == true
120
- end
121
-
122
- it "should have a new user with the name: visitor#{@rand1}", :affects_bv_server => true do
123
- @new_user.name.should == "visitor#{@rand1}"
124
- end
125
-
126
- # CREATE User: See remote errors
127
- it "should produce an error message from the remote server", :affects_bv_server => true do
128
- @new_user2.errors.messages.should == {:email=>["user email is already taken"]}
129
- end
130
-
131
- it "should produce anattribute-specific error message from the remote server", :affects_bv_server => true do
132
- @attr_specific_err.should == ["user email is already taken"]
133
- end
134
-
135
- # CREATE Player
136
- it "should have created a new player", :affects_bv_server => true do
137
- @player_created.should == true
138
- end
139
-
140
- it "should have a new player with user ID for @new_user", :affects_bv_server => true do
141
- @new_player.user_id.should == @new_user.id
142
- end
143
-
144
- # FIND Players by email (:all matches)
145
- it "should return all players that match the email address as a collection", :affects_bv_server => true do
146
- @existing_player = Player.find(:all, :params => {:email => "visitor#{@rand1}@emailserver.com"})
147
- @existing_player.first.email.should == "visitor#{@rand1}@emailserver.com"
148
- end
149
-
150
- # FIND Player by email (:first match)
151
- it "should return the first player that matches the email address as a single record", :affects_bv_server => true do
152
- @existing_player = Player.find(:first, :params => {:email => "visitor#{@rand1}@emailserver.com"})
153
- @existing_player.email.should == "visitor#{@rand1}@emailserver.com"
154
- end
155
-
156
- # FIND Player by email (:last match)
157
- it "should return the first player that matches the email address as a single record", :affects_bv_server => true do
158
- @existing_player = Player.find(:last, :params => {:email => "visitor#{@rand1}@emailserver.com"})
159
- @existing_player.email.should == "visitor#{@rand1}@emailserver.com"
160
- end
161
-
162
- # CREATE Activity (share)
163
- it "should have created a 1st activity", :affects_bv_server => true do
164
- @share_activity_created.should == true
165
- end
166
-
167
- it "should have registered a new share activity", :affects_bv_server => true do
168
- @share_activity.verb.should == "share"
169
- end
170
-
171
- # CREATE ActivityDefinition
172
- it "should have created a new activity definition", :affects_bv_server => true do
173
- @new_activity_defn_created.should == true
174
20
  end
175
21
 
176
- it "should have a new activity definition for comment", :affects_bv_server => true do
177
- @new_activity_definition.verb.should == "comment"
178
- end
179
-
180
- # CREATE Activity (comment)
181
- it "should have created a 2nd activity", :affects_bv_server => true do
182
- @comment_activity_created.should == true
183
- end
184
-
185
- it "should have registered a new comment activity", :affects_bv_server => true do
186
- @comment_activity.verb.should == "comment"
187
- end
188
-
189
- it "should have added 3 points to the new player", :affects_bv_server => true do
190
- @updated_player = Player.find(@new_player.id)
191
- @updated_player.points_all.should == 3
192
- end
193
-
194
- it "should have added 1 reward to the new player", :affects_bv_server => true do
195
- Reward.find(:all, :params => {:player_id => @new_player.id})[0].name.should == "Comment Rockstar"
196
- end
197
-
198
- # CREATE RewardDefinition
199
- it "should have created a new reward definition", :affects_bv_server => true do
200
- @new_reward_defn_created.should == true
201
- end
202
-
203
- it "should have a new reward definition with the name 'Comment Rockstar'", :affects_bv_server => true do
204
- @new_reward_defn.name.should == 'Comment Rockstar'
205
- end
206
-
207
- #UPDATE User
208
- it "should update the user", :affects_bv_server => true do
209
- # Basic README: Find the newly created user to update their email address
210
- @user_found_by_id = User.find( @new_user.id )
211
- @user_found_by_id.email = "visitor#{@rand2}@emailserver.com"
212
- @user_updated = @user_found_by_id.save
213
-
214
- User.find(@new_user.id).email.should == "visitor#{@rand2}@emailserver.com"
215
- @user_updated.should == true
216
- end
217
-
218
- # UPDATE ActivityDefinition (points)
219
- it "should have updated the activity definition a 1st time", :affects_bv_server => true do
220
- @new_activity_defn_updated.should == true
221
- end
222
-
223
- it "should have updated the activity definition points for comment", :affects_bv_server => true do
224
- @updated_activity_definition = ActivityDefinition.find(@new_activity_definition.id)
225
- @updated_activity_definition.adjustment.should == {"points" => { "definition" => 3}}
226
- @updated_activity_definition.selector.should == {"verb" => "comment"}
227
- end
228
-
229
- # UPDATE ActivityDefinition (rate-limiting)
230
- it "should have updated the activity definition a 2nd time", :affects_bv_server => true do
231
- @new_activity_defn_updated_again.should == true
232
- end
233
-
234
- it "should have updated the activity definition to enable rate limiting", :affects_bv_server => true do
235
- @new_activity_definition.enable_rate_limiting.should == true
236
- @new_activity_definition.bucket_drain_rate.should == 180
237
- @new_activity_definition.bucket_max_capacity.should == 25
238
- end
239
-
240
- # UPDATE Player
241
- it "should update the player with the display name \"Elite Player\"", :affects_bv_server => true do
242
- @new_player.display_name = "Elite Player"
243
- @new_player.save
244
- Player.find(@new_player.id).display_name.should == "Elite Player"
245
- end
246
-
247
- it "should update picture_url on the player object", :affects_bv_server => true do
248
- @new_player.picture_url = "http://i.imgur.com/OsbzX.png"
249
- @new_player.save
250
- Player.find(@new_player.id).picture_url.should == "http://i.imgur.com/OsbzX.png"
251
- end
252
-
253
- # UPDATE RewardDefinition
254
- it "should update the reward definition with the name \"Comment Superstar\"", :affects_bv_server => true do
255
- @new_reward_defn.name = "Comment Superstar"
256
- @new_reward_defn.save
257
- RewardDefinition.find(@new_reward_defn.id).name.should == "Comment Superstar"
258
- end
259
-
260
- #UPDATE Site
261
- it "should update the site", :affects_bv_server => true do
262
- @new_site.name = "New Site Name #{rand(5000)}"
263
- @new_site.save
264
- Site.find(@new_site.id).name.should == @new_site.name
265
- end
266
-
267
- # DELETE RewardDefinition
268
- it "should have deleted a reward definition", :affects_bv_server => true do
269
- # Not in the README:
270
- @new_reward_defn2 = RewardDefinition.new(
271
- :site_id => @new_site.id,
272
- :name => 'Blog Rockstar',
273
- :reward_template => '{"message":"Congrats, you are a Blog Rockstar!"}',
274
- :components => '[{"comparator":{"$gte":1},"where":{"verb":"blog","player_id":"%player_id"},"command":"count"}]',
275
- :active => true )
276
- @new_reward_defn2.save
277
-
278
- RewardDefinition.delete(@new_reward_defn2.id)
279
- lambda { RewardDefinition.find(@new_reward_defn2.id) }.should raise_error(ActiveResource::ResourceNotFound)
280
- end
281
-
282
- # DELETE ActivityDefinition
283
- it "should have deleted an activity definition", :affects_bv_server => true do
284
- ActivityDefinition.delete(@new_activity_definition.id)
285
- lambda { ActivityDefinition.find(@new_activity_definition.id) }.should raise_error(ActiveResource::ResourceNotFound)
286
- end
287
-
288
- # DELETE Player
289
- it "should have deleted a player", :affects_bv_server => true do
290
- Player.delete(@new_player.id)
291
- lambda { Player.find(@new_player.id) }.should raise_error(ActiveResource::ResourceNotFound)
292
- end
293
-
294
- # DELETE User
295
- it "should have deleted a user", :affects_bv_server => true do
296
- User.delete(@new_user.id)
297
- lambda { User.find(@new_user.id) }.should raise_error(ActiveResource::ResourceNotFound)
298
- end
299
-
300
- # DELETE Site
301
- it "should have deleted a site", :affects_bv_server => true do
302
- Site.delete(@new_site.id)
303
- lambda { Site.find(@new_site.id) }.should raise_error(ActiveResource::ResourceNotFound)
304
- end
305
-
306
- # FIND Group (a.k.a. Mission)
307
- # Not integration test!
308
- it "should parse correctly a group index call which includes rewards keyed under reward definitions", :affects_bv_server => true do
309
- BadgevilleBerlinJsonFormat.stub!(:decode).and_return([JSON.parse(BadgevilleBerlin.response_json["valid_group_all"])])
310
- response = Group.all
311
- #(params: {site: @new_site.url, per_page: 50, player_id: @new_player.id.to_s})
312
- response.first.rewards.count.should == 2
22
+ describe "README examples" do
23
+ before(:all) do
24
+ # Basic README: Create a new site
25
+ @new_site = Site.new(
26
+ :name => "My Website #{@rand1}",
27
+ :url => "mydomain#{@rand1}.com" ,
28
+ :network_id => @my_network_id )
29
+ @site_created = @new_site.save
30
+
31
+ # Basic README: Create a new user
32
+ @new_user = User.new(
33
+ :name => "visitor#{@rand1}",
34
+ :network_id => @my_network_id,
35
+ :email => "visitor#{@rand1}@emailserver.com",
36
+ :password => 'visitor_password' )
37
+ @user_created = @new_user.save
38
+
39
+ # Basic README: See error messages from the remote server
40
+ @new_user2 = User.new(
41
+ :name => "visitor#{@rand1}",
42
+ :network_id => @my_network_id,
43
+ :email => "visitor#{@rand1}@emailserver.com",
44
+ :password => 'visitor_password' )
45
+ @user_creation_failed = @new_user2.save
46
+ @attr_specific_err = @new_user2.errors[:email]
47
+
48
+ # Basic README: Create a player
49
+ # Basic README: Find existing players that match the given email
50
+ @new_player = Player.new(
51
+ :site_id => @new_site.id,
52
+ :user_id => @new_user.id ,
53
+ :display_name => "Visitor #{@rand1}" )
54
+ @player_created = @new_player.save
55
+
56
+ # Advanced README: Create an activity (register a behavior 'share') for the newly created player
57
+ @share_activity = Activity.new(
58
+ :verb => "share",
59
+ :player_id => @new_player.id )
60
+ @share_activity_created = @share_activity.save
61
+
62
+ # Advanced README: Create an activity definition to specify that a player will earn 4
63
+ # points each time they perform the "comment" behavior.
64
+ @new_activity_definition = ActivityDefinition.new(
65
+ :selector => {:verb => :comment},
66
+ :name => "A Cool Comment Behavior #{@rand1}",
67
+ :site_id => @new_site.id,
68
+ :adjustment => {:points => 3}
69
+ )
70
+ @new_activity_defn_created = @new_activity_definition.save
71
+
72
+ # Advanced README: Update the activity definition such that a player
73
+ # on your site will earn 3 points rather than 4 each time they
74
+ # perform the "comment" behavior.
75
+ @new_activity_definition.adjustment = {:points => 3}
76
+ @new_activity_defn_updated = @new_activity_definition.save
77
+
78
+ # Advanced README: Update the activity definition to include a rate
79
+ # limit in order to prevent players from gaming the system.
80
+ @new_activity_definition.enable_rate_limiting = true
81
+ @new_activity_definition.bucket_drain_rate = 180
82
+ @new_activity_definition.bucket_max_capacity = 25
83
+ @new_activity_defn_updated_again = @new_activity_definition.save
84
+
85
+ # Advanced README: Create a reward definition
86
+ @new_reward_defn = RewardDefinition.new(
87
+ :site_id => @new_site.id,
88
+ :name => 'Comment Rockstar',
89
+ :reward_template => '{"message":"Congrats, you are a Comment Rockstar!"}',
90
+ :components => '[{"comparator":{"$gte":1},"where":{"verb":"comment","player_id":"%player_id"},"command":"count"}]',
91
+ :active => true )
92
+ @new_reward_defn_created = @new_reward_defn.save
93
+
94
+ # Advanced README: Register a player behavior (e.g. comment) for an
95
+ # existing player.
96
+ @comment_activity = Activity.new(
97
+ :verb => "comment",
98
+ :player_id => @new_player.id )
99
+ @comment_activity_created = @comment_activity.save
100
+ end
101
+
102
+ # CREATE Site
103
+ it "should have created a new site", :affects_bv_server => true do
104
+ @site_created.should == true
105
+ end
106
+
107
+ it "should have a new site with the name: My Website #{@rand1}", :affects_bv_server => true do
108
+ @new_site.name.should == "My Website #{@rand1}"
109
+ end
110
+
111
+ # CREATE User
112
+ it "should have created a new user", :affects_bv_server => true do
113
+ @user_created.should == true
114
+ end
115
+
116
+ it "should have a new user with the name: visitor#{@rand1}", :affects_bv_server => true do
117
+ @new_user.name.should == "visitor#{@rand1}"
118
+ end
119
+
120
+ # CREATE User: See remote errors
121
+ it "should produce an error message from the remote server", :affects_bv_server => true do
122
+ @new_user2.errors.messages.should == {:email=>["user email is already taken"]}
123
+ end
124
+
125
+ it "should produce anattribute-specific error message from the remote server", :affects_bv_server => true do
126
+ @attr_specific_err.should == ["user email is already taken"]
127
+ end
128
+
129
+ # CREATE Player
130
+ it "should have created a new player", :affects_bv_server => true do
131
+ @player_created.should == true
132
+ end
133
+
134
+ it "should have a new player with user ID for @new_user", :affects_bv_server => true do
135
+ @new_player.user_id.should == @new_user.id
136
+ end
137
+
138
+ # FIND Players by email (:all matches)
139
+ it "should return all players that match the email address as a collection", :affects_bv_server => true do
140
+ @existing_player = Player.find(:all, :params => {:email => "visitor#{@rand1}@emailserver.com"})
141
+ @existing_player.first.email.should == "visitor#{@rand1}@emailserver.com"
142
+ end
143
+
144
+ # FIND Player by email (:first match)
145
+ it "should return the first player that matches the email address as a single record", :affects_bv_server => true do
146
+ @existing_player = Player.find(:first, :params => {:email => "visitor#{@rand1}@emailserver.com"})
147
+ @existing_player.email.should == "visitor#{@rand1}@emailserver.com"
148
+ end
149
+
150
+ # FIND Player by email (:last match)
151
+ it "should return the first player that matches the email address as a single record", :affects_bv_server => true do
152
+ @existing_player = Player.find(:last, :params => {:email => "visitor#{@rand1}@emailserver.com"})
153
+ @existing_player.email.should == "visitor#{@rand1}@emailserver.com"
154
+ end
155
+
156
+ # CREATE Activity (share)
157
+ it "should have created a 1st activity", :affects_bv_server => true do
158
+ @share_activity_created.should == true
159
+ end
160
+
161
+ it "should have registered a new share activity", :affects_bv_server => true do
162
+ @share_activity.verb.should == "share"
163
+ end
164
+
165
+ # CREATE ActivityDefinition
166
+ it "should have created a new activity definition", :affects_bv_server => true do
167
+ @new_activity_defn_created.should == true
168
+ end
169
+
170
+ it "should have a new activity definition for comment", :affects_bv_server => true do
171
+ @new_activity_definition.verb.should == "comment"
172
+ end
173
+
174
+ # CREATE Activity (comment)
175
+ it "should have created a 2nd activity", :affects_bv_server => true do
176
+ @comment_activity_created.should == true
177
+ end
178
+
179
+ it "should have registered a new comment activity", :affects_bv_server => true do
180
+ @comment_activity.verb.should == "comment"
181
+ end
182
+
183
+ it "should have added 3 points to the new player", :affects_bv_server => true do
184
+ @updated_player = Player.find(@new_player.id)
185
+ @updated_player.points_all.should == 3
186
+ end
187
+
188
+ it "should have added 1 reward to the new player", :affects_bv_server => true do
189
+ Reward.find(:all, :params => {:player_id => @new_player.id})[0].name.should == "Comment Rockstar"
190
+ end
191
+
192
+ # CREATE RewardDefinition
193
+ it "should have created a new reward definition", :affects_bv_server => true do
194
+ @new_reward_defn_created.should == true
195
+ end
196
+
197
+ it "should have a new reward definition with the name 'Comment Rockstar'", :affects_bv_server => true do
198
+ @new_reward_defn.name.should == 'Comment Rockstar'
199
+ end
200
+
201
+ # UPDATE User
202
+ it "should update the user", :affects_bv_server => true do
203
+ # Basic README: Find the newly created user to update their email address
204
+ @user_found_by_id = User.find( @new_user.id )
205
+ @user_found_by_id.email = "visitor#{@rand2}@emailserver.com"
206
+ @user_updated = @user_found_by_id.save
207
+
208
+ User.find(@new_user.id).email.should == "visitor#{@rand2}@emailserver.com"
209
+ @user_updated.should == true
210
+ end
211
+
212
+ # UPDATE ActivityDefinition (points)
213
+ it "should have updated the activity definition a 1st time", :affects_bv_server => true do
214
+ @new_activity_defn_updated.should == true
215
+ end
216
+
217
+ it "should have updated the activity definition points for comment", :affects_bv_server => true do
218
+ @updated_activity_definition = ActivityDefinition.find(@new_activity_definition.id)
219
+ @updated_activity_definition.adjustment.should == {"points" => { "definition" => 3}}
220
+ @updated_activity_definition.selector.should == {"verb" => "comment"}
221
+ end
222
+
223
+ # UPDATE ActivityDefinition (rate-limiting)
224
+ it "should have updated the activity definition a 2nd time", :affects_bv_server => true do
225
+ @new_activity_defn_updated_again.should == true
226
+ end
227
+
228
+ it "should have updated the activity definition to enable rate limiting", :affects_bv_server => true do
229
+ @new_activity_definition.enable_rate_limiting.should == true
230
+ @new_activity_definition.bucket_drain_rate.should == 180
231
+ @new_activity_definition.bucket_max_capacity.should == 25
232
+ end
233
+
234
+ # UPDATE Player
235
+ it "should update the player with the display name \"Elite Player\"", :affects_bv_server => true do
236
+ @new_player.display_name = "Elite Player"
237
+ @new_player.save
238
+ Player.find(@new_player.id).display_name.should == "Elite Player"
239
+ end
240
+
241
+ it "should update picture_url on the player object", :affects_bv_server => true do
242
+ @new_player.picture_url = "http://i.imgur.com/OsbzX.png"
243
+ @new_player.save
244
+ Player.find(@new_player.id).picture_url.should == "http://i.imgur.com/OsbzX.png"
245
+ end
246
+
247
+ # UPDATE RewardDefinition
248
+ it "should update the reward definition with the name \"Comment Superstar\"", :affects_bv_server => true do
249
+ @new_reward_defn.name = "Comment Superstar"
250
+ @new_reward_defn.save
251
+ RewardDefinition.find(@new_reward_defn.id).name.should == "Comment Superstar"
252
+ end
253
+
254
+ # UPDATE Site
255
+ it "should update the site", :affects_bv_server => true do
256
+ @new_site.name = "New Site Name #{rand(5000)}"
257
+ @new_site.save
258
+ Site.find(@new_site.id).name.should == @new_site.name
259
+ end
260
+
261
+ # DELETE RewardDefinition
262
+ it "should have deleted a reward definition", :affects_bv_server => true do
263
+ # @new_reward_defn2 is not in the README
264
+ @new_reward_defn2 = RewardDefinition.new(
265
+ :site_id => @new_site.id,
266
+ :name => 'Blog Rockstar',
267
+ :reward_template => '{"message":"Congrats, you are a Blog Rockstar!"}',
268
+ :components => '[{"comparator":{"$gte":1},"where":{"verb":"blog","player_id":"%player_id"},"command":"count"}]',
269
+ :active => true )
270
+ @new_reward_defn2.save
271
+
272
+ RewardDefinition.delete(@new_reward_defn2.id)
273
+ lambda { RewardDefinition.find(@new_reward_defn2.id) }.should raise_error(ActiveResource::ResourceNotFound)
274
+ end
275
+
276
+ # DELETE ActivityDefinition
277
+ it "should have deleted an activity definition", :affects_bv_server => true do
278
+ ActivityDefinition.delete(@new_activity_definition.id)
279
+ lambda { ActivityDefinition.find(@new_activity_definition.id) }.should raise_error(ActiveResource::ResourceNotFound)
280
+ end
281
+
282
+ # DELETE Player
283
+ it "should have deleted a player", :affects_bv_server => true do
284
+ Player.delete(@new_player.id)
285
+ lambda { Player.find(@new_player.id) }.should raise_error(ActiveResource::ResourceNotFound)
286
+ end
287
+
288
+ # DELETE User
289
+ it "should have deleted a user", :affects_bv_server => true do
290
+ User.delete(@new_user.id)
291
+ lambda { User.find(@new_user.id) }.should raise_error(ActiveResource::ResourceNotFound)
292
+ end
293
+
294
+ # DELETE Site
295
+ it "should have deleted a site", :affects_bv_server => true do
296
+ Site.delete(@new_site.id)
297
+ lambda { Site.find(@new_site.id) }.should raise_error(ActiveResource::ResourceNotFound)
298
+ end
299
+ end
300
+
301
+ describe "non-README examples" do
302
+ before(:all) do
303
+ @site = Site.new(
304
+ :name => "My Website #{@rand1}",
305
+ :url => "mydomain#{@rand1}.com" ,
306
+ :network_id => @my_network_id)
307
+ @site.save
308
+ end
309
+
310
+ after(:all) do
311
+ Site.delete(@site.id)
312
+ end
313
+
314
+ describe "BadgevilleBerlin::RewardDefinition", :affects_bv_server => true do
315
+ before(:all) do
316
+ @new_rd = RewardDefinition.new(
317
+ :site_id => @site.id,
318
+ :name => 'High Rolla',
319
+ :reward_template => '{"message":"Congrats, you are a High Rolla!"}',
320
+ :components => '[{"comparator":{"$gte":1},"where":{"verb":"roll","player_id":"%player_id"},"command":"count"}]',
321
+ :active => true )
322
+ @new_rd_created = @new_rd.save
323
+ end
324
+
325
+ it 'should have created a reward definition with a components hash', :affects_bv_server => true do
326
+ RewardDefinition.find(@new_rd.id).components.should == @new_rd.components
327
+ end
328
+
329
+ it 'should update a reward definition adjustment' do
330
+ rd = RewardDefinition.find(@new_rd.id)
331
+ rd.adjustment = {:points => 10}
332
+ rd.save
333
+ RewardDefinition.find(rd.id).adjustment.should == {"points" => { "definition" => 10}}
334
+ end
335
+
336
+ it "should have deleted a reward definition", :affects_bv_server => true do
337
+ RewardDefinition.delete(@new_rd.id)
338
+ lambda { RewardDefinition.find(@new_rd.id)}.should raise_error(ActiveResource::ResourceNotFound)
339
+ end
340
+
341
+ end
342
+
343
+ describe "BadgevilleBerlin::Group", :affects_bv_server => true do
344
+ before(:all) do
345
+ @new_mission = Group.new(
346
+ :site_id => @site.id,
347
+ :name => 'Comment Rockstar Mission',
348
+ :adjustment => {:points => 10}
349
+ )
350
+ @new_mission_created = @new_mission.save
351
+ end
352
+
353
+ it "should parse correctly a group index call which includes rewards keyed under reward definitions", :affects_bv_server => true do
354
+ BadgevilleBerlinJsonFormat.stub!(:decode).and_return([JSON.parse(BadgevilleBerlin.response_json["valid_group_all"])])
355
+ response = Group.all
356
+ response.first.rewards.count.should == 2
357
+ end
358
+
359
+ # CREATE Group/Mission
360
+ it 'should have created mission with an adjustment', :affects_bv_server => true do
361
+ Group.find(@new_mission.id).adjustment.should == { 'points' => {'definition' => 10} }
362
+ end
363
+
364
+ # UPDATE Group/Mission
365
+ it 'should have updated a mission adjustment' do
366
+ mission = Group.find(@new_mission.id)
367
+ mission.adjustment = {:points => 15}
368
+ mission.save
369
+ Group.find(mission.id).adjustment.should == { 'points' => {'definition' => 15} }
370
+ end
371
+
372
+ # DELETE Group/Mission
373
+ it 'should have deleted a mission' do
374
+ Group.delete(@new_mission.id)
375
+ lambda { Group.find(@new_mission.id) }.should raise_error(ActiveResource::ResourceNotFound)
376
+ end
377
+ end
378
+
379
+ describe "BadgevilleBerlin::Leaderboard", :affects_bv_server => true do
380
+ before(:all) do
381
+ @new_leaderboard = Leaderboard.new(
382
+ :name => "Leaderboard #{@rand1}",
383
+ :selector => {"verb" => "comment"}
384
+ )
385
+ @new_lb_created = @new_leaderboard.save
386
+ end
387
+
388
+ # CREATE LEADERBOARD
389
+ it 'should have created a leaderboard with a selector', :affects_bv_server => true do
390
+ Leaderboard.find(@new_leaderboard.id).selector.should eq( {"verb" => "comment"} )
391
+ end
392
+
393
+ # UPDATE LEADERBOARD
394
+ it "should update a leaderboard selector", :affects_bv_server => true do
395
+ lb = Leaderboard.find(@new_leaderboard.id)
396
+ lb.selector = {"verb" => "blog"}
397
+ lb.save
398
+ Leaderboard.find(lb.id).selector.should eq( {"verb" => "blog"} )
399
+ end
400
+
401
+ # DELETE LEADERBOARD
402
+ it "should have deleted a leaderboard", :affects_bv_server => true do
403
+ Leaderboard.delete(@new_leaderboard.id)
404
+ lambda { Leaderboard.find(@new_leaderboard.id) }.should raise_error(ActiveResource::ResourceNotFound)
405
+ end
406
+ end
313
407
  end
314
408
 
315
409
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: badgeville_berlin
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2
4
+ version: 1.0.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -12,7 +12,7 @@ authors:
12
12
  autorequire:
13
13
  bindir: bin
14
14
  cert_chain: []
15
- date: 2013-09-13 00:00:00.000000000 Z
15
+ date: 2013-09-18 00:00:00.000000000 Z
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency
18
18
  name: ruby-debug19
@@ -94,54 +94,6 @@ dependencies:
94
94
  - - '='
95
95
  - !ruby/object:Gem::Version
96
96
  version: 2.4.0
97
- - !ruby/object:Gem::Dependency
98
- name: ZenTest
99
- requirement: !ruby/object:Gem::Requirement
100
- none: false
101
- requirements:
102
- - - ! '>='
103
- - !ruby/object:Gem::Version
104
- version: '0'
105
- type: :development
106
- prerelease: false
107
- version_requirements: !ruby/object:Gem::Requirement
108
- none: false
109
- requirements:
110
- - - ! '>='
111
- - !ruby/object:Gem::Version
112
- version: '0'
113
- - !ruby/object:Gem::Dependency
114
- name: autotest
115
- requirement: !ruby/object:Gem::Requirement
116
- none: false
117
- requirements:
118
- - - ! '>='
119
- - !ruby/object:Gem::Version
120
- version: '0'
121
- type: :development
122
- prerelease: false
123
- version_requirements: !ruby/object:Gem::Requirement
124
- none: false
125
- requirements:
126
- - - ! '>='
127
- - !ruby/object:Gem::Version
128
- version: '0'
129
- - !ruby/object:Gem::Dependency
130
- name: autotest-growl
131
- requirement: !ruby/object:Gem::Requirement
132
- none: false
133
- requirements:
134
- - - ! '>='
135
- - !ruby/object:Gem::Version
136
- version: '0'
137
- type: :development
138
- prerelease: false
139
- version_requirements: !ruby/object:Gem::Requirement
140
- none: false
141
- requirements:
142
- - - ! '>='
143
- - !ruby/object:Gem::Version
144
- version: '0'
145
97
  - !ruby/object:Gem::Dependency
146
98
  name: logger
147
99
  requirement: !ruby/object:Gem::Requirement
@@ -296,7 +248,8 @@ files:
296
248
  - spec/unit/errors_spec.rb
297
249
  - spec/use_case/readme_use_case_spec.rb
298
250
  homepage: https://github.com/badgeville/badgeville-ruby
299
- licenses: []
251
+ licenses:
252
+ - MIT
300
253
  post_install_message:
301
254
  rdoc_options: []
302
255
  require_paths: