Module: JSON::Schematized::VirtusWrapper

Extended by:
Wrapper
Defined in:
lib/json/schematized/virtus_0_5_x_wrapper.rb,
lib/json/schematized/virtus_1_x_x_wrapper.rb

Defined Under Namespace

Modules: Attribute, ClassMethods 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



52
53
54
55
56
57
58
59
60
61
# File 'lib/json/schematized/virtus_0_5_x_wrapper.rb', line 52

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



63
64
65
# File 'lib/json/schematized/virtus_0_5_x_wrapper.rb', line 63

def self.collection_superclass
  Array
end

.included(base) ⇒ Object



14
15
16
17
# File 'lib/json/schematized/virtus_0_5_x_wrapper.rb', line 14

def self.included(base)
  base.send(:include, modularize(base.json_schema))
  base.extend ClassMethods
end

.modularize(json_schema) ⇒ Object



25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/json/schematized/virtus_0_5_x_wrapper.rb', line 25

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



48
49
50
# File 'lib/json/schematized/virtus_0_5_x_wrapper.rb', line 48

def self.prepare_model(ref, field_name, model_class, json_schema)
  model_class.send(:include, modularize(json_schema))
end