1
0
Fork 0
mirror of https://github.com/thoughtbot/shoulda-matchers.git synced 2022-11-09 12:01:38 -05:00
thoughtbot--shoulda-matchers/spec/support/unit/rails_application.rb
2014-11-05 09:53:53 -07:00

110 lines
2.2 KiB
Ruby

require_relative '../tests/command_runner'
require_relative '../tests/filesystem'
require_relative '../tests/bundle'
module UnitTests
class RailsApplication
def initialize
@fs = Tests::Filesystem.new
@bundle = Tests::Bundle.new
end
def create
fs.clean
generate
fs.within_project { install_gems }
end
def load
load_environment
run_migrations
end
def gemfile_path
fs.find('Gemfile')
end
def environment_file_path
fs.find_in_project('config/environment')
end
def temp_views_directory
fs.find_in_project('tmp/views')
end
def create_temp_view(path, contents)
full_path = temp_view_path_for(path)
full_path.dirname.mkpath
full_path.open('w') { |f| f.write(contents) }
end
def delete_temp_views
if temp_views_directory.exist?
temp_views_directory.rmtree
end
end
def draw_routes(&block)
Rails.application.routes.draw(&block)
Rails.application.routes
end
protected
attr_reader :fs, :shell, :bundle
private
def migrations_directory
fs.find_in_project('db/migrate')
end
def temp_view_path_for(path)
temp_views_directory.join(path)
end
def generate
rails_new
fix_available_locales_warning
end
def rails_new
run_command! %W(rails new #{fs.project_directory} --skip-bundle)
end
def fix_available_locales_warning
# See here for more on this:
# http://stackoverflow.com/questions/20361428/rails-i18n-validation-deprecation-warning
filename = 'config/application.rb'
lines = fs.read(filename).split("\n")
lines.insert(-3, <<EOT)
if I18n.respond_to?(:enforce_available_locales=)
I18n.enforce_available_locales = false
end
EOT
fs.write(filename, lines.join("\n"))
end
def load_environment
require environment_file_path
end
def run_migrations
ActiveRecord::Migration.verbose = false
ActiveRecord::Migrator.migrate(migrations_directory)
end
def install_gems
bundle.install_gems
end
private
def run_command!(*args)
Tests::CommandRunner.run!(*args)
end
end
end