@settings.should allow_publish_ip("127.0.0.1") fails with
undefined method `allow_publish_ip'' for
#<#<Class:0x2f8fd48>:0x2f5a968>
@settings.should_allow_publish_ip("127.0.0.1") works fine
This is rspec 0.8.2.
http://rspec.rubyforge.org/documentation/expectations.html says that
matching arbitrary predicates is deprecated and to see
Spec::Matchers...however there''s nothing really useful on that page
except for matching resulting values.
Pat
On 3/14/07, Pat Maddox <pergesu at gmail.com> wrote:> @settings.should allow_publish_ip("127.0.0.1") fails with > undefined method `allow_publish_ip'' for #<#<Class:0x2f8fd48>:0x2f5a968> > > @settings.should_allow_publish_ip("127.0.0.1") works fine@settings.should_be allow_publish_ip("127.0.0.1") is it
On 3/14/07, Pat Maddox <pergesu at gmail.com> wrote:> On 3/14/07, Pat Maddox <pergesu at gmail.com> wrote: > > @settings.should allow_publish_ip("127.0.0.1") fails with > > undefined method `allow_publish_ip'' for #<#<Class:0x2f8fd48>:0x2f5a968> > > > > @settings.should_allow_publish_ip("127.0.0.1") works fine > > @settings.should_be allow_publish_ip("127.0.0.1") is itUnless I''m mistaken (David?) that''s deprecated and will disappear. I believe the way forward is: @settings.should be_allow_publish_ip("127.0.0.1") Aslak> _______________________________________________ > rspec-users mailing list > rspec-users at rubyforge.org > http://rubyforge.org/mailman/listinfo/rspec-users >
David Chelimsky
2007-Mar-14 22:48 UTC
[rspec-users] What''s the new syntax for predicates?
On 3/14/07, aslak hellesoy <aslak.hellesoy at gmail.com> wrote:> On 3/14/07, Pat Maddox <pergesu at gmail.com> wrote: > > On 3/14/07, Pat Maddox <pergesu at gmail.com> wrote: > > > @settings.should allow_publish_ip("127.0.0.1") fails with > > > undefined method `allow_publish_ip'' for #<#<Class:0x2f8fd48>:0x2f5a968> > > > > > > @settings.should_allow_publish_ip("127.0.0.1") works fine > > > > @settings.should_be allow_publish_ip("127.0.0.1") is it > > Unless I''m mistaken (David?) that''s deprecated and will disappear. I > believe the way forward is: > > @settings.should be_allow_publish_ip("127.0.0.1")Sad, but true. You need to prefix w/ be_ because don''t want to have method_missing doing any more magic than handling methods that start w/ be_ or have_. If you find this unpleasant, you can always provide your own helper methods. Here''s a hack that you can use. Maybe we should add this to rspec? require ''rubygems'' gem ''rspec'' require ''spec'' def predicate_matchers(*args) args.each do |arg| define_method(arg) do |*args| send "be_#{arg}", *args end end end class Thing def allow_publish_ip?(ip) true end end describe Thing do predicate_matchers :allow_publish_ip it "should allow publish ip 123" do Thing.new.should allow_publish_ip(123) end end> > Aslak > > > _______________________________________________ > > rspec-users mailing list > > rspec-users at rubyforge.org > > http://rubyforge.org/mailman/listinfo/rspec-users > > > _______________________________________________ > rspec-users mailing list > rspec-users at rubyforge.org > http://rubyforge.org/mailman/listinfo/rspec-users >
One of the most compelling things about rSpec is the English-like way
it reads. I''d vote for anything that keeps it that way. If both can
"should" and "should be" can be supported it captures things
like:
email.to.should include(''me at mydomain.com'')
and
my_ar_object.should be_valid
Just my $.02.
Steve
On Mar 14, 2007, at 3:48 PM, David Chelimsky wrote:
> On 3/14/07, aslak hellesoy <aslak.hellesoy at gmail.com> wrote:
>> On 3/14/07, Pat Maddox <pergesu at gmail.com> wrote:
>>> On 3/14/07, Pat Maddox <pergesu at gmail.com> wrote:
>>>> @settings.should allow_publish_ip("127.0.0.1") fails
with
>>>> undefined method `allow_publish_ip'' for
#<#<Class:0x2f8fd48>:
>>>> 0x2f5a968>
>>>>
>>>> @settings.should_allow_publish_ip("127.0.0.1") works
fine
>>>
>>> @settings.should_be allow_publish_ip("127.0.0.1") is it
>>
>> Unless I''m mistaken (David?) that''s deprecated and
will disappear. I
>> believe the way forward is:
>>
>> @settings.should be_allow_publish_ip("127.0.0.1")
>
> Sad, but true. You need to prefix w/ be_ because don''t want to
have
> method_missing doing any more magic than handling methods that start
> w/ be_ or have_.
>
> If you find this unpleasant, you can always provide your own helper
> methods. Here''s a hack that you can use. Maybe we should add this
to
> rspec?
>
> require ''rubygems''
> gem ''rspec''
> require ''spec''
>
> def predicate_matchers(*args)
> args.each do |arg|
> define_method(arg) do |*args|
> send "be_#{arg}", *args
> end
> end
> end
>
> class Thing
> def allow_publish_ip?(ip)
> true
> end
> end
>
> describe Thing do
> predicate_matchers :allow_publish_ip
> it "should allow publish ip 123" do
> Thing.new.should allow_publish_ip(123)
> end
> end
>
>>
>> Aslak
>>
>>> _______________________________________________
>>> rspec-users mailing list
>>> rspec-users at rubyforge.org
>>> http://rubyforge.org/mailman/listinfo/rspec-users
>>>
>> _______________________________________________
>> rspec-users mailing list
>> rspec-users at rubyforge.org
>> http://rubyforge.org/mailman/listinfo/rspec-users
>>
> _______________________________________________
> rspec-users mailing list
> rspec-users at rubyforge.org
> http://rubyforge.org/mailman/listinfo/rspec-users
David Chelimsky
2007-Mar-15 03:51 UTC
[rspec-users] What''s the new syntax for predicates?
On 3/14/07, s.ross <cwdinfo at gmail.com> wrote:> One of the most compelling things about rSpec is the English-like way > it reads. I''d vote for anything that keeps it that way. If both can > "should" and "should be" can be supported it captures things like: > > email.to.should include(''me at mydomain.com'') > > and > > my_ar_object.should be_valid > > Just my $.02.It happens that #include is supported, but explicitly, not by magic. The thing that I want to avoid is method_missing causing headaches for both users and maintainers. With my suggestion earlier this thread, this could be solved - just not automatic. So you could say predicate_matchers :absolutely_anything and then object.should absolutely_anything and it would pass if object.absolutely_anything? So you''d be able to get the nice natural language feel, but at a small price. WDYT? The reason that supporting any arbitrary anything using method_messing is problematic is that we don''t know if the method is missing from the context or the object being spec''d. So not finding it would produce a message like: RSpec could not find the method #absolutely_anything. You need to either define #absolutely_anything in the context or #absolutely_anything? on your object. I don''t know about you, but that would really piss me off if I saw that. I just wrote it and I have no idea what it means :) Thoughts? David> > Steve > > > On Mar 14, 2007, at 3:48 PM, David Chelimsky wrote: > > > On 3/14/07, aslak hellesoy <aslak.hellesoy at gmail.com> wrote: > >> On 3/14/07, Pat Maddox <pergesu at gmail.com> wrote: > >>> On 3/14/07, Pat Maddox <pergesu at gmail.com> wrote: > >>>> @settings.should allow_publish_ip("127.0.0.1") fails with > >>>> undefined method `allow_publish_ip'' for #<#<Class:0x2f8fd48>: > >>>> 0x2f5a968> > >>>> > >>>> @settings.should_allow_publish_ip("127.0.0.1") works fine > >>> > >>> @settings.should_be allow_publish_ip("127.0.0.1") is it > >> > >> Unless I''m mistaken (David?) that''s deprecated and will disappear. I > >> believe the way forward is: > >> > >> @settings.should be_allow_publish_ip("127.0.0.1") > > > > Sad, but true. You need to prefix w/ be_ because don''t want to have > > method_missing doing any more magic than handling methods that start > > w/ be_ or have_. > > > > If you find this unpleasant, you can always provide your own helper > > methods. Here''s a hack that you can use. Maybe we should add this to > > rspec? > > > > require ''rubygems'' > > gem ''rspec'' > > require ''spec'' > > > > def predicate_matchers(*args) > > args.each do |arg| > > define_method(arg) do |*args| > > send "be_#{arg}", *args > > end > > end > > end > > > > class Thing > > def allow_publish_ip?(ip) > > true > > end > > end > > > > describe Thing do > > predicate_matchers :allow_publish_ip > > it "should allow publish ip 123" do > > Thing.new.should allow_publish_ip(123) > > end > > end > > > >> > >> Aslak > >> > >>> _______________________________________________ > >>> rspec-users mailing list > >>> rspec-users at rubyforge.org > >>> http://rubyforge.org/mailman/listinfo/rspec-users > >>> > >> _______________________________________________ > >> rspec-users mailing list > >> rspec-users at rubyforge.org > >> http://rubyforge.org/mailman/listinfo/rspec-users > >> > > _______________________________________________ > > rspec-users mailing list > > rspec-users at rubyforge.org > > http://rubyforge.org/mailman/listinfo/rspec-users > > _______________________________________________ > rspec-users mailing list > rspec-users at rubyforge.org > http://rubyforge.org/mailman/listinfo/rspec-users >
Apparently Analagous Threads
- Using Predicates to look at an array..
- RSpec on Ruby 1.9: before(:all) (Not Yet Implemented) pending messages instead of tests
- [LLVMdev] inlining hint
- [PATCH v3 08/16] zsmalloc: squeeze freelist into page->mapping
- [PATCH v3 08/16] zsmalloc: squeeze freelist into page->mapping