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_superclassObject



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