ba_spree 1.0.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 +7 -0
- data/LICENSE +673 -0
- data/README.md +150 -0
- data/app/assets/config/manifest.js +1 -0
- data/app/assets/javascripts/ba_spree/admin_overrides/query_builder_controller.js +505 -0
- data/app/assets/javascripts/ba_spree/storefront/ba_spree_local_time.js +9 -0
- data/app/assets/stylesheets/spree/admin/custom.scss +40 -0
- data/app/controllers/ba_spree/checkout_controller_decorator.rb +111 -0
- data/app/controllers/ba_spree/store_controller_decorator.rb +55 -0
- data/app/controllers/concerns/ba_spree/theme_concern_decorator.rb +16 -0
- data/app/controllers/spree/admin/assets_controller_decorator.rb +48 -0
- data/app/controllers/spree/admin/products_controller_decorator.rb +25 -0
- data/app/controllers/spree/admin/promotion_rules_controller_decorator.rb +30 -0
- data/app/controllers/spree/admin/users_controller_decorator.rb +34 -0
- data/app/controllers/spree/contacts_controller_decorator.rb +23 -0
- data/app/controllers/spree/digital_links_controller.rb +61 -0
- data/app/controllers/spree/orders_controller_decorator.rb +24 -0
- data/app/decorators/ba_spree/product_pricing_decorator.rb +65 -0
- data/app/decorators/spree/current_decorator.rb +17 -0
- data/app/decorators/spree/money_decorator.rb +51 -0
- data/app/decorators/spree/order_email_subscriber_decorator.rb +64 -0
- data/app/decorators/spree/page_sections/featured_posts_decorator.rb +17 -0
- data/app/helpers/currency_rounding_helper.rb +10 -0
- data/app/helpers/spree/admin/filter_params_preservation.rb +130 -0
- data/app/helpers/spree/admin/navigation_helper_decorator.rb +23 -0
- data/app/helpers/spree/admin/promotion_rules_helper_decorator.rb +33 -0
- data/app/helpers/spree/admin/table_helper_decorator.rb +40 -0
- data/app/helpers/spree/base_helper_decorator.rb +63 -0
- data/app/helpers/spree/checkout_analytics_helper_decorator.rb +32 -0
- data/app/javascript/ba_spree/controllers/disable_when_hidden_controller.js +70 -0
- data/app/javascript/ba_spree/index.js +11 -0
- data/app/javascript/spree/admin/controllers/calendar_range_controller.js +61 -0
- data/app/javascript/spree/admin/controllers/slug_form_controller.js +17 -0
- data/app/models/ba_spree/address_decorator.rb +43 -0
- data/app/models/ba_spree/adjustment_decorator.rb +13 -0
- data/app/models/ba_spree/order_decorator.rb +95 -0
- data/app/models/ba_spree/order_updater_decorator.rb +33 -0
- data/app/models/ba_spree/payment_method_decorator.rb +10 -0
- data/app/models/ba_spree/product_decorator.rb +44 -0
- data/app/models/ba_spree/store_decorator.rb +23 -0
- data/app/models/ba_spree/variant_decorator.rb +49 -0
- data/app/models/concerns/spree/adjustment_source_decorator.rb +66 -0
- data/app/models/concerns/spree/product_property_metafields.rb +52 -0
- data/app/models/spree/adjustable/adjuster/promotion_decorator.rb +16 -0
- data/app/models/spree/admin/table/filter_decorator.rb +52 -0
- data/app/models/spree/admin/table/filter_group_decorator.rb +64 -0
- data/app/models/spree/asset_decorator.rb +102 -0
- data/app/models/spree/contact_decorator.rb +22 -0
- data/app/models/spree/digital_link_decorator.rb +9 -0
- data/app/models/spree/export_decorator.rb +34 -0
- data/app/models/spree/line_item_destroy_callback_decorator.rb +30 -0
- data/app/models/spree/metafield_definition_decorator.rb +34 -0
- data/app/models/spree/option_type_decorator.rb +22 -0
- data/app/models/spree/option_value_decorator.rb +19 -0
- data/app/models/spree/option_value_variant_decorator.rb +30 -0
- data/app/models/spree/order/address_book_decorator.rb +14 -0
- data/app/models/spree/order_merger_decorator.rb +29 -0
- data/app/models/spree/price_rules/customer_group_rule_decorator.rb +18 -0
- data/app/models/spree/price_rules/user_rule_decorator.rb +25 -0
- data/app/models/spree/price_rules/volume_rule_decorator.rb +25 -0
- data/app/models/spree/price_rules/zone_rule_decorator.rb +25 -0
- data/app/models/spree/pricing/batch_resolver.rb +96 -0
- data/app/models/spree/promotion_handler/cart_decorator.rb +51 -0
- data/app/models/spree/stock/packer_decorator.rb +61 -0
- data/app/models/spree/stock/prioritizer_decorator.rb +27 -0
- data/app/models/spree/tax_rate_decorator.rb +93 -0
- data/app/models/spree/taxon_decorator.rb +42 -0
- data/app/models/spree/user_bill_address_sync_decorator.rb +33 -0
- data/app/overrides/add_ba_spree_storefront_javascript_importmap_tags.rb +8 -0
- data/app/overrides/add_cache_to_product_listing_page.rb +41 -0
- data/app/overrides/add_class_to_login_link.rb +6 -0
- data/app/overrides/add_confirm_state_to_checkout_content_block.rb.rb +30 -0
- data/app/overrides/add_promotions_nav.rb +8 -0
- data/app/overrides/add_turbo_frame_to_admin_order_line_item_edit_link.rb +23 -0
- data/app/overrides/add_turbo_frame_to_promotion_action_edit_link.rb +20 -0
- data/app/overrides/add_turbo_stream_format_to_cart_path_in_cart_pane.rb +8 -0
- data/app/overrides/ba_spree_local_time_add_custom_javascript_import_map_tags.rb +8 -0
- data/app/overrides/disable_hidden_bill_address_fields_on_payment.rb +15 -0
- data/app/overrides/disable_turbo_on_user_registration_form.rb +18 -0
- data/app/overrides/fix_coupon_apply_button_layout.rb +7 -0
- data/app/overrides/hide_gift_cards_and_store_credits_from_account_nav.rb +11 -0
- data/app/overrides/hide_shipping_message_for_digital_only_orders.rb +15 -0
- data/app/overrides/localize_apply_button_text.rb +6 -0
- data/app/overrides/localize_newsletter_button_text.rb +6 -0
- data/app/overrides/replace_announcement_bar_text.rb +6 -0
- data/app/overrides/replace_button_edit_checkout.rb +10 -0
- data/app/overrides/replace_checkout_delivery_info.rb +6 -0
- data/app/overrides/replace_checkout_pay_button_with_dynamic_label.rb +14 -0
- data/app/overrides/replace_variant_not_available_button.rb +19 -0
- data/app/overrides/set_logo_width_height_in_admin_store_basic_form.rb +12 -0
- data/app/overrides/show_breadcrumbs_on_taxon_page.rb +30 -0
- data/app/overrides/show_individual_adjustments_in_order_details.rb +18 -0
- data/app/overrides/show_only_selected_payment_method_on_confirm.rb +29 -0
- data/app/overrides/spree/admin/preserve_filter_params_across_table_forms.rb +64 -0
- data/app/overrides/spree/admin/promotion_rules/_promotion_rule/set_turbo_frame_on_edit_link.html.erb.deface +11 -0
- data/app/overrides/spree/admin/stores/add_special_instruction_message_settings.rb +17 -0
- data/app/overrides/use_absolute_time_for_order_header_completed_at.rb +15 -0
- data/app/presenters/spree/mega_nav_presenter_decorator.rb +26 -0
- data/app/services/ba_spree/setup_service.rb +144 -0
- data/app/services/spree/assets/position_normalizer.rb +67 -0
- data/app/services/spree/products/duplicator_decorator.rb +39 -0
- data/app/services/spree/products/prepare_nested_attributes_decorator.rb +58 -0
- data/app/views/spree/addresses/edit.html.erb +64 -0
- data/app/views/spree/admin/orders/_order.html.erb +32 -0
- data/app/views/spree/admin/orders/_summary.html.erb +122 -0
- data/app/views/spree/admin/shared/_custom_head.html.erb +56 -0
- data/app/views/spree/admin/shared/sidebar/_promotions_nav.html.erb +55 -0
- data/app/views/spree/admin/stores/_special_instruction_message_settings.html.erb +14 -0
- data/app/views/spree/checkout/_accept_marketing_checkbox.html.erb +40 -0
- data/app/views/spree/checkout/_address.html.erb +135 -0
- data/app/views/spree/checkout/_confirm.html.erb +25 -0
- data/app/views/spree/checkout/_line_item.html.erb +26 -0
- data/app/views/spree/checkout/_payment_method_confirm.html.erb +8 -0
- data/app/views/spree/checkout/_payment_methods.html.erb +88 -0
- data/app/views/spree/checkout/_summary.html.erb +146 -0
- data/app/views/spree/shared/_purchased_items_table.html.erb +60 -0
- data/app/views/spree/shared/_purchased_items_table.text.erb +24 -0
- data/app/views/themes/default/spree/orders/_empty.html.erb +14 -0
- data/app/views/themes/default/spree/orders/_summary.html.erb +87 -0
- data/app/views/themes/default/spree/orders/edit.turbo_stream.erb +10 -0
- data/app/views/themes/default/spree/page_sections/_featured_taxons.html.erb +38 -0
- data/app/views/themes/default/spree/page_sections/_header.html.erb +124 -0
- data/app/views/themes/default/spree/page_sections/_newsletter.html.erb +4 -0
- data/app/views/themes/default/spree/page_sections/_post_details.html.erb +22 -0
- data/app/views/themes/default/spree/page_sections/_product_details.html.erb +88 -0
- data/app/views/themes/default/spree/page_sections/_product_grid.html.erb +58 -0
- data/app/views/themes/default/spree/page_sections/nav/_desktop.html.erb +94 -0
- data/app/views/themes/default/spree/page_sections/nav/_mobile.html.erb +148 -0
- data/app/views/themes/default/spree/posts/_post.html.erb +16 -0
- data/app/views/themes/default/spree/products/_description.html.erb +7 -0
- data/app/views/themes/default/spree/products/_details.html.erb +65 -0
- data/app/views/themes/default/spree/products/_json_ld_variant.html.erb +15 -0
- data/app/views/themes/default/spree/products/_price.html.erb +76 -0
- data/app/views/themes/default/spree/products/_swiper.html.erb +90 -0
- data/app/views/themes/default/spree/shared/_account_pane.html.erb +18 -0
- data/app/views/themes/default/spree/shared/_cart_icon.html.erb +19 -0
- data/app/views/themes/default/spree/shared/_line_item_options.html.erb +9 -0
- data/app/views/themes/default/spree/shared/_logo.html.erb +39 -0
- data/app/views/themes/default/spree/shared/_nav_taxon_square_image.html.erb +8 -0
- data/app/views/themes/default/spree/shared/_order_shipment.html.erb +79 -0
- data/app/views/themes/default/spree/shared/_search.html.erb +33 -0
- data/app/views/themes/default/spree/shared/icons/_cart.html.erb +6 -0
- data/app/views/themes/default/spree/shared/icons/_cart_48.html.erb +8 -0
- data/app/views/themes/default/spree/shared/icons/_heart.html.erb +15 -0
- data/config/importmap.rb +12 -0
- data/config/initializers/admin_navigation.rb +43 -0
- data/config/initializers/spree.rb +6 -0
- data/config/initializers/spree_admin_label_i18n_alias.rb +52 -0
- data/config/initializers/spree_admin_tables.rb +57 -0
- data/config/initializers/spree_permitted_attributes.rb +1 -0
- data/config/locales/en.yml +15 -0
- data/config/locales/ja.yml +18 -0
- data/config/locales/spree.en.yml +4 -0
- data/config/locales/spree.ja.yml +3493 -0
- data/lib/ba_spree/engine.rb +41 -0
- data/lib/ba_spree/spree_events_dedup_patch.rb +44 -0
- data/lib/ba_spree/version.rb +3 -0
- data/lib/ba_spree.rb +20 -0
- data/lib/generators/ba_spree/install/install_generator.rb +85 -0
- metadata +594 -0
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
module BaSpree
|
|
2
|
+
class Engine < Rails::Engine
|
|
3
|
+
require 'spree/core'
|
|
4
|
+
isolate_namespace Spree
|
|
5
|
+
engine_name 'ba_spree'
|
|
6
|
+
|
|
7
|
+
config.autoload_paths += %W(#{config.root}/lib)
|
|
8
|
+
|
|
9
|
+
initializer 'ba_spree.autoloader' do |app|
|
|
10
|
+
if Rails.autoloaders.zeitwerk_enabled?
|
|
11
|
+
Rails.autoloaders.main.ignore("#{root}/app/overrides")
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
# Spree 5.3 のイベント subscriber 二重登録(注文確認/キャンセルメールの多重送信)対策。
|
|
16
|
+
# subscriber 登録(after_initialize 内の Spree::Events.activate!)より前に適用する必要があるため
|
|
17
|
+
# initializer で require する。 @see https://github.com/be-agile/giga-repeat/issues/1230
|
|
18
|
+
initializer 'ba_spree.spree_events_dedup_patch' do
|
|
19
|
+
require 'ba_spree/spree_events_dedup_patch'
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
initializer 'ba_spree.importmap', before: 'importmap' do |app|
|
|
23
|
+
app.config.importmap.paths << root.join('config/importmap.rb')
|
|
24
|
+
app.config.importmap.cache_sweepers << root.join('app/assets/javascripts')
|
|
25
|
+
app.config.importmap.cache_sweepers << root.join('app/javascript')
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
initializer 'ba_spree.assets' do |app|
|
|
29
|
+
app.config.assets.paths << root.join('app/javascript')
|
|
30
|
+
app.config.assets.precompile += %w( spree/admin/custom.css )
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def self.activate
|
|
34
|
+
Dir.glob(File.join(File.dirname(__FILE__), '../../app/**/*_decorator*.rb')) do |c|
|
|
35
|
+
Rails.configuration.cache_classes ? require(c) : load(c)
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
config.to_prepare &method(:activate).to_proc
|
|
40
|
+
end
|
|
41
|
+
end
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# Spree 5.3 のイベント subscriber 登録に重複ガードが無い問題への対策。
|
|
4
|
+
#
|
|
5
|
+
# `spree_emails` の Engine#after_initialize は無条件で
|
|
6
|
+
# `Spree.subscribers.concat([Spree::OrderEmailSubscriber, ...])` を行い、
|
|
7
|
+
# `Spree::Events.register_subscribers!` は `Spree.subscribers` を `.uniq` せず反復、
|
|
8
|
+
# さらに `Spree::Events::Registry#register` も重複チェックをしない。
|
|
9
|
+
# このため何らかの理由で subscriber が二重に登録されると subscription も二重化し、
|
|
10
|
+
# 注文確認メール / キャンセルメールが 2 通ずつ送信される。
|
|
11
|
+
#
|
|
12
|
+
# resolve 後の subscriber クラス単位で重複排除し、同一 subscriber を
|
|
13
|
+
# 1 回しか登録しないようにする(環境非依存で堅牢)。
|
|
14
|
+
#
|
|
15
|
+
# @see https://github.com/be-agile/giga-repeat/issues/1230
|
|
16
|
+
module BaSpree
|
|
17
|
+
# @gem-override spree_core-5.3.6/lib/spree/events.rb#register_subscribers!
|
|
18
|
+
# @see https://github.com/be-agile/giga-repeat/issues/1230
|
|
19
|
+
module SpreeEventsDedupPatch
|
|
20
|
+
def register_subscribers!
|
|
21
|
+
return unless defined?(Spree) && Spree.respond_to?(:subscribers)
|
|
22
|
+
|
|
23
|
+
registered = []
|
|
24
|
+
|
|
25
|
+
Spree.subscribers&.each do |subscriber|
|
|
26
|
+
# Resolve the subscriber constant fresh to handle code reload in development
|
|
27
|
+
# The array may contain stale class objects after Zeitwerk reload
|
|
28
|
+
resolved_subscriber = resolve_subscriber(subscriber)
|
|
29
|
+
next unless resolved_subscriber
|
|
30
|
+
|
|
31
|
+
# 同一 subscriber を二重登録しない(subscription 二重化=メール多重送信の防止)
|
|
32
|
+
next if registered.include?(resolved_subscriber)
|
|
33
|
+
|
|
34
|
+
registered << resolved_subscriber
|
|
35
|
+
|
|
36
|
+
resolved_subscriber.subscription_patterns.each do |pattern|
|
|
37
|
+
subscribe(pattern, resolved_subscriber, resolved_subscriber.subscription_options)
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
Spree::Events.singleton_class.prepend(BaSpree::SpreeEventsDedupPatch)
|
data/lib/ba_spree.rb
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
require 'spree_core'
|
|
2
|
+
require 'spree_admin'
|
|
3
|
+
require 'spree_storefront'
|
|
4
|
+
require 'spree_i18n'
|
|
5
|
+
require 'spree_emails'
|
|
6
|
+
# gemspec で add_dependency している engine は、ここでも require してロード順を固定する。
|
|
7
|
+
# ba_spree_loyalty_points は Spree::Order / Spree::Store / Spree::PaymentMethod /
|
|
8
|
+
# Spree::CheckoutController を ba_spree と同じく decorate しており、どちらの decorator が外側に
|
|
9
|
+
# prepend されるかが Gemfile の記載順で決まってしまう。依存先を先にロードすることで、土台である
|
|
10
|
+
# 依存先の上に ba_spree が重なる形(ba_spree が外側)に固定する。
|
|
11
|
+
# spree_materials は現時点では ba_spree 側からのコード参照がないが、同じ理由で順序を固定しておく。
|
|
12
|
+
# @see https://github.com/be-agile/giga-repeat/issues/1307
|
|
13
|
+
require 'ba_spree_loyalty_points'
|
|
14
|
+
require 'spree_materials'
|
|
15
|
+
# Spree::BaseHelperDecorator#sort_adjustments_with_flat_percent_last が
|
|
16
|
+
# Spree::Calculator::FlatPercentOrderTotal を参照する。
|
|
17
|
+
# @see https://github.com/be-agile/giga-repeat/issues/1307
|
|
18
|
+
require 'spree_order_total_discount'
|
|
19
|
+
require 'ba_spree/engine'
|
|
20
|
+
require 'ba_spree/version'
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
module BaSpree
|
|
2
|
+
module Generators
|
|
3
|
+
class InstallGenerator < Rails::Generators::Base
|
|
4
|
+
class_option :auto_run_migrations, type: :boolean, default: false
|
|
5
|
+
|
|
6
|
+
def add_javascripts
|
|
7
|
+
js_directory = BaSpree::Engine.root.join('app', 'assets', 'javascripts')
|
|
8
|
+
manifest_file = 'app/assets/config/manifest.js'
|
|
9
|
+
Dir.glob("#{js_directory}/**/*.js").each do |file|
|
|
10
|
+
relative_path = file.sub("#{js_directory}/", '')
|
|
11
|
+
append_file manifest_file, "//= link #{relative_path}\n"
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def add_stylesheets
|
|
16
|
+
css_directory = BaSpree::Engine.root.join('app', 'assets', 'stylesheets')
|
|
17
|
+
manifest_file = 'app/assets/config/manifest.js'
|
|
18
|
+
Dir.glob("#{css_directory}/**/*.scss").each do |file|
|
|
19
|
+
relative_path = file.sub("#{css_directory}/", '').sub('.scss', '.css')
|
|
20
|
+
append_file manifest_file, "//= link #{relative_path}\n"
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
# ba_spree が束ねる engine の migration をまとめてコピーする。
|
|
25
|
+
# 利用者が各 engine のジェネレータを 20 個順に叩かなくて済むようにするのが狙い。
|
|
26
|
+
# @see https://github.com/be-agile/giga-repeat/issues/1317
|
|
27
|
+
def add_migrations
|
|
28
|
+
railties = migratable_railtie_names
|
|
29
|
+
|
|
30
|
+
if railties.empty?
|
|
31
|
+
say_status :skip, 'migration を持つ ba_spree の engine が見つかりませんでした', :yellow
|
|
32
|
+
return
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
# FROM を省略すると spree 本体・spree_api・active_storage 等、
|
|
36
|
+
# アプリにロードされている全 railtie からコピーしてしまうため必ず列挙する
|
|
37
|
+
run "bundle exec rake railties:install:migrations FROM=#{railties.join(',')}"
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def run_migrations
|
|
41
|
+
if options[:auto_run_migrations] || [ '', 'y', 'Y' ].include?(ask('Would you like to run the migrations now? [Y/n]'))
|
|
42
|
+
run 'bundle exec rake db:migrate'
|
|
43
|
+
else
|
|
44
|
+
say_status :skip, 'db:migrate をスキップしました。あとで実行してください', :yellow
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
private
|
|
49
|
+
|
|
50
|
+
# ba_spree の gemspec が依存に挙げている gem のうち、db/migrate を持つ
|
|
51
|
+
# engine の railtie 名を返す。
|
|
52
|
+
# gem 名と railtie 名は一致しないことがある
|
|
53
|
+
# (例: ba_spree_loyalty_points gem の engine_name は spree_loyalty_points)
|
|
54
|
+
# ため、gem のインストールパスと railtie の root を突き合わせて対応付ける。
|
|
55
|
+
def migratable_railtie_names
|
|
56
|
+
paths = dependency_gem_paths
|
|
57
|
+
return [] if paths.empty?
|
|
58
|
+
|
|
59
|
+
Rails.application.railties.filter_map do |railtie|
|
|
60
|
+
next unless railtie.respond_to?(:root) && railtie.respond_to?(:railtie_name)
|
|
61
|
+
next unless paths.include?(realpath(railtie.root))
|
|
62
|
+
next unless railtie.paths['db/migrate']&.existent&.any?
|
|
63
|
+
|
|
64
|
+
railtie.railtie_name
|
|
65
|
+
end.uniq.sort
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def dependency_gem_paths
|
|
69
|
+
Gem::Specification.find_by_name('ba_spree').dependencies.select(&:runtime?).filter_map do |dependency|
|
|
70
|
+
realpath(Gem::Specification.find_by_name(dependency.name).full_gem_path)
|
|
71
|
+
rescue Gem::MissingSpecError
|
|
72
|
+
nil
|
|
73
|
+
end
|
|
74
|
+
rescue Gem::MissingSpecError
|
|
75
|
+
[]
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
def realpath(path)
|
|
79
|
+
File.realpath(path.to_s)
|
|
80
|
+
rescue Errno::ENOENT
|
|
81
|
+
nil
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
end
|