caren-api 0.4.30 → 0.4.31

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/VERSION CHANGED
@@ -1 +1 @@
1
- 0.4.30
1
+ 0.4.31
data/caren-api.gemspec CHANGED
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "caren-api"
8
- s.version = "0.4.30"
8
+ s.version = "0.4.31"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Andre Foeken"]
@@ -1,5 +1,5 @@
1
1
  class Caren::BillableCategory < Caren::Base
2
-
2
+
3
3
  def self.keys
4
4
  [ :id, # Integer (Id of this category in Caren)
5
5
  :name, # String
@@ -8,29 +8,29 @@ class Caren::BillableCategory < Caren::Base
8
8
  :billable_category_id # Integer (Parent category; Caren id; Nil for root node)
9
9
  ] + super
10
10
  end
11
-
11
+
12
12
  def self.search key, value, session
13
13
  from_xml session.get( self.search_url(key,value) )
14
14
  end
15
-
15
+
16
16
  def self.find id, session
17
17
  from_xml session.get(self.resource_url(id))
18
18
  end
19
-
19
+
20
20
  def self.all session
21
21
  from_xml session.get(self.resource_url)
22
22
  end
23
-
23
+
24
24
  def self.array_root
25
25
  :billable_categories
26
26
  end
27
-
27
+
28
28
  def self.node_root
29
29
  :billable_category
30
30
  end
31
-
31
+
32
32
  def self.resource_location
33
33
  "/api/pro/store/billable_categories"
34
34
  end
35
-
36
- end
35
+
36
+ end
@@ -3,7 +3,7 @@
3
3
  # * Get a list of care providers
4
4
  # * Search for a specific care provider based on key/value
5
5
  class Caren::CareProvider < Caren::Base
6
-
6
+
7
7
  def self.keys
8
8
  [ :id, # Integer (The id of this CP inside Caren)
9
9
  :name, # String
@@ -28,30 +28,30 @@ class Caren::CareProvider < Caren::Base
28
28
  :closed_beta, # Boolean
29
29
  :locale, # String
30
30
  :lat,
31
- :lng
31
+ :lng
32
32
  ] + super
33
33
  end
34
-
34
+
35
35
  def self.search key, value, session
36
36
  from_xml session.get( self.search_url(key,value) )
37
37
  end
38
-
38
+
39
39
  def self.find id, session
40
40
  from_xml session.get(self.resource_url(id))
41
41
  end
42
-
42
+
43
43
  def self.all session
44
44
  from_xml session.get(self.resource_url)
45
45
  end
46
-
46
+
47
47
  def update session
48
48
  self.class.from_xml session.put(self.resource_url(self.id), self.to_xml)
49
49
  end
50
-
50
+
51
51
  def update_logo logo_hash_or_path, session
52
52
  self.class.from_xml session.put(self.resource_url(self.id), self.to_logo_xml(logo_hash_or_path))
53
53
  end
54
-
54
+
55
55
  def as_xml
56
56
  { :name => self.name,
57
57
  :telephone => self.telephone,
@@ -76,7 +76,7 @@ class Caren::CareProvider < Caren::Base
76
76
  :lng => self.lng
77
77
  }
78
78
  end
79
-
79
+
80
80
  def to_logo_xml logo_hash_or_path
81
81
  builder = Builder::XmlMarkup.new
82
82
  logo = self.class.hash_from_image(logo_hash_or_path)
@@ -84,17 +84,17 @@ class Caren::CareProvider < Caren::Base
84
84
  care_provider.tag!("logo", logo[:content], "name" => logo[:name], "content-type" => logo[:content_type] ) if logo
85
85
  end
86
86
  end
87
-
87
+
88
88
  def self.resource_location
89
89
  "/api/pro/care_providers"
90
90
  end
91
-
91
+
92
92
  def self.array_root
93
93
  :care_providers
94
94
  end
95
-
95
+
96
96
  def self.node_root
97
97
  :care_provider
98
98
  end
99
-
100
- end
99
+
100
+ end
data/lib/caren/caren.rb CHANGED
@@ -1,34 +1,34 @@
1
1
  module Caren
2
-
2
+
3
3
  module Exceptions
4
-
4
+
5
5
  class StandardError < ::StandardError ; end
6
-
6
+
7
7
  class SignatureMismatch < Caren::Exceptions::StandardError ; end
8
-
8
+
9
9
  class InvalidXmlResponse < Caren::Exceptions::StandardError ; end
10
-
10
+
11
11
  class ServerSideError < Caren::Exceptions::StandardError
12
-
12
+
13
13
  attr_accessor :errors
14
-
14
+
15
15
  def initialize errors=[]
16
16
  self.errors = errors
17
17
  end
18
-
18
+
19
19
  end
20
-
20
+
21
21
  end
22
22
 
23
23
  class Api
24
-
24
+
25
25
  class << self
26
26
  attr_accessor :session
27
27
  end
28
-
28
+
29
29
  # The user_agent is an optional identifier
30
30
  attr_accessor :url, :caren_public_key, :private_key, :user_agent
31
-
31
+
32
32
  # Initialize new API session. Specify your private key to sign outgoing messages and your care provider url.
33
33
  # Optionally you can pass the caren public key used to verify incoming requests.
34
34
  def initialize private_key, url, caren_public_key=nil
@@ -36,33 +36,33 @@ module Caren
36
36
  self.private_key = private_key.is_a?(String) ? Caren::Api.key_from_string(private_key) : private_key
37
37
  self.caren_public_key = caren_public_key || Caren::Api.key_from_path("#{File.dirname(__FILE__)}/../../certs/caren-api.pub")
38
38
  end
39
-
39
+
40
40
  # Create key from string
41
41
  def self.key_from_string string
42
42
  OpenSSL::PKey::RSA.new(string)
43
43
  end
44
-
44
+
45
45
  # Read a file and create key from string
46
46
  def self.key_from_path path
47
47
  self.key_from_string( File.read(path) )
48
48
  end
49
-
49
+
50
50
  # Generate a new private key
51
51
  def self.generate_private_key size=2048
52
52
  OpenSSL::PKey::RSA.generate( size )
53
53
  end
54
-
54
+
55
55
  # URL from path using session base url
56
56
  def url_for path
57
57
  "#{self.url}#{path}"
58
58
  end
59
-
59
+
60
60
  def put path, xml
61
61
  begin
62
62
  timestamp = DateTime.now.to_i
63
- response = RestClient.put url_for(path), xml, :content_type => :xml,
64
- :accept => :xml,
65
- :timestamp => timestamp,
63
+ response = RestClient.put url_for(path), xml, :content_type => :xml,
64
+ :accept => :xml,
65
+ :timestamp => timestamp,
66
66
  :signature => sign(timestamp,path,xml),
67
67
  :user_agent => user_agent
68
68
  return check_signature(response)
@@ -70,13 +70,13 @@ module Caren
70
70
  handle_error(e.response)
71
71
  end
72
72
  end
73
-
73
+
74
74
  def post path, xml
75
75
  begin
76
76
  timestamp = DateTime.now.to_i
77
- response = RestClient.post url_for(path), xml, :content_type => :xml,
78
- :accept => :xml,
79
- :timestamp => timestamp,
77
+ response = RestClient.post url_for(path), xml, :content_type => :xml,
78
+ :accept => :xml,
79
+ :timestamp => timestamp,
80
80
  :signature => sign(timestamp,path,xml),
81
81
  :user_agent => user_agent
82
82
  return check_signature(response)
@@ -84,13 +84,13 @@ module Caren
84
84
  handle_error(e.response)
85
85
  end
86
86
  end
87
-
87
+
88
88
  def delete path
89
89
  begin
90
90
  timestamp = DateTime.now.to_i
91
- response = RestClient.delete url_for(path), :content_type => :xml,
92
- :accept => :xml,
93
- :timestamp => timestamp,
91
+ response = RestClient.delete url_for(path), :content_type => :xml,
92
+ :accept => :xml,
93
+ :timestamp => timestamp,
94
94
  :signature => sign(timestamp,path),
95
95
  :user_agent => user_agent
96
96
  return check_signature(response)
@@ -98,13 +98,13 @@ module Caren
98
98
  handle_error(e.response)
99
99
  end
100
100
  end
101
-
101
+
102
102
  def get path
103
103
  begin
104
104
  timestamp = DateTime.now.to_i
105
- response = RestClient.get url_for(path), :content_type => :xml,
106
- :accept => :xml,
107
- :timestamp => timestamp,
105
+ response = RestClient.get url_for(path), :content_type => :xml,
106
+ :accept => :xml,
107
+ :timestamp => timestamp,
108
108
  :signature => sign(timestamp,path),
109
109
  :user_agent => user_agent
110
110
  return check_signature(response)
@@ -112,17 +112,17 @@ module Caren
112
112
  handle_error(e.response)
113
113
  end
114
114
  end
115
-
115
+
116
116
  # These types of Caren objects are supported by the Caren::Api.incoming method
117
117
  def self.supported_incoming_objects
118
- { :links => Caren::Link,
119
- :external_messages => Caren::ExternalMessage,
118
+ { :links => Caren::Link,
119
+ :external_messages => Caren::ExternalMessage,
120
120
  :care_providers => Caren::CareProvider,
121
121
  :billable_categories => Caren::BillableCategory,
122
122
  :billables => Caren::Billable
123
123
  }
124
124
  end
125
-
125
+
126
126
  # These types of Caren objects are supported by the Caren::Api.incoming method
127
127
  def self.supported_incoming_single_objects
128
128
  singles = {}
@@ -131,7 +131,7 @@ module Caren
131
131
  end
132
132
  return singles
133
133
  end
134
-
134
+
135
135
  # Pass an XML string to be handled. Only a valid caren_objects xml hash will be parsed.
136
136
  def incoming xml, signature, timestamp
137
137
  if self.verify_signature(signature,timestamp, xml)
@@ -140,22 +140,22 @@ module Caren
140
140
  raise Caren::Exceptions::SignatureMismatch.new
141
141
  end
142
142
  end
143
-
143
+
144
144
  def parse xml
145
145
  objects = []
146
146
  hash = Hash.from_xml(xml)
147
147
  if hash["caren_objects"]
148
148
  hash = hash["caren_objects"]
149
- end
149
+ end
150
150
  Caren::Api.supported_incoming_objects.each do |key,klass|
151
151
  objects << (hash[key]||hash[key.to_s]||[]).map{ |h| klass.new(h) }
152
152
  end
153
153
  return objects.flatten
154
154
  end
155
-
155
+
156
156
  def parse_object xml
157
157
  hash = Hash.from_xml(xml)
158
- #todo: rewrite so we lookup the xml tag in the supported_incoming_single_objects hash, faster :)
158
+ #todo: rewrite so we lookup the xml tag in the supported_incoming_single_objects hash, faster :)
159
159
  Caren::Api.supported_incoming_single_objects.each do |key, klass|
160
160
  object = hash[key] || hash[key.to_s]
161
161
  if object
@@ -172,34 +172,34 @@ module Caren
172
172
  signature = CGI.escape(Base64.encode64(encrypted_digest))
173
173
  return signature
174
174
  end
175
-
175
+
176
176
  # Check the signature of the response from rest-client
177
177
  def check_signature response
178
178
  return response if self.verify_signature( response.headers[:signature], response.headers[:timestamp], nil, response )
179
179
  raise Caren::Exceptions::SignatureMismatch.new
180
180
  end
181
-
181
+
182
182
  # Verify the signature using the caren public key
183
183
  def verify_signature signature, timestamp, path, string=nil, public_key=self.caren_public_key
184
184
  return false unless public_key
185
185
  signature = Base64.decode64(CGI.unescape(signature.to_s))
186
186
  public_key.verify( OpenSSL::Digest::SHA1.new, signature, path.to_s + string.to_s + timestamp.to_s )
187
187
  end
188
-
188
+
189
189
  def create_photo_signature url_shortcut, external_or_caren_id, private_key=self.private_key
190
190
  digest = OpenSSL::PKey::RSA.new(private_key).sign( OpenSSL::Digest::SHA1.new, url_shortcut.to_s + external_or_caren_id.to_s )
191
191
  return CGI.escape(Base64.encode64(digest))
192
192
  end
193
-
193
+
194
194
  # Verify photo url signature using the caren public key
195
195
  def verify_photo_signature signature, url_shortcut, external_id, public_key=self.caren_public_key
196
196
  return false unless public_key
197
197
  signature = Base64.decode64(CGI.unescape(signature.to_s))
198
198
  public_key.verify( OpenSSL::Digest::SHA1.new, signature, url_shortcut.to_s + external_id.to_s )
199
199
  end
200
-
200
+
201
201
  private
202
-
202
+
203
203
  # Raise a Caren exception on errors
204
204
  def handle_error response
205
205
  errors = []
@@ -214,7 +214,7 @@ module Caren
214
214
  end
215
215
  raise Caren::Exceptions::ServerSideError.new(errors)
216
216
  end
217
-
217
+
218
218
  end
219
219
 
220
220
  end
data/lib/caren/client.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  class Caren::Client < Caren::Base
2
-
2
+
3
3
  def self.keys
4
4
  [ :external_id, # String (Your client id)
5
5
  :uid, # String (Customer unique code)
@@ -13,13 +13,13 @@ class Caren::Client < Caren::Base
13
13
  :address_country # String
14
14
  ] + super
15
15
  end
16
-
16
+
17
17
  def self.array_root
18
18
  :clients
19
19
  end
20
-
20
+
21
21
  def self.node_root
22
22
  :client
23
23
  end
24
-
25
- end
24
+
25
+ end
data/lib/caren/error.rb CHANGED
@@ -1,24 +1,24 @@
1
1
  # This class provides a wrapper for caren's server side errors.
2
- class Caren::Error
3
-
2
+ class Caren::Error
3
+
4
4
  attr_accessor :category, :message, :attributes
5
-
5
+
6
6
  def initialize category, message="", attributes={}
7
7
  self.category = category
8
8
  self.message = message
9
9
  self.attributes = attributes
10
10
  end
11
-
11
+
12
12
  end
13
13
 
14
14
  class Caren::ValidationError < Caren::Error
15
-
15
+
16
16
  def field
17
17
  attributes[:on]
18
18
  end
19
-
19
+
20
20
  def to_s
21
21
  "`#{field}` #{message}"
22
22
  end
23
-
24
- end
23
+
24
+ end
data/lib/caren/event.rb CHANGED
@@ -1,7 +1,7 @@
1
- # This class is just an intermediate for exporting events to Caren.
2
- # It has the correct format for exports.
1
+ # This class is just an intermediate for exporting events to Caren.
2
+ # It has the correct format for exports.
3
3
  class Caren::Event < Caren::Base
4
-
4
+
5
5
  def self.keys
6
6
  [ :external_id, # String Unique identifying string (Your event id)
7
7
  :name, # String
@@ -17,7 +17,7 @@ class Caren::Event < Caren::Base
17
17
  :source # String (remote_schedule,remote_realisation)
18
18
  ] + super
19
19
  end
20
-
20
+
21
21
  def self.array_root
22
22
  :events
23
23
  end
@@ -25,5 +25,5 @@ class Caren::Event < Caren::Base
25
25
  def self.node_root
26
26
  :event
27
27
  end
28
-
29
- end
28
+
29
+ end
@@ -5,7 +5,7 @@ class Caren::EventSlot < Caren::Base
5
5
  [ :date, # Date
6
6
  :start, # String
7
7
  :duration, # Integer
8
- ] + super
8
+ ]
9
9
  end
10
10
 
11
11
  def self.array_root
@@ -1,10 +1,10 @@
1
1
  class Caren::ExternalMessage < Caren::Base
2
-
2
+
3
3
  def self.keys
4
- [ :id, # Integer (Caren message id)
4
+ [ :id, # Integer (Caren message id)
5
5
  :person_name, # String (Andre Foeken)
6
- :person_id, # Integer (Caren person id)
7
- :external_person_id, # String (Your person id)
6
+ :person_id, # Integer (Caren person id)
7
+ :external_person_id, # String (Your person id)
8
8
  :care_provider_id, # Integer (Caren CP id)
9
9
  :body, # Text
10
10
  :external_id, # String (Your message id)
@@ -13,31 +13,31 @@ class Caren::ExternalMessage < Caren::Base
13
13
  :subject_id # Integer (Caren person id)
14
14
  ] + super
15
15
  end
16
-
16
+
17
17
  def self.all subject_id, session
18
18
  from_xml session.get(self.resource_url(subject_id))
19
19
  end
20
-
20
+
21
21
  def self.find subject_id, id, session
22
22
  from_xml session.get(self.resource_url(subject_id,id))
23
23
  end
24
-
24
+
25
25
  def create session
26
26
  self.class.from_xml session.post self.class.resource_url(self.subject_id), self.to_xml
27
27
  end
28
-
28
+
29
29
  def delete session
30
30
  session.delete self.class.resource_url(self.subject_id,self.id)
31
31
  end
32
-
32
+
33
33
  def self.array_root
34
34
  :external_messages
35
35
  end
36
-
36
+
37
37
  def self.node_root
38
38
  :external_message
39
39
  end
40
-
40
+
41
41
  def as_xml
42
42
  { :person_name => self.person_name,
43
43
  :external_person_id => self.external_person_id,
@@ -45,19 +45,19 @@ class Caren::ExternalMessage < Caren::Base
45
45
  :external_id => self.external_id,
46
46
  :in_reply_to_id => self.in_reply_to_id }
47
47
  end
48
-
48
+
49
49
  def self.resource_location
50
50
  "/api/pro/people/%i/external_messages"
51
51
  end
52
-
52
+
53
53
  private
54
54
 
55
55
  def resource_url subject_id, id=nil
56
56
  self.class.resource_url(subject_id,id)
57
57
  end
58
-
58
+
59
59
  def self.resource_url subject_id, id=nil
60
60
  "#{self.resource_location % subject_id}#{id}"
61
61
  end
62
-
63
- end
62
+
63
+ end
data/lib/caren-api.rb CHANGED
@@ -6,14 +6,14 @@ require "rest_client"
6
6
  require "rexml/document"
7
7
  require "base64"
8
8
 
9
- require "caren/caren.rb"
10
- require "caren/error.rb"
11
- require "caren/base.rb"
12
- require "caren/event.rb"
13
- require "caren/event_slot.rb"
14
- require "caren/client.rb"
15
- require "caren/care_provider.rb"
16
- require "caren/external_message.rb"
17
- require "caren/link.rb"
18
- require "caren/billable.rb"
19
- require "caren/billable_category.rb"
9
+ require "caren/caren"
10
+ require "caren/error"
11
+ require "caren/base"
12
+ require "caren/event"
13
+ require "caren/event_slot"
14
+ require "caren/client"
15
+ require "caren/care_provider"
16
+ require "caren/external_message"
17
+ require "caren/link"
18
+ require "caren/billable"
19
+ require "caren/billable_category"
@@ -1,40 +1,40 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe "BillableCategory", "converting to xml" do
4
-
4
+
5
5
  before do
6
6
  @billable_category_a = Caren::BillableCategory.new( :name => "Services" )
7
7
  @billable_category_b = Caren::BillableCategory.new( :name => "Products" )
8
8
  end
9
-
9
+
10
10
  it "should be able to convert a product to valid xml" do
11
11
  @billable_category_a.should convert_to_valid_caren_xml
12
12
  end
13
-
13
+
14
14
  it "should be able to convert an array of products to valid xml" do
15
15
  [@billable_category_a,@billable_category_b].should convert_to_valid_caren_array_xml
16
16
  end
17
-
17
+
18
18
  end
19
19
 
20
20
  describe "BillableCategory", "REST methods" do
21
-
21
+
22
22
  before do
23
23
  billable_category = File.read("spec/fixtures/caren_billable_category.xml")
24
24
  billable_categories = File.read("spec/fixtures/caren_billable_categories.xml")
25
25
  billable_categories_search = File.read("spec/fixtures/caren_billable_categories_search.xml")
26
-
26
+
27
27
  billable_category_url = Caren::Api.session.url_for( Caren::BillableCategory.resource_url(1) )
28
28
  billable_categories_url = Caren::Api.session.url_for( Caren::BillableCategory.resource_url )
29
29
  search_url = Caren::Api.session.url_for( "#{Caren::BillableCategory.resource_url}?key=name&value=billables" )
30
-
30
+
31
31
  timestamp = DateTime.now.to_i
32
-
33
- FakeWeb.register_uri(:get, billable_categories_url, :body => billable_categories, :timestamp => timestamp, :signature => Caren::Api.session.sign(timestamp,nil,billable_categories) )
34
- FakeWeb.register_uri(:get, billable_category_url, :body => billable_category, :timestamp => timestamp, :signature => Caren::Api.session.sign(timestamp,nil,billable_category) )
32
+
33
+ FakeWeb.register_uri(:get, billable_categories_url, :body => billable_categories, :timestamp => timestamp, :signature => Caren::Api.session.sign(timestamp,nil,billable_categories) )
34
+ FakeWeb.register_uri(:get, billable_category_url, :body => billable_category, :timestamp => timestamp, :signature => Caren::Api.session.sign(timestamp,nil,billable_category) )
35
35
  FakeWeb.register_uri(:get, search_url, :body => billable_categories_search, :timestamp => timestamp, :signature => Caren::Api.session.sign(timestamp,nil,billable_categories_search) )
36
36
  end
37
-
37
+
38
38
  it "should be able to search for a specific billable category" do
39
39
  billable_categories = Caren::BillableCategory.search :name, "billables", Caren::Api.session
40
40
  billable_categories.should have(1).things
@@ -45,11 +45,11 @@ describe "BillableCategory", "REST methods" do
45
45
  billable_category = Caren::BillableCategory.find 1, Caren::Api.session
46
46
  billable_category.name.should == "Billables"
47
47
  end
48
-
48
+
49
49
  it "should be able to find all billable category" do
50
50
  billable_categories = Caren::BillableCategory.all Caren::Api.session
51
51
  billable_categories.should have(2).things
52
52
  billable_categories.first.name.should == "Products"
53
53
  end
54
-
55
- end
54
+
55
+ end
@@ -1,46 +1,46 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe "Billable", "converting to xml" do
4
-
4
+
5
5
  before do
6
6
  @billable_a = Caren::Billable.new( :name => "Washing", :price => 100.euros, :in_store => true, :type => "Product" )
7
7
  @billable_b = Caren::Billable.new( :name => "Bedpan", :price => 100.euros, :in_store => false, :type => "Product" )
8
8
  end
9
-
9
+
10
10
  it "should be able to convert a billable to valid xml" do
11
11
  @billable_a.should convert_to_valid_caren_xml
12
12
  end
13
-
13
+
14
14
  it "should be able to convert an array of billables to valid xml" do
15
15
  [@billable_a,@billable_b].should convert_to_valid_caren_array_xml
16
16
  end
17
-
17
+
18
18
  end
19
19
 
20
20
  describe "Billable", "REST methods" do
21
-
21
+
22
22
  before do
23
23
  billable = File.read("spec/fixtures/caren_billable.xml")
24
24
  billables = File.read("spec/fixtures/caren_billables.xml")
25
25
  billable_search = File.read("spec/fixtures/caren_billables_search.xml")
26
-
27
- billable_url = Caren::Api.session.url_for( Caren::Billable.resource_url(1) )
26
+
27
+ billable_url = Caren::Api.session.url_for( Caren::Billable.resource_url(1) )
28
28
  billables_url = Caren::Api.session.url_for( Caren::Billable.resource_url )
29
29
  search_url = Caren::Api.session.url_for( "#{Caren::Billable.resource_url}?key=name&value=bedpan" )
30
-
30
+
31
31
  timestamp = DateTime.now.to_i
32
32
 
33
33
  FakeWeb.register_uri(:post, billables_url, :timestamp => timestamp, :signature => Caren::Api.session.sign(timestamp) )
34
34
  FakeWeb.register_uri(:put, billable_url, :timestamp => timestamp, :signature => Caren::Api.session.sign(timestamp) )
35
- FakeWeb.register_uri(:get, billables_url, :body => billables, :timestamp => timestamp, :signature => Caren::Api.session.sign(timestamp,nil,billables) )
36
- FakeWeb.register_uri(:get, billable_url, :body => billable, :timestamp => timestamp, :signature => Caren::Api.session.sign(timestamp,nil,billable) )
35
+ FakeWeb.register_uri(:get, billables_url, :body => billables, :timestamp => timestamp, :signature => Caren::Api.session.sign(timestamp,nil,billables) )
36
+ FakeWeb.register_uri(:get, billable_url, :body => billable, :timestamp => timestamp, :signature => Caren::Api.session.sign(timestamp,nil,billable) )
37
37
  FakeWeb.register_uri(:get, search_url, :body => billable_search, :timestamp => timestamp, :signature => Caren::Api.session.sign(timestamp,nil,billable_search) )
38
38
  end
39
-
39
+
40
40
  it "should be able to update a billable" do
41
41
  lambda{ Caren::Billable.new( :id => 1, :name => "Bedpan" ).update( Caren::Api.session ) }.should_not raise_error
42
42
  end
43
-
43
+
44
44
  it "should be able to update the photo for a product" do
45
45
  lambda{ Caren::Billable.new( :id => 1 ).update_photo( "spec/fixtures/bacon.jpg", Caren::Api.session ) }.should_not raise_error
46
46
  end
@@ -49,17 +49,17 @@ describe "Billable", "REST methods" do
49
49
  billable = Caren::Billable.find 1, Caren::Api.session
50
50
  billable.name.should == "Dishwashing"
51
51
  end
52
-
52
+
53
53
  it "should be able to search for a specific product" do
54
54
  billables = Caren::Billable.search :name, "bedpan", Caren::Api.session
55
55
  billables.should have(1).things
56
56
  billables.first.name.should == "bedpan"
57
57
  end
58
-
58
+
59
59
  it "should be able to find all billables" do
60
60
  billables = Caren::Billable.all Caren::Api.session
61
61
  billables.should have(2).things
62
62
  billables.first.name.should == "Dishwashing"
63
63
  end
64
-
65
- end
64
+
65
+ end
@@ -1,7 +1,7 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe "CareProvider", "converting to xml" do
4
-
4
+
5
5
  before do
6
6
  @care_provider_a = Caren::CareProvider.new( :name => "Zuwe",
7
7
  :telephone => "112",
@@ -17,7 +17,7 @@ describe "CareProvider", "converting to xml" do
17
17
  :show_employee_name_as_title => true,
18
18
  :show_employee_names => true,
19
19
  :communication => true )
20
-
20
+
21
21
  @care_provider_b = Caren::CareProvider.new( :name => "Aveant",
22
22
  :telephone => "112",
23
23
  :website => "http://www.aveant.nl",
@@ -31,17 +31,17 @@ describe "CareProvider", "converting to xml" do
31
31
  :max_start => "00:00",
32
32
  :show_employee_name_as_title => true,
33
33
  :show_employee_names => true,
34
- :communication => true )
34
+ :communication => true )
35
35
  end
36
-
36
+
37
37
  it "should be able to convert a person to valid xml" do
38
38
  @care_provider_a.should convert_to_valid_caren_xml
39
39
  end
40
-
40
+
41
41
  it "should be able to convert an array of people to valid xml" do
42
42
  [@care_provider_a,@care_provider_b].should convert_to_valid_caren_array_xml
43
43
  end
44
-
44
+
45
45
  it "should be able to generate a proper xml file to update the logo" do
46
46
  filename = "spec/fixtures/bacon.jpg"
47
47
  xml = @care_provider_a.to_logo_xml filename
@@ -52,11 +52,11 @@ describe "CareProvider", "converting to xml" do
52
52
  cp.text.should == Base64.encode64(File.open(filename).read)
53
53
  end
54
54
  end
55
-
55
+
56
56
  end
57
57
 
58
58
  describe "CareProvider" do
59
-
59
+
60
60
  it "should be able to convert a image file path to a hash suited for xml conversion" do
61
61
  filename = "spec/fixtures/bacon.jpg"
62
62
  logo = Caren::CareProvider.hash_from_image( filename )
@@ -64,53 +64,53 @@ describe "CareProvider" do
64
64
  logo[:name].should == "bacon.jpg"
65
65
  logo[:content].should == Base64.encode64(File.open(filename).read)
66
66
  end
67
-
67
+
68
68
  end
69
69
 
70
70
  describe "CareProvider", "REST methods" do
71
-
71
+
72
72
  before do
73
73
  care_provider = File.read("spec/fixtures/caren_care_provider.xml")
74
74
  care_providers = File.read("spec/fixtures/caren_care_providers.xml")
75
75
  care_providers_search = File.read("spec/fixtures/caren_care_providers_search.xml")
76
76
 
77
- care_provider_url = Caren::Api.session.url_for( Caren::CareProvider.resource_url(1) )
77
+ care_provider_url = Caren::Api.session.url_for( Caren::CareProvider.resource_url(1) )
78
78
  care_providers_url = Caren::Api.session.url_for( Caren::CareProvider.resource_url )
79
79
  search_url = Caren::Api.session.url_for( "#{Caren::CareProvider.resource_url}?key=url-shortcut&value=pantein" )
80
-
80
+
81
81
  timestamp = DateTime.now.to_i
82
-
83
- FakeWeb.register_uri(:put, care_provider_url, :timestamp => timestamp, :signature => Caren::Api.session.sign(timestamp) )
82
+
83
+ FakeWeb.register_uri(:put, care_provider_url, :timestamp => timestamp, :signature => Caren::Api.session.sign(timestamp) )
84
84
  FakeWeb.register_uri(:get, care_provider_url, :body => care_provider, :timestamp => timestamp, :signature => Caren::Api.session.sign(timestamp,nil,care_provider) )
85
85
  FakeWeb.register_uri(:get, care_providers_url, :body => care_providers, :timestamp => timestamp, :signature => Caren::Api.session.sign(timestamp,nil,care_providers) )
86
86
  FakeWeb.register_uri(:get, search_url, :body => care_providers_search, :timestamp => timestamp, :signature => Caren::Api.session.sign(timestamp,nil,care_providers_search) )
87
87
  end
88
-
88
+
89
89
  it "should be able to update a care provider" do
90
90
  lambda{ Caren::CareProvider.new( :id => 1, :name => "Test" ).update( Caren::Api.session ) }.should_not raise_error
91
91
  end
92
-
92
+
93
93
  it "should be able to update the logo for a care provider" do
94
94
  lambda{ Caren::CareProvider.new( :id => 1 ).update_logo( "spec/fixtures/bacon.jpg", Caren::Api.session ) }.should_not raise_error
95
95
  end
96
-
96
+
97
97
  it "should be able to search for a specific care provider" do
98
98
  care_providers = Caren::CareProvider.search :url_shortcut, "pantein", Caren::Api.session
99
99
  care_providers.should have(1).things
100
100
  care_providers.first.name.should == "Pantein"
101
101
  care_providers.first.url_shortcut.should == "pantein"
102
102
  end
103
-
103
+
104
104
  it "should be able to find all care providers" do
105
105
  care_providers = Caren::CareProvider.all Caren::Api.session
106
106
  care_providers.should have(2).things
107
107
  care_providers.first.name.should == "Demo"
108
108
  care_providers.first.url_shortcut.should == "demo"
109
109
  end
110
-
110
+
111
111
  it "should be able to find one care providers" do
112
112
  care_provider = Caren::CareProvider.find 1, Caren::Api.session
113
113
  care_provider.name.should == "Demo"
114
114
  end
115
-
116
- end
115
+
116
+ end
data/spec/caren_spec.rb CHANGED
@@ -1,53 +1,53 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe "Caren", "signature checks" do
4
-
4
+
5
5
  before do
6
6
  @incorrect_url = "/test_with_incorrect_signature"
7
7
  @correct_url = "/test_with_correct_signature"
8
8
  @error_url = "/test_with_errors"
9
-
9
+
10
10
  FakeWeb.register_uri(:get, Caren::Api.session.url_for(@incorrect_url), :body => "TEST", :signature => "[INCORRECT]" )
11
11
  FakeWeb.register_uri(:post, Caren::Api.session.url_for(@incorrect_url), :body => "TEST", :signature => "[INCORRECT]" )
12
12
  FakeWeb.register_uri(:put, Caren::Api.session.url_for(@incorrect_url), :body => "TEST", :signature => "[INCORRECT]" )
13
13
  FakeWeb.register_uri(:delete, Caren::Api.session.url_for(@incorrect_url), :body => "TEST", :signature => "[INCORRECT]" )
14
-
14
+
15
15
  FakeWeb.register_uri(:get, Caren::Api.session.url_for(@correct_url), :body => "TEST", :signature => Caren::Api.session.sign("TEST") )
16
16
  FakeWeb.register_uri(:post, Caren::Api.session.url_for(@correct_url), :body => "TEST", :signature => Caren::Api.session.sign("TEST") )
17
17
  FakeWeb.register_uri(:put, Caren::Api.session.url_for(@correct_url), :body => "TEST", :signature => Caren::Api.session.sign("TEST") )
18
18
  FakeWeb.register_uri(:delete, Caren::Api.session.url_for(@correct_url), :body => "TEST", :signature => Caren::Api.session.sign("TEST") )
19
-
19
+
20
20
  errors = File.read "spec/fixtures/caren_care_provider_validation.xml"
21
- unauth = File.read "spec/fixtures/caren_unauthorized.xml"
21
+ unauth = File.read "spec/fixtures/caren_unauthorized.xml"
22
22
  FakeWeb.register_uri(:get, Caren::Api.session.url_for(@error_url), :status => 406, :body => errors, :signature => Caren::Api.session.sign(errors) )
23
23
  FakeWeb.register_uri(:post, Caren::Api.session.url_for(@error_url), :status => 406, :body => errors, :signature => Caren::Api.session.sign(errors) )
24
24
  FakeWeb.register_uri(:put, Caren::Api.session.url_for(@error_url), :status => 406, :body => errors, :signature => Caren::Api.session.sign(errors) )
25
25
  FakeWeb.register_uri(:delete, Caren::Api.session.url_for(@error_url), :status => 403, :body => unauth, :signature => Caren::Api.session.sign(unauth) )
26
26
  end
27
-
27
+
28
28
  it "should not accept result swith an incorrect signature" do
29
29
  lambda{ Caren::Api.session.get @incorrect_url }.should raise_error
30
30
  lambda{ Caren::Api.session.post @incorrect_url, "" }.should raise_error
31
31
  lambda{ Caren::Api.session.put @incorrect_url, "" }.should raise_error
32
32
  lambda{ Caren::Api.session.delete @incorrect_url }.should raise_error
33
33
  end
34
-
34
+
35
35
  it "should accept results with a correct signature" do
36
36
  lambda{ Caren::Api.session.get @correct_url }.should_not raise_error
37
37
  lambda{ Caren::Api.session.post @correct_url, "" }.should_not raise_error
38
38
  lambda{ Caren::Api.session.put @correct_url, "" }.should_not raise_error
39
39
  lambda{ Caren::Api.session.delete @correct_url }.should_not raise_error
40
40
  end
41
-
41
+
42
42
  it "should be able to handle server side errors" do
43
-
43
+
44
44
  lambda{ Caren::Api.session.get @error_url }.should raise_error(Caren::Exceptions::ServerSideError)
45
45
  lambda{ Caren::Api.session.put @error_url, "" }.should raise_error(Caren::Exceptions::ServerSideError)
46
46
  lambda{ Caren::Api.session.post @error_url, "" }.should raise_error(Caren::Exceptions::ServerSideError)
47
47
  lambda{ Caren::Api.session.delete @error_url }.should raise_error(Caren::Exceptions::ServerSideError)
48
-
48
+
49
49
  end
50
-
50
+
51
51
  it "should be able to handle authorization errors" do
52
52
  begin
53
53
  Caren::Api.session.delete @error_url
@@ -56,9 +56,9 @@ describe "Caren", "signature checks" do
56
56
  e.errors.first.class.should == Caren::Error
57
57
  e.errors.first.category.should == "unauthorized"
58
58
  e.errors.first.message.should == "You are not allowed to perform this action."
59
- end
59
+ end
60
60
  end
61
-
61
+
62
62
  it "should be able to handle validation errors" do
63
63
  begin
64
64
  Caren::Api.session.get @error_url
@@ -68,25 +68,25 @@ describe "Caren", "signature checks" do
68
68
  e.errors.first.message.should == "has already been taken"
69
69
  e.errors.first.field.should == :url_shortcut
70
70
  e.errors.first.to_s.should == "`url_shortcut` has already been taken"
71
- end
71
+ end
72
72
  end
73
-
73
+
74
74
  it "should be able to handle incoming xml from caren" do
75
75
  incoming = File.read "spec/fixtures/incoming.xml"
76
76
  timestamp = DateTime.now.to_i
77
77
  results = Caren::Api.session.incoming(incoming, Caren::Api.session.sign(timestamp, nil, incoming), timestamp )
78
- results.should have(4).things
78
+ results.should have(4).things
79
79
  external_messages = results.select{ |x| x.is_a?(Caren::ExternalMessage) }
80
- external_messages.first.id.should == 1
80
+ external_messages.first.id.should == 1
81
81
  links = results.select{ |x| x.is_a?(Caren::Link) }
82
82
  links.last.id.should == 3
83
83
  end
84
-
84
+
85
85
  it "should be able to parse just one incoming object from xml from caren" do
86
86
  incoming = File.read "spec/fixtures/incoming_single_object.xml"
87
- object = Caren::Api.session.parse_object(incoming)
88
- object.body.should == 'Expecting this to work somehow ...'
87
+ object = Caren::Api.session.parse_object(incoming)
88
+ object.body.should == 'Expecting this to work somehow ...'
89
89
  object.id.should == 1
90
90
  end
91
-
92
- end
91
+
92
+ end
data/spec/client_spec.rb CHANGED
@@ -1,37 +1,37 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe "Client", "converting to xml" do
4
-
4
+
5
5
  before do
6
- @client_a = Caren::Client.new( :external_id => 1,
7
- :uid => "ABC123",
8
- :first_name => "Andre",
9
- :last_name => "Foeken",
10
- :male => true,
6
+ @client_a = Caren::Client.new( :external_id => 1,
7
+ :uid => "ABC123",
8
+ :first_name => "Andre",
9
+ :last_name => "Foeken",
10
+ :male => true,
11
11
  :date_of_birth => 80.years.ago.to_date,
12
- :address_street => "Sesamestreet 1",
13
- :address_zipcode => "7500AA",
14
- :address_city => "Groenlo",
12
+ :address_street => "Sesamestreet 1",
13
+ :address_zipcode => "7500AA",
14
+ :address_city => "Groenlo",
15
15
  :address_country => "The Netherlands" )
16
-
17
- @client_b = Caren::Client.new( :external_id => 2,
18
- :uid => "ABC456",
19
- :first_name => "Oscar",
20
- :last_name => "Foeken",
21
- :male => true,
16
+
17
+ @client_b = Caren::Client.new( :external_id => 2,
18
+ :uid => "ABC456",
19
+ :first_name => "Oscar",
20
+ :last_name => "Foeken",
21
+ :male => true,
22
22
  :date_of_birth => 80.years.ago.to_date,
23
- :address_street => "Sesamestreet 1",
24
- :address_zipcode => "7500AA",
25
- :address_city => "Groenlo",
23
+ :address_street => "Sesamestreet 1",
24
+ :address_zipcode => "7500AA",
25
+ :address_city => "Groenlo",
26
26
  :address_country => "The Netherlands" )
27
27
  end
28
-
28
+
29
29
  it "should be able to convert a client to valid xml" do
30
30
  @client_a.should convert_to_valid_caren_xml
31
31
  end
32
-
32
+
33
33
  it "should be able to convert an array of people to valid xml" do
34
34
  [@client_a,@client_b].should convert_to_valid_caren_array_xml
35
35
  end
36
-
37
- end
36
+
37
+ end
@@ -1,68 +1,68 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe "ExternalMessage", "converting to xml" do
4
-
4
+
5
5
  before do
6
6
  @external_message_a = Caren::ExternalMessage.new( :person_name => "Andre Foeken",
7
7
  :external_person_id => 1,
8
8
  :body => "Test message",
9
9
  :external_id => 1,
10
10
  :in_reply_to_id => nil )
11
-
11
+
12
12
  @external_message_b = Caren::ExternalMessage.new( :person_name => "Ria Foeken",
13
13
  :external_person_id => 2,
14
14
  :body => "Test message reply",
15
15
  :external_id => 2,
16
16
  :in_reply_to_id => 99 )
17
17
  end
18
-
18
+
19
19
  it "should be able to convert a link to valid xml" do
20
20
  @external_message_a.should convert_to_valid_caren_xml
21
21
  end
22
-
22
+
23
23
  it "should be able to convert an array of links to valid xml" do
24
24
  [@external_message_a,@external_message_b].should convert_to_valid_caren_array_xml
25
25
  end
26
-
26
+
27
27
  end
28
28
 
29
29
  describe "ExternalMessage", "REST methods" do
30
-
30
+
31
31
  before do
32
32
  message = File.read("spec/fixtures/caren_external_message.xml")
33
33
  messages = File.read("spec/fixtures/caren_external_messages.xml")
34
-
34
+
35
35
  messages_url = Caren::Api.session.url_for( Caren::ExternalMessage.resource_url(1) )
36
- message_url = Caren::Api.session.url_for( Caren::ExternalMessage.resource_url(1,1) )
36
+ message_url = Caren::Api.session.url_for( Caren::ExternalMessage.resource_url(1,1) )
37
37
  timestamp = DateTime.now.to_i
38
-
38
+
39
39
  FakeWeb.register_uri(:get, messages_url, :body => messages, :signature => Caren::Api.session.sign(timestamp,nil,messages), :timestamp => timestamp )
40
40
  FakeWeb.register_uri(:get, message_url, :body => message, :signature => Caren::Api.session.sign(timestamp,nil,message), :timestamp => timestamp )
41
41
  FakeWeb.register_uri(:post, messages_url, :status => 201, :signature => Caren::Api.session.sign(timestamp), :timestamp => timestamp )
42
42
  FakeWeb.register_uri(:delete, message_url, :signature => Caren::Api.session.sign(timestamp), :timestamp => timestamp )
43
43
  end
44
-
44
+
45
45
  it "should be able to find all external messages" do
46
46
  messages = Caren::ExternalMessage.all 1, Caren::Api.session
47
47
  messages.should have(2).things
48
48
  messages.first.body.should == "Test"
49
49
  end
50
-
50
+
51
51
  it "should be able to find one external messages" do
52
52
  message = Caren::ExternalMessage.find 1, 1, Caren::Api.session
53
53
  message.body.should == "Test"
54
54
  end
55
-
55
+
56
56
  it "should be able to create an external message" do
57
- lambda{ Caren::ExternalMessage.new( :person_name => "Andre Foeken",
58
- :external_person_id => 1,
59
- :body => "Test message",
60
- :external_id => 1,
57
+ lambda{ Caren::ExternalMessage.new( :person_name => "Andre Foeken",
58
+ :external_person_id => 1,
59
+ :body => "Test message",
60
+ :external_id => 1,
61
61
  :subject_id => 1 ).create(Caren::Api.session) }.should_not raise_error
62
62
  end
63
-
63
+
64
64
  it "should be able to delete an external message" do
65
65
  lambda{ Caren::ExternalMessage.new( :subject_id => 1, :id => 1 ).delete(Caren::Api.session) }.should_not raise_error
66
66
  end
67
-
68
- end
67
+
68
+ end
data/spec/link_spec.rb CHANGED
@@ -1,45 +1,45 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe "Link", "converting to xml" do
4
-
4
+
5
5
  before do
6
6
  @link_a = Caren::Link.new( :patient_number => "12345" )
7
7
  @link_b = Caren::Link.new( :patient_number => "67890" )
8
8
  end
9
-
9
+
10
10
  it "should be able to convert a link to valid xml" do
11
11
  @link_a.should convert_to_valid_caren_xml
12
12
  end
13
-
13
+
14
14
  it "should be able to convert an array of links to valid xml" do
15
15
  [@link_a,@link_b].should convert_to_valid_caren_array_xml
16
16
  end
17
-
17
+
18
18
  end
19
19
 
20
20
  describe "Link", "REST methods" do
21
-
21
+
22
22
  before do
23
23
  link = File.read("spec/fixtures/caren_link.xml")
24
24
  links = File.read("spec/fixtures/caren_links.xml")
25
25
  search = File.read("spec/fixtures/caren_links_search.xml")
26
-
26
+
27
27
  link_url = Caren::Api.session.url_for(Caren::Link.resource_url(1))
28
28
  links_url = Caren::Api.session.url_for(Caren::Link.resource_url)
29
29
  search_url = Caren::Api.session.url_for("#{Caren::Link.resource_url}?key=external-id&value=1")
30
-
30
+
31
31
  timestamp = DateTime.now.to_i
32
-
32
+
33
33
  FakeWeb.register_uri(:get, link_url, :body => link, :timestamp => timestamp, :signature => Caren::Api.session.sign(timestamp,nil,link) )
34
34
  FakeWeb.register_uri(:get, links_url, :body => links, :timestamp => timestamp, :signature => Caren::Api.session.sign(timestamp,nil,links) )
35
35
  FakeWeb.register_uri(:get, search_url, :body => search, :timestamp => timestamp, :signature => Caren::Api.session.sign(timestamp,nil,search) )
36
36
  FakeWeb.register_uri(:post, links_url, :status => 201, :timestamp => timestamp, :signature => Caren::Api.session.sign(timestamp) )
37
37
  end
38
-
38
+
39
39
  it "should be able to create a new link using the API" do
40
40
  lambda{ Caren::Link.new( :patient_number => "12345" ).create(Caren::Api.session) }.should_not raise_error
41
41
  end
42
-
42
+
43
43
  it "should be find all links using the API" do
44
44
  links = Caren::Link.all(Caren::Api.session)
45
45
  links.should have(3).things
@@ -49,15 +49,15 @@ describe "Link", "REST methods" do
49
49
  links.first.person_name.should == "Andre Foeken"
50
50
  links.first.person_id.should == 3
51
51
  end
52
-
52
+
53
53
  it "should be find all links using the API" do
54
54
  link = Caren::Link.find(1,Caren::Api.session)
55
55
  link.id.should == 1
56
56
  end
57
-
57
+
58
58
  it "should be find a specific link using the API" do
59
59
  links = Caren::Link.search(:external_id, 1, Caren::Api.session)
60
60
  links.should have(1).thing
61
61
  end
62
-
63
- end
62
+
63
+ end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: caren-api
3
3
  version: !ruby/object:Gem::Version
4
- hash: 51
4
+ hash: 49
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 4
9
- - 30
10
- version: 0.4.30
9
+ - 31
10
+ version: 0.4.31
11
11
  platform: ruby
12
12
  authors:
13
13
  - Andre Foeken