Sha256: 90b509f149fb25922636b24223f3e34016d2fd4b6bed34ae10d3bb711ea9f551

Contents?: true

Size: 946 Bytes

Versions: 64

Compression:

Stored size: 946 Bytes

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 clear
      @widget_types = {}
      @defaults_by_role = {}
    end

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

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

    def fetch_by_name(name, &block)
      @widget_types.fetch(name, &block)
    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

64 entries across 64 versions & 1 rubygems

Version Path
pageflow-14.4.0 lib/pageflow/widget_types.rb
pageflow-15.0.0.beta2 lib/pageflow/widget_types.rb
pageflow-15.0.0.beta1 lib/pageflow/widget_types.rb
pageflow-14.3.0 lib/pageflow/widget_types.rb
pageflow-14.2.1 lib/pageflow/widget_types.rb
pageflow-14.2.0 lib/pageflow/widget_types.rb
pageflow-14.1.1 lib/pageflow/widget_types.rb
pageflow-14.1.0 lib/pageflow/widget_types.rb
pageflow-14.0.0 lib/pageflow/widget_types.rb
pageflow-14.0.0.rc2 lib/pageflow/widget_types.rb
pageflow-14.0.0.rc1 lib/pageflow/widget_types.rb
pageflow-14.0.0.beta3 lib/pageflow/widget_types.rb
pageflow-14.0.0.beta2 lib/pageflow/widget_types.rb
pageflow-14.0.0.beta1 lib/pageflow/widget_types.rb
pageflow-13.6.0 lib/pageflow/widget_types.rb
pageflow-13.5.0 lib/pageflow/widget_types.rb
pageflow-13.4.0 lib/pageflow/widget_types.rb
pageflow-13.3.0 lib/pageflow/widget_types.rb
pageflow-13.2.0 lib/pageflow/widget_types.rb
pageflow-12.6.0 lib/pageflow/widget_types.rb