class Metamagic::Tag

Attributes

context[R]
key[R]
value[R]

Public Class Methods

new(context, key, value) click to toggle source
# File lib/metamagic/tag.rb, line 5
def initialize(context, key, value)
  @context, @key, @value = context, key.to_s, value
  @key = @key.gsub /^[^:]+:/, "" if remove_prefix?
end

Public Instance Methods

<=>(other) click to toggle source
# File lib/metamagic/tag.rb, line 47
def <=>(other)
  [sort_order, self.class.name] <=> [other.sort_order, other.class.name]
end
==(other) click to toggle source
# File lib/metamagic/tag.rb, line 43
def ==(other)
  self.class == other.class && self.key == other.key
end
interpolated_values() click to toggle source
# File lib/metamagic/tag.rb, line 26
def interpolated_values
  @interpolated_values ||= Array(template).map do |template|
    case template
    when Proc
      instance_exec(&template)
    when Symbol
      send(template)
    when String
      ERB::Util.html_escape(template).gsub(/:\w+/) do |key|
        ERB::Util.html_escape(send(key[1..-1]))
      end.html_safe
    else
      raise "Unknown template type #{template.class}."
    end
  end.flatten.compact.uniq.map { |value| ERB::Util.html_escape(value) }
end
method_missing(method, *args, &block) click to toggle source
# File lib/metamagic/tag.rb, line 51
def method_missing(method, *args, &block)
  return value if method.to_s == key.gsub(":", "_") # When calling e.g. `og_image`. Used for interpolating values.
  context.send(method, *args, &block)
end
remove_prefix?() click to toggle source
# File lib/metamagic/tag.rb, line 18
def remove_prefix?
  true
end
sort_order() click to toggle source
# File lib/metamagic/tag.rb, line 14
def sort_order
  1000
end
template() click to toggle source
# File lib/metamagic/tag.rb, line 22
def template
  @template ||= template_for(key) || :value
end
to_html() click to toggle source
# File lib/metamagic/tag.rb, line 10
def to_html
  raise "#{self.class.name}#to_html must be overridden to render tag"
end