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' } endSi 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" } endGuard works by watching certain files in your project and then performing actions when those files change.
guard 'bundler' do watch('Gemfile') endtells 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