class Apps::Common::Schema::Base

Constants

DEFAULT_CONTEXT

Attributes

context[R]
force_context[R]

Public Class Methods

new(**attrs) click to toggle source
# File lib/apps/common/schema/base.rb, line 12
def initialize(**attrs)
  prune(attrs).each { |name, value| instance_variable_set(:"@#{name}", value) }
end

Public Instance Methods

as_json(force_context: false) click to toggle source
# File lib/apps/common/schema/base.rb, line 44
def as_json(force_context: false)
  serialized = serialize

  if force_context == true
    serialized['@context'] ||= DEFAULT_CONTEXT
  elsif force_context.is_a?(String)
    serialized['@context'] = force_context
  end
  
  prune serialized
end
serialize() click to toggle source
# File lib/apps/common/schema/base.rb, line 20
def serialize
  {
    "@context" => serialized_context,
    "@type" => type
  }
end
serialize_hash(hash, key: 'name', value: 'value') click to toggle source
# File lib/apps/common/schema/base.rb, line 27
def serialize_hash(hash, key: 'name', value: 'value')
  hash.map do |k, v|
    {
      key => k,
      value => v
    }
  end
end
serialized_context() click to toggle source
# File lib/apps/common/schema/base.rb, line 36
def serialized_context
  if force_context
    context || DEFAULT_CONTEXT
  else
    context
  end
end
to_json(force_context: false, pretty: false) click to toggle source
# File lib/apps/common/schema/base.rb, line 56
def to_json(force_context: false, pretty: false)
  hash = as_json(force_context: force_context)

  pretty ? JSON.pretty_generate(hash) : JSON.dump(hash)
end
to_script(force_context: false, pretty: true) click to toggle source
# File lib/apps/common/schema/base.rb, line 62
def to_script(force_context: false, pretty: true)
  json = to_json(pretty: pretty, force_context: force_context)

  %`<script type="application/ld+json">\n#{json}\n</script>`
end
type() click to toggle source
# File lib/apps/common/schema/base.rb, line 16
def type
  @type ||= self.class.name.split('::')[-1]
end

Protected Instance Methods

prune(hash) click to toggle source
# File lib/apps/common/schema/base.rb, line 70
def prune(hash)
  hash.each_with_object({}) do |(key, value), result|
    # recursive prune
    result[key] = case value
                  when nil
                    next
                  when Array
                    next if value.empty?
                    value.map{ |v| v.is_a?(Hash) ? prune(v) : v }
                  when Hash
                    value = prune value
                    next if value.empty?
                    value
                  else
                    value
                  end
  end
end