dry-web-roda 0.6.3 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (118) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +22 -0
  3. data/CONTRIBUTING.md +29 -0
  4. data/Gemfile +4 -3
  5. data/README.md +1 -1
  6. data/dry-web-roda.gemspec +0 -2
  7. data/lib/dry/web/roda/cli.rb +2 -2
  8. data/lib/dry/web/roda/cli/generate.rb +1 -1
  9. data/lib/dry/web/roda/generate.rb +32 -34
  10. data/lib/dry/web/roda/generators/abstract_generator.rb +54 -0
  11. data/lib/dry/web/roda/generators/abstract_project.rb +118 -0
  12. data/lib/dry/web/roda/generators/flat_project.rb +20 -14
  13. data/lib/dry/web/roda/generators/sub_app.rb +34 -13
  14. data/lib/dry/web/roda/generators/umbrella_project.rb +10 -19
  15. data/lib/dry/web/roda/templates/.env.test.tt +1 -0
  16. data/lib/dry/web/roda/templates/.env.tt +2 -0
  17. data/lib/dry/web/roda/templates/.gitignore +8 -0
  18. data/lib/dry/web/roda/{skeletons/flat_project/lib/__underscored_app_name__ → templates}/.keep +0 -0
  19. data/lib/dry/web/roda/templates/.rspec +2 -0
  20. data/lib/dry/web/roda/{skeletons/flat_project → templates}/Gemfile +4 -3
  21. data/lib/dry/web/roda/{skeletons/umbrella_project → templates}/README.md.tt +2 -2
  22. data/lib/dry/web/roda/templates/Rakefile.tt +66 -0
  23. data/lib/dry/web/roda/{skeletons/flat_project/web/templates/layouts → templates}/application.html.slim +0 -0
  24. data/lib/dry/web/roda/templates/boot__settings.rb.tt +10 -0
  25. data/lib/dry/web/roda/{skeletons/flat_project → templates}/config.ru.tt +0 -0
  26. data/lib/dry/web/roda/{skeletons/flat_project/bin → templates}/console.tt +0 -0
  27. data/lib/dry/web/roda/templates/container.rb.tt +14 -0
  28. data/lib/dry/web/roda/{skeletons/flat_project/web/routes/example.rb.tt → templates/example_routes.rb.tt} +0 -0
  29. data/lib/dry/web/roda/{skeletons/flat_project/system/__underscored_app_name__ → templates/flat_project}/application.rb.tt +6 -1
  30. data/lib/dry/web/roda/templates/flat_project/boot.rb.tt +10 -0
  31. data/lib/dry/web/roda/{skeletons/flat_project/system/__underscored_app_name__ → templates}/import.rb.tt +0 -0
  32. data/lib/dry/web/roda/{skeletons/flat_project/system/boot → templates}/monitor.rb.tt +0 -0
  33. data/lib/dry/web/roda/templates/operation.rb.tt +9 -0
  34. data/lib/dry/web/roda/{skeletons/flat_project/system/__underscored_app_name__ → templates}/repository.rb.tt +4 -2
  35. data/lib/dry/web/roda/templates/rom.rb.tt +39 -0
  36. data/lib/dry/web/roda/{skeletons/flat_project/db → templates}/sample_data.rb +0 -0
  37. data/lib/dry/web/roda/{skeletons/flat_project/db → templates}/seed.rb +0 -0
  38. data/lib/dry/web/roda/templates/settings.rb.tt +9 -0
  39. data/lib/dry/web/roda/{skeletons/flat_project/bin → templates}/setup +0 -0
  40. data/lib/dry/web/roda/{skeletons/umbrella_project/spec/db_helper.rb.tt → templates/spec/db_spec_helper.rb.tt} +2 -3
  41. data/lib/dry/web/roda/templates/spec/factories/example.rb +9 -0
  42. data/lib/dry/web/roda/{skeletons/flat_project → templates}/spec/spec_helper.rb.tt +1 -1
  43. data/lib/dry/web/roda/templates/spec/support/db/factory.rb +8 -0
  44. data/lib/dry/web/roda/templates/spec/support/db/helpers.rb.tt +13 -0
  45. data/lib/dry/web/roda/templates/spec/support/web/helpers.rb.tt +9 -0
  46. data/lib/dry/web/roda/{skeletons/umbrella_project/spec/app_helper.rb → templates/spec/web_spec_helper.rb} +8 -6
  47. data/lib/dry/web/roda/{skeletons/sub_app/system/__underscored_app_name__ → templates/subapp}/application.rb.tt +6 -1
  48. data/lib/dry/web/roda/templates/subapp/boot.rb.tt +5 -0
  49. data/lib/dry/web/roda/{skeletons/sub_app/system/__underscored_app_name__ → templates/subapp}/container.rb.tt +6 -9
  50. data/lib/dry/web/roda/{skeletons/sub_app/system/__underscored_app_name__ → templates/subapp}/transactions.rb.tt +2 -3
  51. data/lib/dry/web/roda/templates/subapp/view_context.rb.tt +8 -0
  52. data/lib/dry/web/roda/templates/subapp/view_controller.rb.tt +17 -0
  53. data/lib/dry/web/roda/{skeletons/flat_project/lib → templates}/types.rb +0 -0
  54. data/lib/dry/web/roda/{skeletons/umbrella_project/system/__underscored_app_name__ → templates/umbrella_project}/application.rb.tt +6 -1
  55. data/lib/dry/web/roda/templates/umbrella_project/boot.rb.tt +16 -0
  56. data/lib/dry/web/roda/templates/view_context.rb.tt +43 -0
  57. data/lib/dry/web/roda/templates/view_controller.rb.tt +17 -0
  58. data/lib/dry/web/roda/{skeletons/flat_project/web/templates → templates}/welcome.html.slim +0 -0
  59. data/lib/dry/web/roda/{skeletons/flat_project/lib/__underscored_app_name__/views → templates}/welcome.rb.tt +2 -2
  60. data/lib/dry/web/roda/version.rb +1 -1
  61. data/lib/roda/plugins/dry_view.rb +1 -1
  62. data/spec/support/project.rb +1 -1
  63. metadata +51 -116
  64. data/lib/dry/web/roda/skeletons/flat_project/README.md.tt +0 -12
  65. data/lib/dry/web/roda/skeletons/flat_project/Rakefile.tt +0 -81
  66. data/lib/dry/web/roda/skeletons/flat_project/config/settings.yml.tt +0 -8
  67. data/lib/dry/web/roda/skeletons/flat_project/lib/persistence/commands/.keep +0 -0
  68. data/lib/dry/web/roda/skeletons/flat_project/lib/persistence/relations/.keep +0 -0
  69. data/lib/dry/web/roda/skeletons/flat_project/log/.keep +0 -0
  70. data/lib/dry/web/roda/skeletons/flat_project/spec/app_helper.rb +0 -35
  71. data/lib/dry/web/roda/skeletons/flat_project/spec/db_helper.rb.tt +0 -24
  72. data/lib/dry/web/roda/skeletons/flat_project/spec/support/db/test_factories.rb +0 -3
  73. data/lib/dry/web/roda/skeletons/flat_project/spec/support/test_helpers.rb.tt +0 -15
  74. data/lib/dry/web/roda/skeletons/flat_project/system/__underscored_app_name__/container.rb.tt +0 -23
  75. data/lib/dry/web/roda/skeletons/flat_project/system/__underscored_app_name__/settings.rb.tt +0 -17
  76. data/lib/dry/web/roda/skeletons/flat_project/system/__underscored_app_name__/transactions.rb.tt +0 -34
  77. data/lib/dry/web/roda/skeletons/flat_project/system/__underscored_app_name__/view_context.rb.tt +0 -39
  78. data/lib/dry/web/roda/skeletons/flat_project/system/__underscored_app_name__/view_controller.rb.tt +0 -13
  79. data/lib/dry/web/roda/skeletons/flat_project/system/boot.rb.tt +0 -11
  80. data/lib/dry/web/roda/skeletons/flat_project/system/boot/rom.rb.tt +0 -32
  81. data/lib/dry/web/roda/skeletons/flat_project/system/boot/view.rb.tt +0 -3
  82. data/lib/dry/web/roda/skeletons/flat_project/transactions/example.rb.tt +0 -10
  83. data/lib/dry/web/roda/skeletons/sub_app/lib/__underscored_app_name__/.keep +0 -0
  84. data/lib/dry/web/roda/skeletons/sub_app/lib/__underscored_app_name__/views/welcome.rb.tt +0 -11
  85. data/lib/dry/web/roda/skeletons/sub_app/system/__underscored_app_name__/import.rb.tt +0 -5
  86. data/lib/dry/web/roda/skeletons/sub_app/system/__underscored_app_name__/view_context.rb.tt +0 -6
  87. data/lib/dry/web/roda/skeletons/sub_app/system/__underscored_app_name__/view_controller.rb.tt +0 -13
  88. data/lib/dry/web/roda/skeletons/sub_app/system/boot.rb.tt +0 -8
  89. data/lib/dry/web/roda/skeletons/sub_app/system/boot/view.rb.tt +0 -3
  90. data/lib/dry/web/roda/skeletons/sub_app/transactions/example.rb.tt +0 -9
  91. data/lib/dry/web/roda/skeletons/sub_app/web/routes/example.rb.tt +0 -7
  92. data/lib/dry/web/roda/skeletons/sub_app/web/templates/layouts/application.html.slim +0 -3
  93. data/lib/dry/web/roda/skeletons/sub_app/web/templates/welcome.html.slim +0 -1
  94. data/lib/dry/web/roda/skeletons/umbrella_project/.gitignore +0 -8
  95. data/lib/dry/web/roda/skeletons/umbrella_project/Gemfile +0 -40
  96. data/lib/dry/web/roda/skeletons/umbrella_project/Rakefile.tt +0 -81
  97. data/lib/dry/web/roda/skeletons/umbrella_project/bin/console.tt +0 -7
  98. data/lib/dry/web/roda/skeletons/umbrella_project/bin/setup +0 -7
  99. data/lib/dry/web/roda/skeletons/umbrella_project/config.ru.tt +0 -2
  100. data/lib/dry/web/roda/skeletons/umbrella_project/config/settings.yml.tt +0 -8
  101. data/lib/dry/web/roda/skeletons/umbrella_project/db/sample_data.rb +0 -1
  102. data/lib/dry/web/roda/skeletons/umbrella_project/db/seed.rb +0 -1
  103. data/lib/dry/web/roda/skeletons/umbrella_project/lib/__underscored_app_name__/repository.rb.tt +0 -11
  104. data/lib/dry/web/roda/skeletons/umbrella_project/lib/__underscored_app_name__/transactions.rb.tt +0 -33
  105. data/lib/dry/web/roda/skeletons/umbrella_project/lib/__underscored_app_name__/view_context.rb.tt +0 -39
  106. data/lib/dry/web/roda/skeletons/umbrella_project/lib/persistence/commands/.keep +0 -0
  107. data/lib/dry/web/roda/skeletons/umbrella_project/lib/persistence/relations/.keep +0 -0
  108. data/lib/dry/web/roda/skeletons/umbrella_project/lib/types.rb +0 -6
  109. data/lib/dry/web/roda/skeletons/umbrella_project/log/.keep +0 -0
  110. data/lib/dry/web/roda/skeletons/umbrella_project/spec/spec_helper.rb.tt +0 -61
  111. data/lib/dry/web/roda/skeletons/umbrella_project/spec/support/db/test_factories.rb +0 -3
  112. data/lib/dry/web/roda/skeletons/umbrella_project/spec/support/test_helpers.rb.tt +0 -15
  113. data/lib/dry/web/roda/skeletons/umbrella_project/system/__underscored_app_name__/container.rb.tt +0 -18
  114. data/lib/dry/web/roda/skeletons/umbrella_project/system/__underscored_app_name__/import.rb.tt +0 -5
  115. data/lib/dry/web/roda/skeletons/umbrella_project/system/__underscored_app_name__/settings.rb.tt +0 -17
  116. data/lib/dry/web/roda/skeletons/umbrella_project/system/boot.rb.tt +0 -12
  117. data/lib/dry/web/roda/skeletons/umbrella_project/system/boot/monitor.rb.tt +0 -9
  118. data/lib/dry/web/roda/skeletons/umbrella_project/system/boot/rom.rb.tt +0 -32
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: dd98b628eb646092627a0322e5d9fec5d5df8922
4
- data.tar.gz: e68b854855b73288d83dd46e337dea8352890d6f
3
+ metadata.gz: 33b31bfd006852b040b770a7ca5b7967af9b3686
4
+ data.tar.gz: de42647467c74034df0503398cac8d7d25f3dbe1
5
5
  SHA512:
6
- metadata.gz: 49f813b5b909bc6b4d9f6772cc7a3a51560f2a440f60dfbbdbbe28ea4f653ccdc596453cc0fb51f2866c77467e923493e9a166103466d61527f38440ccf832d5
7
- data.tar.gz: 8aee21a881953339e3e5552183ecf2b1ab2675d274dede6f8e0474def29e7fc98644f55af30b77d463c5032c4e19b15f37679fcbd12f14689d37ccd903aa0b64
6
+ metadata.gz: a4b4caae50823f09588968a7027f88e4b1e5dfe1df21b70c5bccb749c9c753db05f2e7656248f4f54aa31ebf0789dea1415fac4ff24c47df7f7049129b56f413
7
+ data.tar.gz: b76fe02ea98f0399ed6a4fb4606ebfe18700ec60d6eb2f2aaf3f8fcef95cca4ed700fa2cb3dbf860c2088c11231e82e7aee566d082cb79f891ea444f8965c933
data/CHANGELOG.md CHANGED
@@ -1,3 +1,25 @@
1
+ # 0.7.0 - 2017-06-16
2
+
3
+ ### Added
4
+
5
+ In generated app:
6
+
7
+ - Shared `Operation` class for all application operations to inherit from (timriley)
8
+ - Enable `auto_restrictions` relation plugin for ROM (timriley)
9
+ - Register low-level database connection object as "persistence.db" in core container (timriley)
10
+
11
+ ### Changed
12
+
13
+ In generated app:
14
+
15
+ - Use full database URL to include credentials in pg_dump (lukkor)
16
+ - Move view controller and context classes into main lib/ dirs (timriley)
17
+ - Use dry-system 0.7.0 magic comments to prevent auto-registration of base repository, view controller and view context classes (timriley)
18
+ - Update dry-system dependency to support string paths for container root configs (timriley)
19
+ - [BREAKING] Use Dry::Web::Settings from dry-web 0.7.0, which loads settings from .env files instead of .yml files (timriley)
20
+ - [BREAKING] Provide settings object via a bootable component
21
+ - [BREAKING] Remove special transactions setup harness, since dry-transaction 0.10.0 supports class-based transactions
22
+
1
23
  # 0.6.3 - 2017-03-02
2
24
 
3
25
  ### Changed
data/CONTRIBUTING.md ADDED
@@ -0,0 +1,29 @@
1
+ # Issue Guidelines
2
+
3
+ ## Reporting bugs
4
+
5
+ If you found a bug, report an issue and describe what's the expected behavior versus what actually happens. If the bug causes a crash, attach a full backtrace. If possible, a reproduction script showing the problem is highly appreciated.
6
+
7
+ ## Reporting feature requests
8
+
9
+ Report a feature request **only after discussing it first on [discuss.dry-rb.org](https://discuss.dry-rb.org)** where it was accepted. Please provide a concise description of the feature, don't link to a discussion thread, and instead summarize what was discussed.
10
+
11
+ ## Reporting questions, support requests, ideas, concerns etc.
12
+
13
+ **PLEASE DON'T** - use [discuss.dry-rb.org](http://discuss.dry-rb.org) instead.
14
+
15
+ # Pull Request Guidelines
16
+
17
+ A Pull Request will only be accepted if it addresses a specific issue that was reported previously, or fixes typos, mistakes in documentation etc.
18
+
19
+ Other requirements:
20
+
21
+ 1) Do not open a pull request if you can't provide tests along with it. If you have problems writing tests, ask for help in the related issue.
22
+ 2) Follow the style conventions of the surrounding code. In most cases, this is standard ruby style.
23
+ 3) Add API documentation if it's a new feature
24
+ 4) Update API documentation if it changes an existing feature
25
+ 5) Bonus points for sending a PR to [github.com/dry-rb/dry-rb.org](github.com/dry-rb/dry-rb.org) which updates user documentation and guides
26
+
27
+ # Asking for help
28
+
29
+ If these guidelines aren't helpful, and you're stuck, please post a message on [discuss.dry-rb.org](https://discuss.dry-rb.org).
data/Gemfile CHANGED
@@ -7,7 +7,8 @@ gem 'byebug', platform: :mri
7
7
  gem 'codeclimate-test-reporter', platform: :rbx
8
8
 
9
9
  # Generated application dependencies
10
- gem "dry-web", ">= 0.6.0"
10
+ gem "dry-system", ">= 0.7.1"
11
+ gem "dry-web", ">= 0.7.0"
11
12
  gem "puma"
12
13
  gem "rack_csrf"
13
14
  gem "rack", ">= 2.0"
@@ -18,10 +19,10 @@ gem "rom-sql"
18
19
  gem "dry-matcher"
19
20
  gem "dry-monads"
20
21
  gem "dry-struct"
21
- gem "dry-transaction"
22
+ gem "dry-transaction", ">= 0.10.0"
22
23
  gem "dry-types"
23
24
  gem "dry-validation"
24
- gem "dry-view", ">= 0.2.2"
25
+ gem "dry-view", ">= 0.3.0"
25
26
  gem "slim"
26
27
  gem "pry-byebug", platform: :mri
27
28
  gem "capybara"
data/README.md CHANGED
@@ -11,7 +11,7 @@
11
11
  [![Test Coverage](https://codeclimate.com/github/dry-rb/dry-web-roda/badges/coverage.svg)][codeclimate]
12
12
  [![Inline docs](http://inch-ci.org/github/dry-rb/dry-web-roda.svg?branch=master&style=flat)][inchpages]
13
13
 
14
- Integration between dry-web and roda.
14
+ Integration between [dry-web](https://github.com/dry-rb/dry-web) and [roda](https://github.com/jeremyevans/roda).
15
15
 
16
16
  dry-web-roda offers a CLI for generating new projects.
17
17
 
data/dry-web-roda.gemspec CHANGED
@@ -20,8 +20,6 @@ Gem::Specification.new do |spec|
20
20
 
21
21
  spec.required_ruby_version = '>= 2.2.0'
22
22
 
23
- spec.add_runtime_dependency "dry-web", "~> 0.6", ">= 0.6.0"
24
- spec.add_runtime_dependency "dry-monitor"
25
23
  spec.add_runtime_dependency "dry-configurable", "~> 0.2"
26
24
  spec.add_runtime_dependency "inflecto", "~> 0.0"
27
25
  spec.add_runtime_dependency "roda", "~> 2.14"
@@ -10,10 +10,10 @@ module Dry
10
10
  case options[:arch]
11
11
  when "umbrella"
12
12
  require "dry/web/roda/generators/umbrella_project"
13
- Generators::UmbrellaProject.new.(app_name)
13
+ Generators::UmbrellaProject.new(app_name).call
14
14
  when "flat"
15
15
  require "dry/web/roda/generators/flat_project"
16
- Generators::FlatProject.new.(app_name)
16
+ Generators::FlatProject.new(app_name).call
17
17
  end
18
18
  end
19
19
 
@@ -9,7 +9,7 @@ module Dry
9
9
  option :umbrella, required: true, banner: "UMBRELLA_NAME", desc: "Provide the name of the umbrella app, e.g. my_project"
10
10
  def sub_app(app_name)
11
11
  require "dry/web/roda/generators/sub_app"
12
- Dry::Web::Roda::Generators::SubApp.new.(app_name, umbrella: options[:umbrella])
12
+ Dry::Web::Roda::Generators::SubApp.new(app_name, umbrella: options[:umbrella]).call
13
13
  end
14
14
  end
15
15
  end
@@ -5,48 +5,46 @@ module Dry
5
5
  module Web
6
6
  module Roda
7
7
  class Generate
8
- SKELETONS_DIR = "skeletons".freeze
8
+ TEMPLATES_DIR = "templates".freeze
9
+ SOURCE_DIR = Pathname(__FILE__).dirname.join(TEMPLATES_DIR)
9
10
 
10
- attr_reader :source_dir
11
- attr_reader :processor
11
+ attr_reader :target_dir, :template_scope, :template_files, :processor
12
12
 
13
- def initialize(skeleton_name)
14
- @source_dir = Pathname(__FILE__).dirname.join(SKELETONS_DIR).join(skeleton_name)
13
+ def initialize(target_dir, template_scope)
14
+ @target_dir = target_dir
15
+ @template_scope = template_scope
16
+ @template_files = Dir[SOURCE_DIR.join('**/{.,}*')]
15
17
 
16
18
  @processor = Class.new(Thor) do
17
19
  include Thor::Actions
18
20
  end.new
19
- @processor.class.source_root source_dir
21
+ @processor.class.source_root SOURCE_DIR
20
22
  end
21
23
 
22
- def call(target_dir, scope = {})
23
- target_dir = Pathname.getwd + target_dir
24
- source_files = Dir[source_dir.join("**/{.,}*")]
25
-
26
- source_files.select { |f| File.file?(f) }.each do |source_file|
27
- source_file = Pathname(source_file)
28
- relative_source_file = source_file.relative_path_from(source_dir)
29
- target_file = target_dir + relative_source_file
30
-
31
- if scope.any?
32
- target_file = target_file.to_s.gsub(/__#{Regexp.union(scope.keys.map(&:to_s))}__/) { |match|
33
- scope_key = match.gsub(/^__/, "").gsub(/__$/, "")
34
- scope.fetch(scope_key.to_sym)
35
- }
36
- end
37
-
38
- if relative_source_file.extname == Thor::TEMPLATE_EXTNAME
39
- target_file = target_file.sub(/#{Thor::TEMPLATE_EXTNAME}$/, "")
40
-
41
- processor.template relative_source_file, target_file, scope
42
- else
43
- processor.copy_file relative_source_file, target_file
44
- end
45
-
46
- if source_file.file? && source_file.executable?
47
- FileUtils.chmod "a+x", target_file
48
- end
49
- end
24
+ def call(source, target)
25
+ source = Pathname(source)
26
+ aboslute_source_path = source.expand_path(SOURCE_DIR)
27
+ target_file = get_target_file(target)
28
+ template_file = template_files.find { |f| f == aboslute_source_path.to_s } or raise "missing template file +#{source}+"
29
+ template_file = Pathname(template_file)
30
+
31
+ processor.template template_file, target_file, template_scope
32
+
33
+ create_executable(target_file) if executable?(template_file)
34
+ end
35
+
36
+ private
37
+
38
+ def get_target_file(target)
39
+ Pathname.getwd.join(target_dir, target)
40
+ end
41
+
42
+ def create_executable(file)
43
+ FileUtils.chmod "a+x", file
44
+ end
45
+
46
+ def executable?(file)
47
+ file.file? && file.executable?
50
48
  end
51
49
  end
52
50
  end
@@ -0,0 +1,54 @@
1
+ require "dry/web/roda/generate"
2
+ require "dry/web/roda/generators/inflections"
3
+
4
+ module Dry
5
+ module Web
6
+ module Roda
7
+ module Generators
8
+ class AbstractGenerator
9
+ attr_reader :target_dir, :options
10
+
11
+ def initialize(target_dir, options = {})
12
+ @target_dir = target_dir
13
+ @options = options
14
+ @templates = []
15
+ populate_templates
16
+ @templates.freeze
17
+ end
18
+
19
+ def call
20
+ templates.each do |source, target|
21
+ generator.(source, target)
22
+ end
23
+ post_process_callback
24
+ end
25
+
26
+ private
27
+ attr_reader :templates
28
+
29
+ def add_template(source, target)
30
+ templates << [source, target]
31
+ end
32
+
33
+ def generator
34
+ @generator ||= Generate.new(destination, template_scope)
35
+ end
36
+
37
+ def post_process_callback; end
38
+
39
+ def underscored_project_name
40
+ @underscored_project_name ||= Inflections.underscored_name(target_dir)
41
+ end
42
+
43
+ def template_scope
44
+ fail NotImplementedError
45
+ end
46
+
47
+ def destination
48
+ fail NotImplementedError
49
+ end
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,118 @@
1
+ require "securerandom"
2
+ require "dry/web/roda/generators/abstract_generator"
3
+
4
+ module Dry
5
+ module Web
6
+ module Roda
7
+ module Generators
8
+ class AbstractProject < AbstractGenerator
9
+ def populate_templates
10
+ add_bin
11
+ add_config
12
+ add_db
13
+ add_log
14
+ add_spec
15
+ add_lib
16
+ add_system
17
+ add_boot
18
+ add_application
19
+ add_config_files
20
+ end
21
+
22
+ private
23
+
24
+ def destination
25
+ target_dir
26
+ end
27
+
28
+ def template_scope
29
+ {
30
+ underscored_project_name: underscored_project_name,
31
+ camel_cased_app_name: Inflections.camel_cased_name(target_dir)
32
+ }
33
+ end
34
+
35
+ def add_bin
36
+ add_template('console.tt', 'bin/console')
37
+ add_template('setup', 'bin/setup')
38
+ end
39
+
40
+ def add_config
41
+ add_template('.env.tt', '.env')
42
+ add_template('.env.test.tt', '.env.test')
43
+ end
44
+
45
+ def add_db
46
+ add_template('sample_data.rb', 'db/sample_data.rb')
47
+ add_template('seed.rb', 'db/seed.rb')
48
+ end
49
+
50
+ def add_lib
51
+ add_template('types.rb', 'lib/types.rb')
52
+ add_template('operation.rb.tt', "lib/#{underscored_project_name}/operation.rb")
53
+ add_template('repository.rb.tt', "lib/#{underscored_project_name}/repository.rb")
54
+ add_template('.keep', 'lib/persistance/relations/.keep')
55
+ add_template('.keep', 'lib/persistance/commands/.keep')
56
+ add_template('view_context.rb.tt', "lib/#{underscored_project_name}/view/context.rb")
57
+ add_template('view_controller.rb.tt', "lib/#{underscored_project_name}/view/controller.rb")
58
+ add_template('welcome.rb.tt', "lib/#{underscored_project_name}/views/welcome.rb")
59
+ end
60
+
61
+ def add_log
62
+ add_template('.keep', 'log/.keep')
63
+ end
64
+
65
+ def add_spec
66
+ add_template('.rspec', '.rspec')
67
+
68
+ # Base spec helpers
69
+ add_template('spec/web_spec_helper.rb', 'spec/web_spec_helper.rb')
70
+ add_template('spec/db_spec_helper.rb.tt', 'spec/db_spec_helper.rb')
71
+ add_template('spec/spec_helper.rb.tt', 'spec/spec_helper.rb')
72
+
73
+ # DB support
74
+ add_template('spec/support/db/factory.rb', 'spec/support/db/factory.rb')
75
+ add_template('spec/support/db/helpers.rb.tt', 'spec/support/db/helpers.rb')
76
+ add_template('spec/factories/example.rb', 'spec/factories/example.rb')
77
+
78
+ # Web support
79
+ add_template('spec/support/web/helpers.rb.tt', 'spec/support/web/helpers.rb')
80
+ end
81
+
82
+ def add_system
83
+ add_system_lib
84
+ add_system_boot
85
+ end
86
+
87
+ def add_boot
88
+ raise NotImplementedError
89
+ end
90
+
91
+ def add_application
92
+ raise NotImplementedError
93
+ end
94
+
95
+ def add_system_lib
96
+ add_template("container.rb.tt", "system/#{underscored_project_name}/container.rb")
97
+ add_template("import.rb.tt", "system/#{underscored_project_name}/import.rb")
98
+ add_template("settings.rb.tt", "system/#{underscored_project_name}/settings.rb")
99
+ end
100
+
101
+ def add_system_boot
102
+ add_template("monitor.rb.tt", "system/boot/monitor.rb")
103
+ add_template("rom.rb.tt", "system/boot/rom.rb")
104
+ add_template("boot__settings.rb.tt", "system/boot/settings.rb")
105
+ end
106
+
107
+ def add_config_files
108
+ add_template('.gitignore', '.gitignore')
109
+ add_template('Gemfile', 'Gemfile')
110
+ add_template('Rakefile.tt', 'Rakefile')
111
+ add_template('config.ru.tt', 'config.ru')
112
+ add_template('README.md.tt', 'README.md')
113
+ end
114
+ end
115
+ end
116
+ end
117
+ end
118
+ end
@@ -1,29 +1,35 @@
1
1
  require "securerandom"
2
- require "dry/web/roda/generate"
3
- require "dry/web/roda/generators/inflections"
2
+ require "dry/web/roda/generators/abstract_project"
4
3
 
5
4
  module Dry
6
5
  module Web
7
6
  module Roda
8
7
  module Generators
9
- class FlatProject
10
- attr_reader :generate
8
+ class FlatProject < AbstractProject
9
+ def populate_templates
10
+ super
11
+ add_views
12
+ add_web
13
+ end
14
+
15
+ private
11
16
 
12
- def initialize
13
- @generate = Generate.new("flat_project")
17
+ def add_boot
18
+ add_template("flat_project/boot.rb.tt", "system/boot.rb")
14
19
  end
15
20
 
16
- def call(target_dir)
17
- generate.(target_dir, prepare_scope(target_dir))
21
+ def add_application
22
+ add_template("flat_project/application.rb.tt", "system/#{underscored_project_name}/application.rb")
18
23
  end
19
24
 
20
- private
25
+ def add_views
26
+ add_template('welcome.rb.tt', "lib/#{underscored_project_name}/views/welcome.rb")
27
+ end
21
28
 
22
- def prepare_scope(target_dir)
23
- {
24
- underscored_app_name: Inflections.underscored_name(target_dir),
25
- camel_cased_app_name: Inflections.camel_cased_name(target_dir)
26
- }
29
+ def add_web
30
+ add_template('example_routes.rb.tt', 'web/routes/example.rb')
31
+ add_template('application.html.slim', 'web/templates/layouts/application.html.slim')
32
+ add_template('welcome.html.slim', 'web/templates/welcome.html.slim')
27
33
  end
28
34
  end
29
35
  end
@@ -1,29 +1,50 @@
1
- require "dry/web/roda/generate"
2
- require "dry/web/roda/generators/inflections"
1
+ require "dry/web/roda/generators/abstract_generator"
3
2
 
4
3
  module Dry
5
4
  module Web
6
5
  module Roda
7
6
  module Generators
8
- class SubApp
9
- attr_reader :generate
7
+ class SubApp < AbstractGenerator
8
+ def populate_templates
9
+ add_lib
10
+ add_system
11
+ add_web
12
+ end
13
+
14
+ private
15
+
16
+ def destination
17
+ options.fetch(:to) { File.join("apps", target_dir) }
18
+ end
10
19
 
11
- def initialize
12
- @generate = Dry::Web::Roda::Generate.new("sub_app")
20
+ def umbrella_name
21
+ options.fetch(:umbrella)
13
22
  end
14
23
 
15
- def call(target_dir, options = {})
16
- umbrella_name = options.fetch(:umbrella)
17
- generate_to = options.fetch(:to) { File.join("apps", target_dir) }
24
+ def add_lib
25
+ add_template('subapp/view_context.rb.tt', "lib/#{underscored_project_name}/view/context.rb")
26
+ add_template('subapp/view_controller.rb.tt', "lib/#{underscored_project_name}/view/controller.rb")
27
+ add_template('welcome.rb.tt', "lib/#{underscored_project_name}/views/welcome.rb")
28
+ add_template('.keep', "lib/#{underscored_project_name}/.keep")
29
+ end
18
30
 
19
- generate.(generate_to, prepare_scope(target_dir, umbrella_name))
31
+ def add_system
32
+ %w(application container).each do |file|
33
+ add_template("subapp/#{file}.rb.tt", "system/#{underscored_project_name}/#{file}.rb")
34
+ end
35
+ add_template('import.rb.tt', "system/#{underscored_project_name}/import.rb")
36
+ add_template('subapp/boot.rb.tt', 'system/boot.rb')
20
37
  end
21
38
 
22
- private
39
+ def add_web
40
+ add_template('example_routes.rb.tt', 'web/routes/example.rb')
41
+ add_template('application.html.slim', 'web/templates/layouts/application.html.slim')
42
+ add_template('welcome.html.slim', 'web/templates/welcome.html.slim')
43
+ end
23
44
 
24
- def prepare_scope(target_dir, umbrella_name)
45
+ def template_scope
25
46
  {
26
- underscored_app_name: Inflections.underscored_name(target_dir),
47
+ underscored_project_name: underscored_project_name,
27
48
  camel_cased_app_name: Inflections.camel_cased_name(target_dir),
28
49
  underscored_umbrella_name: Inflections.underscored_name(umbrella_name),
29
50
  camel_cased_umbrella_name: Inflections.camel_cased_name(umbrella_name),