I am in agreement with Jeremy et. al. The length of a given Array doesn't change unless you operate on it; the length of a Dataset can and does. Datasets != Arrays. This is an easy monkey-patch if you are okay with calling count(*) unawares.
I don't have an opinion about the validation stuff. Tyler On Wednesday, March 28, 2012 11:21:59 AM UTC-5, rohit wrote: > > On Wednesday, March 28, 2012 8:54:36 AM UTC-5, Jason Rogers wrote: >> >> I don't like the idea of aliasing #count to #length. It's really not the >> same thing. I feel that the length method carries a connotation that count >> does not imply. Datasets are enumerable but they are not Arrays. They >> shouldn't be treated as Arrays. >> >> RE: the validation, I've no opinion. I don't tend to use the validations. >> >> On Tuesday, March 27, 2012 7:26:37 AM UTC-4, Tom Wardrop wrote: >>> >>> I just have a couple of suggestions for Sequel that I'd like to get some >>> community feedback on, hopefully getting a bit of weight behind them so >>> there's less debate over implementing these changes. >>> >>> 1) I believe #length should be added to Sequel::Dataset as an alias of >>> #count / #size? My rationale here is one of principle of least >>> surprise. Besides Sequel, I don't know of any other library that has an >>> objects that implements a length-like method but calls it something >>> different to every other Ruby library. I've been using Sequel for 6 months >>> now and still make the mistake of calling #length. While I respect the >>> argument that this helps force people to distinguish between an Array and a >>> Dataset, I don't think that ideal takes human nature into account. >>> >>> 2) While I like the simplicity of the validation implementation, I'd >>> like so see an alternate "smarter" interface. The problem I have at the >>> moment is that for a given field, I may have numerous validation checks. >>> Typically, if a field fails validation once, you don't want all the >>> validation that apply to that field to be run. I'll present an example >>> problem scenario below, and then demonstrate how it could be handled more >>> gracefully if Sequel had a smarter validation syntax. >>> >>> https://gist.github.com/2214994 >>> >>> There's a couple of advantages to the new syntax demonstrated in that >>> example. The first problem with current validation strategy is that if >>> :place_id is not present, the second validation will continue to run, >>> raising a method_missing exception as clearly if :place_id is not present, >>> then the :place association is going to be nil. These circumstances can >>> sometimes be hard to spot, and may not come pop up in testing for some >>> time. The second problem is that some validations could be expensive, so >>> you only want to validate data that hasn't already been deemed invalid. I >>> may not be checking the parent_id of the associated place, but may instead >>> be querying an external web service, as you may do if validating an entered >>> URL or the existence of a remote object. There's also a third advantage, >>> and that is that the new syntax is more concise. The condition is implied >>> (no need for "unless" keyword) an a block wraps better than a trailing >>> condition. You also get a private variable scope which you know what >>> conflict with any other variable that may be used for other validations. >>> >>> The implementation would be really simple. It's a matter of adding a new >>> method #validates (or even just allowing Sequel::Model::Errors#add to take >>> a block). This method checks the Errors hash to see if there are any errors >>> for the current field. If there isn't, the block is run. A return value >>> that resolves to true is considered a pass, a value that resolves to false >>> is considered a fail. >>> >>> Thoughts on those two suggestions? >>> >> > I also don't like the idea of aliasing #length to #count, mainly for the > reason Jeremy posted, #count is not idempotent. > > As far as validations, don't use them much so I don't have a strong > opinion. But would not like the current behavior to change since we do > report all failures to the user. > > Rohit > -- You received this message because you are subscribed to the Google Groups "sequel-talk" group. To view this discussion on the web visit https://groups.google.com/d/msg/sequel-talk/-/tKjj2UcqOykJ. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/sequel-talk?hl=en.
