ruby-iactionable 0.0.1
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/.gitignore +4 -0
- data/.rvmrc +3 -0
- data/CHANGELOG.md +5 -0
- data/Gemfile +4 -0
- data/Gemfile.lock +43 -0
- data/README.md +49 -0
- data/Rakefile +1 -0
- data/lib/iactionable/api.rb +170 -0
- data/lib/iactionable/connection.rb +114 -0
- data/lib/iactionable/error.rb +17 -0
- data/lib/iactionable/objects/achievement.rb +29 -0
- data/lib/iactionable/objects/awardable.rb +50 -0
- data/lib/iactionable/objects/challenge.rb +27 -0
- data/lib/iactionable/objects/goal.rb +30 -0
- data/lib/iactionable/objects/i_actionable_object.rb +36 -0
- data/lib/iactionable/objects/identifier.rb +17 -0
- data/lib/iactionable/objects/leaderboard.rb +15 -0
- data/lib/iactionable/objects/leaderboard_report.rb +30 -0
- data/lib/iactionable/objects/level.rb +24 -0
- data/lib/iactionable/objects/level_type.rb +15 -0
- data/lib/iactionable/objects/point_type.rb +15 -0
- data/lib/iactionable/objects/profile_achievements.rb +20 -0
- data/lib/iactionable/objects/profile_challenges.rb +20 -0
- data/lib/iactionable/objects/profile_goals.rb +20 -0
- data/lib/iactionable/objects/profile_level.rb +20 -0
- data/lib/iactionable/objects/profile_notifications.rb +29 -0
- data/lib/iactionable/objects/profile_points.rb +29 -0
- data/lib/iactionable/objects/profile_summary.rb +32 -0
- data/lib/iactionable/objects/progress.rb +46 -0
- data/lib/iactionable/objects.rb +27 -0
- data/lib/iactionable/settings.rb +30 -0
- data/lib/iactionable/version.rb +3 -0
- data/lib/iactionable.rb +9 -0
- data/ruby_iactionable.gemspec +28 -0
- data/spec/api/get_achievements_api_response_spec.rb +46 -0
- data/spec/api/get_challenges_api_response_spec.rb +42 -0
- data/spec/api/get_goals_api_response_spec.rb +46 -0
- data/spec/api/get_leaderboard_api_response_spec.rb +76 -0
- data/spec/api/get_profile_achievements_api_response_spec.rb +99 -0
- data/spec/api/get_profile_api_response_spec.rb +103 -0
- data/spec/api/get_profile_challenges_api_response_spec.rb +85 -0
- data/spec/api/get_profile_goals_api_response_spec.rb +89 -0
- data/spec/api/get_profile_notifications_api_response_spec.rb +75 -0
- data/spec/api/get_profile_points_api_response_spec.rb +67 -0
- data/spec/api_spec.rb +314 -0
- data/spec/connection_spec.rb +111 -0
- data/spec/settings_spec.rb +52 -0
- data/spec/spec_helper.rb +1 -0
- metadata +163 -0
data/spec/api_spec.rb
ADDED
@@ -0,0 +1,314 @@
|
|
1
|
+
require 'spec_helper.rb'
|
2
|
+
|
3
|
+
describe IActionable::Api do
|
4
|
+
before do
|
5
|
+
@mock_settings = mock("mock settings")
|
6
|
+
@mock_connection = mock("connection")
|
7
|
+
@mock_response = mock("mock response")
|
8
|
+
@mock_response_item = mock("mock response item")
|
9
|
+
@mock_object = mock("mock object")
|
10
|
+
|
11
|
+
IActionable::Connection.stub!(:new).and_return(@mock_connection)
|
12
|
+
IActionable::Settings.stub!(:new).and_return(@mock_settings)
|
13
|
+
|
14
|
+
@mock_response.stub!(:map).and_yield(@mock_response_item).and_return(@mock_response)
|
15
|
+
@mock_response.stub!(:[]).and_return(@mock_response)
|
16
|
+
|
17
|
+
IActionable::Api.init_settings(nil)
|
18
|
+
|
19
|
+
@api = IActionable::Api.new
|
20
|
+
@profile_type = "user"
|
21
|
+
@id_type = "custom"
|
22
|
+
@id = 42
|
23
|
+
end
|
24
|
+
|
25
|
+
describe "initialization" do
|
26
|
+
it "should initialize the connection with the previously initialized settings" do
|
27
|
+
IActionable::Settings.should_receive(:new).once.with({:foo => "bar"})
|
28
|
+
IActionable::Connection.should_receive(:new).once.with(@mock_settings)
|
29
|
+
IActionable::Api.init_settings({:foo => "bar"})
|
30
|
+
IActionable::Api.new
|
31
|
+
end
|
32
|
+
|
33
|
+
describe "without having been pre-initialized with settings" do
|
34
|
+
before do
|
35
|
+
IActionable::Api.class_variable_set(:@@settings, nil)
|
36
|
+
end
|
37
|
+
|
38
|
+
it "should raise a config error" do
|
39
|
+
lambda { IActionable::Api.new }.should raise_error(IActionable::ConfigError)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
describe "event creation" do
|
45
|
+
before do
|
46
|
+
@event_key = "some_event"
|
47
|
+
@mock_event_attrs = mock("mock event attrs")
|
48
|
+
end
|
49
|
+
|
50
|
+
it "should make the correct IActionable API all" do
|
51
|
+
@mock_connection.should_receive(:request).once.ordered.and_return(@mock_connection)
|
52
|
+
@mock_connection.should_receive(:with_app_key).and_return(@mock_connection)
|
53
|
+
@mock_connection.should_receive(:with_api_key).and_return(@mock_connection)
|
54
|
+
@mock_connection.should_receive(:to).with("/#{@profile_type}/#{@id_type}/#{@id}/events/#{@event_key}").and_return(@mock_connection)
|
55
|
+
@mock_connection.should_receive(:with_params).with(@mock_event_attrs).and_return(@mock_connection)
|
56
|
+
@mock_connection.should_receive(:post).and_return(@mock_response)
|
57
|
+
@api.log_event(@profile_type, @id_type, @id, @event_key, @mock_event_attrs).should == @mock_response
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
describe "profile" do
|
62
|
+
before do
|
63
|
+
@mock_connection.should_receive(:request).once.ordered.and_return(@mock_connection)
|
64
|
+
@mock_connection.should_receive(:with_app_key).and_return(@mock_connection)
|
65
|
+
end
|
66
|
+
|
67
|
+
describe "fetching" do
|
68
|
+
before do
|
69
|
+
@mock_connection.should_receive(:to).with("/#{@profile_type}/#{@id_type}/#{@id}").and_return(@mock_connection)
|
70
|
+
@mock_connection.should_receive(:get).and_return(@mock_response)
|
71
|
+
IActionable::Objects::ProfileSummary.stub!(:new)
|
72
|
+
end
|
73
|
+
|
74
|
+
describe "with achivement count" do
|
75
|
+
before do
|
76
|
+
@achievement_count = 10
|
77
|
+
end
|
78
|
+
|
79
|
+
it "should be the correct IActionable API call" do
|
80
|
+
@mock_connection.should_receive(:with_params).with({:achievementCount => @achievement_count}).and_return(@mock_connection)
|
81
|
+
@api.get_profile_summary(@profile_type, @id_type, @id, @achievement_count)
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
describe "without achievement count" do
|
86
|
+
it "should be the correct IActionable API call" do
|
87
|
+
@mock_connection.should_not_receive(:with_params)
|
88
|
+
@api.get_profile_summary(@profile_type, @id_type, @id, nil)
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
it "should return the response as a ProfileSummary object" do
|
93
|
+
IActionable::Objects::ProfileSummary.should_receive(:new).once.with(@mock_response)
|
94
|
+
@api.get_profile_summary(@profile_type, @id_type, @id, nil)
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
describe "creation" do
|
99
|
+
before do
|
100
|
+
@mock_connection.should_receive(:with_api_key).and_return(@mock_connection)
|
101
|
+
@mock_connection.should_receive(:to).with("/#{@profile_type}/#{@id_type}/#{@id}").and_return(@mock_connection)
|
102
|
+
@mock_connection.should_receive(:post).and_return(@mock_response)
|
103
|
+
end
|
104
|
+
|
105
|
+
describe "with optional display name" do
|
106
|
+
before do
|
107
|
+
@display_name = "zortnac"
|
108
|
+
end
|
109
|
+
|
110
|
+
it "should be the correct IActionable API call" do
|
111
|
+
@mock_connection.should_receive(:with_params).with({:displayName => @display_name}).and_return(@mock_connection)
|
112
|
+
@api.create_profile(@profile_type, @id_type, @id, @display_name).should == @mock_response
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
describe "without optional display name" do
|
117
|
+
it "should be the correct IActionable API call" do
|
118
|
+
@mock_connection.should_not_receive(:with_params)
|
119
|
+
@api.create_profile(@profile_type, @id_type, @id, nil).should == @mock_response
|
120
|
+
end
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
124
|
+
describe "updating" do
|
125
|
+
it "should make the correct IActionable API all" do
|
126
|
+
new_type = "email"
|
127
|
+
new_id = 2
|
128
|
+
@mock_connection.should_receive(:with_api_key).and_return(@mock_connection)
|
129
|
+
@mock_connection.should_receive(:to).with("/#{@profile_type}/#{@id_type}/#{@id}/identifiers/#{new_type}/#{new_id}").and_return(@mock_connection)
|
130
|
+
@mock_connection.should_receive(:post).and_return(@mock_response)
|
131
|
+
@api.add_profile_identifier(@profile_type, @id_type, @id, new_type, new_id).should == @mock_response
|
132
|
+
end
|
133
|
+
end
|
134
|
+
end
|
135
|
+
|
136
|
+
describe "profile points" do
|
137
|
+
before do
|
138
|
+
@mock_connection.should_receive(:request).once.ordered.and_return(@mock_connection)
|
139
|
+
@mock_connection.should_receive(:with_app_key).and_return(@mock_connection)
|
140
|
+
@point_type = "experience_points"
|
141
|
+
IActionable::Objects::ProfilePoints.stub!(:new).and_return(@mock_response)
|
142
|
+
end
|
143
|
+
|
144
|
+
describe "fetching" do
|
145
|
+
it "should make the correct IActionable API all" do
|
146
|
+
@mock_connection.should_receive(:to).with("/#{@profile_type}/#{@id_type}/#{@id}/points/#{@point_type}").and_return(@mock_connection)
|
147
|
+
@mock_connection.should_receive(:get).and_return(@mock_response)
|
148
|
+
@api.get_profile_points(@profile_type, @id_type, @id, @point_type)
|
149
|
+
end
|
150
|
+
|
151
|
+
it "should return the response as a ProfileSummary object" do
|
152
|
+
@mock_connection.stub!(:to).and_return(@mock_connection)
|
153
|
+
@mock_connection.stub!(:get).and_return(@mock_response)
|
154
|
+
IActionable::Objects::ProfilePoints.should_receive(:new).once.with(@mock_response).and_return(@mock_response)
|
155
|
+
@api.get_profile_points(@profile_type, @id_type, @id, @point_type).should == @mock_response
|
156
|
+
end
|
157
|
+
end
|
158
|
+
|
159
|
+
describe "updating" do
|
160
|
+
before do
|
161
|
+
@amount = 100
|
162
|
+
@mock_connection.should_receive(:with_api_key).and_return(@mock_connection)
|
163
|
+
@mock_connection.should_receive(:to).with("/#{@profile_type}/#{@id_type}/#{@id}/points/#{@point_type}").and_return(@mock_connection)
|
164
|
+
@mock_connection.should_receive(:with_params).with(hash_including(:value => @amount)).and_return(@mock_connection)
|
165
|
+
@mock_connection.should_receive(:post).and_return(@mock_response)
|
166
|
+
end
|
167
|
+
|
168
|
+
describe "with optional reason" do
|
169
|
+
it "should make the correct IActionable API all" do
|
170
|
+
reason = "some reason"
|
171
|
+
@mock_connection.should_receive(:with_params).with(hash_including(:description => reason)).and_return(@mock_connection)
|
172
|
+
@api.update_profile_points(@profile_type, @id_type, @id, @point_type, @amount, reason)
|
173
|
+
end
|
174
|
+
end
|
175
|
+
|
176
|
+
describe "without optional reason" do
|
177
|
+
it "should make the correct IActionable API all" do
|
178
|
+
reason = "some reason"
|
179
|
+
@mock_connection.should_not_receive(:with_params).with(hash_including(:description => reason))
|
180
|
+
@api.update_profile_points(@profile_type, @id_type, @id, @point_type, @amount, nil)
|
181
|
+
end
|
182
|
+
end
|
183
|
+
|
184
|
+
it "should return the response as a ProfileSummary object" do
|
185
|
+
IActionable::Objects::ProfilePoints.should_receive(:new).once.with(@mock_response).and_return(@mock_response)
|
186
|
+
@api.update_profile_points(@profile_type, @id_type, @id, @point_type, @amount, nil).should == @mock_response
|
187
|
+
end
|
188
|
+
end
|
189
|
+
end
|
190
|
+
|
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|
|
194
|
+
describe "loading all #{type} for a profile" do
|
195
|
+
before do
|
196
|
+
type[1].stub!(:new).and_return(@mock_object)
|
197
|
+
@mock_connection.should_receive(:request).once.ordered.and_return(@mock_connection)
|
198
|
+
@mock_connection.should_receive(:with_app_key).and_return(@mock_connection)
|
199
|
+
@mock_connection.should_receive(:get).and_return(@mock_response)
|
200
|
+
end
|
201
|
+
|
202
|
+
describe "filtered by available" do
|
203
|
+
it "should make the correct IActionable API all" do
|
204
|
+
@mock_connection.should_receive(:to).once.with("/#{@profile_type}/#{@id_type}/#{@id}/#{type[0]}/Available").and_return(@mock_connection)
|
205
|
+
@api.send("get_profile_#{type[0]}", @profile_type, @id_type, @id, :available)
|
206
|
+
end
|
207
|
+
|
208
|
+
it "should return as the proper object type" do
|
209
|
+
@mock_connection.stub!(:to).and_return(@mock_connection)
|
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
|
212
|
+
end
|
213
|
+
end
|
214
|
+
|
215
|
+
describe "filtered by complete" do
|
216
|
+
it "should make the correct IActionable API all" do
|
217
|
+
@mock_connection.should_receive(:to).once.with("/#{@profile_type}/#{@id_type}/#{@id}/#{type[0]}/Completed").and_return(@mock_connection)
|
218
|
+
@api.send("get_profile_#{type[0]}", @profile_type, @id_type, @id, :completed)
|
219
|
+
end
|
220
|
+
|
221
|
+
it "should return as the proper object type" do
|
222
|
+
@mock_connection.stub!(:to).and_return(@mock_connection)
|
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
|
225
|
+
end
|
226
|
+
end
|
227
|
+
|
228
|
+
describe "unfiltered" do
|
229
|
+
it "should make the correct IActionable API all" do
|
230
|
+
@mock_connection.should_receive(:to).once.with("/#{@profile_type}/#{@id_type}/#{@id}/#{type[0]}").and_return(@mock_connection)
|
231
|
+
@api.send("get_profile_#{type[0]}", @profile_type, @id_type, @id, nil)
|
232
|
+
end
|
233
|
+
|
234
|
+
it "should return as the proper object type" do
|
235
|
+
@mock_connection.stub!(:to).and_return(@mock_connection)
|
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
|
238
|
+
end
|
239
|
+
end
|
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
|
261
|
+
end
|
262
|
+
|
263
|
+
describe "leaderboards" do
|
264
|
+
before do
|
265
|
+
@point_type = "experience_points"
|
266
|
+
@leaderboard = "top_players"
|
267
|
+
@page_number = 3
|
268
|
+
@page_count = 9
|
269
|
+
@mock_connection.should_receive(:request).once.ordered.and_return(@mock_connection)
|
270
|
+
@mock_connection.should_receive(:with_app_key).and_return(@mock_connection)
|
271
|
+
IActionable::Objects::LeaderboardReport.stub!(:new).and_return(@mock_response)
|
272
|
+
end
|
273
|
+
|
274
|
+
describe "fetching" do
|
275
|
+
it "should make the correct IActionable API all" do
|
276
|
+
@mock_connection.should_receive(:to).with("/#{@profile_type}/leaderboards/points/#{@point_type}/#{@leaderboard}").and_return(@mock_connection)
|
277
|
+
@mock_connection.should_receive(:with_params).with(hash_including(:pageNumber => @page_number)).and_return(@mock_connection)
|
278
|
+
@mock_connection.should_receive(:with_params).with(hash_including(:pageCount => @page_count)).and_return(@mock_connection)
|
279
|
+
@mock_connection.should_receive(:with_params).with(hash_including(:id => @id)).and_return(@mock_connection)
|
280
|
+
@mock_connection.should_receive(:with_params).with(hash_including(:idType => @id_type)).and_return(@mock_connection)
|
281
|
+
@mock_connection.should_receive(:get).and_return(@mock_response)
|
282
|
+
@api.get_leaderboard(@profile_type, @point_type, @leaderboard, @page_number, @page_count, @id, @id_type)
|
283
|
+
end
|
284
|
+
|
285
|
+
it "should return the response as a LeaderboardReport object" do
|
286
|
+
@mock_connection.stub!(:to).and_return(@mock_connection)
|
287
|
+
@mock_connection.stub!(:with_params).and_return(@mock_connection)
|
288
|
+
@mock_connection.stub!(:get).and_return(@mock_response)
|
289
|
+
IActionable::Objects::LeaderboardReport.should_receive(:new).once.with(@mock_response).and_return(@mock_response)
|
290
|
+
@api.get_leaderboard(@profile_type, @point_type, @leaderboard, nil, nil, nil, nil).should == @mock_response
|
291
|
+
end
|
292
|
+
end
|
293
|
+
end
|
294
|
+
|
295
|
+
describe "notifications" do
|
296
|
+
it "should make the correct IActionable API all" do
|
297
|
+
IActionable::Objects::ProfileNotifications.stub!(:new)
|
298
|
+
@mock_connection.should_receive(:request).once.ordered.and_return(@mock_connection)
|
299
|
+
@mock_connection.should_receive(:with_app_key).and_return(@mock_connection)
|
300
|
+
@mock_connection.should_receive(:to).with("/#{@profile_type}/#{@id_type}/#{@id}/notifications").and_return(@mock_connection)
|
301
|
+
@mock_connection.should_receive(:get).and_return(@mock_response)
|
302
|
+
@api.get_profile_notifications(@profile_type, @id_type, @id)
|
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
|
313
|
+
end
|
314
|
+
end
|
@@ -0,0 +1,111 @@
|
|
1
|
+
require 'spec_helper.rb'
|
2
|
+
|
3
|
+
describe IActionable::Connection do
|
4
|
+
before do
|
5
|
+
@settings_hash = {
|
6
|
+
:app_key => "12345",
|
7
|
+
:api_key => "abcde",
|
8
|
+
:version => "3"
|
9
|
+
}
|
10
|
+
@settings = IActionable::Settings.new(@settings_hash)
|
11
|
+
end
|
12
|
+
|
13
|
+
describe "initialization" do
|
14
|
+
it "should initialize a new Faraday connection object" do
|
15
|
+
mock_faraday_bulder = mock("faraday builder")
|
16
|
+
|
17
|
+
Faraday.should_receive(:new).once.with("http://api.iactionable.com/v#{@settings.version}/").and_yield(mock_faraday_bulder)
|
18
|
+
mock_faraday_bulder.should_receive(:use).once.with(FaradayStack::ResponseJSON, {:content_type => 'application/json'})
|
19
|
+
mock_faraday_bulder.should_receive(:use).once.with(Faraday::Response::RaiseError)
|
20
|
+
mock_faraday_bulder.should_receive(:use).once.with(Faraday::Adapter::NetHttp)
|
21
|
+
|
22
|
+
IActionable::Connection.new(@settings)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
describe "requests" do
|
27
|
+
before do
|
28
|
+
@mock_faraday_connection = mock("mock faraday connection")
|
29
|
+
@mock_faraday_response = mock("mock faraday response")
|
30
|
+
@mock_faraday_request_builder = mock("mock faraday request builder")
|
31
|
+
@mock_response_body = mock("mock response body")
|
32
|
+
@mock_faraday_request_headers = mock("mock faraday request headers")
|
33
|
+
@mock_faraday_response.stub!(:body).and_return(@mock_response_body)
|
34
|
+
@mock_faraday_request_builder.stub!(:headers).and_return(@mock_faraday_request_headers)
|
35
|
+
@mock_faraday_request_headers.stub!(:merge!).and_return(true)
|
36
|
+
Faraday.stub!(:new).and_return(@mock_faraday_connection)
|
37
|
+
@connection = IActionable::Connection.new(@settings)
|
38
|
+
@path = "/test/path"
|
39
|
+
end
|
40
|
+
|
41
|
+
describe "using get method" do
|
42
|
+
describe "requiring an app key" do
|
43
|
+
describe "with optional params" do
|
44
|
+
it "should request correctly through faraday and return the body" do
|
45
|
+
@mock_faraday_connection.should_receive(:get).and_yield(@mock_faraday_request_builder).and_return(@mock_faraday_response)
|
46
|
+
@mock_faraday_request_builder.should_receive(:url).once.with(@path, hash_including(:appKey => @settings.app_key, :foo => :bar))
|
47
|
+
@mock_faraday_request_builder.should_receive(:headers).any_number_of_times
|
48
|
+
@connection.request.to(@path).with_app_key.with_params(:foo => :bar).get.should == @mock_response_body
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
describe "without optional params" do
|
53
|
+
it "should request correctly through faraday and return the body" do
|
54
|
+
@mock_faraday_connection.should_receive(:get).and_yield(@mock_faraday_request_builder).and_return(@mock_faraday_response)
|
55
|
+
@mock_faraday_request_builder.should_receive(:url).once.with(@path, hash_including(:appKey => @settings.app_key))
|
56
|
+
@mock_faraday_request_builder.should_receive(:headers).any_number_of_times
|
57
|
+
@connection.request.to(@path).with_app_key.get.should == @mock_response_body
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
describe "using post method" do
|
64
|
+
describe "requiring an app key" do
|
65
|
+
describe "requiring an api key" do
|
66
|
+
describe "with optional params" do
|
67
|
+
it "should request correctly through faraday and return the body" do
|
68
|
+
@mock_faraday_connection.should_receive(:post).and_yield(@mock_faraday_request_builder).and_return(@mock_faraday_response)
|
69
|
+
@mock_faraday_request_builder.should_receive(:url).once.with(@path, hash_including(:appKey => @settings.app_key, :foo => :bar))
|
70
|
+
@mock_faraday_request_builder.should_receive(:headers).once.and_return(@mock_faraday_request_headers)
|
71
|
+
@mock_faraday_request_headers.should_receive(:merge!).once.with(:Authorization => @settings.api_key)
|
72
|
+
@connection.request.to(@path).with_app_key.with_api_key.with_params(:foo => :bar).post.should == @mock_response_body
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
describe "without optional params" do
|
77
|
+
it "should request correctly through faraday and return the body" do
|
78
|
+
@mock_faraday_connection.should_receive(:post).and_yield(@mock_faraday_request_builder).and_return(@mock_faraday_response)
|
79
|
+
@mock_faraday_request_builder.should_receive(:url).once.with(@path, hash_including(:appKey => @settings.app_key))
|
80
|
+
@mock_faraday_request_builder.should_receive(:headers).once.and_return(@mock_faraday_request_headers)
|
81
|
+
@mock_faraday_request_headers.should_receive(:merge!).once.with(:Authorization => @settings.api_key)
|
82
|
+
@connection.request.to(@path).with_app_key.with_api_key.post.should == @mock_response_body
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
describe "with an optional body" do
|
87
|
+
it "should request correctly through faraday and return the body" do
|
88
|
+
@mock_faraday_connection.should_receive(:post).and_yield(@mock_faraday_request_builder).and_return(@mock_faraday_response)
|
89
|
+
@mock_faraday_request_builder.should_receive(:url).once.with(@path, hash_including(:appKey => @settings.app_key))
|
90
|
+
@mock_faraday_request_builder.should_receive(:headers).once.and_return(@mock_faraday_request_headers)
|
91
|
+
@mock_faraday_request_headers.should_receive(:merge!).once.with(:Authorization => @settings.api_key)
|
92
|
+
@mock_faraday_request_builder.should_receive(:body=).once.with(:foo => :bar)
|
93
|
+
@connection.request.to(@path).with_app_key.with_api_key.with_body(:foo => :bar).post.should == @mock_response_body
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
describe "without an optional body" do
|
98
|
+
it "should request correctly through faraday and return the body" do
|
99
|
+
@mock_faraday_connection.should_receive(:post).and_yield(@mock_faraday_request_builder).and_return(@mock_faraday_response)
|
100
|
+
@mock_faraday_request_builder.should_receive(:url).once.with(@path, hash_including(:appKey => @settings.app_key))
|
101
|
+
@mock_faraday_request_builder.should_receive(:headers).once.and_return(@mock_faraday_request_headers)
|
102
|
+
@mock_faraday_request_headers.should_receive(:merge!).once.with(:Authorization => @settings.api_key)
|
103
|
+
@mock_faraday_request_builder.should_not_receive(:body=)
|
104
|
+
@connection.request.to(@path).with_app_key.with_api_key.post.should == @mock_response_body
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
require 'spec_helper.rb'
|
2
|
+
|
3
|
+
describe IActionable::Settings do
|
4
|
+
before do
|
5
|
+
@settings_hash = {
|
6
|
+
:app_key => "12345",
|
7
|
+
:api_key => "abcde",
|
8
|
+
:version => "3"
|
9
|
+
}
|
10
|
+
end
|
11
|
+
|
12
|
+
describe "with a valid input hash" do
|
13
|
+
it "should initialize" do
|
14
|
+
lambda { IActionable::Settings.new(@settings_hash) }.should_not raise_error
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
describe "with an invalid input hash" do
|
19
|
+
it "should not initialize from missing app key" do
|
20
|
+
@settings_hash.delete(:app_key)
|
21
|
+
lambda { IActionable::Settings.new(@settings_hash) }.should raise_error(IActionable::ConfigError)
|
22
|
+
end
|
23
|
+
|
24
|
+
it "should not initialize from missing api key" do
|
25
|
+
@settings_hash.delete(:api_key)
|
26
|
+
lambda { IActionable::Settings.new(@settings_hash) }.should raise_error(IActionable::ConfigError)
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should not initialize from missing version" do
|
30
|
+
@settings_hash.delete(:version)
|
31
|
+
lambda { IActionable::Settings.new(@settings_hash) }.should raise_error(IActionable::ConfigError)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
describe "once initialized" do
|
36
|
+
before do
|
37
|
+
@settings = IActionable::Settings.new(@settings_hash)
|
38
|
+
end
|
39
|
+
|
40
|
+
it "should return the app key" do
|
41
|
+
@settings.app_key.should == @settings_hash[:app_key]
|
42
|
+
end
|
43
|
+
|
44
|
+
it "should return the api key" do
|
45
|
+
@settings.api_key.should == @settings_hash[:api_key]
|
46
|
+
end
|
47
|
+
|
48
|
+
it "should return the version" do
|
49
|
+
@settings.version.should == @settings_hash[:version]
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require 'iactionable'
|
metadata
ADDED
@@ -0,0 +1,163 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: ruby-iactionable
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Chris Eberz
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-02-03 00:00:00.000000000Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: rspec
|
16
|
+
requirement: &2164523480 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '2.6'
|
22
|
+
type: :development
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *2164523480
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: rake
|
27
|
+
requirement: &2164523060 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '0'
|
33
|
+
type: :runtime
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *2164523060
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: faraday
|
38
|
+
requirement: &2164522600 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ! '>='
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '0'
|
44
|
+
type: :runtime
|
45
|
+
prerelease: false
|
46
|
+
version_requirements: *2164522600
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: faraday-stack
|
49
|
+
requirement: &2164522180 !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
51
|
+
requirements:
|
52
|
+
- - ! '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
type: :runtime
|
56
|
+
prerelease: false
|
57
|
+
version_requirements: *2164522180
|
58
|
+
- !ruby/object:Gem::Dependency
|
59
|
+
name: activesupport
|
60
|
+
requirement: &2164521680 !ruby/object:Gem::Requirement
|
61
|
+
none: false
|
62
|
+
requirements:
|
63
|
+
- - ! '>='
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: 3.0.0
|
66
|
+
type: :runtime
|
67
|
+
prerelease: false
|
68
|
+
version_requirements: *2164521680
|
69
|
+
description: Ruby wrapper for IActionable's restful API.
|
70
|
+
email:
|
71
|
+
- ceberz@elctech.com
|
72
|
+
executables: []
|
73
|
+
extensions: []
|
74
|
+
extra_rdoc_files: []
|
75
|
+
files:
|
76
|
+
- .gitignore
|
77
|
+
- .rvmrc
|
78
|
+
- CHANGELOG.md
|
79
|
+
- Gemfile
|
80
|
+
- Gemfile.lock
|
81
|
+
- README.md
|
82
|
+
- Rakefile
|
83
|
+
- lib/iactionable.rb
|
84
|
+
- lib/iactionable/api.rb
|
85
|
+
- lib/iactionable/connection.rb
|
86
|
+
- lib/iactionable/error.rb
|
87
|
+
- lib/iactionable/objects.rb
|
88
|
+
- lib/iactionable/objects/achievement.rb
|
89
|
+
- lib/iactionable/objects/awardable.rb
|
90
|
+
- lib/iactionable/objects/challenge.rb
|
91
|
+
- lib/iactionable/objects/goal.rb
|
92
|
+
- lib/iactionable/objects/i_actionable_object.rb
|
93
|
+
- lib/iactionable/objects/identifier.rb
|
94
|
+
- lib/iactionable/objects/leaderboard.rb
|
95
|
+
- lib/iactionable/objects/leaderboard_report.rb
|
96
|
+
- lib/iactionable/objects/level.rb
|
97
|
+
- lib/iactionable/objects/level_type.rb
|
98
|
+
- lib/iactionable/objects/point_type.rb
|
99
|
+
- lib/iactionable/objects/profile_achievements.rb
|
100
|
+
- lib/iactionable/objects/profile_challenges.rb
|
101
|
+
- lib/iactionable/objects/profile_goals.rb
|
102
|
+
- lib/iactionable/objects/profile_level.rb
|
103
|
+
- lib/iactionable/objects/profile_notifications.rb
|
104
|
+
- lib/iactionable/objects/profile_points.rb
|
105
|
+
- lib/iactionable/objects/profile_summary.rb
|
106
|
+
- lib/iactionable/objects/progress.rb
|
107
|
+
- lib/iactionable/settings.rb
|
108
|
+
- lib/iactionable/version.rb
|
109
|
+
- ruby_iactionable.gemspec
|
110
|
+
- spec/api/get_achievements_api_response_spec.rb
|
111
|
+
- spec/api/get_challenges_api_response_spec.rb
|
112
|
+
- spec/api/get_goals_api_response_spec.rb
|
113
|
+
- spec/api/get_leaderboard_api_response_spec.rb
|
114
|
+
- spec/api/get_profile_achievements_api_response_spec.rb
|
115
|
+
- spec/api/get_profile_api_response_spec.rb
|
116
|
+
- spec/api/get_profile_challenges_api_response_spec.rb
|
117
|
+
- spec/api/get_profile_goals_api_response_spec.rb
|
118
|
+
- spec/api/get_profile_notifications_api_response_spec.rb
|
119
|
+
- spec/api/get_profile_points_api_response_spec.rb
|
120
|
+
- spec/api_spec.rb
|
121
|
+
- spec/connection_spec.rb
|
122
|
+
- spec/settings_spec.rb
|
123
|
+
- spec/spec_helper.rb
|
124
|
+
homepage: ''
|
125
|
+
licenses: []
|
126
|
+
post_install_message:
|
127
|
+
rdoc_options: []
|
128
|
+
require_paths:
|
129
|
+
- lib
|
130
|
+
- spec
|
131
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
132
|
+
none: false
|
133
|
+
requirements:
|
134
|
+
- - ! '>='
|
135
|
+
- !ruby/object:Gem::Version
|
136
|
+
version: '0'
|
137
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
138
|
+
none: false
|
139
|
+
requirements:
|
140
|
+
- - ! '>='
|
141
|
+
- !ruby/object:Gem::Version
|
142
|
+
version: '0'
|
143
|
+
requirements: []
|
144
|
+
rubyforge_project: ruby-iactionable
|
145
|
+
rubygems_version: 1.8.10
|
146
|
+
signing_key:
|
147
|
+
specification_version: 3
|
148
|
+
summary: Ruby wrapper for IActionable's restful API.
|
149
|
+
test_files:
|
150
|
+
- spec/api/get_achievements_api_response_spec.rb
|
151
|
+
- spec/api/get_challenges_api_response_spec.rb
|
152
|
+
- spec/api/get_goals_api_response_spec.rb
|
153
|
+
- spec/api/get_leaderboard_api_response_spec.rb
|
154
|
+
- spec/api/get_profile_achievements_api_response_spec.rb
|
155
|
+
- spec/api/get_profile_api_response_spec.rb
|
156
|
+
- spec/api/get_profile_challenges_api_response_spec.rb
|
157
|
+
- spec/api/get_profile_goals_api_response_spec.rb
|
158
|
+
- spec/api/get_profile_notifications_api_response_spec.rb
|
159
|
+
- spec/api/get_profile_points_api_response_spec.rb
|
160
|
+
- spec/api_spec.rb
|
161
|
+
- spec/connection_spec.rb
|
162
|
+
- spec/settings_spec.rb
|
163
|
+
- spec/spec_helper.rb
|