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(`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