This is an autotest plugin to provide rails support. It provides basic rails support and extra plugins for migrations and fixtures.
Changes:
4.1.0 / 2009-06-03
1 major enhancement
- Birthday! well... split from ZenTest
This is an autotest plugin to provide rails support. It provides basic rails support and extra plugins for migrations and fixtures.
Changes:
1 major enhancement
ZenTest provides 4 different tools: zentest, unit_diff, autotest, and multiruby.
ZenTest scans your target and unit-test code and writes your missing code based on simple naming rules, enabling XP at a much quicker pace. ZenTest only works with Ruby and Test::Unit. Nobody uses this tool anymore but it is the package namesake, so it stays.
unit_diff is a command-line filter to diff expected results from actual results and allow you to quickly see exactly what is wrong.
autotest is a continous testing facility meant to be used during development. As soon as you save a file, autotest will run the corresponding dependent tests.
multiruby runs anything you want on multiple versions of ruby. Great for compatibility checking! Use multiruby_setup to manage your installed versions.
Changes:
1 major enhancement:
4 minor enhancements:
6 bug fixes:
There seems to be some confusion and/or panic about ParseTree that I'd like to clear up:
Because of changes to internals in 1.9, ParseTree simply can not work. I asked for hooks/options to allow us to get to the information but they never arrived.
Specifically if you're using ParseTree to access the AST of a live method/block/proc, you're SOL. If you're just using ParseTree to do static analysis, then you can switch to ruby_parser in about a minute of work and you're good to go.
Here is the plan for my projects:
I don't know the status of most of the projects dependent on PT or how they're going to deal with this issue. If you use one of these projects directly or indirectly and that project relies on PT for live method/block/proc, then you're probably going to be stuck on 1.8 for a while:
There are probably other projects out there dependent on PT that I don't know about. All I've listed here are rubyforge gems that depend on PT in their gemspec.
You can check your gems using this:
gem list | egrep "(ambition|argible|integrity|merb-action-args|nitpick|protocol|red|reek|roodi|ruby_diff|rubyjs|sake|thorero-action-args)"
Here is the clean and easy way to do multiple environments in vlad. Here is my deploy.rb:
set :application, "proj"
set :repository, "https://subversion/proj/trunk"
task :beta do
set :domain, "localhost"
set :deploy_to, "/tmp/proj_beta"
end
task :dev do
set :domain, "localhost"
set :deploy_to, "/tmp/proj_dev"
end
task :prod do
set :domain, "localhost"
set :deploy_to, "/tmp/proj_prod"
end
By not specifying domain or deploy_to globally you force the use of an environment whenever you invoke a vlad task:
% rake vlad:debug | egrep "(domain|deploy_to):"
rake aborted!
Please specify the deploy path via the :deploy_to variable
Here is what it looks like with one of the three defined environments:
% rake beta vlad:debug | egrep "(domain|deploy_to):"
domain: localhost
deploy_to: /tmp/proj_beta
% rake dev vlad:debug | egrep "(domain|deploy_to):"
domain: localhost
deploy_to: /tmp/proj_dev
% rake prod vlad:debug | egrep "(domain|deploy_to):"
domain: localhost
deploy_to: /tmp/proj_prod

As you can see by yesterday's humongous release, I'm working on getting vlad lively again. My current plan is/was:
So, I'd like your feedback:
What is the current favored deployment strategy? (I mean in terms of actual numbers, not this week's popular toy.)
Currently vlad has the following defaults:
:app => :mongrel,
:scm => :subversion,
:web => :apache,
Should any of these change?
ETA:
I just deleted a bunch of comments chock-full with that railz0r "+1" horse-shit. The plural of anecdote is not data. I'm not asking people to vote. I'm asking for actual numbers on big installations out there. I want the few people who own the hardware the slices are running on, not the individuals using the slices.

Vlad the Deployer is pragmatic application deployment automation, without mercy. Much like Capistrano, but with 1/10th the complexity. Vlad integrates seamlessly with Rake, and uses familiar and standard tools like ssh and rsync.
Impale your application on the heartless spike of the Deployer.
Changes:
9 major enhancements:
19 minor enhancements:
11 bug fixes:
I've been meaning to write and run this benchmark for a while to see how things fare in the view world these days. Initially I did markaby vs tagz (my favorite at a svelte 244 lines). I then added builder out of curiosity's sake. Thanks to atmos I was able to get code and numbers for erubis and haml.
Builder is slightly faster than tagz, but not enough for me to want to switch to it. Tagz and markaby read so much better than builder, but markaby is so much slower (4.73 times slower than builder) that I can't justify its use.
Now if only I could get tagz working correctly with sinatra. :(
# iterations = 10000
#
# user system total real multiplier
#
# builder 1.910000 0.000000 1.910000 ( 1.918751) (1.00)
# tagz 2.310000 0.020000 2.330000 ( 2.357710) (1.23)
# haml 5.370000 0.020000 5.390000 ( 5.418876) (2.82)
# erubis 5.390000 0.020000 5.410000 ( 5.446929) (2.84)
# markaby 8.980000 0.030000 9.010000 ( 9.078748) (4.73)
Code behind the cut...
8 days, 5 hours, 24 minutes, and 52 seconds after I sent out my enigmatic post, Mr. Black (me, duh), Mr. White (Eric Hodel), Mr. Pink (Aaron Patterson, duh), and Mr. Blonde (John "Which one was Michael Madsen?" Barnette) all received offer letters from AT&T Interactive to work on one of their new ideas (totally green field! I don't think any of us have seen an empty repository in years and years!).
I'm amazed. I'm in awe. I had no idea that such a thing was possible, let alone so incredibly effortless. Thank you Ruby community for making such a thing possible and thank you ATTi for making such a bold move.

>> require 'time'
=> true
>> t0 = Time.parse "January 22, 2009 12:05:56 PM"
=> Thu Jan 22 12:05:56 -0800 2009
>> t1 = Time.parse "January 30, 2009 5:30:48 PM"
=> Fri Jan 30 17:30:48 -0800 2009
>> t = (t1 - t0).to_i
=> 710692
>> u = []
=> []
>> [86400, 3600, 60, 1].inject(t) { |t, n| m = t / n; u << m if m != 0; t % n }
=> 0
>> puts u.map {|t| '%02d' % t }.join(":").sub(/^0/, '')
8:05:24:52

Mr. Black, Mr. White, Mr. Pink, and Mr. Blonde are immediately available for hire. Package deal. 49 years of programming experience, 28 in Ruby. You know their names. Get in touch.