Sha256: 860f63b66f09e995437433c87ee873c54b2344786f27bd51af2a0dbe8c24b280

Contents?: true

Size: 1.21 KB

Versions: 20

Compression:

Stored size: 1.21 KB

Contents

module Pageflow
  class WidgetTypes
    include Enumerable

    attr_reader :defaults_by_role

    def initialize
      clear
    end

    def register(widget_type, options = {})
      @widget_types[widget_type.name] = widget_type
      if options[:default]
        widget_type.roles.each do |role|
          defaults_by_role[role] = widget_type
        end
      end
    end

    def register_widget_defaults(widget_role, default_configurations)
      @default_configurations[widget_role] = default_configurations
    end

    def clear
      @widget_types = {}
      @defaults_by_role = {}
      @default_configurations = {}
    end

    def each(&block)
      @widget_types.values.each(&block)
    end

    def find_by_name!(name)
      fetch_by_name(name) do
        raise(WidgetType::NotFoundError, "Unknown widget type with name '#{name}'.")
      end
    end

    def fetch_by_name(name, &block)
      @widget_types.fetch(name, &block)
    end

    def default_configuration(name)
      @default_configurations[name]
    end

    def find_all_by_role(role)
      select do |widget_type|
        widget_type.roles.include?(role)
      end
    end

    def roles
      @widget_types.values.flat_map(&:roles).uniq
    end
  end
end

Version data entries

20 entries across 20 versions & 1 rubygems

Version Path
pageflow-16.0.0 lib/pageflow/widget_types.rb
pageflow-15.8.0 lib/pageflow/widget_types.rb
pageflow-15.7.1 lib/pageflow/widget_types.rb
pageflow-15.7.0 lib/pageflow/widget_types.rb
pageflow-15.6.1 lib/pageflow/widget_types.rb
pageflow-15.6.0 lib/pageflow/widget_types.rb
pageflow-15.5.0 lib/pageflow/widget_types.rb
pageflow-15.4.0 lib/pageflow/widget_types.rb
pageflow-15.3.0 lib/pageflow/widget_types.rb
pageflow-15.2.2 lib/pageflow/widget_types.rb
pageflow-15.2.1 lib/pageflow/widget_types.rb
pageflow-15.2.0 lib/pageflow/widget_types.rb
pageflow-15.1.2 lib/pageflow/widget_types.rb
pageflow-15.1.1 lib/pageflow/widget_types.rb
pageflow-15.1.0 lib/pageflow/widget_types.rb
pageflow-15.1.0.rc0 lib/pageflow/widget_types.rb
pageflow-15.1.0.beta6 lib/pageflow/widget_types.rb
pageflow-15.1.0.beta5 lib/pageflow/widget_types.rb
pageflow-15.1.0.beta4 lib/pageflow/widget_types.rb
pageflow-15.1.0.beta3 lib/pageflow/widget_types.rb