badgeville_berlin 1.0.3 → 1.0.4
Sign up to get free protection for your applications and to get access to all the features.
data/lib/badgeville_berlin.rb
CHANGED
@@ -17,6 +17,7 @@ require "badgeville_berlin/player.rb"
|
|
17
17
|
require "badgeville_berlin/reward.rb"
|
18
18
|
require "badgeville_berlin/reward_definition.rb"
|
19
19
|
require "badgeville_berlin/site.rb"
|
20
|
+
require "badgeville_berlin/team.rb"
|
20
21
|
require "badgeville_berlin/track.rb"
|
21
22
|
require "badgeville_berlin/user.rb"
|
22
23
|
|
@@ -24,7 +24,7 @@ module BadgevilleBerlin
|
|
24
24
|
|
25
25
|
attributes = ActiveResource::Formats.remove_root(attributes) if remove_root
|
26
26
|
|
27
|
-
attributes.each do |key, value|
|
27
|
+
customize_keys_for_request(attributes).each do |key, value|
|
28
28
|
@attributes[key.to_s] =
|
29
29
|
case value
|
30
30
|
when Array
|
@@ -52,6 +52,27 @@ module BadgevilleBerlin
|
|
52
52
|
self
|
53
53
|
end
|
54
54
|
|
55
|
+
# Enables revising Berlin JSON response key names to match what
|
56
|
+
# is expected by model-level logic. (e.g. Berlin JSON payload
|
57
|
+
# returns the player's nickname under the key :nick_name, but the
|
58
|
+
# Player model expects it as :nickname without the underscore.)
|
59
|
+
#
|
60
|
+
# @example Rewrites the BadgevilleBerlin::Player :nick_name key as
|
61
|
+
# :nickname.
|
62
|
+
def customize_keys_for_request(attrs)
|
63
|
+
# The given resource type determined by self.class. For each attribute key
|
64
|
+
# in the ActiveResource object that needs renaming, replace the original
|
65
|
+
# hash key with the revised hash key as specified in the resource type
|
66
|
+
# -specific constant CUSTOM_ATTRS_FOR_REQUEST.
|
67
|
+
if defined?(self.class::CUSTOM_REQUEST_KEYS)
|
68
|
+
self.class::CUSTOM_REQUEST_KEYS.each do |orig_key, revised_key|
|
69
|
+
attrs[revised_key] = attrs.delete(orig_key) if attrs.include?(orig_key)
|
70
|
+
end
|
71
|
+
end
|
72
|
+
attrs
|
73
|
+
end
|
74
|
+
|
75
|
+
|
55
76
|
# Overrides encode call to prevent to_json from converting non-valid type
|
56
77
|
# objects to nested-json hash (e.g. BadgevilleBerlin::ActivityDefinition::Selector)
|
57
78
|
# to allow for 200 OK response on PUT
|
@@ -1,6 +1,12 @@
|
|
1
1
|
# Subclasses BaseResource to represent a remote resource model class.
|
2
2
|
module BadgevilleBerlin
|
3
3
|
class Player < BadgevilleBerlin::BaseResource
|
4
|
-
COMPLEX_ATTRIBUTES = [:custom]
|
4
|
+
COMPLEX_ATTRIBUTES = [:custom, :preferences]
|
5
|
+
|
6
|
+
# Enables revising Berlin JSON response key names to match what
|
7
|
+
# is expected by model-level logic. (e.g. Berlin JSON payload
|
8
|
+
# returns the player's nickname under the key :nick_name, but the
|
9
|
+
# Player model expects it as :nickname without the underscore.)
|
10
|
+
CUSTOM_REQUEST_KEYS = {:nick_name => :nickname, :teams => :team_ids}
|
5
11
|
end
|
6
12
|
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
# Subclasses BaseResource to represent a remote resource model class.
|
2
|
+
module BadgevilleBerlin
|
3
|
+
class Team < BadgevilleBerlin::BaseResource
|
4
|
+
COMPLEX_ATTRIBUTES = [:custom, :preferences]
|
5
|
+
|
6
|
+
# Enables revising Berlin JSON response key names to match what
|
7
|
+
# is expected by model-level logic. (e.g. Berlin JSON payload
|
8
|
+
# returns the player's nickname under the key :nick_name, but the
|
9
|
+
# Player model expects it as :nickname without the underscore.)
|
10
|
+
CUSTOM_REQUEST_KEYS = {:nick_name => :nickname}
|
11
|
+
end
|
12
|
+
end
|
@@ -6,17 +6,18 @@ module BadgevilleBerlin
|
|
6
6
|
# Initializations
|
7
7
|
@rand1 = rand(5000)
|
8
8
|
@rand2 = rand(5000)
|
9
|
-
@
|
10
|
-
|
11
|
-
# Set FakeWeb to allow a real connection to the Badgeville server as
|
12
|
-
# configured in spec_helper.rb
|
13
|
-
FakeWeb.allow_net_connect = true
|
9
|
+
@rand3 = rand(5000)
|
14
10
|
|
15
11
|
# Configure the gem with the host site and the API Key
|
16
12
|
my_hostname = '<http://myhostname.com>'
|
17
13
|
my_api_key = '<my_api_key>'
|
18
|
-
|
14
|
+
@my_network_id = '<my_network_id>'
|
15
|
+
|
19
16
|
Config.conf(:host_name => my_hostname, :api_key => my_api_key)
|
17
|
+
|
18
|
+
# Set FakeWeb to allow a real connection to the Badgeville server as
|
19
|
+
# configured in spec_helper.rb
|
20
|
+
FakeWeb.allow_net_connect = true
|
20
21
|
end
|
21
22
|
|
22
23
|
describe "README examples" do
|
@@ -58,7 +59,7 @@ module BadgevilleBerlin
|
|
58
59
|
:verb => "share",
|
59
60
|
:player_id => @new_player.id )
|
60
61
|
@share_activity_created = @share_activity.save
|
61
|
-
|
62
|
+
|
62
63
|
# Advanced README: Create an activity definition to specify that a player will earn 4
|
63
64
|
# points each time they perform the "comment" behavior.
|
64
65
|
@new_activity_definition = ActivityDefinition.new(
|
@@ -159,7 +160,7 @@ module BadgevilleBerlin
|
|
159
160
|
end
|
160
161
|
|
161
162
|
it "should have registered a new share activity", :affects_bv_server => true do
|
162
|
-
@share_activity.verb.should == "share"
|
163
|
+
Activity.find(@share_activity.id).verb.should == "share"
|
163
164
|
end
|
164
165
|
|
165
166
|
# CREATE ActivityDefinition
|
@@ -168,7 +169,7 @@ module BadgevilleBerlin
|
|
168
169
|
end
|
169
170
|
|
170
171
|
it "should have a new activity definition for comment", :affects_bv_server => true do
|
171
|
-
@new_activity_definition.verb.should == "comment"
|
172
|
+
ActivityDefinition.find(@new_activity_definition.id).verb.should == "comment"
|
172
173
|
end
|
173
174
|
|
174
175
|
# CREATE Activity (comment)
|
@@ -177,7 +178,7 @@ module BadgevilleBerlin
|
|
177
178
|
end
|
178
179
|
|
179
180
|
it "should have registered a new comment activity", :affects_bv_server => true do
|
180
|
-
@comment_activity.verb.should == "comment"
|
181
|
+
Activity.find(@comment_activity.id).verb.should == "comment"
|
181
182
|
end
|
182
183
|
|
183
184
|
it "should have added 3 points to the new player", :affects_bv_server => true do
|
@@ -205,8 +206,8 @@ module BadgevilleBerlin
|
|
205
206
|
@user_found_by_id.email = "visitor#{@rand2}@emailserver.com"
|
206
207
|
@user_updated = @user_found_by_id.save
|
207
208
|
|
208
|
-
User.find(@new_user.id).email.should == "visitor#{@rand2}@emailserver.com"
|
209
209
|
@user_updated.should == true
|
210
|
+
User.find(@new_user.id).email.should == "visitor#{@rand2}@emailserver.com"
|
210
211
|
end
|
211
212
|
|
212
213
|
# UPDATE ActivityDefinition (points)
|
@@ -311,6 +312,72 @@ module BadgevilleBerlin
|
|
311
312
|
Site.delete(@site.id)
|
312
313
|
end
|
313
314
|
|
315
|
+
describe "BadgevilleBerlin::Player", :affects_bv_server => true do
|
316
|
+
before(:all) do
|
317
|
+
|
318
|
+
# Create a new user
|
319
|
+
@new_user = User.new(
|
320
|
+
:name => "user#{@rand3}",
|
321
|
+
:network_id => @my_network_id,
|
322
|
+
:email => "user#{@rand3}@emailserver.com")
|
323
|
+
@user_created = @new_user.save
|
324
|
+
|
325
|
+
# Create a player
|
326
|
+
@new_player = Player.new(
|
327
|
+
:site_id => @site.id,
|
328
|
+
:user_id => @new_user.id,
|
329
|
+
:display_name => "Visitor #{@rand3}" )
|
330
|
+
@player_created = @new_player.save
|
331
|
+
end
|
332
|
+
|
333
|
+
context 'updating nickname' do
|
334
|
+
it 'should support the "nickname" setter & getter' do
|
335
|
+
@new_player.nickname = 'Sasha'
|
336
|
+
@new_player.save
|
337
|
+
Player.find(@new_player.id).nickname.should eq('Sasha')
|
338
|
+
end
|
339
|
+
|
340
|
+
it 'should NOT set "nickname" when the "nick_name" setter is used' do
|
341
|
+
# Create a new user
|
342
|
+
@new_user2 = User.new(
|
343
|
+
:name => "user#{@rand2}",
|
344
|
+
:network_id => @my_network_id,
|
345
|
+
:email => "user#{@rand2}@emailserver.com")
|
346
|
+
@user_created2 = @new_user2.save
|
347
|
+
|
348
|
+
#Create a player
|
349
|
+
@new_player2 = Player.new(
|
350
|
+
:site_id => @site.id,
|
351
|
+
:user_id => @new_user2.id,
|
352
|
+
:display_name => "Visitor #{@rand2}" )
|
353
|
+
@player_created2 = @new_player2.save
|
354
|
+
|
355
|
+
@new_player2.nick_name = 'Sasha'
|
356
|
+
@new_player2.save
|
357
|
+
Player.find(@new_player2.id).nickname.should be_nil
|
358
|
+
end
|
359
|
+
|
360
|
+
end
|
361
|
+
|
362
|
+
context 'updating player preferences' do
|
363
|
+
it "should default preferences field hide_notifications to false" do
|
364
|
+
Player.find(@new_player.id).preferences['hide_notifications'].should be_false
|
365
|
+
end
|
366
|
+
|
367
|
+
it 'should update preferences field hide_notifications to true if set to Boolean true' do
|
368
|
+
@new_player.preferences = {'hide_notifications' => true}
|
369
|
+
@new_player.save
|
370
|
+
Player.find(@new_player.id).preferences['hide_notifications'].should be_true
|
371
|
+
end
|
372
|
+
|
373
|
+
it 'should update preferences field hide_notifications to true if set to String "true"' do
|
374
|
+
@new_player.preferences = {'hide_notifications' => 'true'}
|
375
|
+
@new_player.save
|
376
|
+
Player.find(@new_player.id).preferences['hide_notifications'].should be_true
|
377
|
+
end
|
378
|
+
end
|
379
|
+
end
|
380
|
+
|
314
381
|
describe "BadgevilleBerlin::RewardDefinition", :affects_bv_server => true do
|
315
382
|
before(:all) do
|
316
383
|
@new_rd = RewardDefinition.new(
|
@@ -351,7 +418,7 @@ module BadgevilleBerlin
|
|
351
418
|
end
|
352
419
|
|
353
420
|
it "should parse correctly a group index call which includes rewards keyed under reward definitions", :affects_bv_server => true do
|
354
|
-
BadgevilleBerlinJsonFormat.stub
|
421
|
+
BadgevilleBerlinJsonFormat.stub(:decode).and_return([JSON.parse(BadgevilleBerlin.response_json["valid_group_all"])])
|
355
422
|
response = Group.all
|
356
423
|
response.first.rewards.count.should == 2
|
357
424
|
end
|
@@ -404,6 +471,42 @@ module BadgevilleBerlin
|
|
404
471
|
lambda { Leaderboard.find(@new_leaderboard.id) }.should raise_error(ActiveResource::ResourceNotFound)
|
405
472
|
end
|
406
473
|
end
|
474
|
+
|
475
|
+
describe "BadgevilleBerlin::Team", :affects_bv_server => true do
|
476
|
+
before(:all) do
|
477
|
+
# Create a team
|
478
|
+
@team = Team.new(
|
479
|
+
:site_id => @site.id,
|
480
|
+
:display_name => "Team #{@rand1}" )
|
481
|
+
@team.save!
|
482
|
+
@team
|
483
|
+
end
|
484
|
+
|
485
|
+
it 'should save teams using the team_ids= setter' do
|
486
|
+
# Create a player
|
487
|
+
@u1 = User.new(:name => "user#{@rand1}", :network_id => @my_network_id, :email => "team_player#{@rand1}@emailserver.com")
|
488
|
+
@u1.save
|
489
|
+
@p1 = Player.new(:site_id => @site.id, :user_id => @u1.id)
|
490
|
+
@p1.save
|
491
|
+
|
492
|
+
@p1.team_ids = [@team.id.to_s]
|
493
|
+
@p1.save!
|
494
|
+
Player.find(@p1.id).team_ids.should eq([@team.id.to_s])
|
495
|
+
end
|
496
|
+
|
497
|
+
it 'should NOT set teams using the teams= setter because "teams" is not attr_accessible' do
|
498
|
+
# Create a player
|
499
|
+
@u2 = User.new(:name => "user#{@rand2}", :network_id => @my_network_id, :email => "team_player#{@rand2}@emailserver.com")
|
500
|
+
@u2.save
|
501
|
+
@p2 = Player.new(:site_id => @site.id, :user_id => @u2.id)
|
502
|
+
@p2.save
|
503
|
+
|
504
|
+
@p2.teams = [@team.id.to_s]
|
505
|
+
@p2.save!
|
506
|
+
Player.find(@p2.id).team_ids.should eq([])
|
507
|
+
end
|
508
|
+
end
|
509
|
+
|
407
510
|
end
|
408
511
|
|
409
512
|
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.
|
4
|
+
version: 1.0.4
|
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:
|
15
|
+
date: 2014-01-07 00:00:00.000000000 Z
|
16
16
|
dependencies:
|
17
17
|
- !ruby/object:Gem::Dependency
|
18
18
|
name: ruby-debug19
|
@@ -218,6 +218,7 @@ files:
|
|
218
218
|
- lib/badgeville_berlin/reward.rb
|
219
219
|
- lib/badgeville_berlin/reward_definition.rb
|
220
220
|
- lib/badgeville_berlin/site.rb
|
221
|
+
- lib/badgeville_berlin/team.rb
|
221
222
|
- lib/badgeville_berlin/track.rb
|
222
223
|
- lib/badgeville_berlin/user.rb
|
223
224
|
- lib/badgeville_berlin/version.rb
|