Mailinglist Archive: yast-devel (126 mails)

< Previous Next >
Re: [yast-devel] [webYaST] :dasherize => false not enough to stop dasherizing? (bug 551284)
  • From: Stefan Schubert <schubi@xxxxxxxxxx>
  • Date: Tue, 03 Nov 2009 11:25:29 +0100
  • Message-id: <4AF00519.4070806@xxxxxxxxxx>
Josef Reidinger schrieb:
Stefan Schubert write:
Josef Reidinger schrieb:
Jiří Suchomel write:
On Monday 02 of November 2009 13:23:26 Stefan Schubert wrote:
Klaus Kaempf schrieb:
* Jiří Suchomel <jsuchome@xxxxxxx> [Nov 02. 2009 09:17]:
Hi!
Bug 551284 describes a problem of mail_settings plugin when it is
called for a second time (while first time it was during basesystem
sequence). The problem itself is that underscores are changed to
dashes in the POST call. And indeed, mail_settings_controller of the
webservice lacks the option to set dasherize to false in respond_to
function, so the solution looked easy.
Hmm,
http://www.bluequartz.us/phpBB2/viewtopic.php?p=318726&sid=ef2add12b91
4 37 160380ae3a8f078521 points to Hash.dasherize_xml which is set to
'true' by default.

Try setting it to 'false'.

Klaus
---
SUSE LINUX Products GmbH, GF: Markus Rex, HRB 16746 (AG Nürnberg)
I am also interested in "Hash.dasherize_xml" If it does work I would be
able to drop this work around from the registration model:

# Hash.from_xml converts dashes in keys to underscores
# by this we can not find out the correct key name (whether it was a
dash or an underscore)
# unfortunately the regcode keys in registration make excessive use of
dashes AND underscores
# that way the information gets lost what key to assign the correct
value. # So the function "unrename_keys" will be overwritten
module RailsHashFromWithoutConversationKey
Hash.class_eval do
def self.unrename_keys(params)
case params.class.to_s
when "Hash"
params.inject({}) do |h,(k,v)|
h[k.to_s] = unrename_keys(v)
h
end
when "Array"
params.map { |v| unrename_keys(v) }
else
params
end
end
end
end
What does this function actually do?
You have the problem because of converting dashesh to underscores, but
my problem is that underscores are changed to dashes.

As I mentioned earlier, the problem in mail_settings does not appear if
I remove registration step. Maybe just because of this code in
registration is the mail_settings broken.

Jiri
I think you find root of problems. Because correct way is not to
overwrite behavior in class, but overwrite it in own instance.
So if registration need this hack, it should do:
xml = Hash.new(...)
def xml.unrename_keys(params)
...#your hack
end

of course you can write it much pretty e.g. pass xml instance and
overwrite method in separate code.
The problem is that I am using the public Instance method "Hash.from_xml".
So "xml.from_xml" does not work.

Additional: "unrename_keys" is a private class.

I must admit, that I am currently have no idea how to solve this.
But I am searching.... :-)



Oh, OK, then solution is more tricky. Use alias to store old behavior and after you load xml restore old behavior.
http://whynotwiki.com/Ruby_/_Method_aliasing_and_chaining#Can_you_alias_class_methods.3F


Sometimes solutions are quite simple :-) :

class HashWithoutConversationKey < Hash; end
HashWithoutConversationKey.class_eval do
def self.unrename_keys(params)
.....
end
end

...
@arguments = HashWithoutConversationKey.from_xml()

BTW: There is an nice article concerning
_Ruby: instance_eval and class_eval method definitions <http://blog.jayfields.com/2007/03/ruby-instanceeval-and-classeval-method.html>
_http://blog.jayfields.com/2007/03/ruby-instanceeval-and-classeval-method.html

Greetings
Stefan



--
To unsubscribe, e-mail: yast-devel+unsubscribe@xxxxxxxxxxxx
For additional commands, e-mail: yast-devel+help@xxxxxxxxxxxx

< Previous Next >
Follow Ups