On Nov 14, 2011, at 11:59 PM, Patrick J. Collins wrote:

>> Use the described class:
>> 
>> shared_examples "a nameable thingie" do |klass|
>>  describe "#build_name" do
>>    it "it adds the collection of arguments to the base components and 
>> formats them for a form element name attribute" do
>>      described_class.new(nil,nil).build_name(:lol, :lollerskates, 
>> :roflcopter).should == "lol[lollerskates][roflcopter]"
>>    end
>>  end
>> end
> 
> But what happens if the classes do not have the same argument expectations,
> such as:
> 
> class Foo
> 
>  include NameBuilder
> 
>  def initialize(arg1)
>    ...
>  end
> 
> end

I misunderstood your initial example, thinking that NameBuilder required an 
initializer w/ two args.

I'd use a factory pattern here:

def new_foo(arg1=nil,arg2=nil)
  Foo.new(arg1,arg2)
end

def new_bar(arg=nil)
  Bar.new(arg)
end

Now you can use these without arguments when you want to:

describe Foo do
 it_behaves_like "a nameable thingie", new_foo
end

describe Bar do
 it_behaves_like "a nameable thingie", new_bar
end

And you can use the with arguments as well:

it "does something else" do
  foo = make_foo(x)
  other_foo = make_foo(x,y)
end

David
_______________________________________________
rspec-users mailing list
rspec-users@rubyforge.org
http://rubyforge.org/mailman/listinfo/rspec-users

Reply via email to