centrum_faktur 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +1 -0
- data/.travis.yml +5 -0
- data/Gemfile +1 -1
- data/README.markdown +21 -13
- data/README.md +157 -0
- data/lib/centrum_faktur/connection.rb +4 -31
- data/lib/centrum_faktur/payment.rb +11 -0
- data/lib/centrum_faktur/utils.rb +31 -0
- data/lib/centrum_faktur/version.rb +1 -1
- data/lib/centrum_faktur.rb +2 -0
- data/test/comment_test.rb +26 -0
- data/test/connection_test.rb +0 -49
- data/test/customer_test.rb +19 -0
- data/test/fixtures/comments.txt +21 -0
- data/test/fixtures/customers.txt +20 -0
- data/test/fixtures/destroy_invoice.txt +10 -0
- data/test/fixtures/destroy_invoice_404.txt +12 -0
- data/test/fixtures/new_comment.txt +20 -0
- data/test/fixtures/new_payment.txt +17 -0
- data/test/fixtures/payments.txt +18 -0
- data/test/fixtures/users.txt +19 -0
- data/test/helper.rb +6 -0
- data/test/invoice_test.rb +25 -0
- data/test/payments_test.rb +37 -0
- data/test/user_test.rb +19 -0
- data/test/utils_test.rb +52 -0
- metadata +65 -45
data/.gitignore
CHANGED
data/.travis.yml
ADDED
data/Gemfile
CHANGED
data/README.markdown
CHANGED
@@ -1,14 +1,14 @@
|
|
1
|
-
# Centrum Faktur
|
1
|
+
# Centrum Faktur
|
2
2
|
|
3
3
|
Ruby client for [Centrum Faktur API](http://centrumfaktur.pl/api/)
|
4
4
|
|
5
|
-
## Installation
|
5
|
+
## Installation
|
6
6
|
|
7
7
|
```
|
8
8
|
gem install centrum_faktur
|
9
9
|
```
|
10
10
|
|
11
|
-
## Configuration
|
11
|
+
## Configuration
|
12
12
|
|
13
13
|
``` ruby
|
14
14
|
require "centrum_faktur"
|
@@ -20,7 +20,7 @@ CentrumFaktur.configure do |config|
|
|
20
20
|
end
|
21
21
|
```
|
22
22
|
|
23
|
-
## Usage
|
23
|
+
## Usage
|
24
24
|
|
25
25
|
Requests return Array or Hash, where keys are strings.
|
26
26
|
When other format than json (default) or yaml is specified, response is not parsed.
|
@@ -30,16 +30,16 @@ So for xml and pickle requests string is returned.
|
|
30
30
|
CentrumFaktur::Invoice.show("/api/1.0/invoices/1/", :format => :xml)
|
31
31
|
```
|
32
32
|
|
33
|
-
All params that respond to `strftime` (i.e. Date, Time) will be normalized to format
|
34
|
-
required by API, that is: `"YYYY-MM-DD"`
|
35
|
-
|
36
33
|
Writing invoice to pdf can be done as follows:
|
37
34
|
|
38
35
|
``` ruby
|
39
36
|
File.open("my-invoice.pdf", "w") { |file| file.write(CentrumFaktur::Invoice.show("/api/1.0/invoices/1/", :format => :pdf)) }
|
40
37
|
```
|
41
38
|
|
42
|
-
|
39
|
+
All params that respond to `strftime` (i.e. Date, Time) will be normalized to format
|
40
|
+
required by API, that is: `"YYYY-MM-DD"`
|
41
|
+
|
42
|
+
### Account
|
43
43
|
|
44
44
|
Only listing accounts is supported via API
|
45
45
|
|
@@ -47,7 +47,7 @@ Only listing accounts is supported via API
|
|
47
47
|
CentrumFaktur::Account.list
|
48
48
|
```
|
49
49
|
|
50
|
-
### Comment
|
50
|
+
### Comment
|
51
51
|
|
52
52
|
Listing all comments:
|
53
53
|
|
@@ -69,7 +69,7 @@ You must pass path to resource comment and required attributes:
|
|
69
69
|
CentrumFaktur::Comment.create("/api/1.0/estimates/1/comments/", {:body => "cool", :is_public => false})
|
70
70
|
```
|
71
71
|
|
72
|
-
### Estimate
|
72
|
+
### Estimate
|
73
73
|
|
74
74
|
Listing all estimates:
|
75
75
|
|
@@ -101,7 +101,7 @@ Removing estimate:
|
|
101
101
|
CentrumFaktur::Estimate.destroy("/api/1.0/estimates/1/")
|
102
102
|
```
|
103
103
|
|
104
|
-
### Invoice
|
104
|
+
### Invoice
|
105
105
|
|
106
106
|
Listing all invoices:
|
107
107
|
|
@@ -147,8 +147,16 @@ Only listing users is supported via API
|
|
147
147
|
CentrumFaktur::User.list
|
148
148
|
```
|
149
149
|
|
150
|
-
##
|
150
|
+
## Continuous Integration
|
151
|
+
|
152
|
+
[![Build Status](https://secure.travis-ci.org/morgoth/centrum_faktur.png)](http://travis-ci.org/morgoth/centrum_faktur)
|
153
|
+
|
154
|
+
## Contributors
|
155
|
+
|
156
|
+
* [Grzegorz Pawlik](https://github.com/pawlik)
|
157
|
+
|
158
|
+
## Copyright
|
151
159
|
|
152
160
|
Created during development for [Ragnarson](http://ragnarson.com/)
|
153
161
|
|
154
|
-
Copyright ©
|
162
|
+
Copyright © Wojciech Wnętrzak. See LICENSE for details.
|
data/README.md
ADDED
@@ -0,0 +1,157 @@
|
|
1
|
+
# Centrum Faktur
|
2
|
+
|
3
|
+
Ruby client for [Centrum Faktur API](http://centrumfaktur.pl/api/)
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
```
|
8
|
+
gem install centrum_faktur
|
9
|
+
```
|
10
|
+
|
11
|
+
## Configuration
|
12
|
+
|
13
|
+
``` ruby
|
14
|
+
require "centrum_faktur"
|
15
|
+
|
16
|
+
CentrumFaktur.configure do |config|
|
17
|
+
config.login = "your_login"
|
18
|
+
config.subdomain = "your-subdomain"
|
19
|
+
config.password = "your-password"
|
20
|
+
end
|
21
|
+
```
|
22
|
+
|
23
|
+
## Usage
|
24
|
+
|
25
|
+
Requests return Array or Hash, where keys are strings.
|
26
|
+
When other format than json (default) or yaml is specified, response is not parsed.
|
27
|
+
So for xml and pickle requests string is returned.
|
28
|
+
|
29
|
+
``` ruby
|
30
|
+
CentrumFaktur::Invoice.show("/api/1.0/invoices/1/", :format => :xml)
|
31
|
+
```
|
32
|
+
|
33
|
+
Writing invoice to pdf can be done as follows:
|
34
|
+
|
35
|
+
``` ruby
|
36
|
+
File.open("my-invoice.pdf", "w") { |file| file.write(CentrumFaktur::Invoice.show("/api/1.0/invoices/1/", :format => :pdf)) }
|
37
|
+
```
|
38
|
+
|
39
|
+
All params that respond to `strftime` (i.e. Date, Time) will be normalized to format
|
40
|
+
required by API, that is: `"YYYY-MM-DD"`
|
41
|
+
|
42
|
+
### Account
|
43
|
+
|
44
|
+
Only listing accounts is supported via API
|
45
|
+
|
46
|
+
``` ruby
|
47
|
+
CentrumFaktur::Account.list
|
48
|
+
```
|
49
|
+
|
50
|
+
### Comment
|
51
|
+
|
52
|
+
Listing all comments:
|
53
|
+
|
54
|
+
``` ruby
|
55
|
+
CentrumFaktur::Comment.list
|
56
|
+
```
|
57
|
+
|
58
|
+
Or listing comments for given resource:
|
59
|
+
|
60
|
+
``` ruby
|
61
|
+
CentrumFaktur::Comment.list("/api/1.0/estimates/1/comments/")
|
62
|
+
```
|
63
|
+
|
64
|
+
Creating comment:
|
65
|
+
|
66
|
+
You must pass path to resource comment and required attributes:
|
67
|
+
|
68
|
+
``` ruby
|
69
|
+
CentrumFaktur::Comment.create("/api/1.0/estimates/1/comments/", {:body => "cool", :is_public => false})
|
70
|
+
```
|
71
|
+
|
72
|
+
### Estimate
|
73
|
+
|
74
|
+
Listing all estimates:
|
75
|
+
|
76
|
+
``` ruby
|
77
|
+
CentrumFaktur::Estimate.list
|
78
|
+
```
|
79
|
+
|
80
|
+
Monitoring estimate changes (with optional filter param):
|
81
|
+
|
82
|
+
``` ruby
|
83
|
+
CentrumFaktur::Estimate.list_updates(:updated_since => "2012-01-12")
|
84
|
+
```
|
85
|
+
|
86
|
+
Creating estimate (check required attributes in API description):
|
87
|
+
|
88
|
+
``` ruby
|
89
|
+
CentrumFaktur::Estimate.create({})
|
90
|
+
```
|
91
|
+
|
92
|
+
Updating estimate:
|
93
|
+
|
94
|
+
``` ruby
|
95
|
+
CentrumFaktur::Estimate.update("/api/1.0/estimates/1/", {})
|
96
|
+
```
|
97
|
+
|
98
|
+
Removing estimate:
|
99
|
+
|
100
|
+
``` ruby
|
101
|
+
CentrumFaktur::Estimate.destroy("/api/1.0/estimates/1/")
|
102
|
+
```
|
103
|
+
|
104
|
+
### Invoice
|
105
|
+
|
106
|
+
Listing all invoices:
|
107
|
+
|
108
|
+
``` ruby
|
109
|
+
CentrumFaktur::Invoice.list
|
110
|
+
```
|
111
|
+
|
112
|
+
Monitoring invoice changes:
|
113
|
+
|
114
|
+
``` ruby
|
115
|
+
CentrumFaktur::Invoice.list_updates
|
116
|
+
```
|
117
|
+
|
118
|
+
Displaying invoice:
|
119
|
+
|
120
|
+
``` ruby
|
121
|
+
CentrumFaktur::Invoice.show("/api/1.0/invoices/1/")
|
122
|
+
```
|
123
|
+
|
124
|
+
Creating invoice (check required attributes in API description):
|
125
|
+
|
126
|
+
``` ruby
|
127
|
+
CentrumFaktur::Invoice.create({})
|
128
|
+
```
|
129
|
+
|
130
|
+
Updating invoice:
|
131
|
+
|
132
|
+
``` ruby
|
133
|
+
CentrumFaktur::Invoice.update("/api/1.0/invoices/1/", {})
|
134
|
+
```
|
135
|
+
|
136
|
+
Removing invoice:
|
137
|
+
|
138
|
+
``` ruby
|
139
|
+
CentrumFaktur::Invoice.destroy("/api/1.0/invoices/1/")
|
140
|
+
```
|
141
|
+
|
142
|
+
### User ###
|
143
|
+
|
144
|
+
Only listing users is supported via API
|
145
|
+
|
146
|
+
``` ruby
|
147
|
+
CentrumFaktur::User.list
|
148
|
+
```
|
149
|
+
|
150
|
+
## Continuous Integration
|
151
|
+
[![Build Status](https://secure.travis-ci.org/morgoth/centrum_faktur.png)](http://travis-ci.org/morgoth/centrum_faktur)
|
152
|
+
|
153
|
+
## Copyright
|
154
|
+
|
155
|
+
Created during development for [Ragnarson](http://ragnarson.com/)
|
156
|
+
|
157
|
+
Copyright © Wojciech Wnętrzak. See LICENSE for details.
|
@@ -32,8 +32,8 @@ class CentrumFaktur::Connection
|
|
32
32
|
# TODO: unify
|
33
33
|
def get(to, params = {})
|
34
34
|
@format = params.fetch(:format, :json)
|
35
|
-
@path = path_with_params(to, params)
|
36
|
-
request = Net::HTTP::Get.new(@path
|
35
|
+
@path = CentrumFaktur::Utils.path_with_params(to, params)
|
36
|
+
request = Net::HTTP::Get.new(@path, headers)
|
37
37
|
request.basic_auth(login, password)
|
38
38
|
@response = http.request(request)
|
39
39
|
self
|
@@ -43,7 +43,7 @@ class CentrumFaktur::Connection
|
|
43
43
|
@path = URI.parse(to).to_s
|
44
44
|
request = Net::HTTP::Post.new(@path, headers)
|
45
45
|
request.basic_auth(login, password)
|
46
|
-
request.body = MultiJson.encode(normalize_params(params))
|
46
|
+
request.body = MultiJson.encode(CentrumFaktur::Utils.normalize_params(params))
|
47
47
|
@response = http.request(request)
|
48
48
|
self
|
49
49
|
end
|
@@ -52,7 +52,7 @@ class CentrumFaktur::Connection
|
|
52
52
|
@path = URI.parse(to).to_s
|
53
53
|
request = Net::HTTP::Put.new(@path, headers)
|
54
54
|
request.basic_auth(login, password)
|
55
|
-
request.body = MultiJson.encode(normalize_params(params))
|
55
|
+
request.body = MultiJson.encode(CentrumFaktur::Utils.normalize_params(params))
|
56
56
|
@response = http.request(request)
|
57
57
|
self
|
58
58
|
end
|
@@ -65,33 +65,6 @@ class CentrumFaktur::Connection
|
|
65
65
|
self
|
66
66
|
end
|
67
67
|
|
68
|
-
def inline_params(params)
|
69
|
-
params.map { |k, v| "#{k}=#{v}" }.join("&")
|
70
|
-
end
|
71
|
-
|
72
|
-
def path_with_params(path, params)
|
73
|
-
path = path + "?" + inline_params(params) unless params.empty?
|
74
|
-
URI.parse(path)
|
75
|
-
end
|
76
|
-
|
77
|
-
def normalize_params(params)
|
78
|
-
params.inject({}) do |normalized, (key, value)|
|
79
|
-
normalized[key] =
|
80
|
-
if value.is_a?(Hash)
|
81
|
-
normalize_params(value)
|
82
|
-
elsif value.is_a?(Array)
|
83
|
-
value.map { |v| v.is_a?(Hash) ? normalize_params(v) : normalize_value(v) }
|
84
|
-
else
|
85
|
-
normalize_value(value)
|
86
|
-
end
|
87
|
-
normalized
|
88
|
-
end
|
89
|
-
end
|
90
|
-
|
91
|
-
def normalize_value(value)
|
92
|
-
value.respond_to?(:strftime) ? value.strftime("%Y-%m-%d") : value
|
93
|
-
end
|
94
|
-
|
95
68
|
def parse_response
|
96
69
|
case format.to_sym
|
97
70
|
when :json
|
@@ -0,0 +1,11 @@
|
|
1
|
+
class CentrumFaktur::Payment
|
2
|
+
def self.list(comment_uri = "/api/1.0/payments/", options = {})
|
3
|
+
request = CentrumFaktur::Connection.new.get(comment_uri, options)
|
4
|
+
request.handle_response
|
5
|
+
end
|
6
|
+
|
7
|
+
def self.create(payment_uri, params)
|
8
|
+
request = CentrumFaktur::Connection.new.post(payment_uri, params)
|
9
|
+
request.handle_response
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module CentrumFaktur::Utils
|
2
|
+
def inline_params(params)
|
3
|
+
params.map { |k, v| "#{k}=#{v}" }.join("&")
|
4
|
+
end
|
5
|
+
|
6
|
+
def path_with_params(path, params)
|
7
|
+
path = path + "?" + inline_params(params) unless params.empty?
|
8
|
+
URI.parse(path).to_s
|
9
|
+
end
|
10
|
+
|
11
|
+
def normalize_params(params)
|
12
|
+
raise ArgumentError.new("Only hash params can be normalized") unless params.kind_of?(Hash)
|
13
|
+
params.inject({}) do |normalized, (key, value)|
|
14
|
+
normalized[key] =
|
15
|
+
if value.kind_of?(Hash)
|
16
|
+
normalize_params(value)
|
17
|
+
elsif value.kind_of?(Array)
|
18
|
+
value.map { |v| v.kind_of?(Hash) ? normalize_params(v) : normalize_value(v) }
|
19
|
+
else
|
20
|
+
normalize_value(value)
|
21
|
+
end
|
22
|
+
normalized
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def normalize_value(value)
|
27
|
+
value.respond_to?(:strftime) ? value.strftime("%Y-%m-%d") : value
|
28
|
+
end
|
29
|
+
|
30
|
+
module_function :inline_params, :path_with_params, :normalize_params, :normalize_value
|
31
|
+
end
|
data/lib/centrum_faktur.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require "centrum_faktur/version"
|
2
|
+
require "centrum_faktur/utils"
|
2
3
|
require "centrum_faktur/exceptions"
|
3
4
|
require "centrum_faktur/connection"
|
4
5
|
require "centrum_faktur/account"
|
@@ -7,6 +8,7 @@ require "centrum_faktur/customer"
|
|
7
8
|
require "centrum_faktur/estimate"
|
8
9
|
require "centrum_faktur/invoice"
|
9
10
|
require "centrum_faktur/user"
|
11
|
+
require "centrum_faktur/payment"
|
10
12
|
|
11
13
|
module CentrumFaktur
|
12
14
|
API_VERSION = "1.0"
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
require "helper"
|
3
|
+
|
4
|
+
describe "Comment" do
|
5
|
+
before do
|
6
|
+
CentrumFaktur.configure do |config|
|
7
|
+
config.login = "john"
|
8
|
+
config.password = "secret"
|
9
|
+
config.subdomain = "john"
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
it "should return estimate comments list limited to one" do
|
14
|
+
FakeWeb.register_uri(:get, "https://john:secret@john.centrumfaktur.pl/api/1.0/estimates/14587/comments/?limit=1", :response => fixture("comments.txt"))
|
15
|
+
response = CentrumFaktur::Comment.list("/api/1.0/estimates/14587/comments/", :limit => 1)
|
16
|
+
expected = [{"body"=>"cool", "user_uri"=>"/api/1.0/users/749/", "comment_type"=>"user", "created"=>"2011-06-14 20:06:36", "commented_object_type"=>"estimate", "commented_object_uri"=>"/api/1.0/estimates/20527/", "is_public"=>false}]
|
17
|
+
assert_equal expected, response
|
18
|
+
end
|
19
|
+
|
20
|
+
it "should create comment" do
|
21
|
+
FakeWeb.register_uri(:post, "https://john:secret@john.centrumfaktur.pl/api/1.0/estimates/14587/comments/", :response => fixture("new_comment.txt"))
|
22
|
+
response = CentrumFaktur::Comment.create("/api/1.0/estimates/14587/comments/", {:body => "cool", :is_public => false})
|
23
|
+
expected = {"body"=>"thanks", "user_uri"=>"/api/1.0/users/749/", "comment_type"=>"user", "created"=>"2011-06-16 21:55:03", "commented_object_type"=>"estimate", "commented_object_uri"=>"/api/1.0/estimates/20627/", "is_public"=>false}
|
24
|
+
assert_equal expected, response
|
25
|
+
end
|
26
|
+
end
|
data/test/connection_test.rb
CHANGED
@@ -9,56 +9,7 @@ describe "Connection" do
|
|
9
9
|
end
|
10
10
|
end
|
11
11
|
|
12
|
-
it "should convert params to inline style" do
|
13
|
-
params = CentrumFaktur::Connection.new.inline_params({:offset => 2, :limit => 10})
|
14
|
-
assert_equal "offset=2&limit=10", params
|
15
|
-
end
|
16
|
-
|
17
|
-
it "should convert params to inline style with path" do
|
18
|
-
path = CentrumFaktur::Connection.new.path_with_params("/api/1.0/invoices/", {:offset => 2, :limit => 10})
|
19
|
-
assert_equal "/api/1.0/invoices/?offset=2&limit=10", path.to_s
|
20
|
-
end
|
21
|
-
|
22
|
-
it "should return path when no params provided" do
|
23
|
-
path = CentrumFaktur::Connection.new.path_with_params("/api/1.0/invoices/", {})
|
24
|
-
assert_equal "/api/1.0/invoices/", path.to_s
|
25
|
-
end
|
26
|
-
|
27
12
|
it "should return url to custom profile" do
|
28
13
|
assert_equal "https://fake.centrumfaktur.pl", CentrumFaktur::Connection.new.uri.to_s
|
29
14
|
end
|
30
|
-
|
31
|
-
it "should normalize date to required format" do
|
32
|
-
normalized = CentrumFaktur::Connection.new.normalize_value(Time.mktime(2012, 01, 01))
|
33
|
-
assert_equal "2012-01-01", normalized
|
34
|
-
end
|
35
|
-
|
36
|
-
it "should not normalize not Date values" do
|
37
|
-
normalized = CentrumFaktur::Connection.new.normalize_value("value")
|
38
|
-
assert_equal "value", normalized
|
39
|
-
end
|
40
|
-
|
41
|
-
it "should normalize params hash" do
|
42
|
-
params = {:body => "value", :date => Time.mktime(2012, 01, 01)}
|
43
|
-
normalized = CentrumFaktur::Connection.new.normalize_params(params)
|
44
|
-
assert_equal({:body => "value", :date => "2012-01-01"}, normalized)
|
45
|
-
end
|
46
|
-
|
47
|
-
it "should normalize nested params hash" do
|
48
|
-
params = {:body => "value", :nested => {:date => Time.mktime(2012, 01, 01)}}
|
49
|
-
normalized = CentrumFaktur::Connection.new.normalize_params(params)
|
50
|
-
assert_equal({:body => "value", :nested => {:date => "2012-01-01"}}, normalized)
|
51
|
-
end
|
52
|
-
|
53
|
-
it "should normalize nested array params hash" do
|
54
|
-
params = {:body => "value", :items => [:date1 => Time.mktime(2012, 01, 01), :date2 => Time.mktime(2012, 01, 02)]}
|
55
|
-
normalized = CentrumFaktur::Connection.new.normalize_params(params)
|
56
|
-
assert_equal({:body => "value", :items => [:date1 => "2012-01-01", :date2 => "2012-01-02"]}, normalized)
|
57
|
-
end
|
58
|
-
|
59
|
-
it "should normalize nested array values" do
|
60
|
-
params = {:body => "value", :items => [Time.mktime(2012, 01, 01), "value"]}
|
61
|
-
normalized = CentrumFaktur::Connection.new.normalize_params(params)
|
62
|
-
assert_equal({:body => "value", :items => ["2012-01-01", "value"]}, normalized)
|
63
|
-
end
|
64
15
|
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
require "helper"
|
3
|
+
|
4
|
+
describe "Customer" do
|
5
|
+
before do
|
6
|
+
CentrumFaktur.configure do |config|
|
7
|
+
config.login = "john"
|
8
|
+
config.password = "secret"
|
9
|
+
config.subdomain = "john"
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
it "should return customers list" do
|
14
|
+
FakeWeb.register_uri(:get, "https://john:secret@john.centrumfaktur.pl/api/1.0/customers/", :response => fixture("customers.txt"))
|
15
|
+
response = CentrumFaktur::Customer.list
|
16
|
+
expected = [{"name"=>"Stefan Stefański", "contact"=>"", "address"=>"Stefanowo\r\nul. Stefańska 1", "resource_uri"=>"/api/1.0/customers/3138/", "email"=>"w.wnetrzak+stefan@gmail.com", "tax_id"=>""}]
|
17
|
+
assert_equal expected, response
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
HTTP/1.0 200 OK
|
2
|
+
Vary: Authorization
|
3
|
+
Content-Type: application/json; charset=utf-8
|
4
|
+
Date: Thu, 16 Jun 2011 19:51:18 GMT
|
5
|
+
Server: lighttpd
|
6
|
+
X-Cache: MISS from pxy1.mirumee.com
|
7
|
+
X-Cache-Lookup: MISS from pxy1.mirumee.com:80
|
8
|
+
Via: 1.0 pxy1.mirumee.com:80 (squid/2.6.STABLE21)
|
9
|
+
Connection: close
|
10
|
+
|
11
|
+
[
|
12
|
+
{
|
13
|
+
"body": "cool",
|
14
|
+
"user_uri": "/api/1.0/users/749/",
|
15
|
+
"comment_type": "user",
|
16
|
+
"created": "2011-06-14 20:06:36",
|
17
|
+
"commented_object_type": "estimate",
|
18
|
+
"commented_object_uri": "/api/1.0/estimates/20527/",
|
19
|
+
"is_public": false
|
20
|
+
}
|
21
|
+
]
|
@@ -0,0 +1,20 @@
|
|
1
|
+
HTTP/1.0 200 OK
|
2
|
+
Vary: Authorization
|
3
|
+
Content-Type: application/json; charset=utf-8
|
4
|
+
Date: Thu, 16 Jun 2011 19:40:49 GMT
|
5
|
+
Server: lighttpd
|
6
|
+
X-Cache: MISS from pxy1.mirumee.com
|
7
|
+
X-Cache-Lookup: MISS from pxy1.mirumee.com:80
|
8
|
+
Via: 1.0 pxy1.mirumee.com:80 (squid/2.6.STABLE21)
|
9
|
+
Connection: close
|
10
|
+
|
11
|
+
[
|
12
|
+
{
|
13
|
+
"name": "Stefan Stefański",
|
14
|
+
"contact": "",
|
15
|
+
"address": "Stefanowo\r\nul. Stefańska 1",
|
16
|
+
"resource_uri": "/api/1.0/customers/3138/",
|
17
|
+
"email": "w.wnetrzak+stefan@gmail.com",
|
18
|
+
"tax_id": ""
|
19
|
+
}
|
20
|
+
]
|
@@ -0,0 +1,10 @@
|
|
1
|
+
HTTP/1.0 204 No Content
|
2
|
+
Vary: Authorization
|
3
|
+
Content-Type: text/plain
|
4
|
+
Date: Thu, 16 Jun 2011 20:06:01 GMT
|
5
|
+
Server: lighttpd
|
6
|
+
X-Cache: MISS from pxy1.mirumee.com
|
7
|
+
X-Cache-Lookup: MISS from pxy1.mirumee.com:80
|
8
|
+
Via: 1.0 pxy1.mirumee.com:80 (squid/2.6.STABLE21)
|
9
|
+
Connection: close
|
10
|
+
|
@@ -0,0 +1,12 @@
|
|
1
|
+
HTTP/1.0 404 Not Found
|
2
|
+
Vary: Authorization
|
3
|
+
Content-Type: text/plain
|
4
|
+
Content-Length: 9
|
5
|
+
Date: Thu, 16 Jun 2011 20:12:49 GMT
|
6
|
+
Server: lighttpd
|
7
|
+
X-Cache: MISS from pxy1.mirumee.com
|
8
|
+
X-Cache-Lookup: MISS from pxy1.mirumee.com:80
|
9
|
+
Via: 1.0 pxy1.mirumee.com:80 (squid/2.6.STABLE21)
|
10
|
+
Connection: close
|
11
|
+
|
12
|
+
Not Found
|
@@ -0,0 +1,20 @@
|
|
1
|
+
HTTP/1.0 200 OK
|
2
|
+
Vary: Authorization
|
3
|
+
Content-Type: application/json; charset=utf-8
|
4
|
+
Content-Length: 257
|
5
|
+
Date: Thu, 16 Jun 2011 19:55:03 GMT
|
6
|
+
Server: lighttpd
|
7
|
+
X-Cache: MISS from pxy1.mirumee.com
|
8
|
+
X-Cache-Lookup: MISS from pxy1.mirumee.com:80
|
9
|
+
Via: 1.0 pxy1.mirumee.com:80 (squid/2.6.STABLE21)
|
10
|
+
Connection: close
|
11
|
+
|
12
|
+
{
|
13
|
+
"body": "thanks",
|
14
|
+
"user_uri": "/api/1.0/users/749/",
|
15
|
+
"comment_type": "user",
|
16
|
+
"created": "2011-06-16 21:55:03",
|
17
|
+
"commented_object_type": "estimate",
|
18
|
+
"commented_object_uri": "/api/1.0/estimates/20627/",
|
19
|
+
"is_public": false
|
20
|
+
}
|
@@ -0,0 +1,17 @@
|
|
1
|
+
HTTP/1.0 200 OK
|
2
|
+
Vary: Authorization
|
3
|
+
Content-Type: application/json; charset=utf-8
|
4
|
+
Content-Length: 257
|
5
|
+
Date: Thu, 16 Jun 2011 19:55:03 GMT
|
6
|
+
Server: lighttpd
|
7
|
+
X-Cache: MISS from pxy1.mirumee.com
|
8
|
+
X-Cache-Lookup: MISS from pxy1.mirumee.com:80
|
9
|
+
Via: 1.0 pxy1.mirumee.com:80 (squid/2.6.STABLE21)
|
10
|
+
Connection: close
|
11
|
+
|
12
|
+
{
|
13
|
+
"date": "2011-06-10",
|
14
|
+
"amount": 99.00,
|
15
|
+
"created": "2012-01-01",
|
16
|
+
"resource_uri": "/api/1.0/payments/99999/"
|
17
|
+
}
|
@@ -0,0 +1,18 @@
|
|
1
|
+
HTTP/1.0 200 OK
|
2
|
+
Vary: Authorization
|
3
|
+
Content-Type: application/json; charset=utf-8
|
4
|
+
Date: Thu, 16 Jun 2011 19:51:18 GMT
|
5
|
+
Server: lighttpd
|
6
|
+
X-Cache: MISS from pxy1.mirumee.com
|
7
|
+
X-Cache-Lookup: MISS from pxy1.mirumee.com:80
|
8
|
+
Via: 1.0 pxy1.mirumee.com:80 (squid/2.6.STABLE21)
|
9
|
+
Connection: close
|
10
|
+
|
11
|
+
[
|
12
|
+
{
|
13
|
+
"date": "2007-01-01",
|
14
|
+
"resource_uri": "/api/1.0/users/749/",
|
15
|
+
"created": "2011-06-14 20:06:36",
|
16
|
+
"amount": 10.0
|
17
|
+
}
|
18
|
+
]
|
@@ -0,0 +1,19 @@
|
|
1
|
+
HTTP/1.0 200 OK
|
2
|
+
Vary: Authorization
|
3
|
+
Content-Type: application/json; charset=utf-8
|
4
|
+
Date: Thu, 16 Jun 2011 19:24:48 GMT
|
5
|
+
Server: lighttpd
|
6
|
+
X-Cache: MISS from pxy1.mirumee.com
|
7
|
+
X-Cache-Lookup: MISS from pxy1.mirumee.com:80
|
8
|
+
Via: 1.0 pxy1.mirumee.com:80 (squid/2.6.STABLE21)
|
9
|
+
Connection: close
|
10
|
+
|
11
|
+
[
|
12
|
+
{
|
13
|
+
"login": "morgoth",
|
14
|
+
"first_name": "Wojciech",
|
15
|
+
"last_name": "Wnętrzak",
|
16
|
+
"email": "w.wnetrzak@gmail.com",
|
17
|
+
"resource_uri": "/api/1.0/users/749/"
|
18
|
+
}
|
19
|
+
]
|
data/test/helper.rb
CHANGED
@@ -7,4 +7,10 @@ class MiniTest::Unit::TestCase
|
|
7
7
|
def setup
|
8
8
|
FakeWeb.allow_net_connect = false
|
9
9
|
end
|
10
|
+
|
11
|
+
# Recording response is as simple as writing in terminal:
|
12
|
+
# curl -isu login:password 'https://subdomain.centrumfaktur.pl/api/1.0/customers/' -X GET > test/fixtures/customers.txt
|
13
|
+
def fixture(filename)
|
14
|
+
File.read(File.join("test", "fixtures", filename))
|
15
|
+
end
|
10
16
|
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
require "helper"
|
3
|
+
|
4
|
+
describe "Invoice" do
|
5
|
+
before do
|
6
|
+
CentrumFaktur.configure do |config|
|
7
|
+
config.login = "john"
|
8
|
+
config.password = "secret"
|
9
|
+
config.subdomain = "john"
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
it "should detroy invoice" do
|
14
|
+
FakeWeb.register_uri(:delete, "https://john:secret@john.centrumfaktur.pl/api/1.0/invoices/666/", :response => fixture("destroy_invoice.txt"))
|
15
|
+
response = CentrumFaktur::Invoice.destroy("/api/1.0/invoices/666/")
|
16
|
+
assert_equal nil, response
|
17
|
+
end
|
18
|
+
|
19
|
+
it "should raise error when invoice does not exist" do
|
20
|
+
FakeWeb.register_uri(:delete, "https://john:secret@john.centrumfaktur.pl/api/1.0/invoices/666/", :response => fixture("destroy_invoice_404.txt"))
|
21
|
+
assert_raises CentrumFaktur::ResponseError do
|
22
|
+
CentrumFaktur::Invoice.destroy("/api/1.0/invoices/666/")
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require "helper"
|
2
|
+
|
3
|
+
describe "Payment" do
|
4
|
+
before do
|
5
|
+
CentrumFaktur.configure do |config|
|
6
|
+
config.login = "john"
|
7
|
+
config.password = "secret"
|
8
|
+
config.subdomain = "john"
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
it "should get payment" do
|
13
|
+
FakeWeb.register_uri(:get,
|
14
|
+
"https://john:secret@john.centrumfaktur.pl/api/1.0/invoices/22933/payments",
|
15
|
+
:response => fixture("payments.txt")
|
16
|
+
)
|
17
|
+
response = CentrumFaktur::Payment.list("/api/1.0/invoices/22933/payments")
|
18
|
+
expected = [{
|
19
|
+
"date" => "2007-01-01", "amount" => 10.0, "resource_uri" => "/api/1.0/users/749/",
|
20
|
+
"created" => "2011-06-14 20:06:36"
|
21
|
+
}]
|
22
|
+
|
23
|
+
assert_equal expected, response
|
24
|
+
end
|
25
|
+
|
26
|
+
it "should create payment" do
|
27
|
+
FakeWeb.register_uri(:post, "https://john:secret@john.centrumfaktur.pl/api/1.0/invoices/22933/payments", :response => fixture("new_payment.txt"))
|
28
|
+
response = CentrumFaktur::Payment.create("/api/1.0/invoices/22933/payments",
|
29
|
+
{:date => "2011-06-10", :amount => 99.00}
|
30
|
+
)
|
31
|
+
|
32
|
+
expected = {"date"=>"2011-06-10",
|
33
|
+
"amount" => 99.00, "created" => "2012-01-01", "resource_uri"=>"/api/1.0/payments/99999/"
|
34
|
+
}
|
35
|
+
assert_equal expected, response
|
36
|
+
end
|
37
|
+
end
|
data/test/user_test.rb
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
require "helper"
|
3
|
+
|
4
|
+
describe "User" do
|
5
|
+
before do
|
6
|
+
CentrumFaktur.configure do |config|
|
7
|
+
config.login = "john"
|
8
|
+
config.password = "secret"
|
9
|
+
config.subdomain = "john"
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
it "should return users list" do
|
14
|
+
FakeWeb.register_uri(:get, "https://john:secret@john.centrumfaktur.pl/api/1.0/users/", :response => fixture("users.txt"))
|
15
|
+
response = CentrumFaktur::User.list
|
16
|
+
expected = [{"login"=>"morgoth", "first_name"=>"Wojciech", "last_name"=>"Wnętrzak", "email"=>"w.wnetrzak@gmail.com", "resource_uri"=>"/api/1.0/users/749/"}]
|
17
|
+
assert_equal expected, response
|
18
|
+
end
|
19
|
+
end
|
data/test/utils_test.rb
ADDED
@@ -0,0 +1,52 @@
|
|
1
|
+
require "helper"
|
2
|
+
|
3
|
+
describe "Utils" do
|
4
|
+
it "should convert params to inline style" do
|
5
|
+
params = CentrumFaktur::Utils.inline_params({:offset => 2, :limit => 10})
|
6
|
+
assert_equal "offset=2&limit=10", params
|
7
|
+
end
|
8
|
+
|
9
|
+
it "should convert params to inline style with path" do
|
10
|
+
path = CentrumFaktur::Utils.path_with_params("/api/1.0/invoices/", {:offset => 2, :limit => 10})
|
11
|
+
assert_equal "/api/1.0/invoices/?offset=2&limit=10", path.to_s
|
12
|
+
end
|
13
|
+
|
14
|
+
it "should return path when no params provided" do
|
15
|
+
path = CentrumFaktur::Utils.path_with_params("/api/1.0/invoices/", {})
|
16
|
+
assert_equal "/api/1.0/invoices/", path.to_s
|
17
|
+
end
|
18
|
+
|
19
|
+
it "should normalize date to required format" do
|
20
|
+
normalized = CentrumFaktur::Utils.normalize_value(Time.mktime(2012, 01, 01))
|
21
|
+
assert_equal "2012-01-01", normalized
|
22
|
+
end
|
23
|
+
|
24
|
+
it "should not normalize not Date values" do
|
25
|
+
normalized = CentrumFaktur::Utils.normalize_value("value")
|
26
|
+
assert_equal "value", normalized
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should normalize params hash" do
|
30
|
+
params = {:body => "value", :date => Time.mktime(2012, 01, 01)}
|
31
|
+
normalized = CentrumFaktur::Utils.normalize_params(params)
|
32
|
+
assert_equal({:body => "value", :date => "2012-01-01"}, normalized)
|
33
|
+
end
|
34
|
+
|
35
|
+
it "should normalize nested params hash" do
|
36
|
+
params = {:body => "value", :nested => {:date => Time.mktime(2012, 01, 01)}}
|
37
|
+
normalized = CentrumFaktur::Utils.normalize_params(params)
|
38
|
+
assert_equal({:body => "value", :nested => {:date => "2012-01-01"}}, normalized)
|
39
|
+
end
|
40
|
+
|
41
|
+
it "should normalize nested array params hash" do
|
42
|
+
params = {:body => "value", :items => [:date1 => Time.mktime(2012, 01, 01), :date2 => Time.mktime(2012, 01, 02)]}
|
43
|
+
normalized = CentrumFaktur::Utils.normalize_params(params)
|
44
|
+
assert_equal({:body => "value", :items => [:date1 => "2012-01-01", :date2 => "2012-01-02"]}, normalized)
|
45
|
+
end
|
46
|
+
|
47
|
+
it "should normalize nested array values" do
|
48
|
+
params = {:body => "value", :items => [Time.mktime(2012, 01, 01), "value"]}
|
49
|
+
normalized = CentrumFaktur::Utils.normalize_params(params)
|
50
|
+
assert_equal({:body => "value", :items => ["2012-01-01", "value"]}, normalized)
|
51
|
+
end
|
52
|
+
end
|
metadata
CHANGED
@@ -1,53 +1,61 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: centrum_faktur
|
3
|
-
version: !ruby/object:Gem::Version
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.2.0
|
4
5
|
prerelease:
|
5
|
-
version: 0.1.0
|
6
6
|
platform: ruby
|
7
|
-
authors:
|
8
|
-
-
|
7
|
+
authors:
|
8
|
+
- Wojciech Wnętrzak
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2012-03-18 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
16
15
|
name: multi_json
|
17
|
-
|
18
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
19
17
|
none: false
|
20
|
-
requirements:
|
21
|
-
- -
|
22
|
-
- !ruby/object:Gem::Version
|
23
|
-
version:
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
24
22
|
type: :runtime
|
25
|
-
version_requirements: *id001
|
26
|
-
- !ruby/object:Gem::Dependency
|
27
|
-
name: fakeweb
|
28
23
|
prerelease: false
|
29
|
-
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: fakeweb
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
30
33
|
none: false
|
31
|
-
requirements:
|
32
|
-
- -
|
33
|
-
- !ruby/object:Gem::Version
|
34
|
-
version:
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
35
38
|
type: :development
|
36
|
-
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
37
46
|
description: Ruby client for Centrum Faktur API
|
38
|
-
email:
|
47
|
+
email:
|
39
48
|
- w.wnetrzak@gmail.com
|
40
49
|
executables: []
|
41
|
-
|
42
50
|
extensions: []
|
43
|
-
|
44
51
|
extra_rdoc_files: []
|
45
|
-
|
46
|
-
files:
|
52
|
+
files:
|
47
53
|
- .gitignore
|
54
|
+
- .travis.yml
|
48
55
|
- Gemfile
|
49
56
|
- LICENSE
|
50
57
|
- README.markdown
|
58
|
+
- README.md
|
51
59
|
- Rakefile
|
52
60
|
- centrum_faktur.gemspec
|
53
61
|
- lib/centrum_faktur.rb
|
@@ -58,37 +66,49 @@ files:
|
|
58
66
|
- lib/centrum_faktur/estimate.rb
|
59
67
|
- lib/centrum_faktur/exceptions.rb
|
60
68
|
- lib/centrum_faktur/invoice.rb
|
69
|
+
- lib/centrum_faktur/payment.rb
|
61
70
|
- lib/centrum_faktur/user.rb
|
71
|
+
- lib/centrum_faktur/utils.rb
|
62
72
|
- lib/centrum_faktur/version.rb
|
73
|
+
- test/comment_test.rb
|
63
74
|
- test/configuration_test.rb
|
64
75
|
- test/connection_test.rb
|
76
|
+
- test/customer_test.rb
|
77
|
+
- test/fixtures/comments.txt
|
78
|
+
- test/fixtures/customers.txt
|
79
|
+
- test/fixtures/destroy_invoice.txt
|
80
|
+
- test/fixtures/destroy_invoice_404.txt
|
81
|
+
- test/fixtures/new_comment.txt
|
82
|
+
- test/fixtures/new_payment.txt
|
83
|
+
- test/fixtures/payments.txt
|
84
|
+
- test/fixtures/users.txt
|
65
85
|
- test/helper.rb
|
86
|
+
- test/invoice_test.rb
|
87
|
+
- test/payments_test.rb
|
88
|
+
- test/user_test.rb
|
89
|
+
- test/utils_test.rb
|
66
90
|
homepage: https://github.com/morgoth/centrum_faktur
|
67
91
|
licenses: []
|
68
|
-
|
69
92
|
post_install_message:
|
70
93
|
rdoc_options: []
|
71
|
-
|
72
|
-
require_paths:
|
94
|
+
require_paths:
|
73
95
|
- lib
|
74
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
96
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
75
97
|
none: false
|
76
|
-
requirements:
|
77
|
-
- -
|
78
|
-
- !ruby/object:Gem::Version
|
79
|
-
version:
|
80
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
98
|
+
requirements:
|
99
|
+
- - ! '>='
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: '0'
|
102
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
81
103
|
none: false
|
82
|
-
requirements:
|
83
|
-
- -
|
84
|
-
- !ruby/object:Gem::Version
|
85
|
-
version:
|
104
|
+
requirements:
|
105
|
+
- - ! '>='
|
106
|
+
- !ruby/object:Gem::Version
|
107
|
+
version: '0'
|
86
108
|
requirements: []
|
87
|
-
|
88
109
|
rubyforge_project:
|
89
|
-
rubygems_version: 1.8.
|
110
|
+
rubygems_version: 1.8.18
|
90
111
|
signing_key:
|
91
112
|
specification_version: 3
|
92
113
|
summary: Ruby client for Centrum Faktur API
|
93
114
|
test_files: []
|
94
|
-
|