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 end
Public Instance Methods
build_and_install_gems()
click to toggle source
# File lib/spring/test/application_generator.rb, line 93 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", timeout: nil end end
copy_to(path)
click to toggle source
# File lib/spring/test/application_generator.rb, line 106 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 116 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 32 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 39 def generate_files 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) skips << "--skip-spring" if version.bundles_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")) File.write(application.gemfile, "#{application.gemfile.read}gem 'spring', '#{Spring::VERSION}'\n") if version.needs_testunit? File.write(application.gemfile, "#{application.gemfile.read}gem 'spring-commands-testunit'\n") end File.write(application.gemfile, application.gemfile.read.sub("https://rubygems.org", "http://rubygems.org")) 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 68 def generate_if_missing generate unless application.exists? end
generate_scaffold()
click to toggle source
# File lib/spring/test/application_generator.rb, line 111 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 72 def install_spring return if @installed 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 89 def manually_built_gems %w(spring) end
root()
click to toggle source
# File lib/spring/test/application_generator.rb, line 17 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 21 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 13 def test_root Pathname.new Spring::Test.root end