fulfil-io 0.4.1 → 0.4.5

Sign up to get free protection for your applications and to get access to all the features.
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