Mon application passe à différentes méthodes json_element
pour lesquelles les clés sont différentes, et parfois vides.en utilisant ruby pour extraire les valeurs dans un hachage de manière DRY
Pour gérer, je suis hardcoding l'extraction avec le code exemple suivant:
def act_on_ruby_tag(json_element)
begin
# logger.progname = __method__
logger.debug json_element
code = json_element['CODE']['$'] unless json_element['CODE'].nil?
predicate = json_element['PREDICATE']['$'] unless json_element['PREDICATE'].nil?
replace = json_element['REPLACE-KEY']['$'] unless json_element['REPLACE-KEY'].nil?
hash = json_element['HASH']['$'] unless json_element['HASH'].nil?
Je voudrais éliminer hardcoding les valeurs, et pas tout à fait sûr de savoir comment.
j'ai commencé à réfléchir comme suit:
keys = json_element.keys
keys.each do |k|
set_key = k.downcase
instance_variable_set("@" + set_key, json_element[k]['$']) unless json_element[k].nil?
end
Et puis utilisez @code
par exemple dans le reste de la méthode. J'allais essayer de transformer en une méthode, puis remplacer tout ce code codé en dur.
Mais je n'étais pas entièrement sûr si c'est un bon chemin.
Merci ... Je compris que le « $ » est en fait un Artfact d'utiliser CobravsMongoose gem.BUT ... le vrai problème est ce que vous discuterez .... pour retirer les clés et de vérifier s'il y a une valeur ou non sans erreur. Parfois l'une des clés n'a aucune valeur - elle est vide. C'est pourquoi j'ai la vérification "nil?" – Angela
Vide et «nil?» Sont deux choses différentes, gardez cela à l'esprit. Si vous cherchez simplement des choses dans lesquelles vous pouvez naviguer, un test par rapport à «v» est suffisant. Le code minimal est généralement plus facile à déboguer. – tadman