fulfil-io 0.2.0 → 0.3.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d19d908e32866d5bb5f96696cc90f59724e7654374c34d49f49e376a117d9c29
4
- data.tar.gz: ba380e30001c2409f404a36ea6335a8762ec993b45b431c08c5b5d703172e550
3
+ metadata.gz: 22ec67bfb2b90dbcdb4eef09efa189b25f11aada22ff2fa66d115b1c9cb26e06
4
+ data.tar.gz: 48675559980e3ae07eb4a10938cfec33df858c82126faf2152a7a6c069cf3a79
5
5
  SHA512:
6
- metadata.gz: 7d60b09fcfb88fcf29e160d1c6acef304ce57134dff910f881166ddb5dac88c83a697e65132ca59778ec47695f5f346269154ac76b120d201781221128bf47a8
7
- data.tar.gz: 7db725e451c38016cd63fda0ccbe46b9e1257236f660c021f3f649c9ca4dad3a80fe652143e526e79f29e0ea6f60453d9e50f43883292490653a64d4d8661760
6
+ metadata.gz: c1ac80544c088e239f250f937c5b5f20c95ac818bbe394f3e55b4c32d9800301f534bb3a922885c55ba870bb10f5448612a0cc181c6cbef9e4cd91dfa035d4c7
7
+ data.tar.gz: fbfb4ba1116956cdf9d3d2f2234fe53067ad31b9ffb87c36b62d01e1c3e1c31c84d7abfcbe29222b3aca58e097017bfd303f3903c1fc553d932ac55c44d64c1c
@@ -1,3 +1,7 @@
1
+ ## 0.3.0
2
+
3
+ * Add basic write support via `Fulfil::Client#post` and `Fulfil::Client#put`.
4
+
1
5
  ## 0.2.0
2
6
 
3
7
  - Make token optional and allow specifying headers at least for enabling authentication via 'X-API-KEY' header
data/README.md CHANGED
@@ -28,9 +28,9 @@ Environment variables:
28
28
  - FULFIL_TOKEN - required for oauth bearer authentication
29
29
  - FULFIL_API_KEY - required for authentication via the X-API-KEY request header
30
30
 
31
- ###Note:
32
-
33
- When FULFIL_TOKEN is present, the FULFIL_API_KEY will be ignored. So, if oauth doesn't work, returning an Unauthorized error, to use the FULFIL_API_KEY, the FULFIL_TOKEN shouldn't be specified.
31
+ **Note:** When FULFIL_TOKEN is present, the FULFIL_API_KEY will be ignored. So,
32
+ if oauth doesn't work, returning an Unauthorized error, to use the
33
+ FULFIL_API_KEY, the FULFIL_TOKEN shouldn't be specified.
34
34
 
35
35
  ```ruby
36
36
  require 'fulfil' # this is necessary only in case of running without bundler
@@ -68,6 +68,38 @@ pp sales
68
68
  # "rec_name"=>""}]
69
69
  ```
70
70
 
71
+ ### Writing
72
+
73
+ As of v0.3.0, we've added very basic support for creates and updates via
74
+ `Fulfil::Client#post` and `Fulfil::Client#put`.
75
+
76
+ *Create Example*
77
+
78
+ ```ruby
79
+ fulfil = Fulfil::Client.new
80
+
81
+ sale_model = Fulfil::Model.new(client: fulfil, model_name: 'sale.sale')
82
+
83
+ sale = {
84
+ # Full Sale attributes here
85
+ }
86
+
87
+ fulfil.post(model: sale_model, body: sale)
88
+ ```
89
+
90
+ *Update Example*
91
+
92
+ ```ruby
93
+ fulfil = Fulfil::Client.new
94
+
95
+ sale_model = Fulfil::Model.new(client: fulfil, model_name: 'sale.sale')
96
+ sale = sale_model.find(id: 1234)
97
+
98
+ sale['channel'] = 4
99
+
100
+ fulfil.put(model: sale_model, body: sale)
101
+ ```
102
+
71
103
  ## Development
72
104
 
73
105
  After checking out the repo, run `bin/setup` to install dependencies. Then, run
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'http'
2
4
  require 'logger'
3
5
  require 'fulfil/response_parser'
@@ -50,9 +52,35 @@ module Fulfil
50
52
  parse(results: results)
51
53
  end
52
54
 
55
+ def post(model:, body: {})
56
+ uri = URI(model_url(model: model))
57
+
58
+ results = request(verb: :post, endpoint: uri, json: body)
59
+ parse(results: results)
60
+ end
61
+
62
+ def put(model:, id:, endpoint: nil, body: {})
63
+ uri = URI(model_url(model: model, id: id, endpoint: endpoint))
64
+
65
+ result = request(verb: :put, endpoint: uri, json: body)
66
+ parse(result: result)
67
+ end
68
+
53
69
  private
54
70
 
55
71
  def parse(result: nil, results: [])
72
+ if result.present?
73
+ parse_single(result: result)
74
+ else
75
+ parse_multiple(results: results)
76
+ end
77
+ end
78
+
79
+ def parse_single(result:)
80
+ Fulfil::ResponseParser.parse(item: result)
81
+ end
82
+
83
+ def parse_multiple(results:)
56
84
  results.map { |result| Fulfil::ResponseParser.parse(item: result) }
57
85
  end
58
86
 
@@ -60,26 +88,30 @@ module Fulfil
60
88
  "https://#{@subdomain}.fulfil.io/api/v2/model"
61
89
  end
62
90
 
63
- def model_url(model:)
64
- [base_url, model].join('/')
91
+ def model_url(model:, id: nil, endpoint: nil)
92
+ [base_url, model, id, endpoint].compact.join('/')
65
93
  end
66
94
 
67
95
  def request(verb: :get, endpoint:, **args)
68
96
  response = client.request(verb, endpoint, args)
69
97
 
70
- if response.status.ok?
98
+ if response.status.ok? || response.status.created?
71
99
  response.parse
72
100
  elsif response.code == 401
73
- raise StandardError, "Not authorized"
101
+ raise StandardError, 'Not authorized'
74
102
  else
75
- pp response.parse
76
- raise StandardError, "Invalid response"
103
+ puts response.body.to_s
104
+ raise Error, 'Error encountered while processing response:'
77
105
  end
78
- rescue HTTP::ConnectionError => ex
106
+ rescue HTTP::Error => e
107
+ puts e
108
+ raise Error, 'Unhandled HTTP error encountered'
109
+ rescue HTTP::ConnectionError => e
79
110
  puts "Couldn't connect"
80
111
  raise Error, "Can't connect to #{base_url}"
81
112
  rescue HTTP::ResponseError => ex
82
113
  raise Error, "Can't process response: #{ex}"
114
+ []
83
115
  end
84
116
 
85
117
  def client
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Fulfil
4
- VERSION = '0.2.0'
4
+ VERSION = '0.3.0'
5
5
  end
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fulfil-io
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chris Moore
8
8
  - Kat Fairbanks
9
- autorequire:
9
+ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2020-09-10 00:00:00.000000000 Z
12
+ date: 2020-11-29 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: http
@@ -95,7 +95,7 @@ dependencies:
95
95
  - - ">="
96
96
  - !ruby/object:Gem::Version
97
97
  version: '0'
98
- description:
98
+ description:
99
99
  email:
100
100
  - chris@knowndecimal.com
101
101
  executables: []
@@ -119,7 +119,7 @@ homepage: https://github.com/knowndecimal/fulfil
119
119
  licenses:
120
120
  - MIT
121
121
  metadata: {}
122
- post_install_message:
122
+ post_install_message:
123
123
  rdoc_options: []
124
124
  require_paths:
125
125
  - lib
@@ -135,7 +135,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
135
135
  version: '0'
136
136
  requirements: []
137
137
  rubygems_version: 3.0.3
138
- signing_key:
138
+ signing_key:
139
139
  specification_version: 4
140
140
  summary: Interact with the Fulfil.io API
141
141
  test_files: []