Sha256: e9eba493918279c8b03f781dedff2b162ee6dc824f2d9f0eb1921b692738590f

Contents?: true

Size: 1.31 KB

Versions: 2

Compression:

Stored size: 1.31 KB

Contents

# frozen_string_literal: true

module PageMeta
  class MetaTag
    attr_reader :name, :content

    def self.build(name, content)
      klass_name = "::PageMeta::MetaTag::#{name.to_s.camelize}"
      klass = begin
        const_get(klass_name)
      rescue ActionView::Template::Error, NameError
        MetaTag
      end
      klass.new(name, content)
    end

    def initialize(name, content)
      @name = name.to_s.dasherize
      @content = content
    end

    def render
      helpers.tag(:meta, name: name, content: content) unless content.empty?
    end

    def helpers
      ActionController::Base.helpers
    end

    class MultipleMetaTag < MetaTag
      def render
        return if content.empty?

        helpers.tag(:meta, name: name, content: content) +
          helpers.tag(:meta, itemprop: name, content: content)
      end
    end

    class HttpEquiv < MetaTag
      def render
        return if content.empty?

        helpers.tag(:meta, "http-equiv" => name, content: content)
      end
    end

    class Description < MultipleMetaTag; end
    class Author < MultipleMetaTag; end
    class Keywords < MultipleMetaTag; end

    class Pragma < HttpEquiv; end
    class CacheControl < HttpEquiv; end
    class Imagetoolbar < HttpEquiv; end
    class Expires < HttpEquiv; end
    class Refresh < HttpEquiv; end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
page_meta-1.1.0 lib/page_meta/meta_tag.rb
page_meta-1.0.0 lib/page_meta/meta_tag.rb