On Thu, Jun 23, 2011 at 06:10:17PM +0200, Simone Carletti wrote:
> 
> I'm experimenting with the development version of Ruote (primary because I'd
> love to give you a feedback about the new "temporary fields feature") and I
> just noticed a compatibility break with Ruote 2.2.0.
> 
> This is the diff.
> https://github.com/jmettraux/ruote/compare/v2.2.0...master#diff-39
> 
> I have the following piece of code
> 
>     class MyClass
>       def by_user(user)
>         list = $engine.storage_participant.select do |workitem|
>           workitem.target_includes?(user)
>         end
>         list.map { |w| new(w) }
>       end
>     end
> 
> It worked with Ruote 2.2.0 but now it raises the error
> 
>      NoMethodError:
>        protected method `select' called for
> #<Ruote::StorageParticipant:0x105251da8>
> 
> because you defined a new #select method on the StorageParticipant class.
> This method overrides the default enumerable#select method and it also
> changes the method API.
> Is it intentional?

Hello Simone,

excellent !

No this is not intentional. You are right, preserving the benefits of 
Enumerable is a must.

  
https://github.com/jmettraux/ruote/commit/ff0eeb01c0cbca0e04e3b309d9b15750a933c1d5

If the issue is not completely fixed by the commit, please tell me.

> Also, I noticed you changed the fetch_all API and the parameter is no longer
> optional. It doesn't really affect my code but I believe this change make
> some methods incoherent with others, like for example the #all(opt = {})
> method.
> https://github.com/jmettraux/ruote/compare/v2.2.0...master#L39L156

OK, #fetch_all(opts) is a protected method, other, public, methods are using it 
and they can deal with that non-optional opts thing.

Most of the methods using fetch_all are test covered (unlike the Enumerable 
provided #select) and there were no issues so far.

I did a check run for fetch_all in the ruote codebase :

---8<---
jmettraux@sanma ~/w/ruote (master) 円 ak fetch_all lib/

lib/ruote/part/storage_participant.rb
160:        fetch_all(:count => true)
174:        res = fetch_all(opts)
184:        wi(fetch_all({}).first)
274:          @context.storage.get_many('workitems', wfid, opts) : 
fetch_all(opts)
289:        fetch_all({}).each { |hwi| @context.storage.delete(hwi) }
338:      def fetch_all(opts)
355:        hwis = fetch_all({})
jmettraux@sanma ~/w/ruote (master) 円 ak fetch_all ../ruote-beanstalk/lib/
jmettraux@sanma ~/w/ruote (master) 円 ak fetch_all ../ruote-redis/lib/
jmettraux@sanma ~/w/ruote (master) 円 ak fetch_all ../ruote-dm/lib/
jmettraux@sanma ~/w/ruote (master) 円 ak fetch_all ../ruote-sequel/lib/
jmettraux@sanma ~/w/ruote (master) 円 ak fetch_all ../ruote-couch/lib/
jmettraux@sanma ~/w/ruote (master) 円 
--->8---

there is no #fetch_all call without an hash argument.

It's OK for users of the public methods to drop the optional "opts", while I 
force myself (as author of StorageParticipant) to provide a "opts" Hash when 
calling #fetch_all.


Thanks again !

-- 
John Mettraux - http://jmettraux.wordpress.com

-- 
you received this message because you are subscribed to the "ruote users" group.
to post : send email to [email protected]
to unsubscribe : send email to [email protected]
more options : http://groups.google.com/group/openwferu-users?hl=en

Reply via email to