lucid_shopify 0.28.1 → 0.31.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: bc9f09b59b1297f36b850794a77f5602080821f6cd8529c975f2a82da0bb4998
4
- data.tar.gz: feb36398f8fb6535de819260a10c484c28c645a648e4d3d615cd3f4275cbe05f
3
+ metadata.gz: a99dcbd8e551ee898a53837cd9a91bb62bac7223038eac70109ddd3424b249c8
4
+ data.tar.gz: 10aad4e20e50af8facb41cd9d624e8867d1ef2d1707067566d9fb4ca3a2b72c8
5
5
  SHA512:
6
- metadata.gz: 1792732667c7bd22629876a50cdcec207bf38d239190001e51eea4b905eca9109c4c631e10c51718ecbb638caa49743c5051c7b7562a1a2199fa1001b014400f
7
- data.tar.gz: 1d89d70db5b8ce7c94915d4adac81230468114b97b4f6014bd595ddcb7581d8edd0c189e3ee0fb45253917639439096bc055e491c4c88ea78e30c9a81611b8df
6
+ metadata.gz: d0f44d70b758e58aec0cb6798d424c0f67a3e614f1f160b86e5f27e0bf5cf590243745e491ef4a1b6e9f8ae7c1364c1ab05028239fe7aeef51e7455e160d0386
7
+ data.tar.gz: 6ea021837da9b31acf7063bf7c43b932145e2dc79db06d0291900d85ef287dfd5f18a45ca0772794a57d249ec54153ee3ebe4236bb806dc6b253abc9c492e42d
data/README.md CHANGED
@@ -14,20 +14,28 @@ Usage
14
14
 
15
15
  ### Configure the default API client
16
16
 
17
- LucidShopify.config = LucidShopify::Config.new(
18
- '...', # api_version, e.g. '2019-04'
19
- '...', # api_key
20
- '...', # shared_secret
21
- '...', # scope
22
- '...', # callback_uri (for OAuth; unused by this gem)
23
- '...', # billing_callback_uri
24
- '...', # webhook_uri
17
+ LucidShopify.configure(
18
+ api_key: '...',
19
+ api_version: '...', # e.g. '2019-07'
20
+ billing_callback_uri: '...',
21
+ callback_uri: '...', # (for OAuth; unused by this gem)
22
+ logger: Logger.new(STDOUT),
23
+ scope: '...',
24
+ shared_secret: '...',
25
+ webhook_uri: '...',
25
26
  )
26
27
 
27
- For private apps, where these credentials may not be not necessary,
28
- the default unconfigured behaviour is equivalent to:
28
+ Alternatively load the configuration from a Ruby file. The Ruby
29
+ file is evaluated and should return a hash.
29
30
 
30
- LucidShopify.config = LucidShopify::Config::PRIVATE_APP
31
+ LucidShopify.configure_from_file('config/shopify.rb') # the default path
32
+
33
+ When loading from a file, any environment variables matching the
34
+ upcased key with the prefix ‘SHOPIFY_’ will override values in the
35
+ file. For example ‘SHOPIFY_SHARED_SECRET=...’.
36
+
37
+ All keys are optional and in some private apps, you may not require
38
+ any configuration at all.
31
39
 
32
40
  Additionally, each API request requires authorisation:
33
41
 
@@ -134,7 +142,9 @@ charge:
134
142
 
135
143
  Request logging is disabled by default. To enable it:
136
144
 
137
- LucidShopify.config.logger = Logger.new(STDOUT)
145
+ LucidShopify.configure(
146
+ logger: Logger.new(STDOUT),
147
+ )
138
148
 
139
149
 
140
150
  ### Make throttled API requests
@@ -1,78 +1,55 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'forwardable'
4
3
  require 'logger'
5
4
 
6
5
  require 'lucid_shopify'
6
+ require 'lucid_utils'
7
7
 
8
8
  module LucidShopify
9
- NotConfiguredError = Class.new(Error)
10
-
11
9
  class << self
12
- extend Forwardable
13
-
14
- def_delegators(
15
- :config,
16
- :api_version,
17
- :api_key,
18
- :shared_secret,
19
- :scope,
20
- :billing_callback_uri,
21
- :webhook_uri,
22
- :logger
23
- )
24
-
25
- # @param config [Config]
26
- attr_writer :config
27
-
28
10
  #
29
- # @return [Config]
11
+ # @param options [Hash]
30
12
  #
31
- # @raise [NotConfiguredError] if credentials are unset
13
+ # @return [Config]
32
14
  #
33
- def config
34
- raise NotConfiguredError unless @config
35
-
36
- @config
15
+ def configure(options = {})
16
+ @config = Config.new(
17
+ **@config.to_h.compact,
18
+ **options,
19
+ )
37
20
  end
38
- end
39
-
40
- class Config
41
- extend Dry::Initializer
42
-
43
- # @return [String]
44
- param :api_version
45
- # @return [String]
46
- param :api_key
47
- # @return [String]
48
- param :shared_secret
49
- # @return [String]
50
- param :scope
51
- # @return [String]
52
- param :callback_uri
53
- # @return [String]
54
- param :billing_callback_uri
55
- # @return [String]
56
- param :webhook_uri
57
21
 
58
22
  #
59
- # @return [Logger]
23
+ # @param path [String]
60
24
  #
61
- def logger
62
- @logger ||= Logger.new(File::NULL)
25
+ # @return [Config]
26
+ #
27
+ def configure_from_file(path = 'config/shopify.rb')
28
+ options = LucidUtils::ConfigFromFile.new.(path, env_prefix: 'shopify')
29
+
30
+ configure(options)
63
31
  end
64
32
 
65
33
  #
66
- # @param new_logger [Logger]
34
+ # @return [Config]
67
35
  #
68
- def logger=(new_logger)
69
- raise ArgumentError, 'not a Logger' unless new_logger.is_a?(Logger)
70
-
71
- @logger = new_logger
36
+ def config
37
+ @config ||= configure
72
38
  end
39
+ end
73
40
 
74
- PRIVATE_APP = new(ENV.fetch('SHOPIFY_API_VERSION', '2019-04'), '', '', '', '', '', '') # 2019-04 was the first versioned API
41
+ class Config < Dry::Struct
42
+ attribute :api_version, Types::String.default('2019-07')
43
+ attribute :logger, Types::Logger.default(Logger.new(File::NULL).freeze)
44
+
45
+ # The following attributes may be unnecessary in some private apps.
46
+ attribute? :api_key, Types::String
47
+ attribute? :billing_callback_uri, Types::String
48
+ attribute? :callback_uri, Types::String
49
+ attribute? :scope, Types::String
50
+ attribute? :shared_secret, Types::String
51
+ attribute? :webhook_uri, Types::String
75
52
  end
76
53
 
77
- self.config = Config::PRIVATE_APP
54
+ self.configure
78
55
  end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ module LucidShopify
4
+ module Types
5
+ include Dry.Types(default: :strict)
6
+
7
+ Logger = Instance(Logger)
8
+ end
9
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module LucidShopify
4
- VERSION = '0.28.1'
4
+ VERSION = '0.31.0'
5
5
  end
data/lib/lucid_shopify.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'dry/initializer'
4
+ require 'dry/struct'
4
5
 
5
6
  begin
6
7
  require 'redis'
@@ -29,6 +30,7 @@ module LucidShopify
29
30
  autoload :Result, 'lucid_shopify/result'
30
31
  autoload :SendRequest, 'lucid_shopify/send_request'
31
32
  autoload :ThrottledStrategy, 'lucid_shopify/throttled_strategy'
33
+ autoload :Types, 'lucid_shopify/types'
32
34
  autoload :VerifyCallback, 'lucid_shopify/verify_callback'
33
35
  autoload :VerifyWebhook, 'lucid_shopify/verify_webhook'
34
36
  autoload :VERSION, 'lucid_shopify/version'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lucid_shopify
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.28.1
4
+ version: 0.31.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kelsey Judson
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-08-11 00:00:00.000000000 Z
11
+ date: 2019-08-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: dotenv
@@ -94,6 +94,20 @@ dependencies:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
96
  version: '3.0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: dry-struct
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '1.0'
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '1.0'
97
111
  - !ruby/object:Gem::Dependency
98
112
  name: http
99
113
  requirement: !ruby/object:Gem::Requirement
@@ -108,6 +122,20 @@ dependencies:
108
122
  - - "~>"
109
123
  - !ruby/object:Gem::Version
110
124
  version: '4.1'
125
+ - !ruby/object:Gem::Dependency
126
+ name: lucid_utils
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: '0.0'
132
+ type: :runtime
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "~>"
137
+ - !ruby/object:Gem::Version
138
+ version: '0.0'
111
139
  description:
112
140
  email: kelsey@lucid.nz
113
141
  executables: []
@@ -137,6 +165,7 @@ files:
137
165
  - lib/lucid_shopify/response.rb
138
166
  - lib/lucid_shopify/send_request.rb
139
167
  - lib/lucid_shopify/throttled_strategy.rb
168
+ - lib/lucid_shopify/types.rb
140
169
  - lib/lucid_shopify/verify_callback.rb
141
170
  - lib/lucid_shopify/verify_webhook.rb
142
171
  - lib/lucid_shopify/version.rb