class SolidusSeo::Jsonld::List

Attributes

data[RW]
list_items[RW]

Public Class Methods

new(data) click to toggle source
# File lib/solidus_seo/jsonld/list.rb, line 8
def initialize(data)
  @list_items = []
  @data = data.to_a

  parse
end

Private Instance Methods

already_a_list?() click to toggle source
# File lib/solidus_seo/jsonld/list.rb, line 40
def already_a_list?
  data.is_a?(Hash) && data["@type"] == list_type
end
as_list_item(item) click to toggle source
# File lib/solidus_seo/jsonld/list.rb, line 44
def as_list_item(item)
  {
    '@type': 'ListItem',
    position: list_items.size + 1,
    url: get_list_item_url(item)
  }
end
build_list() click to toggle source
# File lib/solidus_seo/jsonld/list.rb, line 32
def build_list
  @data = {
    "@context": "http://schema.org",
    "@type": list_type,
    "itemListElement": list_items
  }.with_indifferent_access
end
get_list_item_url(item) click to toggle source
# File lib/solidus_seo/jsonld/list.rb, line 52
def get_list_item_url(item)
  item = item.try(:to_jsonld) || item
  item.try(:url) || item.try('[]', :url) || raise("ListItem must define an URL")
end
list_type() click to toggle source
# File lib/solidus_seo/jsonld/list.rb, line 17
def list_type
  'ItemList'
end
parse() click to toggle source
# File lib/solidus_seo/jsonld/list.rb, line 21
def parse
  return {} if @data.blank?
  return @data if already_a_list?

  @data.each do |it|
    list_items << as_list_item(it)
  end

  build_list
end