[rspec-users] Problems with Set after upgrade to RSpec 1.2.9

Shot (Piotr Szotkowski) shot at hot.pl
Sat Oct 10 16:54:04 EDT 2009


It seems RSpec 1.2.9 is be breaking my specs in an interesting way
(both under Ruby 1.8.7 and 1.9.1). The problem may very well be in
my non-standard approach to monkey-patching core/stdlib classes,
but my approach does work with RSpec 1.2.8 and prior, as well as
in different Ruby implementations…

If you checkout my art-decomp project from
http://github.com/Chastell/art-decomp and you
‘rake spec’ the master branch under Ruby 1.9.1
or the ruby-1.8-compat branch under Ruby 1.8.7
the result should be a short, happily green run
of 114 tests – and it is if you use RSpec 1.2.8.

Unfortunately, with RSpec 1.2.9 I get the two following results (first
Ruby 1.9.1 on master, then Ruby 1.8.7 on the ruby-1.8-compat branch):


shot at devielle:~/PhD/art-decomp$ rake spec
(in /home/shot/PhD/art-decomp)
/home/shot/PhD/art-decomp/lib/set.rb:5:in `<class:Set>': undefined method `[]' for Set:Class (NoMethodError)
  from /home/shot/PhD/art-decomp/lib/set.rb:1:in `<top (required)>'
  from /home/shot/PhD/art-decomp/lib/art-decomp.rb:18:in `require'
  from /home/shot/PhD/art-decomp/lib/art-decomp.rb:18:in `<top (required)>'
  from /home/shot/PhD/art-decomp/spec/spec_helper.rb:4:in `require'
  from /home/shot/PhD/art-decomp/spec/spec_helper.rb:4:in `<top (required)>'
  from /home/shot/.gem/ruby/1.9.1/gems/rspec-1.2.9/lib/spec/runner/option_parser.rb:149:in `require'
  from /home/shot/.gem/ruby/1.9.1/gems/rspec-1.2.9/lib/spec/runner/option_parser.rb:149:in `block in invoke_requires'
  from /home/shot/.gem/ruby/1.9.1/gems/rspec-1.2.9/lib/spec/runner/option_parser.rb:148:in `each'
  from /home/shot/.gem/ruby/1.9.1/gems/rspec-1.2.9/lib/spec/runner/option_parser.rb:148:in `invoke_requires'
  from /home/shot/.gem/ruby/1.9.1/gems/rspec-1.2.9/lib/spec/runner/option_parser.rb:104:in `block in initialize'
  from /home/shot/.rvm/ruby-1.9.1-p243/lib/ruby/1.9.1/optparse.rb:1271:in `call'
  from /home/shot/.rvm/ruby-1.9.1-p243/lib/ruby/1.9.1/optparse.rb:1271:in `block in parse_in_order'
  from /home/shot/.rvm/ruby-1.9.1-p243/lib/ruby/1.9.1/optparse.rb:1258:in `catch'
  from /home/shot/.rvm/ruby-1.9.1-p243/lib/ruby/1.9.1/optparse.rb:1258:in `parse_in_order'
  from /home/shot/.rvm/ruby-1.9.1-p243/lib/ruby/1.9.1/optparse.rb:1252:in `order!'
  from /home/shot/.gem/ruby/1.9.1/gems/rspec-1.2.9/lib/spec/runner/option_parser.rb:132:in `order!'
  from /home/shot/.gem/ruby/1.9.1/gems/rspec-1.2.9/lib/spec/runner.rb:51:in `options'
  from /home/shot/.gem/ruby/1.9.1/gems/rspec-1.2.9/lib/spec/runner/command_line.rb:6:in `run'
  from /home/shot/.gem/ruby/1.9.1/gems/rspec-1.2.9/bin/spec:5:in `<main>'
rake aborted!
Command /home/shot/.rvm/ruby-1.9.1-p243/bin/ruby -I"lib"  "/home/shot/.gem/ruby/1.9.1/gems/rspec-1.2.9/bin/spec" "spec/set_spec.rb" "spec/string_spec.rb" "spec/enumerable_spec.rb" "spec/file_spec.rb" "spec/art-decomp/graph_spec.rb" "spec/art-decomp/logging_spec.rb" "spec/art-decomp/arch_spec.rb" "spec/art-decomp/fsm_spec.rb" "spec/art-decomp/sep_spec.rb" "spec/art-decomp/bipainter_spec.rb" "spec/art-decomp/blanket_spec.rb" "spec/art-decomp/kiss_spec.rb" "spec/art-decomp/qv_generator/graph_colouring_spec.rb" "spec/art-decomp/qv_generator/bipainting_spec.rb" "spec/art-decomp/qv_generator/graph_merging_spec.rb" "spec/art-decomp/executable_spec.rb" "spec/art-decomp/decomposer_spec.rb" "spec/art-decomp/qu_generator/edge_labels_spec.rb" "spec/art-decomp/qu_generator/block_table_spec.rb" "spec/art-decomp/uv_generator/relevance_spec.rb" "spec/art-decomp/uv_generator/braindead_spec.rb" "spec/art-decomp/decomposition_spec.rb" "spec/art-decomp/b_spec.rb" "spec/integer_spec.rb" --options spec/spec.opts failed

(See full trace by running task with --trace)
shot at devielle:~/PhD/art-decomp$ 


shot at devielle:~/PhD/art-decomp$ rake spec
(in /home/shot/PhD/art-decomp)
./lib/set.rb:5: undefined method `[]' for Set:Class (NoMethodError)
  from /home/shot/.rvm/ruby-1.8.7-p174/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require'
  from /home/shot/.rvm/ruby-1.8.7-p174/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'
  from ./lib/art-decomp.rb:39
  from /home/shot/.rvm/ruby-1.8.7-p174/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require'
  from /home/shot/.rvm/ruby-1.8.7-p174/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'
  from ./spec/spec_helper.rb:4
  from /home/shot/.rvm/ruby-1.8.7-p174/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require'
  from /home/shot/.rvm/ruby-1.8.7-p174/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'
  from /home/shot/.gem/ruby/1.8.7/gems/rspec-1.2.9/lib/spec/runner/option_parser.rb:149:in `invoke_requires'
  from /home/shot/.gem/ruby/1.8.7/gems/rspec-1.2.9/lib/spec/runner/option_parser.rb:148:in `each'
  from /home/shot/.gem/ruby/1.8.7/gems/rspec-1.2.9/lib/spec/runner/option_parser.rb:148:in `invoke_requires'
  from /home/shot/.gem/ruby/1.8.7/gems/rspec-1.2.9/lib/spec/runner/option_parser.rb:104:in `initialize'
  from /home/shot/.rvm/ruby-1.8.7-p174/lib/ruby/1.8/optparse.rb:1267:in `call'
  from /home/shot/.rvm/ruby-1.8.7-p174/lib/ruby/1.8/optparse.rb:1267:in `parse_in_order'
  from /home/shot/.rvm/ruby-1.8.7-p174/lib/ruby/1.8/optparse.rb:1254:in `catch'
  from /home/shot/.rvm/ruby-1.8.7-p174/lib/ruby/1.8/optparse.rb:1254:in `parse_in_order'
  from /home/shot/.rvm/ruby-1.8.7-p174/lib/ruby/1.8/optparse.rb:1248:in `order!'
  from /home/shot/.gem/ruby/1.8.7/gems/rspec-1.2.9/lib/spec/runner/option_parser.rb:132:in `order!'
  from /home/shot/.gem/ruby/1.8.7/gems/rspec-1.2.9/lib/spec/runner.rb:51:in `options'
  from /home/shot/.gem/ruby/1.8.7/gems/rspec-1.2.9/lib/spec/runner/command_line.rb:6:in `run'
  from /home/shot/.gem/ruby/1.8.7/gems/rspec-1.2.9/bin/spec:5
rake aborted!
Command /home/shot/.rvm/ruby-1.8.7-p174/bin/ruby -I"lib"  "/home/shot/.gem/ruby/1.8.7/gems/rspec-1.2.9/bin/spec" "spec/set_spec.rb" "spec/string_spec.rb" "spec/enumerable_spec.rb" "spec/file_spec.rb" "spec/art-decomp/graph_spec.rb" "spec/art-decomp/logging_spec.rb" "spec/art-decomp/arch_spec.rb" "spec/art-decomp/fsm_spec.rb" "spec/art-decomp/sep_spec.rb" "spec/art-decomp/bipainter_spec.rb" "spec/art-decomp/blanket_spec.rb" "spec/art-decomp/kiss_spec.rb" "spec/art-decomp/qv_generator/graph_colouring_spec.rb" "spec/art-decomp/qv_generator/bipainting_spec.rb" "spec/art-decomp/qv_generator/graph_merging_spec.rb" "spec/art-decomp/executable_spec.rb" "spec/art-decomp/decomposer_spec.rb" "spec/art-decomp/qu_generator/edge_labels_spec.rb" "spec/art-decomp/qu_generator/block_table_spec.rb" "spec/art-decomp/uv_generator/relevance_spec.rb" "spec/art-decomp/uv_generator/braindead_spec.rb" "spec/art-decomp/decomposition_spec.rb" "spec/art-decomp/b_spec.rb" "spec/integer_spec.rb" --options spec/spec.opts failed

(See full trace by running task with --trace)
shot at devielle:~/PhD/art-decomp$


I guess the problem is my way of monkey-patching the Set class;
I first ‘require 'set'’ to get the stdlib’s Set, and then
‘require_relative 'lib/set'’ to get my patches. But this approach
works in RSpec 1.2.8 and in all other applications of my code…

Any insight on whether I should fix my code or
is this a bug in RSpec would be most appreciated.

— Shot, who’s back to RSpec 1.2.8 for now
-- 
Content-type: lies/all-lies
Content-disposition: blatant
              [Nick Moffitt]
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 197 bytes
Desc: Digital signature
URL: <http://rubyforge.org/pipermail/rspec-users/attachments/20091010/1574d1d7/attachment.bin>


More information about the rspec-users mailing list