Module: ReeDto::DtoClassMethods

Includes:
Ree::Contracts::ArgContracts, Ree::Contracts::Core
Defined in:
lib/ree_lib/packages/ree_dto/package/ree_dto/dto/dto_class_methods.rb

Instance Method Summary collapse

Instance Method Details

#build(attrs = nil, **kwargs) ⇒ Object



23
24
25
26
27
28
29
30
31
32
33
# File 'lib/ree_lib/packages/ree_dto/package/ree_dto/dto/dto_class_methods.rb', line 23

def build(attrs = nil, **kwargs)
  dto_obj = new(attrs || kwargs)
  set_attrs = attrs ? attrs.keys : kwargs.keys
  fields_to_set = fields_with_default.reject{ set_attrs.include?(_1.name) }

  fields_to_set.each do |field|
    dto_obj.set_attr(field.name, field.default)      
  end

  dto_obj
end

#build_from_attrs(attrs) ⇒ Object

Fast-path constructor used by compiled db_load: takes ownership of attrs (it becomes @_attrs without copying), so callers must not reuse the hash. Reads @fields_with_default directly: the contract-wrapped reader would revalidate the array on every row.



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

def build_from_attrs(attrs)
  (@fields_with_default || []).each do |field|
    attrs[field.name] = field.default unless attrs.key?(field.name)
  end

  dto_obj = allocate
  dto_obj.instance_variable_set(:@_attrs, attrs)
  dto_obj
end

#collectionsObject



19
20
21
# File 'lib/ree_lib/packages/ree_dto/package/ree_dto/dto/dto_class_methods.rb', line 19

def collections
  @collections ||= []
end

#fieldsObject



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

def fields
  @fields ||= []
end

#fields_with_defaultObject



14
15
16
# File 'lib/ree_lib/packages/ree_dto/package/ree_dto/dto/dto_class_methods.rb', line 14

def fields_with_default
  @fields_with_default ||= []
end