From bc4d3e1a8e5ef2ca0c72a8dd8361e5383b28991f Mon Sep 17 00:00:00 2001 From: Dana Powers Date: Thu, 29 Nov 2018 14:40:01 -0800 Subject: [PATCH 1/2] Test hash_key with strange chars in schema/member/has_fields --- spec/graphql/schema/member/has_fields_spec.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/spec/graphql/schema/member/has_fields_spec.rb b/spec/graphql/schema/member/has_fields_spec.rb index a67906efc7..0165e6c8fd 100644 --- a/spec/graphql/schema/member/has_fields_spec.rb +++ b/spec/graphql/schema/member/has_fields_spec.rb @@ -75,6 +75,7 @@ def int field :string3, SubSubObjectWithStringField, null: false, method: :object field :float1, ObjectWithFloatField, null: false, method: :object field :float2, ObjectWithSubFloatField, null: false, method: :object + field :hash_key1, String, null: false, hash_key: :'foo bar/fizz-buzz' end class Schema < GraphQL::Schema From 8787289db5278e6b86c1ce75500f6e5997e971c5 Mon Sep 17 00:00:00 2001 From: Dana Powers Date: Thu, 29 Nov 2018 15:10:59 -0800 Subject: [PATCH 2/2] Handle hash_key: values that are not valid ruby method_names in schema resolver --- lib/graphql/schema/member/has_fields.rb | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/lib/graphql/schema/member/has_fields.rb b/lib/graphql/schema/member/has_fields.rb index 0f38f089cc..4f03bc1968 100644 --- a/lib/graphql/schema/member/has_fields.rb +++ b/lib/graphql/schema/member/has_fields.rb @@ -127,7 +127,10 @@ def add_super_method(field_key, method_name) ERR end default_resolve_module.module_eval <<-RUBY, __FILE__, __LINE__ + 1 - def #{method_name}(**args) + # method_name can be a hash_key (see lib/graphql/schema/field.rb) + # so we need to make a raw define_method :sym call to avoid crashing + # on hash keys like :'some key with/weird-chars' + define_method #{method_name.inspect} do |**args| field_inst = self.class.fields[#{field_key}] || raise(%|Failed to find field #{field_key} for \#{self.class} among \#{self.class.fields.keys}|) field_inst.resolve_field_method(self, args, context) end