Class: L43::Base::DataClass::DataClassMaker

Inherits:
Object
  • Object
show all
Defined in:
lib/l43/base/data_class/data_class_maker.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#block_nameObject (readonly)

Returns the value of attribute block_name.



10
11
12
# File 'lib/l43/base/data_class/data_class_maker.rb', line 10

def block_name
  @block_name
end

#block_requiredObject (readonly)

Returns the value of attribute block_required.



10
11
12
# File 'lib/l43/base/data_class/data_class_maker.rb', line 10

def block_required
  @block_required
end

#defaultedObject (readonly)

Returns the value of attribute defaulted.



10
11
12
# File 'lib/l43/base/data_class/data_class_maker.rb', line 10

def defaulted
  @defaulted
end

#klassObject (readonly)

Returns the value of attribute klass.



10
11
12
# File 'lib/l43/base/data_class/data_class_maker.rb', line 10

def klass
  @klass
end

Instance Method Details

#attributesObject



27
# File 'lib/l43/base/data_class/data_class_maker.rb', line 27

def attributes =  @__attributes__ ||= {}

#defattr(name, required: false, default: Undefined, &init) ⇒ Object

Raises:

  • (ArgumentError)


12
13
14
15
16
# File 'lib/l43/base/data_class/data_class_maker.rb', line 12

def defattr(name, required: false, default: Undefined, &init)
  raise ArgumentError, "must not redefine attribute #{name}" if attributes[name]
  attributes.update(name => Attribute.new(name:, required:, default:, &init))
  self
end

#defaultsObject



29
30
31
32
33
34
35
# File 'lib/l43/base/data_class/data_class_maker.rb', line 29

def defaults 
  @__defaults__ ||= attributes
    .values
    .reject { it.default == Undefined }
    .map { [it.name, it.default] }
    .to_h
end

#define(*required, **defaulted, &blk) ⇒ Object



18
19
20
21
22
23
24
25
# File 'lib/l43/base/data_class/data_class_maker.rb', line 18

def define(*required, **defaulted, &blk)
  add_required_attributes(required)
  add_defaulted_attributes(defaulted)
  @klass = Class.new(DataClassClass)
  define_klass
  klass.module_eval(&blk) if blk
  klass.freeze
end

#required_att_namesObject



37
# File 'lib/l43/base/data_class/data_class_maker.rb', line 37

def required_att_names =  @__required_att_names__ ||= attributes.values.select(&:required).map(&:name)