Class: DataClass::Definer

Inherits:
Object
  • Object
show all
Defined in:
lib/data_class/definer.rb

Overview

An internal class for providing implementation of ‘Data.define`.

Instance Method Summary collapse

Constructor Details

#initialize(definition) ⇒ Definer

Returns a new instance of Definer.

Parameters:



7
8
9
# File 'lib/data_class/definer.rb', line 7

def initialize(definition)
  @definition = definition
end

Instance Method Details

#define_class(parent_class:, &block) ⇒ Class<Data>

Parameters:

  • parent_class (Data)

Returns:



13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# File 'lib/data_class/definer.rb', line 13

def define_class(parent_class:, &block)
  attribute_names = @definition.attribute_names

  # defines a subclass of Data.
  Class.new(parent_class) do
    public_class_method :new
    private_class_method :define

    attribute_names.each { |key| define_method(key) { @data[key] } }

    define_singleton_method(:members) { attribute_names }

    class_eval(&block) unless block.nil?
  end
end