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.
@@ -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
@@ -1,3 +1,3 @@
1
1
  module BadgevilleBerlin
2
- VERSION = "1.0.3"
2
+ VERSION = "1.0.4"
3
3
  end
@@ -6,17 +6,18 @@ module BadgevilleBerlin
6
6
  # Initializations
7
7
  @rand1 = rand(5000)
8
8
  @rand2 = rand(5000)
9
- @my_network_id = '<my_network_id>'
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!(:decode).and_return([JSON.parse(BadgevilleBerlin.response_json["valid_group_all"])])
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.3
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: 2013-09-18 00:00:00.000000000 Z
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