dry-web-roda 0.10.0 → 0.14.0

Sign up to get free protection for your applications and to get access to all the features.
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
data/spec/support/cli.rb DELETED
@@ -1,47 +0,0 @@
1
- require "aruba"
2
- require "aruba/api"
3
- require "pathname"
4
-
5
- module RSpec
6
- module Support
7
- module Cli
8
- def self.included(spec)
9
- spec.before do
10
- aruba = Pathname.new(Dir.pwd).join('tmp', 'aruba')
11
- aruba.rmtree if aruba.exist?
12
-
13
- setup_aruba
14
- end
15
- end
16
-
17
- private
18
-
19
- def run_command(cmd, output = nil, exit_status: 0)
20
- run_simple "bundle exec #{cmd}", fail_on_error: false
21
-
22
- match_output(output)
23
- expect(last_command_started).to have_exit_status(exit_status)
24
- end
25
-
26
- def match_output(output)
27
- case output
28
- when String
29
- expect(all_output).to include(output)
30
- when Regexp
31
- expect(all_output).to match(output)
32
- when Array
33
- output.each { |o| match_output(o) }
34
- end
35
- end
36
-
37
- def all_output
38
- all_commands.map(&:output).join("\n")
39
- end
40
- end
41
- end
42
- end
43
-
44
- RSpec.configure do |config|
45
- config.include Aruba::Api, type: :cli
46
- config.include RSpec::Support::Cli, type: :cli
47
- end
@@ -1,37 +0,0 @@
1
- require "fileutils"
2
-
3
- module RSpec
4
- module Support
5
- module Directory
6
- private
7
-
8
- def with_directory(directory)
9
- current = Dir.pwd
10
- target = Pathname.new(Dir.pwd).join(directory)
11
-
12
- Dir.chdir(target)
13
- yield
14
- ensure
15
- Dir.chdir(current)
16
- end
17
-
18
- def with_tmp_directory
19
- dir = Pathname.new("tmp").join("aruba")
20
-
21
- with_directory(dir) do
22
- yield
23
- end
24
- ensure
25
- FileUtils.rm_rf(dir)
26
- end
27
- end
28
- end
29
- end
30
-
31
- RSpec.configure do |config|
32
- config.include RSpec::Support::Directory, type: :cli
33
-
34
- config.before :suite do
35
- Pathname.new(Dir.pwd).join("tmp").mkpath
36
- end
37
- end
data/spec/support/env.rb DELETED
@@ -1,84 +0,0 @@
1
- require 'singleton'
2
- require 'thread'
3
-
4
- module RSpec
5
- module Support
6
- class Env
7
- include Singleton
8
-
9
- def self.setup
10
- instance.__send__(:setup)
11
- end
12
-
13
- def self.reset
14
- instance.__send__(:setup)
15
- end
16
-
17
- def self.env
18
- instance.to_h
19
- end
20
-
21
- def self.[](key)
22
- instance[key]
23
- end
24
-
25
- def self.[]=(key, value)
26
- instance[key] = value
27
- end
28
-
29
- def self.fetch_from_original(key)
30
- instance.__send__(:original).fetch(key)
31
- end
32
-
33
- def initialize
34
- @original = ENV.to_hash
35
- @mutex = Mutex.new
36
- setup
37
- end
38
-
39
- def [](key)
40
- synchronize do
41
- env[key]
42
- end
43
- end
44
-
45
- def []=(key, value)
46
- synchronize do
47
- env[key] = value
48
- end
49
- end
50
-
51
- def to_h
52
- env.dup
53
- end
54
-
55
- private
56
-
57
- attr_reader :original, :env
58
-
59
- def setup
60
- synchronize do
61
- @env = {}
62
- end
63
-
64
- self["GEM_ROOT"] = original["GEM_ROOT"]
65
- self["GEM_HOME"] = original["GEM_HOME"]
66
- self["GEM_PATH"] = original["GEM_PATH"]
67
- end
68
-
69
- def synchronize(&blk)
70
- @mutex.synchronize(&blk)
71
- end
72
- end
73
- end
74
- end
75
-
76
- RSpec.configure do |config|
77
- config.before(:suite) do
78
- RSpec::Support::Env.setup
79
- end
80
-
81
- config.after do
82
- RSpec::Support::Env.reset
83
- end
84
- end
@@ -1,59 +0,0 @@
1
- module RSpec
2
- module Support
3
- module Files
4
- private
5
-
6
- def write(path, *content)
7
- Pathname.new(path).dirname.mkpath
8
- open(path, ::File::CREAT | ::File::WRONLY, *content)
9
- end
10
-
11
- def rewrite(path, *content)
12
- open(path, ::File::TRUNC | ::File::WRONLY, *content)
13
- end
14
-
15
- def replace(path, target, replacement)
16
- content = ::File.readlines(path)
17
- content[index(content, path, target)] = "#{replacement}\n"
18
-
19
- rewrite(path, content)
20
- end
21
-
22
- def replace_last(path, target, replacement)
23
- content = ::File.readlines(path)
24
- content[-index(content.reverse, path, target) - 1] = "#{replacement}\n"
25
-
26
- rewrite(path, content)
27
- end
28
-
29
- def unshift(path, line)
30
- content = ::File.readlines(path)
31
- content.unshift("#{line}\n")
32
-
33
- rewrite(path, content)
34
- end
35
-
36
- def append(path, contents)
37
- content = ::File.readlines(path)
38
- content << "#{contents}\n"
39
-
40
- rewrite(path, content)
41
- end
42
-
43
- def open(path, mode, *content)
44
- ::File.open(path, mode) do |file|
45
- file.write(Array(content).flatten.join)
46
- end
47
- end
48
-
49
- def index(content, path, target)
50
- content.index { |l| l.include?(target) } or
51
- raise ArgumentError.new("Cannot find `#{target}' inside `#{path}'.")
52
- end
53
- end
54
- end
55
- end
56
-
57
- RSpec.configure do |config|
58
- config.include RSpec::Support::Files, type: :cli
59
- end
@@ -1,60 +0,0 @@
1
- require "waitutil"
2
- require_relative 'env'
3
- require_relative 'silently'
4
- require_relative 'bundler'
5
- require_relative 'directories'
6
-
7
- module RSpec
8
- module Support
9
- module Project
10
- private
11
-
12
- KNOWN_ARGUMENTS = [:arch].freeze
13
-
14
- def with_project(name = "sandbox", **args)
15
- with_tmp_directory do
16
- create_project name, args
17
-
18
- within_project_directory(name) do
19
- setup_gemfile gems: ["'dry-web-roda', path: '#{root}'"], exclude_gems: ['dry-web-roda']
20
- bundle_install
21
- yield
22
- end
23
- end
24
- end
25
-
26
- def within_project_directory(project)
27
- cd(project.to_s) do
28
- # Aruba resets ENV and its API to set new env vars is broken.
29
- #
30
- # We need to manually setup the following env vars:
31
- #
32
- # ENV["PATH"] is required by Capybara's selenium/poltergeist drivers
33
- ENV["PATH"] = RSpec::Support::Env.fetch_from_original("PATH")
34
- # Bundler on CI can't find HOME and it fails to run Hanami commands
35
- ENV["HOME"] = RSpec::Support::Env.fetch_from_original("HOME")
36
-
37
- yield
38
- end
39
- end
40
-
41
- def create_project(name, args)
42
- silently "dry-web-roda new #{name} #{_create_project_args(args)}"
43
- end
44
-
45
- def _create_project_args(args)
46
- return if args.empty?
47
-
48
- flags = args.dup.keep_if { |k, _| KNOWN_ARGUMENTS.include?(k) }
49
-
50
- flags.map { |arg, value|
51
- "--#{arg}=#{value}"
52
- }.join(" ")
53
- end
54
- end
55
- end
56
- end
57
-
58
- RSpec.configure do |config|
59
- config.include RSpec::Support::Project, type: :cli
60
- end
@@ -1,5 +0,0 @@
1
- require "rack/test"
2
-
3
- RSpec.configure do |config|
4
- config.include Rack::Test::Methods, type: :request
5
- end
@@ -1,28 +0,0 @@
1
- require "tempfile"
2
-
3
- module RSpec
4
- module Support
5
- def self.silently(cmd, via: :system)
6
- out = Tempfile.new("dry-web-roda-out")
7
- # RSpec::Support::Env.env
8
- result = ::Kernel.__send__(via, cmd, out: out.path, err: out.path)
9
-
10
- return if result
11
-
12
- out.rewind
13
- fail "#{cmd} failed:\n#{out.read}" # rubocop:disable Style/SignalException
14
- end
15
-
16
- module Silently
17
- private
18
-
19
- def silently(*args)
20
- Support.silently(*args)
21
- end
22
- end
23
- end
24
- end
25
-
26
- RSpec.configure do |config|
27
- config.include RSpec::Support::Silently, type: :cli
28
- end
@@ -1,33 +0,0 @@
1
- require "dry/web/roda/generators/inflections"
2
-
3
- RSpec.describe Dry::Web::Roda::Generators::Inflections do
4
- subject(:inflections) { described_class }
5
-
6
- describe ".underscored_name" do
7
- it "leaves an already underscored name" do
8
- expect(inflections.underscored_name("my_app")).to eq "my_app"
9
- end
10
-
11
- it "leaves a name without any sort of delimiters" do
12
- expect(inflections.underscored_name("myapp")).to eq "myapp"
13
- end
14
-
15
- it "converts a dashed name" do
16
- expect(inflections.underscored_name("my-app")).to eq "my_app"
17
- end
18
- end
19
-
20
- describe ".camel_cased_name" do
21
- it "leaves an already camel cased name" do
22
- expect(inflections.camel_cased_name("MyApp")).to eq "MyApp"
23
- end
24
-
25
- it "converts a dashed name" do
26
- expect(inflections.camel_cased_name("my-app")).to eq "MyApp"
27
- end
28
-
29
- it "converts an underscored name" do
30
- expect(inflections.camel_cased_name("my_app")).to eq "MyApp"
31
- end
32
- end
33
- end