hecks-adapters-sql-database 0.0.1

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 5dd924418dc3e3cbc0550d67a7b833789e634f9c
4
+ data.tar.gz: 44855f256c24dda6ecad8fbe3baafff10c61909b
5
+ SHA512:
6
+ metadata.gz: 48f92c5faa521559100658cd02e3f74523a375fd96957ef439331ebceb7a40b3b6e62dfa8c4d9f74cd345cbf0d5c9f32556dcf6c6ae67ded41572ea6777e6b0a
7
+ data.tar.gz: 2bc7bd4b7ee26f68b8a17f6e3ab3870188b68e6221729e3f7c2558e890d10dbb0a76ab91042e13229cdd9548e975de98f0e75febb4e571944317d30faec06e54
data/lib/column.rb ADDED
@@ -0,0 +1,78 @@
1
+ module Hecks
2
+ module Adapters
3
+ class SQLDatabase
4
+ class Column
5
+ attr_reader :referenced_object
6
+ TYPE_MAP = {
7
+ 'Currency' => "BigDecimal",
8
+ 'String' => 'String',
9
+ 'Integer' => 'Integer'
10
+ }
11
+
12
+ def initialize(name:, referenced_object: nil, table_name: nil, type:, is_list: false)
13
+ @name = name
14
+ @referenced_object = referenced_object
15
+ @type = type
16
+ @table_name = table_name
17
+ @is_list = is_list
18
+ end
19
+
20
+ def self.factory(attribute)
21
+ new(
22
+ name: attribute.name,
23
+ referenced_object: attribute.referenced_object,
24
+ type: attribute.type,
25
+ table_name: attribute.object_name,
26
+ is_list: attribute.list?
27
+ )
28
+ end
29
+
30
+ def to_foreign_key
31
+ (type.downcase + '_id').to_sym
32
+ end
33
+
34
+ def to_table_name
35
+ name.downcase.pluralize.to_sym
36
+ end
37
+
38
+ def list?
39
+ @is_list
40
+ end
41
+
42
+ def reference?
43
+ @referenced_object
44
+ end
45
+
46
+ def referenced_table
47
+ return unless @referenced_object
48
+ @referenced_object.pluralize.underscore
49
+ end
50
+
51
+ def name
52
+ @name
53
+ end
54
+
55
+ def copy(new_attributes={})
56
+ self.class.new(
57
+ {
58
+ name: self.name,
59
+ referenced_object: self.referenced_object,
60
+ type: self.type,
61
+ is_list: self.list?
62
+ }.merge(new_attributes)
63
+ )
64
+ end
65
+
66
+ def ==(other)
67
+ return false if name != other.name
68
+ return false if referenced_table != other.referenced_table
69
+ true
70
+ end
71
+
72
+ def type
73
+ TYPE_MAP[@type] || @type
74
+ end
75
+ end
76
+ end
77
+ end
78
+ end
@@ -0,0 +1,4 @@
1
+ require_relative 'create'
2
+ require_relative 'read'
3
+ require_relative 'update'
4
+ require_relative 'delete'
@@ -0,0 +1,59 @@
1
+ require_relative 'create/find_or_create_references'
2
+ require_relative 'create/add_to_join_tables'
3
+
4
+ module Hecks
5
+ module Adapters
6
+ class SQLDatabase
7
+ module Commands
8
+ class Create
9
+ attr_reader :id
10
+
11
+ def initialize(attributes:, head:)
12
+ @attributes = attributes.clone
13
+ @reference_ids = {}
14
+ @head = head
15
+ @references = @head.references
16
+ @table = Table.factory([@head]).first
17
+ end
18
+
19
+ def call
20
+ DB.transaction do
21
+ find_or_create_references
22
+ create
23
+ add_to_join_tables
24
+ end
25
+ self
26
+ end
27
+
28
+ private
29
+
30
+ def find_or_create_references
31
+ @reference_ids =
32
+ FindOrCreateReferences.new(
33
+ head: @head,
34
+ attributes: @attributes
35
+ ).call.reference_ids
36
+ end
37
+
38
+ def create
39
+ graph = @references.map do |reference|
40
+ next if reference.list?
41
+ column = Column.factory(reference)
42
+ [column.to_foreign_key, @reference_ids[reference.name]]
43
+ end.compact.to_h
44
+
45
+ @id = DB[@table.name.to_sym].insert(@attributes.merge(graph))
46
+ end
47
+
48
+ def add_to_join_tables
49
+ AddToJoinTables.new(
50
+ head: @head,
51
+ id: @id,
52
+ reference_ids: @reference_ids
53
+ ).call
54
+ end
55
+ end
56
+ end
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,39 @@
1
+ module Hecks
2
+ module Adapters
3
+ class SQLDatabase
4
+ module Commands
5
+ class Create
6
+ class AddToJoinTables
7
+ attr_reader :reference_ids
8
+ def initialize(head:, reference_ids:, id:)
9
+ @head = head
10
+ @table = Table.factory([@head]).first
11
+ @reference_ids = reference_ids
12
+ @id = id
13
+ end
14
+
15
+ def call
16
+ @head.references.each do |reference|
17
+ column = Column.factory(reference)
18
+ join_table = JoinTable.new(@table, column)
19
+
20
+ next unless reference.list?
21
+
22
+ @reference_ids[reference.name.downcase].each do |id|
23
+ DB[join_table.name.to_sym].insert(record(column, id))
24
+ end
25
+ end
26
+ self
27
+ end
28
+
29
+ private
30
+
31
+ def record(column, id)
32
+ [[@table.to_foreign_key, @id], [(column.to_foreign_key).to_sym, id]].to_h
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,55 @@
1
+ module Hecks
2
+ module Adapters
3
+ class SQLDatabase
4
+ module Commands
5
+ class Create
6
+ class FindOrCreateReferences
7
+ attr_reader :reference_ids
8
+
9
+ def initialize(head:, attributes:)
10
+ @head = head
11
+ @attributes = attributes
12
+ @reference_ids = {}
13
+ end
14
+
15
+ def call
16
+ find_or_create_reference
17
+ find_or_create_references
18
+ self
19
+ end
20
+
21
+ private
22
+
23
+ def find_or_create_reference
24
+ @head.references.each do |reference|
25
+ next if reference.list?
26
+ attributes = @attributes.delete(reference.name.to_sym)
27
+ column = Column.factory(reference)
28
+ result = DB[column.to_table_name].first(attributes)
29
+
30
+ @reference_ids[reference.name] = result[:id] and return if result
31
+ @reference_ids[reference.name] = DB[column.as_table_name].insert(attributes)
32
+ end
33
+ end
34
+
35
+ def find_or_create_references
36
+ @head.references.each do |reference|
37
+ next unless reference.list?
38
+ attributes = @attributes.delete(reference.name.to_sym)
39
+ attributes.each do |attributes|
40
+ @reference_ids[reference.name] = [] unless @reference_ids[reference.name]
41
+
42
+ column = Column.factory(reference)
43
+ result = DB[column.to_table_name].first(attributes)
44
+
45
+ @reference_ids[reference.name] << result[:id] and return if result
46
+ @reference_ids[reference.name] << DB[column.to_table_name].insert(attributes)
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,20 @@
1
+ module Hecks
2
+ module Adapters
3
+ class SQLDatabase
4
+ module Commands
5
+ class Delete
6
+ def initialize(id:, head:)
7
+ @id = id
8
+ @head = head
9
+ end
10
+
11
+ def call
12
+ table = Table.factory([@head]).first
13
+ DB[table.name.to_sym].where(id: @id).delete
14
+ self
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,33 @@
1
+ require_relative 'read/fetch_references'
2
+ module Hecks
3
+ module Adapters
4
+ class SQLDatabase
5
+ module Commands
6
+ class Read
7
+ attr_reader :head, :entity, :table, :id
8
+
9
+ def initialize(id:, head:, entity_class:)
10
+ @head = head
11
+ @table = Table.factory([@head]).first
12
+ @id = id
13
+ @entity_class = entity_class
14
+ end
15
+
16
+ def call
17
+ fetch_entity
18
+ return if @entity.nil?
19
+ @entity_class.new(
20
+ @entity.merge(FetchReferences.new(self).call.reference_map)
21
+ )
22
+ end
23
+
24
+ private
25
+
26
+ def fetch_entity
27
+ @entity = DB[@table.name.to_sym].first(id: @id)
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,56 @@
1
+ module Hecks
2
+ module Adapters
3
+ class SQLDatabase
4
+ module Commands
5
+ class Read
6
+ class FetchReferences
7
+ attr_reader :reference_map
8
+ def initialize(read_command)
9
+ @head = read_command.head
10
+ @reference_map = {}
11
+ @entity = read_command.entity
12
+ @table = read_command.table
13
+ @id = read_command.id
14
+ end
15
+
16
+ def call
17
+ @head.references.each do |reference|
18
+ fetch_reference(reference)
19
+ fetch_references(reference)
20
+ end
21
+ self
22
+ end
23
+
24
+ private
25
+
26
+ def fetch_reference(reference)
27
+ return if reference.list?
28
+ column = Column.factory(reference)
29
+ value = DB[column.to_table_name].first(id: @entity[column.to_foreign_key])
30
+
31
+ @entity.delete(column.to_foreign_key)
32
+ value.delete(:id)
33
+ @reference_map[column.name.to_sym] = value
34
+ end
35
+
36
+ def fetch_references(reference)
37
+ return unless reference.list?
38
+
39
+ where_clause = {}
40
+ where_clause[@table.to_foreign_key.to_sym] = @id
41
+ column = Column.factory(reference)
42
+
43
+ @reference_map[column.name.to_sym] ||= []
44
+
45
+ DB[JoinTable.new(@table, reference).name.to_sym].where(where_clause).map do |record|
46
+ value_object = DB[column.to_table_name].first(id: record[column.to_foreign_key])
47
+ value_object.delete(:id)
48
+ @reference_map[column.name.to_sym] << value_object
49
+ end
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,46 @@
1
+ require_relative 'update/update_values'
2
+ require_relative 'update/link_to_references'
3
+ require_relative 'update/create_new_value'
4
+ require_relative 'update/delete_references'
5
+
6
+ module Hecks
7
+ module Adapters
8
+ class SQLDatabase
9
+ module Commands
10
+ class Update
11
+ attr_reader :id
12
+
13
+ def initialize(attributes:, head:, id:)
14
+ @attributes = attributes.clone
15
+ @references = head.references
16
+ @head_table = Table.factory([head]).first
17
+ @id = id
18
+ end
19
+
20
+ def call
21
+ DB.transaction do
22
+ update_references
23
+ fetch_record
24
+ update_record
25
+ end
26
+ self
27
+ end
28
+
29
+ private
30
+
31
+ def update_references
32
+ UpdateValues.new(@references, @attributes, @head_table, @id).call
33
+ end
34
+
35
+ def update_record
36
+ @record.update(@attributes)
37
+ end
38
+
39
+ def fetch_record
40
+ @record = DB[@head_table.name.to_sym].where(id: @id)
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,42 @@
1
+ module Hecks
2
+ module Adapters
3
+ class SQLDatabase
4
+ module Commands
5
+ class Update
6
+ class CreateNewValue
7
+ attr_reader :reference_ids
8
+
9
+ def initialize(reference:, attributes:, reference_ids:)
10
+ @reference = reference
11
+ @attributes = attributes
12
+ @reference_ids = {}
13
+ @column = Column.factory(reference)
14
+ @column_name = @column.name.to_sym
15
+ end
16
+
17
+ def call
18
+ create_values
19
+ create_value
20
+ self
21
+ end
22
+
23
+ private
24
+
25
+ def create_values
26
+ return unless @reference.list?
27
+ @attributes[@column_name].each do |value|
28
+ @reference_ids[@column_name] ||= []
29
+ @reference_ids[@column_name] << DB[@column.to_table_name].insert(value)
30
+ end
31
+ end
32
+
33
+ def create_value
34
+ return if @reference.list?
35
+ @reference_ids[@reference.name] = DB[@column.to_table_name].insert(@attributes[@column.name.to_sym])
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,43 @@
1
+ module Hecks
2
+ module Adapters
3
+ class SQLDatabase
4
+ module Commands
5
+ class Update
6
+ class DeleteReferences
7
+ attr_reader :attributes
8
+
9
+ def initialize(table:, attributes:, reference:)
10
+ @table = table
11
+ @attributes = attributes
12
+ @reference = reference
13
+ @where_clause = {}
14
+ @dataset = DB[JoinTable.new(@table, @reference).name.to_sym]
15
+ end
16
+
17
+ def call
18
+ # build_where_clause
19
+ delete_references
20
+ remove_references_from_attributes
21
+ self
22
+ end
23
+
24
+ private
25
+
26
+ def build_where_clause
27
+ DB[JoinTable.new(@table, @reference).name.to_sym]
28
+ end
29
+
30
+ def remove_references_from_attributes
31
+ @attributes.delete(@reference.name.to_sym)
32
+ end
33
+
34
+ def delete_references
35
+ return unless @reference.list?
36
+ @dataset.where(@where_clause).delete
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,44 @@
1
+ module Hecks
2
+ module Adapters
3
+ class SQLDatabase
4
+ module Commands
5
+ class Update
6
+ class LinkToReferences
7
+ attr_reader :reference_ids
8
+ def initialize(reference:, table:, reference_ids:, attributes:, id:)
9
+ @reference = reference
10
+ @reference_ids = reference_ids
11
+ @table = table
12
+ @attributes = attributes
13
+ @column = Column.factory(@reference)
14
+ @record = {}
15
+ @id = id
16
+ end
17
+
18
+ def call
19
+ make_linking_records
20
+ make_foreign_keys
21
+ self
22
+ end
23
+
24
+ private
25
+
26
+ def make_linking_records
27
+ return unless @reference.list?
28
+ @reference_ids[@reference.name.to_sym].each do |value|
29
+ @record[@column.to_foreign_key] = value
30
+ @record[@table.to_foreign_key] = @id
31
+ DB[JoinTable.new(@table, @reference).name.to_sym].insert(@record)
32
+ end
33
+ end
34
+
35
+ def make_foreign_keys
36
+ return if @reference.list?
37
+ @attributes[@column.to_foreign_key] = @reference_ids[@reference.name]
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,55 @@
1
+ module Hecks
2
+ module Adapters
3
+ class SQLDatabase
4
+ module Commands
5
+ class Update
6
+ class UpdateValues
7
+ def initialize(references, attributes, table, id)
8
+ @references = references
9
+ @attributes = attributes
10
+ @reference_ids = {}
11
+ @table = table
12
+ @id = id
13
+ end
14
+
15
+ def call
16
+ @references.each do |reference|
17
+ create_new_value(reference)
18
+ delete_old_references(reference)
19
+ link_to_new_values(reference)
20
+ end
21
+ end
22
+
23
+ private
24
+
25
+ def create_new_value(reference)
26
+ @reference_ids = CreateNewValue.new(
27
+ reference: reference,
28
+ attributes: @attributes,
29
+ reference_ids: @reference_ids
30
+ ).call.reference_ids
31
+ end
32
+
33
+ def delete_old_references(reference)
34
+ @attributes = DeleteReferences.new(
35
+ reference: reference,
36
+ table: @table,
37
+ attributes: @attributes
38
+ ).call.attributes
39
+ end
40
+
41
+ def link_to_new_values(reference)
42
+ LinkToReferences.new(
43
+ reference: reference,
44
+ table: @table,
45
+ reference_ids: @reference_ids,
46
+ attributes: @attributes,
47
+ id: @id
48
+ ).call
49
+ end
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,28 @@
1
+ require 'sequel'
2
+ require 'hecks-application'
3
+
4
+ require_relative 'column'
5
+ require_relative 'join_table'
6
+ require_relative 'schema_factory'
7
+ require_relative 'schema'
8
+ require_relative 'table'
9
+ require_relative 'repository'
10
+ require_relative 'commands/commands'
11
+
12
+ if ENV["DATABASE_URL"]
13
+ DB = Sequel.connect(ENV["DATABASE_URL"])
14
+ end
15
+
16
+ module Hecks
17
+ module Adapters
18
+ class SQLDatabase
19
+ def initialize(domain:)
20
+ @domain = domain
21
+ end
22
+
23
+ def [](module_name)
24
+ Repository.new(module_name: module_name)
25
+ end
26
+ end
27
+ end
28
+ end
data/lib/join_table.rb ADDED
@@ -0,0 +1,22 @@
1
+ module Hecks
2
+ module Adapters
3
+ class SQLDatabase
4
+ class JoinTable
5
+ def initialize(table, column)
6
+ @table = table
7
+ @column = column
8
+ end
9
+
10
+ def name
11
+ "#{@table.name}_#{@column.name}"
12
+ end
13
+
14
+ def columns
15
+ [@table.name, @column.name].map do |name|
16
+ Column.new(name: name.singularize + '_id', type: 'Integer')
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
data/lib/repository.rb ADDED
@@ -0,0 +1,38 @@
1
+ module Hecks
2
+ module Adapters
3
+ class SQLDatabase
4
+ class Repository
5
+ def initialize(module_name:)
6
+ @module_name = module_name
7
+ @head = DOMAIN[module_name].head
8
+ end
9
+
10
+ def create attributes
11
+ Commands::Create.new(attributes: attributes, head: @head).call
12
+ end
13
+
14
+ def update id, attributes
15
+ Commands::Update.new(id: id, attributes: attributes, head: @head).call
16
+ end
17
+
18
+ def read id
19
+ Commands::Read.new(
20
+ id: id,
21
+ head: @head,
22
+ entity_class: entity_class
23
+ ).call
24
+ end
25
+
26
+ def delete id
27
+ Commands::Delete.new(id: id, head: @head).call
28
+ end
29
+
30
+ private
31
+
32
+ def entity_class
33
+ DOMAIN.name.camelcase.constantize::Domain.const_get(@module_name).head
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
data/lib/schema.rb ADDED
@@ -0,0 +1,25 @@
1
+ require_relative 'schema_factory'
2
+ require_relative 'table'
3
+ require_relative 'join_table'
4
+ require_relative 'column'
5
+
6
+ module Hecks
7
+ module Adapters
8
+ class SQLDatabase
9
+ class Schema
10
+ attr_reader :tables
11
+ def self.factory(domain_spec)
12
+ SchemaFactory.new(domain_spec).build
13
+ end
14
+
15
+ def initialize(tables)
16
+ @tables = tables
17
+ end
18
+
19
+ def to_h
20
+ tables.map { |table| [table.name.to_sym, table] }.to_h
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,57 @@
1
+ module Hecks
2
+ module Adapters
3
+ class SQLDatabase
4
+ class SchemaFactory
5
+ def initialize(domain_spec)
6
+ @domain_spec = domain_spec
7
+ @tables = Table.factory(domain_objects)
8
+ @join_tables = []
9
+ end
10
+
11
+ def build
12
+ @tables.each do |table|
13
+ swap_domain_references(table)
14
+ build_join_tables(table)
15
+ remove_domain_columns(table)
16
+ end
17
+
18
+ Schema.new(@tables + @join_tables)
19
+ end
20
+
21
+ private
22
+
23
+ def domain_objects
24
+ @domain_spec.domain_modules.values.flat_map(&:objects)
25
+ end
26
+
27
+ def swap_domain_references(table)
28
+ table.foreign_key_columns.each do |column|
29
+ add_db_reference(column, table)
30
+ end
31
+ end
32
+
33
+ def build_join_tables(table)
34
+ table.join_table_columns.each do |column|
35
+ @join_tables << JoinTable.new(table, column)
36
+ end
37
+ end
38
+
39
+ def remove_domain_columns(table)
40
+ (table.foreign_key_columns + table.join_table_columns).each do |column|
41
+ table.columns = table.columns.select do |table_column|
42
+ table_column != column
43
+ end
44
+ end
45
+ end
46
+
47
+ def add_db_reference(column, table)
48
+ table.columns << foreign_key_column(column.referenced_object)
49
+ end
50
+
51
+ def foreign_key_column(column_name, is_list = false)
52
+ Column.new(name: column_name + '_id', type: 'Integer', is_list: is_list)
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end
data/lib/table.rb ADDED
@@ -0,0 +1,41 @@
1
+ module Hecks
2
+ module Adapters
3
+ class SQLDatabase
4
+ class Table
5
+ attr_accessor :columns
6
+
7
+ def self.factory(domain_objects)
8
+ r = domain_objects.map do |domain_object|
9
+ new(
10
+ name: domain_object.name,
11
+ columns: domain_object.attributes.map do |attribute|
12
+ Column.factory(attribute)
13
+ end
14
+ )
15
+ end
16
+ end
17
+
18
+ def initialize(name:, columns:)
19
+ @name = name
20
+ @columns = columns
21
+ end
22
+
23
+ def to_foreign_key
24
+ (name.singularize + '_id').to_sym
25
+ end
26
+
27
+ def join_table_columns
28
+ columns.select(&:list?)
29
+ end
30
+
31
+ def foreign_key_columns
32
+ columns.select(&:reference?)
33
+ end
34
+
35
+ def name
36
+ @name.pluralize.underscore
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
metadata ADDED
@@ -0,0 +1,62 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: hecks-adapters-sql-database
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Chris Young
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2017-03-11 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: Make the Domain the center of your programming world
14
+ email: chris@example.com
15
+ executables: []
16
+ extensions: []
17
+ extra_rdoc_files: []
18
+ files:
19
+ - lib/column.rb
20
+ - lib/commands/commands.rb
21
+ - lib/commands/create.rb
22
+ - lib/commands/create/add_to_join_tables.rb
23
+ - lib/commands/create/find_or_create_references.rb
24
+ - lib/commands/delete.rb
25
+ - lib/commands/read.rb
26
+ - lib/commands/read/fetch_references.rb
27
+ - lib/commands/update.rb
28
+ - lib/commands/update/create_new_value.rb
29
+ - lib/commands/update/delete_references.rb
30
+ - lib/commands/update/link_to_references.rb
31
+ - lib/commands/update/update_values.rb
32
+ - lib/hecks-adapters-sql-database.rb
33
+ - lib/join_table.rb
34
+ - lib/repository.rb
35
+ - lib/schema.rb
36
+ - lib/schema_factory.rb
37
+ - lib/table.rb
38
+ homepage: https://github.com/chrisyoung/hecks-domain
39
+ licenses:
40
+ - MIT
41
+ metadata: {}
42
+ post_install_message:
43
+ rdoc_options: []
44
+ require_paths:
45
+ - lib
46
+ required_ruby_version: !ruby/object:Gem::Requirement
47
+ requirements:
48
+ - - ">="
49
+ - !ruby/object:Gem::Version
50
+ version: '0'
51
+ required_rubygems_version: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
55
+ version: '0'
56
+ requirements: []
57
+ rubyforge_project:
58
+ rubygems_version: 2.6.10
59
+ signing_key:
60
+ specification_version: 4
61
+ summary: DDD and Hexagonal Code Generators
62
+ test_files: []