litmos-client 0.0.3 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile.lock +2 -4
- data/README.rdoc +1 -1
- data/Rakefile +1 -2
- data/lib/litmos_client.rb +59 -2
- data/lib/litmos_client/courses.rb +7 -1
- data/lib/litmos_client/teams.rb +27 -3
- data/lib/litmos_client/users.rb +21 -2
- data/litmos-client.gemspec +2 -5
- metadata +4 -18
data/Gemfile.lock
CHANGED
@@ -1,8 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
litmos-client (0.0.
|
5
|
-
hashugar
|
4
|
+
litmos-client (0.0.4)
|
6
5
|
json
|
7
6
|
litmos-client
|
8
7
|
rest-client
|
@@ -14,13 +13,12 @@ GEM
|
|
14
13
|
i18n (~> 0.6)
|
15
14
|
multi_json (~> 1.0)
|
16
15
|
git (1.2.5)
|
17
|
-
hashugar (0.0.6)
|
18
16
|
i18n (0.6.0)
|
19
17
|
jeweler (1.5.2)
|
20
18
|
bundler (~> 1.0.0)
|
21
19
|
git (>= 1.2.5)
|
22
20
|
rake
|
23
|
-
json (1.7.
|
21
|
+
json (1.7.5)
|
24
22
|
metaclass (0.0.1)
|
25
23
|
mime-types (1.19)
|
26
24
|
mocha (0.12.3)
|
data/README.rdoc
CHANGED
@@ -41,7 +41,7 @@ For methods that aren't yet implemented in the gem, you can simply use the *get*
|
|
41
41
|
|
42
42
|
== Dependencies
|
43
43
|
|
44
|
-
Litmos-client depends on the Rest-client[https://github.com/archiloque/rest-client],
|
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
47
|
* Support for retrieving Teams and Courses
|
data/Rakefile
CHANGED
@@ -15,14 +15,13 @@ 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.4"
|
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"
|
22
22
|
gem.authors = ["Kennon Ballou"]
|
23
23
|
gem.add_dependency "rest-client"
|
24
24
|
gem.add_dependency "json"
|
25
|
-
gem.add_dependency "hashugar"
|
26
25
|
end
|
27
26
|
Jeweler::RubygemsDotOrgTasks.new
|
28
27
|
|
data/lib/litmos_client.rb
CHANGED
@@ -1,6 +1,5 @@
|
|
1
1
|
require 'rest_client'
|
2
2
|
require 'json'
|
3
|
-
require 'hashugar'
|
4
3
|
|
5
4
|
require File.dirname(__FILE__) + '/litmos_client/users'
|
6
5
|
require File.dirname(__FILE__) + '/litmos_client/teams'
|
@@ -9,6 +8,7 @@ require File.dirname(__FILE__) + '/litmos_client/courses'
|
|
9
8
|
module LitmosClient
|
10
9
|
class NotFound < Exception; end
|
11
10
|
class ApiError < Exception; end
|
11
|
+
class ArgumentError < Exception; end
|
12
12
|
|
13
13
|
class API
|
14
14
|
include LitmosClient::Users
|
@@ -44,7 +44,7 @@ module LitmosClient
|
|
44
44
|
when 200, 201
|
45
45
|
# 200 Success. User/Course etc updated, deleted or retrieved
|
46
46
|
# 201 Success. User/Course etc created
|
47
|
-
return StringHelpers.convert_hash_keys(JSON.parse(response))
|
47
|
+
return response.blank? ? true : StringHelpers.convert_hash_keys(JSON.parse(response))
|
48
48
|
|
49
49
|
when 404 # 404 Not Found. The User/Course etc that you requested does not exist
|
50
50
|
raise NotFound.new(response)
|
@@ -58,6 +58,63 @@ module LitmosClient
|
|
58
58
|
end
|
59
59
|
end
|
60
60
|
end
|
61
|
+
|
62
|
+
def post(path, params={}, query_params={})
|
63
|
+
query_params = query_params.merge(:apikey => @api_key, :source => @source)
|
64
|
+
query_string = query_params.collect { |k,v| "#{k}=#{CGI::escape(v)}" }.join('&')
|
65
|
+
query_string = "?#{query_string}" unless query_string.blank?
|
66
|
+
|
67
|
+
options = {
|
68
|
+
:content_type => :json,
|
69
|
+
:accept => :json,
|
70
|
+
}
|
71
|
+
|
72
|
+
RestClient.post("#{@litmosURL}/#{path}#{query_string}", params.to_json, options) do |response, request, result|
|
73
|
+
case response.code
|
74
|
+
when 200, 201
|
75
|
+
# 200 Success. User/Course etc updated, deleted or retrieved
|
76
|
+
# 201 Success. User/Course etc created
|
77
|
+
return response.blank? ? true : StringHelpers.convert_hash_keys(JSON.parse(response))
|
78
|
+
|
79
|
+
when 404 # 404 Not Found. The User/Course etc that you requested does not exist
|
80
|
+
raise NotFound.new(response)
|
81
|
+
|
82
|
+
else
|
83
|
+
# 400 Bad Request. Check that your Uri and request body is well formed
|
84
|
+
# 403 Forbidden. Check your API key, HTTPS setting, Source parameter etc
|
85
|
+
# 409 Conflict. Often occurs when trying to create an item that already exists
|
86
|
+
raise ApiError.new(response)
|
87
|
+
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
def delete(path, params={})
|
93
|
+
options = {
|
94
|
+
:content_type => :json,
|
95
|
+
:accept => :json,
|
96
|
+
:params => params.merge(:apikey => @api_key, :source => @source)
|
97
|
+
}
|
98
|
+
RestClient.delete("#{@litmosURL}/#{path}", options) do |response, request, result|
|
99
|
+
case response.code
|
100
|
+
when 200, 201
|
101
|
+
# 200 Success. User/Course etc updated, deleted or retrieved
|
102
|
+
# 201 Success. User/Course etc created
|
103
|
+
return response.blank? ? true : StringHelpers.convert_hash_keys(JSON.parse(response))
|
104
|
+
|
105
|
+
when 404 # 404 Not Found. The User/Course etc that you requested does not exist
|
106
|
+
raise NotFound.new(response)
|
107
|
+
|
108
|
+
else
|
109
|
+
# 400 Bad Request. Check that your Uri and request body is well formed
|
110
|
+
# 403 Forbidden. Check your API key, HTTPS setting, Source parameter etc
|
111
|
+
# 409 Conflict. Often occurs when trying to create an item that already exists
|
112
|
+
raise ApiError.new(response)
|
113
|
+
|
114
|
+
end
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
61
118
|
end
|
62
119
|
|
63
120
|
module StringHelpers
|
data/lib/litmos_client/teams.rb
CHANGED
@@ -1,13 +1,37 @@
|
|
1
1
|
module LitmosClient
|
2
2
|
module Teams
|
3
|
-
def teams(
|
4
|
-
get :teams,
|
3
|
+
def teams(options={})
|
4
|
+
get :teams, options
|
5
5
|
end
|
6
6
|
|
7
7
|
def find_team_by_id(id)
|
8
|
-
get("teams/#{id}")
|
8
|
+
get("teams/#{id}")
|
9
9
|
rescue NotFound
|
10
10
|
nil
|
11
11
|
end
|
12
|
+
|
13
|
+
def find_users_by_team_id(id)
|
14
|
+
get("teams/#{id}/users")
|
15
|
+
rescue NotFound
|
16
|
+
nil
|
17
|
+
end
|
18
|
+
|
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?
|
22
|
+
|
23
|
+
params = {
|
24
|
+
'Id' => options[:user_id]
|
25
|
+
}
|
26
|
+
|
27
|
+
post("teams/#{options[:team_id]}/users", [params])
|
28
|
+
end
|
29
|
+
|
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?
|
33
|
+
|
34
|
+
delete("teams/#{options[:team_id]}/users/#{options[:user_id]}")
|
35
|
+
end
|
12
36
|
end
|
13
37
|
end
|
data/lib/litmos_client/users.rb
CHANGED
@@ -1,13 +1,32 @@
|
|
1
1
|
module LitmosClient
|
2
2
|
module Users
|
3
3
|
def users(params={})
|
4
|
-
get
|
4
|
+
get(:users, params)
|
5
5
|
end
|
6
6
|
|
7
7
|
def find_user_by_id(id)
|
8
|
-
get("users/#{id}")
|
8
|
+
get("users/#{id}")
|
9
9
|
rescue NotFound
|
10
10
|
nil
|
11
11
|
end
|
12
|
+
|
13
|
+
def create_user(options={})
|
14
|
+
raise ArgumentError.new(":username is required") if options[:username].blank?
|
15
|
+
raise ArgumentError.new(":first_name is required") if options[:first_name].blank?
|
16
|
+
raise ArgumentError.new(":last_name is required") if options[:last_name].blank?
|
17
|
+
raise ArgumentError.new(":email is required") if options[:email].blank?
|
18
|
+
|
19
|
+
params = {
|
20
|
+
'UserName' => options[:username],
|
21
|
+
'FirstName' => options[:first_name],
|
22
|
+
'LastName' => options[:last_name],
|
23
|
+
'Email' => options[:email],
|
24
|
+
'DisableMessages' => true,
|
25
|
+
'IsCustomUsername' => true,
|
26
|
+
'SkipFirstLogin' => true
|
27
|
+
}
|
28
|
+
|
29
|
+
post("users", params)
|
30
|
+
end
|
12
31
|
end
|
13
32
|
end
|
data/litmos-client.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "litmos-client"
|
8
|
-
s.version = "0.0.
|
8
|
+
s.version = "0.0.4"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Kennon Ballou"]
|
12
|
-
s.date = "2012-
|
12
|
+
s.date = "2012-09-13"
|
13
13
|
s.description = "Litmos-Client is a Ruby gem that provides a wrapper for interacting with the Litmos Learning Management System API."
|
14
14
|
s.email = "kennon@angryturnip.com"
|
15
15
|
s.extra_rdoc_files = [
|
@@ -59,7 +59,6 @@ Gem::Specification.new do |s|
|
|
59
59
|
s.add_development_dependency(%q<shoulda>, [">= 2.11.3"])
|
60
60
|
s.add_runtime_dependency(%q<rest-client>, [">= 0"])
|
61
61
|
s.add_runtime_dependency(%q<json>, [">= 0"])
|
62
|
-
s.add_runtime_dependency(%q<hashugar>, [">= 0"])
|
63
62
|
else
|
64
63
|
s.add_dependency(%q<litmos-client>, [">= 0"])
|
65
64
|
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
@@ -74,7 +73,6 @@ Gem::Specification.new do |s|
|
|
74
73
|
s.add_dependency(%q<shoulda>, [">= 2.11.3"])
|
75
74
|
s.add_dependency(%q<rest-client>, [">= 0"])
|
76
75
|
s.add_dependency(%q<json>, [">= 0"])
|
77
|
-
s.add_dependency(%q<hashugar>, [">= 0"])
|
78
76
|
end
|
79
77
|
else
|
80
78
|
s.add_dependency(%q<litmos-client>, [">= 0"])
|
@@ -90,7 +88,6 @@ Gem::Specification.new do |s|
|
|
90
88
|
s.add_dependency(%q<shoulda>, [">= 2.11.3"])
|
91
89
|
s.add_dependency(%q<rest-client>, [">= 0"])
|
92
90
|
s.add_dependency(%q<json>, [">= 0"])
|
93
|
-
s.add_dependency(%q<hashugar>, [">= 0"])
|
94
91
|
end
|
95
92
|
end
|
96
93
|
|
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: 23
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 4
|
10
|
+
version: 0.0.4
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Kennon Ballou
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2012-
|
18
|
+
date: 2012-09-13 00:00:00 Z
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
21
|
prerelease: false
|
@@ -219,20 +219,6 @@ dependencies:
|
|
219
219
|
version: "0"
|
220
220
|
version_requirements: *id013
|
221
221
|
name: json
|
222
|
-
- !ruby/object:Gem::Dependency
|
223
|
-
prerelease: false
|
224
|
-
type: :runtime
|
225
|
-
requirement: &id014 !ruby/object:Gem::Requirement
|
226
|
-
none: false
|
227
|
-
requirements:
|
228
|
-
- - ">="
|
229
|
-
- !ruby/object:Gem::Version
|
230
|
-
hash: 3
|
231
|
-
segments:
|
232
|
-
- 0
|
233
|
-
version: "0"
|
234
|
-
version_requirements: *id014
|
235
|
-
name: hashugar
|
236
222
|
description: Litmos-Client is a Ruby gem that provides a wrapper for interacting with the Litmos Learning Management System API.
|
237
223
|
email: kennon@angryturnip.com
|
238
224
|
executables: []
|