[#374683] A algorithm for finding the number — zuerrong <zuerrong@...>

Hi members,

11 messages 2010/12/01

[#374721] FasterCSV parsing issues — Jeremy Woertink <jeremywoertink@...>

I'm using FasterCSV to do an import into my DB, and the CSV file

14 messages 2010/12/01

[#374765] Singleton class, metaclass, eigenclass: what do they mean? — Tony Arcieri <tony.arcieri@...>

Every time I think I have my head around what these terms mean I seem to run

29 messages 2010/12/02
[#374783] Re: Singleton class, metaclass, eigenclass: what do they mean? — Intransition <transfire@...> 2010/12/02

[#374787] Re: Singleton class, metaclass, eigenclass: what do they mean? — Gary Wright <gwtmp01@...> 2010/12/02

[#374803] Re: Singleton class, metaclass, eigenclass: what do they mean? — Intransition <transfire@...> 2010/12/02

[#374825] Re: Singleton class, metaclass, eigenclass: what do they mean? — Tony Arcieri <tony.arcieri@...> 2010/12/02

On Thu, Dec 2, 2010 at 11:50 AM, Intransition <transfire@gmail.com> wrote:

[#374830] Re: Singleton class, metaclass, eigenclass: what do they mean? — Intransition <transfire@...> 2010/12/02

[#374832] Re: Singleton class, metaclass, eigenclass: what do they mean? — Tony Arcieri <tony.arcieri@...> 2010/12/02

On Thu, Dec 2, 2010 at 4:18 PM, Intransition <transfire@gmail.com> wrote:

[#374834] Re: Singleton class, metaclass, eigenclass: what do they mean? — Gary Wright <gwtmp01@...> 2010/12/02

[#374835] Re: Singleton class, metaclass, eigenclass: what do they mean? — Tony Arcieri <tony.arcieri@...> 2010/12/02

On Thu, Dec 2, 2010 at 4:55 PM, Gary Wright <gwtmp01@mac.com> wrote:

[#374844] Re: Singleton class, metaclass, eigenclass: what do they mean? — Gary Wright <gwtmp01@...> 2010/12/03

[#374850] Re: Singleton class, metaclass, eigenclass: what do they mean? — Peter Vandenabeele <peter@...> 2010/12/03

On Fri, Dec 3, 2010 at 5:05 AM, Gary Wright <gwtmp01@mac.com> wrote:

[#374903] Re: Singleton class, metaclass, eigenclass: what do they mean? — Tony Arcieri <tony.arcieri@...> 2010/12/04

On Fri, Dec 3, 2010 at 1:17 AM, Peter Vandenabeele

[#374924] Re: Singleton class, metaclass, eigenclass: what do they mean? — Peter Vandenabeele <peter@...> 2010/12/04

On Sat, Dec 4, 2010 at 4:37 AM, Tony Arcieri <tony.arcieri@medioh.com> wrote:

[#374954] Re: Singleton class, metaclass, eigenclass: what do they mean? — Rick DeNatale <rick.denatale@...> 2010/12/05

On Sat, Dec 4, 2010 at 2:56 PM, Peter Vandenabeele

[#374786] Screen scraping an aspx site with Mechanize — Sofie Willander <sofiewil@...>

Hi,

11 messages 2010/12/02

[#374875] cast object to object — "David E." <davidreynon@...>

So I have an object of class (user defined) Dave() and Dave2()

13 messages 2010/12/03

[#374960] Q: what database would you suggest? — Diego Virasoro <diego.virasoro@...>

Hi,

18 messages 2010/12/05

[#375002] Traverse YAML node tree with non-unique values — "Martin C." <mydoghasworms@...>

I have a YAML document which I believe is valid (at least it would be

11 messages 2010/12/06

[#375018] Manual Memory Management and Automatic Garbage Collection — Tridib Bandopadhyay <tridib04@...>

Hello all

27 messages 2010/12/06

[#375118] HTTP POST request --> Ruby server — Chananya Freiman <thebluedragont@...>

I am making a tiny web server, and I am having problems with HTTP POST

17 messages 2010/12/07

[#375149] ruby book — abe <abedar2000@...>

i am looking for a good ruby book for a developer who has a c

14 messages 2010/12/08

[#375170] Consume Soap Service with Basic Authentication — Chris Gunnels <rfsllc@...>

I have been searching and trying different gems to get this to work, but

10 messages 2010/12/08

[#375192] Splitting on capital letters — Ralph Shnelvar <ralphs@...32.com>

Assume I have camelized string like

13 messages 2010/12/08

[#375213] Making a Website with Ruby (not rails?) — Jesse Jurman <e.j.jurman@...>

I have been programming in Ruby for a while and have made several

12 messages 2010/12/09

[#375270] Help with net/http — Atomic Bomb <atomicmcbomb@...>

I am trying to screen scrape a webpage and pull out the name, address,

19 messages 2010/12/09
[#375273] Re: Help with net/http — Alex Stahl <astahl@...5.com> 2010/12/09

Nokogiri provides a great interface for accessing the data trapped

[#375285] Re: Help with net/http — "A. Mcbomb" <atomicmcbomb@...> 2010/12/10

Thanks Alex.

[#375289] Re: Help with net/http — Jes俍 Gabriel y Gal疣 <jgabrielygalan@...> 2010/12/10

On Fri, Dec 10, 2010 at 6:28 AM, A. Mcbomb <atomicmcbomb@gmail.com> wrote:

[#375291] Re: Help with net/http — "A. Mcbomb" <atomicmcbomb@...> 2010/12/10

I didn't realized that, Jesus but it didn't help in my installation.

[#375292] Re: Help with net/http — Jes俍 Gabriel y Gal疣 <jgabrielygalan@...> 2010/12/10

On Fri, Dec 10, 2010 at 10:48 AM, A. Mcbomb <atomicmcbomb@gmail.com> wrote:

[#375293] Re: Help with net/http — "A. Mcbomb" <atomicmcbomb@...> 2010/12/10

That definately helped, Jesus....thanks.

[#375295] Re: Help with net/http — Jes俍 Gabriel y Gal疣 <jgabrielygalan@...> 2010/12/10

On Fri, Dec 10, 2010 at 11:39 AM, A. Mcbomb <atomicmcbomb@gmail.com> wrote:

[#375298] Re: Help with net/http — "A. Mcbomb" <atomicmcbomb@...> 2010/12/10

Here's what my server is running:

[#375424] Instiki failing to run - msvcrt-ruby18.dll not found — John Smth <blip@...>

Hi

16 messages 2010/12/14

[#375442] do your bit for my mental health - how to find the difference between two strings? — Iain Barnett <iainspeed@...>

Hi,

22 messages 2010/12/14

[#375537] Ruby and science ? — Michel Demazure <michel@...>

I am really puzzled.

56 messages 2010/12/16
[#375538] Re: Ruby and science ? — Phillip Gawlowski <cmdjackryan@...> 2010/12/16

On Thu, Dec 16, 2010 at 11:19 AM, Michel Demazure <michel@demazure.com> wrote:

[#375569] Re: Ruby and science ? — Ryan Davis <ryand-ruby@...> 2010/12/16

[#375581] Re: Ruby and science ? — Michel Demazure <michel@...> 2010/12/17

Ryan Davis wrote in post #968969:

[#375582] Re: Ruby and science ? — Phillip Gawlowski <cmdjackryan@...> 2010/12/17

On Friday, December 17, 2010, Michel Demazure <michel@demazure.com> wrote:

[#375584] Re: Ruby and science ? — Michel Demazure <michel@...> 2010/12/17

Phillip Gawlowski wrote in post #969006:

[#375557] Re: Ruby and science ? — Tony Arcieri <tony.arcieri@...> 2010/12/16

On Thu, Dec 16, 2010 at 3:19 AM, Michel Demazure <michel@demazure.com>wrote:

[#375560] Re: Ruby and science ? — Michel Demazure <michel@...> 2010/12/16

Tony Arcieri wrote in post #968904:

[#375567] Re: Ruby and science ? — Colin Bartlett <colinb2r@...> 2010/12/16

On Thu, Dec 16, 2010 at 6:36 PM, Michel Demazure <michel@demazure.com>wrote:

[#375664] Re: Ruby and science ? — Charles Oliver Nutter <headius@...> 2010/12/18

On Thu, Dec 16, 2010 at 5:15 PM, Colin Bartlett <colinb2r@googlemail.com> wrote:

[#375675] Re: Ruby and science ? — "ara.t.howard" <ara.t.howard@...> 2010/12/18

[#375681] Re: Ruby and science ? — Charles Oliver Nutter <headius@...> 2010/12/19

On Sat, Dec 18, 2010 at 1:00 PM, ara.t.howard <ara.t.howard@gmail.com> wrot=

[#375687] Re: Ruby and science ? — James Edward Gray II <james@...> 2010/12/19

On Dec 18, 2010, at 6:24 PM, Charles Oliver Nutter wrote:

[#375590] Is programming art? — Yu-Hsuan Lai <raincolee@...>

(I'm a high school student confused by this concept)

23 messages 2010/12/17

[#375706] Regexp, String, Symbol literals' object_ids — "Pavel R." <pavel.rosputko@...>

Regexp literals:

14 messages 2010/12/19

[#375725] downloading a file — Rajinder Yadav <devguy.ca@...>

hello what is the best way to download a file?

12 messages 2010/12/20

[#375787] how to know a search result is successfully displayed through its source codes — Fan Jin <jeff_yq@...>

I am working on a project where need to search a keyword by using simple

9 messages 2010/12/21
[#375805] Re: how to know a search result is successfully displayed through its source codes — Jeremy Bopp <jeremy@...> 2010/12/21

On 12/21/2010 01:24 AM, Fan Jin wrote:

[#375839] gem install ruby-debug-ide errors don't give me anything to look for. — Kedar Mhaswade <kedar.mhaswade@...>

Hope I am not missing something obvious. I have searched high and low.

11 messages 2010/12/22

[#375908] What is the the best style and theory of writing a complier in your language — small Pox <smallpox911@...>

What is the the best style and theory of writing a complier in your

8 messages 2010/12/23

[#375921] Numeric comparison with nil - Math masochists only!! — serialhex <serialhex@...>

Alright, i'm trying to do three things at once, and I'm almost succeeding.

17 messages 2010/12/24
[#375950] Re: Numeric comparison with nil - Math masochists only!! — Colin Bartlett <colinb2r@...> 2010/12/24

On Fri, Dec 24, 2010 at 3:45 AM, serialhex <serialhex@gmail.com> wrote:

[#375955] Re: Numeric comparison with nil - Math masochists only!! — serialhex <serialhex@...> 2010/12/25

Colin, your amazing insight has led me to programming greatness!!!

[#376011] Re: Numeric comparison with nil - Math masochists only!! — Robert Klemme <shortcutter@...> 2010/12/27

On Sat, Dec 25, 2010 at 2:34 AM, serialhex <serialhex@gmail.com> wrote:

[#376053] Re: Numeric comparison with nil - Math masochists only!! — serialhex <serialhex@...> 2010/12/28

hey robert, thanks for the great article, i'll keep that stuff in mind as

[#376057] Re: Numeric comparison with nil - Math masochists only!! — Everett L Williams II <rett@...> 2010/12/28

serialhex wrote:

[#376063] Re: Numeric comparison with nil - Math masochists only!! — serialhex <serialhex@...> 2010/12/28

>

[#376060] From python to ruby — AM <al.ma@...>

Hello

18 messages 2010/12/28

[#376066] Should I learn Ruby? — Din Ibbles <d.sp@...>

I am wondering whether to learn Ruby, as I would like to get a job after

21 messages 2010/12/28

[#376075] convert String "1;2;3;4;5;" to Array [1, 2, 3, 4, 5] — "Thomas T." <tthackery@...>

I'm trying to convert a String of numbers that are separated by

10 messages 2010/12/28

[#376153] Parsing the Ruby File — "Thillai S." <thillaiselvan@...>

Hai any one pls guide me...

15 messages 2010/12/30

Re: Where To Put Validation Logic?

From: David Masover <ninja@...>
Date: 2010-12-31 15:27:19 UTC
List: ruby-talk #376226
On Thursday, December 30, 2010 09:08:23 pm Tom Wardrop wrote:
> I'm developing a Mongo object mapper for Ruby, inspired by Candy's
> write-on-set approach. I'm currently still in the planning phase, trying
> to work out the scope of the project and the most appropriate interface.

I may be trying to shoehorn this into what I already know, but I think this 
could be done well as a DataMapper adapter, rather than as an entirely new 
ORM. (Better yet, does the existing DataMapper adapter do what you want?) If 
that's the case, the obvious answer is:

> One question I now find myself asking, is whether to include validation
> helpers, and if so, where should they reside? In the model, or in the
> controller?

DataMapper already includes them, and puts them in the model.

> Will the mapper act as a foundation for all models (like most mappers),
> or will it be more like a tool that models will simply use, if they have
> to - something I'm still undecided on, but which I'm hoping this thread
> may help me with.

I would suggest that if there isn't already a good Ruby API for this kind of 
stuff, start with that. It might take a form that essentially looks like a 
mapper, but it really doesn't need to do any validation.

For example, look at dm-appengine. (I might be a teensy-bit biased here...) 
There's already a somewhat clumsy Java API, which appengine-jruby enhances 
_slightly_. It includes some of what you'd expect from an ORM, in that you do 
get "entity" objects which represent the state of an entity in the datastore. 
But fundamentally, the entire Java API, while it _could_ be used directly (and 
would be much nicer than writing raw GQL), is just a backend for dm-appengine.

The biggest change App Engine makes is removing some features and adding some 
types. This is actually pretty reasonable to do in DataMapper now.

In the case of Mongo, it looks like the biggest thing DataMapper doesn't do 
already is the ability to atomically update a single field -- for instance, it 
might be nice to declare a field as 'immediate' in some sense, so you could 
translate:

joe.n += 1

into something like the Mongo command:

db.people.update( { name:"Joe" }, { $inc: { n : 1 } } );

It's not perfect, because that entails actually retrieving the object first, 
but the problems here are more or less the same as the problems of writing an 
efficient 'update' command for SQL.

> If you look at validations as a means to ensure data integrity,
> then naturally, such logic should reside in the model; the data layer of
> the application. On the other hand, looking at validation as a means to
> validate user input and interactions with the UI, you would think the
> controller would be the better fit.

Not really.

If it's validation, what we're talking about is answering the question, "What 
states are valid for this object, and what are the valid transitions between 
those states?" It makes sense to me that this should be in the model, and that 
it is _always_ a data integrity question.

Think of it this way: If you were to create another controller, or another 
view -- basically, if there were another UI, or even an entirely different 
program accessing your data -- would you want it to obey the same constraints? 
If so, how are you going to share them? The model is the most obvious place.

It also makes sense to me that it belongs in the model, and no lower -- while 
some databases may support a subset of the validations you want, you're going 
to want something Turing-complete. And if you end up writing lots of Turing-
complete validations in your database layer, that's pushing too much of your 
application logic into your database. If you want multiple applications to be 
able to access the same database, either share the model code or expose an API 
on top of your application, something like REST.

I actually tend to favor the REST approach, which would tend to make this a 
moot question -- if you actually use MVC to expose that API, everything is 
going to hit your controllers anyway. But conceptually, all that's really 
doing is using an MVC framework to implement the model as a network service, 
rather than as part of a monolithic application.

> A good example that
> demonstrates this, is assume you had an application that can accept a
> home phone number, a work phone number, and a mobile/cell phone number.
> No field is mandatory, but at least one phone number must be given. You
> could call this multi-field validation.

I would.

> In theory, the data layer of
> your application shouldn't give a damn about whether or not at least one
> phone number is set.

Why not?

The way I see it, either you require at least one phone number, or you don't. 
If you do, presumably your application has a good reason to care, a good 
reason it's inconveniencing the user by forcing them to give you a phone 
number.

If your application doesn't give a damn, why should your users?

> All the data layer should care about is whether it
> has a valid phone or not.

But that's just it -- I see a valid phone as a component of a valid... 
whatever record you're applying that to. (User? Employee? Contact?)

Having a valid record absolutely _is_ the responsibility of the model, at 
least.

> How I see it, such "multi-field" validation
> can be classed as general application logic which should be the
> responsibility of the view/controller, not the data layer, who's only
> responsible should be persisting the data.

Maybe not the data layer, but I don't think it belongs in the controller, and 
certainly not the view!

> Remember, one the main reasons for bringing up this topic, is because
> I'm writing a Mongo object mapper that writes to Mongo when a field is
> set, hence such multi-field validation can't easily be achieved.

Why not?

Take it from the standpoint of locking in a traditional database. Either you 
need some sort of locks to preserve data integrity, in which case you can be 
sure the change you've made is valid, or you don't, and you can't. Take your 
phone number example -- if you were to implement it on top of the API you've 
described, you've got a race condition which could result in a record having 
no phone numbers, and thus being invalid, even though your UI forced the user 
to enter a phone number.

But just because you've decided to dismiss the possibility of that race 
condition (or prevent it some other way) doesn't mean you can't do _any_ 
validation on the entire record. It's no reason you can't have code which 
pulls in the other two phone number fields and checks that at least one of the 
three has a valid phone number before writing all three back out.

And I think that's how DM validations would effectively work. I think that's 
how they _do_ effectively work with SQL. DataMapper is just lazy enough that 
it's certainly capable of reading as much of a record as it needs (and of 
lazily ignoring fields it doesn't) and then writing only the fields it thinks 
it's updating. In fact, if you don't need to retreive an object, you can also 
do things like:

Person.all(:name => 'Joe').update(:n => 5)

I'm pretty sure that translates directly into the SQL you'd expect -- a single 
mass UPDATE statement. I'm pretty sure it'd work more or less the same way in 
a Mongo adapter.

In This Thread