fulfil-io 0.4.1 → 0.4.5

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: c4ad2709b85c238ad07608d510455eb6af65bbfb2b7bf1fe7a43bd42ec3327e8
4
- data.tar.gz: 76d7e6189a7cc118eab1a3d4db1d10f7450a2ac96df50be1334abec7b877da7e
3
+ metadata.gz: 520488638d7340fb0278fc798770d821f87f0a7427765118c418f2db16877af1
4
+ data.tar.gz: 7c1dfb2aac58524eef56a7d38729ffd01f3350ff3413bd7e0b6fa8bf6ab37411
5
5
  SHA512:
6
- metadata.gz: 0b25ab906e005e6655a66db79f52a0edd4404a06a7a1ff1c90fea03eeb1e00e18c0e8a823e11ce45a2cf8a65ceb7c356882649d1cc3a586bc429eaedc1ec42f7
7
- data.tar.gz: e7e965321b2e3aba9abd61add0c22dab1e81cc3ea3809f23ca164dcc46930ade6083bf3de243a23d53fae90b8bf08849041af40a808d41f1c27f1f750b575b32
6
+ metadata.gz: 035bc157721ab0b620cf30b99afdaf3825a2f8732e289a7b9e2b309bc99d25ec81cd3f1612ce88df4dcdb98a05a56fff295e8461f7a525e741e5d3200be8c9b6
7
+ data.tar.gz: 0bb63dba2c5ee6d608d7b4d5b22895538ea288dde9423fac5bf133c37b24bb3a00b68dd2329a1b1874d0293e755165d0ce033df72e319de3e7204d9461de151c
data/CHANGELOG.md CHANGED
@@ -1,6 +1,27 @@
1
+ ## 0.4.5
2
+
3
+ * Add #delete to client.
4
+ * Set up Dependabot on GitHub.
5
+
6
+ ## 0.4.4
7
+
8
+ * Pin http dependency to ~> 4.4.0. 5.0+ introduces a frozen string error.
9
+
10
+ ## 0.4.3
11
+
12
+ * Add Client errors for more granular handling.
13
+ * Send along info when a `NotAuthorizedError` is raised.
14
+
15
+ ## 0.4.2
16
+
17
+ * Raise an `UnhandledTypeError` and reveal the offender.
18
+ * Convert timedelta data types to Decimals.
19
+ * Don't use `.present?` to check if response is a Hash.
20
+
1
21
  ## 0.4.1
2
22
 
3
- * @cdmwebs screwed up the release process, so this is a tiny bump to fix. No code changes.
23
+ * @cdmwebs screwed up the release process, so this is a tiny bump to fix. No
24
+ code changes.
4
25
 
5
26
  ## 0.4.0
6
27
 
@@ -12,18 +33,16 @@
12
33
 
13
34
  ## 0.2.0
14
35
 
15
- - Make token optional and allow specifying headers at least for enabling authentication via 'X-API-KEY' header
16
- , because initially implemented in 0.1.0 bearer auth isn't working.
17
-
18
- - Fix Query `build_search_term` and `build_exclude_term` to be compatible with Ruby < 2.4, analyzing value for 'Fixnum
19
- ' class.
20
-
21
- - Fix the gem's name in gemspec to 'fulfil-io', as registered at RubyGems.
22
-
23
- - Remove Rake version constraint from gemspec.
24
-
25
- - Add Gemfile.lock to .gitignore and remove it from git-tree - it shouldn't be stored in git for a gem.
36
+ * Make token optional and allow specifying headers at least for enabling
37
+ authentication via 'X-API-KEY' header , because initially implemented in
38
+ 0.1.0 bearer auth isn't working.
39
+ * Fix Query `build_search_term` and `build_exclude_term` to be compatible with
40
+ Ruby < 2.4, analyzing value for 'Fixnum ' class.
41
+ * Fix the gem's name in gemspec to 'fulfil-io', as registered at RubyGems.
42
+ * Remove Rake version constraint from gemspec.
43
+ * Add Gemfile.lock to .gitignore and remove it from git-tree - it shouldn't be
44
+ stored in git for a gem.
26
45
 
27
46
  ## 0.1.0
28
47
 
29
- * Initial gem release
48
+ * Initial gem release.
data/lib/fulfil/client.rb CHANGED
@@ -10,6 +10,11 @@ module Fulfil
10
10
  OAUTH_TOKEN = ENV['FULFIL_TOKEN']
11
11
 
12
12
  class Client
13
+ class NotAuthorizedError < StandardError; end
14
+ class UnknownHTTPError < StandardError; end
15
+ class ConnectionError < StandardError; end
16
+ class ResponseError < StandardError; end
17
+
13
18
  def initialize(subdomain: SUBDOMAIN, token: OAUTH_TOKEN, headers: { 'X-API-KEY' => API_KEY }, debug: false)
14
19
  @subdomain = subdomain
15
20
  @token = token
@@ -73,10 +78,17 @@ module Fulfil
73
78
  parse(result: result)
74
79
  end
75
80
 
81
+ def delete(model:, id:)
82
+ uri = URI(model_url(model: model, id: id))
83
+
84
+ result = request(verb: :delete, endpoint: uri)
85
+ parse(result: result)
86
+ end
87
+
76
88
  private
77
89
 
78
90
  def parse(result: nil, results: [])
79
- if result.present?
91
+ if result
80
92
  parse_single(result: result)
81
93
  else
82
94
  parse_multiple(results: results)
@@ -104,20 +116,23 @@ module Fulfil
104
116
 
105
117
  if response.status.ok? || response.status.created?
106
118
  response.parse
119
+ elsif response.code == 204
120
+ []
107
121
  elsif response.code == 401
108
- raise StandardError, 'Not authorized'
122
+ error = response.parse
123
+ raise NotAuthorizedError, "Not authorized: #{error['error']}: #{error['error_description']}"
109
124
  else
110
125
  puts response.body.to_s
111
126
  raise Error, 'Error encountered while processing response:'
112
127
  end
113
128
  rescue HTTP::Error => e
114
129
  puts e
115
- raise Error, 'Unhandled HTTP error encountered'
130
+ raise UnknownHTTPError, 'Unhandled HTTP error encountered'
116
131
  rescue HTTP::ConnectionError => e
117
132
  puts "Couldn't connect"
118
- raise Error, "Can't connect to #{base_url}"
133
+ raise ConnectionError, "Can't connect to #{base_url}"
119
134
  rescue HTTP::ResponseError => ex
120
- raise Error, "Can't process response: #{ex}"
135
+ raise ResponseError, "Can't process response: #{ex}"
121
136
  []
122
137
  end
123
138
 
@@ -1,5 +1,14 @@
1
1
  module Fulfil
2
2
  module ResponseParser
3
+ class UnhandledTypeError < StandardError
4
+ attr_reader :value
5
+
6
+ def initialize(msg, value)
7
+ @value = value
8
+ super(msg)
9
+ end
10
+ end
11
+
3
12
  # Handle value objects, for example:
4
13
  #
5
14
  # "order_date": {
@@ -19,10 +28,13 @@ module Fulfil
19
28
  when 'datetime'
20
29
  time = value.dig('iso_string')
21
30
  DateTime.parse(time)
22
- when 'Decimal'
31
+ when 'Decimal', 'timedelta'
23
32
  value.dig('decimal').to_f
24
33
  else
25
- raise UnhandledTypeError, value
34
+ raise UnhandledTypeError.new(
35
+ "received a value that we don't know how to handle: #{json_class}",
36
+ json_class
37
+ )
26
38
  end
27
39
  end
28
40
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Fulfil
4
- VERSION = '0.4.1'
4
+ VERSION = '0.4.5'
5
5
  end
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.1
4
+ version: 0.4.5
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
@@ -134,7 +134,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
134
134
  - !ruby/object:Gem::Version
135
135
  version: '0'
136
136
  requirements: []
137
- rubygems_version: 3.0.3
137
+ rubygems_version: 3.1.6
138
138
  signing_key:
139
139
  specification_version: 4
140
140
  summary: Interact with the Fulfil.io API