solidus_support 0.4.1 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ceefe11ac7e48cfcba96aec57eff516d8d517c48f990098645d380f5c33ad6b9
4
- data.tar.gz: 1ce25f4ff870f87f137ba021ee8db5db76bb6031ffb22e18f49cea21be3ac882
3
+ metadata.gz: 3d0b61a92f9ea8174330391a7bad3543dc0725f68e9fd380011391e580abab75
4
+ data.tar.gz: 269a38d161f392811ed2ec1c2a523b67a92557b7a9828c2c2639a2d504df06a6
5
5
  SHA512:
6
- metadata.gz: 4b9b82cf9add77927ae9a2b2b087c886dae93d4577a9daf58274464b07ab5fa6e89725ec32a558f1dd79f75b507ff908287a8b9af9ec5b146611fd270a900446
7
- data.tar.gz: 7e37c959b0790f36cdb89af526bf56b364b30356ed88c2888bce34c6b4984fc53631dec1c6acde601e64e0ba80a39a8dde84665cd64f7c30fa679542e4e87131
6
+ metadata.gz: 34ab8b557078b085cd966e3e45652ba7f20e4b26588f74a66f94da5f0dc7cd1824f68672d354656d346baa97bc1f8d3e37b469ab0871d5a247af1a7368b23bb2
7
+ data.tar.gz: 4401a91bdecea435d21f175ea4c1dd77b3f68006ed6221338435e6e1f8a27de6b0533dfdb88ec3ab6401554125d0de187fd38ff7a77a99fc59350292734eab4f
@@ -1,5 +1,73 @@
1
1
  # Changelog
2
2
 
3
+ ## [v0.7.0](https://github.com/solidusio/solidus_support/tree/v0.7.0) (2020-10-28)
4
+
5
+ [Full Changelog](https://github.com/solidusio/solidus_support/compare/v0.6.0...v0.7.0)
6
+
7
+ **Closed issues:**
8
+
9
+ - Could we get a new release? [\#49](https://github.com/solidusio/solidus_support/issues/49)
10
+
11
+ **Merged pull requests:**
12
+
13
+ - Use `Spree::Event. activate\_all\_subscribers` when available [\#53](https://github.com/solidusio/solidus_support/pull/53) ([spaghetticode](https://github.com/spaghetticode))
14
+ - Support Rails 5.1.x [\#51](https://github.com/solidusio/solidus_support/pull/51) ([brchristian](https://github.com/brchristian))
15
+ - Remove redundant `solidus\_core` dev dependency [\#50](https://github.com/solidusio/solidus_support/pull/50) ([brchristian](https://github.com/brchristian))
16
+
17
+ ## [v0.6.0](https://github.com/solidusio/solidus_support/tree/v0.6.0) (2020-07-24)
18
+
19
+ [Full Changelog](https://github.com/solidusio/solidus_support/compare/v0.5.1...v0.6.0)
20
+
21
+ **Implemented enhancements:**
22
+
23
+ - Autoload Solidus Event subscribers from extensions [\#45](https://github.com/solidusio/solidus_support/pull/45) ([spaghetticode](https://github.com/spaghetticode))
24
+
25
+ **Fixed bugs:**
26
+
27
+ - Load event subscribers only when Spree::Event is available [\#47](https://github.com/solidusio/solidus_support/pull/47) ([spaghetticode](https://github.com/spaghetticode))
28
+
29
+ **Closed issues:**
30
+
31
+ - Namespace Conflicts [\#48](https://github.com/solidusio/solidus_support/issues/48)
32
+
33
+ **Merged pull requests:**
34
+
35
+ - Stop using SolidusSupport.solidus\_gem\_version [\#46](https://github.com/solidusio/solidus_support/pull/46) ([elia](https://github.com/elia))
36
+ - Add frontend/backend/api decorators to autoload path [\#44](https://github.com/solidusio/solidus_support/pull/44) ([kennyadsl](https://github.com/kennyadsl))
37
+
38
+ ## [v0.5.1](https://github.com/solidusio/solidus_support/tree/v0.5.1) (2020-04-15)
39
+
40
+ [Full Changelog](https://github.com/solidusio/solidus_support/compare/v0.5.0...v0.5.1)
41
+
42
+ **Merged pull requests:**
43
+
44
+ - Push decorators to autoload path using config.autoload\_paths [\#43](https://github.com/solidusio/solidus_support/pull/43) ([kennyadsl](https://github.com/kennyadsl))
45
+
46
+ ## [v0.5.0](https://github.com/solidusio/solidus_support/tree/v0.5.0) (2020-02-18)
47
+
48
+ [Full Changelog](https://github.com/solidusio/solidus_support/compare/v0.4.1...v0.5.0)
49
+
50
+ **Merged pull requests:**
51
+
52
+ - Load Solidus engine extension files automatically [\#42](https://github.com/solidusio/solidus_support/pull/42) ([aldesantis](https://github.com/aldesantis))
53
+ - Deprecate SolidusSupport.solidus\_gem\_version [\#37](https://github.com/solidusio/solidus_support/pull/37) ([kennyadsl](https://github.com/kennyadsl))
54
+
55
+ ## [v0.4.1](https://github.com/solidusio/solidus_support/tree/v0.4.1) (2020-01-16)
56
+
57
+ [Full Changelog](https://github.com/solidusio/solidus_support/compare/v0.4.0...v0.4.1)
58
+
59
+ **Closed issues:**
60
+
61
+ - Should use require\_dependency instead of require/load [\#34](https://github.com/solidusio/solidus_support/issues/34)
62
+ - Add a LICENSE [\#20](https://github.com/solidusio/solidus_support/issues/20)
63
+
64
+ **Merged pull requests:**
65
+
66
+ - Update solidus\_dev\_support [\#41](https://github.com/solidusio/solidus_support/pull/41) ([aldesantis](https://github.com/aldesantis))
67
+ - Replace manual cache checks w/ require\_dependency [\#39](https://github.com/solidusio/solidus_support/pull/39) ([elia](https://github.com/elia))
68
+ - Fixes isse when zeitwerk is not enabled [\#38](https://github.com/solidusio/solidus_support/pull/38) ([softr8](https://github.com/softr8))
69
+ - Spring cleaning [\#33](https://github.com/solidusio/solidus_support/pull/33) ([aldesantis](https://github.com/aldesantis))
70
+
3
71
  ## [v0.4.0](https://github.com/solidusio/solidus_support/tree/v0.4.0) (2019-12-16)
4
72
 
5
73
  [Full Changelog](https://github.com/solidusio/solidus_support/compare/v0.3.2...v0.4.0)
data/Gemfile CHANGED
@@ -16,3 +16,15 @@ else
16
16
  end
17
17
 
18
18
  gemspec
19
+
20
+ # There is an issue with Sprockets 4 not accepting a custom path for
21
+ # the assets manifest, which doesn't play well with in-memory dummy
22
+ # apps such as the one we use in this gem.
23
+
24
+ # A fix was provided for sprockets-rails[1] but it was not accepted
25
+ # yet.
26
+
27
+ # [1]: rails/sprockets-rails#446
28
+ #
29
+ # Please do not remove this line until we have a solution.
30
+ gem 'sprockets', '~> 3'
data/README.md CHANGED
@@ -38,7 +38,7 @@ module SolidusExtensionName
38
38
  class Engine < Rails::Engine
39
39
  engine_name 'solidus_extension_name'
40
40
 
41
- include SolidusSupport::EngineExtensions::Decorators
41
+ include SolidusSupport::EngineExtensions
42
42
 
43
43
  # ...
44
44
  end
@@ -57,6 +57,26 @@ end
57
57
  config.to_prepare(&method(:activate).to_proc)
58
58
  ```
59
59
 
60
+ #### Loading files conditionally
61
+
62
+ If you include `EngineExtensions` in your extension and structure your files according to the
63
+ expected paths, they will be loaded automagically only when the relevant Solidus engines are
64
+ available.
65
+
66
+ Here's what an example structure may look like:
67
+
68
+ - `lib/views/backend`: will only be added to the view paths when `solidus_backend` is available.
69
+ - `lib/controllers/backend`: will only be added to the controller paths when `solidus_backend` is
70
+ available.
71
+ - `lib/decorators/backend`: will only be added to the decorator paths when `solidus_backend` is
72
+ available.
73
+
74
+ The same goes for `frontend` and `api`.
75
+
76
+ We strongly recommend following this structure and making your extensions so that they're not
77
+ dependent on anything other than `solidus_core`, only augmenting the functionality of the other
78
+ engines when they are available.
79
+
60
80
  ## Development
61
81
 
62
82
  To install this gem onto your local machine, run `bundle exec rake install`. To release a new
@@ -3,6 +3,7 @@
3
3
  # frozen_string_literal: true
4
4
 
5
5
  require "bundler/setup"
6
+ require "rails/all"
6
7
  require "solidus_support"
7
8
 
8
9
  # You can add fixtures and/or initialization code here to make experimenting
@@ -8,25 +8,32 @@ require 'solidus_core'
8
8
  module SolidusSupport
9
9
  class << self
10
10
  def solidus_gem_version
11
- if Spree.respond_to?(:solidus_gem_version)
12
- Spree.solidus_gem_version
13
- elsif Spree.respond_to?(:gem_version)
14
- # 1.1 doesn't have solidus_gem_version
15
- Gem::Version.new(Spree.solidus_version)
16
- else
17
- # 1.0 doesn't have gem_version
18
- Gem::Specification.detect { |x| x.name == 'solidus_core' }.version
19
- end
11
+ ActiveSupport::Deprecation.warn <<-WARN.squish, caller
12
+ SolidusSupport.solidus_gem_version is deprecated and will be removed
13
+ in solidus_support 1.0. Please use Spree.solidus_gem_version instead.
14
+ WARN
15
+
16
+ Spree.solidus_gem_version
20
17
  end
21
18
 
22
19
  def reset_spree_preferences_deprecated?
23
20
  first_version_without_reset = Gem::Requirement.new('>= 2.9')
24
- first_version_without_reset.satisfied_by?(solidus_gem_version)
21
+ first_version_without_reset.satisfied_by?(Spree.solidus_gem_version)
22
+ end
23
+
24
+ def combined_first_and_last_name_in_address?
25
+ versions_before_preference = Gem::Requirement.new('< 2.10')
26
+ versions_after_preference = Gem::Requirement.new('>= 3.0.0.alpha')
27
+
28
+ return false if versions_before_preference.satisfied_by?(Spree.solidus_gem_version)
29
+ return true if versions_after_preference.satisfied_by?(Spree.solidus_gem_version)
30
+
31
+ Spree::Config.use_combined_first_and_last_name_in_address
25
32
  end
26
33
 
27
34
  def new_gateway_code?
28
35
  first_version_with_new_gateway_code = Gem::Requirement.new('>= 2.3')
29
- first_version_with_new_gateway_code.satisfied_by?(solidus_gem_version)
36
+ first_version_with_new_gateway_code.satisfied_by?(Spree.solidus_gem_version)
30
37
  end
31
38
 
32
39
  def payment_source_parent_class
@@ -1,3 +1,101 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative 'engine_extensions/decorators'
3
+ module SolidusSupport
4
+ module EngineExtensions
5
+ include ActiveSupport::Deprecation::DeprecatedConstantAccessor
6
+ deprecate_constant 'Decorators', 'SolidusSupport::EngineExtensions'
7
+
8
+ def self.included(engine)
9
+ engine.extend ClassMethods
10
+
11
+ engine.class_eval do
12
+ solidus_decorators_root.glob('*') do |decorators_folder|
13
+ config.autoload_paths += [decorators_folder]
14
+ end
15
+
16
+ config.to_prepare(&method(:activate))
17
+
18
+ enable_solidus_engine_support('backend') if SolidusSupport.backend_available?
19
+ enable_solidus_engine_support('frontend') if SolidusSupport.frontend_available?
20
+ enable_solidus_engine_support('api') if SolidusSupport.api_available?
21
+ end
22
+ end
23
+
24
+ module ClassMethods
25
+ def activate
26
+ load_solidus_decorators_from(solidus_decorators_root)
27
+ load_solidus_subscribers_from(solidus_subscribers_root)
28
+ end
29
+
30
+ # Loads Solidus event subscriber files.
31
+ #
32
+ # This allows to add event subscribers to extensions without explicitly subscribing them,
33
+ # similarly to what happens in Solidus core.
34
+ def load_solidus_subscribers_from(path)
35
+ if defined? Spree::Event
36
+ path.glob("**/*_subscriber.rb") do |subscriber_path|
37
+ require_dependency(subscriber_path)
38
+ end
39
+
40
+ if Spree::Event.respond_to?(:activate_all_subscribers)
41
+ Spree::Event.activate_all_subscribers
42
+ else
43
+ Spree::Event.subscribers.each(&:subscribe!)
44
+ end
45
+ end
46
+ end
47
+
48
+ # Loads decorator files.
49
+ #
50
+ # This is needed since they are never explicitly referenced in the application code and
51
+ # won't be loaded by default. We need them to be executed regardless in order to decorate
52
+ # existing classes.
53
+ def load_solidus_decorators_from(path)
54
+ path.glob('**/*.rb') do |decorator_path|
55
+ require_dependency(decorator_path)
56
+ end
57
+ end
58
+
59
+ private
60
+
61
+ # Returns the root for this engine's decorators.
62
+ #
63
+ # @return [Path]
64
+ def solidus_decorators_root
65
+ root.join('app/decorators')
66
+ end
67
+
68
+ # Returns the root for this engine's Solidus event subscribers.
69
+ #
70
+ # @return [Path]
71
+ def solidus_subscribers_root
72
+ root.join("app/subscribers")
73
+ end
74
+
75
+ # Enables support for a Solidus engine.
76
+ #
77
+ # This will tell Rails to:
78
+ #
79
+ # * add +lib/controllers/[engine]+ to the controller paths;
80
+ # * add +lib/views/[engine]+ to the view paths;
81
+ # * load the decorators in +lib/decorators/[engine]+.
82
+ #
83
+ # @see #load_solidus_decorators_from
84
+ def enable_solidus_engine_support(engine)
85
+ paths['app/controllers'] << "lib/controllers/#{engine}"
86
+ paths['app/views'] << "lib/views/#{engine}"
87
+
88
+ path = root.join("lib/decorators/#{engine}")
89
+
90
+ config.autoload_paths += path.glob('*')
91
+
92
+ engine_context = self
93
+ config.to_prepare do
94
+ engine_context.instance_eval do
95
+ load_solidus_decorators_from(path)
96
+ end
97
+ end
98
+ end
99
+ end
100
+ end
101
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module SolidusSupport
4
- VERSION = '0.4.1'
4
+ VERSION = '0.8.0'
5
5
  end
@@ -21,11 +21,11 @@ Gem::Specification.new do |s|
21
21
  s.executables = s.files.grep(%r{^exe/}) { |f| File.basename(f) }
22
22
  s.require_paths = ["lib"]
23
23
 
24
+ s.add_development_dependency 'rails'
24
25
  s.add_development_dependency 'bundler'
25
26
  s.add_development_dependency 'rake'
26
27
  s.add_development_dependency 'rspec-rails'
27
28
  s.add_development_dependency 'rubocop'
28
29
  s.add_development_dependency 'rubocop-rspec'
29
- s.add_development_dependency 'solidus_core'
30
30
  s.add_development_dependency 'solidus_dev_support'
31
31
  end
@@ -7,7 +7,7 @@ RSpec.describe SolidusSupport do
7
7
  let(:credit_card) { nil }
8
8
 
9
9
  before do
10
- allow(described_class).to receive(:solidus_gem_version) do
10
+ allow(Spree).to receive(:solidus_gem_version) do
11
11
  Gem::Version.new(solidus_version)
12
12
  end
13
13
  end
@@ -42,4 +42,37 @@ RSpec.describe SolidusSupport do
42
42
  end
43
43
  # rubocop:enable RSpec/NestedGroups
44
44
  end
45
+
46
+ describe '.combined_first_and_last_name_in_address?' do
47
+ subject { described_class.combined_first_and_last_name_in_address? }
48
+
49
+ before do
50
+ allow(Spree).to receive(:solidus_gem_version) do
51
+ Gem::Version.new(solidus_version)
52
+ end
53
+ end
54
+
55
+ context 'when Solidus did not have the code to combine addresses fields' do
56
+ let(:solidus_version) { '2.9.3' }
57
+
58
+ it { is_expected.to be_falsey }
59
+ end
60
+
61
+ context 'when Solidus has preference to choose if combine addresses fields' do
62
+ let(:solidus_version) { '2.10.3' }
63
+ before do
64
+ allow(Spree::Config)
65
+ .to receive(:use_combined_first_and_last_name_in_address)
66
+ .and_return(true)
67
+ end
68
+
69
+ it { is_expected.to be_truthy }
70
+ end
71
+
72
+ context 'when Solidus only has code to combine addresses fields' do
73
+ let(:solidus_version) { '3.0.0' }
74
+
75
+ it { is_expected.to be_truthy }
76
+ end
77
+ end
45
78
  end
@@ -14,7 +14,6 @@ module DummyApp
14
14
  class Application < ::Rails::Application
15
15
  config.eager_load = false
16
16
  config.paths['config/database'] = File.expand_path('dummy_app/database.yml', __dir__)
17
- config.active_record.sqlite3.represent_boolean_as_integer = true
18
17
  end
19
18
  end
20
19
 
metadata CHANGED
@@ -1,17 +1,17 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: solidus_support
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.1
4
+ version: 0.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - John Hawthorn
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-01-16 00:00:00.000000000 Z
11
+ date: 2021-01-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: bundler
14
+ name: rails
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - ">="
@@ -25,7 +25,7 @@ dependencies:
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
- name: rake
28
+ name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - ">="
@@ -39,7 +39,7 @@ dependencies:
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
- name: rspec-rails
42
+ name: rake
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - ">="
@@ -53,7 +53,7 @@ dependencies:
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
- name: rubocop
56
+ name: rspec-rails
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - ">="
@@ -67,7 +67,7 @@ dependencies:
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
69
  - !ruby/object:Gem::Dependency
70
- name: rubocop-rspec
70
+ name: rubocop
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - ">="
@@ -81,7 +81,7 @@ dependencies:
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
83
  - !ruby/object:Gem::Dependency
84
- name: solidus_core
84
+ name: rubocop-rspec
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - ">="
@@ -108,7 +108,7 @@ dependencies:
108
108
  - - ">="
109
109
  - !ruby/object:Gem::Version
110
110
  version: '0'
111
- description:
111
+ description:
112
112
  email: john@stembolt.com
113
113
  executables: []
114
114
  extensions: []
@@ -129,10 +129,10 @@ files:
129
129
  - bin/setup
130
130
  - lib/solidus_support.rb
131
131
  - lib/solidus_support/engine_extensions.rb
132
- - lib/solidus_support/engine_extensions/decorators.rb
133
132
  - lib/solidus_support/migration.rb
134
133
  - lib/solidus_support/version.rb
135
134
  - solidus_support.gemspec
135
+ - spec/examples.txt
136
136
  - spec/solidus_support_spec.rb
137
137
  - spec/spec_helper.rb
138
138
  - spec/support/dummy_app.rb
@@ -141,7 +141,7 @@ homepage: https://github.com/solidusio/solidus_support
141
141
  licenses:
142
142
  - BSD-3-Clause
143
143
  metadata: {}
144
- post_install_message:
144
+ post_install_message:
145
145
  rdoc_options: []
146
146
  require_paths:
147
147
  - lib
@@ -156,12 +156,13 @@ required_rubygems_version: !ruby/object:Gem::Requirement
156
156
  - !ruby/object:Gem::Version
157
157
  version: '0'
158
158
  requirements: []
159
- rubygems_version: 3.0.6
160
- signing_key:
159
+ rubygems_version: 3.1.4
160
+ signing_key:
161
161
  specification_version: 4
162
162
  summary: Common runtime helpers for Solidus extensions.
163
163
  test_files:
164
164
  - spec/spec_helper.rb
165
+ - spec/examples.txt
165
166
  - spec/solidus_support_spec.rb
166
167
  - spec/support/dummy_app.rb
167
168
  - spec/support/dummy_app/database.yml
@@ -1,37 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module SolidusSupport
4
- module EngineExtensions
5
- module Decorators
6
- def self.included(engine)
7
- engine.class_eval do
8
- extend ClassMethods
9
- config.to_prepare(&method(:activate).to_proc)
10
- end
11
- end
12
-
13
- module ClassMethods
14
- def activate
15
- base_path = root.join('app/decorators')
16
-
17
- if Rails.respond_to?(:autoloaders) && Rails.autoloaders.main
18
- # Add decorators folder to the Rails autoloader. This
19
- # allows Zeitwerk to resolve decorators paths correctly,
20
- # when used.
21
- Dir.glob(base_path.join('*')) do |decorators_folder|
22
- Rails.autoloaders.main.push_dir(decorators_folder)
23
- end
24
- end
25
-
26
- # Load decorator files. This is needed since they are
27
- # never explicitely referenced in the application code
28
- # and won't be loaded by default. We need them to be
29
- # executed anyway to extend exisiting classes.
30
- Dir.glob(base_path.join('**/*.rb')) do |decorator_path|
31
- require_dependency(decorator_path)
32
- end
33
- end
34
- end
35
- end
36
- end
37
- end