Sha256: 9534ddc8e18f21d6676abb1a6c83911d9721b22d4f9e0f8a32bf8a7ad7f751ed

Contents?: true

Size: 1.24 KB

Versions: 12

Compression:

Stored size: 1.24 KB

Contents

module Lookbook
  module Annotatable
    extend ActiveSupport::Concern

    included do
      delegate :has_tag?, to: :code_object

      def notes
        code_object.docstring.to_s.strip
      end

      def tags(name = nil)
        code_object.tags(name)
      end

      def tag(name = nil)
        tags(name).first
      end

      protected

      attr_reader :code_object

      def fetch_config(key, fallback = nil, &block)
        value = case key.to_sym
        when :components
          components_config
        when :display_options
          display_options_config
        else
          tag(key).value if has_tag?(key)
        end

        Utils.value_or_fallback(value, fallback, &block)
      end

      private

      def components_config
        return unless has_tag?(:component)

        Array(tags(:component)).map(&:value).compact
      end

      def display_options_config
        return unless has_tag?(:display)

        # Dynamic params set at the entity level are
        # not (yet?) supported so filter them out.
        display_tags = tags(:display).select do |tag|
          !tag.value.is_a?(Hash) && !tag.value.is_a?(Array)
        end

        display_tags.map { |tag| [tag.key.to_sym, tag.value] }.to_h
      end
    end
  end
end

Version data entries

12 entries across 12 versions & 1 rubygems

Version Path
lookbook-1.5.5 lib/lookbook/entities/concerns/annotatable.rb
lookbook-1.5.4 lib/lookbook/entities/concerns/annotatable.rb
lookbook-1.5.3 lib/lookbook/entities/concerns/annotatable.rb
lookbook-1.5.2 lib/lookbook/entities/concerns/annotatable.rb
lookbook-1.5.1 lib/lookbook/entities/concerns/annotatable.rb
lookbook-1.5.0 lib/lookbook/entities/concerns/annotatable.rb
lookbook-1.4.5 lib/lookbook/entities/concerns/annotatable.rb
lookbook-1.4.4 lib/lookbook/entities/concerns/annotatable.rb
lookbook-1.4.3 lib/lookbook/entities/concerns/annotatable.rb
lookbook-1.4.2 lib/lookbook/entities/concerns/annotatable.rb
lookbook-1.4.1 lib/lookbook/entities/concerns/annotatable.rb
lookbook-1.4.0 lib/lookbook/entities/concerns/annotatable.rb