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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 35c4c9a9a5c6e89dc1963296ecb2d2bef838a93fe67f4d16b2cc6d1234870787
4
- data.tar.gz: 54030ba2a9cffd08d0f720a195cb29196a8bc38d6860fc7ff30e59b3328f97a9
3
+ metadata.gz: 21d5119cc38db9e9a414775dcfc9b37d53ca5fa3ff05218c4ae81bbc912d0695
4
+ data.tar.gz: a4bf8e9ae17a2993c1a3644d298e39f71c78b1eddc40f6bb20d35bdb25ad1ba5
5
5
  SHA512:
6
- metadata.gz: 1b73ec09fc10b8183ed80d0f60bfe8911394c8d8e624a28e8d4aa77889a2912673876faf5af204ada89ba87ee9fff32796fb8b43a2b6825c1eb91eaf3773fb47
7
- data.tar.gz: a0251fe789efa3744c331e5b590f64a0ce6dd100b204e0413b98d925733c99fda0be8ba2d5e8fb7e7fc2793a1f26b25030b58bdab61ee69bf3b68c59154c9582
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 code changes.
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
- - Make token optional and allow specifying headers at least for enabling authentication via 'X-API-KEY' header
22
- , because initially implemented in 0.1.0 bearer auth isn't working.
23
-
24
- - Fix Query `build_search_term` and `build_exclude_term` to be compatible with Ruby < 2.4, analyzing value for 'Fixnum
25
- ' class.
26
-
27
- - Fix the gem's name in gemspec to 'fulfil-io', as registered at RubyGems.
28
-
29
- - Remove Rake version constraint from gemspec.
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:, id:, endpoint: nil, body: {})
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
- "https://#{@subdomain}.fulfil.io/api/v2/model"
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, endpoint:, **args)
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
- raise StandardError, 'Not authorized'
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 Error, 'Unhandled HTTP error encountered'
143
+ raise UnknownHTTPError, 'Unhandled HTTP error encountered'
116
144
  rescue HTTP::ConnectionError => e
117
145
  puts "Couldn't connect"
118
- raise Error, "Can't connect to #{base_url}"
119
- rescue HTTP::ResponseError => ex
120
- raise Error, "Can't process response: #{ex}"
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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Fulfil
4
- VERSION = '0.4.2'
4
+ VERSION = '0.4.7'
5
5
  end
data/lib/fulfil.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  require 'fulfil/version'
2
2
  require 'fulfil/client'
3
3
  require 'fulfil/model'
4
+ require 'fulfil/interactive_report'
4
5
  require 'fulfil/response_parser'
5
6
 
6
7
  module Fulfil
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.2
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: 2020-11-29 00:00:00.000000000 Z
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: '0'
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: '0'
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.0.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