class Spring::Test::ApplicationGenerator

Attributes

application[R]
version[R]
version_constraint[R]

Public Class Methods

new(version_constraint) click to toggle source
# File lib/spring/test/application_generator.rb, line 6
def initialize(version_constraint)
  @version_constraint = version_constraint
  @version            = RailsVersion.new(version_constraint.split(' ').last)
  @application        = Application.new(root)
  @bundled            = false
  @installed          = false
end

Public Instance Methods

append_to_file(file, add) click to toggle source
# File lib/spring/test/application_generator.rb, line 78
def append_to_file(file, add)
  rewrite_file(file) { |c| c << "#{add}\n" }
end
build_and_install_gems() click to toggle source
# File lib/spring/test/application_generator.rb, line 111
def build_and_install_gems
  manually_built_gems.each do |name|
    spec = Gem::Specification.find_by_name(name)

    FileUtils.cd(spec.gem_dir) do
      FileUtils.rm(Dir.glob("#{name}-*.gem"))
      system("gem build #{name}.gemspec 2>&1")
    end

    application.run! "gem install #{spec.gem_dir}/#{name}-*.gem --no-ri --no-rdoc", timeout: nil
  end
end
copy_to(path) click to toggle source
# File lib/spring/test/application_generator.rb, line 124
def copy_to(path)
  system("rm -rf #{path}")
  system("cp -r #{application.root} #{path}")
end
gemspec(name) click to toggle source
# File lib/spring/test/application_generator.rb, line 134
def gemspec(name)
  "#{Gem::Specification.find_by_name(name).gem_dir}/#{name}.gemspec"
end
generate() click to toggle source
# File lib/spring/test/application_generator.rb, line 33
def generate
  Bundler.with_clean_env { generate_files }
  install_spring
  generate_scaffold
end
generate_files() click to toggle source

Sporadic SSL errors keep causing test failures so there are anti-SSL workarounds here

# File lib/spring/test/application_generator.rb, line 40
def generate_files
  if RUBY_VERSION == "1.9.3"
    system("gem list '^mime-types$' --installed --version '~> 2' || "                     "gem install mime-types --clear-sources --source http://rubygems.org --version '~> 2'")
  end

  system("gem list '^rails$' --installed --version '#{version_constraint}' || "                   "gem install rails --clear-sources --source http://rubygems.org --version '#{version_constraint}'")

  @version = RailsVersion.new(%x`ruby -e 'puts Gem::Specification.find_by_name("rails", "#{version_constraint}").version'`.chomp)

  skips = %w(--skip-bundle --skip-javascript --skip-sprockets --skip-spring)

  system("rails _#{version}_ new #{application.root} #{skips.join(' ')}")
  raise "application generation failed" unless application.exists?

  FileUtils.mkdir_p(application.gem_home)
  FileUtils.mkdir_p(application.user_home)
  FileUtils.rm_rf(application.path("test/performance"))

  append_to_file(application.gemfile, "gem 'spring', '#{Spring::VERSION}'")

  rewrite_file(application.gemfile) do |c|
    c.sub!("https://rubygems.org", "http://rubygems.org")
    c.gsub!(/(gem '(byebug|web-console|sdoc|jbuilder)')/, "# \\1")
    c
  end


  if application.path("bin").exist?
    FileUtils.cp_r(application.path("bin"), application.path("bin_original"))
  end
end
generate_if_missing() click to toggle source
# File lib/spring/test/application_generator.rb, line 82
def generate_if_missing
  generate unless application.exists?
end
generate_scaffold() click to toggle source
# File lib/spring/test/application_generator.rb, line 129
def generate_scaffold
  application.run! "bundle exec rails g scaffold post title:string"
  application.run! "bundle exec rake db:migrate db:test:clone"
end
install_spring() click to toggle source
# File lib/spring/test/application_generator.rb, line 86
def install_spring
  return if @installed

  if RUBY_VERSION < "2.2.2"
    application.run! "gem install activesupport --version '#{version}'"
  end

  build_and_install_gems

  application.bundle

  FileUtils.rm_rf application.path("bin")

  if application.path("bin_original").exist?
    FileUtils.cp_r application.path("bin_original"), application.path("bin")
  end

  application.run! "#{application.spring} binstub --all"
  @installed = true
end
manually_built_gems() click to toggle source
# File lib/spring/test/application_generator.rb, line 107
def manually_built_gems
  %w(spring)
end
rewrite_file(file) { |read| ... } click to toggle source
# File lib/spring/test/application_generator.rb, line 74
def rewrite_file(file)
  File.write(file, yield(file.read))
end
root() click to toggle source
# File lib/spring/test/application_generator.rb, line 18
def root
  test_root.join("apps/rails-#{version.major}-#{version.minor}-spring-#{Spring::VERSION}")
end
system(command) click to toggle source
# File lib/spring/test/application_generator.rb, line 22
def system(command)
  if ENV["SPRING_DEBUG"]
    puts "$ #{command}\n"
  else
    command = "(#{command}) > /dev/null"
  end

  Kernel.system(command) or raise "command failed: #{command}"
  puts if ENV["SPRING_DEBUG"]
end
test_root() click to toggle source
# File lib/spring/test/application_generator.rb, line 14
def test_root
  Pathname.new Spring::Test.root
end