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/-/WO1whjXxfTwJ. 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.
