Class: ReeDto::DtoBuilder

Inherits:
Object
  • Object
show all
Includes:
Ree::Contracts::ArgContracts, Ree::Contracts::Core, Ree::LinkDSL
Defined in:
lib/ree_lib/packages/ree_dto/package/ree_dto/dto/dto_builder.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(klass) ⇒ DtoBuilder

Returns a new instance of DtoBuilder.



11
12
13
14
15
16
# File 'lib/ree_lib/packages/ree_dto/package/ree_dto/dto/dto_builder.rb', line 11

def initialize(klass)
  @klass = klass
  @fields = []
  @fields_with_default = []
  @collections = []
end

Instance Attribute Details

#collectionsObject (readonly)

Returns the value of attribute collections.



9
10
11
# File 'lib/ree_lib/packages/ree_dto/package/ree_dto/dto/dto_builder.rb', line 9

def collections
  @collections
end

#fieldsObject (readonly)

Returns the value of attribute fields.



9
10
11
# File 'lib/ree_lib/packages/ree_dto/package/ree_dto/dto/dto_builder.rb', line 9

def fields
  @fields
end

#fields_with_defaultObject (readonly)

Returns the value of attribute fields_with_default.



9
10
11
# File 'lib/ree_lib/packages/ree_dto/package/ree_dto/dto/dto_builder.rb', line 9

def fields_with_default
  @fields_with_default
end

Instance Method Details

#collection(name, contract, &proc) ⇒ Object



38
39
40
41
42
43
44
45
46
47
48
# File 'lib/ree_lib/packages/ree_dto/package/ree_dto/dto/dto_builder.rb', line 38

def collection(name, contract, &proc)
  existing = @collections.find { _1.name == name }

  if existing
    raise ArgumentError.new("collection :#{name} already defined for #{@klass}")
  end

  collection = CollectionMeta.new(name, contract, proc)
  @collections.push(collection)
  collection
end

#db_field(name, contract, setter: true, default: FieldMeta::NONE) ⇒ Object



33
34
35
# File 'lib/ree_lib/packages/ree_dto/package/ree_dto/dto/dto_builder.rb', line 33

def db_field(name, contract, setter: true, default: FieldMeta::NONE)
  field(name, contract, setter: setter, default: default, field_type: :db)
end

#field(name, contract, setter: true, default: FieldMeta::NONE, field_type: :custom) ⇒ Object



19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/ree_lib/packages/ree_dto/package/ree_dto/dto/dto_builder.rb', line 19

def field(name, contract, setter: true, default: FieldMeta::NONE, field_type: :custom)
  existing = @fields.find { _1.name == name }

  if existing
    raise ArgumentError.new("field :#{name} already defined for #{@klass}")
  end

  field = FieldMeta.new(name, contract, setter, default, field_type)
  @fields << field
  @fields_with_default << field if field.has_default?
  field
end