badgeville_berlin 1.0.2 → 1.0.3

Sign up to get free protection for your applications and to get access to all the features.
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: