hecks-domain 0.1.16.rc → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
@@ -1,60 +1,61 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
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
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
1
|
+
class HecksDomainBuilder
|
2
|
+
# A Domain Object attribute
|
3
|
+
class Attribute
|
4
|
+
attr_writer :type
|
5
|
+
attr_reader :object_name
|
6
|
+
|
7
|
+
def initialize(string)
|
8
|
+
@string = string
|
9
|
+
@object_name = object_name
|
10
|
+
end
|
11
|
+
|
12
|
+
def list?
|
13
|
+
@string.include?("[")
|
14
|
+
end
|
15
|
+
|
16
|
+
def name
|
17
|
+
@string.split(":").first
|
18
|
+
end
|
19
|
+
|
20
|
+
def type
|
21
|
+
return @type if @type
|
22
|
+
@string.split(":").last.delete("[").delete("]").camelize
|
23
|
+
end
|
24
|
+
|
25
|
+
def domain_module
|
26
|
+
return unless @string.include?("::")
|
27
|
+
@string.split("::").first.split(":").last.camelize
|
28
|
+
end
|
29
|
+
|
30
|
+
def copy(new_values={})
|
31
|
+
result = self.class.new(@string)
|
32
|
+
result.type = new_values[:type] if new_values[:type]
|
33
|
+
result
|
34
|
+
end
|
35
|
+
|
36
|
+
def reference?
|
37
|
+
!primitive? && !list?
|
38
|
+
end
|
39
|
+
|
40
|
+
def domain_reference?
|
41
|
+
@string.include?('::')
|
42
|
+
end
|
43
|
+
|
44
|
+
def referenced_object
|
45
|
+
return unless reference?
|
46
|
+
return @string.split("::").last if @string.include?("::")
|
47
|
+
@string.split(":").last
|
48
|
+
end
|
49
|
+
|
50
|
+
def primitive?
|
51
|
+
['String', 'Integer', 'Currency'].include?(type)
|
52
|
+
end
|
53
|
+
|
54
|
+
def ==(other)
|
55
|
+
return false if other.name != name
|
56
|
+
return false if other.type != type
|
57
|
+
return false if other.domain_module != domain_module
|
58
|
+
return true
|
58
59
|
end
|
59
60
|
end
|
60
61
|
end
|
@@ -1,19 +1,16 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
end
|
1
|
+
class HecksDomainBuilder
|
2
|
+
# A domain
|
3
|
+
class Domain
|
4
|
+
attr_reader :domain_modules, :name
|
5
|
+
def initialize(name:)
|
6
|
+
@name = name
|
7
|
+
@domain_modules = {}
|
8
|
+
end
|
10
9
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
end
|
16
|
-
end
|
10
|
+
def module(name, &block)
|
11
|
+
result = DomainModule.new(name: name)
|
12
|
+
@domain_modules[name.to_sym] = result
|
13
|
+
yield(result)
|
17
14
|
end
|
18
15
|
end
|
19
16
|
end
|
@@ -1,28 +1,32 @@
|
|
1
|
-
|
2
|
-
module
|
3
|
-
|
4
|
-
|
5
|
-
attr_reader :objects, :name, :references
|
1
|
+
class HecksDomainBuilder
|
2
|
+
# A domain module
|
3
|
+
class DomainModule
|
4
|
+
attr_reader :objects, :name, :references
|
6
5
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
6
|
+
def initialize(name:)
|
7
|
+
@name = name
|
8
|
+
@objects = []
|
9
|
+
@references = []
|
10
|
+
end
|
12
11
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
12
|
+
def head(name=nil)
|
13
|
+
return (@objects << Head.new(name: name)).last if name
|
14
|
+
objects.find{ |o| o.is_a?(Head) }
|
15
|
+
end
|
17
16
|
|
18
|
-
|
19
|
-
|
20
|
-
|
17
|
+
def value(name)
|
18
|
+
(@objects << Value.new(name: name)).last
|
19
|
+
end
|
20
|
+
|
21
|
+
def reference(name)
|
22
|
+
(@references << Reference.new(name)).last
|
23
|
+
end
|
21
24
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
+
def find(name)
|
26
|
+
@objects.each do |object|
|
27
|
+
return object if object.name.downcase == name.downcase
|
25
28
|
end
|
29
|
+
return nil
|
26
30
|
end
|
27
31
|
end
|
28
32
|
end
|
@@ -1,43 +1,44 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
[attribute.name, type_with_domain_module(attribute)].join(':')
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
def references
|
29
|
-
@attributes.reject(&:primitive?)
|
30
|
-
end
|
31
|
-
|
32
|
-
private
|
33
|
-
|
34
|
-
def type_with_domain_module(attribute)
|
35
|
-
type = DomainBuilder::Types.values.include?(attribute.type) ? "Value" : attribute.type
|
36
|
-
type = '[' + type + ']' if attribute.list?
|
37
|
-
return type unless attribute.domain_module
|
38
|
-
[attribute.domain_module, type].join("::")
|
39
|
-
end
|
1
|
+
class HecksDomainBuilder
|
2
|
+
# A Domain Object
|
3
|
+
class DomainObject
|
4
|
+
attr_reader :name, :attributes
|
5
|
+
|
6
|
+
def initialize(name:)
|
7
|
+
@name = name
|
8
|
+
end
|
9
|
+
|
10
|
+
def attributes(*values)
|
11
|
+
return @attributes if @attributes
|
12
|
+
@attributes = values.map { |value| Attribute.new(value) }
|
13
|
+
end
|
14
|
+
|
15
|
+
def attribute_hash
|
16
|
+
attributes.map do |attribute|
|
17
|
+
[attribute.name.to_sym, type_with_domain_module(attribute)]
|
18
|
+
end.to_h
|
19
|
+
end
|
20
|
+
|
21
|
+
def attribute_string
|
22
|
+
attributes.map do |attribute|
|
23
|
+
[attribute.name, type_with_domain_module(attribute)].join(':')
|
40
24
|
end
|
41
25
|
end
|
26
|
+
|
27
|
+
def references
|
28
|
+
@attributes.reject(&:primitive?)
|
29
|
+
end
|
30
|
+
|
31
|
+
def domain_references
|
32
|
+
@attributes.select(&:domain_reference?)
|
33
|
+
end
|
34
|
+
|
35
|
+
private
|
36
|
+
|
37
|
+
def type_with_domain_module(attribute)
|
38
|
+
type = Types.values.include?(attribute.type) ? "Value" : attribute.type
|
39
|
+
type = '[' + type + ']' if attribute.list?
|
40
|
+
return type unless attribute.domain_module
|
41
|
+
[attribute.domain_module, type].join("::")
|
42
|
+
end
|
42
43
|
end
|
43
44
|
end
|
data/lib/domain_builder/head.rb
CHANGED
@@ -0,0 +1,37 @@
|
|
1
|
+
require_relative 'attribute'
|
2
|
+
require_relative 'domain'
|
3
|
+
require_relative 'domain_module'
|
4
|
+
require_relative 'domain_object'
|
5
|
+
require_relative 'value'
|
6
|
+
require_relative 'head'
|
7
|
+
require_relative 'reference'
|
8
|
+
|
9
|
+
# Represents information about your domain
|
10
|
+
class HecksDomainBuilder
|
11
|
+
Types ||= {
|
12
|
+
string: 'String',
|
13
|
+
integer: 'Integer',
|
14
|
+
currency: 'Currency'
|
15
|
+
}
|
16
|
+
|
17
|
+
attr_accessor :domain, :specification, :name
|
18
|
+
|
19
|
+
def initialize(domain_name:, &block)
|
20
|
+
@name = domain_name
|
21
|
+
@domain = Domain.new(name: domain_name)
|
22
|
+
block.yield(@domain)
|
23
|
+
self
|
24
|
+
end
|
25
|
+
|
26
|
+
def domain_modules
|
27
|
+
@domain.domain_modules
|
28
|
+
end
|
29
|
+
|
30
|
+
def [](module_name)
|
31
|
+
domain_modules[module_name]
|
32
|
+
end
|
33
|
+
|
34
|
+
def self.build(domain_name, &block)
|
35
|
+
new(domain_name: domain_name, &block)
|
36
|
+
end
|
37
|
+
end
|
@@ -1,19 +1,16 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
end
|
1
|
+
class HecksDomainBuilder
|
2
|
+
# Represents a reference object
|
3
|
+
class Reference
|
4
|
+
def initialize(reference)
|
5
|
+
@reference = reference
|
6
|
+
end
|
8
7
|
|
9
|
-
|
10
|
-
|
11
|
-
|
8
|
+
def referenced_entity
|
9
|
+
@reference.split("::").map(&:camelcase).join("::")
|
10
|
+
end
|
12
11
|
|
13
|
-
|
14
|
-
|
15
|
-
end
|
16
|
-
end
|
12
|
+
def name
|
13
|
+
@reference.split("::").last.camelcase + "Reference"
|
17
14
|
end
|
18
15
|
end
|
19
16
|
end
|
data/lib/domain_builder/value.rb
CHANGED
data/lib/hecks-domain.rb
CHANGED
metadata
CHANGED
@@ -1,65 +1,49 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hecks-domain
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Chris Young
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-12-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: activesupport
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '0
|
19
|
+
version: '5.0'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '0
|
26
|
+
version: '5.0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: thor
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
33
|
+
version: '0.19'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
40
|
+
version: '0.19'
|
41
41
|
description: Hecks Domain
|
42
42
|
email: chris@example.com
|
43
43
|
executables: []
|
44
44
|
extensions: []
|
45
45
|
extra_rdoc_files: []
|
46
46
|
files:
|
47
|
-
- lib/adapters/adapters.rb
|
48
|
-
- lib/adapters/resource_server/cli/cli.rb
|
49
|
-
- lib/adapters/resource_server/cli/generate_resource_server.rb
|
50
|
-
- lib/adapters/resource_server/cli/templates/resource_server/config.ru.tt
|
51
|
-
- lib/adapters/resource_server/resource_server.rb
|
52
|
-
- lib/adapters/sql_database/cli/cli.rb
|
53
|
-
- lib/adapters/sql_database/cli/generate_domain_migrations.rb
|
54
|
-
- lib/adapters/sql_database/cli/generate_sql_database.rb
|
55
|
-
- lib/adapters/sql_database/cli/migration_builder.rb
|
56
|
-
- lib/adapters/sql_database/cli/templates/migration.rb.tt
|
57
|
-
- lib/adapters/sql_database/cli/templates/repository.rb.tt
|
58
|
-
- lib/adapters/sql_database/cli/templates/sql_database/Rakefile
|
59
|
-
- lib/adapters/sql_database/commands/read/fetch_references.rb
|
60
|
-
- lib/adapters/sql_database/commands/update/delete_references.rb
|
61
|
-
- lib/adapters/sql_database/commands/update/link_to_references.rb
|
62
|
-
- lib/adapters/sql_database/sql_database.rb
|
63
47
|
- lib/cli/builder/aggregate_command_line_builder.rb
|
64
48
|
- lib/cli/builder/builder.rb
|
65
49
|
- lib/cli/builder/reference_command_line_builder.rb
|
@@ -81,10 +65,10 @@ files:
|
|
81
65
|
- lib/cli/templates/value_object/lib/domain/%module_name%/%name%.rb.tt
|
82
66
|
- lib/domain_builder/attribute.rb
|
83
67
|
- lib/domain_builder/domain.rb
|
84
|
-
- lib/domain_builder/domain_builder.rb
|
85
68
|
- lib/domain_builder/domain_module.rb
|
86
69
|
- lib/domain_builder/domain_object.rb
|
87
70
|
- lib/domain_builder/head.rb
|
71
|
+
- lib/domain_builder/hecks-domain-builder.rb
|
88
72
|
- lib/domain_builder/reference.rb
|
89
73
|
- lib/domain_builder/value.rb
|
90
74
|
- lib/hecks-domain.rb
|
@@ -103,9 +87,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
103
87
|
version: '0'
|
104
88
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
105
89
|
requirements:
|
106
|
-
- - "
|
90
|
+
- - ">="
|
107
91
|
- !ruby/object:Gem::Version
|
108
|
-
version:
|
92
|
+
version: '0'
|
109
93
|
requirements: []
|
110
94
|
rubyforge_project:
|
111
95
|
rubygems_version: 2.6.10
|
data/lib/adapters/adapters.rb
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
require_relative 'generate_resource_server'
|
@@ -1,25 +0,0 @@
|
|
1
|
-
module Hecks
|
2
|
-
module Domain
|
3
|
-
module Adapters
|
4
|
-
module ResourceServer
|
5
|
-
module CLI
|
6
|
-
class GenerateResourceServer < Thor::Group
|
7
|
-
include Thor::Actions
|
8
|
-
|
9
|
-
def self.source_root
|
10
|
-
File.dirname(__FILE__) + '/templates/'
|
11
|
-
end
|
12
|
-
|
13
|
-
def create_aggregate_folder
|
14
|
-
directory('resource_server', '.')
|
15
|
-
end
|
16
|
-
|
17
|
-
def domain
|
18
|
-
File.basename(Dir.getwd)
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
@@ -1,33 +0,0 @@
|
|
1
|
-
module Hecks
|
2
|
-
module Domain
|
3
|
-
module Adapters
|
4
|
-
class SQLDatabase
|
5
|
-
module CLI
|
6
|
-
class GenerateDomainMigrations < Thor::Group
|
7
|
-
include Thor::Actions
|
8
|
-
attr_writer :migration_builder
|
9
|
-
|
10
|
-
def load_domain_spec
|
11
|
-
load('../../Domain')
|
12
|
-
end
|
13
|
-
|
14
|
-
def self.source_root
|
15
|
-
File.dirname(__FILE__) + '/templates/'
|
16
|
-
end
|
17
|
-
|
18
|
-
def create_migration_file
|
19
|
-
@migration_builder = MigrationBuilder.new(self, DOMAIN)
|
20
|
-
@migration_builder.call
|
21
|
-
end
|
22
|
-
|
23
|
-
private
|
24
|
-
|
25
|
-
def migration_builder
|
26
|
-
@migration_builder
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
@@ -1,35 +0,0 @@
|
|
1
|
-
module Hecks
|
2
|
-
module Domain
|
3
|
-
module Adapters
|
4
|
-
class SQLDatabase
|
5
|
-
module CLI
|
6
|
-
class GenerateSQLDatabase < Thor::Group
|
7
|
-
include Thor::Actions
|
8
|
-
|
9
|
-
def self.source_root
|
10
|
-
File.dirname(__FILE__) + '/templates/'
|
11
|
-
end
|
12
|
-
|
13
|
-
def create_sql_database_folder
|
14
|
-
directory('sql_database', './adapters/sql_database')
|
15
|
-
end
|
16
|
-
|
17
|
-
def bundle
|
18
|
-
run 'bundle'
|
19
|
-
end
|
20
|
-
|
21
|
-
private
|
22
|
-
|
23
|
-
def class_name
|
24
|
-
@class_name
|
25
|
-
end
|
26
|
-
|
27
|
-
def domain_module_name
|
28
|
-
DOMAIN.name.camelize
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
@@ -1,51 +0,0 @@
|
|
1
|
-
module Hecks
|
2
|
-
module Domain
|
3
|
-
module Adapters
|
4
|
-
class SQLDatabase
|
5
|
-
module CLI
|
6
|
-
class MigrationBuilder
|
7
|
-
def initialize(generator, specification)
|
8
|
-
@generator = generator
|
9
|
-
@schema = Hecks::Adapters::SQLDatabase::Schema.factory(specification)
|
10
|
-
end
|
11
|
-
|
12
|
-
def call
|
13
|
-
generate_migrations
|
14
|
-
self
|
15
|
-
end
|
16
|
-
|
17
|
-
def table_name
|
18
|
-
@table.name
|
19
|
-
end
|
20
|
-
|
21
|
-
def columns
|
22
|
-
@table.columns
|
23
|
-
end
|
24
|
-
|
25
|
-
def tables
|
26
|
-
@schema.tables
|
27
|
-
end
|
28
|
-
|
29
|
-
private
|
30
|
-
|
31
|
-
attr_reader :generator
|
32
|
-
|
33
|
-
def file_name(index, object)
|
34
|
-
"#{index}_create_#{table_name}.rb"
|
35
|
-
end
|
36
|
-
|
37
|
-
def generate_migrations
|
38
|
-
tables.each.with_index(1) do |table, index|
|
39
|
-
@table = table
|
40
|
-
@generator.template(
|
41
|
-
"migration.rb.tt",
|
42
|
-
"db/migrate/" + file_name(index, table)
|
43
|
-
)
|
44
|
-
end
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|