Gemfile:
[~/srcLPPclases/question-simple_choice(master)]$ vi Guardfile source 'https://rubygems.org' # Specify your gem's dependencies in question-simple_choice.gemspec group :development, :test do gem 'rspec' gem 'pry' gem 'guard' # do not call require when you start Bundler gem 'guard-rspec', require: false endYou should now run
bundle install in your project root to install Guard if it
isn't already.
[~/srcLPPclases/question-simple_choice(master)]$ guard --version Guard version 2.8.0
[~/srcLPPclases/question-simple_choice(master)]$ guard help Commands: guard help [COMMAND] # Describe available commands or one specific command guard init [GUARDS] # Generates a Guardfile at the current directory (if it i... guard list # Lists Guard plugins that can be used with init guard notifiers # Lists notifiers and its options guard show # Show all defined Guard plugins and their options guard start # Starts Guard guard version # Show the Guard version
Now we need to initialize Guard and configure it for our project. Luckily, Guard comes with its own command line helpers:
[~/srcLPPclases/question-simple_choice(master)]$ guard help init
Usage:
guard init [GUARDS]
Options:
-b, [--bare=Generate a bare Guardfile without
adding any installed plugin into it], [--no-bare]
Generates a Guardfile at the current directory (if it is not already
there) and adds all installed Guard plugins or the given GUARDS into it
Si solo queremos generar código para vigilar el Gemfile usando guard-bundler:
[~/srcLPPclases/question-simple_choice(master)]$ guard init rspec
16:18:14 - INFO - Writing new Guardfile to
/Users/casiano/local/src/ruby/LPP/clases/question-simple_choice/Guardfile
16:18:14 - INFO - rspec guard added to Guardfile,
feel free to edit it
[~/srcLPPclases/question-simple_choice(master)]$ cat Guardfile
# A sample Guardfile
# More info at https://github.com/guard/guard#readme
# Note: The cmd option is now required due to the increasing number of ways
# rspec may be run, below are examples of the most common uses.
# * bundler: 'bundle exec rspec'
# * bundler binstubs: 'bin/rspec'
# * spring: 'bin/rsspec' (This will use spring if running and you have
# installed the spring binstubs per the docs)
# * zeus: 'zeus rspec' (requires the server to be started separetly)
# * 'just' rspec: 'rspec'
guard :rspec, cmd: 'bundle exec rspec' do
watch(%r{^spec/.+_spec\.rb$})
watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
watch('spec/spec_helper.rb') { "spec" }
# Rails example
watch(%r{^app/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
watch(%r{^app/(.*)(\.erb|\.haml|\.slim)$}) { |m| "spec/#{m[1]}#{m[2]}_spec.rb" }
watch(%r{^app/controllers/(.+)_(controller)\.rb$}) { |m| ["spec/routing/#{m[1]}_routing_spec.rb", "spec/#{m[2]}s/#{m[1]}_#{m[2]}_spec.rb", "spec/acceptance/#{m[1]}_spec.rb"] }
watch(%r{^spec/support/(.+)\.rb$}) { "spec" }
watch('config/routes.rb') { "spec/routing" }
watch('app/controllers/application_controller.rb') { "spec/controllers" }
watch('spec/rails_helper.rb') { "spec" }
# Capybara features specs
watch(%r{^app/views/(.+)/.*\.(erb|haml|slim)$}) { |m| "spec/features/#{m[1]}_spec.rb" }
# Turnip features and steps
watch(%r{^spec/acceptance/(.+)\.feature$})
watch(%r{^spec/acceptance/steps/(.+)_steps\.rb$}) { |m| Dir[File.join("**/#{m[1]}.feature")][0] || 'spec/acceptance' }
end
Si solo queremos generar código para vigilar las pruebas
usando guard-rspec:
guard init rspec
init commands can really help jog
your memory if you're trying to do it from scratch.
Let's modify our Guardfile to look like this:
guard 'bundler' do
watch('Gemfile')
end
guard 'rspec', :version => 2 do
watch(%r{^spec/.+_spec\.rb$})
watch(%r{^lib/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
watch('spec/spec_helper.rb') { "spec" }
end
Guard works by watching certain files in your project and then performing
actions when those files change.
guard 'bundler' do
watch('Gemfile')
end
tells us to watch for
the Gemfile to change, and run bundle install
when that happens.
spec_helper, and the corresponding library files for
each of our RSpec tests.
bundle exec guard start from your project's root directory.
[~/srcLPPruby/building_gems/bleigh_tutorial_to_building_gems/my-gem(master)]$ guard help start
Usage:
guard start
Options:
-c, [--clear=Auto clear shell before each action]
-n, [--notify=Notifications feature]
-d, [--debug=Show debug information]
-g, [--group=Run only the passed groups]
-P, [--plugin=Run only the passed plugins]
-w, [--watchdir=Specify the directories to watch]
-G, [--guardfile=Specify a Guardfile]
-i, [--no-interactions=Turn off completely any Guard terminal interactions]
-B, [--no-bundler-warning=Turn off warning when Bundler is not present]
[--show-deprecations=Turn on deprecation warnings]
-l, [--latency=Overwrite Listen's default latency]
-p, [--force-polling=Force usage of the Listen polling listener]
Starts Guard
guard, it shows a pry console,
with some Guard specific pry commands:
[~/srcLPPruby/building_gems/bleigh_tutorial_to_building_gems/my-gem(master)]$ guard 17:41:40 - INFO - Guard here! It looks like your project has a Gemfile, yet you are running > [#] `guard` outside of Bundler. If this is your intent, feel free to ignore this > [#] message. Otherwise, consider using `bundle exec guard` to ensure your > [#] dependencies are loaded correctly. > [#] (You can run `guard` with --no-bundler-warning to get rid of this message.) 17:41:40 - WARN - Guard::RSpec DEPRECATION WARNING: The :version option is deprecated. Only RSpec ~> 2.14 is now supported. 17:41:40 - INFO - Guard is using TerminalTitle to send notifications. 17:41:40 - INFO - Bundle already up-to-date 17:41:40 - INFO - Guard::RSpec is running 17:41:40 - INFO - Guard is now watching at '/Users/casiano/local/src/ruby/building_gems/bleigh_tutorial_to_building_gems/my-gem' [1] guard(main)>
Si ahora en una terminal modificamos uno de los ficheros vigilados:
$ touch spec/spec_helper.rbGuard dispara la correspondiente acción, que en este caso es ejecutar RSpec:
17:50:28 - INFO - Running: spec
Run options: include {:focus=>true}
All examples were filtered out; ignoring {:focus=>true}
*
Pending:
MyGem requires additional testing
# Not yet implemented
# ./spec/my_gem_spec.rb:5
Finished in 0.00062 seconds
1 example, 0 failures, 1 pending
Randomized with seed 46343
[1] guard(main)>
Running Guard makes the development feedback loop as tight and automatic as possible.
Gemas
Testing
Guard