kobra_client 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/README.MD +4 -0
- data/lib/kobra/client.rb +46 -0
- data/spec/fixtures/auth_failure.txt +12 -0
- data/spec/fixtures/garbage.txt +10 -0
- data/spec/fixtures/server_error.txt +8 -0
- data/spec/fixtures/student_found.txt +10 -0
- data/spec/fixtures/student_not_found.txt +10 -0
- data/spec/kobra_client_spec.rb +61 -0
- data/spec/spec_helper.rb +12 -0
- metadata +118 -0
data/README.MD
ADDED
data/lib/kobra/client.rb
ADDED
@@ -0,0 +1,46 @@
|
|
1
|
+
require 'json/pure'
|
2
|
+
require 'open-uri'
|
3
|
+
require 'rest_client'
|
4
|
+
|
5
|
+
module Kobra
|
6
|
+
class Client
|
7
|
+
|
8
|
+
class BadResponse < RuntimeError; end
|
9
|
+
class NotFound < RuntimeError; end
|
10
|
+
class AuthError < RuntimeError; end
|
11
|
+
class ServerError < RuntimeError; end
|
12
|
+
|
13
|
+
# Kobra::Client.new(:domain => "kobra.ks.liu.se", :username => "john", :api_key => "a3h93hu393")
|
14
|
+
def initialize(settings = {})
|
15
|
+
settings[:domain] ||= 'kobra.ks.liu.se'
|
16
|
+
@base_url = "http://#{settings[:username]}:#{settings[:api_key]}@#{settings[:domain]}/"
|
17
|
+
end
|
18
|
+
|
19
|
+
# get_student(:liu_id => 'johec890')
|
20
|
+
# Parameters: liu_id, email, personal_number, rfid_number, barcode_number
|
21
|
+
def get_student(parameters)
|
22
|
+
json_post('students/api.json', parameters)
|
23
|
+
end
|
24
|
+
|
25
|
+
private
|
26
|
+
|
27
|
+
# Posts to path with parameters, returns JSON with symbols
|
28
|
+
def json_post(path, parameters = {})
|
29
|
+
# Make sure parameters is a Hash
|
30
|
+
parameters = {}.merge(parameters)
|
31
|
+
url = @base_url + path
|
32
|
+
|
33
|
+
response = RestClient.post(url, parameters)
|
34
|
+
|
35
|
+
JSON.parse(response.body, :symbolize_names => true)
|
36
|
+
rescue JSON::ParserError
|
37
|
+
raise BadResponse, "Can't parse JSON"
|
38
|
+
rescue RestClient::ResourceNotFound
|
39
|
+
raise NotFound, "Resource not found"
|
40
|
+
rescue RestClient::Unauthorized
|
41
|
+
raise AuthError, "Authentification failed"
|
42
|
+
rescue RestClient::InternalServerError
|
43
|
+
raise ServerError, "Server error"
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
HTTP/1.1 401 Unauthorized
|
2
|
+
Date: Wed, 15 Jun 2011 14:24:56 GMT
|
3
|
+
Status: 401 Unauthorized
|
4
|
+
WWW-Authenticate: Basic realm="Application"
|
5
|
+
Content-Type: text/html; charset=utf-8
|
6
|
+
Cache-Control: no-cache
|
7
|
+
X-UA-Compatible: IE=Edge,chrome=1
|
8
|
+
X-Runtime: 0.005396
|
9
|
+
Via: 1.1 kobra.ks.liu.se
|
10
|
+
Transfer-Encoding: chunked
|
11
|
+
|
12
|
+
HTTP Basic: Access denied.
|
@@ -0,0 +1,10 @@
|
|
1
|
+
HTTP/1.1 200 OK
|
2
|
+
Date: Wed, 15 Jun 2011 09:57:52 GMT
|
3
|
+
Status: 200 OK
|
4
|
+
Content-Type: application/json; charset=utf-8
|
5
|
+
ETag: "115ea511d19e8f40b9fbbb47b5a2bc0f"
|
6
|
+
Cache-Control: max-age=0, private, must-revalidate
|
7
|
+
Via: 1.1 kobra.ks.liu.se
|
8
|
+
Transfer-Encoding: chunked
|
9
|
+
|
10
|
+
ocked":null,"last_name":"DOE","email":"johdoXXX@student.liu.se","first_name":"JOHN","personal_number":"887711-0011","rfid_number":"9999999999","barcode_number":"888888888888888","union":"LinTek","liu_id:"johdoXXX"}
|
@@ -0,0 +1,10 @@
|
|
1
|
+
HTTP/1.1 200 OK
|
2
|
+
Date: Wed, 15 Jun 2011 09:57:52 GMT
|
3
|
+
Status: 200 OK
|
4
|
+
Content-Type: application/json; charset=utf-8
|
5
|
+
ETag: "115ea511d19e8f40b9fbbb47b5a2bc0f"
|
6
|
+
Cache-Control: max-age=0, private, must-revalidate
|
7
|
+
Via: 1.1 kobra.ks.liu.se
|
8
|
+
Transfer-Encoding: chunked
|
9
|
+
|
10
|
+
{"blocked":null,"last_name":"DOE","email":"johdoXXX@student.liu.se","first_name":"JOHN","personal_number":"887711-0011","rfid_number":"9999999999","barcode_number":"888888888888888","union":"LinTek","liu_id":"johdoXXX"}
|
@@ -0,0 +1,10 @@
|
|
1
|
+
HTTP/1.1 404 Not Found
|
2
|
+
Date: Wed, 15 Jun 2011 14:25:31 GMT
|
3
|
+
Status: 404 Not Found
|
4
|
+
Content-Type: text/html; charset=utf-8
|
5
|
+
Cache-Control: no-cache
|
6
|
+
X-UA-Compatible: IE=Edge,chrome=1
|
7
|
+
X-Runtime: 0.051747
|
8
|
+
Via: 1.1 kobra.ks.liu.se
|
9
|
+
Transfer-Encoding: chunked
|
10
|
+
|
@@ -0,0 +1,61 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'kobra/client'
|
3
|
+
|
4
|
+
describe Kobra::Client do
|
5
|
+
describe '#get_student' do
|
6
|
+
it 'obtains student information by email' do
|
7
|
+
stub_request(:post, "http://john:a9b8c7@kobra.ks.liu.se/students/api.json").
|
8
|
+
with(:body => "email=johdoXXX%40student.liu.se").
|
9
|
+
to_return(fixture('student_found.txt'))
|
10
|
+
|
11
|
+
kobra = Kobra::Client.new(:username => 'john', :api_key => 'a9b8c7')
|
12
|
+
student = kobra.get_student(:email => 'johdoXXX@student.liu.se')
|
13
|
+
|
14
|
+
student[:email].should == 'johdoXXX@student.liu.se'
|
15
|
+
student[:liu_id].should == 'johdoXXX'
|
16
|
+
student[:rfid_number].should == '9999999999'
|
17
|
+
student[:first_name].should == 'JOHN'
|
18
|
+
student[:last_name].should == 'DOE'
|
19
|
+
student[:blocked].should == nil
|
20
|
+
student[:barcode_number].should == '888888888888888'
|
21
|
+
student[:union].should == 'LinTek'
|
22
|
+
student[:personal_number].should == '887711-0011'
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'fails to obtain student information by email' do
|
26
|
+
stub_request(:post, "http://john:a9b8c7@kobra.ks.liu.se/students/api.json").
|
27
|
+
with(:body => "email=johdoXXX%40student.liu.se").
|
28
|
+
to_return(fixture('student_not_found.txt'))
|
29
|
+
|
30
|
+
kobra = Kobra::Client.new(:username => 'john', :api_key => 'a9b8c7')
|
31
|
+
expect { kobra.get_student(:email => 'johdoXXX@student.liu.se') }.to raise_error Kobra::Client::NotFound
|
32
|
+
end
|
33
|
+
|
34
|
+
it 'fails to authorize' do
|
35
|
+
stub_request(:post, "http://john:wrong@kobra.ks.liu.se/students/api.json").
|
36
|
+
with(:body => "email=johdoXXX%40student.liu.se").
|
37
|
+
to_return(fixture('auth_failure.txt'))
|
38
|
+
|
39
|
+
kobra = Kobra::Client.new(:username => 'john', :api_key => 'wrong')
|
40
|
+
expect { kobra.get_student(:email => 'johdoXXX@student.liu.se') }.to raise_error Kobra::Client::AuthError
|
41
|
+
end
|
42
|
+
|
43
|
+
it 'gets garbage' do
|
44
|
+
stub_request(:post, "http://john:a9b8c7@kobra.ks.liu.se/students/api.json").
|
45
|
+
with(:body => "email=johdoXXX%40student.liu.se").
|
46
|
+
to_return(fixture('garbage.txt'))
|
47
|
+
|
48
|
+
kobra = Kobra::Client.new(:username => 'john', :api_key => 'a9b8c7')
|
49
|
+
expect { kobra.get_student(:email => 'johdoXXX@student.liu.se') }.to raise_error Kobra::Client::BadResponse
|
50
|
+
end
|
51
|
+
|
52
|
+
it 'gets server error' do
|
53
|
+
stub_request(:post, "http://john:a9b8c7@kobra.ks.liu.se/students/api.json").
|
54
|
+
with(:body => "email=johdoXXX%40student.liu.se").
|
55
|
+
to_return(fixture('server_error.txt'))
|
56
|
+
|
57
|
+
kobra = Kobra::Client.new(:username => 'john', :api_key => 'a9b8c7')
|
58
|
+
expect { kobra.get_student(:email => 'johdoXXX@student.liu.se') }.to raise_error Kobra::Client::ServerError
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
data/spec/spec_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,118 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: kobra_client
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease:
|
5
|
+
version: 0.0.1
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Johan Eckerstroem
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
|
13
|
+
date: 2011-06-15 00:00:00 +02:00
|
14
|
+
default_executable:
|
15
|
+
dependencies:
|
16
|
+
- !ruby/object:Gem::Dependency
|
17
|
+
name: json_pure
|
18
|
+
prerelease: false
|
19
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
20
|
+
none: false
|
21
|
+
requirements:
|
22
|
+
- - ">="
|
23
|
+
- !ruby/object:Gem::Version
|
24
|
+
version: "0"
|
25
|
+
type: :runtime
|
26
|
+
version_requirements: *id001
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rest-client
|
29
|
+
prerelease: false
|
30
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
31
|
+
none: false
|
32
|
+
requirements:
|
33
|
+
- - ">="
|
34
|
+
- !ruby/object:Gem::Version
|
35
|
+
version: "0"
|
36
|
+
type: :runtime
|
37
|
+
version_requirements: *id002
|
38
|
+
- !ruby/object:Gem::Dependency
|
39
|
+
name: rake
|
40
|
+
prerelease: false
|
41
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
42
|
+
none: false
|
43
|
+
requirements:
|
44
|
+
- - ">="
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: "0"
|
47
|
+
type: :development
|
48
|
+
version_requirements: *id003
|
49
|
+
- !ruby/object:Gem::Dependency
|
50
|
+
name: rspec
|
51
|
+
prerelease: false
|
52
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
53
|
+
none: false
|
54
|
+
requirements:
|
55
|
+
- - ">="
|
56
|
+
- !ruby/object:Gem::Version
|
57
|
+
version: "0"
|
58
|
+
type: :development
|
59
|
+
version_requirements: *id004
|
60
|
+
- !ruby/object:Gem::Dependency
|
61
|
+
name: webmock
|
62
|
+
prerelease: false
|
63
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
64
|
+
none: false
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: "0"
|
69
|
+
type: :development
|
70
|
+
version_requirements: *id005
|
71
|
+
description: Used for access to KOBRA, API-account needed
|
72
|
+
email: johan@duh.se
|
73
|
+
executables: []
|
74
|
+
|
75
|
+
extensions: []
|
76
|
+
|
77
|
+
extra_rdoc_files:
|
78
|
+
- README.MD
|
79
|
+
files:
|
80
|
+
- lib/kobra/client.rb
|
81
|
+
- spec/fixtures/auth_failure.txt
|
82
|
+
- spec/fixtures/garbage.txt
|
83
|
+
- spec/fixtures/server_error.txt
|
84
|
+
- spec/fixtures/student_found.txt
|
85
|
+
- spec/fixtures/student_not_found.txt
|
86
|
+
- spec/kobra_client_spec.rb
|
87
|
+
- spec/spec_helper.rb
|
88
|
+
- README.MD
|
89
|
+
has_rdoc: true
|
90
|
+
homepage: http://kobra.ks.liu.se/
|
91
|
+
licenses: []
|
92
|
+
|
93
|
+
post_install_message:
|
94
|
+
rdoc_options: []
|
95
|
+
|
96
|
+
require_paths:
|
97
|
+
- lib
|
98
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
99
|
+
none: false
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: "0"
|
104
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ">="
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: "0"
|
110
|
+
requirements: []
|
111
|
+
|
112
|
+
rubyforge_project:
|
113
|
+
rubygems_version: 1.6.2
|
114
|
+
signing_key:
|
115
|
+
specification_version: 3
|
116
|
+
summary: Client library for KOBRA.
|
117
|
+
test_files: []
|
118
|
+
|