hecks-domain 0.1.16.rc → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/cli/builder/aggregate_command_line_builder.rb +15 -16
- data/lib/cli/builder/reference_command_line_builder.rb +15 -16
- data/lib/cli/builder/value_object_command_line_builder.rb +15 -16
- data/lib/cli/command_builder.rb +50 -45
- data/lib/cli/domain_object/assignment_template.rb +30 -31
- data/lib/cli/domain_object/option_formatter.rb +24 -25
- data/lib/cli/generate_domain_object.rb +50 -51
- data/lib/cli/new.rb +44 -45
- data/lib/cli/templates/aggregate/lib/domain/%name%/repository.rb.tt +2 -5
- data/lib/domain_builder/attribute.rb +58 -57
- data/lib/domain_builder/domain.rb +12 -15
- data/lib/domain_builder/domain_module.rb +24 -20
- data/lib/domain_builder/domain_object.rb +40 -39
- data/lib/domain_builder/head.rb +3 -6
- data/lib/domain_builder/hecks-domain-builder.rb +37 -0
- data/lib/domain_builder/reference.rb +11 -14
- data/lib/domain_builder/value.rb +3 -6
- data/lib/hecks-domain.rb +1 -3
- metadata +11 -27
- data/lib/adapters/adapters.rb +0 -2
- data/lib/adapters/resource_server/cli/cli.rb +0 -1
- data/lib/adapters/resource_server/cli/generate_resource_server.rb +0 -25
- data/lib/adapters/resource_server/cli/templates/resource_server/config.ru.tt +0 -8
- data/lib/adapters/resource_server/resource_server.rb +0 -3
- data/lib/adapters/sql_database/cli/cli.rb +0 -3
- data/lib/adapters/sql_database/cli/generate_domain_migrations.rb +0 -33
- data/lib/adapters/sql_database/cli/generate_sql_database.rb +0 -35
- data/lib/adapters/sql_database/cli/migration_builder.rb +0 -51
- data/lib/adapters/sql_database/cli/templates/migration.rb.tt +0 -14
- data/lib/adapters/sql_database/cli/templates/repository.rb.tt +0 -24
- data/lib/adapters/sql_database/cli/templates/sql_database/Rakefile +0 -15
- data/lib/adapters/sql_database/commands/read/fetch_references.rb +0 -58
- data/lib/adapters/sql_database/commands/update/delete_references.rb +0 -45
- data/lib/adapters/sql_database/commands/update/link_to_references.rb +0 -45
- data/lib/adapters/sql_database/sql_database.rb +0 -1
- data/lib/domain_builder/domain_builder.rb +0 -37
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 36115f8f920445947e5b136b7e6ec72f6f6f697f
|
4
|
+
data.tar.gz: 38140ef2136f7e3a3e0f742effc121cacf288001
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: af0c0408823a0d433eef1f7a84720b3256c6f85f5cc3765d9d4699e15f88af6df7d916bd2e49c409cf116e56fdfd27427814945075214d5d7f5771a5b5175b25
|
7
|
+
data.tar.gz: ae1950175278917b083ef1a72ecb77c0b3e760856cc213bf01925a2c3ac83fbd7aae31c3438b503b5d0add46d73241281d9ee82ba5be182c25e16fb2b206c43e
|
@@ -1,19 +1,18 @@
|
|
1
|
-
module
|
2
|
-
module
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
end
|
1
|
+
module HecksDomain
|
2
|
+
module CLI
|
3
|
+
class CommandBuilder
|
4
|
+
# Build an aggregate
|
5
|
+
module AggregateCommandLineBuilder
|
6
|
+
def self.build(domain, runner)
|
7
|
+
domain.domain_modules.values.each do |domain_module|
|
8
|
+
runner.call(
|
9
|
+
[
|
10
|
+
'generate domain_object',
|
11
|
+
'-t', 'aggregate',
|
12
|
+
'-n', domain_module.name,
|
13
|
+
'--head_name', domain_module.head.name,
|
14
|
+
'-a', domain_module.head.attribute_string
|
15
|
+
])
|
17
16
|
end
|
18
17
|
end
|
19
18
|
end
|
@@ -1,19 +1,18 @@
|
|
1
|
-
module
|
2
|
-
module
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
end
|
1
|
+
module HecksDomain
|
2
|
+
module CLI
|
3
|
+
class CommandBuilder
|
4
|
+
# Build a Reference object
|
5
|
+
module ReferenceCommandLineBuilder
|
6
|
+
def self.build(domain, runner)
|
7
|
+
domain.domain_modules.values.each do |domain_module|
|
8
|
+
domain_module.references.each do |reference|
|
9
|
+
runner.call([
|
10
|
+
'generate domain_object',
|
11
|
+
'-t', 'reference',
|
12
|
+
'-n', reference.name,
|
13
|
+
'-m', domain_module.name,
|
14
|
+
'-r', reference.referenced_entity
|
15
|
+
])
|
17
16
|
end
|
18
17
|
end
|
19
18
|
end
|
@@ -1,19 +1,18 @@
|
|
1
|
-
module
|
2
|
-
module
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
end
|
1
|
+
module HecksDomain
|
2
|
+
module CLI
|
3
|
+
class CommandBuilder
|
4
|
+
# Build a value object
|
5
|
+
module ValueObjectCommandLineBuilder
|
6
|
+
def self.build(domain, runner)
|
7
|
+
domain.domain_modules.values.each do |domain_module|
|
8
|
+
(domain_module.objects - [domain_module.head]).each do |value_object|
|
9
|
+
runner.call([
|
10
|
+
'generate domain_object',
|
11
|
+
'-t', 'value_object',
|
12
|
+
'-n', value_object.name,
|
13
|
+
'-m', domain_module.name,
|
14
|
+
'-a', value_object.attribute_string
|
15
|
+
])
|
17
16
|
end
|
18
17
|
end
|
19
18
|
end
|
data/lib/cli/command_builder.rb
CHANGED
@@ -1,58 +1,63 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
require 'pathname'
|
3
3
|
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
@name = name
|
10
|
-
@domain = DOMAIN
|
11
|
-
@dry_run = dry_run
|
12
|
-
@runner = CommandRunner.new(domain, name, dry_run)
|
13
|
-
end
|
4
|
+
if ENV['HECKS_DOMAIN_PATH']
|
5
|
+
load(ENV['HECKS_DOMAIN_PATH'])
|
6
|
+
else
|
7
|
+
load('Domain') if File.exist?('Domain')
|
8
|
+
end
|
14
9
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
10
|
+
module HecksDomain
|
11
|
+
module CLI
|
12
|
+
# Class for generating domain objects
|
13
|
+
class CommandBuilder
|
14
|
+
def initialize(name:, dry_run: false)
|
15
|
+
@name = name
|
16
|
+
@domain = DOMAIN
|
17
|
+
@dry_run = dry_run
|
18
|
+
@runner = HecksCLI::CommandRunner.new(domain, name, dry_run)
|
19
|
+
end
|
25
20
|
|
26
|
-
|
21
|
+
def call
|
22
|
+
delete_tmpfile
|
23
|
+
puts "\n"
|
24
|
+
generate :domain
|
25
|
+
generate :modules
|
26
|
+
generate :value_objects
|
27
|
+
generate :references
|
28
|
+
execute_tmpfile && return unless @dry_run
|
29
|
+
print_tmpfile
|
30
|
+
end
|
27
31
|
|
28
|
-
|
32
|
+
private
|
29
33
|
|
30
|
-
|
31
|
-
puts File.read('tmp/hecks')
|
32
|
-
end
|
34
|
+
attr_reader :runner, :name, :domain
|
33
35
|
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
end
|
36
|
+
def print_tmpfile
|
37
|
+
puts File.read('tmp/hecks')
|
38
|
+
end
|
38
39
|
|
39
|
-
|
40
|
-
|
41
|
-
|
40
|
+
def delete_tmpfile
|
41
|
+
return unless Pathname('tmp/hecks').exist?
|
42
|
+
FileUtils.rm('tmp/hecks')
|
43
|
+
end
|
44
|
+
|
45
|
+
def execute_tmpfile
|
46
|
+
exec('bash -x tmp/hecks')
|
47
|
+
end
|
42
48
|
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
end
|
49
|
+
def generate(command)
|
50
|
+
case command
|
51
|
+
when :references
|
52
|
+
ReferenceCommandLineBuilder.build(domain, runner)
|
53
|
+
when :domain
|
54
|
+
runner.call(['new', '-n', name])
|
55
|
+
when :modules
|
56
|
+
AggregateCommandLineBuilder.build(domain, runner)
|
57
|
+
when :value_objects
|
58
|
+
ValueObjectCommandLineBuilder.build(domain, runner)
|
59
|
+
else
|
60
|
+
raise "unrecognized command: #{command}"
|
56
61
|
end
|
57
62
|
end
|
58
63
|
end
|
@@ -1,41 +1,40 @@
|
|
1
|
-
module
|
2
|
-
module
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
1
|
+
module HecksDomain
|
2
|
+
module CLI
|
3
|
+
# Helpful methods for supporting object creation
|
4
|
+
class GenerateDomainObject
|
5
|
+
class AssignmentTemplate
|
6
|
+
def initialize(attributes)
|
7
|
+
@attributes = attributes
|
8
|
+
end
|
9
9
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
10
|
+
def render
|
11
|
+
attributes.map do |attribute|
|
12
|
+
@attribute = HecksDomainBuilder::Attribute.new(attribute)
|
13
|
+
do_assignment
|
14
|
+
end.join("\n")
|
15
|
+
end
|
16
16
|
|
17
|
-
|
17
|
+
private
|
18
18
|
|
19
|
-
|
19
|
+
attr_reader :attributes, :attribute
|
20
20
|
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
21
|
+
def do_assignment
|
22
|
+
return value_assignment if HecksDomainBuilder::Types.values.include?(@attribute.type)
|
23
|
+
return value_assignment if @attribute.type == 'Value'
|
24
|
+
return reference_factory_assignment if attribute.domain_module
|
25
|
+
return factory_assignment
|
26
|
+
end
|
27
27
|
|
28
|
-
|
29
|
-
|
30
|
-
|
28
|
+
def reference_factory_assignment
|
29
|
+
"@#{attribute.name} = #{attribute.type}Reference.factory(#{attribute.name})"
|
30
|
+
end
|
31
31
|
|
32
|
-
|
33
|
-
|
34
|
-
|
32
|
+
def factory_assignment
|
33
|
+
"@#{attribute.name} = #{attribute.type}.factory(#{attribute.name})"
|
34
|
+
end
|
35
35
|
|
36
|
-
|
37
|
-
|
38
|
-
end
|
36
|
+
def value_assignment
|
37
|
+
"@#{attribute.name} = #{attribute.name}"
|
39
38
|
end
|
40
39
|
end
|
41
40
|
end
|
@@ -1,33 +1,32 @@
|
|
1
|
-
module
|
2
|
-
module
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
end
|
1
|
+
module HecksDomain
|
2
|
+
module CLI
|
3
|
+
class GenerateDomainObject
|
4
|
+
# Generates options in templates
|
5
|
+
class OptionFormatter
|
6
|
+
def initialize(attributes)
|
7
|
+
@attributes = attributes.map do |attribute|
|
8
|
+
HecksDomainBuilder::Attribute.new(attribute)
|
10
9
|
end
|
10
|
+
end
|
11
11
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
end
|
12
|
+
def call(format, include_id: false)
|
13
|
+
case format
|
14
|
+
when 'keys_and_values'
|
15
|
+
attributes(include_id).map { |attribute| (attribute.name + ': ' + attribute.name) }.join(', ')
|
16
|
+
when 'attribute_string'
|
17
|
+
attributes(include_id).map { |attribute| ':' + attribute.name }.join ', '
|
18
|
+
when 'param_names'
|
19
|
+
attributes(include_id).map { |attribute| attribute.name + ':' }.join ', '
|
21
20
|
end
|
21
|
+
end
|
22
22
|
|
23
|
-
|
23
|
+
private
|
24
24
|
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
end
|
25
|
+
def attributes(include_id)
|
26
|
+
if include_id
|
27
|
+
@attributes + [HecksDomainBuilder::Attribute.new('id:value')]
|
28
|
+
else
|
29
|
+
@attributes
|
31
30
|
end
|
32
31
|
end
|
33
32
|
end
|
@@ -1,70 +1,69 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
-
module
|
3
|
-
module
|
4
|
-
|
5
|
-
|
6
|
-
|
2
|
+
module HecksDomain
|
3
|
+
module CLI
|
4
|
+
# Generate a domain object
|
5
|
+
class GenerateDomainObject < Thor::Group
|
6
|
+
include Thor::Actions
|
7
7
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
8
|
+
class_option :head_name, aliases: '-h', desc: 'the name of the aggregate head'
|
9
|
+
class_option :attributes, aliases: '-a', type: :array, desc: 'attributes for the aggregate head'
|
10
|
+
class_option :name, aliases: '-n', desc: 'attributes for the aggregate head'
|
11
|
+
class_option :type, aliases: '-t', desc: 'The type of domain object you want to create'
|
12
|
+
class_option :module_name, aliases: '-m', desc: 'Domain Module'
|
13
|
+
class_option :referenced_entity, aliases: '-r', desc: 'Referenced Entity'
|
14
14
|
|
15
|
-
|
16
|
-
|
17
|
-
|
15
|
+
def self.source_root
|
16
|
+
File.dirname(__FILE__) + '/templates'
|
17
|
+
end
|
18
18
|
|
19
|
-
|
20
|
-
|
21
|
-
|
19
|
+
def create_aggregate_folder
|
20
|
+
directory(options[:type].to_s, '.')
|
21
|
+
end
|
22
22
|
|
23
|
-
|
23
|
+
private
|
24
24
|
|
25
|
-
|
26
|
-
|
27
|
-
|
25
|
+
def assignment_template(attributes)
|
26
|
+
AssignmentTemplate.new(attributes).render
|
27
|
+
end
|
28
28
|
|
29
|
-
|
30
|
-
|
31
|
-
|
29
|
+
def option_format(format, include_id: false)
|
30
|
+
OptionFormatter.new(options[:attributes]).call(format, include_id: include_id)
|
31
|
+
end
|
32
32
|
|
33
|
-
|
34
|
-
|
35
|
-
|
33
|
+
def head_name
|
34
|
+
options[:head_name]
|
35
|
+
end
|
36
36
|
|
37
|
-
|
38
|
-
|
39
|
-
|
37
|
+
def name
|
38
|
+
options[:name]
|
39
|
+
end
|
40
40
|
|
41
|
-
|
42
|
-
|
43
|
-
|
41
|
+
def file_name
|
42
|
+
name.underscore
|
43
|
+
end
|
44
44
|
|
45
|
-
|
46
|
-
|
47
|
-
|
45
|
+
def attribute_names_without_id
|
46
|
+
attributes_without_id.map(&:name)
|
47
|
+
end
|
48
48
|
|
49
|
-
|
50
|
-
|
51
|
-
|
49
|
+
def module_name
|
50
|
+
options[:module_name]
|
51
|
+
end
|
52
52
|
|
53
|
-
|
54
|
-
|
55
|
-
|
53
|
+
def domain_name
|
54
|
+
Dir.pwd.split('/').last
|
55
|
+
end
|
56
56
|
|
57
|
-
|
58
|
-
|
59
|
-
|
57
|
+
def attributes_without_id_as_string
|
58
|
+
attributes_without_id.map { |attribute| ':' + HecksDomainBuilder::Attribute.new(attribute).name }.join ', '
|
59
|
+
end
|
60
60
|
|
61
|
-
|
62
|
-
|
63
|
-
|
61
|
+
def attributes
|
62
|
+
options[:attributes] + ['id:integer']
|
63
|
+
end
|
64
64
|
|
65
|
-
|
66
|
-
|
67
|
-
end
|
65
|
+
def attributes_without_id
|
66
|
+
options[:attributes]
|
68
67
|
end
|
69
68
|
end
|
70
69
|
end
|
data/lib/cli/new.rb
CHANGED
@@ -1,49 +1,48 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module
|
4
|
-
module
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
end
|
2
|
+
|
3
|
+
module HecksDomain
|
4
|
+
module CLI
|
5
|
+
# Generate a new domain project
|
6
|
+
class New < Thor::Group
|
7
|
+
namespace :hecks
|
8
|
+
include Thor::Actions
|
9
|
+
|
10
|
+
class_option :nobuilder, aliases: '-n', desc: 'load schema from builder'
|
11
|
+
class_option :dry_run, aliases: '-d', desc: 'Use when specifying a schema file to output the commands, without running them'
|
12
|
+
|
13
|
+
def self.source_root
|
14
|
+
File.dirname(__FILE__)
|
15
|
+
end
|
16
|
+
|
17
|
+
def load_from_builder
|
18
|
+
return if options[:nobuilder]
|
19
|
+
CommandBuilder.new(
|
20
|
+
name: File.basename(Dir.getwd),
|
21
|
+
dry_run: !options[:dry_run].nil?
|
22
|
+
).call
|
23
|
+
end
|
24
|
+
|
25
|
+
def create_hexagon_folder
|
26
|
+
return unless options[:nobuilder]
|
27
|
+
directory('templates/domain', ".")
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
def name
|
33
|
+
File.basename(Dir.getwd)
|
34
|
+
end
|
35
|
+
|
36
|
+
def module_name
|
37
|
+
name.camelize
|
38
|
+
end
|
39
|
+
|
40
|
+
def domain_module_name
|
41
|
+
domain_name.camelize
|
42
|
+
end
|
43
|
+
|
44
|
+
def condensed_module_name
|
45
|
+
name.delete('_')
|
47
46
|
end
|
48
47
|
end
|
49
48
|
end
|
@@ -3,12 +3,10 @@ module <%= domain_name.camelize %>
|
|
3
3
|
module <%= name.camelize %>
|
4
4
|
class Repository
|
5
5
|
@collection = {}
|
6
|
-
@last_id = 0
|
7
6
|
|
8
7
|
def self.create attributes={}
|
9
|
-
id =
|
10
|
-
@collection[id] = <%= options[:head_name].camelize %>.new(attributes
|
11
|
-
@last_id = id
|
8
|
+
id = attributes[:id]
|
9
|
+
@collection[id] = <%= options[:head_name].camelize %>.new(attributes)
|
12
10
|
Struct.new(:id).new(id)
|
13
11
|
end
|
14
12
|
|
@@ -33,7 +31,6 @@ module <%= domain_name.camelize %>
|
|
33
31
|
|
34
32
|
def self.delete_all
|
35
33
|
@collection = {}
|
36
|
-
@last_id = 0
|
37
34
|
end
|
38
35
|
end
|
39
36
|
end
|