Module: Desiru::GraphQL::EnumBuilder
Overview
Handles GraphQL enum type generation
Instance Method Summary collapse
- #create_enum_from_values(values, type_cache, cache_mutex) ⇒ Object
- #create_enum_type(field, type_cache, cache_mutex) ⇒ Object
Instance Method Details
#create_enum_from_values(values, type_cache, cache_mutex) ⇒ Object
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
# File 'lib/desiru/graphql/enum_builder.rb', line 37 def create_enum_from_values(values, type_cache, cache_mutex) cache_key = "LiteralEnum:#{values.sort.join(',')}" cache_mutex.synchronize do return type_cache[cache_key] if type_cache[cache_key] end enum_name = "Literal#{cache_key.hash.abs}Enum" enum_type = Class.new(::GraphQL::Schema::Enum) do graphql_name enum_name values.each do |val| value val.upcase.gsub(/[^A-Z0-9_]/, '_'), value: val end end cache_mutex.synchronize do type_cache[cache_key] = enum_type end enum_type end |
#create_enum_type(field, type_cache, cache_mutex) ⇒ Object
11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
# File 'lib/desiru/graphql/enum_builder.rb', line 11 def create_enum_type(field, type_cache, cache_mutex) values = extract_literal_values(field) cache_key = "Enum:#{field.name}:#{values.sort.join(',')}" cache_mutex.synchronize do return type_cache[cache_key] if type_cache[cache_key] end enum_name = "#{field.name.to_s.capitalize}Enum#{cache_key.hash.abs}" enum_type = Class.new(::GraphQL::Schema::Enum) do graphql_name enum_name description "Enum for #{field.name}" values.each do |val| value val.upcase.gsub(/[^A-Z0-9_]/, '_'), value: val end end cache_mutex.synchronize do type_cache[cache_key] = enum_type end enum_type end |