fulfil-io 0.4.2 → 0.4.7
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +34 -13
- data/README.md +13 -0
- data/lib/fulfil/client.rb +37 -9
- data/lib/fulfil/interactive_report.rb +33 -0
- data/lib/fulfil/version.rb +1 -1
- data/lib/fulfil.rb +1 -0
- metadata +8 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 21d5119cc38db9e9a414775dcfc9b37d53ca5fa3ff05218c4ae81bbc912d0695
|
4
|
+
data.tar.gz: a4bf8e9ae17a2993c1a3644d298e39f71c78b1eddc40f6bb20d35bdb25ad1ba5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b1fc2fe57cb22c234b12ffe3c0182030baa3be525971eaa7a2f21470e36f5ef9f6957919ba3675574c1159c79ff3b40f28b11167927ce8f852e70fed667f01b3
|
7
|
+
data.tar.gz: 1406056b1b4f566163829b91dd96822c1705286528581567f74d1c383146652a10e0788fd1b80bab81fa79088a32a65440c72483f70fc8c22ae073e9115f19fa
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,25 @@
|
|
1
|
+
## 0.4.7
|
2
|
+
|
3
|
+
* Bugfix: Accidentally removed the model parameter from the URL.
|
4
|
+
|
5
|
+
## 0.4.6
|
6
|
+
|
7
|
+
* Add InteractiveReport support.
|
8
|
+
|
9
|
+
## 0.4.5
|
10
|
+
|
11
|
+
* Add #delete to client.
|
12
|
+
* Set up Dependabot on GitHub.
|
13
|
+
|
14
|
+
## 0.4.4
|
15
|
+
|
16
|
+
* Pin http dependency to ~> 4.4.0. 5.0+ introduces a frozen string error.
|
17
|
+
|
18
|
+
## 0.4.3
|
19
|
+
|
20
|
+
* Add Client errors for more granular handling.
|
21
|
+
* Send along info when a `NotAuthorizedError` is raised.
|
22
|
+
|
1
23
|
## 0.4.2
|
2
24
|
|
3
25
|
* Raise an `UnhandledTypeError` and reveal the offender.
|
@@ -6,7 +28,8 @@
|
|
6
28
|
|
7
29
|
## 0.4.1
|
8
30
|
|
9
|
-
* @cdmwebs screwed up the release process, so this is a tiny bump to fix. No
|
31
|
+
* @cdmwebs screwed up the release process, so this is a tiny bump to fix. No
|
32
|
+
code changes.
|
10
33
|
|
11
34
|
## 0.4.0
|
12
35
|
|
@@ -18,18 +41,16 @@
|
|
18
41
|
|
19
42
|
## 0.2.0
|
20
43
|
|
21
|
-
|
22
|
-
, because initially implemented in
|
23
|
-
|
24
|
-
|
25
|
-
' class.
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
- Add Gemfile.lock to .gitignore and remove it from git-tree - it shouldn't be stored in git for a gem.
|
44
|
+
* Make token optional and allow specifying headers at least for enabling
|
45
|
+
authentication via 'X-API-KEY' header , because initially implemented in
|
46
|
+
0.1.0 bearer auth isn't working.
|
47
|
+
* Fix Query `build_search_term` and `build_exclude_term` to be compatible with
|
48
|
+
Ruby < 2.4, analyzing value for 'Fixnum ' class.
|
49
|
+
* Fix the gem's name in gemspec to 'fulfil-io', as registered at RubyGems.
|
50
|
+
* Remove Rake version constraint from gemspec.
|
51
|
+
* Add Gemfile.lock to .gitignore and remove it from git-tree - it shouldn't be
|
52
|
+
stored in git for a gem.
|
32
53
|
|
33
54
|
## 0.1.0
|
34
55
|
|
35
|
-
* Initial gem release
|
56
|
+
* Initial gem release.
|
data/README.md
CHANGED
@@ -109,6 +109,19 @@ sale['channel'] = 4
|
|
109
109
|
|
110
110
|
fulfil.put(model: sale_model, body: sale)
|
111
111
|
```
|
112
|
+
### Interactive Reports
|
113
|
+
|
114
|
+
As of v0.4.6, interactive report support exists in a basic form.
|
115
|
+
You're able to execute reports with basic params. Responses are
|
116
|
+
transformed to JSON structures.
|
117
|
+
|
118
|
+
```ruby
|
119
|
+
fulfil = Fulfil::Client.new
|
120
|
+
|
121
|
+
report = Fulfil::Report.new(client: fulfil, report_name: 'account.tax.summary.ireport')
|
122
|
+
|
123
|
+
report.execute(start_date: Date.new(2020, 12, 1), end_date: Date.new(2020, 12, 31))
|
124
|
+
```
|
112
125
|
|
113
126
|
## Development
|
114
127
|
|
data/lib/fulfil/client.rb
CHANGED
@@ -10,6 +10,14 @@ module Fulfil
|
|
10
10
|
OAUTH_TOKEN = ENV['FULFIL_TOKEN']
|
11
11
|
|
12
12
|
class Client
|
13
|
+
class NotAuthorizedError < StandardError; end
|
14
|
+
|
15
|
+
class UnknownHTTPError < StandardError; end
|
16
|
+
|
17
|
+
class ConnectionError < StandardError; end
|
18
|
+
|
19
|
+
class ResponseError < StandardError; end
|
20
|
+
|
13
21
|
def initialize(subdomain: SUBDOMAIN, token: OAUTH_TOKEN, headers: { 'X-API-KEY' => API_KEY }, debug: false)
|
14
22
|
@subdomain = subdomain
|
15
23
|
@token = token
|
@@ -66,13 +74,26 @@ module Fulfil
|
|
66
74
|
parse(results: results)
|
67
75
|
end
|
68
76
|
|
69
|
-
def put(model
|
77
|
+
def put(model: nil, id: nil, endpoint: nil, body: {})
|
70
78
|
uri = URI(model_url(model: model, id: id, endpoint: endpoint))
|
71
79
|
|
72
80
|
result = request(verb: :put, endpoint: uri, json: body)
|
73
81
|
parse(result: result)
|
74
82
|
end
|
75
83
|
|
84
|
+
def delete(model:, id:)
|
85
|
+
uri = URI(model_url(model: model, id: id))
|
86
|
+
|
87
|
+
result = request(verb: :delete, endpoint: uri)
|
88
|
+
parse(result: result)
|
89
|
+
end
|
90
|
+
|
91
|
+
def interactive_report(endpoint:, body: nil)
|
92
|
+
uri = URI("#{base_url}/model/#{endpoint}")
|
93
|
+
result = request(verb: :put, endpoint: uri, json: body)
|
94
|
+
parse(result: result)
|
95
|
+
end
|
96
|
+
|
76
97
|
private
|
77
98
|
|
78
99
|
def parse(result: nil, results: [])
|
@@ -91,33 +112,40 @@ module Fulfil
|
|
91
112
|
results.map { |result| Fulfil::ResponseParser.parse(item: result) }
|
92
113
|
end
|
93
114
|
|
115
|
+
def domain
|
116
|
+
"https://#{@subdomain}.fulfil.io"
|
117
|
+
end
|
118
|
+
|
94
119
|
def base_url
|
95
|
-
|
120
|
+
[domain, 'api', 'v2'].join('/')
|
96
121
|
end
|
97
122
|
|
98
123
|
def model_url(model:, id: nil, endpoint: nil)
|
99
|
-
[base_url, model, id, endpoint].compact.join('/')
|
124
|
+
[base_url, 'model', model, id, endpoint].compact.join('/')
|
100
125
|
end
|
101
126
|
|
102
|
-
def request(verb: :get,
|
127
|
+
def request(endpoint:, verb: :get, **args)
|
103
128
|
response = client.request(verb, endpoint, args)
|
104
129
|
|
105
130
|
if response.status.ok? || response.status.created?
|
106
131
|
response.parse
|
132
|
+
elsif response.code == 204
|
133
|
+
[]
|
107
134
|
elsif response.code == 401
|
108
|
-
|
135
|
+
error = response.parse
|
136
|
+
raise NotAuthorizedError, "Not authorized: #{error['error']}: #{error['error_description']}"
|
109
137
|
else
|
110
138
|
puts response.body.to_s
|
111
139
|
raise Error, 'Error encountered while processing response:'
|
112
140
|
end
|
113
141
|
rescue HTTP::Error => e
|
114
142
|
puts e
|
115
|
-
raise
|
143
|
+
raise UnknownHTTPError, 'Unhandled HTTP error encountered'
|
116
144
|
rescue HTTP::ConnectionError => e
|
117
145
|
puts "Couldn't connect"
|
118
|
-
raise
|
119
|
-
rescue HTTP::ResponseError =>
|
120
|
-
raise
|
146
|
+
raise ConnectionError, "Can't connect to #{base_url}"
|
147
|
+
rescue HTTP::ResponseError => e
|
148
|
+
raise ResponseError, "Can't process response: #{e}"
|
121
149
|
[]
|
122
150
|
end
|
123
151
|
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module Fulfil
|
2
|
+
class InteractiveReport
|
3
|
+
def initialize(client:, report:)
|
4
|
+
@client = client
|
5
|
+
@report = report
|
6
|
+
end
|
7
|
+
|
8
|
+
def execute(start_date:, end_date:)
|
9
|
+
@client.interactive_report(
|
10
|
+
endpoint: report_url,
|
11
|
+
body: [{
|
12
|
+
start_date: serialize_date(start_date),
|
13
|
+
end_date: serialize_date(end_date)
|
14
|
+
}]
|
15
|
+
)
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
def report_url
|
21
|
+
"#{@report}/execute"
|
22
|
+
end
|
23
|
+
|
24
|
+
def serialize_date(date)
|
25
|
+
{
|
26
|
+
__class__: 'date',
|
27
|
+
year: date.year,
|
28
|
+
month: date.month,
|
29
|
+
day: date.day
|
30
|
+
}
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
data/lib/fulfil/version.rb
CHANGED
data/lib/fulfil.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fulfil-io
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Chris Moore
|
@@ -9,22 +9,22 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2021-11-30 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: http
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
17
17
|
requirements:
|
18
|
-
- - "
|
18
|
+
- - "~>"
|
19
19
|
- !ruby/object:Gem::Version
|
20
|
-
version:
|
20
|
+
version: 4.4.1
|
21
21
|
type: :runtime
|
22
22
|
prerelease: false
|
23
23
|
version_requirements: !ruby/object:Gem::Requirement
|
24
24
|
requirements:
|
25
|
-
- - "
|
25
|
+
- - "~>"
|
26
26
|
- !ruby/object:Gem::Version
|
27
|
-
version:
|
27
|
+
version: 4.4.1
|
28
28
|
- !ruby/object:Gem::Dependency
|
29
29
|
name: bundler
|
30
30
|
requirement: !ruby/object:Gem::Requirement
|
@@ -111,6 +111,7 @@ files:
|
|
111
111
|
- Rakefile
|
112
112
|
- lib/fulfil.rb
|
113
113
|
- lib/fulfil/client.rb
|
114
|
+
- lib/fulfil/interactive_report.rb
|
114
115
|
- lib/fulfil/model.rb
|
115
116
|
- lib/fulfil/query.rb
|
116
117
|
- lib/fulfil/response_parser.rb
|
@@ -134,7 +135,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
134
135
|
- !ruby/object:Gem::Version
|
135
136
|
version: '0'
|
136
137
|
requirements: []
|
137
|
-
rubygems_version: 3.
|
138
|
+
rubygems_version: 3.1.6
|
138
139
|
signing_key:
|
139
140
|
specification_version: 4
|
140
141
|
summary: Interact with the Fulfil.io API
|