class Snowglobe::RailsApplication
Attributes
bundle[R]
command_runner[R]
database[R]
fs[R]
Public Class Methods
new()
click to toggle source
# File lib/snowglobe/rails_application.rb, line 17 def initialize @fs = Filesystem.new @command_runner = ProjectCommandRunner.new(fs) @bundle = Bundle.new(fs: fs, command_runner: command_runner) @database = Database.new end
Public Instance Methods
create()
click to toggle source
# File lib/snowglobe/rails_application.rb, line 24 def create fs.clean generate fs.within_project do remove_unwanted_gems end end
evaluate!(code)
click to toggle source
# File lib/snowglobe/rails_application.rb, line 33 def evaluate!(code) command_runner = nil Dir::Tmpname.create( ["", ".rb"], fs.find_in_project("tmp"), ) do |path, _, _, _| tempfile = fs.write_file(path, code) command_runner = run_command!( "ruby", tempfile.to_s, err: nil, env: { "RUBYOPT" => "" }, ) end command_runner.output end
migration_class_name()
click to toggle source
# File lib/snowglobe/rails_application.rb, line 61 def migration_class_name if rails_version > 5 number = [rails_version.major, rails_version.minor].join(".").to_f "ActiveRecord::Migration[#{number}]" else "ActiveRecord::Migration" end end
rails_version()
click to toggle source
# File lib/snowglobe/rails_application.rb, line 70 def rails_version @_rails_version ||= bundle.version_of("rails") end
run_command(*args, &block)
click to toggle source
# File lib/snowglobe/rails_application.rb, line 53 def run_command(*args, &block) command_runner.run(*args, &block) end
run_command!(*args, &block)
click to toggle source
# File lib/snowglobe/rails_application.rb, line 57 def run_command!(*args, &block) command_runner.run!(*args, &block) end
Private Instance Methods
add_initializer_for_time_zone_aware_types()
click to toggle source
# File lib/snowglobe/rails_application.rb, line 140 def add_initializer_for_time_zone_aware_types path = "config/initializers/configure_time_zone_aware_types.rb" fs.write_file(path, <<-TEXT) Rails.application.configure do config.active_record.time_zone_aware_types = [:datetime, :time] end TEXT end
configure_tests_to_run_in_sorted_order()
click to toggle source
# File lib/snowglobe/rails_application.rb, line 132 def configure_tests_to_run_in_sorted_order fs.transform_file("config/environments/test.rb") do |lines| lines.insert(-2, <<-CONTENT) config.active_support.test_order = :sorted CONTENT end end
fix_available_locales_warning()
click to toggle source
# File lib/snowglobe/rails_application.rb, line 104 def fix_available_locales_warning # See here for more on this: # http://stackoverflow.com/questions/20361428/rails-i18n-validation-deprecation-warning fs.transform_file("config/application.rb") do |lines| lines.insert(-3, <<-TEXT) if I18n.respond_to?(:enforce_available_locales=) I18n.enforce_available_locales = false end TEXT end end
generate()
click to toggle source
# File lib/snowglobe/rails_application.rb, line 86 def generate rails_new fix_available_locales_warning remove_bootsnap write_database_configuration configure_tests_to_run_in_sorted_order if bundle.version_of("rails") >= 5 add_initializer_for_time_zone_aware_types end end
migrations_directory()
click to toggle source
# File lib/snowglobe/rails_application.rb, line 78 def migrations_directory fs.find_in_project("db/migrate") end
rails_new()
click to toggle source
# File lib/snowglobe/rails_application.rb, line 98 def rails_new CommandRunner.run!( %W(rails new #{fs.project_directory} --skip-bundle --no-rc), ) end
remove_bootsnap()
click to toggle source
# File lib/snowglobe/rails_application.rb, line 116 def remove_bootsnap # Rails 5.2 introduced bootsnap, which is helpful when you're developing # or deploying an app, but we don't really need it (and it messes with # Zeus anyhow) fs.comment_lines_matching_in_file( "config/boot.rb", %r{\Arequire 'bootsnap/setup'}, ) end
remove_unwanted_gems()
click to toggle source
# File lib/snowglobe/rails_application.rb, line 149 def remove_unwanted_gems bundle.updating do bundle.remove_gem "debugger" bundle.remove_gem "byebug" bundle.add_gem "pry-byebug" bundle.remove_gem "web-console" end end
temp_view_path_for(path)
click to toggle source
# File lib/snowglobe/rails_application.rb, line 82 def temp_view_path_for(path) temp_views_directory.join(path) end
write_database_configuration()
click to toggle source
# File lib/snowglobe/rails_application.rb, line 126 def write_database_configuration fs.open_file("config/database.yml", "w") do |f| YAML.dump(database.config.to_hash, f) end end