Class: DynamicSchema::Builder

Inherits:
Object
  • Object
show all
Includes:
Converter, Validator
Defined in:
lib/dynamic_schema/builder.rb

Instance Method Summary collapse

Methods included from Converter

#convert, #register_converter

Methods included from Validator

#valid?, #validate, #validate!

Constructor Details

#initializeBuilder

Returns a new instance of Builder.



9
10
11
12
# File 'lib/dynamic_schema/builder.rb', line 9

def initialize
  self.compiled_schema = nil 
  @schema_blocks = []
end

Instance Method Details

#build(values = nil, defaults: true, &block) ⇒ Object



32
33
34
35
36
37
38
39
# File 'lib/dynamic_schema/builder.rb', line 32

def build( values = nil, defaults: true, &block )
  receiver = Receiver::Object.new( values, 
                                   schema: self.compiled_schema, 
                                   converter: self, 
                                   defaults: defaults )      
  receiver.instance_eval( &block ) if block
  receiver.to_h 
end

#build_from_bytes(bytes, filename: '(schema)', values: nil, defaults: true) ⇒ Object



41
42
43
44
45
46
47
48
# File 'lib/dynamic_schema/builder.rb', line 41

def build_from_bytes( bytes, filename: '(schema)', values: nil, defaults: true )
  receiver = Receiver::Object.new( values, 
                                   schema: compiled_schema, 
                                   converter: self, 
                                   defaults: defaults )
  receiver.instance_eval( bytes, filename, 1 )
  receiver.to_h
end

#build_from_file(path, values: nil, defaults: true) ⇒ Object



50
51
52
53
54
55
# File 'lib/dynamic_schema/builder.rb', line 50

def build_from_file( path, values: nil, defaults: true )
  self.build_from_bytes( 
    File.read( path, encoding: 'UTF-8' ), 
    filename: path, values: values, defaults: defaults
  )
end

#define(inherit: nil, &block) ⇒ Object



14
15
16
17
18
19
20
21
22
23
# File 'lib/dynamic_schema/builder.rb', line 14

def define( inherit: nil, &block )
  @schema_blocks << inherit if inherit
  @schema_blocks << block if block

  compiler = Compiler.new( self.compiled_schema )
  compiler.compile( &inherit ) if inherit
  compiler.compile( &block ) if block
  self.compiled_schema = compiler.compiled
  self
end

#schemaObject



25
26
27
28
29
30
# File 'lib/dynamic_schema/builder.rb', line 25

def schema
  blocks = @schema_blocks.dup
  proc do 
    blocks.each { | block | instance_eval( &block ) }
  end
end