hecks 0.0.8 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (80) hide show
  1. checksums.yaml +4 -4
  2. data/bin/hecks +1 -0
  3. data/lib/cli.rb +28 -0
  4. data/lib/cli/build.rb +13 -0
  5. data/lib/cli/{commands/console.rb → console.rb} +0 -0
  6. data/lib/cli/generate.rb +35 -0
  7. data/lib/cli/{commands/package.rb → package.rb} +2 -5
  8. data/lib/cli/test.rb +56 -0
  9. data/lib/{console/console.rb → console.rb} +1 -2
  10. data/lib/console/commands.rb +1 -1
  11. data/lib/hecks.rb +6 -6
  12. data/lib/packager.rb +2 -0
  13. data/lib/packager/generate_binary_package.rb +146 -0
  14. data/lib/packager/generate_lambda_package.rb +26 -0
  15. data/lib/{cli/commands/generate/templates/binary_package/build/resources → packager/templates}/Gemfile.tt +1 -1
  16. data/lib/{cli/commands/generate → packager}/templates/binary_package/build/linux-x86_64/lib/app/hello.rb +0 -0
  17. data/lib/{cli/commands/generate → packager}/templates/binary_package/build/resources/%domain_name%.rb.tt +6 -2
  18. data/lib/packager/templates/binary_package/build/resources/Dockerfile.tt +14 -0
  19. data/lib/{cli/commands/generate → packager}/templates/binary_package/build/resources/bundle/config +0 -0
  20. data/lib/{cli/commands/generate → packager}/templates/binary_package/build/resources/wrapper.tt +0 -0
  21. data/lib/{cli/commands/generate → packager}/templates/lambda_package/handler.js.tt +0 -0
  22. data/lib/{cli/commands/generate → packager}/templates/lambda_package/serverless.yml.tt +0 -0
  23. metadata +45 -94
  24. data/lib/adapters/adapters.rb +0 -6
  25. data/lib/adapters/events/events.rb +0 -27
  26. data/lib/adapters/logger/logger.rb +0 -18
  27. data/lib/adapters/memory_database/memory_database.rb +0 -18
  28. data/lib/adapters/resource_server/methods.rb +0 -22
  29. data/lib/adapters/resource_server/methods/create.rb +0 -49
  30. data/lib/adapters/resource_server/methods/delete.rb +0 -45
  31. data/lib/adapters/resource_server/methods/read.rb +0 -44
  32. data/lib/adapters/resource_server/methods/update.rb +0 -50
  33. data/lib/adapters/resource_server/resource_server.rb +0 -52
  34. data/lib/adapters/validator/validator.rb +0 -33
  35. data/lib/application/application.rb +0 -45
  36. data/lib/application/commands/commands.rb +0 -5
  37. data/lib/application/commands/create.rb +0 -52
  38. data/lib/application/commands/crud_handler.rb +0 -40
  39. data/lib/application/commands/delete.rb +0 -40
  40. data/lib/application/commands/runner.rb +0 -48
  41. data/lib/application/commands/update.rb +0 -41
  42. data/lib/application/queries/find_by_id.rb +0 -19
  43. data/lib/application/queries/queries.rb +0 -2
  44. data/lib/application/queries/query_runner.rb +0 -28
  45. data/lib/cli/cli.rb +0 -24
  46. data/lib/cli/commands.rb +0 -5
  47. data/lib/cli/commands/build.rb +0 -10
  48. data/lib/cli/commands/generate.rb +0 -26
  49. data/lib/cli/commands/generate/builder.rb +0 -60
  50. data/lib/cli/commands/generate/builder/aggregate_command_line_builder.rb +0 -18
  51. data/lib/cli/commands/generate/builder/reference_command_line_builder.rb +0 -19
  52. data/lib/cli/commands/generate/builder/value_object_command_line_builder.rb +0 -19
  53. data/lib/cli/commands/generate/generate_aws_package.rb +0 -17
  54. data/lib/cli/commands/generate/generate_binary_package.rb +0 -92
  55. data/lib/cli/commands/generate/generate_domain_object.rb +0 -71
  56. data/lib/cli/commands/generate/generate_domain_object/assignment_template.rb +0 -36
  57. data/lib/cli/commands/generate/generate_domain_object/option_formatter.rb +0 -30
  58. data/lib/cli/commands/generate/generate_lambda_package.rb +0 -20
  59. data/lib/cli/commands/generate/generate_resource_server.rb +0 -17
  60. data/lib/cli/commands/generate/new.rb +0 -47
  61. data/lib/cli/commands/generate/templates/aggregate/lib/domain/%name%/%head_name%.rb.tt +0 -16
  62. data/lib/cli/commands/generate/templates/aggregate/lib/domain/%name%/%name%.rb.tt +0 -9
  63. data/lib/cli/commands/generate/templates/aggregate/lib/domain/%name%/repository.rb.tt +0 -40
  64. data/lib/cli/commands/generate/templates/binary_package/build/resources/Dockerfile.tt +0 -8
  65. data/lib/cli/commands/generate/templates/domain/%name%.gemspec.tt +0 -12
  66. data/lib/cli/commands/generate/templates/domain/Version +0 -1
  67. data/lib/cli/commands/generate/templates/domain/lib/%name%.rb.tt +0 -21
  68. data/lib/cli/commands/generate/templates/domain/spec/spec_helper.rb.tt +0 -4
  69. data/lib/cli/commands/generate/templates/reference/lib/domain/%module_name%/%file_name%.rb.tt +0 -25
  70. data/lib/cli/commands/generate/templates/resource_server/config.ru.tt +0 -8
  71. data/lib/cli/commands/generate/templates/value_object/lib/domain/%module_name%/%name%.rb.tt +0 -24
  72. data/lib/cli/commands/test.rb +0 -41
  73. data/lib/domain_builder/attribute.rb +0 -33
  74. data/lib/domain_builder/domain.rb +0 -17
  75. data/lib/domain_builder/domain_builder.rb +0 -35
  76. data/lib/domain_builder/domain_module.rb +0 -26
  77. data/lib/domain_builder/domain_object.rb +0 -37
  78. data/lib/domain_builder/head.rb +0 -6
  79. data/lib/domain_builder/reference.rb +0 -17
  80. data/lib/domain_builder/value.rb +0 -6
@@ -1,40 +0,0 @@
1
- class CRUDHandler
2
- attr_reader :module_name, :application
3
-
4
- def initialize(module_name:, application:)
5
- @module_name = module_name
6
- @application = application
7
- end
8
-
9
- def create(attributes)
10
- application.call(
11
- module_name: module_name,
12
- command_name: :create,
13
- args: attributes
14
- )
15
- end
16
-
17
- def read(id)
18
- application.query(
19
- module_name: module_name,
20
- query_name: :find_by_id,
21
- args: {id: id}
22
- )
23
- end
24
-
25
- def update(id, attributes)
26
- application.call(
27
- module_name: module_name,
28
- command_name: :update,
29
- args: attributes.merge(id: id)
30
- )
31
- end
32
-
33
- def delete(id)
34
- application.call(
35
- module_name: module_name,
36
- command_name: :delete,
37
- args: {id: id}
38
- )
39
- end
40
- end
@@ -1,40 +0,0 @@
1
- # frozen_string_literal: true
2
- module Hecks
3
- module Adapters
4
- class Application
5
- module Commands
6
- class Delete
7
- attr_accessor :args, :errors, :repository
8
-
9
- def initialize(args: nil, repository:, domain_module:)
10
- @args = args || chained_command.args
11
- @repository = repository
12
- @errors = { base: [] }
13
- end
14
-
15
- def call
16
- delete
17
- self
18
- end
19
-
20
- def name
21
- self.class.to_s.split('::').last.underscore
22
- end
23
-
24
- def to_h
25
- { errors: errors, args: args }
26
- end
27
-
28
- private
29
-
30
- attr_accessor :command_result, :repository
31
-
32
- def delete
33
- @result = repository.delete(args[:id])
34
- @errors[:base] << "cound not find #{args[:id]}" unless @result
35
- end
36
- end
37
- end
38
- end
39
- end
40
- end
@@ -1,48 +0,0 @@
1
- module Hecks
2
- module Adapters
3
- class Application
4
- class Runner
5
- attr_reader :module_name, :command
6
-
7
- def initialize(command_name:, module_name:, args:, application:)
8
- @command_name = command_name
9
- @module_name = module_name
10
- @args = args
11
- @application = application
12
- @domain_spec = application.domain_spec
13
- end
14
-
15
- def call()
16
- fetch_command
17
- run_command
18
- broadcast
19
- command
20
- end
21
-
22
- private
23
-
24
- attr_reader :command_name, :args, :application, :domain_spec
25
-
26
- def broadcast
27
- application.events_port.send(command: command, module_name: module_name)
28
- end
29
-
30
- def fetch_command
31
- @command = Commands.const_get(command_name.to_s.camelcase).new(
32
- repository: application.database[module_name],
33
- args: args,
34
- domain_module: fetch_module
35
- )
36
- end
37
-
38
- def fetch_module
39
- domain_spec.domain_modules[module_name.to_s.camelize.to_sym]
40
- end
41
-
42
- def run_command
43
- @command = command.call
44
- end
45
- end
46
- end
47
- end
48
- end
@@ -1,41 +0,0 @@
1
- # frozen_string_literal: true
2
- module Hecks
3
- module Adapters
4
- class Application
5
- module Commands
6
- class Update
7
- attr_accessor :args, :errors, :id, :repository
8
-
9
- def initialize(args: nil, repository: Repository, domain_module:)
10
- @repository = repository
11
- @args = args
12
- @errors = []
13
- @id = @args.delete(:id)
14
- end
15
-
16
- def name
17
- self.class.to_s.split('::').last.underscore
18
- end
19
-
20
- def call
21
- update
22
- self
23
- end
24
-
25
- def to_h
26
- { id: id, args: args }
27
- end
28
-
29
- private
30
-
31
- attr_reader :repository_result
32
-
33
- def update
34
- return if @errors.count.positive?
35
- @repository_result = repository.update(id, args)
36
- end
37
- end
38
- end
39
- end
40
- end
41
- end
@@ -1,19 +0,0 @@
1
- # frozen_string_literal: true
2
- module Hecks
3
- module Adapters
4
- class Application
5
- module Queries
6
- class FindById
7
- def initialize(repository:)
8
- @repository = repository
9
- end
10
-
11
- def call(params)
12
- return unless params.keys == [:id]
13
- @repository.read(params[:id])
14
- end
15
- end
16
- end
17
- end
18
- end
19
- end
@@ -1,2 +0,0 @@
1
- require_relative 'find_by_id'
2
- require_relative 'query_runner'
@@ -1,28 +0,0 @@
1
- module Hecks
2
- module Adapters
3
- class Application
4
- class QueryRunner
5
- def initialize(query_name:, application:, module_name:, args:)
6
- @query_name = query_name
7
- @application = application
8
- @module_name = module_name
9
- @args = args
10
- end
11
-
12
- def call()
13
- fetch.new(repository: repository).call(@args)
14
- end
15
-
16
- private
17
-
18
- def fetch
19
- Queries.const_get(@query_name.to_s.camelcase)
20
- end
21
-
22
- def repository
23
- @application.database[@module_name]
24
- end
25
- end
26
- end
27
- end
28
- end
@@ -1,24 +0,0 @@
1
- # frozen_string_literal: true
2
- require 'active_support/inflector'
3
- require_relative 'command_runner'
4
- require_relative 'commands'
5
-
6
- module Hecks
7
- class CLI < Thor
8
- package_name 'hecks'
9
-
10
- desc 'generate', 'generate'
11
- subcommand('generate', Generate)
12
-
13
- desc 'package', 'package'
14
- subcommand('package', Package) if File.file?('HECKS')
15
-
16
- long_desc 'Generate a domain'
17
- method_option :dryrun,
18
- aliases: '-d',
19
- type: :boolean,
20
- desc: 'Output commands without running'
21
-
22
- register(New, 'new', 'new', 'Create a new Domain') if File.file?('HECKS')
23
- end
24
- end
@@ -1,5 +0,0 @@
1
- require_relative 'commands/test' if File.file?('hecks.gemspec')
2
- require_relative 'commands/generate'
3
- require_relative 'commands/build' if File.file?('hecks.gemspec')
4
- require_relative 'commands/console' if File.file?('HECKS')
5
- require_relative 'commands/package'
@@ -1,10 +0,0 @@
1
- module Hecks
2
- class CLI < Thor
3
- desc 'build','build and install the hecks gem'
4
-
5
- def build
6
- exec(['gem build hecks',
7
- 'gem install hecks'].join("&&"))
8
- end
9
- end
10
- end
@@ -1,26 +0,0 @@
1
- # frozen_string_literal: true
2
- require_relative 'generate/new'
3
- require_relative 'generate/generate_domain_object'
4
- require_relative 'generate/generate_resource_server'
5
- require_relative 'generate/builder'
6
-
7
-
8
- class Generate < Thor
9
- desc 'domain_objects', 'generate domain objects'
10
- method_option :type,
11
- aliases: '-t',
12
- required: true,
13
- desc: 'The type of the domain object you want to generate',
14
- banner: '[OBJECT_TYPE]',
15
- enum: %w(entity value_object aggregate reference)
16
- register(GenerateDomainObject,
17
- 'domain_object',
18
- 'domain_object',
19
- 'Generate Domain Objects') if File.file?('HECKS')
20
-
21
- desc 'resource_server', 'generate resource_server'
22
- register(GenerateResourceServer,
23
- 'resource_server',
24
- 'resource_server',
25
- 'Generate A Resource Server for a domain') if File.file?('HECKS')
26
- end
@@ -1,60 +0,0 @@
1
- # frozen_string_literal: true
2
- require 'json'
3
-
4
- require_relative 'builder/value_object_command_line_builder'
5
- require_relative 'builder/aggregate_command_line_builder'
6
- require_relative 'builder/reference_command_line_builder'
7
-
8
- module Hecks
9
- class Builder
10
- def initialize(hecks_file:, name:, dry_run: false)
11
- @name = name
12
- @domain = eval(hecks_file).domain
13
- @dry_run = dry_run
14
- @runner = CommandRunner.new(domain, name, dry_run)
15
- end
16
-
17
- def call
18
- delete_tmpfile
19
- puts "\n"
20
- generate :domain
21
- generate :modules
22
- generate :value_objects
23
- generate :references
24
- execute_tmpfile && return unless @dry_run
25
- print_tmpfile
26
- end
27
-
28
- private
29
-
30
- attr_reader :runner, :name, :domain
31
-
32
- def print_tmpfile
33
- puts File.read('tmp/hecks')
34
- end
35
-
36
- def delete_tmpfile
37
- return unless Pathname('tmp/hecks').exist?
38
- FileUtils.rm('tmp/hecks')
39
- end
40
-
41
- def execute_tmpfile
42
- exec('bash -x tmp/hecks')
43
- end
44
-
45
- def generate(command)
46
- case command
47
- when :references
48
- ReferenceCommandLineBuilder.build(domain, runner)
49
- when :domain
50
- runner.call(['new', '-n', name])
51
- when :modules
52
- AggregateCommandLineBuilder.build(domain, runner)
53
- when :value_objects
54
- ValueObjectCommandLineBuilder.build(domain, runner)
55
- else
56
- raise "unrecognized command: #{command}"
57
- end
58
- end
59
- end
60
- end
@@ -1,18 +0,0 @@
1
- module Hecks
2
- class Builder
3
- module AggregateCommandLineBuilder
4
- def self.build(domain, runner)
5
- domain.domain_modules.values.each do |domain_module|
6
- runner.call(
7
- [
8
- 'generate domain_object',
9
- '-t', 'aggregate',
10
- '-n', domain_module.name,
11
- '--head_name', domain_module.head.name,
12
- '-a', domain_module.head.attribute_string
13
- ])
14
- end
15
- end
16
- end
17
- end
18
- end
@@ -1,19 +0,0 @@
1
- module Hecks
2
- class Builder
3
- module ReferenceCommandLineBuilder
4
- def self.build(domain, runner)
5
- domain.domain_modules.values.each do |domain_module|
6
- domain_module.references.each do |reference|
7
- runner.call([
8
- 'generate domain_object',
9
- '-t', 'reference',
10
- '-n', reference.name,
11
- '-m', domain_module.name,
12
- '-r', reference.referenced_entity
13
- ])
14
- end
15
- end
16
- end
17
- end
18
- end
19
- end
@@ -1,19 +0,0 @@
1
- module Hecks
2
- class Builder
3
- module ValueObjectCommandLineBuilder
4
- def self.build(domain, runner)
5
- domain.domain_modules.values.each do |domain_module|
6
- (domain_module.objects - [domain_module.head]).each do |value_object|
7
- runner.call([
8
- 'generate domain_object',
9
- '-t', 'value_object',
10
- '-n', value_object.name,
11
- '-m', domain_module.name,
12
- '-a', value_object.attribute_string
13
- ])
14
- end
15
- end
16
- end
17
- end
18
- end
19
- end
@@ -1,17 +0,0 @@
1
- class GenerateResourceServer < Thor::Group; end
2
-
3
- class GeneratePackage
4
- include Thor::Actions
5
-
6
- def self.source_root
7
- File.dirname(__FILE__) + '/templates/'
8
- end
9
-
10
- def create_package
11
- directory('package', './packages/lambda')
12
- end
13
-
14
- def domain
15
- File.basename(Dir.getwd)
16
- end
17
- end
@@ -1,92 +0,0 @@
1
- class GenerateBinaryPackage < Thor::Group
2
- include Thor::Actions
3
-
4
- HOST = "http://d6r77u77i8pq3.cloudfront.net/releases"
5
- OSX_BINARY = "traveling-ruby-20150715-2.2.2-osx.tar.gz"
6
- LINUX_BINARY = 'traveling-ruby-20150715-2.2.2-linux-x86_64.tar.gz'
7
- BUILD_DIR = 'packages/binary/build'
8
- RESOURCES_DIR = BUILD_DIR + '/resources'
9
- OSX_DIR = BUILD_DIR + '/osx'
10
- OSX_LIB_DIR = OSX_DIR + '/lib'
11
- OSX_APP_DIR = OSX_LIB_DIR + '/app'
12
- LINUX_DIR = BUILD_DIR + '/linux-x86_64'
13
- LINUX_LIB_DIR = LINUX_DIR + 'lib'
14
- LINUX_APP_DIR = LINUX_LIB_DIR + '/app'
15
-
16
- def self.source_root
17
- File.dirname(__FILE__) + '/templates'
18
- end
19
-
20
- def create_package_folder
21
- run("rm -rf packages/binary")
22
- directory('binary_package', './packages/binary')
23
- end
24
-
25
- def domain_name
26
- Dir.pwd.split('/').last
27
- end
28
-
29
- def build
30
- package(OSX_APP_DIR, OSX_LIB_DIR, OSX_BINARY, OSX_DIR)
31
- package(LINUX_APP_DIR, LINUX_LIB_DIR, LINUX_BINARY, LINUX_DIR)
32
- end
33
-
34
- private
35
-
36
- def package(app_dir, lib_dir, binary, package_dir)
37
- empty_directory(app_dir)
38
- empty_directory(lib_dir + '/ruby')
39
- download(binary, lib_dir)
40
- copy_resources(app_dir, package_dir)
41
- bundle_with_ruby_2_2_2(app_dir)
42
- reduce_package_size(app_dir)
43
- end
44
-
45
- def reduce_package_size(app_dir)
46
- files = %w(test tests spec features benchmark README* CHANGE* Change*
47
- COPYING* LICENSE* MIT-LICENSE* TODO *.txt *.md *.rdoc doc docs example
48
- examples sample doc-api
49
- )
50
- files.each do |file|
51
- run("rm -rf #{app_dir}/vendor/ruby/*/gems/*/#{file}")
52
- end
53
-
54
- run("rm -rf #{app_dir}/vendor/*/*/cache/*")
55
- %w(.gitignore .travis.yml).each do |file|
56
- run("rm -rf #{app_dir}/vendor/ruby/*/gems/*/#{file}")
57
- end
58
-
59
- %w(MAKEfile */Makefile */tmp).each do |file|
60
- run("rm -f #{app_dir}/vendor/ruby/*/gems/*/ext/#{file}")
61
- end
62
-
63
- %w(*.c *.cpp *.h *.rl *extconf.rb *.java *.class *.md).each do |file|
64
- run("find #{app_dir}/vendor/ruby -name '#{file}' | xargs rm -f")
65
- end
66
-
67
- %w(*.0 *.so *.bundle).each do |file|
68
- run("find #{app_dir}/vendor/ruby/*/gems -name '#{file}' | xargs rm -f")
69
- end
70
- end
71
-
72
- def copy_resources(app_dir, package_dir)
73
- run("cp #{RESOURCES_DIR}/Gemfile #{app_dir}")
74
- run("cp -rf #{RESOURCES_DIR}/bundle #{app_dir}/.bundle")
75
- run("cp -rf #{RESOURCES_DIR}/#{domain_name}.rb #{app_dir}/#{domain_name}.rb")
76
- run("cp -rf #{RESOURCES_DIR}/wrapper #{package_dir}/#{domain_name}")
77
- run("cd #{package_dir} && chmod 744 #{domain_name}")
78
- end
79
-
80
- def download(binary, lib_dir)
81
- run("cd #{RESOURCES_DIR} && curl -O #{HOST}/#{binary}")
82
- run("tar -xzf #{RESOURCES_DIR}/#{binary} -C #{lib_dir}/ruby")
83
- end
84
-
85
- def bundle_with_ruby_2_2_2(app_dir)
86
- run("cp -rf #{RESOURCES_DIR}/Dockerfile #{app_dir}")
87
- run("cp #{domain_name}-0.0.0.gem #{app_dir}" )
88
- run("cd #{app_dir} && docker build -t #{domain_name} --no-cache .")
89
- container = `docker create pizza_builder:latest`.gsub("\n", '')
90
- run("docker cp #{container}:/usr/src/app/vendor #{app_dir}")
91
- end
92
- end