Oh no! I have a "Spec" model

I am trying to use cucumber but my application has a "Spec" model (I
followed the RailsSpace book). So now I am getting an error when
running cucumber (below). I think because cucumber does not like a
model named "Spec." But I have "Spec" and "spec(s)" everywhere in my
application now. A universal text change is a huge pain. Some
innocent text contains the string "spec", e.g. "aspect". So I have to
look at each replacement. What can I do? Please help. Thanks.

Spec is not a class (TypeError)
/Volumes/Data/Beo/Documents/RailsSpace/app/models/spec.rb:1
/opt/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in
`gem_original_require'
/opt/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in
`polyglot_original_require'
/opt/local/lib/ruby/gems/1.8/gems/polyglot-0.2.9/lib/polyglot.rb:70:in
`require'
/opt/local/lib/ruby/gems/1.8/gems/activesupport-2.3.5/lib/
active_support/dependencies.rb:158:in `require'
/opt/local/lib/ruby/gems/1.8/gems/activesupport-2.3.5/lib/
active_support/dependencies.rb:265:in `require_or_load'
/opt/local/lib/ruby/gems/1.8/gems/activesupport-2.3.5/lib/
active_support/dependencies.rb:224:in `depend_on'
/opt/local/lib/ruby/gems/1.8/gems/activesupport-2.3.5/lib/
active_support/dependencies.rb:136:in `require_dependency'
/opt/local/lib/ruby/gems/1.8/gems/rails-2.3.5/lib/initializer.rb:
414:in `load_application_classes'
/opt/local/lib/ruby/gems/1.8/gems/rails-2.3.5/lib/initializer.rb:
413:in `each'
/opt/local/lib/ruby/gems/1.8/gems/rails-2.3.5/lib/initializer.rb:
413:in `load_application_classes'
/opt/local/lib/ruby/gems/1.8/gems/rails-2.3.5/lib/initializer.rb:
411:in `each'
/opt/local/lib/ruby/gems/1.8/gems/rails-2.3.5/lib/initializer.rb:
411:in `load_application_classes'
/opt/local/lib/ruby/gems/1.8/gems/rails-2.3.5/lib/initializer.rb:
197:in `process'
/opt/local/lib/ruby/gems/1.8/gems/rails-2.3.5/lib/initializer.rb:
113:in `send'
/opt/local/lib/ruby/gems/1.8/gems/rails-2.3.5/lib/initializer.rb:
113:in `run'
/Volumes/Data/Beo/Documents/OptiDev/config/environment.rb:9
/opt/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in
`gem_original_require'
/opt/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in
`polyglot_original_require'
/opt/local/lib/ruby/gems/1.8/gems/polyglot-0.2.9/lib/polyglot.rb:70:in
`require'
/Volumes/Data/Beo/Documents/OptiDev/features/support/env.rb:8
/opt/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in
`gem_original_require'
/opt/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in
`polyglot_original_require'
/opt/local/lib/ruby/gems/1.8/gems/polyglot-0.2.9/lib/polyglot.rb:70:in
`require'
/opt/local/lib/ruby/gems/1.8/gems/cucumber-0.6.1/bin/../lib/cucumber/
rb_support/rb_language.rb:124:in `load_code_file'
/opt/local/lib/ruby/gems/1.8/gems/cucumber-0.6.1/bin/../lib/cucumber/
step_mother.rb:84:in `load_code_file'
/opt/local/lib/ruby/gems/1.8/gems/cucumber-0.6.1/bin/../lib/cucumber/
step_mother.rb:76:in `load_code_files'
/opt/local/lib/ruby/gems/1.8/gems/cucumber-0.6.1/bin/../lib/cucumber/
step_mother.rb:75:in `each'
/opt/local/lib/ruby/gems/1.8/gems/cucumber-0.6.1/bin/../lib/cucumber/
step_mother.rb:75:in `load_code_files'
/opt/local/lib/ruby/gems/1.8/gems/cucumber-0.6.1/bin/../lib/cucumber/
cli/main.rb:48:in `execute!'
/opt/local/lib/ruby/gems/1.8/gems/cucumber-0.6.1/bin/../lib/cucumber/
cli/main.rb:20:in `execute'
/opt/local/lib/ruby/gems/1.8/gems/cucumber-0.6.1/bin/cucumber:8
/opt/local/bin/cucumber:19:in `load'
/opt/local/bin/cucumber:19

I am trying to use cucumber but my application has a "Spec" model (I
followed the RailsSpace book).

...which is quite out of date.

So now I am getting an error when
running cucumber (below). I think because cucumber does not like a
model named "Spec."

Actually, I think that would be more of a proble for RSpec. But I
could be wrong.

But I have "Spec" and "spec(s)" everywhere in my
application now. A universal text change is a huge pain. Some
innocent text contains the string "spec", e.g. "aspect". So I have to
look at each replacement.

Well, you should look at each replacement anyway.

What can I do? Please help.

Try a regular expression search and replace, so that you don't hit
innocent words.

Thanks.

Best,

Thanks. So the problem is the "Spec" model name? There is no other
way but to change "Spec" to something else?

I started with RailsSpace as a starting point a while back but my
application has evolved since.

Learn by Doing wrote:

Thanks. So the problem is the "Spec" model name?

Most likely.

There is no other
way but to change "Spec" to something else?

Probably not. And this should not be difficult.

I started with RailsSpace as a starting point a while back but my
application has evolved since.

Best,

Thanks Marnen. I am trying to use regular expression to replace the
text "spec" in TextMate with "mug". I am trying to avoid instances of
"spec" where it does not mean the name of the model, e.g. "aspect".
So I use the following regular expression: [^a-zA-Z]spec . That
would catch "@spec" which is what I want. But if I tell TextMate to
replace that with "mug", I lose the character before "spec". TextMate
replaces "@spec" with "mug" . How can I make it replace @spec with
@mug ?

Thanks.

Learn by Doing wrote:

Thanks Marnen. I am trying to use regular expression to replace the
text "spec" in TextMate with "mug". I am trying to avoid instances of
"spec" where it does not mean the name of the model, e.g. "aspect".
So I use the following regular expression: [^a-zA-Z]spec . That
would catch "@spec" which is what I want. But if I tell TextMate to
replace that with "mug", I lose the character before "spec". TextMate
replaces "@spec" with "mug" . How can I make it replace @spec with
@mug ?

Most regexp syntaxes support backreferences in the replace string, which
is what you need. Check TextMate's documentation to see how it
implements backreferences.

Thanks.

Best,

Thanks Marnen!

I will surely look into back references next time. Before I got your answer, I managed to do this manually by replacing “Spec” then “spec” when preceded with each of the special characters: @ : ’ " / - ! space. I downloaded and used “Name Mangler” to replace “spec” in file names. While tedious, you are right that it is not too difficult. Cucumber seems to work now. I am ready to dive into BDD.

Thank you so much for your help.

Vincent

Marnen!

Thank you so much for motivating me to use Cucumber. It makes
functional and integration testing so easy!

Vincent.

Learn by Doing wrote:

Marnen!

Thank you so much for motivating me to use Cucumber. It makes
functional and integration testing so easy!

You're most welcome. It's amazing, isn't it?

Vincent.

Best,