centrum_faktur 0.0.1 → 0.1.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/README.markdown +133 -0
- data/lib/centrum_faktur/comment.rb +4 -4
- data/lib/centrum_faktur/connection.rb +20 -2
- data/lib/centrum_faktur/estimate.rb +5 -0
- data/lib/centrum_faktur/invoice.rb +5 -0
- data/lib/centrum_faktur/version.rb +1 -1
- data/test/connection_test.rb +34 -0
- metadata +1 -1
data/README.markdown
CHANGED
@@ -2,6 +2,12 @@
|
|
2
2
|
|
3
3
|
Ruby client for [Centrum Faktur API](http://centrumfaktur.pl/api/)
|
4
4
|
|
5
|
+
## Installation ##
|
6
|
+
|
7
|
+
```
|
8
|
+
gem install centrum_faktur
|
9
|
+
```
|
10
|
+
|
5
11
|
## Configuration ##
|
6
12
|
|
7
13
|
``` ruby
|
@@ -14,6 +20,133 @@ CentrumFaktur.configure do |config|
|
|
14
20
|
end
|
15
21
|
```
|
16
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
|
+
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
|
+
Writing invoice to pdf can be done as follows:
|
37
|
+
|
38
|
+
``` ruby
|
39
|
+
File.open("my-invoice.pdf", "w") { |file| file.write(CentrumFaktur::Invoice.show("/api/1.0/invoices/1/", :format => :pdf)) }
|
40
|
+
```
|
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
|
+
|
17
150
|
## Copyright ##
|
18
151
|
|
19
152
|
Created during development for [Ragnarson](http://ragnarson.com/)
|
@@ -1,11 +1,11 @@
|
|
1
1
|
class CentrumFaktur::Comment
|
2
|
-
def self.list(options = {})
|
3
|
-
request = CentrumFaktur::Connection.new.get(
|
2
|
+
def self.list(comment_uri = "/api/1.0/comments/", options = {})
|
3
|
+
request = CentrumFaktur::Connection.new.get(comment_uri, options)
|
4
4
|
request.handle_response
|
5
5
|
end
|
6
6
|
|
7
|
-
def self.create(params)
|
8
|
-
request = CentrumFaktur::Connection.new.post(
|
7
|
+
def self.create(comment_uri, params)
|
8
|
+
request = CentrumFaktur::Connection.new.post(comment_uri, params)
|
9
9
|
request.handle_response
|
10
10
|
end
|
11
11
|
end
|
@@ -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 = params
|
46
|
+
request.body = MultiJson.encode(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 = params
|
55
|
+
request.body = MultiJson.encode(normalize_params(params))
|
56
56
|
@response = http.request(request)
|
57
57
|
self
|
58
58
|
end
|
@@ -74,6 +74,24 @@ class CentrumFaktur::Connection
|
|
74
74
|
URI.parse(path)
|
75
75
|
end
|
76
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
|
+
|
77
95
|
def parse_response
|
78
96
|
case format.to_sym
|
79
97
|
when :json
|
@@ -19,6 +19,11 @@ class CentrumFaktur::Estimate
|
|
19
19
|
request.handle_response
|
20
20
|
end
|
21
21
|
|
22
|
+
def self.update(estimate_uri, params)
|
23
|
+
request = CentrumFaktur::Connection.new.put(estimate_uri, params)
|
24
|
+
request.handle_response
|
25
|
+
end
|
26
|
+
|
22
27
|
def self.destroy(estimate_uri)
|
23
28
|
request = CentrumFaktur::Connection.new.delete(estimate_uri)
|
24
29
|
request.handle_response
|
@@ -19,6 +19,11 @@ class CentrumFaktur::Invoice
|
|
19
19
|
request.handle_response
|
20
20
|
end
|
21
21
|
|
22
|
+
def self.update(invoice_uri, params)
|
23
|
+
request = CentrumFaktur::Connection.new.put(invoice_uri, params)
|
24
|
+
request.handle_response
|
25
|
+
end
|
26
|
+
|
22
27
|
def self.destroy(invoice_uri)
|
23
28
|
request = CentrumFaktur::Connection.new.delete(invoice_uri)
|
24
29
|
request.handle_response
|
data/test/connection_test.rb
CHANGED
@@ -27,4 +27,38 @@ describe "Connection" do
|
|
27
27
|
it "should return url to custom profile" do
|
28
28
|
assert_equal "https://fake.centrumfaktur.pl", CentrumFaktur::Connection.new.uri.to_s
|
29
29
|
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
|
30
64
|
end
|