Sha256: 35d65bf278e614b934b33e7b9c65ee1736329ef05b228316fb39d759a408e231

Contents?: true

Size: 1.35 KB

Versions: 32

Compression:

Stored size: 1.35 KB

Contents

# frozen_string_literal: true

module Navigator
  # Renders a HTML tag.
  class Tag
    attr_reader :name, :content

    def self.names_without_suffix = %w[img input]

    # rubocop:disable Metrics/ParameterLists
    def initialize name, content = nil, attributes: {}, activator: Navigator::TagActivator.new
      @name = String name
      @content = content
      @attributes = attributes.with_indifferent_access
      @activator = activator
    end
    # rubocop:enable Metrics/ParameterLists

    def prefix = ["<#{name}", format_attributes, ">"].compact.join

    def computed_content = self.class.names_without_suffix.include?(name) ? nil : content

    def suffix = self.class.names_without_suffix.include?(name) ? nil : "</#{name}>"

    def render = [prefix, computed_content, suffix].compact.join

    private

    attr_reader :attributes, :activator

    def expand_data_attributes! attrs
      return unless attrs.key? :data

      attrs.delete(:data).each { |key, value| attrs["data-#{key}"] = value }
    end

    def concatenate_attributes attrs
      activator.activate(attrs)
               .map { |key, value| %(#{key}="#{value}") }
               .join(" ")
    end

    def format_attributes
      attrs = attributes.clone
      expand_data_attributes! attrs
      attrs = concatenate_attributes attrs
      attrs.empty? ? nil : " #{attrs}"
    end
  end
end

Version data entries

32 entries across 32 versions & 1 rubygems

Version Path
navigator-11.1.0 lib/navigator/tag.rb
navigator-11.0.0 lib/navigator/tag.rb
navigator-10.10.0 lib/navigator/tag.rb
navigator-10.9.0 lib/navigator/tag.rb
navigator-10.8.0 lib/navigator/tag.rb
navigator-10.7.0 lib/navigator/tag.rb
navigator-10.6.0 lib/navigator/tag.rb
navigator-10.5.0 lib/navigator/tag.rb
navigator-10.4.0 lib/navigator/tag.rb
navigator-10.3.1 lib/navigator/tag.rb
navigator-10.2.0 lib/navigator/tag.rb
navigator-10.1.0 lib/navigator/tag.rb
navigator-10.0.0 lib/navigator/tag.rb
navigator-9.0.2 lib/navigator/tag.rb
navigator-9.0.1 lib/navigator/tag.rb
navigator-9.0.0 lib/navigator/tag.rb
navigator-8.0.3 lib/navigator/tag.rb
navigator-8.0.2 lib/navigator/tag.rb
navigator-8.0.1 lib/navigator/tag.rb
navigator-8.0.0 lib/navigator/tag.rb