dry-web-roda 0.10.0 → 0.14.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 (57) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +179 -41
  3. data/LICENSE +16 -18
  4. data/README.md +16 -42
  5. data/{exe → bin}/dry-web-roda +0 -0
  6. data/dry-web-roda.gemspec +24 -23
  7. data/lib/dry/web/roda/generators/abstract_project.rb +2 -2
  8. data/lib/dry/web/roda/generators/inflections.rb +3 -3
  9. data/lib/dry/web/roda/generators/sub_app.rb +2 -2
  10. data/lib/dry/web/roda/inflector.rb +9 -0
  11. data/lib/dry/web/roda/templates/Gemfile +19 -14
  12. data/lib/dry/web/roda/templates/README.md.tt +8 -5
  13. data/lib/dry/web/roda/templates/container.rb.tt +2 -0
  14. data/lib/dry/web/roda/templates/flat_project/boot.rb.tt +2 -0
  15. data/lib/dry/web/roda/templates/flat_project/web.rb.tt +3 -1
  16. data/lib/dry/web/roda/templates/monitor.rb.tt +2 -1
  17. data/lib/dry/web/roda/templates/subapp/container.rb.tt +3 -3
  18. data/lib/dry/web/roda/templates/subapp/view.rb.tt +17 -0
  19. data/lib/dry/web/roda/templates/subapp/view_context.rb.tt +8 -0
  20. data/lib/dry/web/roda/templates/subapp/web.rb.tt +3 -1
  21. data/lib/dry/web/roda/templates/subapp/welcome.rb.tt +2 -2
  22. data/lib/dry/web/roda/templates/types.rb +3 -3
  23. data/lib/dry/web/roda/templates/umbrella_project/boot.rb.tt +2 -0
  24. data/lib/dry/web/roda/templates/view.rb.tt +15 -0
  25. data/lib/dry/web/roda/templates/view_context.rb.tt +31 -0
  26. data/lib/dry/web/roda/templates/welcome.rb.tt +2 -2
  27. data/lib/dry/web/roda/version.rb +1 -1
  28. data/lib/roda/plugins/dry_view.rb +6 -3
  29. metadata +30 -148
  30. data/.gitignore +0 -37
  31. data/.rspec +0 -2
  32. data/.travis.yml +0 -32
  33. data/CONTRIBUTING.md +0 -29
  34. data/Gemfile +0 -33
  35. data/Rakefile +0 -6
  36. data/lib/dry/web/roda/templates/.gitignore +0 -11
  37. data/lib/dry/web/roda/templates/.keep +0 -0
  38. data/lib/dry/web/roda/templates/.rspec +0 -2
  39. data/lib/dry/web/roda/templates/subapp/view__context.rb.tt +0 -10
  40. data/lib/dry/web/roda/templates/subapp/view__controller.rb.tt +0 -19
  41. data/lib/dry/web/roda/templates/view__context.rb.tt +0 -41
  42. data/lib/dry/web/roda/templates/view__controller.rb.tt +0 -17
  43. data/script/ci +0 -67
  44. data/script/setup +0 -47
  45. data/script/teardown +0 -42
  46. data/spec/integration/new_app_spec.rb +0 -21
  47. data/spec/spec_helper.rb +0 -22
  48. data/spec/support/app.rb +0 -64
  49. data/spec/support/bundler.rb +0 -113
  50. data/spec/support/cli.rb +0 -47
  51. data/spec/support/directories.rb +0 -37
  52. data/spec/support/env.rb +0 -84
  53. data/spec/support/files.rb +0 -59
  54. data/spec/support/project.rb +0 -60
  55. data/spec/support/requests.rb +0 -5
  56. data/spec/support/silently.rb +0 -28
  57. data/spec/unit/generators/inflections_spec.rb +0 -33
File without changes
@@ -1,2 +0,0 @@
1
- --color
2
- --require spec_helper
@@ -1,10 +0,0 @@
1
- require "<%= config[:underscored_umbrella_name] %>/view/context"
2
-
3
- module <%= config[:camel_cased_umbrella_name] %>
4
- module <%= config[:camel_cased_app_name] %>
5
- module View
6
- class Context < <%= config[:camel_cased_umbrella_name] %>::View::Context
7
- end
8
- end
9
- end
10
- end
@@ -1,19 +0,0 @@
1
- # auto_register: false
2
-
3
- require "slim"
4
- require "dry/view/controller"
5
- require "<%= config[:underscored_umbrella_name] %>/<%= config[:underscored_project_name] %>/container"
6
-
7
- module <%= config[:camel_cased_umbrella_name] %>
8
- module <%= config[:camel_cased_app_name] %>
9
- module View
10
- class Controller < Dry::View::Controller
11
- configure do |config|
12
- config.paths = [Container.root.join("web/templates")]
13
- config.context = Container["view.context"]
14
- config.layout = "application"
15
- end
16
- end
17
- end
18
- end
19
- end
@@ -1,41 +0,0 @@
1
- module <%= config[:camel_cased_app_name] %>
2
- module View
3
- class Context
4
- attr_reader :attrs
5
-
6
- def initialize(attrs = {})
7
- @attrs = attrs
8
- end
9
-
10
- def csrf_token
11
- self[:csrf_token]
12
- end
13
-
14
- def csrf_metatag
15
- self[:csrf_metatag]
16
- end
17
-
18
- def csrf_tag
19
- self[:csrf_tag]
20
- end
21
-
22
- def flash
23
- self[:flash]
24
- end
25
-
26
- def flash?
27
- %i[notice alert].any? { |type| flash[type] }
28
- end
29
-
30
- def with(new_attrs)
31
- self.class.new(attrs.merge(new_attrs))
32
- end
33
-
34
- private
35
-
36
- def [](name)
37
- attrs.fetch(name)
38
- end
39
- end
40
- end
41
- end
@@ -1,17 +0,0 @@
1
- # auto_register: false
2
-
3
- require "slim"
4
- require "dry/view/controller"
5
- require "<%= config[:underscored_project_name] %>/container"
6
-
7
- module <%= config[:camel_cased_app_name] %>
8
- module View
9
- class Controller < Dry::View::Controller
10
- configure do |config|
11
- config.paths = [Container.root.join("web/templates")]
12
- config.context = Container["view.context"]
13
- config.layout = "application"
14
- end
15
- end
16
- end
17
- end
data/script/ci DELETED
@@ -1,67 +0,0 @@
1
- #!/bin/bash
2
- set -euo pipefail
3
- IFS=$'\n\t'
4
-
5
- setup() {
6
- ./script/setup
7
- }
8
-
9
- teardown() {
10
- ./script/teardown
11
- }
12
-
13
- run_all() {
14
- bundle exec rake
15
- }
16
-
17
- run_unit_tests() {
18
- bundle exec rake spec:coverage
19
- }
20
-
21
- run_isolation_tests() {
22
- local pwd=$PWD
23
- local root="$pwd/spec/isolation"
24
-
25
- run_tests $root
26
- }
27
-
28
- run_integration_tests() {
29
- local pwd=$PWD
30
- local root="$pwd/spec/integration"
31
-
32
- run_tests $root
33
- }
34
-
35
- run_tests() {
36
- local root=$1
37
-
38
- for test in $(find $root -name '*_spec.rb')
39
- do
40
- run_test $test
41
-
42
- if [ $? -ne 0 ]; then
43
- local exit_code=$?
44
- echo "Failing test: $test"
45
- exit $exit_code
46
- fi
47
- done
48
- }
49
-
50
- run_test() {
51
- local test=$1
52
-
53
- printf "\n\n\nRunning: $test\n"
54
- COVERAGE=true bundle exec rspec $test
55
- }
56
-
57
- main() {
58
- setup &&
59
- run_all
60
- # run_unit_tests &&
61
- # run_isolation_tests &&
62
- # run_integration_tests
63
- }
64
-
65
- trap teardown EXIT
66
-
67
- main
data/script/setup DELETED
@@ -1,47 +0,0 @@
1
- #!/bin/bash
2
- set -euo pipefail
3
- IFS=$'\n\t'
4
-
5
- declare pwd=$PWD
6
- declare cache="$pwd/vendor/cache"
7
-
8
- cleanup() {
9
- ./script/teardown
10
- }
11
-
12
- bundle_package() {
13
- bundle package --all
14
- echo ""
15
- }
16
-
17
- # We may need something like this in future if we use github checkouts of gems
18
- # (see `install_hanami_frameworks()` in hanami/hanami's setup script)
19
- #
20
- # install_from_git_checkouts() { }
21
-
22
- install_base_gem() {
23
- bundle exec rake build
24
- local pkg=`ls $pwd/pkg/*.gem | sort -r | head -1`
25
-
26
- gem install $pkg > /dev/null
27
- mv $pkg $cache
28
-
29
- echo "Installed $pkg (from $(git rev-parse HEAD))"
30
- echo ""
31
- }
32
-
33
- generate_index() {
34
- pushd $cache > /dev/null
35
- gem generate_index
36
- popd > /dev/null
37
- echo ""
38
- }
39
-
40
- main() {
41
- cleanup &&
42
- bundle_package &&
43
- install_base_gem &&
44
- generate_index
45
- }
46
-
47
- main
data/script/teardown DELETED
@@ -1,42 +0,0 @@
1
- #!/bin/bash
2
- set -euo pipefail
3
- IFS=$'\n\t'
4
-
5
- remove_bundler_cache() {
6
- local pwd=$PWD
7
- local cache="$pwd/vendor/cache"
8
-
9
- rm -rf $cache
10
- }
11
-
12
- # We may need something like this in future if we use github checkouts of gems
13
- # (see `uninstall_hanami_gems()` in hanami/hanami's teardown script)
14
- #
15
- # uninstall_gems_from_checkouts() { }
16
-
17
- bundle_install() {
18
- bundle install > /dev/null
19
- }
20
-
21
- advertise_start() {
22
- echo -en "Cleaning up.."
23
- }
24
-
25
- advertise_end() {
26
- echo " done"
27
- }
28
-
29
- main() {
30
- local ci=${CI:-false}
31
-
32
- if [ "$ci" = true ] ; then
33
- echo "Running on CI, skipping cleanup"
34
- else
35
- advertise_start &&
36
- remove_bundler_cache &&
37
- bundle_install &&
38
- advertise_end
39
- fi
40
- }
41
-
42
- main
@@ -1,21 +0,0 @@
1
- RSpec.describe "new app", type: :cli do
2
- describe "umbrella project" do
3
- it "boots and displays a welcome page" do
4
- with_project do
5
- run_app do |app|
6
- expect(app.get("/")).to eq "<html><body><h1>Welcome to dry-web-roda!</h1></body></html>"
7
- end
8
- end
9
- end
10
- end
11
-
12
- describe "flat project" do
13
- it "boots and displays a welcome page" do
14
- with_project arch: "flat" do
15
- run_app do |app|
16
- expect(app.get("/")).to eq "<html><body><h1>Welcome to dry-web-roda!</h1></body></html>"
17
- end
18
- end
19
- end
20
- end
21
- end
data/spec/spec_helper.rb DELETED
@@ -1,22 +0,0 @@
1
- require "pry-byebug"
2
-
3
- SPEC_ROOT = Pathname(__dir__)
4
- TEST_APP_NAME = "test_app".freeze
5
-
6
- Dir[SPEC_ROOT.join("support/*.rb").to_s].each { |f| require f }
7
-
8
- RSpec.configure do |config|
9
- config.disable_monkey_patching!
10
-
11
- config.example_status_persistence_file_path = "spec/examples.txt"
12
-
13
- config.filter_run :focus
14
- config.run_all_when_everything_filtered = true
15
-
16
- config.default_formatter = "doc" if config.files_to_run.one?
17
-
18
- config.profile_examples = 10
19
-
20
- config.order = :random
21
- Kernel.srand config.seed
22
- end
data/spec/support/app.rb DELETED
@@ -1,64 +0,0 @@
1
- require "net/http"
2
- require "uri"
3
- require "waitutil"
4
- require_relative "silently"
5
-
6
- module RSpec
7
- module Support
8
- module App
9
- private
10
-
11
- class RunningApp
12
- attr_reader :port
13
-
14
- def initialize(port)
15
- @port = port
16
- end
17
-
18
- def get(path)
19
- Net::HTTP.get(uri(path))
20
- end
21
-
22
- private
23
-
24
- def uri(path)
25
- URI("http://0.0.0.0:#{port}#{path}")
26
- end
27
- end
28
-
29
- def run_app(host: "0.0.0.0", port: "30333", timeout: 10)
30
- cmd = "bundle exec rackup -o 0.0.0.0 -p #{port} config.ru"
31
- out = Tempfile.new("dry-web-roda-out")
32
-
33
- pid = fork {
34
- Bundler.with_clean_env do
35
- exec cmd, out: out.path, err: out.path
36
- end
37
- }
38
-
39
- WaitUtil.wait_for_condition "app available on #{host}:#{port}", timeout_sec: timeout do
40
- begin
41
- result = WaitUtil.send(:is_tcp_port_open, host, port, WaitUtil::DEFAULT_DELAY_SEC)
42
-
43
- result || begin
44
- out.rewind
45
- [false, "#{cmd} failed:\n#{out.read}"]
46
- end
47
- rescue SocketError
48
- out.rewind
49
- [false, "#{cmd} failed:\n#{out.read}"]
50
- end
51
- end
52
-
53
- yield RunningApp.new(port)
54
- ensure
55
- Process.kill "TERM", pid
56
- Process.wait pid
57
- end
58
- end
59
- end
60
- end
61
-
62
- RSpec.configure do |config|
63
- config.include RSpec::Support::App, type: :cli
64
- end
@@ -1,113 +0,0 @@
1
- require 'open3'
2
- require 'pathname'
3
- require_relative 'env'
4
- require_relative 'silently'
5
- require_relative 'files'
6
-
7
- module RSpec
8
- module Support
9
- module Bundler
10
- def self.root
11
- Pathname.new(__dir__).join("..", "..")
12
- end
13
-
14
- def self.cache
15
- root.join("vendor", "cache")
16
- end
17
-
18
- def self.setup
19
- return if cache.exist?
20
-
21
- with_clean_env do
22
- RSpec::Support.silently "./script/setup"
23
- end
24
- end
25
-
26
- def self.with_clean_env(&blk)
27
- ::Bundler.with_clean_env(&blk)
28
- end
29
-
30
- private
31
-
32
- attr_reader :out, :err, :exitstatus
33
-
34
- def setup_gemfile(gems: [], exclude_gems: [], path: "Gemfile")
35
- filtered_content = ::File.readlines(path).
36
- drop(1).
37
- reject { |l| exclude_gems.any? { |g| l.include?(g) } }
38
-
39
- content = ["source 'file://#{cache}'\n"] + filtered_content + gems.map { |g| "gem #{g}\n" }
40
-
41
- rewrite(path, content)
42
- end
43
-
44
- def bundle_install
45
- bundle "install --local --no-cache --retry 0 --no-color"
46
- end
47
-
48
- def bundle_exec(cmd, env: nil, &blk)
49
- bundle("exec #{cmd}", env: env, &blk)
50
- end
51
-
52
- def bundle(cmd, env: nil, &blk)
53
- ruby_bin = which("ruby")
54
- bundle_bin = which("bundle")
55
- rack_env = "RACK_ENV=#{env} " unless env.nil?
56
-
57
- system_exec("#{rack_env}#{ruby_bin} -I#{load_paths} #{bundle_bin} #{cmd}", &blk)
58
- end
59
-
60
- # Adapted from Bundler source code
61
- #
62
- # Bundler is released under MIT license
63
- # https://github.com/bundler/bundler/blob/master/LICENSE.md
64
- #
65
- # A special "thank you" goes to Bundler maintainers and contributors.
66
- #
67
- # rubocop:disable Metrics/AbcSize
68
- # rubocop:disable Metrics/MethodLength
69
- def system_exec(cmd)
70
- Open3.popen3(RSpec::Support::Env.env, cmd) do |stdin, stdout, stderr, wait_thr|
71
- yield stdin, stdout, wait_thr if block_given?
72
- stdin.close
73
-
74
- @exitstatus = wait_thr && wait_thr.value.exitstatus
75
- @out = Thread.new { stdout.read }.value.strip
76
- @err = Thread.new { stderr.read }.value.strip
77
- end
78
-
79
- (@all_output ||= "") << [
80
- "$ #{cmd.to_s.strip}",
81
- out,
82
- err,
83
- @exitstatus ? "# $? => #{@exitstatus}" : "",
84
- "\n"
85
- ].reject(&:empty?).join("\n")
86
-
87
- @out
88
- end
89
- # rubocop:enable Metrics/MethodLength
90
- # rubocop:enable Metrics/AbcSize
91
-
92
- def load_paths
93
- [root.join('lib'), root.join('spec')].join(':')
94
- end
95
-
96
- def root
97
- RSpec::Support::Bundler.root
98
- end
99
-
100
- def cache
101
- RSpec::Support::Bundler.cache
102
- end
103
- end
104
- end
105
- end
106
-
107
- RSpec.configure do |config|
108
- config.include RSpec::Support::Bundler, type: :cli
109
-
110
- config.before(:all, type: :cli) do
111
- RSpec::Support::Bundler.setup
112
- end
113
- end