Module: JSON::Schematized::VirtusWrapper
- Extended by:
- Wrapper
- Defined in:
- lib/json/schematized/virtus_wrapper.rb
Defined Under Namespace
Modules: Attribute
Classes: Array
Class Method Summary
collapse
Methods included from Wrapper
add_attribute!, build_class_name, build_collection, build_model, collection_superclass, extended, meta_type, model_superclass, modularize, parse_json_schema_type, prepare_model, prepare_schema!
Class Method Details
.add_attribute!(ref, field_name, meta, kind) ⇒ Object
47
48
49
50
51
52
53
54
55
56
|
# File 'lib/json/schematized/virtus_wrapper.rb', line 47
def self.add_attribute!(ref, field_name, meta, kind)
opts = {}
klass = (kind.is_a?(Class) ? kind : kind.class)
if kind.is_a?(Class)
opts[:default] = klass.new if meta[:required] && kind.include?(::Virtus)
else
opts[:default] = kind.class.new
end
ref.attribute field_name, kind, opts
end
|
.collection_superclass ⇒ Object
58
59
60
|
# File 'lib/json/schematized/virtus_wrapper.rb', line 58
def self.collection_superclass
Array
end
|
.included(base) ⇒ Object
16
17
18
|
# File 'lib/json/schematized/virtus_wrapper.rb', line 16
def self.included(base)
base.send(:include, modularize(base.json_schema))
end
|
.modularize(json_schema) ⇒ Object
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
# File 'lib/json/schematized/virtus_wrapper.rb', line 20
def self.modularize(json_schema)
super(json_schema) do
include ::Virtus
VirtusWrapper.prepare_schema!(self, self.json_schema, :simple_types)
def self.included(base)
super
VirtusWrapper.prepare_schema!(base, json_schema, :complex_types)
end
def self.extend_object(base)
class_name = :ComplexTypes
(const_defined?(class_name) ?
const_get(class_name) :
const_set(class_name, Module.new)
).tap do |klass|
klass.send(:include, self) unless klass.include?(self)
base.extend klass
end
end
end
end
|
.prepare_model(ref, field_name, model_class, json_schema) ⇒ Object
43
44
45
|
# File 'lib/json/schematized/virtus_wrapper.rb', line 43
def self.prepare_model(ref, field_name, model_class, json_schema)
model_class.send(:include, modularize(json_schema))
end
|