Skip to content

Instantly share code, notes, and snippets.

@chrishough
Created March 10, 2020 00:23
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save chrishough/5b037ac0c9bf690b41204b9d19b06fcc to your computer and use it in GitHub Desktop.
Save chrishough/5b037ac0c9bf690b41204b9d19b06fcc to your computer and use it in GitHub Desktop.
Example Guardfile for Ruby on Rails Applications with the front end inside of Rails
clearing :on
directories %w(app lib config spec) \
.select{|d| Dir.exists?(d) ? d : UI.warning("Directory #{d} does not exist")}
group :cops do
guard 'rake', task: 'myapp:test:rubocop' do
watch(%r{(app|lib|spec)/(.+)\.(rb|rake)$})
watch(%r{config/(application|routes).rb})
end
end
group :testing do
guard :rspec, cmd: 'bin/rspec' do
require 'guard/rspec/dsl'
dsl = Guard::RSpec::Dsl.new(self)
# RSpec files
rspec = dsl.rspec
watch(rspec.spec_helper) { rspec.spec_dir }
watch(rspec.spec_support) { rspec.spec_dir }
watch(rspec.spec_files)
# Ruby files
ruby = dsl.ruby
dsl.watch_spec_files_for(ruby.lib_files)
# Rails files
rails = dsl.rails(view_extensions: %w(erb haml slim))
dsl.watch_spec_files_for(rails.app_files)
dsl.watch_spec_files_for(rails.views)
watch(rails.controllers) do |m|
[
rspec.spec.("routing/#{m[1]}_routing"),
rspec.spec.("controllers/#{m[1]}_controller"),
rspec.spec.("acceptance/#{m[1]}")
]
end
# Monitor Factories
watch(%r{^spec/factories/(.+)\.rb$}) { 'spec/models' }
# Rails config changes
watch(rails.spec_helper) { rspec.spec_dir }
watch(rails.routes) { "#{rspec.spec_dir}/routing" }
watch(rails.app_controller) { "#{rspec.spec_dir}/controllers" }
# Capybara features specs
watch(rails.view_dirs) { |m| rspec.spec.("features/#{m[1]}") }
watch(rails.layouts) { |m| rspec.spec.("features/#{m[1]}") }
# Turnip features and steps
watch(%r{^spec/acceptance/(.+)\.feature$})
watch(%r{^spec/acceptance/steps/(.+)_steps\.rb$}) do |m|
Dir[File.join("**/#{m[1]}.feature")][0] || 'spec/acceptance'
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment