caren-api 0.4.34 → 0.5.0
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 +1 -1
- data/caren-api.gemspec +21 -7
- data/lib/caren/base.rb +14 -4
- data/lib/caren/caren.rb +2 -2
- data/lib/caren/store/address.rb +47 -0
- data/lib/caren/{billable.rb → store/billable.rb} +9 -5
- data/lib/caren/{billable_category.rb → store/billable_category.rb} +1 -1
- data/lib/caren/store/invoice.rb +108 -0
- data/lib/caren/store/line_item.rb +48 -0
- data/lib/caren/store/payment.rb +42 -0
- data/lib/caren/store/store.rb +2 -0
- data/lib/caren-api.rb +7 -2
- data/spec/fixtures/caren_invoice.xml +60 -0
- data/spec/fixtures/caren_invoices.xml +147 -0
- data/spec/fixtures/caren_invoices_search.xml +62 -0
- data/spec/fixtures/caren_payments.xml +33 -0
- data/spec/fixtures/caren_payments_search.xml +18 -0
- data/spec/spec_helper.rb +3 -1
- data/spec/store/address_spec.rb +18 -0
- data/spec/{billable_category_spec.rb → store/billable_category_spec.rb} +8 -8
- data/spec/{billable_spec.rb → store/billable_spec.rb} +15 -10
- data/spec/store/invoice_spec.rb +91 -0
- data/spec/store/line_items_spec.rb +32 -0
- data/spec/store/payment_spec.rb +30 -0
- metadata +23 -9
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.5.0
|
data/caren-api.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "caren-api"
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.5.0"
|
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"]
|
12
|
-
s.date = "2012-
|
12
|
+
s.date = "2012-04-03"
|
13
13
|
s.description = "You can use this gem as inspiration of the base of your connections with Caren."
|
14
14
|
s.email = "andre.foeken@nedap.com"
|
15
15
|
s.extra_rdoc_files = [
|
@@ -30,8 +30,6 @@ Gem::Specification.new do |s|
|
|
30
30
|
"init.rb",
|
31
31
|
"lib/caren-api.rb",
|
32
32
|
"lib/caren/base.rb",
|
33
|
-
"lib/caren/billable.rb",
|
34
|
-
"lib/caren/billable_category.rb",
|
35
33
|
"lib/caren/care_provider.rb",
|
36
34
|
"lib/caren/caren.rb",
|
37
35
|
"lib/caren/client.rb",
|
@@ -42,9 +40,14 @@ Gem::Specification.new do |s|
|
|
42
40
|
"lib/caren/event_slot_container.rb",
|
43
41
|
"lib/caren/external_message.rb",
|
44
42
|
"lib/caren/link.rb",
|
43
|
+
"lib/caren/store/address.rb",
|
44
|
+
"lib/caren/store/billable.rb",
|
45
|
+
"lib/caren/store/billable_category.rb",
|
46
|
+
"lib/caren/store/invoice.rb",
|
47
|
+
"lib/caren/store/line_item.rb",
|
48
|
+
"lib/caren/store/payment.rb",
|
49
|
+
"lib/caren/store/store.rb",
|
45
50
|
"spec/.DS_Store",
|
46
|
-
"spec/billable_category_spec.rb",
|
47
|
-
"spec/billable_spec.rb",
|
48
51
|
"spec/care_provider_spec.rb",
|
49
52
|
"spec/caren_spec.rb",
|
50
53
|
"spec/client_spec.rb",
|
@@ -66,15 +69,26 @@ Gem::Specification.new do |s|
|
|
66
69
|
"spec/fixtures/caren_care_providers_search.xml",
|
67
70
|
"spec/fixtures/caren_external_message.xml",
|
68
71
|
"spec/fixtures/caren_external_messages.xml",
|
72
|
+
"spec/fixtures/caren_invoice.xml",
|
73
|
+
"spec/fixtures/caren_invoices.xml",
|
74
|
+
"spec/fixtures/caren_invoices_search.xml",
|
69
75
|
"spec/fixtures/caren_link.xml",
|
70
76
|
"spec/fixtures/caren_links.xml",
|
71
77
|
"spec/fixtures/caren_links_search.xml",
|
78
|
+
"spec/fixtures/caren_payments.xml",
|
79
|
+
"spec/fixtures/caren_payments_search.xml",
|
72
80
|
"spec/fixtures/caren_unauthorized.xml",
|
73
81
|
"spec/fixtures/incoming.xml",
|
74
82
|
"spec/fixtures/incoming_single_object.xml",
|
75
83
|
"spec/link_spec.rb",
|
76
84
|
"spec/spec.opts",
|
77
|
-
"spec/spec_helper.rb"
|
85
|
+
"spec/spec_helper.rb",
|
86
|
+
"spec/store/address_spec.rb",
|
87
|
+
"spec/store/billable_category_spec.rb",
|
88
|
+
"spec/store/billable_spec.rb",
|
89
|
+
"spec/store/invoice_spec.rb",
|
90
|
+
"spec/store/line_items_spec.rb",
|
91
|
+
"spec/store/payment_spec.rb"
|
78
92
|
]
|
79
93
|
s.homepage = "http://github.com/foeken/caren-api"
|
80
94
|
s.licenses = ["MIT"]
|
data/lib/caren/base.rb
CHANGED
@@ -36,6 +36,11 @@ class Caren::Base
|
|
36
36
|
def self.node_root
|
37
37
|
:object
|
38
38
|
end
|
39
|
+
|
40
|
+
# Override this for instance specific node roots
|
41
|
+
def node_root
|
42
|
+
nil
|
43
|
+
end
|
39
44
|
|
40
45
|
# The relative location of this resource.
|
41
46
|
def self.resource_location
|
@@ -47,23 +52,28 @@ class Caren::Base
|
|
47
52
|
array.to_xml( :root => self.array_root )
|
48
53
|
end
|
49
54
|
|
55
|
+
# this method is called for each parsed object. So subclasses can add extra parsing later on.
|
56
|
+
def self.init_dependent_objects object
|
57
|
+
object
|
58
|
+
end
|
59
|
+
|
50
60
|
# Convert a XML string to a single object or an array of objects
|
51
61
|
def self.from_xml xml
|
52
62
|
return nil if xml == ''
|
53
63
|
hash = xml.is_a?(Hash) ? xml : Hash.from_xml(xml)
|
54
64
|
raise Caren::Exceptions::InvalidXmlResponse unless hash
|
55
65
|
if hash.has_key?(self.array_root.to_s)
|
56
|
-
return hash[self.array_root.to_s].map{ |h| self.from_xml(h) }
|
66
|
+
return hash[self.array_root.to_s].map{ |h| init_dependent_objects(self.from_xml(h)) }
|
57
67
|
elsif hash.has_key?(self.node_root.to_s)
|
58
|
-
return self.new( hash[self.node_root.to_s] )
|
68
|
+
return init_dependent_objects(self.new( hash[self.node_root.to_s] ))
|
59
69
|
else
|
60
|
-
return self.new( hash )
|
70
|
+
return init_dependent_objects(self.new( hash ))
|
61
71
|
end
|
62
72
|
end
|
63
73
|
|
64
74
|
# Convert this object to XML
|
65
75
|
def to_xml options={}
|
66
|
-
self.as_xml.to_xml(options.merge( :root => self.class.node_root ))
|
76
|
+
self.as_xml.to_xml(options.merge( :root => (self.node_root || self.class.node_root) ))
|
67
77
|
end
|
68
78
|
|
69
79
|
# Overridable hash of attributes that is used for converting to XML.
|
data/lib/caren/caren.rb
CHANGED
@@ -118,8 +118,8 @@ module Caren
|
|
118
118
|
{ :links => Caren::Link,
|
119
119
|
:external_messages => Caren::ExternalMessage,
|
120
120
|
:care_providers => Caren::CareProvider,
|
121
|
-
:billable_categories => Caren::BillableCategory,
|
122
|
-
:billables => Caren::Billable
|
121
|
+
:billable_categories => Caren::Store::BillableCategory,
|
122
|
+
:billables => Caren::Store::Billable
|
123
123
|
}
|
124
124
|
end
|
125
125
|
|
@@ -0,0 +1,47 @@
|
|
1
|
+
# This class is just an intermediate for representing potential event occurences.
|
2
|
+
class Caren::Store::Address < Caren::Base
|
3
|
+
|
4
|
+
def self.keys
|
5
|
+
[ :full_name, # String
|
6
|
+
:address_line_1, # String
|
7
|
+
:address_line_2, # String
|
8
|
+
:city, # String
|
9
|
+
:state_province_or_region, # String
|
10
|
+
:zip, # String
|
11
|
+
:country, # String
|
12
|
+
:purpose, # String (shipping or billing)
|
13
|
+
]
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.array_root
|
17
|
+
:addresses
|
18
|
+
end
|
19
|
+
|
20
|
+
def as_xml
|
21
|
+
{
|
22
|
+
:full_name => self.full_name,
|
23
|
+
:address_line_1 => self.address_line_1,
|
24
|
+
:address_line_2 => self.address_line_2,
|
25
|
+
:city => self.city,
|
26
|
+
:state_province_or_region => self.state_province_or_region,
|
27
|
+
:zip => self.zip,
|
28
|
+
:country => self.country
|
29
|
+
}
|
30
|
+
end
|
31
|
+
|
32
|
+
def node_root
|
33
|
+
case self.purpose
|
34
|
+
when "shipping"
|
35
|
+
:shipping_address
|
36
|
+
when "billing"
|
37
|
+
:billing_address
|
38
|
+
else
|
39
|
+
self.class.node_root
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def self.node_root
|
44
|
+
:address
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
class Caren::Billable < Caren::Base
|
1
|
+
class Caren::Store::Billable < Caren::Base
|
2
2
|
|
3
3
|
def self.keys
|
4
4
|
[ :id, # Integer (Id of this product in Caren)
|
@@ -10,13 +10,13 @@ class Caren::Billable < Caren::Base
|
|
10
10
|
:photo, # String
|
11
11
|
:in_store, # Boolean (Use in store)
|
12
12
|
:unit, # String (piece, minute, hour)
|
13
|
-
:
|
13
|
+
:price_with_sales_tax_in_cents, # Integer
|
14
14
|
:currency, # String (EUR,USD)
|
15
15
|
:rounding, # Integer (in seconds)
|
16
16
|
:min_amount, # Integer (in seconds)
|
17
17
|
:default_amount, # Integer (in seconds)
|
18
18
|
:piece_duration, # Integer (in seconds)
|
19
|
-
:
|
19
|
+
:sales_tax_in_promillage, # Integer
|
20
20
|
:type, # String (Store::Product,Store::Service,Store::ChatSession)
|
21
21
|
:status, # String (pending, active)
|
22
22
|
:send_reminder_in_advance, # Integer (in seconds)
|
@@ -53,6 +53,10 @@ class Caren::Billable < Caren::Base
|
|
53
53
|
def update_photo photo_hash_or_path, session
|
54
54
|
self.class.from_xml session.put(self.resource_url(self.id), self.to_photo_xml(photo_hash_or_path))
|
55
55
|
end
|
56
|
+
|
57
|
+
def delete session
|
58
|
+
session.delete self.class.resource_url(self.id)
|
59
|
+
end
|
56
60
|
|
57
61
|
def as_xml
|
58
62
|
{ :name => self.name,
|
@@ -61,11 +65,11 @@ class Caren::Billable < Caren::Base
|
|
61
65
|
:in_store => self.in_store,
|
62
66
|
:unit => self.unit,
|
63
67
|
:photo => self.photo,
|
64
|
-
:
|
68
|
+
:price_with_sales_tax_in_cents => self.price_with_sales_tax_in_cents,
|
65
69
|
:currency => self.currency,
|
66
70
|
:type => self.type,
|
67
71
|
:rounding => self.rounding,
|
68
|
-
:
|
72
|
+
:sales_tax_in_promillage => self.sales_tax_in_promillage,
|
69
73
|
:external_id => self.external_id,
|
70
74
|
:piece_duration => self.piece_duration,
|
71
75
|
:min_amount => self.min_amount,
|
@@ -0,0 +1,108 @@
|
|
1
|
+
class Caren::Store::Invoice < Caren::Base
|
2
|
+
|
3
|
+
def self.keys
|
4
|
+
[:id, # Integer (Caren id)
|
5
|
+
:reference, # String
|
6
|
+
:requires_account, # Boolean
|
7
|
+
:requires_payment, # Boolean
|
8
|
+
:access_token, # String
|
9
|
+
:invoice_url, # String
|
10
|
+
:payment_url, # String
|
11
|
+
:customer_email, # String
|
12
|
+
:email_status, # String (unsent,sent,reminder_sent)
|
13
|
+
:paid, # Boolean
|
14
|
+
:payment_method, # String
|
15
|
+
:payment_method_description, # String
|
16
|
+
:billing_address, # Store::Address(:purpose => 'billing')
|
17
|
+
:shipping_address, # Store::Address(:purpose => 'shipping')
|
18
|
+
:line_items, # Array of Store::LineItem
|
19
|
+
:invoiced_at, # Datetime
|
20
|
+
:paid_at, # Datetime
|
21
|
+
] + super
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.search key, value, session
|
25
|
+
from_xml session.get( self.search_url(key,value) )
|
26
|
+
end
|
27
|
+
|
28
|
+
def self.find id, session
|
29
|
+
from_xml session.get(self.resource_url(id))
|
30
|
+
end
|
31
|
+
|
32
|
+
def self.all session
|
33
|
+
from_xml session.get(self.resource_url)
|
34
|
+
end
|
35
|
+
|
36
|
+
def create session
|
37
|
+
self.class.from_xml session.post(self.resource_url, self.to_xml)
|
38
|
+
end
|
39
|
+
|
40
|
+
def update session
|
41
|
+
self.class.from_xml session.put(self.resource_url(self.id), self.to_xml)
|
42
|
+
end
|
43
|
+
|
44
|
+
def delete session
|
45
|
+
session.delete self.class.resource_url(self.id)
|
46
|
+
end
|
47
|
+
|
48
|
+
def email session
|
49
|
+
self.class.from_xml session.post(self.class.email_url(self.id), self.to_xml)
|
50
|
+
end
|
51
|
+
|
52
|
+
def as_xml
|
53
|
+
# make sure we have the correct address nodes here
|
54
|
+
billing_address.purpose = 'billing' if billing_address
|
55
|
+
shipping_address.purpose = 'shipping' if shipping_address
|
56
|
+
|
57
|
+
{
|
58
|
+
:reference => self.reference,
|
59
|
+
:requires_account => self.requires_account,
|
60
|
+
:requires_payment => self.requires_payment,
|
61
|
+
:customer_email => self.customer_email,
|
62
|
+
:paid => self.paid,
|
63
|
+
:payment_method => self.payment_method,
|
64
|
+
:payment_method_description => self.payment_method_description,
|
65
|
+
:billing_address => self.billing_address,
|
66
|
+
:shipping_address => self.shipping_address,
|
67
|
+
:line_items => self.line_items,
|
68
|
+
:invoiced_at => self.invoiced_at,
|
69
|
+
:paid_at => self.paid_at
|
70
|
+
}
|
71
|
+
end
|
72
|
+
|
73
|
+
def self.init_dependent_objects invoice
|
74
|
+
|
75
|
+
if invoice.shipping_address.is_a?(Hash)
|
76
|
+
invoice.shipping_address = Caren::Store::Address.new( invoice.shipping_address.merge(:purpose => 'shipping') )
|
77
|
+
end
|
78
|
+
|
79
|
+
if invoice.billing_address.is_a?(Hash)
|
80
|
+
invoice.billing_address = Caren::Store::Address.new( invoice.billing_address.merge(:purpose => 'billing') )
|
81
|
+
end
|
82
|
+
|
83
|
+
if invoice.line_items.is_a?(Array)
|
84
|
+
invoice.line_items = invoice.line_items.map do |li|
|
85
|
+
Caren::Store::LineItem.new(li) if li.is_a?(Hash)
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
return invoice
|
90
|
+
end
|
91
|
+
|
92
|
+
def self.array_root
|
93
|
+
:invoices
|
94
|
+
end
|
95
|
+
|
96
|
+
def self.node_root
|
97
|
+
:invoice
|
98
|
+
end
|
99
|
+
|
100
|
+
def self.email_url id
|
101
|
+
"#{self.resource_url(id)}/email"
|
102
|
+
end
|
103
|
+
|
104
|
+
def self.resource_location
|
105
|
+
"/api/pro/store/invoices"
|
106
|
+
end
|
107
|
+
|
108
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
class Caren::Store::LineItem < Caren::Base
|
2
|
+
|
3
|
+
def self.keys
|
4
|
+
[:id, # Integer (Caren id)
|
5
|
+
:sku, # String
|
6
|
+
:invoice_id, # Integer (caren invoice id)
|
7
|
+
:currency, # String (EUR)
|
8
|
+
:description, # String
|
9
|
+
:discount_in_cents, # Integer
|
10
|
+
:discount_in_promillage, # Integer (190 = 19%)
|
11
|
+
:price_in_cents, # Integer
|
12
|
+
:quantity, # Integer
|
13
|
+
:sales_tax_in_cents, # Integer
|
14
|
+
:sales_tax_in_promillage, # Integer
|
15
|
+
] + super
|
16
|
+
end
|
17
|
+
|
18
|
+
def delete session
|
19
|
+
session.delete self.class.resource_url(self.id)
|
20
|
+
end
|
21
|
+
|
22
|
+
def as_xml
|
23
|
+
{
|
24
|
+
:sku => self.sku,
|
25
|
+
:currency => self.currency,
|
26
|
+
:description => self.description,
|
27
|
+
:discount_in_cents => self.discount_in_cents,
|
28
|
+
:discount_in_promillage => self.discount_in_promillage,
|
29
|
+
:price_in_cents => self.price_in_cents,
|
30
|
+
:quantity => self.quantity,
|
31
|
+
:sales_tax_in_cents => self.sales_tax_in_cents,
|
32
|
+
:sales_tax_in_promillage => self.sales_tax_in_promillage
|
33
|
+
}
|
34
|
+
end
|
35
|
+
|
36
|
+
def self.array_root
|
37
|
+
:line_items
|
38
|
+
end
|
39
|
+
|
40
|
+
def self.node_root
|
41
|
+
:line_item
|
42
|
+
end
|
43
|
+
|
44
|
+
def self.resource_location
|
45
|
+
"/api/pro/store/line_items"
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
class Caren::Store::Payment < Caren::Base
|
2
|
+
|
3
|
+
def self.keys
|
4
|
+
[:id, # Integer (Caren id)
|
5
|
+
:invoice_id, # Integer (Caren invoice id)
|
6
|
+
:person_id, # Integer (Caren person id)
|
7
|
+
:auth_code, # String
|
8
|
+
:psp_reference, # String
|
9
|
+
:refusal_reason, # String
|
10
|
+
:result_code, # String
|
11
|
+
:status, # String (new, pending,paid,failed)
|
12
|
+
:currency, # String (EUR)
|
13
|
+
:amount_in_cents, # Integer
|
14
|
+
:gateway, # String (ideal)
|
15
|
+
] + super
|
16
|
+
end
|
17
|
+
|
18
|
+
def self.search key, value, session
|
19
|
+
from_xml session.get( self.search_url(key,value) )
|
20
|
+
end
|
21
|
+
|
22
|
+
def self.find id, session
|
23
|
+
from_xml session.get(self.resource_url(id))
|
24
|
+
end
|
25
|
+
|
26
|
+
def self.all session
|
27
|
+
from_xml session.get(self.resource_url)
|
28
|
+
end
|
29
|
+
|
30
|
+
def self.array_root
|
31
|
+
:payments
|
32
|
+
end
|
33
|
+
|
34
|
+
def self.node_root
|
35
|
+
:payment
|
36
|
+
end
|
37
|
+
|
38
|
+
def self.resource_location
|
39
|
+
"/api/pro/store/payments"
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
data/lib/caren-api.rb
CHANGED
@@ -17,5 +17,10 @@ require "caren/employee"
|
|
17
17
|
require "caren/care_provider"
|
18
18
|
require "caren/external_message"
|
19
19
|
require "caren/link"
|
20
|
-
require "caren/
|
21
|
-
require "caren/
|
20
|
+
require "caren/store/store"
|
21
|
+
require "caren/store/billable"
|
22
|
+
require "caren/store/billable_category"
|
23
|
+
require "caren/store/payment"
|
24
|
+
require "caren/store/address"
|
25
|
+
require "caren/store/line_item"
|
26
|
+
require "caren/store/invoice"
|
@@ -0,0 +1,60 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<invoice>
|
3
|
+
<access-token>06590eb9de2f2baf</access-token>
|
4
|
+
<created-at type="datetime">2012-04-03T13:41:15+02:00</created-at>
|
5
|
+
<customer-email>jenny@example.com</customer-email>
|
6
|
+
<email-status>sent</email-status>
|
7
|
+
<id type="integer">17</id>
|
8
|
+
<invoiced-at type="datetime">2012-04-03T13:41:15+02:00</invoiced-at>
|
9
|
+
<paid type="boolean">true</paid>
|
10
|
+
<paid-at type="datetime">2012-04-03T13:45:48+02:00</paid-at>
|
11
|
+
<payment-method nil="true"></payment-method>
|
12
|
+
<payment-method-description nil="true"></payment-method-description>
|
13
|
+
<reference>NW-05463-12-0</reference>
|
14
|
+
<requires-account type="boolean">true</requires-account>
|
15
|
+
<requires-payment type="boolean">true</requires-payment>
|
16
|
+
<updated-at type="datetime">2012-04-03T13:45:48+02:00</updated-at>
|
17
|
+
<line-items type="array">
|
18
|
+
<line-item type="Invoice::LineItem">
|
19
|
+
<created-at type="datetime">2012-04-03T13:41:15+02:00</created-at>
|
20
|
+
<currency>EUR</currency>
|
21
|
+
<description>Wheel</description>
|
22
|
+
<discount-in-cents type="integer" nil="true"></discount-in-cents>
|
23
|
+
<discount-in-promillage type="integer" nil="true"></discount-in-promillage>
|
24
|
+
<id type="integer">28</id>
|
25
|
+
<invoice-id type="integer">17</invoice-id>
|
26
|
+
<price-in-cents type="integer">1199</price-in-cents>
|
27
|
+
<quantity type="integer">4</quantity>
|
28
|
+
<sales-tax-in-cents type="integer" nil="true"></sales-tax-in-cents>
|
29
|
+
<sales-tax-in-promillage type="integer">60</sales-tax-in-promillage>
|
30
|
+
<sku>wheels-12-nut-56</sku>
|
31
|
+
<updated-at type="datetime">2012-04-03T13:41:15+02:00</updated-at>
|
32
|
+
</line-item>
|
33
|
+
<line-item type="Invoice::LineItem">
|
34
|
+
<created-at type="datetime">2012-04-03T13:41:15+02:00</created-at>
|
35
|
+
<currency>EUR</currency>
|
36
|
+
<description>Nut</description>
|
37
|
+
<discount-in-cents type="integer" nil="true"></discount-in-cents>
|
38
|
+
<discount-in-promillage type="integer" nil="true"></discount-in-promillage>
|
39
|
+
<id type="integer">29</id>
|
40
|
+
<invoice-id type="integer">17</invoice-id>
|
41
|
+
<price-in-cents type="integer">699</price-in-cents>
|
42
|
+
<quantity type="integer">8</quantity>
|
43
|
+
<sales-tax-in-cents type="integer" nil="true"></sales-tax-in-cents>
|
44
|
+
<sales-tax-in-promillage type="integer">190</sales-tax-in-promillage>
|
45
|
+
<sku>wheels-43-nut-29</sku>
|
46
|
+
<updated-at type="datetime">2012-04-03T13:41:15+02:00</updated-at>
|
47
|
+
</line-item>
|
48
|
+
</line-items>
|
49
|
+
<invoice-url>https://www.caren-cares.com/invoices/06590eb9de2f2baf</invoice-url>
|
50
|
+
<payment-url>https://www.caren-cares.com/invoices/06590eb9de2f2baf/payment</payment-url>
|
51
|
+
<billing-address>
|
52
|
+
<address-line-1>Botsholsedwarsweg 12</address-line-1>
|
53
|
+
<address-line-2 nil="true"></address-line-2>
|
54
|
+
<city>Waverveen</city>
|
55
|
+
<country>Nederland</country>
|
56
|
+
<full-name>Joris de Boer</full-name>
|
57
|
+
<state-province-or-region nil="true"></state-province-or-region>
|
58
|
+
<zip>3646 AJ</zip>
|
59
|
+
</billing-address>
|
60
|
+
</invoice>
|
@@ -0,0 +1,147 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<invoices type="array">
|
3
|
+
<invoice>
|
4
|
+
<access-token>06590eb9de2f2baf</access-token>
|
5
|
+
<created-at type="datetime">2012-04-03T13:41:15+02:00</created-at>
|
6
|
+
<customer-email>jenny@example.com</customer-email>
|
7
|
+
<email-status>sent</email-status>
|
8
|
+
<id type="integer">17</id>
|
9
|
+
<invoiced-at type="datetime">2012-04-03T13:41:15+02:00</invoiced-at>
|
10
|
+
<paid type="boolean">true</paid>
|
11
|
+
<paid-at type="datetime">2012-04-03T13:45:48+02:00</paid-at>
|
12
|
+
<payment-method nil="true"></payment-method>
|
13
|
+
<payment-method-description nil="true"></payment-method-description>
|
14
|
+
<reference>NW-05463-12-0</reference>
|
15
|
+
<requires-account type="boolean">true</requires-account>
|
16
|
+
<requires-payment type="boolean">true</requires-payment>
|
17
|
+
<updated-at type="datetime">2012-04-03T13:45:48+02:00</updated-at>
|
18
|
+
<line-items type="array">
|
19
|
+
<line-item type="Invoice::LineItem">
|
20
|
+
<created-at type="datetime">2012-04-03T13:41:15+02:00</created-at>
|
21
|
+
<currency>EUR</currency>
|
22
|
+
<description>Wheel</description>
|
23
|
+
<discount-in-cents type="integer" nil="true"></discount-in-cents>
|
24
|
+
<discount-in-promillage type="integer" nil="true"></discount-in-promillage>
|
25
|
+
<id type="integer">28</id>
|
26
|
+
<invoice-id type="integer">17</invoice-id>
|
27
|
+
<price-in-cents type="integer">1199</price-in-cents>
|
28
|
+
<quantity type="integer">4</quantity>
|
29
|
+
<sales-tax-in-cents type="integer" nil="true"></sales-tax-in-cents>
|
30
|
+
<sales-tax-in-promillage type="integer">60</sales-tax-in-promillage>
|
31
|
+
<sku>wheels-12-nut-56</sku>
|
32
|
+
<updated-at type="datetime">2012-04-03T13:41:15+02:00</updated-at>
|
33
|
+
</line-item>
|
34
|
+
<line-item type="Invoice::LineItem">
|
35
|
+
<created-at type="datetime">2012-04-03T13:41:15+02:00</created-at>
|
36
|
+
<currency>EUR</currency>
|
37
|
+
<description>Nut</description>
|
38
|
+
<discount-in-cents type="integer" nil="true"></discount-in-cents>
|
39
|
+
<discount-in-promillage type="integer" nil="true"></discount-in-promillage>
|
40
|
+
<id type="integer">29</id>
|
41
|
+
<invoice-id type="integer">17</invoice-id>
|
42
|
+
<price-in-cents type="integer">699</price-in-cents>
|
43
|
+
<quantity type="integer">8</quantity>
|
44
|
+
<sales-tax-in-cents type="integer" nil="true"></sales-tax-in-cents>
|
45
|
+
<sales-tax-in-promillage type="integer">190</sales-tax-in-promillage>
|
46
|
+
<sku>wheels-43-nut-29</sku>
|
47
|
+
<updated-at type="datetime">2012-04-03T13:41:15+02:00</updated-at>
|
48
|
+
</line-item>
|
49
|
+
</line-items>
|
50
|
+
<invoice-url>https://www.caren-cares.com/invoices/06590eb9de2f2baf</invoice-url>
|
51
|
+
<payment-url>https://www.caren-cares.com/invoices/06590eb9de2f2baf/payment</payment-url>
|
52
|
+
<billing-address>
|
53
|
+
<address-line-1>Botsholsedwarsweg 12</address-line-1>
|
54
|
+
<address-line-2 nil="true"></address-line-2>
|
55
|
+
<city>Waverveen</city>
|
56
|
+
<country>Nederland</country>
|
57
|
+
<full-name>Joris de Boer</full-name>
|
58
|
+
<state-province-or-region nil="true"></state-province-or-region>
|
59
|
+
<zip>3646 AJ</zip>
|
60
|
+
</billing-address>
|
61
|
+
</invoice>
|
62
|
+
<invoice>
|
63
|
+
<access-token>753a857e0267c87b</access-token>
|
64
|
+
<created-at type="datetime">2012-04-03T13:41:15+02:00</created-at>
|
65
|
+
<customer-email>benny@example.com</customer-email>
|
66
|
+
<email-status>sent</email-status>
|
67
|
+
<id type="integer">18</id>
|
68
|
+
<invoiced-at type="datetime">2012-04-03T13:41:15+02:00</invoiced-at>
|
69
|
+
<paid type="boolean">true</paid>
|
70
|
+
<paid-at type="datetime">2012-04-03T13:41:44+02:00</paid-at>
|
71
|
+
<payment-method nil="true"></payment-method>
|
72
|
+
<payment-method-description nil="true"></payment-method-description>
|
73
|
+
<reference>JU-000000-12-1</reference>
|
74
|
+
<requires-account type="boolean">false</requires-account>
|
75
|
+
<requires-payment type="boolean">true</requires-payment>
|
76
|
+
<updated-at type="datetime">2012-04-03T13:41:44+02:00</updated-at>
|
77
|
+
<line-items type="array">
|
78
|
+
<line-item type="Invoice::LineItem">
|
79
|
+
<created-at type="datetime">2012-04-03T13:41:15+02:00</created-at>
|
80
|
+
<currency>EUR</currency>
|
81
|
+
<description>Bear with happy ears</description>
|
82
|
+
<discount-in-cents type="integer" nil="true"></discount-in-cents>
|
83
|
+
<discount-in-promillage type="integer">50</discount-in-promillage>
|
84
|
+
<id type="integer">30</id>
|
85
|
+
<invoice-id type="integer">18</invoice-id>
|
86
|
+
<price-in-cents type="integer">1199</price-in-cents>
|
87
|
+
<quantity type="integer" nil="true"></quantity>
|
88
|
+
<sales-tax-in-cents type="integer" nil="true"></sales-tax-in-cents>
|
89
|
+
<sales-tax-in-promillage type="integer">190</sales-tax-in-promillage>
|
90
|
+
<sku nil="true"></sku>
|
91
|
+
<updated-at type="datetime">2012-04-03T13:41:15+02:00</updated-at>
|
92
|
+
</line-item>
|
93
|
+
<line-item type="Invoice::LineItem">
|
94
|
+
<created-at type="datetime">2012-04-03T13:41:15+02:00</created-at>
|
95
|
+
<currency>EUR</currency>
|
96
|
+
<description>Bunny with carrot</description>
|
97
|
+
<discount-in-cents type="integer" nil="true"></discount-in-cents>
|
98
|
+
<discount-in-promillage type="integer">200</discount-in-promillage>
|
99
|
+
<id type="integer">31</id>
|
100
|
+
<invoice-id type="integer">18</invoice-id>
|
101
|
+
<price-in-cents type="integer">1779</price-in-cents>
|
102
|
+
<quantity type="integer" nil="true"></quantity>
|
103
|
+
<sales-tax-in-cents type="integer" nil="true"></sales-tax-in-cents>
|
104
|
+
<sales-tax-in-promillage type="integer">190</sales-tax-in-promillage>
|
105
|
+
<sku nil="true"></sku>
|
106
|
+
<updated-at type="datetime">2012-04-03T13:41:15+02:00</updated-at>
|
107
|
+
</line-item>
|
108
|
+
</line-items>
|
109
|
+
<invoice-url>https://www.caren-cares.com/invoices/753a857e0267c87b</invoice-url>
|
110
|
+
<payment-url>https://www.caren-cares.com/invoices/753a857e0267c87b/payment</payment-url>
|
111
|
+
</invoice>
|
112
|
+
<invoice>
|
113
|
+
<access-token>08d37a494927cef9</access-token>
|
114
|
+
<created-at type="datetime">2012-04-03T13:41:15+02:00</created-at>
|
115
|
+
<customer-email>marge@example.com</customer-email>
|
116
|
+
<email-status>sent</email-status>
|
117
|
+
<id type="integer">19</id>
|
118
|
+
<invoiced-at type="datetime">2012-04-03T13:41:15+02:00</invoiced-at>
|
119
|
+
<paid type="boolean">true</paid>
|
120
|
+
<paid-at type="datetime">2012-04-03T13:41:15+02:00</paid-at>
|
121
|
+
<payment-method nil="true"></payment-method>
|
122
|
+
<payment-method-description>Paid with cash at your pharmacy.</payment-method-description>
|
123
|
+
<reference nil="true"></reference>
|
124
|
+
<requires-account type="boolean">false</requires-account>
|
125
|
+
<requires-payment type="boolean">false</requires-payment>
|
126
|
+
<updated-at type="datetime">2012-04-03T13:41:15+02:00</updated-at>
|
127
|
+
<line-items type="array">
|
128
|
+
<line-item type="Invoice::LineItem">
|
129
|
+
<created-at type="datetime">2012-04-03T13:41:15+02:00</created-at>
|
130
|
+
<currency>EUR</currency>
|
131
|
+
<description nil="true"></description>
|
132
|
+
<discount-in-cents type="integer" nil="true"></discount-in-cents>
|
133
|
+
<discount-in-promillage type="integer" nil="true"></discount-in-promillage>
|
134
|
+
<id type="integer">32</id>
|
135
|
+
<invoice-id type="integer">19</invoice-id>
|
136
|
+
<price-in-cents type="integer">699</price-in-cents>
|
137
|
+
<quantity type="integer" nil="true"></quantity>
|
138
|
+
<sales-tax-in-cents type="integer" nil="true"></sales-tax-in-cents>
|
139
|
+
<sales-tax-in-promillage type="integer" nil="true"></sales-tax-in-promillage>
|
140
|
+
<sku>creme-12</sku>
|
141
|
+
<updated-at type="datetime">2012-04-03T13:41:15+02:00</updated-at>
|
142
|
+
</line-item>
|
143
|
+
</line-items>
|
144
|
+
<invoice-url>https://www.caren-cares.com/invoices/08d37a494927cef9</invoice-url>
|
145
|
+
<payment-url>https://www.caren-cares.com/invoices/08d37a494927cef9/payment</payment-url>
|
146
|
+
</invoice>
|
147
|
+
</invoices>
|
@@ -0,0 +1,62 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<invoices type="array">
|
3
|
+
<invoice>
|
4
|
+
<access-token>06590eb9de2f2baf</access-token>
|
5
|
+
<created-at type="datetime">2012-04-03T13:41:15+02:00</created-at>
|
6
|
+
<customer-email>jenny@example.com</customer-email>
|
7
|
+
<email-status>sent</email-status>
|
8
|
+
<id type="integer">17</id>
|
9
|
+
<invoiced-at type="datetime">2012-04-03T13:41:15+02:00</invoiced-at>
|
10
|
+
<paid type="boolean">true</paid>
|
11
|
+
<paid-at type="datetime">2012-04-03T13:45:48+02:00</paid-at>
|
12
|
+
<payment-method nil="true"></payment-method>
|
13
|
+
<payment-method-description nil="true"></payment-method-description>
|
14
|
+
<reference>NW-05463-12-0</reference>
|
15
|
+
<requires-account type="boolean">true</requires-account>
|
16
|
+
<requires-payment type="boolean">true</requires-payment>
|
17
|
+
<updated-at type="datetime">2012-04-03T13:45:48+02:00</updated-at>
|
18
|
+
<line-items type="array">
|
19
|
+
<line-item type="Invoice::LineItem">
|
20
|
+
<created-at type="datetime">2012-04-03T13:41:15+02:00</created-at>
|
21
|
+
<currency>EUR</currency>
|
22
|
+
<description>Wheel</description>
|
23
|
+
<discount-in-cents type="integer" nil="true"></discount-in-cents>
|
24
|
+
<discount-in-promillage type="integer" nil="true"></discount-in-promillage>
|
25
|
+
<id type="integer">28</id>
|
26
|
+
<invoice-id type="integer">17</invoice-id>
|
27
|
+
<price-in-cents type="integer">1199</price-in-cents>
|
28
|
+
<quantity type="integer">4</quantity>
|
29
|
+
<sales-tax-in-cents type="integer" nil="true"></sales-tax-in-cents>
|
30
|
+
<sales-tax-in-promillage type="integer">60</sales-tax-in-promillage>
|
31
|
+
<sku>wheels-12-nut-56</sku>
|
32
|
+
<updated-at type="datetime">2012-04-03T13:41:15+02:00</updated-at>
|
33
|
+
</line-item>
|
34
|
+
<line-item type="Invoice::LineItem">
|
35
|
+
<created-at type="datetime">2012-04-03T13:41:15+02:00</created-at>
|
36
|
+
<currency>EUR</currency>
|
37
|
+
<description>Nut</description>
|
38
|
+
<discount-in-cents type="integer" nil="true"></discount-in-cents>
|
39
|
+
<discount-in-promillage type="integer" nil="true"></discount-in-promillage>
|
40
|
+
<id type="integer">29</id>
|
41
|
+
<invoice-id type="integer">17</invoice-id>
|
42
|
+
<price-in-cents type="integer">699</price-in-cents>
|
43
|
+
<quantity type="integer">8</quantity>
|
44
|
+
<sales-tax-in-cents type="integer" nil="true"></sales-tax-in-cents>
|
45
|
+
<sales-tax-in-promillage type="integer">190</sales-tax-in-promillage>
|
46
|
+
<sku>wheels-43-nut-29</sku>
|
47
|
+
<updated-at type="datetime">2012-04-03T13:41:15+02:00</updated-at>
|
48
|
+
</line-item>
|
49
|
+
</line-items>
|
50
|
+
<invoice-url>https://www.caren-cares.com/invoices/06590eb9de2f2baf</invoice-url>
|
51
|
+
<payment-url>https://www.caren-cares.com/invoices/06590eb9de2f2baf/payment</payment-url>
|
52
|
+
<billing-address>
|
53
|
+
<address-line-1>Botsholsedwarsweg 12</address-line-1>
|
54
|
+
<address-line-2 nil="true"></address-line-2>
|
55
|
+
<city>Waverveen</city>
|
56
|
+
<country>Nederland</country>
|
57
|
+
<full-name>Joris de Boer</full-name>
|
58
|
+
<state-province-or-region nil="true"></state-province-or-region>
|
59
|
+
<zip>3646 AJ</zip>
|
60
|
+
</billing-address>
|
61
|
+
</invoice>
|
62
|
+
</invoices>
|
@@ -0,0 +1,33 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<payments type="array">
|
3
|
+
<payment>
|
4
|
+
<amount-in-cents type="integer">1898</amount-in-cents>
|
5
|
+
<auth-code nil="true"></auth-code>
|
6
|
+
<created-at type="datetime">2012-02-15T11:35:21+01:00</created-at>
|
7
|
+
<currency>EUR</currency>
|
8
|
+
<gateway>ideal</gateway>
|
9
|
+
<id type="integer">1</id>
|
10
|
+
<invoice-id type="integer">2</invoice-id>
|
11
|
+
<person-id type="integer" nil="true"></person-id>
|
12
|
+
<psp-reference>0030000006449217</psp-reference>
|
13
|
+
<refusal-reason nil="true"></refusal-reason>
|
14
|
+
<result-code nil="true"></result-code>
|
15
|
+
<status>paid</status>
|
16
|
+
<updated-at type="datetime">2012-02-15T11:35:37+01:00</updated-at>
|
17
|
+
</payment>
|
18
|
+
<payment>
|
19
|
+
<amount-in-cents type="integer">1898</amount-in-cents>
|
20
|
+
<auth-code nil="true"></auth-code>
|
21
|
+
<created-at type="datetime">2012-03-15T10:59:20+01:00</created-at>
|
22
|
+
<currency>EUR</currency>
|
23
|
+
<gateway>ideal</gateway>
|
24
|
+
<id type="integer">2</id>
|
25
|
+
<invoice-id type="integer">8</invoice-id>
|
26
|
+
<person-id type="integer" nil="true"></person-id>
|
27
|
+
<psp-reference>0030000006785038</psp-reference>
|
28
|
+
<refusal-reason nil="true"></refusal-reason>
|
29
|
+
<result-code nil="true"></result-code>
|
30
|
+
<status>failed</status>
|
31
|
+
<updated-at type="datetime">2012-03-15T10:59:24+01:00</updated-at>
|
32
|
+
</payment>
|
33
|
+
</payments>
|
@@ -0,0 +1,18 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<payments type="array">
|
3
|
+
<payment>
|
4
|
+
<amount-in-cents type="integer">1898</amount-in-cents>
|
5
|
+
<auth-code nil="true"></auth-code>
|
6
|
+
<created-at type="datetime">2012-03-15T10:59:20+01:00</created-at>
|
7
|
+
<currency>EUR</currency>
|
8
|
+
<gateway>ideal</gateway>
|
9
|
+
<id type="integer">2</id>
|
10
|
+
<invoice-id type="integer">8</invoice-id>
|
11
|
+
<person-id type="integer" nil="true"></person-id>
|
12
|
+
<psp-reference>0030000006785038</psp-reference>
|
13
|
+
<refusal-reason nil="true"></refusal-reason>
|
14
|
+
<result-code nil="true"></result-code>
|
15
|
+
<status>failed</status>
|
16
|
+
<updated-at type="datetime">2012-03-15T10:59:24+01:00</updated-at>
|
17
|
+
</payment>
|
18
|
+
</payments>
|
data/spec/spec_helper.rb
CHANGED
@@ -24,7 +24,9 @@ RSpec::Matchers.define :convert_to_valid_caren_xml do
|
|
24
24
|
hash = Hash.from_xml(instance.to_xml)
|
25
25
|
keys = instance.as_xml.keys.map(&:to_s)
|
26
26
|
(hash[instance.class.node_root.to_s].keys - keys).should be_empty
|
27
|
-
keys.map
|
27
|
+
keys.map do |key|
|
28
|
+
hash[instance.class.node_root.to_s][key].to_s == instance.send(key.to_sym).to_s
|
29
|
+
end.flatten.inject(&:&)
|
28
30
|
end
|
29
31
|
end
|
30
32
|
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "Store::Address", "converting to xml" do
|
4
|
+
|
5
|
+
before do
|
6
|
+
@address_a = Caren::Store::Address.new( :full_name => "Andre Foeken" )
|
7
|
+
@address_b = Caren::Store::Address.new( :full_name => "Bart ten Brinke" )
|
8
|
+
end
|
9
|
+
|
10
|
+
it "should be able to convert an address to valid xml" do
|
11
|
+
@address_a.should convert_to_valid_caren_xml
|
12
|
+
end
|
13
|
+
|
14
|
+
it "should be able to convert an array of addresses to valid xml" do
|
15
|
+
[@address_a,@address_b].should convert_to_valid_caren_array_xml
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
@@ -3,8 +3,8 @@ require 'spec_helper'
|
|
3
3
|
describe "BillableCategory", "converting to xml" do
|
4
4
|
|
5
5
|
before do
|
6
|
-
@billable_category_a = Caren::BillableCategory.new( :name => "Services" )
|
7
|
-
@billable_category_b = Caren::BillableCategory.new( :name => "Products" )
|
6
|
+
@billable_category_a = Caren::Store::BillableCategory.new( :name => "Services" )
|
7
|
+
@billable_category_b = Caren::Store::BillableCategory.new( :name => "Products" )
|
8
8
|
end
|
9
9
|
|
10
10
|
it "should be able to convert a product to valid xml" do
|
@@ -24,9 +24,9 @@ describe "BillableCategory", "REST methods" do
|
|
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
|
-
billable_category_url = Caren::Api.session.url_for( Caren::BillableCategory.resource_url(1) )
|
28
|
-
billable_categories_url = Caren::Api.session.url_for( Caren::BillableCategory.resource_url )
|
29
|
-
search_url = Caren::Api.session.url_for( "#{Caren::BillableCategory.resource_url}?key=name&value=billables" )
|
27
|
+
billable_category_url = Caren::Api.session.url_for( Caren::Store::BillableCategory.resource_url(1) )
|
28
|
+
billable_categories_url = Caren::Api.session.url_for( Caren::Store::BillableCategory.resource_url )
|
29
|
+
search_url = Caren::Api.session.url_for( "#{Caren::Store::BillableCategory.resource_url}?key=name&value=billables" )
|
30
30
|
|
31
31
|
timestamp = DateTime.now.to_i
|
32
32
|
|
@@ -36,18 +36,18 @@ describe "BillableCategory", "REST methods" do
|
|
36
36
|
end
|
37
37
|
|
38
38
|
it "should be able to search for a specific billable category" do
|
39
|
-
billable_categories = Caren::BillableCategory.search :name, "billables", Caren::Api.session
|
39
|
+
billable_categories = Caren::Store::BillableCategory.search :name, "billables", Caren::Api.session
|
40
40
|
billable_categories.should have(1).things
|
41
41
|
billable_categories.first.name.should == "Billables"
|
42
42
|
end
|
43
43
|
|
44
44
|
it "should be able to find a billable category" do
|
45
|
-
billable_category = Caren::BillableCategory.find 1, Caren::Api.session
|
45
|
+
billable_category = Caren::Store::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
|
-
billable_categories = Caren::BillableCategory.all Caren::Api.session
|
50
|
+
billable_categories = Caren::Store::BillableCategory.all Caren::Api.session
|
51
51
|
billable_categories.should have(2).things
|
52
52
|
billable_categories.first.name.should == "Products"
|
53
53
|
end
|
@@ -3,8 +3,8 @@ require 'spec_helper'
|
|
3
3
|
describe "Billable", "converting to xml" do
|
4
4
|
|
5
5
|
before do
|
6
|
-
@billable_a = Caren::Billable.new( :name => "Washing", :price => 100.euros, :in_store => true, :type => "Product" )
|
7
|
-
@billable_b = Caren::Billable.new( :name => "Bedpan", :price => 100.euros, :in_store => false, :type => "Product" )
|
6
|
+
@billable_a = Caren::Store::Billable.new( :name => "Washing", :price => 100.euros, :in_store => true, :type => "Product" )
|
7
|
+
@billable_b = Caren::Store::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
|
@@ -24,9 +24,9 @@ describe "Billable", "REST methods" do
|
|
24
24
|
billables = File.read("spec/fixtures/caren_billables.xml")
|
25
25
|
billable_search = File.read("spec/fixtures/caren_billables_search.xml")
|
26
26
|
|
27
|
-
billable_url = Caren::Api.session.url_for( Caren::Billable.resource_url(1) )
|
28
|
-
billables_url = Caren::Api.session.url_for( Caren::Billable.resource_url )
|
29
|
-
search_url = Caren::Api.session.url_for( "#{Caren::Billable.resource_url}?key=name&value=bedpan" )
|
27
|
+
billable_url = Caren::Api.session.url_for( Caren::Store::Billable.resource_url(1) )
|
28
|
+
billables_url = Caren::Api.session.url_for( Caren::Store::Billable.resource_url )
|
29
|
+
search_url = Caren::Api.session.url_for( "#{Caren::Store::Billable.resource_url}?key=name&value=bedpan" )
|
30
30
|
|
31
31
|
timestamp = DateTime.now.to_i
|
32
32
|
|
@@ -34,30 +34,35 @@ describe "Billable", "REST methods" do
|
|
34
34
|
FakeWeb.register_uri(:put, billable_url, :timestamp => timestamp, :signature => Caren::Api.session.sign(timestamp) )
|
35
35
|
FakeWeb.register_uri(:get, billables_url, :body => billables, :timestamp => timestamp, :signature => Caren::Api.session.sign(timestamp,nil,billables) )
|
36
36
|
FakeWeb.register_uri(:get, billable_url, :body => billable, :timestamp => timestamp, :signature => Caren::Api.session.sign(timestamp,nil,billable) )
|
37
|
+
FakeWeb.register_uri(:delete, billable_url, :body => nil, :timestamp => timestamp, :signature => Caren::Api.session.sign(timestamp,nil,nil) )
|
37
38
|
FakeWeb.register_uri(:get, search_url, :body => billable_search, :timestamp => timestamp, :signature => Caren::Api.session.sign(timestamp,nil,billable_search) )
|
38
39
|
end
|
39
40
|
|
40
41
|
it "should be able to update a billable" do
|
41
|
-
lambda{ Caren::Billable.new( :id => 1, :name => "Bedpan" ).update( Caren::Api.session ) }.should_not raise_error
|
42
|
+
lambda{ Caren::Store::Billable.new( :id => 1, :name => "Bedpan" ).update( Caren::Api.session ) }.should_not raise_error
|
42
43
|
end
|
43
44
|
|
44
45
|
it "should be able to update the photo for a product" do
|
45
|
-
lambda{ Caren::Billable.new( :id => 1 ).update_photo( "spec/fixtures/bacon.jpg", Caren::Api.session ) }.should_not raise_error
|
46
|
+
lambda{ Caren::Store::Billable.new( :id => 1 ).update_photo( "spec/fixtures/bacon.jpg", Caren::Api.session ) }.should_not raise_error
|
46
47
|
end
|
47
48
|
|
48
49
|
it "should be able to find a specific billable" do
|
49
|
-
billable = Caren::Billable.find 1, Caren::Api.session
|
50
|
+
billable = Caren::Store::Billable.find 1, Caren::Api.session
|
50
51
|
billable.name.should == "Dishwashing"
|
51
52
|
end
|
53
|
+
|
54
|
+
it "should be able to delete a specific billable" do
|
55
|
+
lambda{ Caren::Store::Billable.new( :id => 1 ).delete(Caren::Api.session) }.should_not raise_error
|
56
|
+
end
|
52
57
|
|
53
58
|
it "should be able to search for a specific product" do
|
54
|
-
billables = Caren::Billable.search :name, "bedpan", Caren::Api.session
|
59
|
+
billables = Caren::Store::Billable.search :name, "bedpan", Caren::Api.session
|
55
60
|
billables.should have(1).things
|
56
61
|
billables.first.name.should == "bedpan"
|
57
62
|
end
|
58
63
|
|
59
64
|
it "should be able to find all billables" do
|
60
|
-
billables = Caren::Billable.all Caren::Api.session
|
65
|
+
billables = Caren::Store::Billable.all Caren::Api.session
|
61
66
|
billables.should have(2).things
|
62
67
|
billables.first.name.should == "Dishwashing"
|
63
68
|
end
|
@@ -0,0 +1,91 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "Store::Invoice", "converting to xml" do
|
4
|
+
|
5
|
+
before do
|
6
|
+
@line_item_a = Caren::Store::LineItem.new( :price_in_cents => 1900 )
|
7
|
+
@line_item_b = Caren::Store::LineItem.new( :price_in_cents => 1499 )
|
8
|
+
@address = Caren::Store::Address.new( :full_name => "Andre Foeken")
|
9
|
+
@invoice_a = Caren::Store::Invoice.new( :reference => "NW-05463-12-A", :line_items => [@line_item_a,@line_item_b], :shipping_address => @address )
|
10
|
+
@invoice_b = Caren::Store::Invoice.new( :reference => "NW-05463-12-B", :billing_address => @address )
|
11
|
+
end
|
12
|
+
|
13
|
+
it "should be able to convert a line item to valid xml" do
|
14
|
+
# A bit nasty but it works
|
15
|
+
new_object = Caren::Store::Invoice.from_xml( @invoice_a.to_xml )
|
16
|
+
new_object.shipping_address.attributes.should == @invoice_a.shipping_address.attributes
|
17
|
+
|
18
|
+
count = 0
|
19
|
+
new_object.line_items.each do |li|
|
20
|
+
li.attributes.should == @invoice_a.line_items[count].attributes
|
21
|
+
count += 1
|
22
|
+
end
|
23
|
+
|
24
|
+
@invoice_a.attributes.delete :shipping_address
|
25
|
+
@invoice_a.attributes.delete :line_items
|
26
|
+
|
27
|
+
new_object.attributes.delete :shipping_address
|
28
|
+
new_object.attributes.delete :line_items
|
29
|
+
|
30
|
+
new_object.attributes.should == @invoice_a.attributes
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
|
35
|
+
describe "Store::Invoice", "REST methods" do
|
36
|
+
|
37
|
+
before do
|
38
|
+
invoice = File.read("spec/fixtures/caren_invoice.xml")
|
39
|
+
invoices = File.read("spec/fixtures/caren_invoices.xml")
|
40
|
+
invoices_search = File.read("spec/fixtures/caren_invoices_search.xml")
|
41
|
+
|
42
|
+
invoice_url = Caren::Api.session.url_for( Caren::Store::Invoice.resource_url(17) )
|
43
|
+
invoice_email_url = Caren::Api.session.url_for( "#{Caren::Store::Invoice.resource_url(17)}/email" )
|
44
|
+
invoices_url = Caren::Api.session.url_for( Caren::Store::Invoice.resource_url )
|
45
|
+
invoices_search_url = Caren::Api.session.url_for( "#{Caren::Store::Invoice.resource_url}?key=reference&value=NW-05463-12-0" )
|
46
|
+
timestamp = DateTime.now.to_i
|
47
|
+
|
48
|
+
FakeWeb.register_uri(:get, invoices_url, :body => invoices, :signature => Caren::Api.session.sign(timestamp,nil,invoices), :timestamp => timestamp )
|
49
|
+
FakeWeb.register_uri(:get, invoices_search_url, :body => invoices_search, :signature => Caren::Api.session.sign(timestamp,nil,invoices_search), :timestamp => timestamp )
|
50
|
+
FakeWeb.register_uri(:get, invoice_url, :body => invoice, :signature => Caren::Api.session.sign(timestamp,nil,invoice), :timestamp => timestamp )
|
51
|
+
|
52
|
+
FakeWeb.register_uri(:post, invoice_email_url, :status => 201, :signature => Caren::Api.session.sign(timestamp), :timestamp => timestamp )
|
53
|
+
FakeWeb.register_uri(:post, invoices_url, :status => 201, :signature => Caren::Api.session.sign(timestamp), :timestamp => timestamp )
|
54
|
+
FakeWeb.register_uri(:put, invoice_url, :body => invoice, :signature => Caren::Api.session.sign(timestamp,nil,invoice), :timestamp => timestamp )
|
55
|
+
FakeWeb.register_uri(:delete, invoice_url, :signature => Caren::Api.session.sign(timestamp), :timestamp => timestamp )
|
56
|
+
end
|
57
|
+
|
58
|
+
it "should be able to find all invoices" do
|
59
|
+
invoices = Caren::Store::Invoice.all Caren::Api.session
|
60
|
+
invoices.should have(3).things
|
61
|
+
invoices.first.customer_email.should == "jenny@example.com"
|
62
|
+
end
|
63
|
+
|
64
|
+
it "should be able to find one invoice" do
|
65
|
+
invoice = Caren::Store::Invoice.find 17, Caren::Api.session
|
66
|
+
invoice.customer_email.should == "jenny@example.com"
|
67
|
+
end
|
68
|
+
|
69
|
+
it "should be able to search for a specific invoice" do
|
70
|
+
billables = Caren::Store::Invoice.search :reference, "NW-05463-12-0", Caren::Api.session
|
71
|
+
billables.should have(1).things
|
72
|
+
billables.first.reference.should == "NW-05463-12-0"
|
73
|
+
end
|
74
|
+
|
75
|
+
it "should be able to create an invoice" do
|
76
|
+
lambda{ Caren::Store::Invoice.new( :reference => "JL-1" ).create(Caren::Api.session) }.should_not raise_error
|
77
|
+
end
|
78
|
+
|
79
|
+
it "should be able to update an invoice" do
|
80
|
+
lambda{ Caren::Store::Invoice.new( :id => 17, :reference => "JL-1" ).update(Caren::Api.session) }.should_not raise_error
|
81
|
+
end
|
82
|
+
|
83
|
+
it "should be able to email an invoice" do
|
84
|
+
lambda{ Caren::Store::Invoice.new( :id => 17 ).email(Caren::Api.session) }.should_not raise_error
|
85
|
+
end
|
86
|
+
|
87
|
+
it "should be able to delete an external invoice" do
|
88
|
+
lambda{ Caren::Store::Invoice.new( :id => 17 ).delete(Caren::Api.session) }.should_not raise_error
|
89
|
+
end
|
90
|
+
|
91
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "Store::LineItem", "converting to xml" do
|
4
|
+
|
5
|
+
before do
|
6
|
+
@line_item_a = Caren::Store::LineItem.new( :price_in_cents => 1900 )
|
7
|
+
@line_item_b = Caren::Store::LineItem.new( :price_in_cents => 1499 )
|
8
|
+
end
|
9
|
+
|
10
|
+
it "should be able to convert a line item to valid xml" do
|
11
|
+
@line_item_a.should convert_to_valid_caren_xml
|
12
|
+
end
|
13
|
+
|
14
|
+
it "should be able to convert an array of line items to valid xml" do
|
15
|
+
[@line_item_a,@line_item_b].should convert_to_valid_caren_array_xml
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
|
20
|
+
describe "LineItem", "REST methods" do
|
21
|
+
|
22
|
+
before do
|
23
|
+
line_item_url = Caren::Api.session.url_for( Caren::Store::LineItem.resource_url(1) )
|
24
|
+
timestamp = DateTime.now.to_i
|
25
|
+
FakeWeb.register_uri(:delete, line_item_url, :body => nil, :timestamp => timestamp, :signature => Caren::Api.session.sign(timestamp,nil,nil) )
|
26
|
+
end
|
27
|
+
|
28
|
+
it "should be able to delete a specific line item" do
|
29
|
+
lambda{ Caren::Store::LineItem.new(:id=>1).delete Caren::Api.session }.should_not raise_error
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "Store::Payment", "REST methods" do
|
4
|
+
|
5
|
+
before do
|
6
|
+
payments = File.read("spec/fixtures/caren_payments.xml")
|
7
|
+
payments_search = File.read("spec/fixtures/caren_payments_search.xml")
|
8
|
+
|
9
|
+
payments_url = Caren::Api.session.url_for( Caren::Store::Payment.resource_url )
|
10
|
+
search_url = Caren::Api.session.url_for( "#{Caren::Store::Payment.resource_url}?key=status&value=failed" )
|
11
|
+
|
12
|
+
timestamp = DateTime.now.to_i
|
13
|
+
|
14
|
+
FakeWeb.register_uri(:get, payments_url, :body => payments, :timestamp => timestamp, :signature => Caren::Api.session.sign(timestamp,nil,payments) )
|
15
|
+
FakeWeb.register_uri(:get, search_url, :body => payments_search, :timestamp => timestamp, :signature => Caren::Api.session.sign(timestamp,nil,payments_search) )
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should be able to search for a specific billable category" do
|
19
|
+
payments_search = Caren::Store::Payment.search :status, "failed", Caren::Api.session
|
20
|
+
payments_search.should have(1).things
|
21
|
+
payments_search.first.status.should == "failed"
|
22
|
+
end
|
23
|
+
|
24
|
+
it "should be able to find all billable category" do
|
25
|
+
payments = Caren::Store::Payment.all Caren::Api.session
|
26
|
+
payments.should have(2).things
|
27
|
+
payments.first.status.should == "paid"
|
28
|
+
end
|
29
|
+
|
30
|
+
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:
|
4
|
+
hash: 11
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
-
|
10
|
-
version: 0.
|
8
|
+
- 5
|
9
|
+
- 0
|
10
|
+
version: 0.5.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Andre Foeken
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2012-
|
18
|
+
date: 2012-04-03 00:00:00 Z
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
21
|
requirement: &id001 !ruby/object:Gem::Requirement
|
@@ -168,8 +168,6 @@ files:
|
|
168
168
|
- init.rb
|
169
169
|
- lib/caren-api.rb
|
170
170
|
- lib/caren/base.rb
|
171
|
-
- lib/caren/billable.rb
|
172
|
-
- lib/caren/billable_category.rb
|
173
171
|
- lib/caren/care_provider.rb
|
174
172
|
- lib/caren/caren.rb
|
175
173
|
- lib/caren/client.rb
|
@@ -180,9 +178,14 @@ files:
|
|
180
178
|
- lib/caren/event_slot_container.rb
|
181
179
|
- lib/caren/external_message.rb
|
182
180
|
- lib/caren/link.rb
|
181
|
+
- lib/caren/store/address.rb
|
182
|
+
- lib/caren/store/billable.rb
|
183
|
+
- lib/caren/store/billable_category.rb
|
184
|
+
- lib/caren/store/invoice.rb
|
185
|
+
- lib/caren/store/line_item.rb
|
186
|
+
- lib/caren/store/payment.rb
|
187
|
+
- lib/caren/store/store.rb
|
183
188
|
- spec/.DS_Store
|
184
|
-
- spec/billable_category_spec.rb
|
185
|
-
- spec/billable_spec.rb
|
186
189
|
- spec/care_provider_spec.rb
|
187
190
|
- spec/caren_spec.rb
|
188
191
|
- spec/client_spec.rb
|
@@ -204,15 +207,26 @@ files:
|
|
204
207
|
- spec/fixtures/caren_care_providers_search.xml
|
205
208
|
- spec/fixtures/caren_external_message.xml
|
206
209
|
- spec/fixtures/caren_external_messages.xml
|
210
|
+
- spec/fixtures/caren_invoice.xml
|
211
|
+
- spec/fixtures/caren_invoices.xml
|
212
|
+
- spec/fixtures/caren_invoices_search.xml
|
207
213
|
- spec/fixtures/caren_link.xml
|
208
214
|
- spec/fixtures/caren_links.xml
|
209
215
|
- spec/fixtures/caren_links_search.xml
|
216
|
+
- spec/fixtures/caren_payments.xml
|
217
|
+
- spec/fixtures/caren_payments_search.xml
|
210
218
|
- spec/fixtures/caren_unauthorized.xml
|
211
219
|
- spec/fixtures/incoming.xml
|
212
220
|
- spec/fixtures/incoming_single_object.xml
|
213
221
|
- spec/link_spec.rb
|
214
222
|
- spec/spec.opts
|
215
223
|
- spec/spec_helper.rb
|
224
|
+
- spec/store/address_spec.rb
|
225
|
+
- spec/store/billable_category_spec.rb
|
226
|
+
- spec/store/billable_spec.rb
|
227
|
+
- spec/store/invoice_spec.rb
|
228
|
+
- spec/store/line_items_spec.rb
|
229
|
+
- spec/store/payment_spec.rb
|
216
230
|
homepage: http://github.com/foeken/caren-api
|
217
231
|
licenses:
|
218
232
|
- MIT
|