Class: OpenActive::Helpers::JsonLd
- Inherits:
-
Object
- Object
- OpenActive::Helpers::JsonLd
- Defined in:
- lib/openactive/helpers/json_ld.rb
Class Method Summary collapse
-
.get_type(thing) ⇒ string
Returns the JSON-LD type from a given thing.
-
.prepare_data_for_serialization(obj, parent = nil, schema: false) ⇒ array
Returns an associative array with the data ready for JSON-LD serialization.
- .serialize_value(value, parent = nil, **kwargs) ⇒ Object
Class Method Details
.get_type(thing) ⇒ string
Returns the JSON-LD type from a given thing.
9 10 11 12 13 14 15 |
# File 'lib/openactive/helpers/json_ld.rb', line 9 def get_type(thing) # Append "type" attribute for all other classes reflect = ::ReflectionClass.new(thing) # Type is just the non-FQ class name reflect.get_short_name end |
.prepare_data_for_serialization(obj, parent = nil, schema: false) ⇒ array
Returns an associative array with the data ready for JSON-LD serialization.
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
# File 'lib/openactive/helpers/json_ld.rb', line 22 def prepare_data_for_serialization(obj, parent = nil, schema: false) data = obj.values # Only add context if object is subclass of BaseModel # and no parent, or parent is an RPDE item if obj.respond_to?(:context) && (parent.nil? || !parent.is_a?(OpenActive::JsonLdModel)) data["@context"] = [ *(schema ? ["https://schema.org"] : []), *obj.context, ] end # push @'s to the start data = data.sort_by do |k, _v| case k when '@context' 0 when '@type' 1 when '@id' 2 else if k.start_with?('@') 3 else 4 end end end # Loop all class methods, find the getters # and map defined attributes, normalizing attribute name data = Hash[data.map do |method_name, attr_value| attr_name = method_name attr_value = serialize_value(attr_value, obj, schema: schema) [attr_name.to_s, attr_value] end] # Remove empty elements Hash[data.select do |_key, value| next false if value.is_a?(Array) && value.empty? next false if value.nil? next false if value == "" true end] end |
.serialize_value(value, parent = nil, **kwargs) ⇒ Object
74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 |
# File 'lib/openactive/helpers/json_ld.rb', line 74 def serialize_value(value, parent = nil, **kwargs) if value.respond_to?(:iso8601) value.iso8601 elsif value.is_a?(TypesafeEnum::Base) value.value elsif value.is_a?(Array) value.map do |item| serialize_value(item, parent, **kwargs) end elsif value.is_a?(OpenActive::BaseModel) prepare_data_for_serialization( value, parent, **kwargs, ) elsif value.is_a?(BigDecimal) value.to_f elsif value.is_a?(Numeric) value elsif value.nil? # let nil be nil nil else value.to_s end end |