class Hypermicrodata::Serializer::Uber
Constants
- ACTION_MAPPINGS
Public Instance Methods
serialize()
click to toggle source
# File lib/hypermicrodata/serializer/uber.rb, line 12 def serialize items = @document.items if items.length == 1 root_data = item_to_nested_data(items.first) if @location root_data.rel = 'self' root_data.url = @location end root_data.add_link('profile', @profile_path) if @profile_path uber = Uberous::Uber.new([root_data]) else data_collection = @document.items.map do |item| item_to_nested_data(item).tap do |data| data.name = generate_short_name(item.type) if item.type end end uber = Uberous::Uber.new(data_collection) uber.add_link('self', @location) if @location uber.add_link('profile', @profile_path) if @profile_path end uber.to_hash end
Private Instance Methods
action_name(method_name)
click to toggle source
# File lib/hypermicrodata/serializer/uber.rb, line 95 def action_name(method_name) ACTION_MAPPINGS[method_name.to_s.upcase] || method_name.to_s.downcase end
generate_short_name(item_types)
click to toggle source
# File lib/hypermicrodata/serializer/uber.rb, line 90 def generate_short_name(item_types) # TODO: これでいいのか? Array(item_types).first.sub(%r|^http://schema\.org/|, '') if item_types end
item_to_nested_data(item, self_name = nil)
click to toggle source
# File lib/hypermicrodata/serializer/uber.rb, line 36 def item_to_nested_data(item, self_name = nil) parent_data = Uberous::Data.new if item.id parent_data.url = item.id parent_data.rel = self_name if self_name # consider a link relation parent_data.name = generate_short_name(item.type) if item.type else parent_data.name = self_name if self_name # consider a semantic descriptor end item.all_properties_and_links.each do |property| rel = property.rels.join(' ') unless property.rels.empty? if property.item? # TODO: name複数の場合のduplicateをなくす property.names.each do |name| child_data = item_to_nested_data(property.item, name) parent_data.add_data(child_data) end # itemかつlinkというのはたぶんない elsif property.submit_button? attrs = { rel: rel, url: property.action_url, model: property.query_string, action: action_name(property.method) } attrs[:model] = "?#{attrs[:model]}" if %w(read remove).include?(attrs[:action]) attrs.reject! { |_, value| value.nil? } if property.names.empty? child_data = Uberous::Data.new(attrs) parent_data.add_data(child_data) else property.names.each do |name| child_data = Uberous::Data.new(attrs.merge(name: name)) parent_data.add_data(child_data) end end elsif property.link? attrs = { rel: rel, url: property.value } attrs.reject! { |_, value| value.nil? } if property.names.empty? child_data = Uberous::Data.new(attrs) parent_data.add_data(child_data) else property.names.each do |name| child_data = Uberous::Data.new(attrs.merge(name: name)) parent_data.add_data(child_data) end end else # only value property.names.each do |name| child_data = Uberous::Data.new(name: name, value: property.value) parent_data.add_data(child_data) end end end parent_data end