alchemy-solidus 5.0.0 → 6.0.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: a62c5d703fd9ef1302e57ebf2ae840d8adf6646600d402e171bc2f4e51fc8bc3
4
- data.tar.gz: a6c8ada063c962cc66c59841c98f3c8295973d013bebe5d3551643be41315be8
3
+ metadata.gz: 16a15dfe376f96cd10368b80600ecd90db0883f2c49b82d34494d0d7cbd11e2d
4
+ data.tar.gz: 58eb94228f3a082ca8f7e0b38132c894edccdb4a64e352efe7968516fc43dd99
5
5
  SHA512:
6
- metadata.gz: f3708d87a8af2485baa75a73a6e680d40395a8e0bf35a4e236991b9f1366c1c238bfd2ec79e2660bc14bfcbcd47887c08de14b8ca002ff0837eaefea7d873386
7
- data.tar.gz: cee5253f162afdce10025ddd8167507f68cb9c296128cb6647cd30c89ac3fcde099e5d635b80fd7aeafc91763b3fd594c7d300d1691f99b527b1433cfaed4e36
6
+ metadata.gz: ef6b3b8d01fff1ee7fbfb25fc9813bbffc192af8481e21e4f4b49ba73b9f14509d50de621947a925a06a6a51df5cd1eeb5c3a765942fd4f78ac3d72e17b722f5
7
+ data.tar.gz: b1fbae3de6f3d2aef1b2cca13e95298e845baac85fb60cf3c4db123b63ff6ee9b41c5f9a2f70619a556d11b38e01fb84ce52c6e698d275f7b8a38345f9f47418
data/Rakefile CHANGED
@@ -10,16 +10,25 @@ require "rspec/core"
10
10
  require "rspec/core/rake_task"
11
11
  RSpec::Core::RakeTask.new(:spec)
12
12
 
13
- task default: [:test_setup, :spec]
13
+ task default: %i[test_setup spec]
14
14
 
15
15
  require "active_support/core_ext/string"
16
16
 
17
17
  desc "Setup test app"
18
18
  task :test_setup do
19
19
  solidus_version = ENV.fetch("SOLIDUS_VERSION", "3.2")
20
- solidus_32_install_options = "--payment-method none --frontend none --no-with-authentication"
21
- solidus_33_install_options = "--payment-method none --frontend none --authentication none"
22
- solidus_install_options = solidus_version == "3.2" ? solidus_32_install_options : solidus_33_install_options
20
+ solidus_32_install_options =
21
+ "--payment-method none --frontend none --no-with-authentication"
22
+ solidus_33_install_options =
23
+ "--payment-method none --frontend none --authentication none"
24
+ solidus_install_options =
25
+ (
26
+ if solidus_version == "3.2"
27
+ solidus_32_install_options
28
+ else
29
+ solidus_33_install_options
30
+ end
31
+ )
23
32
  Dir.chdir("spec/dummy") do
24
33
  system <<-SETUP.strip_heredoc
25
34
  bin/rake db:environment:set db:drop && \
@@ -27,8 +36,10 @@ task :test_setup do
27
36
  bin/rails g gutentag:migration_versions && \
28
37
  bin/rails g solidus:install --force --auto-accept --no-seed --no-sample #{solidus_install_options} && \
29
38
  bin/rails g solidus_frontend:install --force --auto-accept && \
30
- bin/rails g alchemy:solidus:install --auto-accept --force && \
31
- bin/rake db:test:prepare
39
+ bin/rails javascript:install:esbuild && \
40
+ bin/rails g alchemy:solidus:install --auto-accept --skip && \
41
+ bin/rake db:test:prepare && \
42
+ bin/rails javascript:build
32
43
  SETUP
33
44
  exit($?.exitstatus) unless $?.success?
34
45
  end
@@ -1,32 +1,37 @@
1
1
  //= require alchemy/solidus/admin/select2_config
2
2
 
3
- $.fn.alchemyProductSelect = function(options) {
3
+ $.fn.alchemyProductSelect = function (options) {
4
4
  var config = Alchemy.Solidus.getSelect2Config(options)
5
5
 
6
- this.select2($.extend(true, config, {
7
- ajax: {
8
- data: function(term, page) {
6
+ function formatResultObject(product) {
7
+ return {
8
+ id: product.id,
9
+ text: product.name,
10
+ }
11
+ }
12
+
13
+ var select2config = Object.assign(config, {
14
+ ajax: Object.assign(config.ajax, {
15
+ data: function (term, page) {
9
16
  return {
10
- q: $.extend({
11
- name_cont: term
12
- }, options.query_params),
13
- page: page
17
+ q: Object.assign(
18
+ {
19
+ name_cont: term,
20
+ },
21
+ options.query_params
22
+ ),
23
+ page: page,
14
24
  }
15
25
  },
16
- results: function(data, page) {
26
+ results: function (data, page) {
17
27
  return {
18
- results: data.products.map(function(product) {
19
- return {
20
- id: product.id,
21
- text: product.name
22
- }
23
- }),
24
- more: page * data.per_page < data.total_count
28
+ results: data.products.map(
29
+ options.formatResultObject || formatResultObject
30
+ ),
31
+ more: page * data.per_page < data.total_count,
25
32
  }
26
- }
27
- },
28
- formatSelection: function(product) {
29
- return product.text || product.name
30
- }
31
- }))
33
+ },
34
+ }),
35
+ })
36
+ this.select2(select2config)
32
37
  }
@@ -1,24 +1,26 @@
1
1
  Alchemy = window.Alchemy || {}
2
2
  Alchemy.Solidus = Alchemy.Solidus || {}
3
3
 
4
- Alchemy.Solidus.getSelect2Config = function(options) {
4
+ Alchemy.Solidus.getSelect2Config = function (options) {
5
5
  var headers = {
6
- 'Authorization': 'Bearer ' + options.apiToken
6
+ Authorization: "Bearer " + options.apiToken,
7
7
  }
8
8
 
9
9
  return {
10
10
  placeholder: options.placeholder,
11
11
  minimumInputLength: 3,
12
- initSelection: function(_$el, callback) {
13
- if (options.initialSelection) {
14
- callback(options.initialSelection)
15
- }
16
- },
12
+ initSelection:
13
+ options.initSelection ||
14
+ function (_$el, callback) {
15
+ if (options.initialSelection) {
16
+ callback(options.initialSelection)
17
+ }
18
+ },
17
19
  ajax: {
18
20
  url: options.baseUrl,
19
- datatype: 'json',
21
+ datatype: "json",
20
22
  quietMillis: 300,
21
- params: { headers: headers }
22
- }
23
+ params: { headers: headers },
24
+ },
23
25
  }
24
26
  }
@@ -1,3 +1,4 @@
1
1
  //= require alchemy/solidus/admin/product_select
2
2
  //= require alchemy/solidus/admin/variant_select
3
3
  //= require alchemy/solidus/admin/taxon_select
4
+ //= require spree
@@ -0,0 +1,5 @@
1
+ <!-- insert_bottom "#overlay_tabs" -->
2
+
3
+ <div id="overlay_tab_product_link">
4
+ <%= render "product_link" %>
5
+ </div>
@@ -0,0 +1,7 @@
1
+ <!-- insert_bottom "#overlay_tabs > ul" -->
2
+
3
+ <li>
4
+ <a href="#overlay_tab_product_link">
5
+ <%= Alchemy.t('link_overlay_tab_label.product') %>
6
+ </a>
7
+ </li>
@@ -0,0 +1,30 @@
1
+ <%= form_tag do %>
2
+ <%= render_message do %>
3
+ <h3><%= Alchemy.t(:choose_product_to_link) %></h3>
4
+ <% end %>
5
+ <div class="input select">
6
+ <label for="product_link" class="control-label">
7
+ <%= Spree::Product.model_name.human %>
8
+ </label>
9
+ <input type="text" id="product_link" class="alchemy_selectbox full_width">
10
+ </div>
11
+ <div class="input text">
12
+ <label for="product_link_title" class="control-label">
13
+ <%= Alchemy.t(:link_title) %>
14
+ </label>
15
+ <%= text_field_tag "product_link_title", '', class: 'link_title' %>
16
+ </div>
17
+ <div class="input select">
18
+ <label for="product_link_target" class="control-label">
19
+ <%= Alchemy.t("Open Link in") %>
20
+ </label>
21
+ <%= select_tag 'product_link_target',
22
+ options_for_select(Alchemy::Page.link_target_options),
23
+ class: 'alchemy_selectbox link_target' %>
24
+ </div>
25
+ <div class="submit">
26
+ <%= button_tag Alchemy.t(:apply), class: 'create-link button', data: { link_type: 'product' } %>
27
+ </div>
28
+ <% end %>
29
+
30
+ <%= render "product_link_script" %>
@@ -0,0 +1,41 @@
1
+ <script>
2
+ $("#overlay_tabs").on("SelectLinkTab.Alchemy", function(event, data) {
3
+ $("#product_link").select2("val", data.link.attr("href"))
4
+ })
5
+ $("#product_link").alchemyProductSelect({
6
+ placeholder: "<%= Alchemy.t(:search_product, scope: "solidus") %>",
7
+ apiToken: "<%= current_alchemy_user.spree_api_key %>",
8
+ baseUrl: "<%= spree.api_products_path %>",
9
+ formatResultObject(product) {
10
+ return {
11
+ id: Spree.mountedAt() + "products/"+ product.slug,
12
+ text: product.name,
13
+ }
14
+ },
15
+ initSelection($element, callback) {
16
+ var query = $element.val().replace(Spree.mountedAt() + "products/", "")
17
+ $.ajax({
18
+ url: "<%= spree.api_products_path %>",
19
+ data: {
20
+ q: { slug_eq: query },
21
+ page: 1,
22
+ per_page: 1
23
+ },
24
+ headers: {
25
+ Authorization: "Bearer <%= current_alchemy_user.spree_api_key %>"
26
+ }
27
+ }).done(function(data) {
28
+ var product = data.products[0]
29
+ if (product) {
30
+ callback({
31
+ id: Spree.mountedAt() + "products/"+ product.slug,
32
+ text: product.name
33
+ })
34
+ $("#overlay_tabs").tabs("option", "active",
35
+ $("#overlay_tabs > div").index($("#overlay_tab_product_link"))
36
+ )
37
+ }
38
+ })
39
+ },
40
+ })
41
+ </script>
@@ -1,5 +1,8 @@
1
1
  en:
2
2
  alchemy:
3
+ choose_product_to_link: Choose a product to link to
4
+ link_overlay_tab_label:
5
+ product: Product
3
6
  solidus:
4
7
  search_variant: Search a variant by name or sku
5
8
  search_product: Search a product by name
@@ -1,5 +1,5 @@
1
1
  module Alchemy
2
2
  module Solidus
3
- VERSION = "5.0.0"
3
+ VERSION = "6.0.0"
4
4
  end
5
5
  end
@@ -1,17 +1,17 @@
1
- require 'rails/generators'
2
- require 'alchemy/version'
1
+ require "rails/generators"
2
+ require "alchemy/version"
3
3
 
4
4
  if Alchemy.gem_version >= Gem::Version.new("5.0.0.a")
5
- require 'generators/alchemy/install/install_generator'
5
+ require "generators/alchemy/install/install_generator"
6
6
  else
7
- require 'rails/generators/alchemy/install/install_generator'
7
+ require "rails/generators/alchemy/install/install_generator"
8
8
  end
9
9
 
10
- require 'generators/spree/custom_user/custom_user_generator'
11
- require 'solidus_support'
10
+ require "generators/spree/custom_user/custom_user_generator"
11
+ require "solidus_support"
12
12
 
13
13
  begin
14
- require 'generators/alchemy/devise/install/install_generator'
14
+ require "generators/alchemy/devise/install/install_generator"
15
15
  rescue LoadError
16
16
  end
17
17
 
@@ -21,46 +21,81 @@ module Alchemy
21
21
  SPREE_MOUNT_REGEXP = /mount\sSpree::Core::Engine.*$/
22
22
  desc "Installs Alchemy Solidus into your App."
23
23
 
24
- class_option :skip_alchemy_installer, default: false, type: :boolean,
25
- desc: "Set true if you don't want to run the Alchemy installer"
26
- class_option :skip_alchemy_devise_installer, default: false, type: :boolean,
27
- desc: "Set true if you don't want to run the Alchemy Devise installer. NOTE: Automatically skipped if Alchemy::Devise is not available."
28
- class_option :skip_spree_custom_user_generator, default: false, type: :boolean,
29
- desc: "Set true if you don't want to run the Solidus custom user generator. NOTE: Automatically skipped if Alchemy::Devise is not available."
30
- class_option :skip_alchemy_user_generator, default: false, type: :boolean,
31
- desc: "Set true if you don't want to generate an admin user. NOTE: Automatically skipped if Alchemy::Devise is not available."
32
- class_option :auto_accept, default: false, type: :boolean,
33
- desc: 'Set true if run from a automated script (ie. on a CI)'
34
-
35
- source_root File.expand_path('files', __dir__)
24
+ class_option :skip_alchemy_installer,
25
+ default: false,
26
+ type: :boolean,
27
+ desc:
28
+ "Set true if you don't want to run the Alchemy installer"
29
+ class_option :skip_alchemy_devise_installer,
30
+ default: false,
31
+ type: :boolean,
32
+ desc:
33
+ "Set true if you don't want to run the Alchemy Devise installer. NOTE: Automatically skipped if Alchemy::Devise is not available."
34
+ class_option :skip_spree_custom_user_generator,
35
+ default: false,
36
+ type: :boolean,
37
+ desc:
38
+ "Set true if you don't want to run the Solidus custom user generator. NOTE: Automatically skipped if Alchemy::Devise is not available."
39
+ class_option :skip_alchemy_user_generator,
40
+ default: false,
41
+ type: :boolean,
42
+ desc:
43
+ "Set true if you don't want to generate an admin user. NOTE: Automatically skipped if Alchemy::Devise is not available."
44
+ class_option :auto_accept,
45
+ default: false,
46
+ type: :boolean,
47
+ desc: "Set true if run from a automated script (ie. on a CI)"
48
+
49
+ source_root File.expand_path("files", __dir__)
36
50
 
37
51
  def run_alchemy_installer
38
52
  unless options[:skip_alchemy_installer]
39
- arguments = options[:auto_accept] ? ['--skip-demo-files', '--force', '--auto-accept'] : []
53
+ arguments =
54
+ (
55
+ if options[:auto_accept]
56
+ %w[--skip-demo-files --skip --auto-accept]
57
+ else
58
+ []
59
+ end
60
+ )
40
61
  Alchemy::Generators::InstallGenerator.start(arguments)
41
- rake('railties:install:migrations', abort_on_failure: true)
42
- rake('db:migrate', abort_on_failure: true)
62
+ rake("railties:install:migrations", abort_on_failure: true)
63
+ rake("db:migrate", abort_on_failure: true)
43
64
  end
44
65
  end
45
66
 
46
67
  def run_alchemy_devise_installer
47
68
  if alchemy_devise_present? && !options[:skip_alchemy_devise_installer]
48
- arguments = options[:auto_accept] ? ['--force'] : []
69
+ arguments = options[:auto_accept] ? ["--force"] : []
49
70
  Alchemy::Devise::Generators::InstallGenerator.start(arguments)
50
71
  end
51
72
  end
52
73
 
53
74
  def run_spree_custom_user_generator
54
- if alchemy_devise_present? && !options[:skip_spree_custom_user_generator]
55
- arguments = options[:auto_accept] ? ['Alchemy::User', '--force'] : ['Alchemy::User']
75
+ if alchemy_devise_present? &&
76
+ !options[:skip_spree_custom_user_generator]
77
+ arguments =
78
+ (
79
+ if options[:auto_accept]
80
+ %w[Alchemy::User --force]
81
+ else
82
+ ["Alchemy::User"]
83
+ end
84
+ )
56
85
  Spree::CustomUserGenerator.start(arguments)
57
- gsub_file 'lib/spree/authentication_helpers.rb', /main_app\./, 'Alchemy.'
58
- rake('db:migrate', abort_on_failure: true)
86
+ gsub_file "lib/spree/authentication_helpers.rb",
87
+ /main_app\./,
88
+ "Alchemy."
89
+ rake("db:migrate", abort_on_failure: true)
59
90
  end
60
91
  end
61
92
 
62
93
  def inject_admin_tab
63
- inject_into_file 'config/initializers/spree.rb', {after: "Spree::Backend::Config.configure do |config|\n"} do
94
+ inject_into_file "config/initializers/spree.rb",
95
+ {
96
+ after:
97
+ "Spree::Backend::Config.configure do |config|\n"
98
+ } do
64
99
  <<~ADMIN_TAB
65
100
  \ # AlchemyCMS admin tabs
66
101
  \ config.menu_items << config.class::MenuItem.new(
@@ -77,64 +112,74 @@ module Alchemy
77
112
  end
78
113
 
79
114
  def create_admin_user
80
- if alchemy_devise_present? && !options[:skip_alchemy_user_generator] && Alchemy::User.count.zero?
81
- login = ENV.fetch('ALCHEMY_ADMIN_USER_LOGIN', 'admin')
82
- email = ENV.fetch('ALCHEMY_ADMIN_USER_EMAIL', 'admin@example.com')
83
- password = ENV.fetch('ALCHEMY_ADMIN_USER_PASSWORD', 'test1234')
115
+ if alchemy_devise_present? && !options[:skip_alchemy_user_generator] &&
116
+ Alchemy::User.count.zero?
117
+ login = ENV.fetch("ALCHEMY_ADMIN_USER_LOGIN", "admin")
118
+ email = ENV.fetch("ALCHEMY_ADMIN_USER_EMAIL", "admin@example.com")
119
+ password = ENV.fetch("ALCHEMY_ADMIN_USER_PASSWORD", "test1234")
84
120
  unless options[:auto_accept]
85
- login = ask("\nEnter the username for the admin user", default: login)
121
+ login =
122
+ ask("\nEnter the username for the admin user", default: login)
86
123
  email = ask("Enter the email for the admin user", default: email)
87
- password = ask("Enter the password for the admin user", default: password)
124
+ password =
125
+ ask("Enter the password for the admin user", default: password)
88
126
  end
89
127
 
90
128
  # This is a bit strange, but without the double save this fails with a failed validation.
91
- Alchemy::User.create!(
92
- login: login,
93
- email: email,
94
- password: password,
95
- password_confirmation: password,
96
- alchemy_roles: 'admin'
97
- ).tap do |user|
98
- user.spree_roles = [Spree::Role.find_or_create_by!(name: 'admin')]
99
- user.save!
100
- end
129
+ Alchemy::User
130
+ .create!(
131
+ login: login,
132
+ email: email,
133
+ password: password,
134
+ password_confirmation: password,
135
+ alchemy_roles: "admin"
136
+ )
137
+ .tap do |user|
138
+ user.spree_roles = [Spree::Role.find_or_create_by!(name: "admin")]
139
+ user.save!
140
+ end
101
141
  end
102
142
  end
103
143
 
104
144
  def inject_routes
105
- routes_file_path = Rails.root.join('config', 'routes.rb')
106
- mountpoint = '/'
145
+ routes_file_path = Rails.root.join("config", "routes.rb")
146
+ mountpoint = "/"
107
147
  unless options[:auto_accept]
108
- mountpoint = ask("\nAt which path do you want to mount AlchemyCMS at?", default: mountpoint)
148
+ mountpoint =
149
+ ask(
150
+ "\nAt which path do you want to mount AlchemyCMS at?",
151
+ default: mountpoint
152
+ )
109
153
  end
110
154
  if File.read(routes_file_path).match SPREE_MOUNT_REGEXP
111
155
  sentinel = SPREE_MOUNT_REGEXP
112
156
  else
113
157
  sentinel = "Rails.application.routes.draw do\n"
114
158
  end
115
- inject_into_file routes_file_path, {after: sentinel} do
116
- "\n mount Alchemy::Engine, at: '/#{mountpoint.chomp('/')}'\n"
159
+ inject_into_file routes_file_path, { after: sentinel } do
160
+ "\n mount Alchemy::Engine, at: '/#{mountpoint.chomp("/")}'\n"
117
161
  end
118
162
  end
119
163
 
120
164
  def set_root_route
121
- routes_file_path = Rails.root.join('config', 'routes.rb')
122
- if options[:auto_accept] || yes?("\nDo you want Alchemy to handle the root route '/'? (y/n)")
165
+ routes_file_path = Rails.root.join("config", "routes.rb")
166
+ if options[:auto_accept] ||
167
+ yes?("\nDo you want Alchemy to handle the root route '/'? (y/n)")
123
168
  sentinel = "Rails.application.routes.draw do\n"
124
- inject_into_file routes_file_path, {after: sentinel} do
169
+ inject_into_file routes_file_path, { after: sentinel } do
125
170
  <<~ROOT_ROUTE
126
171
  \ # Let AlchemyCMS handle the root route
127
172
  \ root to: 'alchemy/pages#index'
128
173
  ROOT_ROUTE
129
174
  end
130
- copy_file('db/seeds/alchemy/pages.yml')
131
- rake('alchemy:db:seed', abort_on_failure: true)
175
+ copy_file("db/seeds/alchemy/pages.yml")
176
+ rake("alchemy:db:seed", abort_on_failure: true)
132
177
  end
133
178
  end
134
179
 
135
180
  def append_assets
136
181
  append_file "vendor/assets/javascripts/alchemy/admin/all.js",
137
- "//= require alchemy/solidus/admin.js"
182
+ "//= require alchemy/solidus/admin.js"
138
183
  end
139
184
 
140
185
  private
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: alchemy-solidus
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.0.0
4
+ version: 6.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Thomas von Deyen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-03-30 00:00:00.000000000 Z
11
+ date: 2023-04-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: alchemy_cms
@@ -16,20 +16,20 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 6.0.0
19
+ version: 7.0.0.a
20
20
  - - "<"
21
21
  - !ruby/object:Gem::Version
22
- version: '7'
22
+ version: '8'
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
26
26
  requirements:
27
27
  - - ">="
28
28
  - !ruby/object:Gem::Version
29
- version: 6.0.0
29
+ version: 7.0.0.a
30
30
  - - "<"
31
31
  - !ruby/object:Gem::Version
32
- version: '7'
32
+ version: '8'
33
33
  - !ruby/object:Gem::Dependency
34
34
  name: solidus_core
35
35
  requirement: !ruby/object:Gem::Requirement
@@ -104,14 +104,14 @@ dependencies:
104
104
  requirements:
105
105
  - - "~>"
106
106
  - !ruby/object:Gem::Version
107
- version: '5.0'
107
+ version: '6.0'
108
108
  type: :development
109
109
  prerelease: false
110
110
  version_requirements: !ruby/object:Gem::Requirement
111
111
  requirements:
112
112
  - - "~>"
113
113
  - !ruby/object:Gem::Version
114
- version: '5.0'
114
+ version: '6.0'
115
115
  - !ruby/object:Gem::Dependency
116
116
  name: shoulda-matchers
117
117
  requirement: !ruby/object:Gem::Requirement
@@ -132,14 +132,14 @@ dependencies:
132
132
  requirements:
133
133
  - - "~>"
134
134
  - !ruby/object:Gem::Version
135
- version: '2.15'
135
+ version: '3.0'
136
136
  type: :development
137
137
  prerelease: false
138
138
  version_requirements: !ruby/object:Gem::Requirement
139
139
  requirements:
140
140
  - - "~>"
141
141
  - !ruby/object:Gem::Version
142
- version: '2.15'
142
+ version: '3.0'
143
143
  - !ruby/object:Gem::Dependency
144
144
  name: capybara-screenshot
145
145
  requirement: !ruby/object:Gem::Requirement
@@ -196,6 +196,54 @@ dependencies:
196
196
  - - ">="
197
197
  - !ruby/object:Gem::Version
198
198
  version: '0'
199
+ - !ruby/object:Gem::Dependency
200
+ name: selenium-webdriver
201
+ requirement: !ruby/object:Gem::Requirement
202
+ requirements:
203
+ - - "~>"
204
+ - !ruby/object:Gem::Version
205
+ version: '4.8'
206
+ - - ">="
207
+ - !ruby/object:Gem::Version
208
+ version: 4.8.3
209
+ type: :development
210
+ prerelease: false
211
+ version_requirements: !ruby/object:Gem::Requirement
212
+ requirements:
213
+ - - "~>"
214
+ - !ruby/object:Gem::Version
215
+ version: '4.8'
216
+ - - ">="
217
+ - !ruby/object:Gem::Version
218
+ version: 4.8.3
219
+ - !ruby/object:Gem::Dependency
220
+ name: puma
221
+ requirement: !ruby/object:Gem::Requirement
222
+ requirements:
223
+ - - "~>"
224
+ - !ruby/object:Gem::Version
225
+ version: '6.0'
226
+ type: :development
227
+ prerelease: false
228
+ version_requirements: !ruby/object:Gem::Requirement
229
+ requirements:
230
+ - - "~>"
231
+ - !ruby/object:Gem::Version
232
+ version: '6.0'
233
+ - !ruby/object:Gem::Dependency
234
+ name: webdrivers
235
+ requirement: !ruby/object:Gem::Requirement
236
+ requirements:
237
+ - - "~>"
238
+ - !ruby/object:Gem::Version
239
+ version: '5.0'
240
+ type: :development
241
+ prerelease: false
242
+ version_requirements: !ruby/object:Gem::Requirement
243
+ requirements:
244
+ - - "~>"
245
+ - !ruby/object:Gem::Version
246
+ version: '5.0'
199
247
  description: A AlchemyCMS and Solidus integration
200
248
  email:
201
249
  - thomas@vondeyen.com
@@ -211,18 +259,13 @@ files:
211
259
  - app/assets/javascripts/alchemy/solidus/admin/select2_config.js
212
260
  - app/assets/javascripts/alchemy/solidus/admin/taxon_select.js
213
261
  - app/assets/javascripts/alchemy/solidus/admin/variant_select.js
214
- - app/models/alchemy/essence_spree_product.rb
215
- - app/models/alchemy/essence_spree_taxon.rb
216
- - app/models/alchemy/essence_spree_variant.rb
217
262
  - app/models/alchemy/ingredients/spree_product.rb
218
263
  - app/models/alchemy/ingredients/spree_taxon.rb
219
264
  - app/models/alchemy/ingredients/spree_variant.rb
220
- - app/views/alchemy/essences/_essence_spree_product_editor.html.erb
221
- - app/views/alchemy/essences/_essence_spree_product_view.html.erb
222
- - app/views/alchemy/essences/_essence_spree_taxon_editor.html.erb
223
- - app/views/alchemy/essences/_essence_spree_taxon_view.html.erb
224
- - app/views/alchemy/essences/_essence_spree_variant_editor.html.erb
225
- - app/views/alchemy/essences/_essence_spree_variant_view.html.erb
265
+ - app/overrides/alchemy/admin/pages/link/product_link.html.erb.deface
266
+ - app/overrides/alchemy/admin/pages/link/product_link_tab.html.erb.deface
267
+ - app/views/alchemy/admin/pages/_product_link.html.erb
268
+ - app/views/alchemy/admin/pages/_product_link_script.html.erb
226
269
  - app/views/alchemy/ingredients/_spree_product_editor.html.erb
227
270
  - app/views/alchemy/ingredients/_spree_product_view.html.erb
228
271
  - app/views/alchemy/ingredients/_spree_taxon_editor.html.erb
@@ -268,7 +311,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
268
311
  - !ruby/object:Gem::Version
269
312
  version: '0'
270
313
  requirements: []
271
- rubygems_version: 3.4.6
314
+ rubygems_version: 3.3.26
272
315
  signing_key:
273
316
  specification_version: 4
274
317
  summary: The World's Most Flexible E-Commerce Platform meets The World's Most Flexible
@@ -1,30 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Alchemy
4
- class EssenceSpreeProduct < ActiveRecord::Base
5
- PRODUCT_ID = /\A\d+\z/
6
-
7
- belongs_to :product,
8
- class_name: "Spree::Product",
9
- optional: true,
10
- foreign_key: "spree_product_id"
11
-
12
- acts_as_essence(ingredient_column: :product)
13
-
14
- def ingredient=(product_or_id)
15
- case product_or_id
16
- when PRODUCT_ID, ""
17
- self.spree_product_id = product_or_id
18
- when Spree::Product
19
- self.product = product_or_id
20
- else
21
- super
22
- end
23
- end
24
-
25
- def preview_text(_maxlength)
26
- return unless product
27
- product.name
28
- end
29
- end
30
- end
@@ -1,30 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Alchemy
4
- class EssenceSpreeTaxon < ActiveRecord::Base
5
- TAXON_ID = /\A\d+\z/
6
-
7
- belongs_to :taxon,
8
- class_name: "Spree::Taxon",
9
- optional: true,
10
- foreign_key: "taxon_id"
11
-
12
- acts_as_essence(ingredient_column: :taxon)
13
-
14
- def ingredient=(taxon_or_id)
15
- case taxon_or_id
16
- when TAXON_ID, ""
17
- self.taxon_id = taxon_or_id
18
- when Spree::Taxon
19
- self.taxon = taxon_or_id
20
- else
21
- super
22
- end
23
- end
24
-
25
- def preview_text(_maxlength)
26
- return unless taxon
27
- taxon.name
28
- end
29
- end
30
- end
@@ -1,29 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Alchemy
4
- class EssenceSpreeVariant < ActiveRecord::Base
5
- VARIANT_ID = /\A\d+\z/
6
-
7
- belongs_to :variant,
8
- class_name: "Spree::Variant",
9
- optional: true
10
-
11
- acts_as_essence(ingredient_column: :variant)
12
-
13
- def ingredient=(variant_or_id)
14
- case variant_or_id
15
- when VARIANT_ID, ""
16
- self.variant_id = variant_or_id
17
- when Spree::Variant
18
- self.variant = variant_or_id
19
- else
20
- super
21
- end
22
- end
23
-
24
- def preview_text(_maxlength)
25
- return unless variant
26
- variant.descriptive_name
27
- end
28
- end
29
- end
@@ -1,26 +0,0 @@
1
- <% content ||= local_assigns[:content] || local_assigns[:essence_spree_product_editor] %>
2
-
3
- <div class="content_editor essence_spree_product" id="<%= content.dom_id %>" data-content-id="<%= content.id %>">
4
- <%= content_label(content) %>
5
- <%= text_field_tag(
6
- content.form_field_name,
7
- content.essence.spree_product_id,
8
- id: content.form_field_id,
9
- class: 'alchemy_selectbox full_width'
10
- ) %>
11
- </div>
12
-
13
- <script>
14
- $('#<%= content.form_field_id %>').alchemyProductSelect({
15
- placeholder: "<%= Alchemy.t(:search_product, scope: 'solidus') %>",
16
- apiToken: "<%= current_alchemy_user.spree_api_key %>",
17
- baseUrl: "<%= spree.api_products_path %>",
18
- query_params: <%== content.settings[:query_params].to_json %>,
19
- <% if content.essence.product %>
20
- initialSelection: {
21
- id: <%= content.essence.spree_product_id %>,
22
- text: "<%= content.essence.product.name %>"
23
- }
24
- <% end %>
25
- })
26
- </script>
@@ -1,26 +0,0 @@
1
- <% content ||= local_assigns[:content] || local_assigns[:essence_spree_taxon_editor] %>
2
-
3
- <div class="content_editor essence_spree_taxon" id="<%= content.dom_id %>" data-content-id="<%= content.id %>">
4
- <%= content_label(content) %>
5
- <%= text_field_tag(
6
- content.form_field_name,
7
- content.essence.taxon_id,
8
- id: content.form_field_id,
9
- class: 'alchemy_selectbox full_width'
10
- ) %>
11
- </div>
12
-
13
- <script>
14
- $('#<%= content.form_field_id %>').alchemyTaxonSelect({
15
- placeholder: "<%= Alchemy.t(:search_taxon, scope: 'solidus') %>",
16
- apiToken: "<%= current_alchemy_user.spree_api_key %>",
17
- baseUrl: "<%= spree.api_taxons_path %>",
18
- query_params: <%== content.settings[:query_params].to_json %>,
19
- <% if content.essence.taxon %>
20
- initialSelection: {
21
- id: <%= content.essence.taxon_id %>,
22
- text: "<%= content.essence.taxon.pretty_name %>"
23
- }
24
- <% end %>
25
- })
26
- </script>
@@ -1,26 +0,0 @@
1
- <% content ||= local_assigns[:content] || local_assigns[:essence_spree_variant_editor] %>
2
-
3
- <div class="content_editor essence_spree_variant" id="<%= content.dom_id %>" data-content-id="<%= content.id %>">
4
- <%= content_label(content) %>
5
- <%= text_field_tag(
6
- content.form_field_name,
7
- content.essence.variant_id,
8
- id: content.form_field_id,
9
- class: 'alchemy_selectbox full_width'
10
- ) %>
11
- </div>
12
-
13
- <script>
14
- $('#<%= content.form_field_id %>').alchemyVariantSelect({
15
- placeholder: "<%= Alchemy.t(:search_variant, scope: 'solidus') %>",
16
- apiToken: "<%= current_alchemy_user.spree_api_key %>",
17
- baseUrl: "<%= spree.api_variants_path %>",
18
- query_params: <%== content.settings[:query_params].to_json %>,
19
- <% if content.essence.variant %>
20
- initialSelection: {
21
- id: <%= content.essence.variant_id %>,
22
- text: "<%= content.essence.variant.name %>"
23
- }
24
- <% end %>
25
- })
26
- </script>