riaction 0.5.1 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (34) hide show
  1. data/CHANGELOG.md +5 -0
  2. data/lib/riaction/iactionable/api.rb +4 -43
  3. data/lib/riaction/iactionable/objects/achievement.rb +12 -0
  4. data/lib/riaction/iactionable/objects/awardable.rb +9 -1
  5. data/lib/riaction/iactionable/objects/challenge.rb +11 -0
  6. data/lib/riaction/iactionable/objects/goal.rb +13 -0
  7. data/lib/riaction/iactionable/objects/identifier.rb +8 -0
  8. data/lib/riaction/iactionable/objects/leaderboard.rb +7 -0
  9. data/lib/riaction/iactionable/objects/leaderboard_report.rb +11 -0
  10. data/lib/riaction/iactionable/objects/level.rb +9 -0
  11. data/lib/riaction/iactionable/objects/level_type.rb +7 -0
  12. data/lib/riaction/iactionable/objects/point_type.rb +7 -0
  13. data/lib/riaction/iactionable/objects/profile_achievements.rb +20 -0
  14. data/lib/riaction/iactionable/objects/profile_challenges.rb +20 -0
  15. data/lib/riaction/iactionable/objects/profile_goals.rb +20 -0
  16. data/lib/riaction/iactionable/objects/profile_level.rb +7 -0
  17. data/lib/riaction/iactionable/objects/profile_notifications.rb +29 -0
  18. data/lib/riaction/iactionable/objects/profile_points.rb +12 -0
  19. data/lib/riaction/iactionable/objects/profile_summary.rb +16 -3
  20. data/lib/riaction/iactionable/objects/progress.rb +11 -0
  21. data/lib/riaction/iactionable/objects.rb +4 -0
  22. data/lib/riaction/version.rb +1 -1
  23. data/spec/api_spec.rb +42 -16
  24. data/spec/get_achievements_api_response_spec.rb +46 -0
  25. data/spec/get_challenges_api_response_spec.rb +42 -0
  26. data/spec/get_goals_api_response_spec.rb +46 -0
  27. data/spec/get_leaderboard_api_response_spec.rb +76 -0
  28. data/spec/get_profile_achievements_api_response_spec.rb +99 -0
  29. data/spec/get_profile_api_response_spec.rb +103 -0
  30. data/spec/get_profile_challenges_api_response_spec.rb +85 -0
  31. data/spec/get_profile_goals_api_response_spec.rb +89 -0
  32. data/spec/get_profile_notifications_api_response_spec.rb +75 -0
  33. data/spec/get_profile_points_api_response_spec.rb +67 -0
  34. metadata +40 -16
data/CHANGELOG.md CHANGED
@@ -1,5 +1,10 @@
1
1
  # CHANGELOG #
2
2
 
3
+ ## 1.0.0 ##
4
+
5
+ * API return values are now all objects, not mix of key/value pairs and objects.
6
+ * Objects turn themselves back in to original key/value data from IActionable.
7
+
3
8
  ## 0.5.1 ##
4
9
 
5
10
  * Fixed bug preventing profile updates.
@@ -81,20 +81,12 @@ module IActionable
81
81
  case filter_type
82
82
  when :completed
83
83
  request.to("/#{profile_type}/#{id_type}/#{id}/achievements/Completed")
84
- response = request.get
85
- response.map{|achievement_json| IActionable::Objects::Achievement.new(achievement_json)}
86
84
  when :available
87
85
  request.to("/#{profile_type}/#{id_type}/#{id}/achievements/Available")
88
- response = request.get
89
- response.map{|achievement_json| IActionable::Objects::Achievement.new(achievement_json)}
90
86
  else
91
87
  request.to("/#{profile_type}/#{id_type}/#{id}/achievements")
92
- response = request.get
93
- {
94
- :available => response["Available"].map{|achievement_json| IActionable::Objects::Achievement.new(achievement_json)},
95
- :completed => response["Completed"].map{|achievement_json| IActionable::Objects::Achievement.new(achievement_json)}
96
- }
97
88
  end
89
+ IActionable::Objects::ProfileAchievements.new(request.get)
98
90
  end
99
91
 
100
92
  def get_achievements()
@@ -113,20 +105,12 @@ module IActionable
113
105
  case filter_type
114
106
  when :completed
115
107
  request.to("/#{profile_type}/#{id_type}/#{id}/challenges/Completed")
116
- response = request.get
117
- response.map{|challenge_json| IActionable::Objects::Challenge.new(challenge_json)}
118
108
  when :available
119
109
  request.to("/#{profile_type}/#{id_type}/#{id}/challenges/Available")
120
- response = request.get
121
- response.map{|challenge_json| IActionable::Objects::Challenge.new(challenge_json)}
122
110
  else
123
111
  request.to("/#{profile_type}/#{id_type}/#{id}/challenges")
124
- response = request.get
125
- {
126
- :available => response["Available"].map{|challenge_json| IActionable::Objects::Challenge.new(challenge_json)},
127
- :completed => response["Completed"].map{|challenge_json| IActionable::Objects::Challenge.new(challenge_json)}
128
- }
129
112
  end
113
+ IActionable::Objects::ProfileChallenges.new(request.get)
130
114
  end
131
115
 
132
116
  def get_challenges()
@@ -145,20 +129,12 @@ module IActionable
145
129
  case filter_type
146
130
  when :completed
147
131
  request.to("/#{profile_type}/#{id_type}/#{id}/goals/Completed")
148
- response = request.get
149
- response.map{|goal_json| IActionable::Objects::Goal.new(goal_json)}
150
132
  when :available
151
133
  request.to("/#{profile_type}/#{id_type}/#{id}/goals/Available")
152
- response = request.get
153
- response.map{|goal_json| IActionable::Objects::Goal.new(goal_json)}
154
134
  else
155
135
  request.to("/#{profile_type}/#{id_type}/#{id}/goals")
156
- response = request.get
157
- {
158
- :available => response["Available"].map{|goal_json| IActionable::Objects::Goal.new(goal_json)},
159
- :completed => response["Completed"].map{|goal_json| IActionable::Objects::Goal.new(goal_json)}
160
- }
161
136
  end
137
+ IActionable::Objects::ProfileGoals.new(request.get)
162
138
  end
163
139
 
164
140
  def get_goals()
@@ -188,22 +164,7 @@ module IActionable
188
164
 
189
165
  def get_profile_notifications(profile_type, id_type, id)
190
166
  response = @connection.request.with_app_key.to("/#{profile_type}/#{id_type}/#{id}/notifications").get
191
- {
192
- :achievements => {
193
- :available => response["Achievements"]["Available"].map{|a| IActionable::Objects::Achievement.new(a)},
194
- :completed => response["Achievements"]["Completed"].map{|a| IActionable::Objects::Achievement.new(a)}
195
- },
196
- :challenges => {
197
- :available => response["Challenges"]["Available"].map{|c| IActionable::Objects::Challenge.new(c)},
198
- :completed => response["Challenges"]["Completed"].map{|c| IActionable::Objects::Challenge.new(c)}
199
- },
200
- :goals => {
201
- :available => response["Goals"]["Available"].map{|g| IActionable::Objects::Goal.new(g)},
202
- :completed => response["Goals"]["Completed"].map{|g| IActionable::Objects::Goal.new(g)}
203
- },
204
- :levels => response["Levels"].map{|l| IActionable::Objects::Level.new(l)},
205
- :points => response["Points"].map{|p| IActionable::Objects::ProfilePoints.new(p)}
206
- }
167
+ IActionable::Objects::ProfileNotifications.new(response)
207
168
  end
208
169
  end
209
170
  end
@@ -12,6 +12,18 @@ module IActionable
12
12
  end
13
13
 
14
14
  awardable
15
+
16
+ def to_hash
17
+ hash = {
18
+ "Key" => @key,
19
+ "Description" => @description,
20
+ "ImageURL" => @image_url,
21
+ "Name" => @name
22
+ }
23
+ hash.merge!(awardable_hash) unless @progress.empty?
24
+ hash.delete("AwardDate") if @award_date.nil?
25
+ hash
26
+ end
15
27
  end
16
28
  end
17
29
  end
@@ -8,6 +8,7 @@ module IActionable
8
8
  module ClassMethods
9
9
  def awardable
10
10
  attr_accessor :award_date
11
+ attr_accessor :original_award_date
11
12
  attr_accessor :progress
12
13
  include IActionable::Objects::Awardable::InstanceMethods
13
14
  end
@@ -18,7 +19,7 @@ module IActionable
18
19
  @progress = extract_many_as(key_values, "Progress", IActionable::Objects::Progress)
19
20
  # convert the miliseconds within the date string to seconds (per ruby)
20
21
  # "/Date(1275706032317-0600)/" => "1275706032-0600"
21
- @award_date = key_values.delete("AwardDate")
22
+ @original_award_date = @award_date = key_values.delete("AwardDate")
22
23
  @award_date = IActionableObject.timestamp_to_seconds(@award_date) unless @award_date.blank?
23
24
  end
24
25
 
@@ -36,6 +37,13 @@ module IActionable
36
37
  # bug in ruby 1.9.2 where Time.strptime does not support seconds-since-epoch format, but Date.strptime does, so we'll use that for now
37
38
  Date.strptime(@award_date, "%s%z").to_time unless @award_date.blank?
38
39
  end
40
+
41
+ def awardable_hash
42
+ {
43
+ "AwardDate" => @original_award_date,
44
+ "Progress" => @progress.map{|prog| prog.to_hash}
45
+ }
46
+ end
39
47
  end
40
48
  end
41
49
  end
@@ -11,6 +11,17 @@ module IActionable
11
11
  initialize_awardable(key_values)
12
12
  super(key_values)
13
13
  end
14
+
15
+ def to_hash
16
+ hash = {
17
+ "Key" => @key,
18
+ "Description" => @description,
19
+ "Name" => @name
20
+ }
21
+ hash.merge!(awardable_hash) unless @progress.empty?
22
+ hash.delete("AwardDate") if @award_date.nil?
23
+ hash
24
+ end
14
25
  end
15
26
  end
16
27
  end
@@ -12,6 +12,19 @@ module IActionable
12
12
  initialize_awardable(key_values)
13
13
  super(key_values)
14
14
  end
15
+
16
+ def to_hash
17
+ hash = {
18
+ "Key" => @key,
19
+ "Description" => @description,
20
+ "Name" => @name,
21
+ "Interval" => @interval
22
+ }
23
+ hash.merge!(awardable_hash) unless @progress.empty?
24
+ hash.delete("AwardDate") if @award_date.nil?
25
+ hash.delete("Interval") if @interval.nil?
26
+ hash
27
+ end
15
28
  end
16
29
  end
17
30
  end
@@ -4,6 +4,14 @@ module IActionable
4
4
  attr_accessor :id
5
5
  attr_accessor :id_hash
6
6
  attr_accessor :id_type
7
+
8
+ def to_hash
9
+ {
10
+ "ID" => @id,
11
+ "IDHash" => @id_hash,
12
+ "IDType" => @id_type
13
+ }
14
+ end
7
15
  end
8
16
  end
9
17
  end
@@ -3,6 +3,13 @@ module IActionable
3
3
  class Leaderboard < IActionableObject
4
4
  attr_accessor :key
5
5
  attr_accessor :name
6
+
7
+ def to_hash
8
+ {
9
+ "Key" => @key,
10
+ "Name" => @name
11
+ }
12
+ end
6
13
  end
7
14
  end
8
15
  end
@@ -14,6 +14,17 @@ module IActionable
14
14
  @profiles = extract_many_as(key_values, "Profiles", IActionable::Objects::ProfileSummary)
15
15
  super(key_values)
16
16
  end
17
+
18
+ def to_hash
19
+ {
20
+ "PageCount" => @page_count,
21
+ "PageNumber" => @page_number,
22
+ "TotalCount" => @total_count,
23
+ "Leaderboard" => @leaderboard.to_hash,
24
+ "PointType" => @point_type.to_hash,
25
+ "Profiles" => @profiles.map{|profile| profile.to_hash}
26
+ }
27
+ end
17
28
  end
18
29
  end
19
30
  end
@@ -10,6 +10,15 @@ module IActionable
10
10
  @level_type = IActionable::Objects::LevelType.new(key_values.delete("LevelType"))
11
11
  super(key_values)
12
12
  end
13
+
14
+ def to_hash
15
+ {
16
+ "Name" => @name,
17
+ "Number" => @number,
18
+ "RequiredPoints" => @required_points,
19
+ "LevelType" => @level_type.to_hash
20
+ }
21
+ end
13
22
  end
14
23
  end
15
24
  end
@@ -3,6 +3,13 @@ module IActionable
3
3
  class LevelType < IActionableObject
4
4
  attr_accessor :key
5
5
  attr_accessor :name
6
+
7
+ def to_hash
8
+ {
9
+ "Key" => @key,
10
+ "Name" => @name
11
+ }
12
+ end
6
13
  end
7
14
  end
8
15
  end
@@ -3,6 +3,13 @@ module IActionable
3
3
  class PointType < IActionableObject
4
4
  attr_accessor :key
5
5
  attr_accessor :name
6
+
7
+ def to_hash
8
+ {
9
+ "Key" => @key,
10
+ "Name" => @name
11
+ }
12
+ end
6
13
  end
7
14
  end
8
15
  end
@@ -0,0 +1,20 @@
1
+ module IActionable
2
+ module Objects
3
+ class ProfileAchievements < IActionableObject
4
+ attr_accessor :available
5
+ attr_accessor :completed
6
+
7
+ def initialize(key_values={})
8
+ @available = extract_many_as(key_values, "Available", IActionable::Objects::Achievement)
9
+ @completed = extract_many_as(key_values, "Completed", IActionable::Objects::Achievement)
10
+ end
11
+
12
+ def to_hash
13
+ {
14
+ "Available" => @available.map{|achievement| achievement.to_hash},
15
+ "Completed" => @completed.map{|achievement| achievement.to_hash}
16
+ }
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,20 @@
1
+ module IActionable
2
+ module Objects
3
+ class ProfileChallenges < IActionableObject
4
+ attr_accessor :available
5
+ attr_accessor :completed
6
+
7
+ def initialize(key_values={})
8
+ @available = extract_many_as(key_values, "Available", IActionable::Objects::Challenge)
9
+ @completed = extract_many_as(key_values, "Completed", IActionable::Objects::Challenge)
10
+ end
11
+
12
+ def to_hash
13
+ {
14
+ "Available" => @available.map{|challenge| challenge.to_hash},
15
+ "Completed" => @completed.map{|challenge| challenge.to_hash}
16
+ }
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,20 @@
1
+ module IActionable
2
+ module Objects
3
+ class ProfileGoals < IActionableObject
4
+ attr_accessor :available
5
+ attr_accessor :completed
6
+
7
+ def initialize(key_values={})
8
+ @available = extract_many_as(key_values, "Available", IActionable::Objects::Goal)
9
+ @completed = extract_many_as(key_values, "Completed", IActionable::Objects::Goal)
10
+ end
11
+
12
+ def to_hash
13
+ {
14
+ "Available" => @available.map{|goal| goal.to_hash},
15
+ "Completed" => @completed.map{|goal| goal.to_hash}
16
+ }
17
+ end
18
+ end
19
+ end
20
+ end
@@ -8,6 +8,13 @@ module IActionable
8
8
  @current = IActionable::Objects::Level.new(key_values.delete("Current")) unless key_values["Current"].blank?
9
9
  @next = IActionable::Objects::Level.new(key_values.delete("Next")) unless key_values["Next"].blank?
10
10
  end
11
+
12
+ def to_hash
13
+ {
14
+ "Current" => @current.to_hash,
15
+ "Next" => @next.to_hash
16
+ }
17
+ end
11
18
  end
12
19
  end
13
20
  end
@@ -0,0 +1,29 @@
1
+ module IActionable
2
+ module Objects
3
+ class ProfileNotifications < IActionableObject
4
+ attr_accessor :achievements
5
+ attr_accessor :challenges
6
+ attr_accessor :goals
7
+ attr_accessor :levels
8
+ attr_accessor :points
9
+
10
+ def initialize(key_values={})
11
+ @achievements = IActionable::Objects::ProfileAchievements.new(key_values.delete("Achievements"))
12
+ @challenges = IActionable::Objects::ProfileChallenges.new(key_values.delete("Challenges"))
13
+ @goals = IActionable::Objects::ProfileGoals.new(key_values.delete("Goals"))
14
+ @levels = extract_many_as(key_values, "Levels", IActionable::Objects::Level)
15
+ @points = extract_many_as(key_values, "Points", IActionable::Objects::ProfilePoints)
16
+ end
17
+
18
+ def to_hash
19
+ {
20
+ "Achievements" => @achievements.to_hash,
21
+ "Challenges" => @challenges.to_hash,
22
+ "Goals" => @goals.to_hash,
23
+ "Levels" => @levels.map{|level| level.to_hash},
24
+ "Points" => @points.map{|point| point.to_hash}
25
+ }
26
+ end
27
+ end
28
+ end
29
+ end
@@ -12,6 +12,18 @@ module IActionable
12
12
  @point_type = IActionable::Objects::PointType.new(key_values.delete("PointType"))
13
13
  super(key_values)
14
14
  end
15
+
16
+ def to_hash
17
+ hash = {
18
+ "Level" => @level.nil? ? nil : @level.to_hash,
19
+ "PointType" => @point_type.to_hash,
20
+ "Points" => @points,
21
+ "Reason" => @reason
22
+ }
23
+ hash.delete "Level" if @level.nil?
24
+ hash.delete "Reason" if @reason.nil?
25
+ hash
26
+ end
15
27
  end
16
28
  end
17
29
  end
@@ -8,9 +8,9 @@ module IActionable
8
8
  class ProfileSummary < IActionableObject
9
9
  attr_accessor :display_name
10
10
  attr_accessor :identifiers
11
- attr_accessor :points
12
- attr_accessor :recent_achievements
13
- attr_accessor :rank
11
+ attr_accessor :points
12
+ attr_accessor :recent_achievements # not always present
13
+ attr_accessor :rank # not always present
14
14
 
15
15
  def initialize(key_values={})
16
16
  @identifiers = extract_many_as(key_values, "Identifiers", IActionable::Objects::Identifier)
@@ -19,6 +19,19 @@ module IActionable
19
19
 
20
20
  super(key_values)
21
21
  end
22
+
23
+ def to_hash
24
+ hash = {
25
+ "DisplayName" => @display_name,
26
+ "Identifiers" => @identifiers.map{|identifier| identifier.to_hash}
27
+ }
28
+ unless @points.nil?
29
+ hash["Points"] = @points.kind_of?(Array) ? @points.map{|point| point.to_hash} : @points
30
+ end
31
+ hash["RecentAchievements"] = @recent_achievements.map{|recent_achievement| recent_achievement.to_hash} unless @recent_achievements.empty?
32
+ hash["Rank"] = @rank unless @rank.nil?
33
+ hash
34
+ end
22
35
  end
23
36
  end
24
37
  end
@@ -3,6 +3,7 @@ module IActionable
3
3
  class Progress < IActionableObject
4
4
  attr_accessor :description
5
5
  attr_accessor :condition_met_date
6
+ attr_accessor :original_condition_met_date
6
7
  attr_accessor :current_value
7
8
  attr_accessor :required_value
8
9
  attr :complete
@@ -11,6 +12,7 @@ module IActionable
11
12
  super(key_values)
12
13
  # convert the miliseconds within the date string to seconds (per ruby)
13
14
  # "/Date(1275706032317-0600)/" => "1275706032-0600"
15
+ @original_condition_met_date = @condition_met_date
14
16
  @condition_met_date = IActionableObject.timestamp_to_seconds(@condition_met_date) unless @condition_met_date.blank?
15
17
  end
16
18
 
@@ -30,6 +32,15 @@ module IActionable
30
32
  # bug in ruby 1.9.2 where Time.strptime does not support seconds-since-epoch format, but Date.strptime does, so we'll use that for now
31
33
  Date.strptime(@condition_met_date, "%s%z").to_time unless @condition_met_date.blank?
32
34
  end
35
+
36
+ def to_hash
37
+ {
38
+ "Description" => @description,
39
+ "CurrentValue" => @current_value,
40
+ "RequiredValue" => @required_value,
41
+ "ConditionMetDate" => @original_condition_met_date
42
+ }
43
+ end
33
44
  end
34
45
  end
35
46
  end
@@ -21,3 +21,7 @@ require 'riaction/iactionable/objects/point_type.rb'
21
21
  require 'riaction/iactionable/objects/profile_level.rb'
22
22
  require 'riaction/iactionable/objects/profile_points.rb'
23
23
  require 'riaction/iactionable/objects/profile_summary.rb'
24
+ require 'riaction/iactionable/objects/profile_achievements.rb'
25
+ require 'riaction/iactionable/objects/profile_challenges.rb'
26
+ require 'riaction/iactionable/objects/profile_goals.rb'
27
+ require 'riaction/iactionable/objects/profile_notifications.rb'
@@ -1,3 +1,3 @@
1
1
  module Riaction
2
- VERSION = "0.5.1"
2
+ VERSION = "1.0.0"
3
3
  end
data/spec/api_spec.rb CHANGED
@@ -6,6 +6,7 @@ describe IActionable::Api do
6
6
  @mock_connection = mock("connection")
7
7
  @mock_response = mock("mock response")
8
8
  @mock_response_item = mock("mock response item")
9
+ @mock_object = mock("mock object")
9
10
 
10
11
  IActionable::Connection.stub!(:new).and_return(@mock_connection)
11
12
  IActionable::Settings.stub!(:new).and_return(@mock_settings)
@@ -187,12 +188,12 @@ describe IActionable::Api do
187
188
  end
188
189
  end
189
190
 
190
- [ [:achievements, IActionable::Objects::Achievement],
191
- [:challenges, IActionable::Objects::Challenge],
192
- [:goals, IActionable::Objects::Goal]].each do |type|
191
+ [ [:achievements, IActionable::Objects::ProfileAchievements, IActionable::Objects::Achievement],
192
+ [:challenges, IActionable::Objects::ProfileChallenges, IActionable::Objects::Challenge],
193
+ [:goals, IActionable::Objects::ProfileGoals, IActionable::Objects::Goal]].each do |type|
193
194
  describe "loading all #{type} for a profile" do
194
195
  before do
195
- type[1].stub!(:new)
196
+ type[1].stub!(:new).and_return(@mock_object)
196
197
  @mock_connection.should_receive(:request).once.ordered.and_return(@mock_connection)
197
198
  @mock_connection.should_receive(:with_app_key).and_return(@mock_connection)
198
199
  @mock_connection.should_receive(:get).and_return(@mock_response)
@@ -206,8 +207,8 @@ describe IActionable::Api do
206
207
 
207
208
  it "should return as the proper object type" do
208
209
  @mock_connection.stub!(:to).and_return(@mock_connection)
209
- type[1].should_receive(:new).once.with(@mock_response_item)
210
- @api.send("get_profile_#{type[0]}", @profile_type, @id_type, @id, :available).should == @mock_response
210
+ type[1].should_receive(:new).once.with(@mock_response).and_return(@mock_object)
211
+ @api.send("get_profile_#{type[0]}", @profile_type, @id_type, @id, :available).should == @mock_object
211
212
  end
212
213
  end
213
214
 
@@ -219,8 +220,8 @@ describe IActionable::Api do
219
220
 
220
221
  it "should return as the proper object type" do
221
222
  @mock_connection.stub!(:to).and_return(@mock_connection)
222
- type[1].should_receive(:new).once.with(@mock_response_item)
223
- @api.send("get_profile_#{type[0]}", @profile_type, @id_type, @id, :completed).should == @mock_response
223
+ type[1].should_receive(:new).once.with(@mock_response).and_return(@mock_object)
224
+ @api.send("get_profile_#{type[0]}", @profile_type, @id_type, @id, :completed).should == @mock_object
224
225
  end
225
226
  end
226
227
 
@@ -230,13 +231,33 @@ describe IActionable::Api do
230
231
  @api.send("get_profile_#{type[0]}", @profile_type, @id_type, @id, nil)
231
232
  end
232
233
 
233
- it "should return as the proper object type, in a hash with both filter types" do
234
+ it "should return as the proper object type" do
234
235
  @mock_connection.stub!(:to).and_return(@mock_connection)
235
- type[1].should_receive(:new).twice.with(@mock_response_item)
236
- @api.send("get_profile_#{type[0]}", @profile_type, @id_type, @id, nil).should == {:available => @mock_response, :completed => @mock_response}
236
+ type[1].should_receive(:new).once.with(@mock_response).and_return(@mock_object)
237
+ @api.send("get_profile_#{type[0]}", @profile_type, @id_type, @id, nil).should == @mock_object
237
238
  end
238
239
  end
239
240
  end
241
+
242
+ describe "loading all #{type[0]} outside of a profile context" do
243
+ before do
244
+ type[2].stub!(:new).and_return(@mock_object)
245
+ @mock_connection.should_receive(:request).once.ordered.and_return(@mock_connection)
246
+ @mock_connection.should_receive(:with_app_key).and_return(@mock_connection)
247
+ @mock_connection.should_receive(:get).and_return(@mock_response)
248
+ end
249
+
250
+ it "should make the correct IActionable API all" do
251
+ @mock_connection.should_receive(:to).once.with("/#{type[0]}").and_return(@mock_connection)
252
+ @api.send("get_#{type[0]}")
253
+ end
254
+
255
+ it "should return as the proper object type" do
256
+ @mock_connection.stub!(:to).and_return(@mock_connection)
257
+ type[2].should_receive(:new).once.with(@mock_response_item).and_return(@mock_object)
258
+ @api.send("get_#{type[0]}").should == @mock_response
259
+ end
260
+ end
240
261
  end
241
262
 
242
263
  describe "leaderboards" do
@@ -273,16 +294,21 @@ describe IActionable::Api do
273
294
 
274
295
  describe "notifications" do
275
296
  it "should make the correct IActionable API all" do
276
- IActionable::Objects::Achievement.stub!(:new)
277
- IActionable::Objects::Challenge.stub!(:new)
278
- IActionable::Objects::Goal.stub!(:new)
279
- IActionable::Objects::Level.stub!(:new)
280
- IActionable::Objects::ProfilePoints.stub!(:new)
297
+ IActionable::Objects::ProfileNotifications.stub!(:new)
281
298
  @mock_connection.should_receive(:request).once.ordered.and_return(@mock_connection)
282
299
  @mock_connection.should_receive(:with_app_key).and_return(@mock_connection)
283
300
  @mock_connection.should_receive(:to).with("/#{@profile_type}/#{@id_type}/#{@id}/notifications").and_return(@mock_connection)
284
301
  @mock_connection.should_receive(:get).and_return(@mock_response)
285
302
  @api.get_profile_notifications(@profile_type, @id_type, @id)
286
303
  end
304
+
305
+ it "should return with the corect object" do
306
+ @mock_connection.stub!(:request).and_return(@mock_connection)
307
+ @mock_connection.stub!(:with_app_key).and_return(@mock_connection)
308
+ @mock_connection.stub!(:to).and_return(@mock_connection)
309
+ @mock_connection.stub!(:get).and_return(@mock_response)
310
+ IActionable::Objects::ProfileNotifications.should_receive(:new).once.with(@mock_response).and_return(@mock_response)
311
+ @api.get_profile_notifications(@profile_type, @id_type, @id).should == @mock_response
312
+ end
287
313
  end
288
314
  end
@@ -0,0 +1,46 @@
1
+ require 'spec_helper.rb'
2
+
3
+ describe "API response to get_achievements" do
4
+ before do
5
+ @sample_response = [
6
+ {
7
+ "Key" => "opinionated_gold",
8
+ "Description" => "Leave 25 comments.",
9
+ "ImageURL" => "http://iactionable.blob.core.windows.net/achievementimages/33333",
10
+ "Name" => "Opinionated - Gold"
11
+ },
12
+ {
13
+ "Key" => "opinionated_silver",
14
+ "Description" => "Make 10 comments.",
15
+ "ImageURL" => "http://iactionable.blob.core.windows.net/achievementimages/44444",
16
+ "Name" => "Opinionated - Silver"
17
+ }
18
+ ]
19
+ end
20
+
21
+ it "should not raise error on wrapping in an object" do
22
+ lambda { @sample_response.map{|data| IActionable::Objects::Achievement.new(data) } }.should_not raise_error
23
+ end
24
+
25
+ describe "when wrapped in an object" do
26
+ before do
27
+ @wrapped = @sample_response.map{|data| IActionable::Objects::Achievement.new(data) }
28
+ end
29
+
30
+ it "should contain ar array of available achievements" do
31
+ @wrapped.should be_instance_of Array
32
+ @wrapped.first.key.should == @sample_response[0]["Key"]
33
+ @wrapped.first.description.should == @sample_response[0]["Description"]
34
+ @wrapped.first.image_url.should == @sample_response[0]["ImageURL"]
35
+ @wrapped.first.name.should == @sample_response[0]["Name"]
36
+ @wrapped.last.key.should == @sample_response[1]["Key"]
37
+ @wrapped.last.description.should == @sample_response[1]["Description"]
38
+ @wrapped.last.image_url.should == @sample_response[1]["ImageURL"]
39
+ @wrapped.last.name.should == @sample_response[1]["Name"]
40
+ end
41
+
42
+ it "should convert to a hash equal to the original" do
43
+ hash_including(:array => @sample_response).should == {:array => @wrapped.map{|achievement| achievement.to_hash}}
44
+ end
45
+ end
46
+ end