solidus_support 0.12.0 → 0.14.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 +4 -4
- data/README.md +2 -0
- data/lib/solidus_support/engine_extensions.rb +48 -1
- data/lib/solidus_support/legacy_event_compat/bus.rb +38 -0
- data/lib/solidus_support/legacy_event_compat/subscriber.rb +58 -0
- data/lib/solidus_support/legacy_event_compat.rb +47 -0
- data/lib/solidus_support/migration.rb +4 -9
- data/lib/solidus_support/version.rb +1 -1
- data/lib/solidus_support.rb +1 -0
- data/solidus_support.gemspec +3 -0
- data/spec/solidus_support/legacy_event_compat/bus_spec.rb +31 -0
- data/spec/solidus_support/legacy_event_compat/legacy_event_compat_spec.rb +93 -0
- data/spec/support/dummy_app.rb +0 -3
- metadata +38 -7
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 2cdd9849818af1dc56048136d30a8198d6d79c7245250824283659a47c396932
         | 
| 4 | 
            +
              data.tar.gz: e82afa4bcca816ad08c7b0afb4ff09279104c99c111818d96ba26cf0f7dab2f7
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: f619198e4c09da849dbab523854002358b35183d9c1cf13c5a24ae4001a986b6d5c38c5edc8d4ea06412581f4f14080a0abc1628d948409dbf47dc7be5364ee0
         | 
| 7 | 
            +
              data.tar.gz: bb3060ebe160c24dca44376cab8d5c1cdb3bf377cc47312a1a70d15eaeabee3df045d566d464433f86b0943a24dbd5e2cbfd907a89c21374808defc0a054de72
         | 
    
        data/README.md
    CHANGED
    
    | @@ -1,3 +1,5 @@ | |
| 1 | 
            +
            [](https://dl.circleci.com/status-badge/redirect/gh/solidusio/solidus_support/tree/main)
         | 
| 2 | 
            +
             | 
| 1 3 | 
             
            # SolidusSupport
         | 
| 2 4 |  | 
| 3 5 | 
             
            This gem contains common runtime functionality for Solidus extensions.
         | 
| @@ -1,6 +1,7 @@ | |
| 1 1 | 
             
            # frozen_string_literal: true
         | 
| 2 2 |  | 
| 3 3 | 
             
            require "active_support/deprecation"
         | 
| 4 | 
            +
            require "flickwerk"
         | 
| 4 5 |  | 
| 5 6 | 
             
            module SolidusSupport
         | 
| 6 7 | 
             
              module EngineExtensions
         | 
| @@ -9,6 +10,7 @@ module SolidusSupport | |
| 9 10 |  | 
| 10 11 | 
             
                def self.included(engine)
         | 
| 11 12 | 
             
                  engine.extend ClassMethods
         | 
| 13 | 
            +
                  engine.include Flickwerk
         | 
| 12 14 |  | 
| 13 15 | 
             
                  engine.class_eval do
         | 
| 14 16 | 
             
                    solidus_decorators_root.glob('*') do |decorators_folder|
         | 
| @@ -27,6 +29,25 @@ module SolidusSupport | |
| 27 29 | 
             
                module ClassMethods
         | 
| 28 30 | 
             
                  def activate
         | 
| 29 31 | 
             
                    load_solidus_decorators_from(solidus_decorators_root)
         | 
| 32 | 
            +
                    load_solidus_subscribers_from(solidus_subscribers_root)
         | 
| 33 | 
            +
                  end
         | 
| 34 | 
            +
             | 
| 35 | 
            +
                  # Loads Solidus event subscriber files.
         | 
| 36 | 
            +
                  #
         | 
| 37 | 
            +
                  # This allows to add event subscribers to extensions without explicitly subscribing them,
         | 
| 38 | 
            +
                  # similarly to what happens in Solidus core.
         | 
| 39 | 
            +
                  def load_solidus_subscribers_from(path)
         | 
| 40 | 
            +
                    if SolidusSupport::LegacyEventCompat.using_legacy?
         | 
| 41 | 
            +
                      path.glob("**/*_subscriber.rb") do |subscriber_path|
         | 
| 42 | 
            +
                        require_dependency(subscriber_path)
         | 
| 43 | 
            +
                      end
         | 
| 44 | 
            +
             | 
| 45 | 
            +
                      if Spree::Event.respond_to?(:activate_all_subscribers)
         | 
| 46 | 
            +
                        Spree::Event.activate_all_subscribers
         | 
| 47 | 
            +
                      else
         | 
| 48 | 
            +
                        Spree::Event.subscribers.each(&:subscribe!)
         | 
| 49 | 
            +
                      end
         | 
| 50 | 
            +
                    end
         | 
| 30 51 | 
             
                  end
         | 
| 31 52 |  | 
| 32 53 | 
             
                  # Loads decorator files.
         | 
| @@ -83,7 +104,7 @@ module SolidusSupport | |
| 83 104 | 
             
                    # by those gems, we work around those gems by adding our paths before
         | 
| 84 105 | 
             
                    # `initialize_cache`, which is the Rails initializer called before
         | 
| 85 106 | 
             
                    # `set_load_path`.
         | 
| 86 | 
            -
                    initializer "#{ | 
| 107 | 
            +
                    initializer "#{engine_name}_#{engine}_paths", before: :initialize_cache do
         | 
| 87 108 | 
             
                      if SolidusSupport.send(:"#{engine}_available?")
         | 
| 88 109 | 
             
                        paths['app/controllers'] << "lib/controllers/#{engine}"
         | 
| 89 110 | 
             
                        paths['app/views'] << "lib/views/#{engine}"
         | 
| @@ -92,9 +113,11 @@ module SolidusSupport | |
| 92 113 |  | 
| 93 114 | 
             
                    if SolidusSupport.send(:"#{engine}_available?")
         | 
| 94 115 | 
             
                      decorators_path = root.join("lib/decorators/#{engine}")
         | 
| 116 | 
            +
                      patches_path = root.join("lib/patches/#{engine}")
         | 
| 95 117 | 
             
                      controllers_path = root.join("lib/controllers/#{engine}")
         | 
| 96 118 | 
             
                      components_path = root.join("lib/components/#{engine}")
         | 
| 97 119 | 
             
                      config.autoload_paths += decorators_path.glob('*')
         | 
| 120 | 
            +
                      config.autoload_paths += patches_path.glob("*")
         | 
| 98 121 | 
             
                      config.autoload_paths << controllers_path if controllers_path.exist?
         | 
| 99 122 | 
             
                      config.autoload_paths << components_path if components_path.exist?
         | 
| 100 123 |  | 
| @@ -105,6 +128,30 @@ module SolidusSupport | |
| 105 128 | 
             
                        end
         | 
| 106 129 | 
             
                      end
         | 
| 107 130 | 
             
                    end
         | 
| 131 | 
            +
             | 
| 132 | 
            +
                    initializer "#{engine_name}_#{engine}_patch_paths" do
         | 
| 133 | 
            +
                      patch_paths = root.join("lib/patches/#{engine}").glob("*")
         | 
| 134 | 
            +
                      Flickwerk.patch_paths += patch_paths
         | 
| 135 | 
            +
                    end
         | 
| 136 | 
            +
             | 
| 137 | 
            +
                    initializer "#{engine_name}_#{engine}_user_patches" do |app|
         | 
| 138 | 
            +
                      app.reloader.to_prepare do
         | 
| 139 | 
            +
                        Flickwerk.aliases["Spree.user_class"] = Spree.user_class_name
         | 
| 140 | 
            +
                      end
         | 
| 141 | 
            +
                    end
         | 
| 142 | 
            +
             | 
| 143 | 
            +
                    initializer "eager_load_#{engine_name}_#{engine}_patches" do |app|
         | 
| 144 | 
            +
                      # Solidus versions < 4.5 `require` some of their application code.
         | 
| 145 | 
            +
                      # This leads to hard-to-debug problems with Flickwerk patches.
         | 
| 146 | 
            +
                      # What this does is eager-load all the patches in a `to_prepare`
         | 
| 147 | 
            +
                      # hook by constantizing them.
         | 
| 148 | 
            +
                      # You can override this behavior by setting the environment variable `SOLIDUS_LAZY_LOAD_PATCHES`.
         | 
| 149 | 
            +
                      if Spree.solidus_gem_version < Gem::Version.new("4.5.0.a") && !ENV["SOLIDUS_LAZY_LOAD_PATCHES"]
         | 
| 150 | 
            +
                        app.reloader.to_prepare do
         | 
| 151 | 
            +
                          Flickwerk.patches.each_value { _1.each(&:constantize) }
         | 
| 152 | 
            +
                        end
         | 
| 153 | 
            +
                      end
         | 
| 154 | 
            +
                    end
         | 
| 108 155 | 
             
                  end
         | 
| 109 156 | 
             
                end
         | 
| 110 157 | 
             
              end
         | 
| @@ -0,0 +1,38 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module SolidusSupport
         | 
| 4 | 
            +
              module LegacyEventCompat
         | 
| 5 | 
            +
                # Compatibility for some event-driven operations
         | 
| 6 | 
            +
                module Bus
         | 
| 7 | 
            +
                  # Publication of an event
         | 
| 8 | 
            +
                  #
         | 
| 9 | 
            +
                  # If extensions want to support the legacy sytem, they need to use a
         | 
| 10 | 
            +
                  # compatible API. That means it's not possible to publish an instance as
         | 
| 11 | 
            +
                  # event, which is something supported by Omnes but not the legacy adapter.
         | 
| 12 | 
            +
                  # Instead, a payload can be given. E.g.:
         | 
| 13 | 
            +
                  #
         | 
| 14 | 
            +
                  # ```
         | 
| 15 | 
            +
                  # SolidusSupport::LegacyEventCompat::Bus.publish(:foo, bar: :baz)
         | 
| 16 | 
            +
                  # ```
         | 
| 17 | 
            +
                  #
         | 
| 18 | 
            +
                  # Legacy subscribers will receive an
         | 
| 19 | 
            +
                  # `ActiveSupport::Notifications::Fanout`, while omnes subscribers will get
         | 
| 20 | 
            +
                  # an `Omnes::UnstructuredEvent`. Both instances are compatible as they
         | 
| 21 | 
            +
                  # implement a `#payload` method.
         | 
| 22 | 
            +
                  #
         | 
| 23 | 
            +
                  # @param event_name [Symbol]
         | 
| 24 | 
            +
                  # @param payload [Hash<Symbol, Any>]
         | 
| 25 | 
            +
                  def self.publish(event_name, **payload)
         | 
| 26 | 
            +
                    SolidusSupport.deprecator.warn(
         | 
| 27 | 
            +
                      "SolidusSupport::LegacyEventCompat::Bus is deprecated and will be removed in solidus_support 1.0." \
         | 
| 28 | 
            +
                      " Please use Spree::Bus.publish instead."
         | 
| 29 | 
            +
                    )
         | 
| 30 | 
            +
                    if SolidusSupport::LegacyEventCompat.using_legacy?
         | 
| 31 | 
            +
                      Spree::Event.fire(event_name, payload)
         | 
| 32 | 
            +
                    else
         | 
| 33 | 
            +
                      Spree::Bus.publish(event_name, **payload, caller_location: caller_locations(1)[0])
         | 
| 34 | 
            +
                    end
         | 
| 35 | 
            +
                  end
         | 
| 36 | 
            +
                end
         | 
| 37 | 
            +
              end
         | 
| 38 | 
            +
            end
         | 
| @@ -0,0 +1,58 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            begin
         | 
| 4 | 
            +
              require "omnes"
         | 
| 5 | 
            +
            rescue LoadError
         | 
| 6 | 
            +
            end
         | 
| 7 | 
            +
             | 
| 8 | 
            +
            module SolidusSupport
         | 
| 9 | 
            +
              module LegacyEventCompat
         | 
| 10 | 
            +
                # Compatibility for subscriber modules
         | 
| 11 | 
            +
                #
         | 
| 12 | 
            +
                # Thanks to this module, extensions can create legacy subscriber modules
         | 
| 13 | 
            +
                # (see {Spree::Event::Subscriber}) and translate them automatically to an
         | 
| 14 | 
            +
                # {Omnes::Subscriber}). E.g.:
         | 
| 15 | 
            +
                #
         | 
| 16 | 
            +
                # ```
         | 
| 17 | 
            +
                # module MyExtension
         | 
| 18 | 
            +
                #   module MySubscriber
         | 
| 19 | 
            +
                #     include Spree::Event::Subscriber
         | 
| 20 | 
            +
                #     include SolidusSupport::LegacyEventCompat::Subscriber
         | 
| 21 | 
            +
                #
         | 
| 22 | 
            +
                #     event_action :order_finalized
         | 
| 23 | 
            +
                #
         | 
| 24 | 
            +
                #     def order_finalized(event)
         | 
| 25 | 
            +
                #       event.payload[:order].do_something
         | 
| 26 | 
            +
                #     end
         | 
| 27 | 
            +
                #   end
         | 
| 28 | 
            +
                # end
         | 
| 29 | 
            +
                #
         | 
| 30 | 
            +
                # MyExtension::MySubscriber.omnes_subscriber.subscribe_to(Spree::Bus)
         | 
| 31 | 
            +
                # ```
         | 
| 32 | 
            +
                #
         | 
| 33 | 
            +
                # The generated omnes subscriptions will call the corresponding legacy
         | 
| 34 | 
            +
                # subscriber method with the omnes event. It'll compatible as long as the
         | 
| 35 | 
            +
                # omnes event responds to the `#payload` method (see
         | 
| 36 | 
            +
                # {Omnes::UnstructuredEvent}).
         | 
| 37 | 
            +
                module Subscriber
         | 
| 38 | 
            +
                  # @api private
         | 
| 39 | 
            +
                  ADAPTER = lambda do |legacy_subscriber, legacy_subscriber_method, _omnes_subscriber, omnes_event|
         | 
| 40 | 
            +
                    legacy_subscriber.send(legacy_subscriber_method, omnes_event)
         | 
| 41 | 
            +
                  end
         | 
| 42 | 
            +
             | 
| 43 | 
            +
                  def self.included(legacy_subscriber)
         | 
| 44 | 
            +
                    SolidusSupport.deprecator.warn(
         | 
| 45 | 
            +
                      "SolidusSupport::LegacyEventCompat::Subscriber is deprecated and will be removed in solidus_support 1.0." \
         | 
| 46 | 
            +
                      " Please `include Omnes::Subscriber` in `#{legacy_subscriber.name}` instead."
         | 
| 47 | 
            +
                    )
         | 
| 48 | 
            +
                    legacy_subscriber.define_singleton_method(:omnes_subscriber) do
         | 
| 49 | 
            +
                      @omnes_subscriber ||= Class.new.include(::Omnes::Subscriber).tap do |subscriber|
         | 
| 50 | 
            +
                        legacy_subscriber.event_actions.each do |(legacy_subscriber_method, event_name)|
         | 
| 51 | 
            +
                          subscriber.handle(event_name.to_sym, with: ADAPTER.curry[legacy_subscriber, legacy_subscriber_method])
         | 
| 52 | 
            +
                        end
         | 
| 53 | 
            +
                      end.new
         | 
| 54 | 
            +
                    end
         | 
| 55 | 
            +
                  end
         | 
| 56 | 
            +
                end
         | 
| 57 | 
            +
              end
         | 
| 58 | 
            +
            end
         | 
| @@ -0,0 +1,47 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            require 'solidus_support/legacy_event_compat/bus'
         | 
| 4 | 
            +
            require 'solidus_support/legacy_event_compat/subscriber'
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            module SolidusSupport
         | 
| 7 | 
            +
              # Compatibility middleman for {Spree::Event} and {Spree::Bus}
         | 
| 8 | 
            +
              #
         | 
| 9 | 
            +
              # Solidus v3.2 changed to use [Omnes](https://github.com/nebulab/omnes) as the
         | 
| 10 | 
            +
              # backbone for event-driven behavior (see {Spree::Bus}) by default. Before
         | 
| 11 | 
            +
              # that, a custom adapter based on {ActiveSupport::Notifications} was used (see
         | 
| 12 | 
            +
              # {Spree::Event}. Both systems are still supported on v3.2.
         | 
| 13 | 
            +
              #
         | 
| 14 | 
            +
              # This module provides compatibility support so that extensions can easily
         | 
| 15 | 
            +
              # target both systems regardless of the underlying circumstances:
         | 
| 16 | 
            +
              #
         | 
| 17 | 
            +
              # - Solidus v3.2 with the new system.
         | 
| 18 | 
            +
              # - Solidus v3.2 with the legacy system.
         | 
| 19 | 
            +
              # - Solidus v2.9 to v3.1, when only {Spree::Event} existed.
         | 
| 20 | 
            +
              # - Possible future versions of Solidus, whether the legacy system is
         | 
| 21 | 
            +
              # eventually removed or not.
         | 
| 22 | 
            +
              module LegacyEventCompat
         | 
| 23 | 
            +
                # Returns whether the application is using the legacy event system
         | 
| 24 | 
            +
                #
         | 
| 25 | 
            +
                # @return [Boolean]
         | 
| 26 | 
            +
                def self.using_legacy?
         | 
| 27 | 
            +
                  legacy_present? &&
         | 
| 28 | 
            +
                    (legacy_alone? ||
         | 
| 29 | 
            +
                     legacy_chosen?)
         | 
| 30 | 
            +
                end
         | 
| 31 | 
            +
             | 
| 32 | 
            +
                def self.legacy_present?
         | 
| 33 | 
            +
                  defined?(Spree::Event)
         | 
| 34 | 
            +
                end
         | 
| 35 | 
            +
                private_class_method :legacy_present?
         | 
| 36 | 
            +
             | 
| 37 | 
            +
                def self.legacy_alone?
         | 
| 38 | 
            +
                  !Spree::Config.respond_to?(:use_legacy_events)
         | 
| 39 | 
            +
                end
         | 
| 40 | 
            +
                private_class_method :legacy_alone?
         | 
| 41 | 
            +
             | 
| 42 | 
            +
                def self.legacy_chosen?
         | 
| 43 | 
            +
                  Spree::Config.use_legacy_events
         | 
| 44 | 
            +
                end
         | 
| 45 | 
            +
                private_class_method :legacy_chosen?
         | 
| 46 | 
            +
              end
         | 
| 47 | 
            +
            end
         | 
| @@ -3,15 +3,10 @@ | |
| 3 3 | 
             
            module SolidusSupport
         | 
| 4 4 | 
             
              module Migration
         | 
| 5 5 | 
             
                def self.[](version)
         | 
| 6 | 
            -
                   | 
| 7 | 
            -
                    ActiveRecord::Migration[version]
         | 
| 8 | 
            -
                   | 
| 9 | 
            -
             | 
| 10 | 
            -
                    # it _is_ rails 4.2, so we can use that when requested.
         | 
| 11 | 
            -
                    return ActiveRecord::Migration if version.to_s == '4.2'
         | 
| 12 | 
            -
             | 
| 13 | 
            -
                    raise ArgumentError, "Unknown migration version '#{version}'; expected one of '4.2'"
         | 
| 14 | 
            -
                  end
         | 
| 6 | 
            +
                  SolidusSupport.deprecator.warn(
         | 
| 7 | 
            +
                    "SolidusSupport::Migration[#{version}] is deprecated. Please use ActiveRecord::Migration[#{version}] instead."
         | 
| 8 | 
            +
                  )
         | 
| 9 | 
            +
                  ActiveRecord::Migration[version]
         | 
| 15 10 | 
             
                end
         | 
| 16 11 | 
             
              end
         | 
| 17 12 | 
             
            end
         | 
    
        data/lib/solidus_support.rb
    CHANGED
    
    
    
        data/solidus_support.gemspec
    CHANGED
    
    | @@ -28,6 +28,9 @@ Gem::Specification.new do |spec| | |
| 28 28 | 
             
              spec.executables = files.grep(%r{^exe/}) { |f| File.basename(f) }
         | 
| 29 29 | 
             
              spec.require_paths = ["lib"]
         | 
| 30 30 |  | 
| 31 | 
            +
              spec.add_dependency 'flickwerk', '~> 0.3.4'
         | 
| 32 | 
            +
              spec.add_dependency 'solidus_core', '~> 4.1'
         | 
| 33 | 
            +
             | 
| 31 34 | 
             
              spec.add_development_dependency 'rails'
         | 
| 32 35 | 
             
              spec.add_development_dependency 'bundler'
         | 
| 33 36 | 
             
              spec.add_development_dependency 'rake'
         | 
| @@ -0,0 +1,31 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            RSpec.describe SolidusSupport::LegacyEventCompat::Bus do
         | 
| 4 | 
            +
              describe '#publish' do
         | 
| 5 | 
            +
                if SolidusSupport::LegacyEventCompat.using_legacy?
         | 
| 6 | 
            +
                  it 'forwards to Spree::Event' do
         | 
| 7 | 
            +
                    box = nil
         | 
| 8 | 
            +
                    subscription = Spree::Event.subscribe(:foo) { |event| box = event.payload[:bar] }
         | 
| 9 | 
            +
             | 
| 10 | 
            +
                    described_class.publish(:foo, bar: :baz)
         | 
| 11 | 
            +
             | 
| 12 | 
            +
                    expect(box).to be(:baz)
         | 
| 13 | 
            +
                  ensure
         | 
| 14 | 
            +
                    Spree::Event.unsubscribe(subscription)
         | 
| 15 | 
            +
                  end
         | 
| 16 | 
            +
                else
         | 
| 17 | 
            +
                  it 'forwards to Spree::Bus' do
         | 
| 18 | 
            +
                    box = nil
         | 
| 19 | 
            +
                    Spree::Bus.register(:foo)
         | 
| 20 | 
            +
                    subscription = Spree::Bus.subscribe(:foo) { |event| box = event.payload[:bar] }
         | 
| 21 | 
            +
             | 
| 22 | 
            +
                    described_class.publish(:foo, bar: :baz)
         | 
| 23 | 
            +
             | 
| 24 | 
            +
                    expect(box).to be(:baz)
         | 
| 25 | 
            +
                  ensure
         | 
| 26 | 
            +
                    Spree::Bus.unsubscribe(subscription)
         | 
| 27 | 
            +
                    Spree::Bus.registry.unregister(:foo)
         | 
| 28 | 
            +
                  end
         | 
| 29 | 
            +
                end
         | 
| 30 | 
            +
              end
         | 
| 31 | 
            +
            end
         | 
| @@ -0,0 +1,93 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            require 'omnes'
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            RSpec.describe SolidusSupport::LegacyEventCompat::Subscriber, if: Spree.solidus_version < Gem::Version.new("4.0.0.dev") do
         | 
| 6 | 
            +
              subject { Module.new.include(Spree::Event::Subscriber).include(described_class) }
         | 
| 7 | 
            +
             | 
| 8 | 
            +
              describe '#omnes_subscriber' do
         | 
| 9 | 
            +
                it 'returns an Omnes::Subscriber' do
         | 
| 10 | 
            +
                  subject.module_eval do
         | 
| 11 | 
            +
                    event_action :foo
         | 
| 12 | 
            +
             | 
| 13 | 
            +
                    def foo(_event); end
         | 
| 14 | 
            +
                  end
         | 
| 15 | 
            +
             | 
| 16 | 
            +
                  expect(subject.omnes_subscriber.is_a?(Omnes::Subscriber)).to be(true)
         | 
| 17 | 
            +
                end
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                it 'adds single-event definitions matching legacy event actions' do
         | 
| 20 | 
            +
                  subject.module_eval do
         | 
| 21 | 
            +
                    event_action :foo
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                    def foo(_event); end
         | 
| 24 | 
            +
                  end
         | 
| 25 | 
            +
                  bus = Omnes::Bus.new
         | 
| 26 | 
            +
                  bus.register(:foo)
         | 
| 27 | 
            +
             | 
| 28 | 
            +
                  subscriptions = subject.omnes_subscriber.subscribe_to(bus)
         | 
| 29 | 
            +
             | 
| 30 | 
            +
                  event = Struct.new(:omnes_event_name).new(:foo)
         | 
| 31 | 
            +
                  expect(subscriptions.first.matches?(event)).to be(true)
         | 
| 32 | 
            +
                end
         | 
| 33 | 
            +
             | 
| 34 | 
            +
                it 'coerces event names given as Strings' do
         | 
| 35 | 
            +
                  subject.module_eval do
         | 
| 36 | 
            +
                    event_action 'foo'
         | 
| 37 | 
            +
             | 
| 38 | 
            +
                    def foo(_event); end
         | 
| 39 | 
            +
                  end
         | 
| 40 | 
            +
                  bus = Omnes::Bus.new
         | 
| 41 | 
            +
                  bus.register(:foo)
         | 
| 42 | 
            +
             | 
| 43 | 
            +
                  subscriptions = subject.omnes_subscriber.subscribe_to(bus)
         | 
| 44 | 
            +
             | 
| 45 | 
            +
                  event = Struct.new(:omnes_event_name).new(:foo)
         | 
| 46 | 
            +
                  expect(subscriptions.first.matches?(event)).to be(true)
         | 
| 47 | 
            +
                end
         | 
| 48 | 
            +
             | 
| 49 | 
            +
                it 'executes legacy event action methods as handlers with the omnes event' do
         | 
| 50 | 
            +
                  subject.module_eval do
         | 
| 51 | 
            +
                    event_action :foo
         | 
| 52 | 
            +
             | 
| 53 | 
            +
                    def foo(event)
         | 
| 54 | 
            +
                      event[:bar]
         | 
| 55 | 
            +
                    end
         | 
| 56 | 
            +
                  end
         | 
| 57 | 
            +
                  bus = Omnes::Bus.new
         | 
| 58 | 
            +
                  bus.register(:foo)
         | 
| 59 | 
            +
             | 
| 60 | 
            +
                  subscriptions = subject.omnes_subscriber.subscribe_to(bus)
         | 
| 61 | 
            +
             | 
| 62 | 
            +
                  expect(
         | 
| 63 | 
            +
                    bus.publish(:foo, bar: :baz).executions.first.result
         | 
| 64 | 
            +
                  ).to be(:baz)
         | 
| 65 | 
            +
                end
         | 
| 66 | 
            +
             | 
| 67 | 
            +
                it 'distingish when event name is given explicitly' do
         | 
| 68 | 
            +
                  subject.module_eval do
         | 
| 69 | 
            +
                    event_action :foo, event_name: :bar
         | 
| 70 | 
            +
             | 
| 71 | 
            +
                    def foo(_event)
         | 
| 72 | 
            +
                      :bar
         | 
| 73 | 
            +
                    end
         | 
| 74 | 
            +
                  end
         | 
| 75 | 
            +
                  bus = Omnes::Bus.new
         | 
| 76 | 
            +
                  bus.register(:bar)
         | 
| 77 | 
            +
             | 
| 78 | 
            +
                  subscriptions = subject.omnes_subscriber.subscribe_to(bus)
         | 
| 79 | 
            +
             | 
| 80 | 
            +
                  expect(
         | 
| 81 | 
            +
                    bus.publish(:bar).executions.first.result
         | 
| 82 | 
            +
                  ).to be(:bar)
         | 
| 83 | 
            +
                end
         | 
| 84 | 
            +
             | 
| 85 | 
            +
                it "returns the same omnes subscriber instance if called again" do
         | 
| 86 | 
            +
                  expect(subject.omnes_subscriber).to be(subject.omnes_subscriber)
         | 
| 87 | 
            +
                end
         | 
| 88 | 
            +
             | 
| 89 | 
            +
                it "doesn't fail when no event action has been defined" do
         | 
| 90 | 
            +
                  expect { subject.omnes_subscriber }.not_to raise_error
         | 
| 91 | 
            +
                end
         | 
| 92 | 
            +
              end
         | 
| 93 | 
            +
            end
         | 
    
        data/spec/support/dummy_app.rb
    CHANGED
    
    | @@ -14,9 +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 | 
            -
                if ActiveRecord::VERSION::MAJOR >= 7 && ActiveRecord::VERSION::MINOR < 1
         | 
| 18 | 
            -
                  config.active_record.legacy_connection_handling = false
         | 
| 19 | 
            -
                end
         | 
| 20 17 | 
             
              end
         | 
| 21 18 | 
             
            end
         | 
| 22 19 |  | 
    
        metadata
    CHANGED
    
    | @@ -1,16 +1,43 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: solidus_support
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0. | 
| 4 | 
            +
              version: 0.14.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - John Hawthorn
         | 
| 8 8 | 
             
            - Solidus Team
         | 
| 9 | 
            -
            autorequire:
         | 
| 10 9 | 
             
            bindir: exe
         | 
| 11 10 | 
             
            cert_chain: []
         | 
| 12 | 
            -
            date:  | 
| 11 | 
            +
            date: 2025-02-11 00:00:00.000000000 Z
         | 
| 13 12 | 
             
            dependencies:
         | 
| 13 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 14 | 
            +
              name: flickwerk
         | 
| 15 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 16 | 
            +
                requirements:
         | 
| 17 | 
            +
                - - "~>"
         | 
| 18 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 19 | 
            +
                    version: 0.3.4
         | 
| 20 | 
            +
              type: :runtime
         | 
| 21 | 
            +
              prerelease: false
         | 
| 22 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 23 | 
            +
                requirements:
         | 
| 24 | 
            +
                - - "~>"
         | 
| 25 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 26 | 
            +
                    version: 0.3.4
         | 
| 27 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 28 | 
            +
              name: solidus_core
         | 
| 29 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 30 | 
            +
                requirements:
         | 
| 31 | 
            +
                - - "~>"
         | 
| 32 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 33 | 
            +
                    version: '4.1'
         | 
| 34 | 
            +
              type: :runtime
         | 
| 35 | 
            +
              prerelease: false
         | 
| 36 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 37 | 
            +
                requirements:
         | 
| 38 | 
            +
                - - "~>"
         | 
| 39 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 40 | 
            +
                    version: '4.1'
         | 
| 14 41 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 15 42 | 
             
              name: rails
         | 
| 16 43 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| @@ -123,7 +150,6 @@ dependencies: | |
| 123 150 | 
             
                - - "~>"
         | 
| 124 151 | 
             
                  - !ruby/object:Gem::Version
         | 
| 125 152 | 
             
                    version: 0.2.2
         | 
| 126 | 
            -
            description:
         | 
| 127 153 | 
             
            email: contact@solidus.io
         | 
| 128 154 | 
             
            executables: []
         | 
| 129 155 | 
             
            extensions: []
         | 
| @@ -146,9 +172,14 @@ files: | |
| 146 172 | 
             
            - lib/solidus_support.rb
         | 
| 147 173 | 
             
            - lib/solidus_support/deprecator.rb
         | 
| 148 174 | 
             
            - lib/solidus_support/engine_extensions.rb
         | 
| 175 | 
            +
            - lib/solidus_support/legacy_event_compat.rb
         | 
| 176 | 
            +
            - lib/solidus_support/legacy_event_compat/bus.rb
         | 
| 177 | 
            +
            - lib/solidus_support/legacy_event_compat/subscriber.rb
         | 
| 149 178 | 
             
            - lib/solidus_support/migration.rb
         | 
| 150 179 | 
             
            - lib/solidus_support/version.rb
         | 
| 151 180 | 
             
            - solidus_support.gemspec
         | 
| 181 | 
            +
            - spec/solidus_support/legacy_event_compat/bus_spec.rb
         | 
| 182 | 
            +
            - spec/solidus_support/legacy_event_compat/legacy_event_compat_spec.rb
         | 
| 152 183 | 
             
            - spec/solidus_support_spec.rb
         | 
| 153 184 | 
             
            - spec/spec_helper.rb
         | 
| 154 185 | 
             
            - spec/support/dummy_app.rb
         | 
| @@ -160,7 +191,6 @@ metadata: | |
| 160 191 | 
             
              homepage_uri: https://github.com/solidusio/solidus_support
         | 
| 161 192 | 
             
              source_code_uri: https://github.com/solidusio/solidus_support
         | 
| 162 193 | 
             
              changelog_uri: https://github.com/solidusio/solidus_support/releases
         | 
| 163 | 
            -
            post_install_message:
         | 
| 164 194 | 
             
            rdoc_options: []
         | 
| 165 195 | 
             
            require_paths:
         | 
| 166 196 | 
             
            - lib
         | 
| @@ -175,11 +205,12 @@ required_rubygems_version: !ruby/object:Gem::Requirement | |
| 175 205 | 
             
                - !ruby/object:Gem::Version
         | 
| 176 206 | 
             
                  version: '0'
         | 
| 177 207 | 
             
            requirements: []
         | 
| 178 | 
            -
            rubygems_version: 3. | 
| 179 | 
            -
            signing_key:
         | 
| 208 | 
            +
            rubygems_version: 3.6.3
         | 
| 180 209 | 
             
            specification_version: 4
         | 
| 181 210 | 
             
            summary: Common runtime helpers for Solidus extensions.
         | 
| 182 211 | 
             
            test_files:
         | 
| 212 | 
            +
            - spec/solidus_support/legacy_event_compat/bus_spec.rb
         | 
| 213 | 
            +
            - spec/solidus_support/legacy_event_compat/legacy_event_compat_spec.rb
         | 
| 183 214 | 
             
            - spec/solidus_support_spec.rb
         | 
| 184 215 | 
             
            - spec/spec_helper.rb
         | 
| 185 216 | 
             
            - spec/support/dummy_app.rb
         |