# frozen_string_literal: true require 'spree/core' require 'solidus_subscriptions' require 'solidus_subscriptions/permitted_attributes' require 'solidus_subscriptions/configuration' require 'solidus_subscriptions/processor' require 'solidus_subscriptions/processing_error_handlers/rails_logger' module SolidusSubscriptions class Engine < Rails::Engine include SolidusSupport::EngineExtensions isolate_namespace SolidusSubscriptions engine_name 'solidus_subscriptions' # use rspec for tests config.generators do |g| g.test_framework :rspec end initializer 'solidus_subscriptions.update_permitted_attributes' do ::Spree::PermittedAttributes.line_item_attributes << { subscription_line_items_attributes: PermittedAttributes.subscription_line_item_attributes | [:id], } ::Spree::PermittedAttributes.user_attributes << { subscriptions_attributes: PermittedAttributes.subscription_attributes | [:id], } end initializer 'solidus_subscriptions.register_promotion_rules', after: 'spree.promo.register.promotion.rules' do |app| app.config.spree.promotions.rules << 'SolidusSubscriptions::Promotion::Rules::SubscriptionCreationOrder' app.config.spree.promotions.rules << 'SolidusSubscriptions::Promotion::Rules::SubscriptionInstallmentOrder' end initializer 'solidus_subscriptions.configure_backend' do next unless ::Spree::Backend::Config.respond_to?(:menu_items) ::Spree::Backend::Config.configure do |config| config.menu_items << config.class::MenuItem.new( [:subscriptions], 'repeat', url: :admin_subscriptions_path, condition: ->{ can?(:admin, SolidusSubscriptions::Subscription) }, match_path: '/subscriptions' ) end end initializer 'solidus_subscriptions.pub_sub' do |app| app.reloader.to_prepare do %i[ subscription_created subscription_activated subscription_canceled subscription_ended subscription_skipped subscription_resumed subscription_paused subscription_frequency_changed subscription_shipping_address_changed subscription_billing_address_changed installment_succeeded installment_failed_payment subscription_payment_method_changed ].each do |event_name| ::Spree::Bus.register(:"solidus_subscriptions.#{event_name}") end SolidusSubscriptions::ChurnBusterSubscriber.new.subscribe_to(::Spree::Bus) SolidusSubscriptions::EventStorageSubscriber.new.subscribe_to(::Spree::Bus) SolidusSubscriptions::OrderSubscriber.new.subscribe_to(::Spree::Bus) end end end def self.table_name_prefix 'solidus_subscriptions_' end end