README.rdoc in kicker-3.0.0 vs README.rdoc in kicker-4.0.0.p1

- old
+ new

@@ -1,150 +1 @@ -= Kicker - -{<img src="https://secure.travis-ci.org/alloy/kicker.png" />}[http://travis-ci.org/alloy/kicker] - -A lean, agnostic, flexible file-change watcher. - -== Installation - - $ gem install kicker -s http://gemcutter.org - -== The short version - - Usage: ./bin/kicker [options] [paths to watch] - - Available recipes: ignore, jstest, rails, ruby. - - -s, --silent Keep output to a minimum. - -q, --quiet Quiet output. Don't print timestamps when logging. - -c, --clear Clear console before each run. - -l, --latency [FLOAT] The time to collect file change events before acting on them. Defaults to 1 second. - -r, --recipe [NAME] A named recipe to load. - -e, --execute [COMMAND] The command to execute. - -b, --ruby [PATH] Use an alternate Ruby binary for spawned test runners. (Default is `ruby') - - -== The long version - -=== Execute a shell command - -Show all files, whenever a change occurs in the current work directory: - - $ kicker -e "ls -l" . - -Show all files, whenever a change occurs to a specific file: - - $ kicker -e "ls -l" foo.txt - -Or use it as a ghetto-autotest, running tests whenever files change: - - $ kicker -e "ruby test/test_case.rb" test/test_case.rb lib/file.rb - -Et cetera. - -=== Using recipes - -A recipe is a predefined handler. You can use as many as you like, by -specifying them with the <tt>--recipe</tt> (<tt>-r</tt>) option. - -For instance, when in the root of a typical Ruby on Rails application, using -the <tt>rails</tt> recipe will map models, concerns, controllers, helpers, and -views to their respective test files. These will then all be ran with Ruby. - -A few recipes come shipped with Kicker: -* Typical Ruby library. -* Ruby on Rails, as aforementioned. -* JavaScript tests, to run it needs - HeadlessSquirrel[http://github.com/Fingertips/Headless-squirrel]. -* Ignore, ignores logs, tmp, and svn and git files. - -Add your own shared recipes to <tt>~/.kick</tt> folder or -current working directory <tt>.kick</tt>. - -=== Project specific handlers - -Most of the time, you’ll want to create handlers specific to the project at -hand. This can be done by adding your handlers to a <tt>.kick</tt> file and -running Kicker from the directory containing it. - -This file is reloaded once saved. No need to stop Kicker. - -== Writing handlers - -Whenever file-change events occur, Kicker will go through a chain of handlers -until that the files list is empty, or the end of the chain is reached. - -Handlers are objects that respond to <tt>#call</tt>. These are typically Proc -objects. (If you know Rack, you’re familiar with this concept.) Every handler -gets passed a list of changed files and can decide whether or not to act on -them. Normally when handling a file, you should remove it from the files list, -unless you want to let the file fall through to another handler. In the same -way, one can add files to handler to the files list. - -==== Time for a simple example - - process do |files| - execute("rake docs:generate && open -a Safari html/index.html") if files.delete("README.rdoc") - end - -A handler is defined by passing a block to <tt>process</tt>. Which is one of -three possible callback chains to add your handlers to, the others being: -<tt>pre_process</tt> and <tt>post_process</tt>. See Kernel for more info. - -Then <tt>README.rdoc</tt> is deleted from the files array. If it did exist in -the array and was deleted, a shell command is executed which runs a rake task -to generate rdoc and open the docs with Safari. - -==== Something more elaborate. - -Consider a Rails application with a mailer. Since the naming convention of -mailer views tend to be fairly application specific, a specific handler has to -be added: - - process do |files| - test_files = files.take_and_map do |file| - if path =~ %r{^app/views/mailer/\w+\.erb$} - 'test/unit/mailer_test.rb' - - # elsif ... handle more app specific stuff - end - end - - Ruby.run_tests test_files - end - -The files list is iterated over with the Array#take_and_map method, which both -removes and maps the results. This is an easy way to do a common thing in -recipes. See Kicker::ArrayExt for details. - -The handler then checks if the file is a mailer view and if so runs the -mailers test case. Ruby.run_tests runs them with something like the following -command: - - execute "ruby -r #{test_files.join(' -r ')} -e ''" unless test_files.empty? - -See Kernel for more info on the utility methods. - -To load recipes from your <tt>~/.kick</tt> file: - - recipe :ignore - ignore(/^data\//) - -That’s basically it, just remember that the order of specifying handlers _can_ -be important in your decision on where to specify handlers. - -== Notifiers - -For platform specific notifications we use the notify gem. For supported -backends see: https://github.com/jugyo/notify#feature. - -You select the notify backend by setting the NOTIFY environment variable. - - gem install terminal-notifier - env NOTIFY=terminal-notifier kicker - -== Contributors - -* Manfred Stienstra (@manfred) -* Cristi Balan (@evilchelu) -* Damir Zekic (@sidonath) -* Adam Keys (@therealadam) \ No newline at end of file