class Metamagic::Renderer

Constants

DEFAULT_SEPARATOR
DEFAULT_TAG_TYPES

Attributes

context[R]
separator[W]
site[W]
title_template[W]

Public Class Methods

new(context) click to toggle source
# File lib/metamagic/renderer.rb, line 32
def initialize(context)
  @context = context
end
register_tag_type(prefix, klass) click to toggle source
# File lib/metamagic/renderer.rb, line 20
def register_tag_type(prefix, klass)
  tag_types[prefix.to_sym] = klass
end
tag_type_for_key(key) click to toggle source
# File lib/metamagic/renderer.rb, line 24
def tag_type_for_key(key)
  prefix = key.split(":").first
  tag_types[prefix.to_sym] || MetaTag
end
tag_types() click to toggle source
# File lib/metamagic/renderer.rb, line 16
def tag_types
  @tag_types ||= DEFAULT_TAG_TYPES.dup
end

Public Instance Methods

add(hash = {}, enable_templates = false) click to toggle source
# File lib/metamagic/renderer.rb, line 40
def add(hash = {}, enable_templates = false)
  raise ArgumentError, "Defining meta properties via arrays has been removed in Metamagic v3.0 and replaced by some pretty helpers. Please see the readme at https://github.com/lassebunk/metamagic for more info." if hash.is_a?(Array)

  transform_hash(hash).each do |key, value|
    if enable_templates && is_template?(value)
      add_template key, value
      value = nil
    end

    klass = self.class.tag_type_for_key(key)
    tag = if klass.is_a?(Proc)
      CustomTag.new(self, key, value, klass)
    else
      klass.new(self, key, value)
    end
    tags << tag unless tags.include?(tag)
  end
end
add_template(key, value) click to toggle source
# File lib/metamagic/renderer.rb, line 63
def add_template(key, value)
  templates[key] = value
end
has_tag_type?(prefix) click to toggle source
# File lib/metamagic/renderer.rb, line 71
def has_tag_type?(prefix)
  self.class.tag_types.has_key?(prefix)
end
method_missing(*args) click to toggle source
# File lib/metamagic/renderer.rb, line 97
def method_missing(*args)
  context.send(*args)
end
render() click to toggle source
# File lib/metamagic/renderer.rb, line 93
def render
  tags.sort.map(&:to_html).compact.join("\n").html_safe
end
separator() click to toggle source
# File lib/metamagic/renderer.rb, line 87
def separator
  @separator ||= DEFAULT_SEPARATOR
end
site() click to toggle source
# File lib/metamagic/renderer.rb, line 81
def site
  @site or raise "Metamagic site not set. Please use `metamagic site: 'My Site'` to set it."
end
tags() click to toggle source
# File lib/metamagic/renderer.rb, line 36
def tags
  @tags ||= []
end
template_for(key) click to toggle source
# File lib/metamagic/renderer.rb, line 67
def template_for(key)
  templates[key]
end
templates() click to toggle source
# File lib/metamagic/renderer.rb, line 59
def templates
  @templates ||= {}
end
title_template() click to toggle source
# File lib/metamagic/renderer.rb, line 75
def title_template
  @title_template ||= ":title"
end

Private Instance Methods

is_template?(value) click to toggle source
# File lib/metamagic/renderer.rb, line 103
def is_template?(value)
  Array(value).any? do |val|
    val.is_a?(Proc) ||
    val.is_a?(Symbol) ||
    val =~ /\A:\w+/
  end
end
transform_hash(hash, path = "") click to toggle source

Transforms a nested hash into meta property keys.

# File lib/metamagic/renderer.rb, line 112
def transform_hash(hash, path = "")
  hash.each_with_object({}) do |(k, v), ret|
    key = path + k.to_s

    if v.is_a?(Hash)
      ret.merge! transform_hash(v, "#{key}:")
    else
      ret[key] = v
    end
  end
end