class HecksDomain::Parser::DomainObject

Attributes

aggregate[R]
fields[R]
name[R]

Public Class Methods

new(name, aggregate, &block) click to toggle source
# File lib/hecks/domain/parser/domain_object.rb, line 6
def initialize(name, aggregate, &block)
  @name = name
  @aggregate = aggregate
  @operations = []
  @fields = []
  if is_a?(Entity)
    add_field(:id, IntegerField).tap { |field| field.optional = true }
  end
  instance_eval(&block)
end

Public Instance Methods

binding() click to toggle source
Calls superclass method
# File lib/hecks/domain/parser/domain_object.rb, line 112
def binding
  super
end
boolean(name) click to toggle source
# File lib/hecks/domain/parser/domain_object.rb, line 87
def boolean(name)
  add_field(name, BooleanField)
end
boolean_accessors() click to toggle source
# File lib/hecks/domain/parser/domain_object.rb, line 29
def boolean_accessors
  @fields.select { |field| field.is_a?(BooleanField) }
end
commands() click to toggle source
# File lib/hecks/domain/parser/domain_object.rb, line 51
def commands
  @commands
end
currency(name) click to toggle source
# File lib/hecks/domain/parser/domain_object.rb, line 79
def currency(name)
  add_field(name, CurrencyField)
end
entity(name) click to toggle source
# File lib/hecks/domain/parser/domain_object.rb, line 91
def entity(name)
  add_field(name, EntityField)
end
file_name() click to toggle source
# File lib/hecks/domain/parser/domain_object.rb, line 99
def file_name
  folder_name + '.rb'
end
folder_name() click to toggle source
# File lib/hecks/domain/parser/domain_object.rb, line 103
def folder_name
  @name.to_s.underscore
end
initializer_attributes() click to toggle source
# File lib/hecks/domain/parser/domain_object.rb, line 21
def initializer_attributes
  @fields.reject(&:read_only?).map(&:attribute_name).join(', ')
end
integer(name) click to toggle source
# File lib/hecks/domain/parser/domain_object.rb, line 63
def integer(name)
  add_field(name, IntegerField)
end
invariants() click to toggle source
# File lib/hecks/domain/parser/domain_object.rb, line 25
def invariants
  @invariants
end
list(name) click to toggle source
# File lib/hecks/domain/parser/domain_object.rb, line 55
def list(name)
  add_field(name, ListField)
end
list_accessors() click to toggle source
# File lib/hecks/domain/parser/domain_object.rb, line 33
def list_accessors
  @fields.select { |field| field.is_a?(ListField) }
end
operations(list) click to toggle source
# File lib/hecks/domain/parser/domain_object.rb, line 67
def operations(list)
  @operations = list

  @operations = list.map do |name|
    Operation.new(name: name, domain_object: self)
  end
end
operations_get() click to toggle source
# File lib/hecks/domain/parser/domain_object.rb, line 75
def operations_get
  @operations
end
optional(value) click to toggle source
# File lib/hecks/domain/parser/domain_object.rb, line 17
def optional(value)
  value.optional = true
end
private_accessors() click to toggle source
# File lib/hecks/domain/parser/domain_object.rb, line 45
def private_accessors
  @fields.map do |field|
    field.private_accessor
  end.compact.join(', ')
end
public_accessors() click to toggle source
# File lib/hecks/domain/parser/domain_object.rb, line 37
def public_accessors
  @fields.map do |field|
    field.public_accessor
  end.tap do |fields|
    fields << ':id' if is_a?(Entity)
  end.compact.join(', ')
end
read_only(value) click to toggle source
# File lib/hecks/domain/parser/domain_object.rb, line 107
def read_only(value)
  value.read_only = true
  value
end
reference(name) click to toggle source
# File lib/hecks/domain/parser/domain_object.rb, line 95
def reference(name)
  add_field(name, ReferenceField)
end
string(name) click to toggle source
# File lib/hecks/domain/parser/domain_object.rb, line 59
def string(name)
  add_field(name, StringField)
end
value(name) click to toggle source
# File lib/hecks/domain/parser/domain_object.rb, line 83
def value(name)
  add_field(name, ValueField)
end

Private Instance Methods

add_field(name, type) click to toggle source
# File lib/hecks/domain/parser/domain_object.rb, line 118
def add_field(name, type)
  type.new(name).tap { |field| @fields << field }
end