e_plat 0.2.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.
Files changed (47) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.md +339 -0
  4. data/Rakefile +8 -0
  5. data/app/assets/config/e_plat_manifest.js +0 -0
  6. data/config/routes.rb +2 -0
  7. data/lib/active_resource/schema.rb +59 -0
  8. data/lib/e_plat/client/default_request_args.rb +33 -0
  9. data/lib/e_plat/client/platform_convenience_methods.rb +21 -0
  10. data/lib/e_plat/client.rb +95 -0
  11. data/lib/e_plat/engine.rb +4 -0
  12. data/lib/e_plat/errors/incorrect_type_error.rb +8 -0
  13. data/lib/e_plat/errors/missing_migration_key_error.rb +9 -0
  14. data/lib/e_plat/errors/missing_session_error.rb +8 -0
  15. data/lib/e_plat/mapping/base.rb +49 -0
  16. data/lib/e_plat/mapping/bigcommerce/v_3/product/image.rb +55 -0
  17. data/lib/e_plat/mapping/bigcommerce/v_3/product/variant.rb +96 -0
  18. data/lib/e_plat/mapping/bigcommerce/v_3/product.rb +129 -0
  19. data/lib/e_plat/mapping/bigcommerce/v_3/shop.rb +103 -0
  20. data/lib/e_plat/mapping/shopify/v_2022_07/product/image.rb +32 -0
  21. data/lib/e_plat/mapping/shopify/v_2022_07/product/variant.rb +30 -0
  22. data/lib/e_plat/mapping/shopify/v_2022_07/product.rb +26 -0
  23. data/lib/e_plat/mapping/shopify/v_2022_07/shop.rb +26 -0
  24. data/lib/e_plat/mapping.rb +19 -0
  25. data/lib/e_plat/resource/attribute_interface.rb +60 -0
  26. data/lib/e_plat/resource/base.rb +145 -0
  27. data/lib/e_plat/resource/concerns/aliases.rb +100 -0
  28. data/lib/e_plat/resource/concerns/overwrite_instance_methods.rb +11 -0
  29. data/lib/e_plat/resource/concerns/overwrite_request_methods.rb +50 -0
  30. data/lib/e_plat/resource/order/customer.rb +37 -0
  31. data/lib/e_plat/resource/order/fulfillment.rb +27 -0
  32. data/lib/e_plat/resource/order/line_item.rb +37 -0
  33. data/lib/e_plat/resource/order/shipping_line.rb +24 -0
  34. data/lib/e_plat/resource/order.rb +103 -0
  35. data/lib/e_plat/resource/product/image.rb +25 -0
  36. data/lib/e_plat/resource/product/option.rb +16 -0
  37. data/lib/e_plat/resource/product/variant.rb +51 -0
  38. data/lib/e_plat/resource/product.rb +35 -0
  39. data/lib/e_plat/resource/shop.rb +79 -0
  40. data/lib/e_plat/session.rb +20 -0
  41. data/lib/e_plat/session_state.rb +25 -0
  42. data/lib/e_plat/type_coercer.rb +59 -0
  43. data/lib/e_plat/types.rb +15 -0
  44. data/lib/e_plat/version.rb +3 -0
  45. data/lib/e_plat.rb +29 -0
  46. data/lib/tasks/e_plat_tasks.rake +4 -0
  47. metadata +256 -0
@@ -0,0 +1,79 @@
1
+
2
+ module EPlat
3
+ class Shop < Base
4
+
5
+ schema do
6
+ integer :id
7
+ string :name
8
+ string :email
9
+ string :domain
10
+ string :province
11
+ string :country
12
+ string :address1
13
+ string :zip
14
+ string :city
15
+ string :source
16
+ string :phone
17
+ float :latitude
18
+ float :longitude
19
+ string :primary_locale
20
+ string :address2
21
+ datetime :created_at
22
+ datetime :updated_at
23
+ string :country_code
24
+ string :country_name
25
+ string :currency
26
+ string :customer_email
27
+ string :timezone
28
+ string :iana_timezone
29
+ string :shop_owner
30
+ string :money_format
31
+ string :money_with_currency_format
32
+ string :weight_unit
33
+ string :province_code
34
+ boolean :taxes_included
35
+ boolean :auto_configure_tax_inclusivity
36
+ boolean :tax_shipping
37
+ boolean :county_taxes
38
+ string :plan_display_name
39
+ string :plan_name
40
+ boolean :has_discounts
41
+ boolean :has_gift_cards
42
+ string :myshopify_domain
43
+ string :google_apps_domain
44
+ boolean :google_apps_login_enabled
45
+ string :money_in_emails_format
46
+ string :money_with_currency_in_emails_format
47
+ boolean :eligible_for_payments
48
+ boolean :requires_extra_payments_agreement
49
+ boolean :password_enabled
50
+ boolean :has_storefront
51
+ boolean :eligible_for_card_reader_giveaway
52
+ boolean :finances
53
+ integer :primary_location_id
54
+ string :cookie_consent_level
55
+ string :visitor_tracking_consent_preference
56
+ boolean :checkout_api_supported
57
+ boolean :multi_location_enabled
58
+ boolean :setup_required
59
+ boolean :pre_launch_enabled
60
+ array :enabled_presentment_currencies
61
+ boolean :transactional_sms_disabled
62
+ boolean :marketing_sms_consent_enabled_at_checkout
63
+ end
64
+
65
+ class << self
66
+
67
+ def element_path(id, prefix_options = {}, query_options = {})
68
+ "#{ e_plat_session.url_prefix }shop.json"
69
+ end
70
+
71
+
72
+ def current
73
+ find(1)
74
+ end
75
+
76
+ end
77
+
78
+ end
79
+ end
@@ -0,0 +1,20 @@
1
+
2
+ module EPlat
3
+ class Session
4
+ include Dry::Effects.State(:e_plat_session)
5
+ #the session is an instance of EPlat::Client made available via dry-effects
6
+ # e_plat_session is an instance of EPlat::Client
7
+
8
+
9
+ def initialize(platform:, store_url:, api_token:, store_hash: nil)
10
+ e_plat_session.platform = platform
11
+ e_plat_session.store_url = store_url
12
+ e_plat_session.api_token = api_token
13
+ e_plat_session.store_hash = store_hash
14
+
15
+ e_plat_session.send(:get_api_version) if e_plat_session.active?
16
+ end
17
+
18
+
19
+ end
20
+ end
@@ -0,0 +1,25 @@
1
+
2
+ module EPlat
3
+ module SessionState
4
+ extend ActiveSupport::Concern
5
+ include Dry::Effects::Handler.State(:e_plat_session)
6
+
7
+ included do
8
+ around_action :set_e_plat_session
9
+ end
10
+
11
+
12
+ private
13
+
14
+ def set_e_plat_session
15
+ with_e_plat_session(e_plat_session) { yield }
16
+ end
17
+
18
+ def e_plat_session
19
+ # create empty client.
20
+ # Will be populated later by EPlat::Session.new(..) if needed
21
+ EPlat::Client.new()
22
+ end
23
+
24
+ end
25
+ end
@@ -0,0 +1,59 @@
1
+
2
+ module EPlat
3
+ class TypeCoercer
4
+
5
+ attr_accessor :type_schema
6
+
7
+ def inspect
8
+ "#<#{self.class}>"
9
+ end
10
+
11
+ def initialize(type_schema)
12
+ @type_schema = type_schema
13
+ end
14
+
15
+ def type_value!(key, value)
16
+ type = type_schema[key]&.downcase
17
+
18
+ if type.nil?
19
+ return value
20
+ elsif value.nil?
21
+ return unless type == "array" or type == "hash"
22
+ end
23
+
24
+ case type
25
+ when "array"
26
+ safe_coerce(value, type)
27
+ when "hash"
28
+ safe_coerce(value, type)
29
+ when "string"
30
+ safe_coerce(value, type)
31
+ when "datetime"
32
+ safe_coerce(value, type)
33
+ when "boolean"
34
+ ActiveModel::Type::Boolean.new.cast(value)
35
+ else
36
+ "EPlat::Types::Coercible::#{ type.capitalize }".constantize[value]
37
+ end
38
+ end
39
+
40
+ def safe_coerce(value, type)
41
+ to_type_method =
42
+ case type
43
+ when "array"
44
+ "to_a"
45
+ when "hash"
46
+ "to_h"
47
+ when "string"
48
+ "to_s"
49
+ when "datetime"
50
+ "to_datetime"
51
+ end
52
+
53
+ value.send(to_type_method)
54
+ rescue
55
+ value
56
+ end
57
+
58
+ end
59
+ end
@@ -0,0 +1,15 @@
1
+
2
+ module EPlat
3
+ module Types
4
+ include Dry.Types()
5
+ end
6
+ end
7
+
8
+
9
+ # EPlat::Types::Coercible::String
10
+ # EPlat::Types::Coercible::Symbol
11
+ # EPlat::Types::Coercible::Integer
12
+ # EPlat::Types::Coercible::Float
13
+ # EPlat::Types::Coercible::Decimal
14
+ # EPlat::Types::Coercible::Array
15
+ # EPlat::Types::Coercible::Hash
@@ -0,0 +1,3 @@
1
+ module EPlat
2
+ VERSION = "0.2.0"
3
+ end
data/lib/e_plat.rb ADDED
@@ -0,0 +1,29 @@
1
+ require "e_plat/version"
2
+ require "e_plat/engine"
3
+ require "zeitwerk"
4
+
5
+ require "active_support"
6
+ require "activeresource"
7
+
8
+ require 'dry/effects'
9
+ require 'dry-types'
10
+ # require "e_plat/railtie" if defined?(Rails::Railtie)
11
+
12
+ Zeitwerk::Loader.for_gem(warn_on_extra_files: false)
13
+ loader = Zeitwerk::Loader.for_gem
14
+ loader.collapse("#{__dir__}/e_plat/resource") # So can call EPlat::Product
15
+ loader.collapse("#{__dir__}/e_plat/errors")
16
+ loader.setup # ready!
17
+
18
+
19
+
20
+ module EPlat
21
+ extend Dry::Configurable
22
+
23
+ setting(:shopify_api_version, default: "2022_07", constructor: ->(value) { value.underscore })
24
+ setting(:bigcommerce_api_version, default: "v3", constructor: ->(value) { value.downcase.gsub("v", "") })
25
+ setting(:woocommerce_api_version, default: "v3", constructor: ->(value) { value.downcase.gsub("v", "") })
26
+
27
+
28
+ class Error < StandardError; end
29
+ end
@@ -0,0 +1,4 @@
1
+ # desc "Explaining what the task does"
2
+ # task :e_plat do
3
+ # # Task goes here
4
+ # end
metadata ADDED
@@ -0,0 +1,256 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: e_plat
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.2.0
5
+ platform: ruby
6
+ authors:
7
+ - oliwoodsuk
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2023-05-18 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rails
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: 7.0.4
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: 7.0.4
41
+ - !ruby/object:Gem::Dependency
42
+ name: zeitwerk
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rake
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: activeresource
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: dry-configurable
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: dry-logic
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - '='
102
+ - !ruby/object:Gem::Version
103
+ version: '1.5'
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - '='
109
+ - !ruby/object:Gem::Version
110
+ version: '1.5'
111
+ - !ruby/object:Gem::Dependency
112
+ name: dry-types
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: dry-effects
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - '='
130
+ - !ruby/object:Gem::Version
131
+ version: '0.4'
132
+ type: :runtime
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - '='
137
+ - !ruby/object:Gem::Version
138
+ version: '0.4'
139
+ - !ruby/object:Gem::Dependency
140
+ name: webmock
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ - !ruby/object:Gem::Dependency
154
+ name: vcr
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - ">="
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - ">="
165
+ - !ruby/object:Gem::Version
166
+ version: '0'
167
+ - !ruby/object:Gem::Dependency
168
+ name: dotenv-rails
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - ">="
172
+ - !ruby/object:Gem::Version
173
+ version: '0'
174
+ type: :development
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - ">="
179
+ - !ruby/object:Gem::Version
180
+ version: '0'
181
+ description:
182
+ email:
183
+ - 55204545+oliwoodsuk@users.noreply.github.com
184
+ executables: []
185
+ extensions: []
186
+ extra_rdoc_files: []
187
+ files:
188
+ - MIT-LICENSE
189
+ - README.md
190
+ - Rakefile
191
+ - app/assets/config/e_plat_manifest.js
192
+ - config/routes.rb
193
+ - lib/active_resource/schema.rb
194
+ - lib/e_plat.rb
195
+ - lib/e_plat/client.rb
196
+ - lib/e_plat/client/default_request_args.rb
197
+ - lib/e_plat/client/platform_convenience_methods.rb
198
+ - lib/e_plat/engine.rb
199
+ - lib/e_plat/errors/incorrect_type_error.rb
200
+ - lib/e_plat/errors/missing_migration_key_error.rb
201
+ - lib/e_plat/errors/missing_session_error.rb
202
+ - lib/e_plat/mapping.rb
203
+ - lib/e_plat/mapping/base.rb
204
+ - lib/e_plat/mapping/bigcommerce/v_3/product.rb
205
+ - lib/e_plat/mapping/bigcommerce/v_3/product/image.rb
206
+ - lib/e_plat/mapping/bigcommerce/v_3/product/variant.rb
207
+ - lib/e_plat/mapping/bigcommerce/v_3/shop.rb
208
+ - lib/e_plat/mapping/shopify/v_2022_07/product.rb
209
+ - lib/e_plat/mapping/shopify/v_2022_07/product/image.rb
210
+ - lib/e_plat/mapping/shopify/v_2022_07/product/variant.rb
211
+ - lib/e_plat/mapping/shopify/v_2022_07/shop.rb
212
+ - lib/e_plat/resource/attribute_interface.rb
213
+ - lib/e_plat/resource/base.rb
214
+ - lib/e_plat/resource/concerns/aliases.rb
215
+ - lib/e_plat/resource/concerns/overwrite_instance_methods.rb
216
+ - lib/e_plat/resource/concerns/overwrite_request_methods.rb
217
+ - lib/e_plat/resource/order.rb
218
+ - lib/e_plat/resource/order/customer.rb
219
+ - lib/e_plat/resource/order/fulfillment.rb
220
+ - lib/e_plat/resource/order/line_item.rb
221
+ - lib/e_plat/resource/order/shipping_line.rb
222
+ - lib/e_plat/resource/product.rb
223
+ - lib/e_plat/resource/product/image.rb
224
+ - lib/e_plat/resource/product/option.rb
225
+ - lib/e_plat/resource/product/variant.rb
226
+ - lib/e_plat/resource/shop.rb
227
+ - lib/e_plat/session.rb
228
+ - lib/e_plat/session_state.rb
229
+ - lib/e_plat/type_coercer.rb
230
+ - lib/e_plat/types.rb
231
+ - lib/e_plat/version.rb
232
+ - lib/tasks/e_plat_tasks.rake
233
+ homepage: https://rubygems.org/gems/e_plat
234
+ licenses: []
235
+ metadata:
236
+ homepage_uri: https://rubygems.org/gems/e_plat
237
+ post_install_message:
238
+ rdoc_options: []
239
+ require_paths:
240
+ - lib
241
+ required_ruby_version: !ruby/object:Gem::Requirement
242
+ requirements:
243
+ - - ">="
244
+ - !ruby/object:Gem::Version
245
+ version: 3.0.0
246
+ required_rubygems_version: !ruby/object:Gem::Requirement
247
+ requirements:
248
+ - - ">="
249
+ - !ruby/object:Gem::Version
250
+ version: '0'
251
+ requirements: []
252
+ rubygems_version: 3.4.1
253
+ signing_key:
254
+ specification_version: 4
255
+ summary: Creates a single interface for integrating with ecommerce platform APIs.
256
+ test_files: []