hoboken 0.0.1 → 0.9.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.github/dependabot.yml +7 -0
- data/.github/workflows/ruby.yml +28 -0
- data/.rubocop.yml +33 -0
- data/.ruby-version +1 -0
- data/Gemfile +2 -0
- data/IDEAS.md +57 -0
- data/LICENSE.txt +1 -1
- data/README.md +21 -10
- data/Rakefile +14 -6
- data/bin/hoboken +2 -1
- data/hoboken.gemspec +53 -16
- data/lib/hoboken.rb +110 -23
- data/lib/hoboken/actions.rb +10 -6
- data/lib/hoboken/add_ons/github_action.rb +14 -0
- data/lib/hoboken/add_ons/heroku.rb +8 -23
- data/lib/hoboken/add_ons/internationalization.rb +10 -6
- data/lib/hoboken/add_ons/metrics.rb +39 -14
- data/lib/hoboken/add_ons/omniauth.rb +114 -47
- data/lib/hoboken/add_ons/rubocop.rb +40 -0
- data/lib/hoboken/add_ons/sequel.rb +76 -47
- data/lib/hoboken/add_ons/sprockets.rb +67 -65
- data/lib/hoboken/add_ons/travis.rb +6 -2
- data/lib/hoboken/add_ons/twbs.rb +80 -0
- data/lib/hoboken/generate.rb +112 -38
- data/lib/hoboken/templates/Gemfile.erb.tt +33 -10
- data/lib/hoboken/templates/README.md.tt +105 -35
- data/lib/hoboken/templates/Rakefile.tt +10 -22
- data/lib/hoboken/templates/classic.rb.tt +35 -8
- data/lib/hoboken/templates/config.ru.tt +5 -3
- data/lib/hoboken/templates/console.sh +5 -0
- data/lib/hoboken/templates/db.rb.tt +24 -0
- data/lib/hoboken/templates/github_action.tt +28 -0
- data/lib/hoboken/templates/gitignore +8 -1
- data/lib/hoboken/templates/metrics.rake.tt +10 -9
- data/lib/hoboken/templates/modular.rb.tt +40 -11
- data/lib/hoboken/templates/puma.rb.tt +21 -0
- data/lib/hoboken/templates/rspec.rake.tt +5 -0
- data/lib/hoboken/templates/rubocop.yml.tt +31 -0
- data/lib/hoboken/templates/sequel.rake +6 -4
- data/lib/hoboken/templates/server.sh +12 -0
- data/lib/hoboken/templates/setup.sh +7 -0
- data/lib/hoboken/templates/spec/app_spec.rb.tt +15 -0
- data/lib/hoboken/templates/spec/rack_matchers.rb.tt +56 -0
- data/lib/hoboken/templates/spec/spec_helper.rb.tt +41 -0
- data/lib/hoboken/templates/sprockets.rake +13 -7
- data/lib/hoboken/templates/sprockets_chain.rb +7 -3
- data/lib/hoboken/templates/sprockets_helper.rb +14 -10
- data/lib/hoboken/templates/support/rack_helpers.rb.tt +55 -0
- data/lib/hoboken/templates/support/rack_test_assertions.rb.tt +111 -0
- data/lib/hoboken/templates/test/test_helper.rb.tt +38 -27
- data/lib/hoboken/templates/test/unit/app_test.rb.tt +11 -3
- data/lib/hoboken/templates/test_unit.rake.tt +18 -0
- data/lib/hoboken/templates/views/index.erb.tt +10 -3
- data/lib/hoboken/templates/views/layout.erb.tt +4 -1
- data/lib/hoboken/version.rb +3 -1
- data/test/fixtures/Gemfile +3 -3
- data/test/fixtures/Gemfile.pristine +3 -2
- data/test/integration/add_on_test.rb +399 -136
- data/test/integration/generate_test.rb +170 -38
- data/test/test_helper.rb +54 -23
- data/test/unit/hoboken_actions_test.rb +70 -61
- metadata +441 -16
- data/.travis.yml +0 -5
- data/lib/hoboken/templates/test/support/rack_test_assertions.rb.tt +0 -92
@@ -1,71 +1,203 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require_relative '../test_helper'
|
4
|
+
|
5
|
+
# rubocop:disable Metrics/ClassLength
|
3
6
|
class GenerateTest < IntegrationTestCase
|
7
|
+
# rubocop:disable Metrics/MethodLength
|
8
|
+
# rubocop:disable Metrics/AbcSize
|
4
9
|
def test_generate_classic
|
5
10
|
run_hoboken(:generate) do
|
6
|
-
assert_file
|
7
|
-
assert_file
|
8
|
-
assert_file
|
9
|
-
assert_file
|
10
|
-
assert_file
|
11
|
-
assert_file
|
12
|
-
|
13
|
-
|
14
|
-
assert_file
|
15
|
-
assert_file
|
11
|
+
assert_file '.env'
|
12
|
+
assert_file 'Gemfile'
|
13
|
+
assert_file('Procfile')
|
14
|
+
assert_file 'README.md'
|
15
|
+
assert_file 'Rakefile'
|
16
|
+
assert_file 'app.rb', /require 'sinatra'/
|
17
|
+
assert_file 'app.rb', %r{require 'sinatra/flash'}
|
18
|
+
assert_file 'app.rb', /require 'erubi'/
|
19
|
+
assert_file 'app.rb', /erb :index/
|
20
|
+
assert_file 'app.rb', /set :erb, { escape_html: true }/
|
21
|
+
assert_file 'app.rb', /require 'better_errors'/
|
22
|
+
assert_file_does_not_have_content 'app.rb', /json message:/
|
23
|
+
assert_file 'bin/console'
|
24
|
+
assert_file 'bin/server'
|
25
|
+
assert_file 'bin/setup'
|
26
|
+
assert_file 'config.ru', /run Sinatra::Application/
|
27
|
+
assert_directory 'public'
|
28
|
+
assert_directory 'test'
|
29
|
+
assert_file 'views/index.erb'
|
30
|
+
assert_file 'views/layout.erb', /styled_flash/
|
16
31
|
end
|
17
32
|
end
|
33
|
+
# rubocop:enable Metrics/MethodLength
|
34
|
+
# rubocop:enable Metrics/AbcSize
|
18
35
|
|
19
36
|
def test_generate_classic_tiny
|
20
37
|
run_hoboken(:generate, tiny: true) do
|
21
|
-
refute_directory(
|
22
|
-
assert_file
|
38
|
+
refute_directory('public')
|
39
|
+
assert_file 'app.rb', /__END__/, /@@layout/, /@@index/
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def test_generate_classic_api_only
|
44
|
+
run_hoboken(:generate, api_only: true) do
|
45
|
+
refute_directory('public')
|
46
|
+
refute_directory('views')
|
47
|
+
assert_file 'app.rb', %r{require 'sinatra/json'}
|
48
|
+
assert_file 'app.rb', /json message:/
|
49
|
+
assert_file_does_not_have_content 'app.rb', %r{require 'sinatra/flash'}
|
50
|
+
assert_file_does_not_have_content 'app.rb', /erb :index/
|
51
|
+
assert_file_does_not_have_content 'app.rb', /set :erb, { escape_html: true }/
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def test_generate_api_only_with_tiny
|
56
|
+
run_hoboken(:generate, api_only: true, tiny: true) do
|
57
|
+
assert_file_does_not_have_content 'app.rb', /__END__/, /@@layout/, /@@index/
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def test_generate_classic_can_run_tests
|
62
|
+
run_hoboken(:generate) do
|
63
|
+
result = execute('rake test:all')
|
64
|
+
assert_match(/1 tests, 3 assertions, 0 failures, 0 errors/, result)
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
def test_generate_classic_can_run_specs
|
69
|
+
run_hoboken(:generate, test_framework: 'rspec') do
|
70
|
+
result = execute('rake spec')
|
71
|
+
assert_match(/3 examples, 0 failures/, result)
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
def test_generate_classic_api_only_can_run_tests
|
76
|
+
run_hoboken(:generate, api_only: true) do
|
77
|
+
result = execute('rake test:all')
|
78
|
+
assert_match(/1 tests, 3 assertions, 0 failures, 0 errors/, result)
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
def test_generate_classic_api_only_can_run_specs
|
83
|
+
run_hoboken(:generate, api_only: true, test_framework: 'rspec') do
|
84
|
+
result = execute('rake spec')
|
85
|
+
assert_match(/3 examples, 0 failures/, result)
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
def test_generate_classic_passes_rubocop_inspection
|
90
|
+
run_hoboken(:generate) do
|
91
|
+
assert_match(/no offenses detected/, execute('rubocop'))
|
23
92
|
end
|
24
93
|
end
|
25
94
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
95
|
+
def test_generate_classic_api_only_passes_rubocop_inspection
|
96
|
+
run_hoboken(:generate, api_only: true) do
|
97
|
+
assert_match(/no offenses detected/, execute('rubocop'))
|
98
|
+
end
|
99
|
+
end
|
31
100
|
|
101
|
+
# rubocop:disable Metrics/MethodLength
|
102
|
+
# rubocop:disable Metrics/AbcSize
|
32
103
|
def test_generate_modular
|
33
104
|
run_hoboken(:generate, type: :modular) do
|
34
|
-
assert_file
|
35
|
-
assert_file
|
36
|
-
assert_file
|
37
|
-
assert_file
|
38
|
-
assert_file
|
39
|
-
assert_file
|
40
|
-
|
41
|
-
assert_file
|
42
|
-
assert_file
|
43
|
-
assert_file
|
105
|
+
assert_file '.env'
|
106
|
+
assert_file 'Gemfile'
|
107
|
+
assert_file('Procfile')
|
108
|
+
assert_file 'README.md'
|
109
|
+
assert_file 'Rakefile'
|
110
|
+
assert_file('app.rb', %r{require 'sinatra/base'})
|
111
|
+
assert_file 'app.rb', %r{require 'sinatra/flash'}
|
112
|
+
assert_file('app.rb', /require 'erubi'/)
|
113
|
+
assert_file('app.rb', /module Sample/)
|
114
|
+
assert_file('app.rb', /class App < Sinatra::Base/)
|
115
|
+
assert_file 'app.rb', /set :erb, { escape_html: true }/
|
116
|
+
assert_file 'app.rb', /register Sinatra::Flash/
|
117
|
+
assert_file 'app.rb', /require 'better_errors'/
|
118
|
+
assert_file 'bin/console'
|
119
|
+
assert_file 'bin/server'
|
120
|
+
assert_file 'bin/setup'
|
121
|
+
assert_file 'config.ru', /run Sample::App/
|
122
|
+
assert_directory 'public'
|
123
|
+
assert_file 'test/support/rack_helpers.rb', /Sample::App/
|
124
|
+
assert_file 'views/index.erb'
|
125
|
+
assert_file 'views/layout.erb', /styled_flash/
|
44
126
|
end
|
45
127
|
end
|
128
|
+
# rubocop:enable Metrics/MethodLength
|
129
|
+
# rubocop:enable Metrics/AbcSize
|
46
130
|
|
47
131
|
def test_generate_modular_tiny
|
48
132
|
run_hoboken(:generate, tiny: true, type: :modular) do
|
49
|
-
refute_directory(
|
50
|
-
assert_file
|
133
|
+
refute_directory('public')
|
134
|
+
assert_file 'app.rb', /__END__/, /@@layout/, /@@index/
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
138
|
+
def test_generate_modular_api_only
|
139
|
+
run_hoboken(:generate, type: :modular, api_only: true) do
|
140
|
+
refute_directory('public')
|
141
|
+
refute_directory('views')
|
142
|
+
assert_file 'app.rb', %r{require 'sinatra/json'}
|
143
|
+
assert_file 'app.rb', /json message:/
|
144
|
+
assert_file_does_not_have_content 'app.rb', %r{require 'sinatra/flash'}
|
145
|
+
assert_file_does_not_have_content 'app.rb', /register Sinatra::Flash/
|
146
|
+
assert_file_does_not_have_content 'app.rb', /erb :index/
|
147
|
+
assert_file_does_not_have_content 'app.rb', /set :erb, { escape_html: true }/
|
148
|
+
end
|
149
|
+
end
|
150
|
+
|
151
|
+
def test_generate_modular_can_run_tests
|
152
|
+
run_hoboken(:generate, type: :modular) do
|
153
|
+
result = execute('rake test:all')
|
154
|
+
assert_match(/1 tests, 3 assertions, 0 failures, 0 errors/, result)
|
155
|
+
end
|
156
|
+
end
|
157
|
+
|
158
|
+
def test_generate_modular_can_run_specs
|
159
|
+
run_hoboken(:generate, test_framework: 'rspec', type: :modular) do
|
160
|
+
result = execute('rake spec')
|
161
|
+
assert_match(/3 examples, 0 failures/, result)
|
51
162
|
end
|
52
163
|
end
|
53
164
|
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
165
|
+
def test_generate_modular_api_only_can_run_tests
|
166
|
+
run_hoboken(:generate, api_only: true, type: :modular) do
|
167
|
+
result = execute('rake test:all')
|
168
|
+
assert_match(/1 tests, 3 assertions, 0 failures, 0 errors/, result)
|
169
|
+
end
|
170
|
+
end
|
171
|
+
|
172
|
+
def test_generate_modular_api_only_can_run_specs
|
173
|
+
run_hoboken(:generate, test_framework: 'rspec', api_only: true, type: :modular) do
|
174
|
+
result = execute('rake spec')
|
175
|
+
assert_match(/3 examples, 0 failures/, result)
|
176
|
+
end
|
177
|
+
end
|
178
|
+
|
179
|
+
def test_generate_modular_passes_rubocop_inspection
|
180
|
+
run_hoboken(:generate, type: :modular) do
|
181
|
+
assert_match(/no offenses detected/, execute('rubocop'))
|
182
|
+
end
|
183
|
+
end
|
184
|
+
|
185
|
+
def test_generate_modular_api_only_passes_rubocop_inspection
|
186
|
+
run_hoboken(:generate, api_only: true, type: :modular) do
|
187
|
+
assert_match(/no offenses detected/, execute('rubocop'))
|
188
|
+
end
|
189
|
+
end
|
59
190
|
|
60
191
|
def test_generate_with_ruby_version
|
61
|
-
run_hoboken(:generate, ruby_version:
|
62
|
-
assert_file
|
192
|
+
run_hoboken(:generate, ruby_version: '2.1.0') do
|
193
|
+
assert_file 'Gemfile', /ruby '2\.1\.0'/
|
63
194
|
end
|
64
195
|
end
|
65
196
|
|
66
197
|
def test_generate_with_git
|
67
198
|
run_hoboken(:generate, git: true) do
|
68
|
-
assert_directory
|
199
|
+
assert_directory '.git'
|
69
200
|
end
|
70
201
|
end
|
71
202
|
end
|
203
|
+
# rubocop:enable Metrics/ClassLength
|
data/test/test_helper.rb
CHANGED
@@ -1,67 +1,98 @@
|
|
1
|
-
|
2
|
-
require "fileutils"
|
1
|
+
# frozen_string_literal: true
|
3
2
|
|
3
|
+
require 'bundler/setup'
|
4
|
+
|
5
|
+
require 'warning'
|
6
|
+
|
7
|
+
# Ignore all warnings in Gem dependencies
|
8
|
+
Gem.path.each { |path| Warning.ignore(//, path) }
|
9
|
+
|
10
|
+
require 'test/unit'
|
11
|
+
require 'fileutils'
|
12
|
+
|
13
|
+
# rubocop:disable Style/GlobalVars
|
4
14
|
$hoboken_counter = 0
|
5
|
-
DESTINATION = File.expand_path(
|
15
|
+
DESTINATION = File.expand_path('tmp', __dir__)
|
6
16
|
FileUtils.rm_rf(DESTINATION)
|
7
17
|
|
8
18
|
class IntegrationTestCase < Test::Unit::TestCase
|
9
19
|
def teardown
|
10
|
-
if
|
20
|
+
if passed?
|
11
21
|
FileUtils.rm_rf("#{DESTINATION}/#{$hoboken_counter}")
|
12
22
|
else
|
13
23
|
puts "Left #{DESTINATION}/#{$hoboken_counter}/sample in place since test failed."
|
14
24
|
end
|
15
25
|
end
|
16
26
|
|
27
|
+
# rubocop:disable Metrics/AbcSize
|
17
28
|
def run_hoboken(command, **opts)
|
18
|
-
options =
|
19
|
-
o <<
|
20
|
-
o <<
|
21
|
-
o <<
|
22
|
-
o << "--
|
29
|
+
options = [].tap do |o|
|
30
|
+
o << '--git' if opts.fetch(:git, false)
|
31
|
+
o << '--tiny' if opts.fetch(:tiny, false)
|
32
|
+
o << '--api-only' if opts.fetch(:api_only, false)
|
33
|
+
o << "--test_framework=#{opts[:test_framework]}" if opts.key?(:test_framework)
|
34
|
+
o << "--type=#{opts[:type]}" if opts.key?(:type)
|
35
|
+
o << "--ruby-version=#{opts[:ruby_version]}" if opts.key?(:ruby_version)
|
23
36
|
end
|
24
37
|
|
25
38
|
$hoboken_counter += 1
|
26
|
-
bin_path = File.expand_path(
|
39
|
+
bin_path = File.expand_path('../bin/hoboken', __dir__)
|
27
40
|
|
28
|
-
|
41
|
+
# rubocop:disable Layout/LineLength
|
42
|
+
`#{bin_path} #{command} #{DESTINATION}/#{$hoboken_counter}/sample #{options.join(' ')}`
|
43
|
+
# rubocop:enable Layout/LineLength
|
29
44
|
yield
|
30
45
|
end
|
46
|
+
# rubocop:enable Metrics/AbcSize
|
31
47
|
|
32
48
|
def execute(command)
|
33
49
|
FileUtils.cd("#{DESTINATION}/#{$hoboken_counter}/sample") do
|
34
|
-
`bundle install` unless File.exists?("Gemfile.lock")
|
35
50
|
`#{command}`
|
36
51
|
end
|
37
52
|
end
|
38
53
|
|
39
54
|
def assert_file(filename, *contents)
|
40
|
-
full_path = File.join(DESTINATION, $hoboken_counter.to_s,
|
55
|
+
full_path = File.join(DESTINATION, $hoboken_counter.to_s, 'sample', filename)
|
56
|
+
assert_block("expected #{filename.inspect} to exist") do
|
57
|
+
File.exist?(full_path)
|
58
|
+
end
|
59
|
+
|
60
|
+
return if contents.empty?
|
61
|
+
|
62
|
+
read = File.read(full_path)
|
63
|
+
contents.each do |content|
|
64
|
+
assert_block("expected #{filename.inspect} to contain #{content}:\n#{read}") do
|
65
|
+
pattern = content.is_a?(Regexp) ? content : Regexp.new(Regexp.quote(content))
|
66
|
+
read =~ pattern
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
def assert_file_does_not_have_content(filename, *contents)
|
72
|
+
full_path = File.join(DESTINATION, $hoboken_counter.to_s, 'sample', filename)
|
41
73
|
assert_block("expected #{filename.inspect} to exist") do
|
42
|
-
File.
|
74
|
+
File.exist?(full_path)
|
43
75
|
end
|
44
76
|
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
read =~ pattern
|
51
|
-
end
|
77
|
+
read = File.read(full_path)
|
78
|
+
contents.each do |content|
|
79
|
+
assert_block("expected #{filename.inspect} to not contain #{content}:\n#{read}") do
|
80
|
+
pattern = content.is_a?(Regexp) ? content : Regexp.new(Regexp.quote(content))
|
81
|
+
read !~ pattern
|
52
82
|
end
|
53
83
|
end
|
54
84
|
end
|
55
85
|
|
56
86
|
def assert_directory(name)
|
57
87
|
assert_block("expected #{name} directory to exist") do
|
58
|
-
File.directory?(File.join(DESTINATION, $hoboken_counter.to_s,
|
88
|
+
File.directory?(File.join(DESTINATION, $hoboken_counter.to_s, 'sample', name))
|
59
89
|
end
|
60
90
|
end
|
61
91
|
|
62
92
|
def refute_directory(name)
|
63
93
|
assert_block("did not expect directory #{name} to exist") do
|
64
|
-
!File.directory?(File.join(DESTINATION, $hoboken_counter.to_s,
|
94
|
+
!File.directory?(File.join(DESTINATION, $hoboken_counter.to_s, 'sample', name))
|
65
95
|
end
|
66
96
|
end
|
67
97
|
end
|
98
|
+
# rubocop:enable Style/GlobalVars
|
@@ -1,8 +1,10 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative '../test_helper'
|
4
|
+
require_relative '../../lib/hoboken/actions'
|
3
5
|
|
4
6
|
module Hoboken
|
5
|
-
require
|
7
|
+
require 'thor'
|
6
8
|
class Target < Thor::Group
|
7
9
|
include Thor::Actions
|
8
10
|
include Hoboken::Actions
|
@@ -12,100 +14,107 @@ module Hoboken
|
|
12
14
|
attr_reader :gemfile_path, :gemfile, :target
|
13
15
|
|
14
16
|
def setup
|
15
|
-
@gemfile_path = File.join(
|
16
|
-
@gemfile = File.join(gemfile_path,
|
17
|
+
@gemfile_path = File.join('test', 'fixtures')
|
18
|
+
@gemfile = File.join(gemfile_path, 'Gemfile')
|
17
19
|
@target = Target.new([], {}, destination_root: gemfile_path)
|
18
|
-
FileUtils.copy(File.join(gemfile_path,
|
20
|
+
FileUtils.copy(File.join(gemfile_path, 'Gemfile.pristine'), gemfile)
|
19
21
|
end
|
20
22
|
|
21
23
|
def test_gem_appends_to_gemfile
|
22
|
-
target.gem
|
24
|
+
target.gem 'sinatra', verbose: false
|
23
25
|
expected =
|
24
|
-
"source
|
25
|
-
"ruby
|
26
|
-
"gem
|
26
|
+
"source 'https://rubygems.org'\n" \
|
27
|
+
"ruby '2.0.0'\n\n" \
|
28
|
+
"gem 'sinatra'\n"
|
27
29
|
|
28
30
|
assert_equal(expected, File.read(gemfile))
|
29
31
|
end
|
30
32
|
|
31
33
|
def test_gem_with_version
|
32
|
-
target.gem
|
34
|
+
target.gem 'sinatra', version: '1.4.4', verbose: false
|
33
35
|
expected =
|
34
|
-
"source
|
35
|
-
"ruby
|
36
|
-
"gem
|
36
|
+
"source 'https://rubygems.org'\n" \
|
37
|
+
"ruby '2.0.0'\n\n" \
|
38
|
+
"gem 'sinatra', '~> 1.4.4'\n"
|
37
39
|
|
38
40
|
assert_equal(expected, File.read(gemfile))
|
39
41
|
end
|
40
42
|
|
41
43
|
def test_get_with_blank_version
|
42
|
-
target.gem
|
44
|
+
target.gem 'sinatra', version: '', verbose: false
|
43
45
|
expected =
|
44
|
-
"source
|
45
|
-
"ruby
|
46
|
-
"gem
|
46
|
+
"source 'https://rubygems.org'\n" \
|
47
|
+
"ruby '2.0.0'\n\n" \
|
48
|
+
"gem 'sinatra'\n"
|
47
49
|
|
48
50
|
assert_equal(expected, File.read(gemfile))
|
49
51
|
end
|
50
52
|
|
51
53
|
def test_gem_with_group
|
52
|
-
target.gem
|
54
|
+
target.gem 'sinatra', version: '1.4.4', group: :test, verbose: false
|
53
55
|
expected =
|
54
|
-
"source
|
55
|
-
"ruby
|
56
|
-
"gem
|
56
|
+
"source 'https://rubygems.org'\n" \
|
57
|
+
"ruby '2.0.0'\n\n" \
|
58
|
+
"gem 'sinatra', '~> 1.4.4', group: :test\n"
|
57
59
|
|
58
60
|
assert_equal(expected, File.read(gemfile))
|
59
61
|
end
|
60
62
|
|
61
63
|
def test_gem_with_multiple_groups
|
62
|
-
target.gem
|
64
|
+
target.gem 'sinatra', version: '1.4.4', group: %i[test development], verbose: false
|
63
65
|
expected =
|
64
|
-
"source
|
65
|
-
"ruby
|
66
|
-
"gem
|
66
|
+
"source 'https://rubygems.org'\n" \
|
67
|
+
"ruby '2.0.0'\n\n" \
|
68
|
+
"gem 'sinatra', '~> 1.4.4', group: [:test, :development]\n"
|
67
69
|
|
68
70
|
assert_equal(expected, File.read(gemfile))
|
69
71
|
end
|
70
72
|
|
71
73
|
def test_gem_with_require
|
72
|
-
target.gem
|
74
|
+
target.gem 'sinatra', version: '1.4.4', require: false, verbose: false
|
73
75
|
expected =
|
74
|
-
"source
|
75
|
-
"ruby
|
76
|
-
"gem
|
76
|
+
"source 'https://rubygems.org'\n" \
|
77
|
+
"ruby '2.0.0'\n\n" \
|
78
|
+
"gem 'sinatra', '~> 1.4.4', require: false\n"
|
77
79
|
|
78
80
|
assert_equal(expected, File.read(gemfile))
|
79
81
|
end
|
80
82
|
|
81
83
|
def test_gem_with_require_and_group
|
82
|
-
target.gem
|
84
|
+
target.gem 'sinatra', version: '1.4.4', require: false, group: :test, verbose: false
|
83
85
|
expected =
|
84
|
-
"source
|
85
|
-
"ruby
|
86
|
-
"gem
|
86
|
+
"source 'https://rubygems.org'\n" \
|
87
|
+
"ruby '2.0.0'\n\n" \
|
88
|
+
"gem 'sinatra', '~> 1.4.4', require: false, group: :test\n"
|
87
89
|
|
88
90
|
assert_equal(expected, File.read(gemfile))
|
89
91
|
end
|
90
92
|
|
91
93
|
def test_gem_with_require_and_multiple_groups
|
92
|
-
target.gem
|
94
|
+
target.gem(
|
95
|
+
'sinatra',
|
96
|
+
version: '1.4.4',
|
97
|
+
require: false,
|
98
|
+
group: %i[test development],
|
99
|
+
verbose: false
|
100
|
+
)
|
101
|
+
|
93
102
|
expected =
|
94
|
-
"source
|
95
|
-
"ruby
|
96
|
-
"gem
|
103
|
+
"source 'https://rubygems.org'\n" \
|
104
|
+
"ruby '2.0.0'\n\n" \
|
105
|
+
"gem 'sinatra', '~> 1.4.4', require: false, group: [:test, :development]\n"
|
97
106
|
|
98
107
|
assert_equal(expected, File.read(gemfile))
|
99
108
|
end
|
100
109
|
|
101
110
|
def test_gem_multiple
|
102
|
-
target.gem
|
103
|
-
target.gem
|
111
|
+
target.gem 'sinatra', version: '1.4.4', verbose: false
|
112
|
+
target.gem 'thin', version: '1.4.4', verbose: false
|
104
113
|
expected =
|
105
|
-
"source
|
106
|
-
"ruby
|
107
|
-
"gem
|
108
|
-
"gem
|
114
|
+
"source 'https://rubygems.org'\n" \
|
115
|
+
"ruby '2.0.0'\n\n" \
|
116
|
+
"gem 'sinatra', '~> 1.4.4'\n" \
|
117
|
+
"gem 'thin', '~> 1.4.4'\n"
|
109
118
|
|
110
119
|
assert_equal(expected, File.read(gemfile))
|
111
120
|
end
|
@@ -116,32 +125,32 @@ module Hoboken
|
|
116
125
|
|
117
126
|
def setup
|
118
127
|
@target = Target.new
|
119
|
-
@text =
|
128
|
+
@text = <<~TEXT
|
120
129
|
|
121
|
-
This is some
|
122
|
-
text that needs
|
123
|
-
to be indented.
|
124
|
-
TEXT
|
130
|
+
This is some
|
131
|
+
text that needs
|
132
|
+
to be indented.
|
133
|
+
TEXT
|
125
134
|
end
|
126
135
|
|
127
136
|
def test_indent_with_one_space
|
128
|
-
expected =
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
TEXT
|
137
|
+
expected = <<~TEXT
|
138
|
+
#{' '}
|
139
|
+
This is some
|
140
|
+
text that needs
|
141
|
+
to be indented.
|
142
|
+
TEXT
|
134
143
|
|
135
144
|
assert_equal(expected, target.indent(text, 1))
|
136
145
|
end
|
137
146
|
|
138
147
|
def test_indent_with_two_spaces
|
139
|
-
expected =
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
TEXT
|
148
|
+
expected = <<~TEXT
|
149
|
+
#{' '}
|
150
|
+
This is some
|
151
|
+
text that needs
|
152
|
+
to be indented.
|
153
|
+
TEXT
|
145
154
|
|
146
155
|
assert_equal(expected, target.indent(text, 2))
|
147
156
|
end
|