Module: Crystalline
- Defined in:
- lib/crystalline.rb,
lib/crystalline/types.rb,
lib/crystalline/utils.rb,
lib/crystalline/module.rb,
lib/crystalline/metadata_fields.rb
Overview
typed: false frozen_string_literal: true
Defined Under Namespace
Modules: Enum, MetadataFields, Utils
Classes: Array, Boolean, Hash, Nilable, Union
Class Method Summary
collapse
Class Method Details
.json_encode(val, primitives: true) ⇒ Object
59
60
61
62
63
64
65
66
67
68
69
70
71
|
# File 'lib/crystalline/module.rb', line 59
def self.json_encode(val, primitives: true)
if val.class.respond_to? :enums
val.serialize
elsif val.is_a? DateTime
val.strftime('%Y-%m-%dT%H:%M:%S.%NZ')
elsif val.nil?
nil
elsif primitives
val.to_s
else
val
end
end
|
.needs_string_conversion(val) ⇒ Object
20
21
22
|
# File 'lib/crystalline/module.rb', line 20
def self.needs_string_conversion(val)
val.class.respond_to?(:enums) || val.is_a?(DateTime) || val.nil?
end
|
.non_nilable_attr_count(klass) ⇒ Object
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
|
# File 'lib/crystalline/module.rb', line 73
def self.non_nilable_attr_count(klass)
if klass.respond_to? :fields
return -1 * klass.fields.count do |field|
!::Crystalline::Utils.nilable? field.type
end
else
if klass == String
return 0
elsif klass.is_a?(T::Types::TypedArray) || klass.is_a?(T::Types::TypedHash)
return 1
end
return 2
end
end
|
.to_dict(complex) ⇒ Object
8
9
10
11
12
13
14
15
16
17
18
|
# File 'lib/crystalline/module.rb', line 8
def self.to_dict(complex)
if complex.is_a? Array
complex.map { |v| Crystalline.to_dict(v) }
elsif complex.is_a? Hash
complex.transform_values { |v| Crystalline.to_dict(v) }
elsif complex.respond_to?(:class) && complex.class.include?(::Crystalline::MetadataFields)
complex.to_dict
else
json_encode complex, primitives: false
end
end
|
.to_json(complex) ⇒ Object
24
25
26
|
# File 'lib/crystalline/module.rb', line 24
def self.to_json(complex)
JSON.dump(to_dict(complex))
end
|
.unmarshal_json(data, type) ⇒ Object