[prev] [thread] [next] [Date index for 2006/02/21]
This is a cryptographically signed message in MIME format. --===============1685699023== Content-Type: multipart/signed; protocol="application/x-pkcs7-signature"; micalg=sha1; boundary="------------ms080503070700000501060206" This is a cryptographically signed message in MIME format. --------------ms080503070700000501060206 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Dan Lenski wrote: > The problem is that the output of the freeze() function is simply a > string, and the output of thaw() can have pretty much any type at all. > Class::DBI::Relationship::HasA doesn't like this state of affairs > since it expects a specific class. > > First, I tried this: > > __PACKAGE__->has_a(udata => 'UNIVERSAL', inflate => sub { freeze > \shift }, deflate => sub { my $d=shift; $d and ${thaw $d} }); > > This doesn't work, it complains about "unable to find new method for > UNIVERSAL class". Plus, it won't work at all if the inflated item > happens not to be a blessed reference :-( 1) thaw/freeze - inflate/deflate, that's the right process ;-) 2) forgot to bless the inflated reference: __PACKAGE__->has_a( udata => 'MyFridge', inflate => sub { bless thaw(shift), 'MyFridge' }, deflate => sub { freeze(shift) } ); now you have it... > So, next I tried making a stupid little wrapper class ... so I agree on its quality (err, usefulness?) ;-) > Now, I can access the data via $obj->udata->data $obj->udata is enough now. > but when I modify the data with the accessor, Class::DBI doesn't > realize it has changed and won't actually update the database :-( If you mean something like $obj->udata->{foo} = 'bar'; then remember the "udata" just provides access to that _reference_ (which will not be noticed by CDBI whenever you modify something "inside"). Else, if you meant (which you should've): $obj->udata({foo => 'bar'}); you should add a trigger to take care of preparing your data, as (obviously) CDBI expects your data to be already inflated upon "set": __PACKAGE__->add_trigger(before_set_udata => sub { my ($self, $value) = @_; if (!defined $value || !ref $value) { $self->_croak('I only work with data references!'); } if (!blessed($value) || ref $value ne 'MyFridge') { my $blessed_value = bless $value, 'MyFridge'; $self->_attribute_store({ udata => $blessed_value }); } }); ("blessed" is in Scalar::Util - core module) cheers - -- Marius Feraru -----BEGIN PGP SIGNATURE----- iD8DBQFD+mrMtZHp/AYZiNkRAk6EAJ9x4mlycvtDuppybO08kEVTNqY2dQCfdHbz tNsppv0rEakBSc9SIb3yGD0= =66xz -----END PGP SIGNATURE----- --------------ms080503070700000501060206 Content-Type: application/x-pkcs7-signature; name="smime.p7s" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="smime.p7s" Content-Description: S/MIME Cryptographic Signature MIAGCSqGSIb3DQEHAqCAMIACAQExCzAJBgUrDgMCGgUAMIAGCSqGSIb3DQEHAQAAoIII4TCC AsswggI0oAMCAQICAw+1MzANBgkqhkiG9w0BAQQFADBiMQswCQYDVQQGEwJaQTElMCMGA1UE ChMcVGhhd3RlIENvbnN1bHRpbmcgKFB0eSkgTHRkLjEsMCoGA1UEAxMjVGhhd3RlIFBlcnNv bmFsIEZyZWVtYWlsIElzc3VpbmcgQ0EwHhcNMDUxMDIwMTE1NjAxWhcNMDYxMDIwMTE1NjAx WjBBMR8wHQYDVQQDExZUaGF3dGUgRnJlZW1haWwgTWVtYmVyMR4wHAYJKoZIhvcNAQkBFg9h bHRibHVlQG4waS5uZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDO/J6A4U8P T0IC1dji+zdzE9pIw9Wy2JC0dN0kS92KOQuRtmWKVdbyi5XJiZH8QgySY88NwQHNVHC3ieRY aahE5+SbS76nVqX6wAfa7Pv0NRsEF/IZeHC2nXBM6NFDrpyQUNmbQuHCwkw+Hms5A05y4nmC RMroZ542/IDnb3sC2TEwsAI2IqfK6UVnFna7sTt8+3XxhGKcuL7VrHggc6RZvkC1FIuW5odZ Zx58pTPMyaHXbUMVIxYE1ZiN1gCK6uzk4XLz4MjrDL8rq1QxEsWhZJkUErdeY2nDzLpeEAl8 ene48BXUUITjLfPRRgSzQmeVP1IpgNt/BQCb+CNpEiqDAgMBAAGjLDAqMBoGA1UdEQQTMBGB D2FsdGJsdWVAbjBpLm5ldDAMBgNVHRMBAf8EAjAAMA0GCSqGSIb3DQEBBAUAA4GBACCZnaaM fGC9ho2ZgtRrswsqhmfwYdMRfe2DTahNRFwBVpUOGXA7M7d8KQbWu+4mO6Y0O8I7Fd+3ut3z 2Q/AIau4LapDIsJiNF+U2ThFzx2n1l+UsVFIfoXM7FeWGGP+DDESe2a4BpkuTP7fDFHSzYO+ kq1m7gBE6Nf3qOLlorxBMIICyzCCAjSgAwIBAgIDD7UzMA0GCSqGSIb3DQEBBAUAMGIxCzAJ BgNVBAYTAlpBMSUwIwYDVQQKExxUaGF3dGUgQ29uc3VsdGluZyAoUHR5KSBMdGQuMSwwKgYD VQQDEyNUaGF3dGUgUGVyc29uYWwgRnJlZW1haWwgSXNzdWluZyBDQTAeFw0wNTEwMjAxMTU2 MDFaFw0wNjEwMjAxMTU2MDFaMEExHzAdBgNVBAMTFlRoYXd0ZSBGcmVlbWFpbCBNZW1iZXIx HjAcBgkqhkiG9w0BCQEWD2FsdGJsdWVAbjBpLm5ldDCCASIwDQYJKoZIhvcNAQEBBQADggEP ADCCAQoCggEBAM78noDhTw9PQgLV2OL7N3MT2kjD1bLYkLR03SRL3Yo5C5G2ZYpV1vKLlcmJ kfxCDJJjzw3BAc1UcLeJ5FhpqETn5JtLvqdWpfrAB9rs+/Q1GwQX8hl4cLadcEzo0UOunJBQ 2ZtC4cLCTD4eazkDTnLieYJEyuhnnjb8gOdvewLZMTCwAjYip8rpRWcWdruxO3z7dfGEYpy4 vtWseCBzpFm+QLUUi5bmh1lnHnylM8zJoddtQxUjFgTVmI3WAIrq7OThcvPgyOsMvyurVDES xaFkmRQSt15jacPMul4QCXx6d7jwFdRQhOMt89FGBLNCZ5U/UimA238FAJv4I2kSKoMCAwEA AaMsMCowGgYDVR0RBBMwEYEPYWx0Ymx1ZUBuMGkubmV0MAwGA1UdEwEB/wQCMAAwDQYJKoZI hvcNAQEEBQADgYEAIJmdpox8YL2GjZmC1GuzCyqGZ/Bh0xF97YNNqE1EXAFWlQ4ZcDszt3wp Bta77iY7pjQ7wjsV37e63fPZD8Ahq7gtqkMiwmI0X5TZOEXPHafWX5SxUUh+hczsV5YYY/4M MRJ7ZrgGmS5M/t8MUdLNg76SrWbuAETo1/eo4uWivEEwggM/MIICqKADAgECAgENMA0GCSqG SIb3DQEBBQUAMIHRMQswCQYDVQQGEwJaQTEVMBMGA1UECBMMV2VzdGVybiBDYXBlMRIwEAYD VQQHEwlDYXBlIFRvd24xGjAYBgNVBAoTEVRoYXd0ZSBDb25zdWx0aW5nMSgwJgYDVQQLEx9D ZXJ0aWZpY2F0aW9uIFNlcnZpY2VzIERpdmlzaW9uMSQwIgYDVQQDExtUaGF3dGUgUGVyc29u YWwgRnJlZW1haWwgQ0ExKzApBgkqhkiG9w0BCQEWHHBlcnNvbmFsLWZyZWVtYWlsQHRoYXd0 ZS5jb20wHhcNMDMwNzE3MDAwMDAwWhcNMTMwNzE2MjM1OTU5WjBiMQswCQYDVQQGEwJaQTEl MCMGA1UEChMcVGhhd3RlIENvbnN1bHRpbmcgKFB0eSkgTHRkLjEsMCoGA1UEAxMjVGhhd3Rl IFBlcnNvbmFsIEZyZWVtYWlsIElzc3VpbmcgQ0EwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJ AoGBAMSmPFVzVftOucqZWh5owHUEcJ3f6f+jHuy9zfVb8hp2vX8MOmHyv1HOAdTlUAow1wJj WiyJFXCO3cnwK4Vaqj9xVsuvPAsH5/EfkTYkKhPPK9Xzgnc9A74r/rsYPge/QIACZNenpruf ZdHFKlSFD0gEf6e20TxhBEAeZBlyYLf7AgMBAAGjgZQwgZEwEgYDVR0TAQH/BAgwBgEB/wIB ADBDBgNVHR8EPDA6MDigNqA0hjJodHRwOi8vY3JsLnRoYXd0ZS5jb20vVGhhd3RlUGVyc29u YWxGcmVlbWFpbENBLmNybDALBgNVHQ8EBAMCAQYwKQYDVR0RBCIwIKQeMBwxGjAYBgNVBAMT EVByaXZhdGVMYWJlbDItMTM4MA0GCSqGSIb3DQEBBQUAA4GBAEiM0VCD6gsuzA2jZqxnD3+v rL7CF6FDlpSdf0whuPg2H6otnzYvwPQcUCCTcDz9reFhYsPZOhl+hLGZGwDFGguCdJ4lUJRi x9sncVcljd2pnDmOjCBPZV+V2vf3h9bGCE6u9uo05RAaWzVNd+NWIXiC3CEZNd4ksdMdRv9d X2VPMYIDOzCCAzcCAQEwaTBiMQswCQYDVQQGEwJaQTElMCMGA1UEChMcVGhhd3RlIENvbnN1 bHRpbmcgKFB0eSkgTHRkLjEsMCoGA1UEAxMjVGhhd3RlIFBlcnNvbmFsIEZyZWVtYWlsIElz c3VpbmcgQ0ECAw+1MzAJBgUrDgMCGgUAoIIBpzAYBgkqhkiG9w0BCQMxCwYJKoZIhvcNAQcB MBwGCSqGSIb3DQEJBTEPFw0wNjAyMjEwMTIwMTJaMCMGCSqGSIb3DQEJBDEWBBRSzmIQ6a3T LgDEtd4v2NqpZ5H/mjBSBgkqhkiG9w0BCQ8xRTBDMAoGCCqGSIb3DQMHMA4GCCqGSIb3DQMC AgIAgDANBggqhkiG9w0DAgIBQDAHBgUrDgMCBzANBggqhkiG9w0DAgIBKDB4BgkrBgEEAYI3 EAQxazBpMGIxCzAJBgNVBAYTAlpBMSUwIwYDVQQKExxUaGF3dGUgQ29uc3VsdGluZyAoUHR5 KSBMdGQuMSwwKgYDVQQDEyNUaGF3dGUgUGVyc29uYWwgRnJlZW1haWwgSXNzdWluZyBDQQID D7UzMHoGCyqGSIb3DQEJEAILMWugaTBiMQswCQYDVQQGEwJaQTElMCMGA1UEChMcVGhhd3Rl IENvbnN1bHRpbmcgKFB0eSkgTHRkLjEsMCoGA1UEAxMjVGhhd3RlIFBlcnNvbmFsIEZyZWVt YWlsIElzc3VpbmcgQ0ECAw+1MzANBgkqhkiG9w0BAQEFAASCAQCJ3nuZaIX6CQwlXId854aR +iAWO9AxXR3AZfH7XeFCsBDzr6SxDhUmaxpJ+lxB96+l9VIghhK0y5RyIA5CKaVQqzKpHjlX VGkZuZtX6I7laOnJ6k+/KY5V/uY3U/j6kXZQqDRalt+c2V4jMLkt+34ze8Gmp2g17gg+vC4i IbtCexCVR4OVqvLhQUR1r2PL72eFkxQOm6vVFLqTnsBHbK+MhENU1rebeWrblcBkUhwOzqQB j2ihXLe5ZnZPuqIp4HlfhlZLH5esJmVwKd/Vb9YqRw59uiSC1cBYz1JQ9TAd0kP9g/OPeWdn kvAhovZ17/wJfzFSBdpHVBH8E3WgG3ckAAAAAAAA --------------ms080503070700000501060206-- --===============1685699023== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ ClassDBI mailing list ClassDBI@xxxxx.xxxxxxxxxxxxxxxx.xxx http://lists.digitalcraftsmen.net/mailman/listinfo/classdbi --===============1685699023==--
[CDBI] Inflating/deflating with Storable
|
[CDBI] Re: Inflating/deflating with Storable
|
Re: [CDBI] Inflating/deflating with Storable
|
Generated at 12:31 on 28 Feb 2006 by mariachi v0.52