Below I''ve pasted a ./script/story command I''ve been using for about a week. It has three modes of operation: 1. ./script/story with no arguments will run all *.story files in the story path 2. ./script/story with a path or glob will run the specified stories 3. If input is passed in via STDIN, it runs that text as a story. This opens up story running via a simple interface (Unix pipes) for integration with other tools. This deals with plain text stories only, and does NOT require an associated .rb runner file for them. Without Ruby runner code for the stories, the problem becomes figuring out what steps to use with a given plain text story file. The solution I put together is quite simple. I declare groups of step matchers in a separate directory, taking care to match the step group name to the file name. When a story file is run, if any steps match a part of the path, they are included. For example, my story in RAILS_ROOT/stories/scenarios/schedule_formatting/weekly.story will attempt to use the step groups "schedule_formatting" and "weekly" if they exist. For cases where that convention is not flexible enough, I added support for including a comment line in the .story file with instructions for which steps it should be run with. I think about this kind of like a she-bang line. So the first line of a .story file could be: # steps: navigations, more_steps And that will override the default behavior. I''m posting this because I hope it might be of immediate use to others using plain text stories right now, and also because I would like to consider possibilities for getting this functionality into RSpec core. WDYT? -- Bryan Helmkamp http://brynary.com -- My blog ----------------------------------------------- #!/usr/bin/env ruby class StoryCommand ROOT_PATH = File.expand_path(File.dirname(__FILE__) + "/..") STORIES_PATH = "#{ROOT_PATH}/stories/scenarios" STEP_MATCHERS_PATH = "#{ROOT_PATH}/stories/steps" HELPER_PATH = "#{ROOT_PATH}/stories/helper" def self.run self.new.run end def run if ARGV.empty? && first_char = using_stdin? setup_and_run_story((first_char + STDIN.read).split("\n")) elsif ARGV.empty? run_story_files(all_story_files) else run_story_files(ARGV) end end def all_story_files Dir["#{STORIES_PATH}/**/*.story"].uniq end def using_stdin? char = nil begin char = STDIN.read_nonblock(1) rescue Errno::EAGAIN return false end return char end def clean_story_paths(paths) paths.map! { |path| File.expand_path(path) } paths.map! { |path| path.gsub(/\.story$/, "") } paths.map! { |path| path.gsub(/#{STORIES_PATH}\//, "") } end def run_story_files(stories) clean_story_paths(stories).each do |story| setup_and_run_story(File.readlines("#{STORIES_PATH}/#{story}.story"), story) end end def setup_and_run_story(lines, story_name = nil) require HELPER_PATH steps = steps_for_story(lines, story_name) steps.reject! { |step| !File.exist?("#{STEP_MATCHERS_PATH}/#{step}.rb") } steps.each { |step| require "#{STEP_MATCHERS_PATH}/#{step}" } run_story(lines, steps) end def steps_for_story(lines, story_name) if lines.first =~ /^# steps: / lines.first.gsub(/^# steps: /, "").split(",").map(&:strip) else story_name.to_s.split("/") end end def run_story(lines, steps) tempfile = Tempfile.new("story") lines.each do |line| tempfile.puts line end tempfile.close with_steps_for(*steps.map(&:to_sym)) do run tempfile.path, :type => RailsStory end end end StoryCommand.run
Here''s the steps I followed: Generated the test code rails test mate test cd test script/generate scaffold thing rake db:create script/server Modified things_controller.rb index and new: def index end def new session[:user] = 5 redirect_to(things_path) end Set index.html.erb to: Hello! <%= session[:user] %> <%= link_to ''New thing'', new_thing_path %> ------- Now when I go to the page in FireFox, I see "Hello" on the screen. Clicking the link gives me "Hello 5" on my screen. This is expected. However, when I go to Safari, I only ever see "Hello" and never "Hello 5". I have, in the Safari preferences, accept cookies set to "Accept All". I''ve checked everything I can think of to make sure nothing is blocking it. I''ve inspected the session and the only thing I can find is that the Session ID for the Safari requests is a new 32 character string for every request, and for FireFox requests it''s the same 128 character string for every request. I''m using Ruby on Rails 2.0.2. I hope I''m not forgetting some other useful piece of info. How do I get this to work for me in Safari? Thanks, Glenn -------------- next part -------------- An HTML attachment was scrubbed... URL: http://rubyforge.org/pipermail/rspec-users/attachments/20080102/024f1d74/attachment.html
Giles Bowkett
2008-Jan-03 04:36 UTC
[rspec-users] Cookie Session Store Not Working in Safari
Sorry, I''m new here, but isn''t this totally irrelevant to RSpec in every way? On 1/2/08, Glenn Ford <glenn at aldenta.com> wrote:> > Here''s the steps I followed: > > Generated the test code > rails test > mate test > cd test > script/generate scaffold thing > rake db:create > script/server > > > Modified things_controller.rb index and new: > def index > end > def new > session[:user] = 5 > redirect_to(things_path) > end > > Set index.html.erb to: > Hello! <%= session[:user] %> > <%= link_to ''New thing'', new_thing_path %> > > ------- > > Now when I go to the page in FireFox, I see "Hello" on the screen. Clicking > the link gives me "Hello 5" on my screen. This is expected. > > However, when I go to Safari, I only ever see "Hello" and never "Hello 5". > I have, in the Safari preferences, accept cookies set to "Accept All". I''ve > checked everything I can think of to make sure nothing is blocking it. > > I''ve inspected the session and the only thing I can find is that the Session > ID for the Safari requests is a new 32 character string for every request, > and for FireFox requests it''s the same 128 character string for every > request. > > I''m using Ruby on Rails 2.0.2. I hope I''m not forgetting some other useful > piece of info. > > How do I get this to work for me in Safari? > > Thanks, > Glenn > _______________________________________________ > rspec-users mailing list > rspec-users at rubyforge.org > http://rubyforge.org/mailman/listinfo/rspec-users >-- Giles Bowkett Podcast: http://hollywoodgrit.blogspot.com Blog: http://gilesbowkett.blogspot.com Portfolio: http://www.gilesgoatboy.org Tumblelog: http://giles.tumblr.com
Whoops, you''re very right, this isn''t the RoR list! Oh well it''s the only one I ever use. My bad! Let''s look at it this way... my spec''s are failing because I can''t use session! What do I do? :) On Jan 2, 2008, at 11:36 PM, Giles Bowkett wrote:> Sorry, I''m new here, but isn''t this totally irrelevant to RSpec in > every way? > > On 1/2/08, Glenn Ford <glenn at aldenta.com> wrote: >> >> Here''s the steps I followed: >> >> Generated the test code >> rails test >> mate test >> cd test >> script/generate scaffold thing >> rake db:create >> script/server >> >> >> Modified things_controller.rb index and new: >> def index >> end >> def new >> session[:user] = 5 >> redirect_to(things_path) >> end >> >> Set index.html.erb to: >> Hello! <%= session[:user] %> >> <%= link_to ''New thing'', new_thing_path %> >> >> ------- >> >> Now when I go to the page in FireFox, I see "Hello" on the screen. >> Clicking >> the link gives me "Hello 5" on my screen. This is expected. >> >> However, when I go to Safari, I only ever see "Hello" and never >> "Hello 5". >> I have, in the Safari preferences, accept cookies set to "Accept >> All". I''ve >> checked everything I can think of to make sure nothing is blocking >> it. >> >> I''ve inspected the session and the only thing I can find is that >> the Session >> ID for the Safari requests is a new 32 character string for every >> request, >> and for FireFox requests it''s the same 128 character string for every >> request. >> >> I''m using Ruby on Rails 2.0.2. I hope I''m not forgetting some >> other useful >> piece of info. >> >> How do I get this to work for me in Safari? >> >> Thanks, >> Glenn >> _______________________________________________ >> rspec-users mailing list >> rspec-users at rubyforge.org >> http://rubyforge.org/mailman/listinfo/rspec-users >> > > > -- > Giles Bowkett > > Podcast: http://hollywoodgrit.blogspot.com > Blog: http://gilesbowkett.blogspot.com > Portfolio: http://www.gilesgoatboy.org > Tumblelog: http://giles.tumblr.com > _______________________________________________ > rspec-users mailing list > rspec-users at rubyforge.org > http://rubyforge.org/mailman/listinfo/rspec-users
Giles Bowkett
2008-Jan-03 05:54 UTC
[rspec-users] Cookie Session Store Not Working in Safari
> Whoops, you''re very right, this isn''t the RoR list! Oh well it''s the > only one I ever use. My bad! Let''s look at it this way... my spec''s > are failing because I can''t use session! What do I do? :)Stub like there''s no tomorrow? -- Giles Bowkett Podcast: http://hollywoodgrit.blogspot.com Blog: http://gilesbowkett.blogspot.com Portfolio: http://www.gilesgoatboy.org Tumblelog: http://giles.tumblr.com
I figured it out. My host, or rather my /etc/hosts mapped localhost url, had an underscore in it. That was causing the problem. I never new that was bad. Crazy! On Jan 3, 2008, at 12:54 AM, Giles Bowkett wrote:>> Whoops, you''re very right, this isn''t the RoR list! Oh well it''s the >> only one I ever use. My bad! Let''s look at it this way... my spec''s >> are failing because I can''t use session! What do I do? :) > > Stub like there''s no tomorrow? > > -- > Giles Bowkett > > Podcast: http://hollywoodgrit.blogspot.com > Blog: http://gilesbowkett.blogspot.com > Portfolio: http://www.gilesgoatboy.org > Tumblelog: http://giles.tumblr.com > _______________________________________________ > rspec-users mailing list > rspec-users at rubyforge.org > http://rubyforge.org/mailman/listinfo/rspec-users-------------- next part -------------- An HTML attachment was scrubbed... URL: http://rubyforge.org/pipermail/rspec-users/attachments/20080103/cbe0a4c9/attachment.html