lucid_shopify-resource 0.2.1
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 +7 -0
- data/README.md +53 -0
- data/lib/lucid_shopify/resource/create.rb +12 -0
- data/lib/lucid_shopify/resource/delete.rb +12 -0
- data/lib/lucid_shopify/resource/read.rb +172 -0
- data/lib/lucid_shopify/resource/update.rb +12 -0
- data/lib/lucid_shopify/resource/version.rb +7 -0
- data/lib/lucid_shopify/resource.rb +10 -0
- data/lib/lucid_shopify-resource.rb +5 -0
- metadata +93 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: c9eb6d5850cf40e62ec8ac2e639a615bda3548f15b85af2a8d2ef909f732dc94
|
4
|
+
data.tar.gz: afb34a04d86b048528ca6bce9b3d074ef4d9de2cfb03b1ae9401be432d864154
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 0cc9447831828cff0ebde7b974244bc51eb1df033f831776695dbda99c330d3b69464357600b645cb31e4a637f2976ce1667f6cceaf779ef11e657f2bfbf7277
|
7
|
+
data.tar.gz: 21cf824bd293dea5f681da5387fd77605cff3704ef23aa28f7d72b79dbff7cb30171f0350e76917a6c7724e0581e3418898ab293dc7e365918eca4aa65e3b194
|
data/README.md
ADDED
@@ -0,0 +1,53 @@
|
|
1
|
+
lucid_shopify-resource
|
2
|
+
======================
|
3
|
+
|
4
|
+
Installation
|
5
|
+
------------
|
6
|
+
|
7
|
+
Add the following lines to your ‘Gemfile’:
|
8
|
+
|
9
|
+
git_source :lucid { |r| "https://github.com/lucidnz/gem-lucid_#{r}.git" }
|
10
|
+
|
11
|
+
gem 'lucid_shopify-resource', lucid: 'shopify-resource'
|
12
|
+
|
13
|
+
|
14
|
+
Usage
|
15
|
+
-----
|
16
|
+
|
17
|
+
### Create a resource
|
18
|
+
|
19
|
+
_TODO: Implement when needed._
|
20
|
+
|
21
|
+
|
22
|
+
### Delete a resource
|
23
|
+
|
24
|
+
_TODO: Implement when needed._
|
25
|
+
|
26
|
+
|
27
|
+
### Read a resource
|
28
|
+
|
29
|
+
Subclass and configure `Read`:
|
30
|
+
|
31
|
+
class Orders < LucidShopify::Resource::Read
|
32
|
+
resource :orders
|
33
|
+
|
34
|
+
default_options fields: %w(id tags), limit: 250
|
35
|
+
end
|
36
|
+
|
37
|
+
orders = Orders.new
|
38
|
+
|
39
|
+
orders.find(request_credentials, id)
|
40
|
+
|
41
|
+
The `Orders` class is enumerable. Each page is fetched from the API as needed,
|
42
|
+
rather than all at once:
|
43
|
+
|
44
|
+
orders = Orders.new
|
45
|
+
|
46
|
+
orders.each(request_credentials) |order|
|
47
|
+
# ...
|
48
|
+
end
|
49
|
+
|
50
|
+
|
51
|
+
### Update a resource
|
52
|
+
|
53
|
+
_TODO: Implement when needed._
|
@@ -0,0 +1,172 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module LucidShopify
|
4
|
+
module Resource
|
5
|
+
#
|
6
|
+
# @abstract
|
7
|
+
#
|
8
|
+
# @example
|
9
|
+
# class Orders < LucidShopify::Resource::Read
|
10
|
+
# resource :orders
|
11
|
+
#
|
12
|
+
# default_params fields: %w(id tags)
|
13
|
+
# end
|
14
|
+
#
|
15
|
+
class Read
|
16
|
+
include Enumerable
|
17
|
+
include LucidShopify
|
18
|
+
|
19
|
+
#
|
20
|
+
# @param client [LucidShopify::Client]
|
21
|
+
#
|
22
|
+
def initialize(client: Client.new(send_request: SendThrottledRequest.new))
|
23
|
+
@client = client
|
24
|
+
end
|
25
|
+
|
26
|
+
# @return [LucidShopify::Client]
|
27
|
+
attr_reader :client
|
28
|
+
|
29
|
+
#
|
30
|
+
# Set the remote API resource name for the subclass.
|
31
|
+
#
|
32
|
+
# @param resource_name [String, #to_s]
|
33
|
+
#
|
34
|
+
# @example
|
35
|
+
# resource :orders
|
36
|
+
#
|
37
|
+
def self.resource(resource_name)
|
38
|
+
define_method(:resource) { resource_name.to_s }
|
39
|
+
end
|
40
|
+
|
41
|
+
#
|
42
|
+
# @abstract
|
43
|
+
#
|
44
|
+
# @return [String]
|
45
|
+
#
|
46
|
+
def resource
|
47
|
+
raise NotImplementedError
|
48
|
+
end
|
49
|
+
|
50
|
+
#
|
51
|
+
# Set the default query params. Note that 'fields' may be passed as an
|
52
|
+
# array of strings.
|
53
|
+
#
|
54
|
+
# @param params [Hash]
|
55
|
+
#
|
56
|
+
# @example
|
57
|
+
# default_params fields: %w(id tags)
|
58
|
+
#
|
59
|
+
def self.default_params(params)
|
60
|
+
define_method(:default_params) { params }
|
61
|
+
end
|
62
|
+
|
63
|
+
#
|
64
|
+
# @abstract
|
65
|
+
#
|
66
|
+
# @return [Hash]
|
67
|
+
#
|
68
|
+
def default_params
|
69
|
+
{}
|
70
|
+
end
|
71
|
+
|
72
|
+
#
|
73
|
+
# Defaults set by Shopify when not specified.
|
74
|
+
#
|
75
|
+
# @return [Hash]
|
76
|
+
#
|
77
|
+
def default_shopify_params
|
78
|
+
{
|
79
|
+
limit: 50,
|
80
|
+
}
|
81
|
+
end
|
82
|
+
|
83
|
+
#
|
84
|
+
# @param credentials [LucidShopify::RequestCredentials]
|
85
|
+
# @param id [Integer]
|
86
|
+
# @param params [Hash]
|
87
|
+
#
|
88
|
+
# @return [Hash]
|
89
|
+
#
|
90
|
+
def find(credentials, id, params = {})
|
91
|
+
params = finalized_params(params)
|
92
|
+
|
93
|
+
client.get(credentials, "#{resource}/#{id}", params)[resource]
|
94
|
+
end
|
95
|
+
|
96
|
+
#
|
97
|
+
# Iterate over results. If set, the 'fields' option must include 'id'. We
|
98
|
+
# would not need this if we used offset pagination, but offset pagination
|
99
|
+
# is unreliable.
|
100
|
+
#
|
101
|
+
# Throttling is always enabled.
|
102
|
+
#
|
103
|
+
# @param credentials [LucidShopify::RequestCredentials]
|
104
|
+
# @param params [Hash]
|
105
|
+
#
|
106
|
+
# @yield [Hash]
|
107
|
+
#
|
108
|
+
# @return [Enumerator]
|
109
|
+
#
|
110
|
+
# @raise [ArgumentError] if 'fields' does not include 'id'
|
111
|
+
#
|
112
|
+
def each(credentials, params = {})
|
113
|
+
return to_enum(__callee__) unless block_given?
|
114
|
+
|
115
|
+
assert_fields_id!(params = finalized_params(params))
|
116
|
+
|
117
|
+
since_id = 1
|
118
|
+
|
119
|
+
loop do
|
120
|
+
results = client.get(credentials, resource, params.merge(since_id: since_id))
|
121
|
+
results.each do |result|
|
122
|
+
yield result
|
123
|
+
end
|
124
|
+
|
125
|
+
break if results.empty?
|
126
|
+
|
127
|
+
since_id = results.last['id']
|
128
|
+
end
|
129
|
+
end
|
130
|
+
|
131
|
+
#
|
132
|
+
# @param params [Hash] the finalized params (see {#finalize_params})
|
133
|
+
#
|
134
|
+
private def assert_fields_id!(params)
|
135
|
+
return unless params['fields']
|
136
|
+
return unless params['fields'] !~ /\bid\b/
|
137
|
+
|
138
|
+
raise ArgumentError, 'attempt to paginate without id field'
|
139
|
+
end
|
140
|
+
|
141
|
+
#
|
142
|
+
# @param client [LucidShopify::AuthorizedClient]
|
143
|
+
# @param params [Hash]
|
144
|
+
#
|
145
|
+
# @return [Integer]
|
146
|
+
#
|
147
|
+
def count(client, params = {})
|
148
|
+
params = finalize_params(params)
|
149
|
+
|
150
|
+
client.get("#{resource}/count", params)['count']
|
151
|
+
end
|
152
|
+
|
153
|
+
#
|
154
|
+
# Merge with default params and format for query string.
|
155
|
+
#
|
156
|
+
# @param params [Hash]
|
157
|
+
#
|
158
|
+
# @return [Hash]
|
159
|
+
#
|
160
|
+
private def finalize_params(params)
|
161
|
+
params = default_shopify_params.merge(default_params).merge(params)
|
162
|
+
params.each_with_object({}) do |(k, v), h|
|
163
|
+
k = k.to_s
|
164
|
+
|
165
|
+
k == 'fields' && v.is_a?(Array) ? v.join(',') : v
|
166
|
+
|
167
|
+
h[k] = v
|
168
|
+
end
|
169
|
+
end
|
170
|
+
end
|
171
|
+
end
|
172
|
+
end
|
metadata
ADDED
@@ -0,0 +1,93 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: lucid_shopify-resource
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.2.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Kelsey Judson
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2018-03-02 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rspec
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '3.6'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '3.6'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rubocop
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - '='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 0.52.0
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - '='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 0.52.0
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: lucid_shopify
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0.5'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0.5'
|
55
|
+
description:
|
56
|
+
email: kelsey@lucid.nz
|
57
|
+
executables: []
|
58
|
+
extensions: []
|
59
|
+
extra_rdoc_files: []
|
60
|
+
files:
|
61
|
+
- README.md
|
62
|
+
- lib/lucid_shopify-resource.rb
|
63
|
+
- lib/lucid_shopify/resource.rb
|
64
|
+
- lib/lucid_shopify/resource/create.rb
|
65
|
+
- lib/lucid_shopify/resource/delete.rb
|
66
|
+
- lib/lucid_shopify/resource/read.rb
|
67
|
+
- lib/lucid_shopify/resource/update.rb
|
68
|
+
- lib/lucid_shopify/resource/version.rb
|
69
|
+
homepage: https://github.com/lucidnz/gem-lucid_shopify-resource
|
70
|
+
licenses:
|
71
|
+
- ISC
|
72
|
+
metadata: {}
|
73
|
+
post_install_message:
|
74
|
+
rdoc_options: []
|
75
|
+
require_paths:
|
76
|
+
- lib
|
77
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
78
|
+
requirements:
|
79
|
+
- - ">="
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
version: '0'
|
82
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
83
|
+
requirements:
|
84
|
+
- - ">="
|
85
|
+
- !ruby/object:Gem::Version
|
86
|
+
version: '0'
|
87
|
+
requirements: []
|
88
|
+
rubyforge_project:
|
89
|
+
rubygems_version: 2.7.3
|
90
|
+
signing_key:
|
91
|
+
specification_version: 4
|
92
|
+
summary: Shopify client library resource helpers
|
93
|
+
test_files: []
|