litmos-client 0.0.4 → 0.0.5
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/Gemfile.lock +1 -1
- data/README.rdoc +1 -2
- data/Rakefile +1 -1
- data/lib/litmos_client/teams.rb +4 -4
- data/lib/litmos_client.rb +58 -11
- data/litmos-client.gemspec +1 -1
- metadata +3 -3
data/Gemfile.lock
CHANGED
data/README.rdoc
CHANGED
@@ -44,8 +44,7 @@ For methods that aren't yet implemented in the gem, you can simply use the *get*
|
|
44
44
|
Litmos-client depends on the Rest-client[https://github.com/archiloque/rest-client], and JSON gems (should be automatically loaded via the gemspec).
|
45
45
|
|
46
46
|
== TODO
|
47
|
-
*
|
48
|
-
* Support for creating objects and other http verbs (PUT, POST)
|
47
|
+
* Figure out how to write a test suite for a live API!
|
49
48
|
|
50
49
|
== Contributing to litmos-client
|
51
50
|
|
data/Rakefile
CHANGED
@@ -15,7 +15,7 @@ Jeweler::Tasks.new do |gem|
|
|
15
15
|
gem.name = "litmos-client"
|
16
16
|
gem.homepage = "http://github.com/kennon/litmos-client"
|
17
17
|
gem.license = "MIT"
|
18
|
-
gem.version = "0.0.
|
18
|
+
gem.version = "0.0.5"
|
19
19
|
gem.summary = %Q{Litmos-client is a Ruby wrapper for the Litmos API}
|
20
20
|
gem.description = %Q{Litmos-Client is a Ruby gem that provides a wrapper for interacting with the Litmos Learning Management System API.}
|
21
21
|
gem.email = "kennon@angryturnip.com"
|
data/lib/litmos_client/teams.rb
CHANGED
@@ -17,8 +17,8 @@ module LitmosClient
|
|
17
17
|
end
|
18
18
|
|
19
19
|
def add_user_to_team(options={})
|
20
|
-
raise ArgumentError.new("team_id is required") if options[:team_id].blank?
|
21
|
-
raise ArgumentError.new("user_id is required") if options[:user_id].blank?
|
20
|
+
raise ArgumentError.new(":team_id is required") if options[:team_id].blank?
|
21
|
+
raise ArgumentError.new(":user_id is required") if options[:user_id].blank?
|
22
22
|
|
23
23
|
params = {
|
24
24
|
'Id' => options[:user_id]
|
@@ -28,8 +28,8 @@ module LitmosClient
|
|
28
28
|
end
|
29
29
|
|
30
30
|
def remove_user_from_team(options={})
|
31
|
-
raise ArgumentError.new("team_id is required") if options[:team_id].blank?
|
32
|
-
raise ArgumentError.new("user_id is required") if options[:user_id].blank?
|
31
|
+
raise ArgumentError.new(":team_id is required") if options[:team_id].blank?
|
32
|
+
raise ArgumentError.new(":user_id is required") if options[:user_id].blank?
|
33
33
|
|
34
34
|
delete("teams/#{options[:team_id]}/users/#{options[:user_id]}")
|
35
35
|
end
|
data/lib/litmos_client.rb
CHANGED
@@ -34,18 +34,28 @@ module LitmosClient
|
|
34
34
|
end
|
35
35
|
|
36
36
|
def get(path, params={})
|
37
|
+
dont_parse_response = params.delete(:dont_parse_response)
|
38
|
+
|
37
39
|
options = {
|
38
40
|
:content_type => :json,
|
39
41
|
:accept => :json,
|
40
42
|
:params => params.merge(:apikey => @api_key, :source => @source)
|
41
43
|
}
|
44
|
+
|
42
45
|
RestClient.get("#{@litmosURL}/#{path}", options) do |response, request, result|
|
43
46
|
case response.code
|
44
47
|
when 200, 201
|
45
48
|
# 200 Success. User/Course etc updated, deleted or retrieved
|
46
49
|
# 201 Success. User/Course etc created
|
47
|
-
|
48
|
-
|
50
|
+
if response.blank?
|
51
|
+
true
|
52
|
+
else
|
53
|
+
if dont_parse_response
|
54
|
+
response
|
55
|
+
else
|
56
|
+
parse_response(response)
|
57
|
+
end
|
58
|
+
end
|
49
59
|
when 404 # 404 Not Found. The User/Course etc that you requested does not exist
|
50
60
|
raise NotFound.new(response)
|
51
61
|
|
@@ -63,6 +73,8 @@ module LitmosClient
|
|
63
73
|
query_params = query_params.merge(:apikey => @api_key, :source => @source)
|
64
74
|
query_string = query_params.collect { |k,v| "#{k}=#{CGI::escape(v)}" }.join('&')
|
65
75
|
query_string = "?#{query_string}" unless query_string.blank?
|
76
|
+
|
77
|
+
dont_parse_response = params.delete(:dont_parse_response)
|
66
78
|
|
67
79
|
options = {
|
68
80
|
:content_type => :json,
|
@@ -74,7 +86,16 @@ module LitmosClient
|
|
74
86
|
when 200, 201
|
75
87
|
# 200 Success. User/Course etc updated, deleted or retrieved
|
76
88
|
# 201 Success. User/Course etc created
|
77
|
-
|
89
|
+
|
90
|
+
if response.blank?
|
91
|
+
true
|
92
|
+
else
|
93
|
+
if dont_parse_response
|
94
|
+
response
|
95
|
+
else
|
96
|
+
parse_response(response)
|
97
|
+
end
|
98
|
+
end
|
78
99
|
|
79
100
|
when 404 # 404 Not Found. The User/Course etc that you requested does not exist
|
80
101
|
raise NotFound.new(response)
|
@@ -90,17 +111,29 @@ module LitmosClient
|
|
90
111
|
end
|
91
112
|
|
92
113
|
def delete(path, params={})
|
114
|
+
dont_parse_response = params.delete(:dont_parse_response)
|
115
|
+
|
93
116
|
options = {
|
94
117
|
:content_type => :json,
|
95
118
|
:accept => :json,
|
96
119
|
:params => params.merge(:apikey => @api_key, :source => @source)
|
97
120
|
}
|
121
|
+
|
98
122
|
RestClient.delete("#{@litmosURL}/#{path}", options) do |response, request, result|
|
99
123
|
case response.code
|
100
124
|
when 200, 201
|
101
125
|
# 200 Success. User/Course etc updated, deleted or retrieved
|
102
126
|
# 201 Success. User/Course etc created
|
103
|
-
|
127
|
+
|
128
|
+
if response.blank?
|
129
|
+
true
|
130
|
+
else
|
131
|
+
if dont_parse_response
|
132
|
+
response
|
133
|
+
else
|
134
|
+
parse_response(response)
|
135
|
+
end
|
136
|
+
end
|
104
137
|
|
105
138
|
when 404 # 404 Not Found. The User/Course etc that you requested does not exist
|
106
139
|
raise NotFound.new(response)
|
@@ -113,15 +146,20 @@ module LitmosClient
|
|
113
146
|
|
114
147
|
end
|
115
148
|
end
|
116
|
-
end
|
149
|
+
end
|
150
|
+
|
151
|
+
protected
|
152
|
+
|
153
|
+
ASP_DATE_REGEXP=/\/Date\(([0-9]+)\+[0-9]+\)\//
|
154
|
+
|
155
|
+
def parse_asp_date(asp_date)
|
156
|
+
DateTime.strptime(asp_date.gsub(ASP_DATE_REGEXP, '\1'), '%Q')
|
157
|
+
end
|
117
158
|
|
118
|
-
end
|
119
|
-
|
120
|
-
module StringHelpers
|
121
159
|
# for de-camelCasing the result keys
|
122
160
|
# from: http://stackoverflow.com/questions/8706930/converting-nested-hash-keys-from-camelcase-to-snake-case-in-ruby
|
123
161
|
|
124
|
-
def
|
162
|
+
def underscore(string)
|
125
163
|
string.gsub(/::/, '/').
|
126
164
|
gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').
|
127
165
|
gsub(/([a-z\d])([A-Z])/,'\1_\2').
|
@@ -129,11 +167,19 @@ module LitmosClient
|
|
129
167
|
downcase
|
130
168
|
end
|
131
169
|
|
132
|
-
def
|
170
|
+
def underscore_key(k)
|
133
171
|
underscore(k.to_s).to_sym
|
134
172
|
end
|
135
173
|
|
136
|
-
def
|
174
|
+
def parse_response(response)
|
175
|
+
convert_hash_keys(JSON.parse(response))
|
176
|
+
end
|
177
|
+
|
178
|
+
def convert_hash_keys(value)
|
179
|
+
if value.is_a?(String) and value =~ ASP_DATE_REGEXP
|
180
|
+
return parse_asp_date(value)
|
181
|
+
end
|
182
|
+
|
137
183
|
case value
|
138
184
|
when Array
|
139
185
|
value.map { |v| convert_hash_keys(v) }
|
@@ -144,6 +190,7 @@ module LitmosClient
|
|
144
190
|
value
|
145
191
|
end
|
146
192
|
end
|
193
|
+
|
147
194
|
end
|
148
195
|
|
149
196
|
end
|
data/litmos-client.gemspec
CHANGED
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: litmos-client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 21
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 5
|
10
|
+
version: 0.0.5
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Kennon Ballou
|