Class: SchemaDotOrg::SchemaType
- Inherits:
-
ValidatedObject::Base
- Object
- ValidatedObject::Base
- SchemaDotOrg::SchemaType
show all
- Defined in:
- lib/schema_dot_org.rb
Direct Known Subclasses
AggregateOffer, CollegeOrUniversity, Comment, ContactPoint, DiscussionForumPosting, InteractionCounter, ItemList, Language, ListItem, Offer, Organization, Person, Place, Product, SearchAction, WebSite
Constant Summary
collapse
- EXCLUDED_INSTANCE_VARIABLES =
i[@context_for_validation @validation_context @errors].freeze
- ROOT_ATTR =
{ "@context" => "https://schema.org" }.freeze
- UNQUALIFIED_CLASS_NAME_REGEX =
/([^:]+)$/
Instance Method Summary
collapse
Instance Method Details
#_to_json_struct ⇒ Object
50
51
52
|
# File 'lib/schema_dot_org.rb', line 50
def _to_json_struct
attrs_and_values
end
|
#attrs ⇒ Object
101
102
103
|
# File 'lib/schema_dot_org.rb', line 101
def attrs
instance_variables.reject{ |v| EXCLUDED_INSTANCE_VARIABLES.include?(v) }
end
|
#attrs_and_values ⇒ Object
68
69
70
71
72
73
74
75
76
77
|
# File 'lib/schema_dot_org.rb', line 68
def attrs_and_values
attrs.map do |attr|
attr_name = snake_case_to_lower_camel_case(attr.to_s.delete_prefix('@')).sub('queryInput', 'query-input')
attr_value = instance_variable_get(attr)
[attr_name, resolve_value(attr_value)]
end.to_h
end
|
#is_schema_type?(object) ⇒ Boolean
106
107
108
|
# File 'lib/schema_dot_org.rb', line 106
def is_schema_type?(object)
object.class.module_parent == SchemaDotOrg
end
|
#object_to_json_struct(object) ⇒ Object
62
63
64
65
|
# File 'lib/schema_dot_org.rb', line 62
def object_to_json_struct(object)
return nil unless object
object.to_json_struct
end
|
#rails_production? ⇒ Boolean
111
112
113
|
# File 'lib/schema_dot_org.rb', line 111
def rails_production?
defined?(Rails) && Rails.env.production?
end
|
#resolve_value(value) ⇒ Object
80
81
82
83
84
85
86
87
88
89
90
91
92
93
|
# File 'lib/schema_dot_org.rb', line 80
def resolve_value(value)
if value.is_a?(Array)
value.map { |v| resolve_value(v) }
elsif value.is_a?(Date)
value.to_s
elsif is_schema_type?(value)
value.to_json_struct
else
value
end
end
|
#snake_case_to_lower_camel_case(snake_case) ⇒ Object
96
97
98
|
# File 'lib/schema_dot_org.rb', line 96
def snake_case_to_lower_camel_case(snake_case)
snake_case.to_s.split('_').map.with_index { |s, i| i.zero? ? s : s.capitalize }.join
end
|
#to_json(pretty: false, as_root: false) ⇒ Object
32
33
34
35
36
37
38
39
40
|
# File 'lib/schema_dot_org.rb', line 32
def to_json(pretty: false, as_root: false)
structure = as_root ? ROOT_ATTR.merge(to_json_struct) : to_json_struct
if pretty
JSON.pretty_generate(structure)
else
structure.to_json
end
end
|
#to_json_ld(pretty: false) ⇒ Object
27
28
29
|
# File 'lib/schema_dot_org.rb', line 27
def to_json_ld(pretty: false)
"<script type=\"application/ld+json\">\n" + to_json(pretty: pretty, as_root: true) + "\n</script>"
end
|
#to_json_struct ⇒ Object
Use the class name to create the “@type” attribute.
45
46
47
|
# File 'lib/schema_dot_org.rb', line 45
def to_json_struct
{ "@type" => un_namespaced_classname }.merge(_to_json_struct.reject { |_, v| v.blank? })
end
|
#to_s ⇒ Object
15
16
17
18
19
20
21
22
23
24
|
# File 'lib/schema_dot_org.rb', line 15
def to_s
json_string = to_json_ld(pretty: (!rails_production? && !ENV['SCHEMA_DOT_ORG_MINIFIED_JSON']))
if json_string.respond_to?(:html_safe)
json_string.html_safe
else
json_string
end
end
|
#un_namespaced_classname ⇒ Object
Returns the classname without the module namespace.
56
57
58
59
|
# File 'lib/schema_dot_org.rb', line 56
def un_namespaced_classname
self.class.name =~ UNQUALIFIED_CLASS_NAME_REGEX
Regexp.last_match(1)
end
|