J'ai du code pour ajouter des méthodes à un module à partir de définitions simples pour parler à des ressources distantes via une classe wrapper autour d'un client REST.Erreur Regex dans le bloc class-eval
def service_function(function_name, method, uri, parameters)
class_eval <<-RUBY
def #{function_name}(params)
if !(#{function_name}_required_params - params.keys).empty? || \
!(params.keys - #{function_name}_params).empty?
raise Errors::InvalidParameters.new(service_name, __method__,
params.keys, #{function_name}_params)
end
WebServices::ServiceRequest.perform(self.domain, #{uri}, #{method}, params)
end
def #{function_name}_params
#{function_name}_required_params + #{function_name}_optional_params
end
def #{function_name}_required_params
#{parameters}.select { |param,req| req }.keys
end
def #{function_name}_optional_params
#{parameters}.select { |param,req| !req }.keys
end
RUBY
end
Avant que je puisse même exécuter le code, juste exigeant la pierre précieuse Je construis dans la CISR recrache cette erreur:
1.9.2p320 :001 > require 'web-services'
SyntaxError: (eval):7: unknown regexp options - rt
La ligne incriminée est:
WebServices::ServiceRequest.perform(self.domain, #{uri}, #{method}, params)
Retrait l'argument "# {uri}" le répare, quitte même dans l'argument "# {méthode}". Est-ce que quelqu'un là-bas a une idée de la raison pour laquelle cela pourrait être? Je suis à la fin de mon esprit.
La chose est que je ne passe rien pour le moment, ce n'est que sur exiger. Quand j'enlève # {uri} ça fonctionne parfaitement. * EDIT * Peu importe, j'ai trouvé une ligne de code égarée provenant d'un test précédent qui était en cours d'exécution pendant l'étape require. Je me sens un peu bête maintenant. Merci pour la réponse. =) – user1034016
Pour la postérité et google, la solution était de remplacer # {uri} par "# {uri}". – user1034016
@ user1034016: Cela devrait être sûr, mais les vrais paranoïaques voudraient s'assurer que 'uri' n'a pas de guillemets doubles ou faire quelque chose comme' "# {uri.inspect}" 'pour les faire échapper. –