lurker 0.6.12 → 1.0.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 (56) hide show
  1. checksums.yaml +5 -5
  2. data/.rspec +1 -2
  3. data/.travis.yml +30 -20
  4. data/Gemfile +0 -32
  5. data/README.md +14 -52
  6. data/Rakefile +3 -3
  7. data/cucumber.yml +1 -2
  8. data/features/atom_persistent_within_the_same_type.feature +4 -4
  9. data/features/controller_nested_schema_scaffolding.feature +7 -10
  10. data/features/controller_schema_scaffolding.feature +1 -3
  11. data/features/dereferencing_through_inlining.feature +1 -3
  12. data/features/html_generation.feature +3 -4
  13. data/features/minitest.feature +3 -5
  14. data/features/multidomain_support.feature +5 -6
  15. data/features/multitype_request_support.feature +1 -3
  16. data/features/partials.feature +3 -5
  17. data/features/request_nested_schema_scaffolding.feature +0 -2
  18. data/features/request_schema_scaffolding.feature +0 -2
  19. data/features/schema_suffixes.feature +2 -6
  20. data/features/schema_updating_within_test_suite.feature +2 -6
  21. data/features/step_definitions/additional_cli_steps.rb +8 -11
  22. data/features/support/env.rb +50 -10
  23. data/features/test_endpoint.feature +2 -6
  24. data/gemfiles/rails_4.gemfile +14 -0
  25. data/gemfiles/rails_5.gemfile +10 -0
  26. data/gemfiles/rails_6.gemfile +10 -0
  27. data/lib/lurker.rb +0 -1
  28. data/lib/lurker/cli.rb +5 -7
  29. data/lib/lurker/endpoint.rb +4 -4
  30. data/lib/lurker/json/concerns/validatable.rb +5 -1
  31. data/lib/lurker/json/parser.rb +1 -1
  32. data/lib/lurker/presenters/service_presenter.rb +2 -1
  33. data/lib/lurker/spec_helper/rspec.rb +0 -4
  34. data/lib/lurker/spy.rb +3 -1
  35. data/lib/lurker/templates/public/application.css +3 -3
  36. data/lib/lurker/templates/public/application.js +13 -2896
  37. data/lib/lurker/version.rb +1 -1
  38. data/lurker.gemspec +31 -33
  39. data/spec/spec_helper.rb +0 -1
  40. data/tasks/build.rake +5 -3
  41. data/tasks/generate.rake +25 -15
  42. data/templates/Dockerfile +26 -0
  43. data/templates/generate_stuff.rb +59 -26
  44. data/templates/lurker_app.rb +27 -47
  45. data/templates/rails4_ruby26_thread_error_fix.rb +20 -0
  46. metadata +136 -98
  47. checksums.yaml.gz.sig +0 -0
  48. data.tar.gz.sig +0 -3
  49. data/Appraisals +0 -36
  50. data/gemfiles/rails_32.gemfile +0 -31
  51. data/gemfiles/rails_40.gemfile +0 -31
  52. data/gemfiles/rails_41.gemfile +0 -31
  53. data/gemfiles/rails_42.gemfile +0 -31
  54. data/lib/lurker/validation_error.rb +0 -4
  55. data/templates/rails32_http_patch_support.rb +0 -125
  56. metadata.gz.sig +0 -0
@@ -1,3 +1,3 @@
1
1
  module Lurker
2
- VERSION = "0.6.12"
2
+ VERSION = "1.0.0"
3
3
  end
@@ -12,52 +12,50 @@ Gem::Specification.new do |spec|
12
12
  spec.description = %q{The new de-facto for API testing your Rails application}
13
13
  spec.homepage = "http://github.com/razum2um/lurker"
14
14
  spec.license = "MIT"
15
- spec.cert_chain = ['certs/razum2um.pem']
16
- spec.signing_key = File.expand_path("~/.ssh/gem-private_key.pem") if $0 =~ /gem\z/
17
15
 
18
16
  spec.files = `git ls-files`.split($/)
19
17
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
20
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
21
19
  spec.require_paths = ["lib"]
22
20
 
23
- spec.add_dependency("json", "~> 1.7")
24
- spec.add_dependency("json-schema", "~> 2.2")
25
- spec.add_dependency("thor", "~> 0.19")
26
- spec.add_dependency("sinatra", "~> 1.4")
21
+ spec.add_dependency("json", ">= 1.7")
22
+ spec.add_dependency("json-schema", ">= 2.2")
23
+ spec.add_dependency("thor", ">= 0.19")
24
+ spec.add_dependency("sinatra", ">= 1.4")
27
25
  spec.add_dependency("hashie", ">= 3.0")
28
- spec.add_dependency("activesupport", ">= 3.2", "< 4.3")
26
+ spec.add_dependency("activesupport", ">= 4.2")
29
27
 
30
28
  # testing
31
- spec.add_development_dependency("psych", "~> 2.0")
29
+ spec.add_development_dependency("psych", ">= 2.0")
32
30
  spec.add_development_dependency("bundler", ">= 1.7.11")
33
- spec.add_development_dependency("rack-cors", "~> 0.2")
31
+ spec.add_development_dependency("rack-cors", ">= 0.2")
34
32
  spec.add_development_dependency("rails", ">= 3.2", "< 4.3")
35
- spec.add_development_dependency("rake", "~> 10.2")
36
- spec.add_development_dependency("rspec", "~> 2.14.0")
37
- spec.add_development_dependency("cucumber", "~> 1.3")
38
- spec.add_development_dependency("aruba", "~> 0.6.2")
39
- spec.add_development_dependency("capybara", "~> 2.2")
40
- spec.add_development_dependency("nokogiri", "~> 1.5")
41
- spec.add_development_dependency("poltergeist", "~> 1.5")
42
- spec.add_development_dependency("database_cleaner", "~> 1.2")
43
-
44
- spec.add_development_dependency("simplecov", "~> 0.7")
45
- spec.add_development_dependency("coveralls", "~> 0.7")
46
- spec.add_development_dependency("rubocop", "~> 0.21")
33
+ spec.add_development_dependency("rake", ">= 10.2")
34
+ spec.add_development_dependency("rspec", ">= 2.14.0")
35
+ spec.add_development_dependency("cucumber", ">= 1.3")
36
+ spec.add_development_dependency("aruba", ">= 0.6.2")
37
+ spec.add_development_dependency("capybara", ">= 2.2")
38
+ spec.add_development_dependency("nokogiri", ">= 1.5")
39
+ spec.add_development_dependency("webdrivers", ">= 1.5")
40
+ spec.add_development_dependency("database_cleaner", ">= 1.2")
41
+
42
+ spec.add_development_dependency("simplecov", ">= 0.7")
43
+ spec.add_development_dependency("coveralls_reborn", "> 0")
44
+ spec.add_development_dependency("rubocop", ">= 0.21")
47
45
 
48
46
  # FIXME: these gems are needed while cucumber runs
49
47
  # inner Gemfile isn"t getting used, but lib"s one
50
- spec.add_development_dependency("rspec-rails", "~> 2.14.0")
51
- spec.add_development_dependency("pg", "~> 0.16")
52
- spec.add_development_dependency("kramdown", "~> 1.3")
53
- spec.add_development_dependency("diffy", "~> 3.0")
54
- spec.add_development_dependency("execjs", "~> 2.0")
55
- spec.add_development_dependency("pdfkit", "~> 0.6")
56
- spec.add_development_dependency("wkhtmltopdf-binary", "~> 0.9")
57
-
58
- if RUBY_VERSION >= "2.2.0"
59
- # FIXME : this gem are needed to ruby 2.2.0
60
- spec.add_development_dependency("test-unit", "~> 3.0")
61
- end
48
+ spec.add_development_dependency("puma", "> 0")
49
+ spec.add_development_dependency("bootsnap", "> 0")
50
+ spec.add_development_dependency("listen", "> 0")
51
+ spec.add_development_dependency("sass-rails", "> 0")
52
+ spec.add_development_dependency("rspec-rails", ">= 2.14.0")
53
+ spec.add_development_dependency("pg", ">= 0.16")
54
+ spec.add_development_dependency("kramdown", ">= 1.3")
55
+ spec.add_development_dependency("diffy", ">= 3.0")
56
+ spec.add_development_dependency("execjs", ">= 2.0")
57
+ spec.add_development_dependency("pdfkit", ">= 0.6")
58
+ spec.add_development_dependency("wkhtmltopdf-binary", ">= 0.9")
59
+ spec.add_development_dependency("test-unit", ">= 3.0")
62
60
  end
63
61
 
@@ -15,7 +15,6 @@ end
15
15
  Dir[File.expand_path '../support/**/*.rb', __FILE__].each { |file| require file }
16
16
 
17
17
  RSpec.configure do |config|
18
- config.treat_symbols_as_metadata_keys_with_true_values = true
19
18
  config.run_all_when_everything_filtered = true
20
19
  config.filter_run :focus
21
20
  config.order = 'random'
@@ -38,7 +38,9 @@ namespace :assets do
38
38
  sprockets.append_path(SOURCE_DIR.join('stylesheets').to_s)
39
39
 
40
40
  %w[jquery-rails bootstrap-sass remotipart lurker].each do |gem|
41
- gem_path = Pathname.new(Bundler.rubygems.find_name(gem).first.full_gem_path)
41
+ bundler_gem = Bundler.rubygems.find_name(gem).first
42
+ raise "Gem #{gem.inspect} is required in #{ENV.fetch('BUNDLE_GEMFILE', 'Gemfile')}" unless bundler_gem
43
+ gem_path = Pathname.new(bundler_gem.full_gem_path)
42
44
  %w[javascripts stylesheets fonts].each do |prefix|
43
45
  %w[assets vendor/assets lib/lurker/templates].each do |interfix|
44
46
  path = gem_path.join(interfix, prefix).to_s
@@ -47,14 +49,14 @@ namespace :assets do
47
49
  end
48
50
  end
49
51
 
50
- unless ENV['TRAVIS']
52
+ unless ENV['CI']
51
53
  sprockets.js_compressor = :uglify
52
54
  sprockets.css_compressor = :scss
53
55
  end
54
56
 
55
57
  BUNDLES.each do |bundle|
56
58
  assets = sprockets.find_asset(bundle)
57
- realname = (assets.pathname.basename.to_s.split(".").take_while { |s| !s.match /^(js|css|scss)$/ } + [$~.to_s]).join(".").gsub(/\.scss$/, '.css')
59
+ realname = (Pathname.new(assets.filename).basename.to_s.split(".").take_while { |s| !s.match /^(js|css|scss)$/ } + [$~.to_s]).join(".").gsub(/\.scss$/, '.css')
58
60
  assets.write_to(BUILD_DIR.join(realname))
59
61
  end
60
62
  end
@@ -1,7 +1,15 @@
1
- if rails_version = ENV['BUNDLE_GEMFILE'].to_s.match(/rails_\d\d/)
2
- EXAMPLE_APP = "tmp/lurker_app_#{rails_version}"
1
+ def rails_version
2
+ if (version = ENV['BUNDLE_GEMFILE'].to_s.match(/rails_([\d\.]+).gemfile/)&.to_a&.last)
3
+ Gem::Version.new(version)
4
+ end
5
+ end
6
+
7
+ if rails_version
8
+ EXAMPLE_APP = "tmp/lurker_app_rails_#{rails_version}"
9
+ TEMPLATE_TASK = rails_version >= Gem::Version.new('5.0') ? 'app:template' : 'rails:template'
10
+ TASK_RUNNER = rails_version >= Gem::Version.new('5.0') ? 'bin/rails' : 'bin/rake'
3
11
  else
4
- raise "Use `appraisal rails-XY rake ...` or export BUNDLE_GEMFILE=gemfiles/... explicitly"
12
+ raise "Export BUNDLE_GEMFILE=gemfiles/rails_... explicitly"
5
13
  end
6
14
 
7
15
  EXAMPLE_PATH = File.expand_path("../../#{EXAMPLE_APP}", __FILE__)
@@ -30,30 +38,33 @@ namespace :generate do
30
38
  task :app do |t|
31
39
  if needs_generation?
32
40
  sh "bundle exec rails new #{EXAMPLE_APP} -d postgresql -m #{File.expand_path '../../templates/lurker_app.rb', __FILE__} --skip-javascript --skip-git --skip-test-unit --skip-keeps --skip-bundle --quiet"
33
- in_lurker_app "bundle config --local local.lurker $PWD/../.." unless ENV['TRAVIS']
34
- in_lurker_app "bundle install --without development --quiet"
35
- %w[rake rspec-core spring].each do |gem|
36
- in_lurker_app "bundle binstubs #{gem}"
41
+ in_lurker_app "bundle config --local local.lurker $PWD/../.." unless ENV['CI']
42
+ in_lurker_app "bundle config --local set without 'development'"
43
+ in_lurker_app "bundle install"
44
+ %w[rake rspec-core spring bundler].each do |gem|
45
+ in_lurker_app "bundle binstubs #{gem} --force"
37
46
  end
38
47
  end
39
48
  end
40
49
 
41
50
  desc "generate a bunch of stuff with generators"
42
51
  task :stuff do
43
- in_lurker_app "LOCATION='../../templates/generate_stuff.rb' bin/rake rails:template --quiet --silent"
52
+ in_lurker_app "LOCATION='../../templates/generate_stuff.rb' #{TASK_RUNNER} #{TEMPLATE_TASK}"
44
53
 
45
- unless ENV['TRAVIS']
46
- in_lurker_app 'bin/rake db:setup'
47
- in_lurker_app 'bin/rake db:import'
54
+ if ENV['CI']
55
+ in_lurker_app "#{TASK_RUNNER} RAILS_ENV=test db:setup "
56
+ else
57
+ in_lurker_app "#{TASK_RUNNER} db:setup"
58
+ in_lurker_app "#{TASK_RUNNER} db:import"
48
59
  end
49
- in_lurker_app 'bin/rake RAILS_ENV=test db:setup'
50
60
  end
51
61
  end
52
62
 
53
63
  def in_lurker_app(command)
54
64
  FileUtils.mkdir_p(EXAMPLE_PATH)
55
65
  Dir.chdir(EXAMPLE_PATH) do
56
- Bundler.with_clean_env do
66
+ bundler_method = Bundler.respond_to?(:with_unbundled_env) ? :with_unbundled_env : :with_clean_env
67
+ Bundler.send(bundler_method) do
57
68
  sh command
58
69
  end
59
70
  end
@@ -95,8 +106,7 @@ task :convert_example_docs do
95
106
  end
96
107
 
97
108
  place_github_badge 'public/lurker/index.html'
98
- in_lurker_app "bin/lurker convert -f pdf"
109
+ # in_lurker_app "bin/lurker convert -f pdf"
99
110
  end
100
111
 
101
112
  task :build_example_docs => [:features, :convert_example_docs]
102
-
@@ -0,0 +1,26 @@
1
+ # cd tmp/lurker_app_*, run with
2
+ # docker run -e DATABASE_URL=postgres://user@host.docker.internal/lurker_app_rails_6 -p 3000:3000 lurker"
3
+ FROM ruby:2.7-alpine as build
4
+
5
+ WORKDIR /app
6
+
7
+ RUN apk add git postgresql-dev libpq
8
+
9
+ COPY Gemfile* ./
10
+
11
+ RUN apk add --no-cache --update alpine-sdk make && \
12
+ bundler config set without 'development test' && \
13
+ bundler config set path 'vendor/bundle' && \
14
+ bundler install
15
+
16
+ COPY . ./
17
+
18
+ EXPOSE 3000
19
+
20
+ ENV PATH "$PATH:/app/vendor/bundle/ruby/2.7.0/bin"
21
+ ENV GEM_HOME "/app/vendor/bundle/ruby/2.7.0"
22
+ ENV RAILS_ENV "production"
23
+ ENV RAILS_SERVE_STATIC_FILES "1"
24
+ ENV RAILS_LOG_TO_STDOUT "1"
25
+
26
+ CMD ["bin/rails", "s", "-b", "0.0.0.0"]
@@ -1,13 +1,12 @@
1
1
  # This is secondary testing/demo rails app template (passed to `rake rails:template`)
2
-
3
- if rails_version = ENV['BUNDLE_GEMFILE'].to_s.match(/rails_\d\d/)
2
+ if rails_version = ENV['BUNDLE_GEMFILE'].to_s.match(/rails_\d+/)
4
3
  base_db_name = "lurker_app_#{rails_version}"
5
4
  else
6
5
  base_db_name = 'lurker_app'
7
6
  end
8
7
 
9
8
  file 'config/database.yml', force: true do
10
- <<-CODE
9
+ <<~CODE
11
10
  default: &default
12
11
  adapter: postgresql
13
12
  encoding: unicode
@@ -25,7 +24,7 @@ end
25
24
 
26
25
  copy_file "#{File.expand_path '../../bin/lurker', __FILE__}", "bin/lurker"
27
26
  inject_into_file "bin/lurker", before: /require .lurker.$/ do
28
- <<-CODE
27
+ <<~CODE
29
28
  if (simplecov_root = ENV['SIMPLECOV_ROOT']) && (simplecov_cmdname = ENV['SIMPLECOV_CMDNAME'])
30
29
  require 'simplecov'
31
30
  SimpleCov.start
@@ -50,7 +49,7 @@ remove_file 'app/models/user.rb'
50
49
 
51
50
  generate 'rspec:install'
52
51
 
53
- route <<-ROUTE
52
+ route <<~ROUTE
54
53
  namespace :api do
55
54
  namespace :v1 do
56
55
  resources :users do
@@ -86,7 +85,7 @@ generate 'model User name:string surname:string --no-timestamps --no-test-framew
86
85
  generate 'model Repo user:references name:string --no-timestamps --no-test-framework --no-migration'
87
86
 
88
87
  file 'config/initializers/serializer.rb', force: true do
89
- <<-CODE
88
+ <<~CODE
90
89
  module ExactOrderAsJson
91
90
  # we need EXACT order for json attributes generation (e.g. rails32 sorts it)
92
91
  # see: https://github.com/rails/rails/pull/5678/files
@@ -109,10 +108,8 @@ file 'config/initializers/serializer.rb', force: true do
109
108
  CODE
110
109
  end
111
110
 
112
- copy_file "#{File.expand_path '../../templates/rails32_http_patch_support.rb', __FILE__}", "config/initializers/rails32_http_patch_support.rb"
113
-
114
111
  inject_into_class 'app/models/user.rb', 'User' do
115
- <<-CODE
112
+ <<~CODE
116
113
  include ExactOrderAsJson
117
114
  has_many :repos
118
115
  validates :name, presence: true
@@ -124,17 +121,17 @@ inject_into_class 'app/models/user.rb', 'User' do
124
121
  end
125
122
 
126
123
  inject_into_class 'app/models/repo.rb', 'Repo' do
127
- <<-CODE
124
+ <<~CODE
128
125
  include ExactOrderAsJson
129
126
  validates :name, presence: true
130
127
  CODE
131
128
  end
132
129
 
133
130
  file 'app/controllers/application_controller.rb', 'ApplicationController', force: true do
134
- <<-CODE
131
+ <<~CODE
135
132
  class ApplicationController < ActionController::Base
136
133
  protect_from_forgery with: :null_session
137
- before_filter :set_format
134
+ before_action :set_format
138
135
 
139
136
  private
140
137
 
@@ -154,7 +151,7 @@ file 'app/controllers/application_controller.rb', 'ApplicationController', force
154
151
  end
155
152
 
156
153
  file 'app/controllers/api/v1/users_controller.rb', 'Api::V1::UsersController', force: true do
157
- <<-CODE
154
+ <<~CODE
158
155
  class Api::V1::UsersController < ApplicationController
159
156
  def index
160
157
  @users = scoped(User)
@@ -174,7 +171,7 @@ file 'app/controllers/api/v1/users_controller.rb', 'Api::V1::UsersController', f
174
171
  end
175
172
 
176
173
  def update
177
- if user.update_attributes(user_params)
174
+ if user.update(user_params)
178
175
  render json: user
179
176
  else
180
177
  render json: { errors: user.errors }, status: :bad_request
@@ -209,7 +206,7 @@ file 'app/controllers/api/v1/users_controller.rb', 'Api::V1::UsersController', f
209
206
  end
210
207
 
211
208
  file 'app/controllers/api/v1/repos_controller.rb', 'Api::V1::ReposController', force: true do
212
- <<-CODE
209
+ <<~CODE
213
210
  class Api::V1::ReposController < ApplicationController
214
211
 
215
212
  def index
@@ -235,7 +232,7 @@ file 'app/controllers/api/v1/repos_controller.rb', 'Api::V1::ReposController', f
235
232
 
236
233
  def update
237
234
  @repo = repo
238
- if @repo.update_attributes(repo_params)
235
+ if @repo.update(repo_params)
239
236
  render json: @repo
240
237
  else
241
238
  render json: { errors: @repo.errors }, status: :bad_request
@@ -272,13 +269,13 @@ end
272
269
 
273
270
  [2, 3].each do |version|
274
271
  file "app/controllers/api/v#{version}/users_controller.rb", "Api::V#{version}::UsersController", force: true do
275
- <<-CODE
272
+ <<~CODE
276
273
  class Api::V#{version}::UsersController < Api::V1::UsersController; end
277
274
  CODE
278
275
  end
279
276
 
280
277
  file "app/controllers/api/v#{version}/repos_controller.rb", "Api::V#{version}::ReposController", force: true do
281
- <<-CODE
278
+ <<~CODE
282
279
  class Api::V#{version}::ReposController < Api::V1::ReposController; end
283
280
  CODE
284
281
  end
@@ -286,19 +283,19 @@ end
286
283
 
287
284
  # FIXME: uninitialized constant User (NameError) in last creation line
288
285
  append_to_file 'config/environment.rb' do
289
- <<-CODE
286
+ <<~CODE
290
287
  $:.unshift File.expand_path('../../app/models', __FILE__)
291
288
  CODE
292
289
  end
293
290
 
294
291
  inject_into_class 'config/application.rb', 'Application' do
295
- <<-CODE
292
+ <<~CODE
296
293
  if ENV['DATABASE_URL'].present? # heroku
297
294
  config.middleware.use Lurker::Sandbox
298
295
  end
299
296
 
300
297
  require 'rack/cors' # FIXME
301
- config.middleware.insert 0, "Rack::Cors" do
298
+ config.middleware.insert 0, Rack::Cors do
302
299
  allow do
303
300
  origins %w[localhost:3000 127.0.0.1:3000 razum2um.github.io lurker-app.herokuapp.com lurker.razum2um.me]
304
301
  resource '*',
@@ -314,7 +311,7 @@ inject_into_class 'config/application.rb', 'Application' do
314
311
  end
315
312
 
316
313
  file 'test/test_helper.rb', force: true do
317
- <<-CODE
314
+ <<~CODE
318
315
  ENV['RAILS_ENV'] ||= 'test'
319
316
  require File.expand_path('../../config/environment', __FILE__)
320
317
  require 'rails/test_help'
@@ -338,9 +335,16 @@ file 'test/test_helper.rb', force: true do
338
335
  end
339
336
 
340
337
  file 'spec/support/fixme.rb', force: true do
341
- <<-CODE
338
+ <<~CODE
342
339
  require 'simplecov'
343
340
 
341
+ module ActionDispatchTestResponseCompat
342
+ def success?
343
+ status == 200
344
+ end
345
+ end
346
+ ActionDispatch::TestResponse.include(ActionDispatchTestResponseCompat)
347
+
344
348
  if simplecov_root = ENV['SIMPLECOV_ROOT']
345
349
  SimpleCov.root simplecov_root
346
350
  end
@@ -362,7 +366,6 @@ file 'spec/support/fixme.rb', force: true do
362
366
 
363
367
  RSpec.configure do |c|
364
368
  c.infer_spec_type_from_file_location! if c.respond_to?(:infer_spec_type_from_file_location!)
365
- c.treat_symbols_as_metadata_keys_with_true_values = true
366
369
  c.backtrace_exclusion_patterns += [
367
370
  /\\/lib\\/lurker/
368
371
  ]
@@ -385,7 +388,7 @@ file 'spec/support/fixme.rb', force: true do
385
388
  end
386
389
 
387
390
  file 'lib/tasks/db.rake', force: true do
388
- <<-CODE
391
+ <<~CODE
389
392
  namespace :db do
390
393
  desc 'fills in data'
391
394
  task :import => :environment do
@@ -398,7 +401,7 @@ file 'lib/tasks/db.rake', force: true do
398
401
  end
399
402
 
400
403
  file 'db/schema.rb', force: true do
401
- <<-CODE
404
+ <<~CODE
402
405
  ActiveRecord::Schema.define do
403
406
  create_table "repos", :force => true do |t|
404
407
  t.integer "user_id"
@@ -415,3 +418,33 @@ file 'db/schema.rb', force: true do
415
418
  CODE
416
419
  end
417
420
 
421
+ append_to_file 'spec/rails_helper.rb' do
422
+ <<~CODE
423
+ Dir[File.expand_path '../support/**/*.rb', __FILE__].each { |file| require file }
424
+
425
+ if Gem::Version.new(Rails.version) < Gem::Version.new('5.0.0')
426
+ require 'rails/forward_compatible_controller_tests'
427
+ RSpec.configure do |config|
428
+ config.include Rails::ForwardCompatibleControllerTests, type: :controller
429
+ config.include Rails::ForwardCompatibleControllerTests, type: :request
430
+ end
431
+ end
432
+ CODE
433
+ end
434
+
435
+ append_to_file '.rspec' do
436
+ <<~CODE
437
+ --require rails_helper
438
+ CODE
439
+ end
440
+
441
+ copy_file "#{File.expand_path '../../templates/Dockerfile', __FILE__}", "Dockerfile"
442
+
443
+ # rails-4 requires this
444
+ file 'app/assets/config/manifest.js', force: true do
445
+ <<~CODE
446
+ // empty
447
+ CODE
448
+ end
449
+
450
+ copy_file "#{File.expand_path '../../templates/rails4_ruby26_thread_error_fix.rb', __FILE__}", "spec/support/rails4_ruby26_thread_error_fix.rb"