hecks-domain 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (90) hide show
  1. checksums.yaml +5 -5
  2. data/lib/hecks/domain/commands/generate.rb +98 -0
  3. data/lib/hecks/domain/commands.rb +1 -0
  4. data/lib/hecks/domain/generators/domain.rb +21 -0
  5. data/lib/hecks/domain/generators/domain_files.rb +28 -0
  6. data/lib/hecks/domain/generators/entity.rb +30 -0
  7. data/lib/hecks/domain/generators/operation.rb +32 -0
  8. data/lib/hecks/domain/generators/root.rb +30 -0
  9. data/lib/hecks/domain/generators/spec.rb +30 -0
  10. data/lib/hecks/domain/generators/value_object.rb +30 -0
  11. data/lib/hecks/domain/generators.rb +7 -0
  12. data/lib/hecks/domain/parser/aggregate.rb +44 -0
  13. data/lib/hecks/domain/parser/domain_object.rb +123 -0
  14. data/lib/hecks/domain/parser/entity_field.rb +55 -0
  15. data/lib/hecks/domain/parser/fields.rb +16 -0
  16. data/lib/hecks/domain/parser/list_field.rb +13 -0
  17. data/lib/hecks/domain/parser/operation.rb +15 -0
  18. data/lib/hecks/domain/parser/reference_field.rb +12 -0
  19. data/lib/hecks/domain/parser/spec_helper.rb +0 -0
  20. data/lib/hecks/domain/parser/value_field.rb +48 -0
  21. data/lib/hecks/domain/parser.rb +95 -0
  22. data/lib/hecks/domain/support/string.rb +9 -0
  23. data/lib/hecks/domain/support.rb +1 -0
  24. data/lib/hecks/domain/templates/%domain_name%.gemspec.tt +12 -0
  25. data/lib/hecks/domain/templates/%folder_name%/Domainfile.tt +9 -0
  26. data/lib/hecks/domain/templates/%folder_name%/events/command_will_run.rb.tt +11 -0
  27. data/lib/hecks/domain/templates/%folder_name%/spec/spec_helper.rb.tt +1 -0
  28. data/lib/hecks/domain/templates/entity/%aggregate_name%/%domain_object_name%/commands.rb.tt +11 -0
  29. data/lib/hecks/domain/templates/entity/%aggregate_name%/%domain_object_name%/events.rb.tt +11 -0
  30. data/lib/hecks/domain/templates/entity/%aggregate_name%/%domain_object_name%/factories/build.rb.tt +37 -0
  31. data/lib/hecks/domain/templates/entity/%aggregate_name%/%domain_object_name%/factories.rb.tt +11 -0
  32. data/lib/hecks/domain/templates/entity/%aggregate_name%/%domain_object_name%/invariants.rb.tt +11 -0
  33. data/lib/hecks/domain/templates/entity/%aggregate_name%/%domain_object_name%/queries.rb.tt +11 -0
  34. data/lib/hecks/domain/templates/entity/%aggregate_name%/%domain_object_name%/repository.rb.tt +68 -0
  35. data/lib/hecks/domain/templates/entity/%aggregate_name%/%domain_object_name%/subscribers.rb.tt +11 -0
  36. data/lib/hecks/domain/templates/entity/%aggregate_name%/%domain_object_name%.rb.tt +34 -0
  37. data/lib/hecks/domain/templates/lib/%domain_name%.rb.tt +9 -0
  38. data/lib/hecks/domain/templates/lib/support/commands/command_loader.rb +18 -0
  39. data/lib/hecks/domain/templates/lib/support/commands/command_runner.rb +17 -0
  40. data/lib/hecks/domain/templates/lib/support/commands.rb +2 -0
  41. data/lib/hecks/domain/templates/lib/support/domain_object.rb +25 -0
  42. data/lib/hecks/domain/templates/lib/support/events/domain_event.rb +14 -0
  43. data/lib/hecks/domain/templates/lib/support/events/domain_event_publisher.rb +34 -0
  44. data/lib/hecks/domain/templates/lib/support/events.rb +14 -0
  45. data/lib/hecks/domain/templates/lib/support/factories/factory_loader.rb +21 -0
  46. data/lib/hecks/domain/templates/lib/support/factories.rb +1 -0
  47. data/lib/hecks/domain/templates/lib/support/invariants/invariant_loader.rb +24 -0
  48. data/lib/hecks/domain/templates/lib/support/queries/query_loader.rb +18 -0
  49. data/lib/hecks/domain/templates/lib/support/queries.rb +1 -0
  50. data/lib/hecks/domain/templates/lib/support/repositories/repository_loader.rb +32 -0
  51. data/lib/hecks/domain/templates/lib/support/root.rb +27 -0
  52. data/lib/hecks/domain/templates/lib/support/support/string.rb +9 -0
  53. data/lib/hecks/domain/templates/lib/support.rb +11 -0
  54. data/lib/hecks/domain/templates/operation/%aggregate_name%/%domain_object_name%/commands/%operation_name%.rb.tt +21 -0
  55. data/lib/hecks/domain/templates/root/%aggregate_name%/root.rb.tt +14 -0
  56. data/lib/hecks/domain/templates/spec/%aggregate_name%/%root_name%_spec.rb.tt +12 -0
  57. data/lib/hecks/domain/templates/value_object/%aggregate_name%/%domain_object_name%/factories/build.rb.tt +37 -0
  58. data/lib/hecks/domain/templates/value_object/%aggregate_name%/%domain_object_name%/factories.rb.tt +11 -0
  59. data/lib/hecks/domain/templates/value_object/%aggregate_name%/%domain_object_name%.rb.tt +34 -0
  60. data/lib/hecks/domain/top_level_methods.rb +3 -0
  61. data/lib/hecks/domain.rb +21 -0
  62. metadata +87 -42
  63. data/lib/cli/builder/aggregate_command_line_builder.rb +0 -21
  64. data/lib/cli/builder/builder.rb +0 -3
  65. data/lib/cli/builder/reference_command_line_builder.rb +0 -22
  66. data/lib/cli/builder/value_object_command_line_builder.rb +0 -22
  67. data/lib/cli/cli.rb +0 -8
  68. data/lib/cli/command_builder.rb +0 -65
  69. data/lib/cli/domain_object/assignment_template.rb +0 -42
  70. data/lib/cli/domain_object/option_formatter.rb +0 -35
  71. data/lib/cli/generate_domain_object.rb +0 -70
  72. data/lib/cli/new.rb +0 -49
  73. data/lib/cli/templates/aggregate/lib/domain/%name%/%head_name%.rb.tt +0 -16
  74. data/lib/cli/templates/aggregate/lib/domain/%name%/%name%.rb.tt +0 -9
  75. data/lib/cli/templates/aggregate/lib/domain/%name%/repository.rb.tt +0 -38
  76. data/lib/cli/templates/domain/%name%.gemspec.tt +0 -12
  77. data/lib/cli/templates/domain/Version +0 -1
  78. data/lib/cli/templates/domain/lib/%name%.rb.tt +0 -21
  79. data/lib/cli/templates/domain/spec/spec_helper.rb.tt +0 -4
  80. data/lib/cli/templates/reference/lib/domain/%module_name%/%file_name%.rb.tt +0 -25
  81. data/lib/cli/templates/value_object/lib/domain/%module_name%/%name%.rb.tt +0 -24
  82. data/lib/domain_builder/attribute.rb +0 -61
  83. data/lib/domain_builder/domain.rb +0 -16
  84. data/lib/domain_builder/domain_module.rb +0 -32
  85. data/lib/domain_builder/domain_object.rb +0 -44
  86. data/lib/domain_builder/head.rb +0 -5
  87. data/lib/domain_builder/hecks-domain-builder.rb +0 -37
  88. data/lib/domain_builder/reference.rb +0 -16
  89. data/lib/domain_builder/value.rb +0 -5
  90. data/lib/hecks-domain.rb +0 -4
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 36115f8f920445947e5b136b7e6ec72f6f6f697f
4
- data.tar.gz: 38140ef2136f7e3a3e0f742effc121cacf288001
2
+ SHA256:
3
+ metadata.gz: 190e248050371c87592a293601aef341276718a2fac594564c34bb351ccf03b2
4
+ data.tar.gz: fdf5c867345ae5cfc47f57732a88e729e7209a4893c53d9ebf52b55e391ac1ec
5
5
  SHA512:
6
- metadata.gz: af0c0408823a0d433eef1f7a84720b3256c6f85f5cc3765d9d4699e15f88af6df7d916bd2e49c409cf116e56fdfd27427814945075214d5d7f5771a5b5175b25
7
- data.tar.gz: ae1950175278917b083ef1a72ecb77c0b3e760856cc213bf01925a2c3ac83fbd7aae31c3438b503b5d0add46d73241281d9ee82ba5be182c25e16fb2b206c43e
6
+ metadata.gz: b7f27ac2c55df2395eeccd421951b2ec3dc96f57781aa9eab22136a29ab303dccd9a23e4e883b1cd6b17983cbda222640d0738c65fcdaf4da49bc6a4d1de571b
7
+ data.tar.gz: e1cd143c164877eb341252e6f59e0c069dac56ef4682ca929f8c660667a4c51d04d079c12078f96e9367e713edf00d2335bd7553d83063c35a96dbba204b4013
@@ -0,0 +1,98 @@
1
+ # frozen_string_literal: true
2
+
3
+ class HecksDomain
4
+ module Commands
5
+ # Generate a Domainfile
6
+ class Generate < Thor
7
+ package_name 'Hecks'
8
+ include Thor::Actions
9
+
10
+ HECKS_FILE_NAME = 'Domainfile'
11
+
12
+ def self.source_root
13
+ File.dirname(__FILE__) + '/../templates'
14
+ end
15
+
16
+ desc 'domain', 'Generate domain objects from a Domainfile'
17
+ method_option :skip_operations, default: true, type: :boolean
18
+ method_option :skip_spec_generation, default: true, type: :boolean
19
+ def domain_from_domain_file
20
+ generate_domain_objects(domain_get)
21
+ generate_domain_files(domain_get)
22
+ generate_roots(domain_get)
23
+ generate_operations(domain_get, options)
24
+ generate_specs(domain_get, options)
25
+ end
26
+
27
+ private
28
+
29
+ def generate_roots(domain)
30
+ domain.aggregates.each do |aggregate|
31
+ aggregate.domain_objects.each do |domain_object|
32
+ next unless domain_object.is_a?(HecksDomain::Parser::Root)
33
+
34
+ Generators::Root.new(
35
+ [domain, aggregate, domain_object]
36
+ ).invoke_all
37
+ end
38
+ end
39
+ end
40
+
41
+ def generate_specs(domain, options)
42
+ domain.for_each_domain_object do |aggregate, domain_object|
43
+ next unless domain_object.is_a?(HecksDomain::Parser::Root)
44
+
45
+ Generators::Spec.new(
46
+ [domain, aggregate, domain_object], options
47
+ ).invoke_all
48
+ end
49
+ end
50
+
51
+ def domain_get
52
+ instance_eval(domain_file).domain
53
+ end
54
+
55
+ def domain_file
56
+ return unless File.exist?(HECKS_FILE_NAME)
57
+
58
+ File.open(HECKS_FILE_NAME).read
59
+ end
60
+
61
+ def generate_domain_files(domain)
62
+ Generators::DomainFiles.new([domain]).invoke_all
63
+ end
64
+
65
+ def generate_operations(domain, options)
66
+ domain.for_each_operation do |aggregate, domain_object, operation|
67
+ Generators::Operation.new(
68
+ [domain, aggregate, domain_object, operation],
69
+ skip: options[:skip_operations]
70
+ ).invoke_all
71
+ end
72
+ end
73
+
74
+ def generate_domain_objects(domain)
75
+ domain.for_each_domain_object do |aggregate, domain_object|
76
+ generate_entity(domain, aggregate, domain_object)
77
+ generate_value_object(domain, aggregate, domain_object)
78
+ end
79
+ end
80
+
81
+ def generate_value_object(domain, aggregate, domain_object)
82
+ return unless domain_object.is_a?(HecksDomain::Parser::ValueObject)
83
+
84
+ Generators::ValueObject.new(
85
+ [domain, aggregate, domain_object]
86
+ ).invoke_all
87
+ end
88
+
89
+ def generate_entity(domain, aggregate, domain_object)
90
+ return unless domain_object.is_a?(HecksDomain::Parser::Entity)
91
+
92
+ Generators::Entity.new(
93
+ [domain, aggregate, domain_object]
94
+ ).invoke_all
95
+ end
96
+ end
97
+ end
98
+ end
@@ -0,0 +1 @@
1
+ require_relative 'commands/generate'
@@ -0,0 +1,21 @@
1
+ class HecksDomain
2
+ module Generators
3
+ class Domain < Thor::Group
4
+ include Thor::Actions
5
+
6
+ argument :domain_name, optional: true
7
+
8
+ def self.source_root
9
+ File.dirname(__FILE__) + '/../templates'
10
+ end
11
+
12
+ def folder_name
13
+ domain_name.underscore
14
+ end
15
+
16
+ def write_domain_directory
17
+ directory('%folder_name%')
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,28 @@
1
+ class HecksDomain
2
+ module Generators
3
+ class DomainFiles < Thor::Group
4
+ include Thor::Actions
5
+
6
+ attr_reader :domain_name, :domain, :gemspec
7
+
8
+ def initialize(args)
9
+ @domain = args.first
10
+ @gemspec = @domain.gemspec
11
+
12
+ @domain_name = @domain.name.to_s.underscore
13
+ super
14
+ end
15
+
16
+ argument :name
17
+
18
+ def self.source_root
19
+ File.dirname(__FILE__) + '/../templates'
20
+ end
21
+
22
+ def write_gemspec
23
+ template('%domain_name%.gemspec.tt')
24
+ directory('lib')
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,30 @@
1
+ class HecksDomain
2
+ module Generators
3
+ class Entity < Thor::Group
4
+ include Thor::Actions
5
+
6
+ attr_reader :aggregate_name, :domain_name, :domain_object_name, :domain, :aggregate, :domain_object
7
+
8
+ def initialize(args)
9
+ @domain = args[0]
10
+ @aggregate = args[1]
11
+ @domain_object = args[2]
12
+
13
+ @domain_name = @domain.name.to_s.underscore
14
+ @aggregate_name = @aggregate.name.to_s.underscore
15
+ @domain_object_name = @domain_object.name.to_s.underscore
16
+ super
17
+ end
18
+
19
+ argument :name
20
+
21
+ def self.source_root
22
+ File.dirname(__FILE__) + '/../templates'
23
+ end
24
+
25
+ def write_aggregate_directory
26
+ directory('entity', 'domain')
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,32 @@
1
+ class HecksDomain
2
+ module Generators
3
+ class Operation < Thor::Group
4
+ include Thor::Actions
5
+
6
+ attr_reader :aggregate_name, :domain_name, :operation_name, :domain_object_name, :domain, :aggregate, :domain_object, :operation
7
+
8
+ def initialize(args, options)
9
+ @domain = args[0]
10
+ @aggregate = args[1]
11
+ @domain_object = args[2]
12
+ @operation = args[3]
13
+
14
+ @domain_name = @domain.name.to_s.underscore
15
+ @aggregate_name = @aggregate.name.to_s.underscore
16
+ @domain_object_name = @domain_object.name.to_s.underscore
17
+ @operation_name = @operation.name.to_s.underscore
18
+ super(args, options)
19
+ end
20
+
21
+ argument :name
22
+
23
+ def self.source_root
24
+ File.dirname(__FILE__) + '/../templates'
25
+ end
26
+
27
+ def write_aggregate_directory
28
+ directory('operation', 'domain')
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,30 @@
1
+ class HecksDomain
2
+ module Generators
3
+ class Root < Thor::Group
4
+ include Thor::Actions
5
+
6
+ attr_reader :aggregate_name, :domain_name, :root_name, :domain, :aggregate, :root
7
+
8
+ def initialize(args)
9
+ @domain = args[0]
10
+ @aggregate = args[1]
11
+ @root = args[2]
12
+
13
+ @domain_name = @domain.name.to_s.underscore
14
+ @aggregate_name = @aggregate.name.to_s.underscore
15
+ @root_name = @root.name.to_s.underscore
16
+ super
17
+ end
18
+
19
+ argument :name
20
+
21
+ def self.source_root
22
+ File.dirname(__FILE__) + '/../templates'
23
+ end
24
+
25
+ def write_aggregate_directory
26
+ directory('root', 'domain')
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,30 @@
1
+ class HecksDomain
2
+ module Generators
3
+ class Spec < Thor::Group
4
+ include Thor::Actions
5
+
6
+ attr_reader :aggregate_name, :domain_name, :root_name, :domain, :aggregate, :root
7
+
8
+ def initialize(args, options)
9
+ @domain = args[0]
10
+ @aggregate = args[1]
11
+ @root = args[2]
12
+
13
+ @domain_name = @domain.name.to_s.underscore
14
+ @aggregate_name = @aggregate.name.to_s.underscore
15
+ @root_name = @root.name.to_s.underscore
16
+ super
17
+ end
18
+
19
+ argument :name
20
+
21
+ def self.source_root
22
+ File.dirname(__FILE__) + '/../templates'
23
+ end
24
+
25
+ def write_directory
26
+ directory('spec', skip: options[:skip_spec_generation])
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,30 @@
1
+ class HecksDomain
2
+ module Generators
3
+ class ValueObject < Thor::Group
4
+ include Thor::Actions
5
+
6
+ attr_reader :aggregate_name, :domain_name, :domain_object_name, :domain, :aggregate, :domain_object
7
+
8
+ def initialize(args)
9
+ @domain = args[0]
10
+ @aggregate = args[1]
11
+ @domain_object = args[2]
12
+
13
+ @domain_name = @domain.name.to_s.underscore
14
+ @aggregate_name = @aggregate.name.to_s.underscore
15
+ @domain_object_name = @domain_object.name.to_s.underscore
16
+ super
17
+ end
18
+
19
+ argument :name
20
+
21
+ def self.source_root
22
+ File.dirname(__FILE__) + '/../templates'
23
+ end
24
+
25
+ def write_aggregate_directory
26
+ directory('value_object', 'domain')
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,7 @@
1
+ require_relative 'generators/domain'
2
+ require_relative 'generators/entity'
3
+ require_relative 'generators/root'
4
+ require_relative 'generators/value_object'
5
+ require_relative 'generators/operation'
6
+ require_relative 'generators/domain_files'
7
+ require_relative 'generators/spec'
@@ -0,0 +1,44 @@
1
+ class HecksDomain
2
+ class Parser
3
+ class Aggregate
4
+ attr_reader :domain, :name, :domain_objects
5
+
6
+ def initialize(name, domain, &block)
7
+ @name = name
8
+ @entities = []
9
+ @value_objects = []
10
+ @domain = domain
11
+ instance_eval(&block)
12
+ @domain_objects = @entities + @value_objects
13
+ end
14
+
15
+ def entity(name, &block)
16
+ Entity.new(name, self, &block).tap do |entity|
17
+ @entities << entity
18
+ end
19
+ end
20
+
21
+ def file_name
22
+ folder_name + '.rb'
23
+ end
24
+
25
+ def folder_name
26
+ name.to_s.underscore
27
+ end
28
+
29
+ def root(name, &block)
30
+ @root = Root.new(name, self, &block).tap do |root|
31
+ @entities << root
32
+ end
33
+ end
34
+
35
+ def value(name, &block)
36
+ @value_objects << ValueObject.new(name, self, &block)
37
+ end
38
+
39
+ def binding
40
+ super
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,123 @@
1
+ class HecksDomain
2
+ class Parser
3
+ class DomainObject
4
+ attr_reader :name, :aggregate, :fields
5
+
6
+ def initialize(name, aggregate, &block)
7
+ @name = name
8
+ @aggregate = aggregate
9
+ @operations = []
10
+ @fields = []
11
+ if is_a?(Entity)
12
+ add_field(:id, IntegerField).tap { |field| field.optional = true }
13
+ end
14
+ instance_eval(&block)
15
+ end
16
+
17
+ def optional(value)
18
+ value.optional = true
19
+ end
20
+
21
+ def initializer_attributes
22
+ @fields.reject(&:read_only?).map(&:attribute_name).join(', ')
23
+ end
24
+
25
+ def invariants
26
+ @invariants
27
+ end
28
+
29
+ def boolean_accessors
30
+ @fields.select { |field| field.is_a?(BooleanField) }
31
+ end
32
+
33
+ def list_accessors
34
+ @fields.select { |field| field.is_a?(ListField) }
35
+ end
36
+
37
+ def public_accessors
38
+ @fields.map do |field|
39
+ field.public_accessor
40
+ end.tap do |fields|
41
+ fields << ':id' if is_a?(Entity)
42
+ end.compact.join(', ')
43
+ end
44
+
45
+ def private_accessors
46
+ @fields.map do |field|
47
+ field.private_accessor
48
+ end.compact.join(', ')
49
+ end
50
+
51
+ def commands
52
+ @commands
53
+ end
54
+
55
+ def list(name)
56
+ add_field(name, ListField)
57
+ end
58
+
59
+ def string(name)
60
+ add_field(name, StringField)
61
+ end
62
+
63
+ def integer(name)
64
+ add_field(name, IntegerField)
65
+ end
66
+
67
+ def operations(list)
68
+ @operations = list
69
+
70
+ @operations = list.map do |name|
71
+ Operation.new(name: name, domain_object: self)
72
+ end
73
+ end
74
+
75
+ def operations_get
76
+ @operations
77
+ end
78
+
79
+ def currency(name)
80
+ add_field(name, CurrencyField)
81
+ end
82
+
83
+ def value(name)
84
+ add_field(name, ValueField)
85
+ end
86
+
87
+ def boolean(name)
88
+ add_field(name, BooleanField)
89
+ end
90
+
91
+ def entity(name)
92
+ add_field(name, EntityField)
93
+ end
94
+
95
+ def reference(name)
96
+ add_field(name, ReferenceField)
97
+ end
98
+
99
+ def file_name
100
+ folder_name + '.rb'
101
+ end
102
+
103
+ def folder_name
104
+ @name.to_s.underscore
105
+ end
106
+
107
+ def read_only(value)
108
+ value.read_only = true
109
+ value
110
+ end
111
+
112
+ def binding
113
+ super
114
+ end
115
+
116
+ private
117
+
118
+ def add_field(name, type)
119
+ type.new(name).tap { |field| @fields << field }
120
+ end
121
+ end
122
+ end
123
+ end
@@ -0,0 +1,55 @@
1
+ class HecksDomain
2
+ class Parser
3
+ class EntityField
4
+ attr_reader :name
5
+
6
+ def initialize(name)
7
+ @name = name
8
+ end
9
+
10
+ def as(name)
11
+ @as = name
12
+ self
13
+ end
14
+
15
+ def module_name
16
+ @as
17
+ end
18
+
19
+ def public_accessor
20
+ ":#{name}"
21
+ end
22
+
23
+ def private_accessor
24
+ ":#{name}"
25
+ end
26
+
27
+ def initial_state
28
+ name
29
+ end
30
+
31
+ def read_only=(value)
32
+ @read_only = value
33
+ end
34
+
35
+ def optional=(value)
36
+ @optional = value
37
+ end
38
+
39
+ def read_only?
40
+ @read_only
41
+ end
42
+
43
+ def optional?
44
+ @optional
45
+ end
46
+
47
+ def attribute_name
48
+ return name.to_s + ':' unless optional?
49
+ return name.to_s + ': []' if is_a?(ListField)
50
+
51
+ name.to_s + ': nil'
52
+ end
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,16 @@
1
+ class HecksDomain
2
+ class Parser
3
+ class BooleanField < ValueField
4
+ def initial_state
5
+ return 'nil' if read_only?
6
+ name
7
+ end
8
+ end
9
+ class Entity < DomainObject;end
10
+ class Root < Entity;end
11
+ class ValueObject < DomainObject;end
12
+ class StringField < ValueField;end
13
+ class IntegerField < ValueField;end
14
+ class CurrencyField < ValueField;end
15
+ end
16
+ end
@@ -0,0 +1,13 @@
1
+ class HecksDomain
2
+ class Parser
3
+ class ListField < EntityField
4
+ def initial_state
5
+ return '[]' if read_only?
6
+
7
+ name
8
+ end
9
+
10
+ def public_accessor; end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,15 @@
1
+ class HecksDomain
2
+ class Parser
3
+ class Operation
4
+ attr_reader :name
5
+ def initialize(name:, domain_object:)
6
+ @name = name
7
+ @domain_object = domain_object
8
+ end
9
+
10
+ def binding
11
+ super
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,12 @@
1
+ class HecksDomain
2
+ class Parser
3
+ class ReferenceField
4
+ class ReferenceField < EntityField
5
+ attr_reader :name
6
+ def module_name
7
+ @as.keys.first.to_s + '::' + @as.values.first.to_s
8
+ end
9
+ end
10
+ end
11
+ end
12
+ end
File without changes
@@ -0,0 +1,48 @@
1
+ class HecksDomain
2
+ class Parser
3
+ class ValueField
4
+ attr_reader :name
5
+ attr_writer :optional
6
+ attr_writer :read_only
7
+
8
+ def initialize(name)
9
+ @name = name
10
+ end
11
+
12
+ def optional?
13
+ @optional
14
+ end
15
+
16
+ def initial_state
17
+ name
18
+ end
19
+
20
+ def attribute_name
21
+ return name.to_s + ':' unless optional?
22
+
23
+ name.to_s + ': nil'
24
+ end
25
+
26
+ def public_accessor
27
+ ":#{name}"
28
+ end
29
+
30
+ def private_accessor
31
+ ":#{name}"
32
+ end
33
+
34
+ def module_name
35
+ @as
36
+ end
37
+
38
+ def read_only?
39
+ @read_only
40
+ end
41
+
42
+ def as(name)
43
+ @as = name
44
+ self
45
+ end
46
+ end
47
+ end
48
+ end