flowcommerce_spree 0.0.1 → 0.0.6

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 (58) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +101 -24
  3. data/SPREE_FLOW.md +6 -28
  4. data/app/controllers/concerns/current_zone_loader_decorator.rb +40 -25
  5. data/app/controllers/flowcommerce_spree/inventory_controller.rb +23 -0
  6. data/app/controllers/flowcommerce_spree/orders_controller.rb +20 -0
  7. data/app/controllers/flowcommerce_spree/webhooks_controller.rb +23 -13
  8. data/app/controllers/users/sessions_controller_decorator.rb +28 -0
  9. data/app/helpers/spree/core/controller_helpers/flow_io_order_helper_decorator.rb +4 -9
  10. data/app/models/spree/address_decorator.rb +19 -0
  11. data/app/models/spree/app_configuration_decorator.rb +7 -0
  12. data/app/models/spree/calculator/flow_io.rb +61 -0
  13. data/app/models/spree/calculator/shipping/flow_io.rb +40 -0
  14. data/app/models/spree/flow_io_credit_card_decorator.rb +21 -0
  15. data/app/models/spree/flow_io_order_decorator.rb +163 -0
  16. data/app/models/spree/flow_io_product_decorator.rb +2 -2
  17. data/app/models/spree/flow_io_variant_decorator.rb +4 -2
  18. data/app/models/spree/gateway/flow_io.rb +153 -0
  19. data/app/models/spree/{credit_card_decorator.rb → payment_capture_event_decorator.rb} +1 -1
  20. data/app/models/spree/promotion_handler/coupon_decorator.rb +1 -1
  21. data/app/models/spree/zones/flow_io_product_zone_decorator.rb +8 -0
  22. data/app/models/tracking/setup_decorator.rb +40 -0
  23. data/app/overrides/spree/admin/order_sidebar_summary_flow_link.rb +13 -0
  24. data/app/overrides/spree/admin/products/order_price_flow_message.rb +9 -0
  25. data/app/serializers/api/v2/order_serializer_decorator.rb +20 -0
  26. data/app/services/flowcommerce_spree/import_experience_items.rb +1 -1
  27. data/app/services/flowcommerce_spree/order_sync.rb +81 -173
  28. data/app/services/flowcommerce_spree/order_updater.rb +78 -0
  29. data/app/services/flowcommerce_spree/webhooks/capture_upserted_v2.rb +76 -0
  30. data/app/services/flowcommerce_spree/webhooks/card_authorization_upserted_v2.rb +66 -0
  31. data/app/services/flowcommerce_spree/webhooks/experience_upserted_v2.rb +25 -0
  32. data/app/services/flowcommerce_spree/webhooks/fraud_status_changed.rb +35 -0
  33. data/app/services/flowcommerce_spree/webhooks/local_item_upserted.rb +40 -0
  34. data/app/views/spree/admin/payments/source_views/_flow_io_gateway.html.erb +21 -0
  35. data/config/rails_best_practices.yml +51 -0
  36. data/config/routes.rb +3 -1
  37. data/db/migrate/20201021755957_add_meta_to_spree_tables.rb +6 -4
  38. data/lib/flow/simple_gateway.rb +0 -36
  39. data/lib/flowcommerce_spree.rb +17 -3
  40. data/lib/flowcommerce_spree/engine.rb +33 -3
  41. data/lib/flowcommerce_spree/experience_service.rb +1 -27
  42. data/lib/flowcommerce_spree/logging_http_client.rb +33 -15
  43. data/lib/flowcommerce_spree/session.rb +16 -29
  44. data/lib/flowcommerce_spree/test_support.rb +7 -0
  45. data/lib/flowcommerce_spree/version.rb +1 -1
  46. data/lib/tasks/flowcommerce_spree.rake +4 -1
  47. metadata +90 -22
  48. data/app/mailers/spree/spree_order_mailer_decorator.rb +0 -24
  49. data/app/models/spree/gateway/spree_flow_gateway.rb +0 -116
  50. data/app/models/spree/line_item_decorator.rb +0 -15
  51. data/app/models/spree/order_decorator.rb +0 -179
  52. data/app/views/spree/order_mailer/confirm_email.html.erb +0 -86
  53. data/app/views/spree/order_mailer/confirm_email.text.erb +0 -38
  54. data/config/initializers/flowcommerce_spree.rb +0 -7
  55. data/lib/flow/error.rb +0 -73
  56. data/lib/flow/pay_pal.rb +0 -25
  57. data/lib/flowcommerce_spree/webhook_service.rb +0 -98
  58. data/lib/simple_csv_writer.rb +0 -44
@@ -1,16 +1,21 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'activerecord-postgres-json'
4
+ require 'active_model_serializers'
3
5
  require 'flowcommerce'
4
6
  require 'flowcommerce_spree/api'
5
7
  require 'flowcommerce_spree/refresher'
6
8
  require 'flowcommerce_spree/engine'
7
9
  require 'flowcommerce_spree/logging_http_client'
8
10
  require 'flowcommerce_spree/logging_http_handler'
9
- require 'flowcommerce_spree/webhook_service'
10
11
  require 'flowcommerce_spree/session'
11
12
  require 'flow/simple_gateway'
13
+ require 'oj'
12
14
 
13
15
  module FlowcommerceSpree
16
+ API_KEY = ENV.fetch('FLOW_TOKEN', 'test_key')
17
+ ENV['FLOW_TOKEN'] = API_KEY
18
+
14
19
  def self.client(logger: FlowcommerceSpree.logger, **opts)
15
20
  FlowCommerce.instance(http_handler: LoggingHttpHandler.new(logger: logger), **opts)
16
21
  end
@@ -20,11 +25,20 @@ module FlowcommerceSpree
20
25
  end
21
26
 
22
27
  def self.logger
23
- logger = ActiveSupport::Logger.new(STDOUT, 3, 10_485_760)
28
+ logger = ActiveSupport::Logger.new(STDOUT)
29
+
30
+ logger_formatter = proc do |severity, datetime, _progname, msg|
31
+ "\n#{datetime}, #{severity}: #{msg}\n"
32
+ end
33
+
34
+ logger.formatter = logger_formatter
24
35
 
25
36
  # Broadcast the log into the file besides STDOUT, if `log` folder exists
26
37
  if Dir.exist?('log')
27
- logger.extend(ActiveSupport::Logger.broadcast(ActiveSupport::Logger.new('log/flowcommerce_spree.log')))
38
+ file_logger = ActiveSupport::Logger.new('log/flowcommerce_spree.log', 3, 10_485_760)
39
+ file_logger.formatter = logger_formatter
40
+
41
+ logger.extend(ActiveSupport::Logger.broadcast(file_logger))
28
42
  end
29
43
  logger
30
44
  end
@@ -6,22 +6,52 @@ module FlowcommerceSpree
6
6
  isolate_namespace FlowcommerceSpree
7
7
 
8
8
  config.before_initialize do
9
+ FlowcommerceSpree::ORGANIZATION = ENV.fetch('FLOW_ORGANIZATION', 'flow.io')
10
+ FlowcommerceSpree::BASE_COUNTRY = ENV.fetch('FLOW_BASE_COUNTRY', 'USA')
11
+ FlowcommerceSpree::API_KEY = ENV.fetch('FLOW_TOKEN', 'test_key')
12
+ FlowcommerceSpree::FLOW_IO_WEBHOOK_USER = ENV.fetch('FLOW_IO_WEBHOOK_USER', 'test_user')
13
+ FlowcommerceSpree::FLOW_IO_WEBHOOK_PASSWORD = ENV.fetch('FLOW_IO_WEBHOOK_PASSWORD', 'test_password')
14
+
9
15
  FlowcommerceSpree::Config = FlowcommerceSpree::Settings.new
10
16
  end
11
17
 
12
- config.after_initialize do
18
+ config.flowcommerce_spree = ActiveSupport::OrderedOptions.new
19
+
20
+ initializer 'flowcommerce_spree.configuration' do |app|
21
+ # If some Rake tasks will fail in development environment, the cause could be the autoloading.
22
+ # Uncommenting the following 3 lines will enable eager-loading for the flowcommerce_spree Rake tasks.
23
+ # if Rails.env.development?
24
+ # app.config.eager_load = Rake.application.top_level_tasks.any? { |t| t.start_with?('flowcommerce_spree') }
25
+ # end
26
+
27
+ app.config.flowcommerce_spree[:mounted_path] = ENV.fetch('FLOW_MOUNT_PATH', '/flow')
28
+
29
+ app.routes.prepend do
30
+ mount FlowcommerceSpree::Engine => app.config.flowcommerce_spree[:mounted_path]
31
+ end
32
+ end
33
+
34
+ config.after_initialize do |app|
13
35
  # init Flow payments as an option
14
- # app.config.spree.payment_methods << Spree::Gateway::Flow
36
+ app.config.spree.payment_methods << Spree::Gateway::FlowIo
15
37
 
16
- Flow::SimpleGateway.clear_zero_amount_payments = true
38
+ # Flow::SimpleGateway.clear_zero_amount_payments = true
17
39
  end
18
40
 
19
41
  def self.activate
20
42
  Dir.glob(File.join(File.dirname(__FILE__), '../../app/**/*_decorator*.rb')).sort.each do |c|
21
43
  Rails.configuration.cache_classes ? require(c) : load(c)
22
44
  end
45
+ Dir.glob(File.join(File.dirname(__FILE__), '../app/overrides/*.rb')).sort.each do |c|
46
+ Rails.configuration.cache_classes ? require(c) : load(c)
47
+ end
23
48
  end
24
49
 
25
50
  config.to_prepare(&method(:activate).to_proc)
51
+
52
+ initializer 'spree.flowcommerce_spree.calculators', after: 'spree.register.calculators' do |_app|
53
+ Rails.application.config.spree.calculators.tax_rates << Spree::Calculator::FlowIo
54
+ Rails.application.config.spree.calculators.shipping_methods << Spree::Calculator::Shipping::FlowIo
55
+ end
26
56
  end
27
57
  end
@@ -22,18 +22,6 @@ module FlowcommerceSpree
22
22
  nil
23
23
  end
24
24
 
25
- def get_by_subcatalog_id(subcatalog_id)
26
- fetch_from_flow.each do |experince|
27
- return experince if experince.subcatalog.id == subcatalog_id
28
- end
29
-
30
- nil
31
- end
32
-
33
- def compact
34
- all.map { |exp| [exp.country, exp.key, exp.name] }
35
- end
36
-
37
25
  def default
38
26
  FlowcommerceSpree::ExperienceService
39
27
  .all.select { |exp| exp.key.downcase == ENV.fetch('FLOW_BASE_COUNTRY').downcase }.first
@@ -42,24 +30,10 @@ module FlowcommerceSpree
42
30
  private
43
31
 
44
32
  def fetch_from_flow
45
- # return cached_experinces if cache_valid?
46
-
47
- experiences = FlowcommerceSpree.client.experiences.get ORGANIZATION
33
+ FlowcommerceSpree.client.experiences.get ORGANIZATION
48
34
 
49
35
  # work with active axperiences only
50
36
  # experiences = experiences.select { |it| it.status.value == 'active' }
51
-
52
- # @cache = [experiences, Time.now]
53
- experiences
54
- end
55
-
56
- def cache_valid?
57
- # cache experinces in worker memory for 1 minute
58
- @cache && @cache[1] > Time.now.ago(1.minute)
59
- end
60
-
61
- def cached_experinces
62
- @cache[0]
63
37
  end
64
38
  end
65
39
  end
@@ -14,30 +14,48 @@ module FlowcommerceSpree
14
14
  # original_read = client.read_timeout
15
15
 
16
16
  start_time = Time.now.utc.round(10)
17
- @logger.info "start #{request.method} #{request.path}"
18
- @logger.info "body: #{request.instance_variable_get(:@header)}"
19
- @logger.info "body: #{request.body}"
20
-
21
- if request.path.start_with?('/organizations')
22
- # Contrived example to show how client settings can be adjusted
23
- # client.open_timeout = 60
24
- # client.read_timeout = 60
25
- end
17
+
18
+ # Contrived example to show how client settings can be adjusted
19
+ # if request.path.start_with?('/organizations')
20
+ # client.open_timeout = 60
21
+ # client.read_timeout = 60
22
+ # end
26
23
 
27
24
  begin
28
25
  response = super
29
26
  rescue Io::Flow::V0::HttpClient::ServerError => e
30
- @error = { error: e }.to_json
27
+ @error = { error: Oj.load(e.body), code: e.code, status: e.details }
28
+ raise exception_to_raise(e), @error.dig(:error, 'messages')
31
29
  ensure
32
30
  # client.open_timeout = original_open
33
31
  # client.read_timeout = original_read
34
32
 
35
- end_time = Time.now.utc.round(10)
36
- duration = ((end_time - start_time) * 1000).round(0)
37
- @logger.info "complete #{request.method} #{request.path} #{duration} ms"
38
- @logger.info "response: #{response}"
39
- @logger.info "Error: #{e.inspect}" if e
33
+ log_request(request, response, start_time)
40
34
  end
41
35
  end
36
+
37
+ private
38
+
39
+ def exception_to_raise(flow_io_exception)
40
+ resource = flow_io_exception.uri.split('/').last
41
+ exception = case resource
42
+ when 'reversals', 'refunds'
43
+ 'Spree::Core::GatewayError'
44
+ else
45
+ 'StandardError'
46
+ end
47
+ exception.constantize
48
+ end
49
+
50
+ def log_request(request, response, start_time)
51
+ duration = ((Time.now.utc.round(10) - start_time) * 1000).round(0)
52
+
53
+ @logger.info("Started #{request.method} #{request.path}\n"\
54
+ "headers: #{request.instance_variable_get(:@header)}\nbody: #{request.body}\n"\
55
+ "response: #{response&.force_encoding('utf-8')}\n"\
56
+ "Completed #{request.method} #{request.path} #{duration} ms\n")
57
+
58
+ @logger.info "Error: #{@error.inspect}" if @error
59
+ end
42
60
  end
43
61
  end
@@ -5,25 +5,34 @@ module FlowcommerceSpree
5
5
  class Session
6
6
  attr_accessor :session, :localized, :visitor
7
7
 
8
- def initialize(ip:, visitor:)
8
+ def self.create(ip:, visitor:, experience: nil)
9
+ instance = new(ip: ip, visitor: visitor, experience: experience)
10
+ instance.create
11
+ instance
12
+ end
13
+
14
+ def initialize(ip:, visitor:, experience: nil)
9
15
  ip = '127.0.0.1' if ip == '::1'
10
16
 
11
17
  @ip = ip
12
18
  @visitor = visitor
19
+ @experience = experience
13
20
  end
14
21
 
15
- # create session with blank data
22
+ # create session without or with experience (the latter is useful for creating a new session with the order's
23
+ # experience on refreshing the checkout_token)
16
24
  def create
17
25
  data = { ip: @ip,
18
26
  visit: { id: @visitor,
19
27
  expires_at: (Time.now + 30.minutes).iso8601 } }
28
+ data[:experience] = @experience if @experience
20
29
 
21
30
  session_model = ::Io::Flow::V0::Models::SessionForm.new data
22
31
  @session = FlowCommerce.instance(http_handler: LoggingHttpHandler.new)
23
32
  .sessions.post_organizations_by_organization(ORGANIZATION, session_model)
24
33
  end
25
34
 
26
- # if we want to manualy switch to specific country or experience
35
+ # if we want to manually switch to specific country or experience
27
36
  def update(data)
28
37
  @session = FlowCommerce.instance.sessions.put_by_session(@session.id,
29
38
  ::Io::Flow::V0::Models::SessionPutForm.new(data))
@@ -34,6 +43,10 @@ module FlowcommerceSpree
34
43
  @session.local&.experience
35
44
  end
36
45
 
46
+ def expires_at
47
+ @session.visit.expires_at
48
+ end
49
+
37
50
  def local
38
51
  @session.local
39
52
  end
@@ -41,31 +54,5 @@ module FlowcommerceSpree
41
54
  def id
42
55
  @session.id
43
56
  end
44
-
45
- def localized?
46
- # use flow if we are not in default country
47
- return false unless local
48
- return false if @localized.class == FalseClass
49
-
50
- local.country.iso_3166_3 != ENV.fetch('FLOW_BASE_COUNTRY').upcase
51
- end
52
-
53
- # because we do not get full experience from session, we have to get from exp list
54
- def delivered_duty_options
55
- return nil unless experience
56
-
57
- return unless (flow_experience = Flow::Experience.get(experience.key))
58
-
59
- Hashie::Mash.new(flow_experience.settings.delivered_duty.to_hash)
60
- end
61
-
62
- # if we have more than one choice, we show choice popup
63
- def offers_delivered_duty_choice?
64
- if (options = delivered_duty_options)
65
- options.available.length > 1
66
- else
67
- false
68
- end
69
- end
70
57
  end
71
58
  end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ module FlowcommerceSpree
4
+ module TestSupport
5
+ FACTORY_PATH = File.expand_path('../../spec/factories/flow_io', __dir__)
6
+ end
7
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module FlowcommerceSpree
4
- VERSION = '0.0.1'
4
+ VERSION = '0.0.6'
5
5
  end
@@ -47,8 +47,11 @@ namespace :flowcommerce_spree do
47
47
 
48
48
  while current_page == 0 || !variants.empty?
49
49
  current_page += 1
50
- variants = Spree::Variant.order('updated_at desc').page(current_page).per(100).all
51
50
 
51
+ products = Spree::Product.where.not(country_of_origin: nil)
52
+ .order('updated_at desc')
53
+ .page(current_page).per(50).includes(:variants_including_master)
54
+ variants = products.map(&:variants_including_master).flatten
52
55
  variants.each do |variant|
53
56
  total_sum += 1
54
57
  result = variant.sync_product_to_flow
metadata CHANGED
@@ -1,16 +1,44 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: flowcommerce_spree
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aurel Branzeanu
8
8
  - Sebastian De Luca
9
- autorequire:
9
+ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2021-02-03 00:00:00.000000000 Z
12
+ date: 2021-04-13 00:00:00.000000000 Z
13
13
  dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: active_model_serializers
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - '='
19
+ - !ruby/object:Gem::Version
20
+ version: 0.10.2
21
+ type: :runtime
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - '='
26
+ - !ruby/object:Gem::Version
27
+ version: 0.10.2
28
+ - !ruby/object:Gem::Dependency
29
+ name: activerecord-postgres-json
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - ">="
33
+ - !ruby/object:Gem::Version
34
+ version: 0.2.3
35
+ type: :runtime
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ version: 0.2.3
14
42
  - !ruby/object:Gem::Dependency
15
43
  name: colorize
16
44
  requirement: !ruby/object:Gem::Requirement
@@ -77,16 +105,16 @@ dependencies:
77
105
  name: oj
78
106
  requirement: !ruby/object:Gem::Requirement
79
107
  requirements:
80
- - - ">="
108
+ - - '='
81
109
  - !ruby/object:Gem::Version
82
- version: '0'
110
+ version: 3.7.12
83
111
  type: :runtime
84
112
  prerelease: false
85
113
  version_requirements: !ruby/object:Gem::Requirement
86
114
  requirements:
87
- - - ">="
115
+ - - '='
88
116
  - !ruby/object:Gem::Version
89
- version: '0'
117
+ version: 3.7.12
90
118
  - !ruby/object:Gem::Dependency
91
119
  name: pg
92
120
  requirement: !ruby/object:Gem::Requirement
@@ -115,6 +143,20 @@ dependencies:
115
143
  - - "~>"
116
144
  - !ruby/object:Gem::Version
117
145
  version: 2.3.0
146
+ - !ruby/object:Gem::Dependency
147
+ name: factory_bot_rails
148
+ requirement: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - "~>"
151
+ - !ruby/object:Gem::Version
152
+ version: '4.0'
153
+ type: :development
154
+ prerelease: false
155
+ version_requirements: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - "~>"
158
+ - !ruby/object:Gem::Version
159
+ version: '4.0'
118
160
  - !ruby/object:Gem::Dependency
119
161
  name: github_changelog_generator
120
162
  requirement: !ruby/object:Gem::Requirement
@@ -129,6 +171,20 @@ dependencies:
129
171
  - - ">="
130
172
  - !ruby/object:Gem::Version
131
173
  version: '0'
174
+ - !ruby/object:Gem::Dependency
175
+ name: rspec-rails
176
+ requirement: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - "~>"
179
+ - !ruby/object:Gem::Version
180
+ version: '3.5'
181
+ type: :development
182
+ prerelease: false
183
+ version_requirements: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - "~>"
186
+ - !ruby/object:Gem::Version
187
+ version: '3.5'
132
188
  description: Integration of popular Rails/Spree store framework with e-commerce Flow
133
189
  API
134
190
  email:
@@ -145,42 +201,55 @@ files:
145
201
  - app/assets/javascripts/flowcommerce_spree/application.js
146
202
  - app/assets/stylesheets/flowcommerce_spree/application.css
147
203
  - app/controllers/concerns/current_zone_loader_decorator.rb
204
+ - app/controllers/flowcommerce_spree/inventory_controller.rb
205
+ - app/controllers/flowcommerce_spree/orders_controller.rb
148
206
  - app/controllers/flowcommerce_spree/webhooks_controller.rb
207
+ - app/controllers/users/sessions_controller_decorator.rb
149
208
  - app/helpers/flowcommerce_spree/application_helper.rb
150
209
  - app/helpers/spree/admin/orders_helper_decorator.rb
151
210
  - app/helpers/spree/core/controller_helpers/flow_io_order_helper_decorator.rb
152
- - app/mailers/spree/spree_order_mailer_decorator.rb
153
211
  - app/models/flowcommerce_spree/settings.rb
154
- - app/models/spree/credit_card_decorator.rb
212
+ - app/models/spree/address_decorator.rb
213
+ - app/models/spree/app_configuration_decorator.rb
214
+ - app/models/spree/calculator/flow_io.rb
215
+ - app/models/spree/calculator/shipping/flow_io.rb
216
+ - app/models/spree/flow_io_credit_card_decorator.rb
217
+ - app/models/spree/flow_io_order_decorator.rb
155
218
  - app/models/spree/flow_io_product_decorator.rb
156
219
  - app/models/spree/flow_io_variant_decorator.rb
157
- - app/models/spree/gateway/spree_flow_gateway.rb
158
- - app/models/spree/line_item_decorator.rb
159
- - app/models/spree/order_decorator.rb
220
+ - app/models/spree/gateway/flow_io.rb
221
+ - app/models/spree/payment_capture_event_decorator.rb
160
222
  - app/models/spree/promotion_decorator.rb
161
223
  - app/models/spree/promotion_handler/coupon_decorator.rb
162
224
  - app/models/spree/spree_user_decorator.rb
163
225
  - app/models/spree/taxon_decorator.rb
164
226
  - app/models/spree/zone_decorator.rb
165
227
  - app/models/spree/zones/flow_io_product_zone_decorator.rb
228
+ - app/models/tracking/setup_decorator.rb
229
+ - app/overrides/spree/admin/order_sidebar_summary_flow_link.rb
230
+ - app/overrides/spree/admin/products/order_price_flow_message.rb
231
+ - app/serializers/api/v2/order_serializer_decorator.rb
166
232
  - app/services/flowcommerce_spree/import_experience_items.rb
167
233
  - app/services/flowcommerce_spree/import_experiences.rb
168
234
  - app/services/flowcommerce_spree/order_sync.rb
235
+ - app/services/flowcommerce_spree/order_updater.rb
236
+ - app/services/flowcommerce_spree/webhooks/capture_upserted_v2.rb
237
+ - app/services/flowcommerce_spree/webhooks/card_authorization_upserted_v2.rb
238
+ - app/services/flowcommerce_spree/webhooks/experience_upserted_v2.rb
239
+ - app/services/flowcommerce_spree/webhooks/fraud_status_changed.rb
240
+ - app/services/flowcommerce_spree/webhooks/local_item_upserted.rb
169
241
  - app/views/layouts/flowcommerce_spree/application.html.erb
170
242
  - app/views/spree/admin/payments/index.html.erb
243
+ - app/views/spree/admin/payments/source_views/_flow_io_gateway.html.erb
171
244
  - app/views/spree/admin/promotions/edit.html.erb
172
245
  - app/views/spree/admin/shared/_order_summary.html.erb
173
246
  - app/views/spree/admin/shared/_order_summary_flow.html.erb
174
- - app/views/spree/order_mailer/confirm_email.html.erb
175
- - app/views/spree/order_mailer/confirm_email.text.erb
176
- - config/initializers/flowcommerce_spree.rb
247
+ - config/rails_best_practices.yml
177
248
  - config/routes.rb
178
249
  - db/migrate/20201021160159_add_type_and_meta_to_spree_zone.rb
179
250
  - db/migrate/20201021755957_add_meta_to_spree_tables.rb
180
251
  - db/migrate/20201022173210_add_zone_type_to_spree_zone_members.rb
181
252
  - db/migrate/20201022174252_add_kind_to_zone.rb
182
- - lib/flow/error.rb
183
- - lib/flow/pay_pal.rb
184
253
  - lib/flow/simple_gateway.rb
185
254
  - lib/flowcommerce_spree.rb
186
255
  - lib/flowcommerce_spree/api.rb
@@ -190,15 +259,14 @@ files:
190
259
  - lib/flowcommerce_spree/logging_http_handler.rb
191
260
  - lib/flowcommerce_spree/refresher.rb
192
261
  - lib/flowcommerce_spree/session.rb
262
+ - lib/flowcommerce_spree/test_support.rb
193
263
  - lib/flowcommerce_spree/version.rb
194
- - lib/flowcommerce_spree/webhook_service.rb
195
- - lib/simple_csv_writer.rb
196
264
  - lib/tasks/flowcommerce_spree.rake
197
265
  homepage: https://github.com/mejuri-inc/flowcommerce_spree
198
266
  licenses:
199
267
  - MIT
200
268
  metadata: {}
201
- post_install_message:
269
+ post_install_message:
202
270
  rdoc_options: []
203
271
  require_paths:
204
272
  - lib
@@ -213,8 +281,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
213
281
  - !ruby/object:Gem::Version
214
282
  version: '0'
215
283
  requirements: []
216
- rubygems_version: 3.0.8
217
- signing_key:
284
+ rubygems_version: 3.1.2
285
+ signing_key:
218
286
  specification_version: 4
219
287
  summary: Integration of Spree with Flow API
220
288
  test_files: []