diff --git a/Gemfile b/Gemfile index 94d66a281..c195fc8e8 100644 --- a/Gemfile +++ b/Gemfile @@ -65,7 +65,7 @@ gem 'browser' gem 'turnout', '~> 2.4.0' gem 'redcarpet' -gem 'graphql' +gem 'graphql', '~> 1.3.0' group :development, :test do # Call 'byebug' anywhere in the code to stop execution and get a debugger console diff --git a/Gemfile.lock b/Gemfile.lock index ed7d74082..4ee71e106 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -178,7 +178,7 @@ GEM activesupport (>= 4.1.0) graphiql-rails (1.3.0) rails - graphql (0.18.11) + graphql (1.3.0) groupdate (3.1.1) activesupport (>= 3) gyoku (1.3.1) @@ -484,7 +484,7 @@ DEPENDENCIES foundation_rails_helper (~> 2.0.0) fuubar graphiql-rails - graphql + graphql (~> 1.3.0) groupdate (~> 3.1.0) i18n-tasks initialjs-rails (= 0.2.0.4) diff --git a/app/controllers/graphql_controller.rb b/app/controllers/graphql_controller.rb index de7ae7de7..f62e2b3dd 100644 --- a/app/controllers/graphql_controller.rb +++ b/app/controllers/graphql_controller.rb @@ -8,8 +8,25 @@ class GraphqlController < ApplicationController def query begin + # ------------------------------------------------------------------------ + api_types_creator = GraphQL::ApiTypesCreator.new(API_TYPE_DEFINITIONS) + created_api_types = api_types_creator.create + + query_type_creator = GraphQL::QueryTypeCreator.new(created_api_types) + query_type = query_type_creator.create + + consul_schema = GraphQL::Schema.define do + query query_type + max_depth 12 + + resolve_type -> (object, ctx) do + type_name = object.class.name # look up types by class name + ConsulSchema.types[type_name] + end + end + # ------------------------------------------------------------------------ set_query_environment - response = ConsulSchema.execute query_string, variables: query_variables + response = consul_schema.execute query_string, variables: query_variables render json: response, status: :ok rescue GraphqlController::QueryStringError render json: { message: 'Query string not present' }, status: :bad_request diff --git a/config/initializers/graphql.rb b/config/initializers/graphql.rb index d477361fc..05cd2333c 100644 --- a/config/initializers/graphql.rb +++ b/config/initializers/graphql.rb @@ -1,18 +1,2 @@ api_config = YAML.load_file('./config/api.yml') -api_type_definitions = GraphQL::ApiTypesCreator::parse_api_config_file(api_config) - -api_types_creator = GraphQL::ApiTypesCreator.new(api_type_definitions) -created_api_types = api_types_creator.create - -query_type_creator = GraphQL::QueryTypeCreator.new(created_api_types) -QueryType = query_type_creator.create - -ConsulSchema = GraphQL::Schema.define do - query QueryType - max_depth 12 - - resolve_type -> (object, ctx) do - type_name = object.class.name # look up types by class name - ConsulSchema.types[type_name] - end -end +API_TYPE_DEFINITIONS = GraphQL::ApiTypesCreator::parse_api_config_file(api_config) diff --git a/spec/lib/graphql_spec.rb b/spec/lib/graphql_spec.rb index 3dbf393b7..caa2bd085 100644 --- a/spec/lib/graphql_spec.rb +++ b/spec/lib/graphql_spec.rb @@ -1,5 +1,23 @@ require 'rails_helper' +# ------------------------------------------------------------------------------ +api_types_creator = GraphQL::ApiTypesCreator.new(API_TYPE_DEFINITIONS) +created_api_types = api_types_creator.create + +query_type_creator = GraphQL::QueryTypeCreator.new(created_api_types) +QueryType = query_type_creator.create + +ConsulSchema = GraphQL::Schema.define do + query QueryType + max_depth 12 + + resolve_type -> (object, ctx) do + type_name = object.class.name # look up types by class name + ConsulSchema.types[type_name] + end +end +# ------------------------------------------------------------------------------ + def execute(query_string, context = {}, variables = {}) ConsulSchema.execute(query_string, context: context, variables: variables) end @@ -14,7 +32,7 @@ def hidden_field?(response, field_name) data_is_empty && error_is_present end -describe ConsulSchema do +describe 'ConsulSchema' do let(:user) { create(:user) } let(:proposal) { create(:proposal, author: user) }