property() for virtual attributes
Reported by Yaroslaff Fedin | April 19th, 2008 @ 02:00 AM | in 0.9.0
It'd be great to have a way to define virtual properties via the same DSL as the usual properties. The main reason, is auto-validations.
It makes sense to omit some options for virtual attributes, such as :public, :lazy, :lock, etc.
And some options are questionable, like :default. I think it's OK to pass a :default value to virtual attribute accessor on instantiating a model.
Comments and changes to this ticket
-
Dan Kubb April 19th, 2008 @ 03:04 AM
- → State changed from new to open
- → Milestone changed from to 0.9.0
I would implement this using the standard property() method, and have it accept an argument like :persistable => true|false, or maybe :virtual => true|false.
-
-
Adam French May 7th, 2008 @ 09:02 PM
can we use DataMapper::Validate on attr_accessors, rather than full properties?
class Thing include DataMapper::Resource include DataMapper::Validate # properties here attr_accessor :woo validates_presence_of :woo validates_format_of :woo, :with => /^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})/i endif so, then we don't really need :virtual
-

Nathan Herald May 8th, 2008 @ 07:54 AM
I think an advantage of doing it through the property method is that you can have default and dirtiness. Although dirtiness may get in the way during saving, so I am not sure on that one.
-
Sam Smoot May 8th, 2008 @ 02:39 PM
- → State changed from open to invalid
Ah yes. Having them go into dirty attributes would screw things up. And since you can already validate arbitrary accessors, the only use-case for this is :default. Which you can also handle by overwriting #initialize.
I think for now it might not be as compelling an idea as I thought. I'm going to close this for now and see if it comes back up in the future...
Please Login or create a free account to add a new comment.
You can update this ticket by sending an email to from your email client. (help)
Create your profile
Help contribute to this project by taking a few moments to create your personal profile. Create your profile »
