hecks-application 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 +7 -0
- data/lib/commands/commands.rb +5 -0
- data/lib/commands/create.rb +50 -0
- data/lib/commands/crud_handler.rb +46 -0
- data/lib/commands/delete.rb +38 -0
- data/lib/commands/runner.rb +46 -0
- data/lib/commands/update.rb +39 -0
- data/lib/hecks-application.rb +43 -0
- data/lib/queries/find_by_id.rb +17 -0
- data/lib/queries/queries.rb +2 -0
- data/lib/queries/query_runner.rb +26 -0
- metadata +53 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: ae65b136d995774c776024097c136488ded32b4f
|
4
|
+
data.tar.gz: d0ee4938951a5edd4a01daec832c1c5d69966023
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: fc833f79fa960dbf3812b3b1a98d682f135083d3cb39a1f3349a5fcd5789ec43752f983c9cd7120b9e4cde939cebf25de4ec59076a09dadd22f84bb38788534c
|
7
|
+
data.tar.gz: adb854836b3a107ff9a1673a3aea078cb58ab3d7daacbaf633ac5a577d42328b6adddc0c9a0eb42733ac640a5ba12dd7a0f8c97fd51c1d320f4b07444ef98d81
|
@@ -0,0 +1,50 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module Hecks
|
3
|
+
class Application
|
4
|
+
module Commands
|
5
|
+
class Create
|
6
|
+
attr_accessor :args, :id, :errors, :repository, :domain_module
|
7
|
+
|
8
|
+
def initialize(args:, repository:, domain_module: )
|
9
|
+
@repository = repository
|
10
|
+
@args = args
|
11
|
+
@errors = {}
|
12
|
+
@validator = Hecks::Adapters::Validator
|
13
|
+
@domain_module = domain_module
|
14
|
+
end
|
15
|
+
|
16
|
+
def call
|
17
|
+
validate
|
18
|
+
create
|
19
|
+
self
|
20
|
+
end
|
21
|
+
|
22
|
+
def to_h
|
23
|
+
{ errors: errors, id: repository_result, args: args }
|
24
|
+
end
|
25
|
+
|
26
|
+
def name
|
27
|
+
self.class.to_s.split('::').last.underscore
|
28
|
+
end
|
29
|
+
|
30
|
+
def result
|
31
|
+
{ id: id, success: !id.nil?, errors: errors, args: args }
|
32
|
+
end
|
33
|
+
|
34
|
+
private
|
35
|
+
|
36
|
+
attr_reader :repository_result
|
37
|
+
|
38
|
+
def create
|
39
|
+
return if @errors.count.positive?
|
40
|
+
@id = @repository_result = repository.create(args).id
|
41
|
+
end
|
42
|
+
|
43
|
+
def validate
|
44
|
+
return if @validator.nil?
|
45
|
+
@errors = @validator.new(command: self).call.errors
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
module Hecks
|
2
|
+
class Application
|
3
|
+
module Commands
|
4
|
+
class CRUDHandler
|
5
|
+
attr_reader :module_name, :application
|
6
|
+
|
7
|
+
def initialize(module_name:, application:)
|
8
|
+
@module_name = module_name
|
9
|
+
@application = application
|
10
|
+
end
|
11
|
+
|
12
|
+
def create(attributes)
|
13
|
+
application.call(
|
14
|
+
module_name: module_name,
|
15
|
+
command_name: :create,
|
16
|
+
args: attributes
|
17
|
+
)
|
18
|
+
end
|
19
|
+
|
20
|
+
def read(id)
|
21
|
+
application.query(
|
22
|
+
module_name: module_name,
|
23
|
+
query_name: :find_by_id,
|
24
|
+
args: { id: id }
|
25
|
+
)
|
26
|
+
end
|
27
|
+
|
28
|
+
def update(id, attributes)
|
29
|
+
application.call(
|
30
|
+
module_name: module_name,
|
31
|
+
command_name: :update,
|
32
|
+
args: attributes.merge(id: id)
|
33
|
+
)
|
34
|
+
end
|
35
|
+
|
36
|
+
def delete(id)
|
37
|
+
application.call(
|
38
|
+
module_name: module_name,
|
39
|
+
command_name: :delete,
|
40
|
+
args: { id: id }
|
41
|
+
)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module Hecks
|
3
|
+
class Application
|
4
|
+
module Commands
|
5
|
+
class Delete
|
6
|
+
attr_accessor :args, :errors, :repository
|
7
|
+
|
8
|
+
def initialize(args: nil, repository:, domain_module:)
|
9
|
+
@args = args || chained_command.args
|
10
|
+
@repository = repository
|
11
|
+
@errors = { base: [] }
|
12
|
+
end
|
13
|
+
|
14
|
+
def call
|
15
|
+
delete
|
16
|
+
self
|
17
|
+
end
|
18
|
+
|
19
|
+
def name
|
20
|
+
self.class.to_s.split('::').last.underscore
|
21
|
+
end
|
22
|
+
|
23
|
+
def to_h
|
24
|
+
{ errors: errors, args: args }
|
25
|
+
end
|
26
|
+
|
27
|
+
private
|
28
|
+
|
29
|
+
attr_accessor :command_result, :repository
|
30
|
+
|
31
|
+
def delete
|
32
|
+
@result = repository.delete(args[:id])
|
33
|
+
@errors[:base] << "cound not find #{args[:id]}" unless @result
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
module Hecks
|
2
|
+
class Application
|
3
|
+
class Runner
|
4
|
+
attr_reader :module_name, :command
|
5
|
+
|
6
|
+
def initialize(command_name:, module_name:, args:, application:)
|
7
|
+
@command_name = command_name
|
8
|
+
@module_name = module_name
|
9
|
+
@args = args
|
10
|
+
@application = application
|
11
|
+
@domain_spec = application.domain_spec
|
12
|
+
end
|
13
|
+
|
14
|
+
def call()
|
15
|
+
fetch_command
|
16
|
+
run_command
|
17
|
+
broadcast
|
18
|
+
command
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
attr_reader :command_name, :args, :application, :domain_spec
|
24
|
+
|
25
|
+
def broadcast
|
26
|
+
application.events_port.send(command: command, module_name: module_name)
|
27
|
+
end
|
28
|
+
|
29
|
+
def fetch_command
|
30
|
+
@command = Commands.const_get(command_name.to_s.camelcase).new(
|
31
|
+
repository: application.database[module_name],
|
32
|
+
args: args,
|
33
|
+
domain_module: fetch_module
|
34
|
+
)
|
35
|
+
end
|
36
|
+
|
37
|
+
def fetch_module
|
38
|
+
domain_spec.domain_modules[module_name.to_s.camelize.to_sym]
|
39
|
+
end
|
40
|
+
|
41
|
+
def run_command
|
42
|
+
@command = command.call
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module Hecks
|
3
|
+
class Application
|
4
|
+
module Commands
|
5
|
+
class Update
|
6
|
+
attr_accessor :args, :errors, :id, :repository
|
7
|
+
|
8
|
+
def initialize(args: nil, repository: Repository, domain_module:)
|
9
|
+
@repository = repository
|
10
|
+
@args = args
|
11
|
+
@errors = []
|
12
|
+
@id = @args.delete(:id)
|
13
|
+
end
|
14
|
+
|
15
|
+
def name
|
16
|
+
self.class.to_s.split('::').last.underscore
|
17
|
+
end
|
18
|
+
|
19
|
+
def call
|
20
|
+
update
|
21
|
+
self
|
22
|
+
end
|
23
|
+
|
24
|
+
def to_h
|
25
|
+
{ id: id, args: args }
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
attr_reader :repository_result
|
31
|
+
|
32
|
+
def update
|
33
|
+
return if @errors.count.positive?
|
34
|
+
@repository_result = repository.update(id, args)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require 'hecks'# frozen_string_literal: true
|
2
|
+
require_relative 'commands/commands'
|
3
|
+
require_relative 'queries/queries'
|
4
|
+
|
5
|
+
module Hecks
|
6
|
+
class Application
|
7
|
+
attr_reader :database, :domain_spec, :events_port
|
8
|
+
def initialize(database: nil, listeners: [], domain:)
|
9
|
+
load(domain.spec_path)
|
10
|
+
@domain = domain
|
11
|
+
@database = database
|
12
|
+
@events_port = Adapters::Events.new(listeners: listeners)
|
13
|
+
@domain_spec = DOMAIN
|
14
|
+
end
|
15
|
+
|
16
|
+
def call(command_name:, module_name:, args: {})
|
17
|
+
Runner.new(
|
18
|
+
command_name: command_name,
|
19
|
+
module_name: module_name,
|
20
|
+
args: args,
|
21
|
+
application: self
|
22
|
+
).call
|
23
|
+
end
|
24
|
+
|
25
|
+
def [](module_name)
|
26
|
+
Commands::CRUDHandler.new(module_name: module_name, application: self)
|
27
|
+
end
|
28
|
+
|
29
|
+
def query(query_name:, module_name:, args: {})
|
30
|
+
QueryRunner.new(
|
31
|
+
module_name: module_name,
|
32
|
+
query_name: query_name,
|
33
|
+
args: args,
|
34
|
+
application: self
|
35
|
+
).call
|
36
|
+
end
|
37
|
+
|
38
|
+
def database
|
39
|
+
return @database.new(domain: @domain) if @database
|
40
|
+
return Hecks::Adapters::MemoryDatabase.new(domain: @domain)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module Hecks
|
3
|
+
class Application
|
4
|
+
module Queries
|
5
|
+
class FindById
|
6
|
+
def initialize(repository:)
|
7
|
+
@repository = repository
|
8
|
+
end
|
9
|
+
|
10
|
+
def call(params)
|
11
|
+
return unless params.keys == [:id]
|
12
|
+
@repository.read(params[:id])
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module Hecks
|
2
|
+
class Application
|
3
|
+
class QueryRunner
|
4
|
+
def initialize(query_name:, application:, module_name:, args:)
|
5
|
+
@query_name = query_name
|
6
|
+
@application = application
|
7
|
+
@module_name = module_name
|
8
|
+
@args = args
|
9
|
+
end
|
10
|
+
|
11
|
+
def call()
|
12
|
+
fetch.new(repository: repository).call(@args)
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
def fetch
|
18
|
+
Queries.const_get(@query_name.to_s.camelcase)
|
19
|
+
end
|
20
|
+
|
21
|
+
def repository
|
22
|
+
@application.database[@module_name]
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
metadata
ADDED
@@ -0,0 +1,53 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: hecks-application
|
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/commands/commands.rb
|
20
|
+
- lib/commands/create.rb
|
21
|
+
- lib/commands/crud_handler.rb
|
22
|
+
- lib/commands/delete.rb
|
23
|
+
- lib/commands/runner.rb
|
24
|
+
- lib/commands/update.rb
|
25
|
+
- lib/hecks-application.rb
|
26
|
+
- lib/queries/find_by_id.rb
|
27
|
+
- lib/queries/queries.rb
|
28
|
+
- lib/queries/query_runner.rb
|
29
|
+
homepage: https://github.com/chrisyoung/hecks-application
|
30
|
+
licenses:
|
31
|
+
- MIT
|
32
|
+
metadata: {}
|
33
|
+
post_install_message:
|
34
|
+
rdoc_options: []
|
35
|
+
require_paths:
|
36
|
+
- lib
|
37
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
38
|
+
requirements:
|
39
|
+
- - ">="
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
version: '0'
|
42
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
43
|
+
requirements:
|
44
|
+
- - ">="
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '0'
|
47
|
+
requirements: []
|
48
|
+
rubyforge_project:
|
49
|
+
rubygems_version: 2.6.10
|
50
|
+
signing_key:
|
51
|
+
specification_version: 4
|
52
|
+
summary: DDD and Hexagonal Code Generators
|
53
|
+
test_files: []
|