Sha256: a6ef6661db3c075c0f3612c3b3ef7f2d0cbd0282087bc72a2390f686fe661c45

Contents?: true

Size: 1.55 KB

Versions: 19

Compression:

Stored size: 1.55 KB

Contents

module Spree
  module ThemeSupport
    module Hook

      @@listener_classes = []
      @@listeners = nil
      @@hook_modifiers = {}

      class << self
        # Adds a listener class.
        # Automatically called when a class inherits from Spree::ThemeSupport::HookListener.
        def add_listener(klass)
          raise "Hooks must include Singleton module." unless klass.included_modules.include?(Singleton)
          @@listener_classes << klass
          clear_listeners_instances
        end

        # Returns all the listerners instances.
        def listeners
          @@listeners ||= @@listener_classes.uniq.collect {|listener| listener.instance}
        end

        # Clears all the listeners.
        def clear_listeners
          @@listener_classes = []
          clear_listeners_instances
        end

        # Clears all the listeners instances.
        def clear_listeners_instances
          @@listeners = nil
          @@hook_modifiers = {}
        end

        # Take the content captured with a hook helper and modify with each HookModifier
        def render_hook(hook_name, content, context, locals = {})
          modifiers_for_hook(hook_name).inject(content) { |result, modifier| modifier.apply_to(result, context, locals) }
        end

        # All the HookModifier instances that are associated with this hook_name in extension load order and order they were defined
        def modifiers_for_hook(hook_name)
          @@hook_modifiers[hook_name] ||= listeners.map {|l| l.modifiers_for_hook(hook_name)}.flatten
        end

      end

    end
  end
end


Version data entries

19 entries across 19 versions & 6 rubygems

Version Path
apispree_core-0.0.0 lib/spree_core/theme_support/hook.rb
My-Commerce_core-1.1.0 lib/spree_core/theme_support/hook.rb
My-Commerce_core-1.0.0 lib/spree_core/theme_support/hook.rb
MyCommerceapi-1.0.0 core/lib/spree_core/theme_support/hook.rb
MyCommerce-0.0.3 core/lib/spree_core/theme_support/hook.rb
rfcommerce_core-0.0.3 lib/spree_core/theme_support/hook.rb
spree_core-0.60.6 lib/spree_core/theme_support/hook.rb
spree_core-0.60.5 lib/spree_core/theme_support/hook.rb
spree_core-0.50.4 lib/spree_core/theme_support/hook.rb
spree_core-0.60.4 lib/spree_core/theme_support/hook.rb
spree_core-0.50.3 lib/spree_core/theme_support/hook.rb
spree_core-0.60.3 lib/spree_core/theme_support/hook.rb
spree_core-0.60.2 lib/spree_core/theme_support/hook.rb
spree_core-0.60.1 lib/spree_core/theme_support/hook.rb
spree_core-0.60.0 lib/spree_core/theme_support/hook.rb
spree_core-0.60.0.RC1 lib/spree_core/theme_support/hook.rb
spree_core-0.50.2 lib/spree_core/theme_support/hook.rb
spree_core-0.50.1 lib/spree_core/theme_support/hook.rb
spree_core-0.50.0 lib/spree_core/theme_support/hook.rb