dry-web-roda 0.6.3 → 0.7.0

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.
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),