class Haml::Buffer

this hack looks at active-record object's :html_schema_type field and adds itemscope, itemid and itemtype to element example:

%article

> <article class=“post” itemscope itemtype=“schema.org/BlogPosting” itemid=“1”>

%section

> <section itemscope itemtype=“schema.org/Blog”>

%section[Mida(:Blog), :sexjokes]

> <section itemscope itemtype=“schema.org/Blog/SexJokes”>

according to “Extension Mechanism” at schema.org/docs/extension.html

%span Hello

> <span itemprop=“title”>Hello</span>

Public Instance Methods

parse_object_ref(ref) click to toggle source

this methods calls then you pass %tag[object1, object2] ref argument is array

# File lib/green_monkey/ext/haml.rb, line 24
def parse_object_ref(ref)
  options = {}
  ref.each do |obj|
    next if obj == "local-variable"
    if self.class.respond_to?(:merge_attrs)
      self.class.merge_attrs(options, process_object_ref(obj))
    else
      Haml::AttributeBuilder.merge_attributes!(options, process_object_ref(obj))
    end
  end
  options
end
process_object_ref(obj) click to toggle source
# File lib/green_monkey/ext/haml.rb, line 37
def process_object_ref(obj)
  return {} if !obj

  if obj.is_a?(Symbol)
    # symbol => "itemprop" attribute
    return {'itemprop' => obj.to_s}
  elsif obj.kind_of?(Mida::Vocabulary)
    # Mida::Vocabulary => itemprop and itemtype
    return {'itemscope' => true, 'itemtype' => obj.itemtype.source}
  elsif obj.is_a?(String)
    return {'class' => obj}
  else
    options = {}
    options['class'] = obj.respond_to?(:haml_object_ref) ? obj.haml_object_ref : underscore(obj.class)
    options['id'] = "#{options['class']}_#{obj.id || 'new'}" if obj.respond_to?(:id)

    # my hack for microdata attributes
    if obj.respond_to?(:html_schema_type)
      options['itemscope'] = true
      options['itemid'] = obj.has_attribute?(:slug) ? obj.slug : obj.id

      if obj.html_schema_type.kind_of?(Mida::Vocabulary)
        options['itemtype'] = obj.html_schema_type.itemtype.source
      else
        #raise "No vocabulary found (#{obj.html_schema_type})" unless Mida::Vocabulary.find(obj.html_schema_type)
        options['itemtype'] = obj.html_schema_type
      end
    end

    return options
  end
end