From c2c33f12aec60860b640d210a28277ed1b54b4d2 Mon Sep 17 00:00:00 2001 From: Gabriele Renzi Date: Wed, 21 Jun 2017 14:46:42 +0200 Subject: [PATCH 1/9] Add spec for increasing max_complexity at query time --- spec/graphql/analysis/max_query_complexity_spec.rb | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/spec/graphql/analysis/max_query_complexity_spec.rb b/spec/graphql/analysis/max_query_complexity_spec.rb index 0c6c10261e..e76af7e685 100644 --- a/spec/graphql/analysis/max_query_complexity_spec.rb +++ b/spec/graphql/analysis/max_query_complexity_spec.rb @@ -50,7 +50,7 @@ end end - describe "when complexity is overriden at query-level" do + describe "when max_complexity is decreased at query-level" do before do Dummy::Schema.max_complexity = 100 end @@ -61,6 +61,17 @@ end end + describe "when max_complexity is increased at query-level" do + before do + Dummy::Schema.max_complexity = 1 + end + let(:result) { Dummy::Schema.execute(query_string, max_complexity: 10) } + + it "doesn't error" do + assert_equal nil, result["errors"] + end + end + describe "across a multiplex" do before do Dummy::Schema.max_complexity = 9 From 83f55065320d3efdac4bed712ebd64537e09d771 Mon Sep 17 00:00:00 2001 From: Siebe Jan Date: Mon, 26 Jun 2017 11:34:05 +0200 Subject: [PATCH 2/9] remove schema as default complexity --- lib/graphql/execution/multiplex.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/graphql/execution/multiplex.rb b/lib/graphql/execution/multiplex.rb index 7b2e28f9a1..4aa67b9dd2 100644 --- a/lib/graphql/execution/multiplex.rb +++ b/lib/graphql/execution/multiplex.rb @@ -161,7 +161,7 @@ def with_instrumentation(schema, queries, context:, max_complexity:) end multiplex_analyzers = schema.multiplex_analyzers - if max_complexity ||= schema.max_complexity + if max_complexity multiplex_analyzers += [GraphQL::Analysis::MaxQueryComplexity.new(max_complexity)] end From 59ea2497b0a3a8f4b6c6b404df98da3b3ae5c45c Mon Sep 17 00:00:00 2001 From: Siebe Jan Date: Mon, 26 Jun 2017 11:37:51 +0200 Subject: [PATCH 3/9] actually fix it --- lib/graphql/execution/multiplex.rb | 6 +++--- lib/graphql/schema.rb | 9 +++++---- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/lib/graphql/execution/multiplex.rb b/lib/graphql/execution/multiplex.rb index 4aa67b9dd2..3a70550f1a 100644 --- a/lib/graphql/execution/multiplex.rb +++ b/lib/graphql/execution/multiplex.rb @@ -35,9 +35,9 @@ def initialize(schema:, queries:, context:) end class << self - def run_all(schema, query_options, *rest) + def run_all(schema, query_options, *rest, max_complexity: nil) queries = query_options.map { |opts| GraphQL::Query.new(schema, nil, opts) } - run_queries(schema, queries, *rest) + run_queries(schema, queries, *rest, max_complexity: max_complexity) end # @param schema [GraphQL::Schema] @@ -161,7 +161,7 @@ def with_instrumentation(schema, queries, context:, max_complexity:) end multiplex_analyzers = schema.multiplex_analyzers - if max_complexity + if max_complexity ||= schema.max_complexity multiplex_analyzers += [GraphQL::Analysis::MaxQueryComplexity.new(max_complexity)] end diff --git a/lib/graphql/schema.rb b/lib/graphql/schema.rb index 53e73210d4..69c4059465 100644 --- a/lib/graphql/schema.rb +++ b/lib/graphql/schema.rb @@ -222,11 +222,12 @@ def types # Execute a query on itself. Raises an error if the schema definition is invalid. # @see {Query#initialize} for arguments. # @return [Hash] query result, ready to be serialized as JSON - def execute(query_str = nil, **kwargs) + def execute(query_str = nil, max_complexity: nil, **kwargs) if query_str kwargs[:query] = query_str + kwargs[:max_complexity] = max_complexity end - all_results = multiplex([kwargs]) + all_results = multiplex([kwargs], max_complexity: max_complexity) all_results[0] end @@ -248,9 +249,9 @@ def execute(query_str = nil, **kwargs) # @param queries [Array] Keyword arguments for each query # @param context [Hash] Multiplex-level context # @return [Array] One result for each query in the input - def multiplex(*args) + def multiplex(*args, max_complexity: nil) with_definition_error_check { - GraphQL::Execution::Multiplex.run_all(self, *args) + GraphQL::Execution::Multiplex.run_all(self, *args, max_complexity: max_complexity) } end From 7267e0013f57c474450a666643b0b37d8a3b5131 Mon Sep 17 00:00:00 2001 From: Siebe Jan Date: Mon, 26 Jun 2017 11:56:18 +0200 Subject: [PATCH 4/9] explicitly pass arguments instead of using *args --- lib/graphql/execution/multiplex.rb | 4 ++-- lib/graphql/schema.rb | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/graphql/execution/multiplex.rb b/lib/graphql/execution/multiplex.rb index 3a70550f1a..cc81d9a851 100644 --- a/lib/graphql/execution/multiplex.rb +++ b/lib/graphql/execution/multiplex.rb @@ -35,9 +35,9 @@ def initialize(schema:, queries:, context:) end class << self - def run_all(schema, query_options, *rest, max_complexity: nil) + def run_all(schema, query_options, context: {}, max_complexity: nil) queries = query_options.map { |opts| GraphQL::Query.new(schema, nil, opts) } - run_queries(schema, queries, *rest, max_complexity: max_complexity) + run_queries(schema, queries, context: context, max_complexity: max_complexity) end # @param schema [GraphQL::Schema] diff --git a/lib/graphql/schema.rb b/lib/graphql/schema.rb index 69c4059465..6d16599e17 100644 --- a/lib/graphql/schema.rb +++ b/lib/graphql/schema.rb @@ -249,9 +249,9 @@ def execute(query_str = nil, max_complexity: nil, **kwargs) # @param queries [Array] Keyword arguments for each query # @param context [Hash] Multiplex-level context # @return [Array] One result for each query in the input - def multiplex(*args, max_complexity: nil) + def multiplex(*args, max_complexity: nil, context: {}) with_definition_error_check { - GraphQL::Execution::Multiplex.run_all(self, *args, max_complexity: max_complexity) + GraphQL::Execution::Multiplex.run_all(self, *args, context: context, max_complexity: max_complexity) } end From 6da5f3a806f278dc617d926e9c58906cb2535399 Mon Sep 17 00:00:00 2001 From: willian Date: Mon, 26 Jun 2017 12:14:01 +0200 Subject: [PATCH 5/9] Uses kwargs instead of defined args --- lib/graphql/execution/multiplex.rb | 4 ++-- lib/graphql/schema.rb | 9 ++++----- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/lib/graphql/execution/multiplex.rb b/lib/graphql/execution/multiplex.rb index cc81d9a851..dd5d75746b 100644 --- a/lib/graphql/execution/multiplex.rb +++ b/lib/graphql/execution/multiplex.rb @@ -35,9 +35,9 @@ def initialize(schema:, queries:, context:) end class << self - def run_all(schema, query_options, context: {}, max_complexity: nil) + def run_all(schema, query_options, *args, **kwargs) queries = query_options.map { |opts| GraphQL::Query.new(schema, nil, opts) } - run_queries(schema, queries, context: context, max_complexity: max_complexity) + run_queries(schema, queries, *args, **kwargs) end # @param schema [GraphQL::Schema] diff --git a/lib/graphql/schema.rb b/lib/graphql/schema.rb index 6d16599e17..eacb0e3752 100644 --- a/lib/graphql/schema.rb +++ b/lib/graphql/schema.rb @@ -222,12 +222,11 @@ def types # Execute a query on itself. Raises an error if the schema definition is invalid. # @see {Query#initialize} for arguments. # @return [Hash] query result, ready to be serialized as JSON - def execute(query_str = nil, max_complexity: nil, **kwargs) + def execute(query_str = nil, **kwargs) if query_str kwargs[:query] = query_str - kwargs[:max_complexity] = max_complexity end - all_results = multiplex([kwargs], max_complexity: max_complexity) + all_results = multiplex([kwargs], max_complexity: kwargs[:max_complexity]) all_results[0] end @@ -249,9 +248,9 @@ def execute(query_str = nil, max_complexity: nil, **kwargs) # @param queries [Array] Keyword arguments for each query # @param context [Hash] Multiplex-level context # @return [Array] One result for each query in the input - def multiplex(*args, max_complexity: nil, context: {}) + def multiplex(*args, **kwargs) with_definition_error_check { - GraphQL::Execution::Multiplex.run_all(self, *args, context: context, max_complexity: max_complexity) + GraphQL::Execution::Multiplex.run_all(self, *args, **kwargs) } end From 6b8dc04c71ac4185a705f53cecdf92a3c4ab9f11 Mon Sep 17 00:00:00 2001 From: Robert Mosolgo Date: Mon, 26 Jun 2017 18:31:25 -0400 Subject: [PATCH 6/9] refactor(Multiplex) more explicit args passing; use nil for multiplex complexity when running one query --- lib/graphql/execution/multiplex.rb | 11 ++++++----- lib/graphql/schema.rb | 7 ++++--- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/lib/graphql/execution/multiplex.rb b/lib/graphql/execution/multiplex.rb index dd5d75746b..36e4dcbd68 100644 --- a/lib/graphql/execution/multiplex.rb +++ b/lib/graphql/execution/multiplex.rb @@ -35,17 +35,18 @@ def initialize(schema:, queries:, context:) end class << self - def run_all(schema, query_options, *args, **kwargs) + def run_all(schema, query_options, *args) queries = query_options.map { |opts| GraphQL::Query.new(schema, nil, opts) } - run_queries(schema, queries, *args, **kwargs) + run_queries(schema, queries, *args) end # @param schema [GraphQL::Schema] # @param queries [Array] # @param context [Hash] - # @param max_complexity [Integer] + # @param max_complexity [Integer, nil] # @return [Array] One result per query - def run_queries(schema, queries, context: {}, max_complexity: nil) + def run_queries(schema, queries, context: {}, max_complexity: schema.max_complexity) + if has_custom_strategy?(schema) if queries.length != 1 raise ArgumentError, "Multiplexing doesn't support custom execution strategies, run one query at a time instead" @@ -161,7 +162,7 @@ def with_instrumentation(schema, queries, context:, max_complexity:) end multiplex_analyzers = schema.multiplex_analyzers - if max_complexity ||= schema.max_complexity + if max_complexity multiplex_analyzers += [GraphQL::Analysis::MaxQueryComplexity.new(max_complexity)] end diff --git a/lib/graphql/schema.rb b/lib/graphql/schema.rb index eacb0e3752..5ff7949aab 100644 --- a/lib/graphql/schema.rb +++ b/lib/graphql/schema.rb @@ -226,7 +226,8 @@ def execute(query_str = nil, **kwargs) if query_str kwargs[:query] = query_str end - all_results = multiplex([kwargs], max_complexity: kwargs[:max_complexity]) + # Since we're running one query, don't run a multiplex-level complexity analyzer + all_results = multiplex([kwargs], max_complexity: nil) all_results[0] end @@ -248,9 +249,9 @@ def execute(query_str = nil, **kwargs) # @param queries [Array] Keyword arguments for each query # @param context [Hash] Multiplex-level context # @return [Array] One result for each query in the input - def multiplex(*args, **kwargs) + def multiplex(queries, **kwargs) with_definition_error_check { - GraphQL::Execution::Multiplex.run_all(self, *args, **kwargs) + GraphQL::Execution::Multiplex.run_all(self, queries, **kwargs) } end From 9fc6d48edb19908723a2871fe1949f6d80ccd024 Mon Sep 17 00:00:00 2001 From: esjee Date: Wed, 28 Jun 2017 16:14:45 +0200 Subject: [PATCH 7/9] Add pry gem in an attempt to make development on this gem easier (#813) * adds gem m https://github.com/qrush/m * adds gems pry and pry-stack_explorer * require pry in spec_helper * compile mode = off * Revert "compile mode = off" This reverts commit 5a477cf587bcea648b64b2bd0384aa96700e27fd. * Revert "adds gems pry and pry-stack_explorer" This reverts commit adad17c110cf2a39abcda4fd031a450ae4ea8c43. * Revert "adds gem m" This reverts commit 9b9896afc05fbf74407cab7d7b14e214d8056a15. * add pry, pry-stack_explorer and m to Gemfile * remove m --- Gemfile | 2 ++ spec/spec_helper.rb | 1 + 2 files changed, 3 insertions(+) diff --git a/Gemfile b/Gemfile index 39c3b398b0..0c59c11b3a 100644 --- a/Gemfile +++ b/Gemfile @@ -4,5 +4,7 @@ gemspec gem 'ruby-prof', :platform => :ruby gem 'sqlite3', :platform => :ruby +gem 'pry' +gem 'pry-stack_explorer', :platform => :ruby gem 'activerecord-jdbcsqlite3-adapter', :platform => :jruby diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index d75b519828..de8656987f 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -10,6 +10,7 @@ require "graphql" require "graphql/rake_task" require "benchmark" +require "pry" require "minitest/autorun" require "minitest/focus" require "minitest/reporters" From 22cc3e741361558d43c15f86437e0e123fc2bb9f Mon Sep 17 00:00:00 2001 From: Robert Mosolgo Date: Wed, 28 Jun 2017 15:02:00 -0400 Subject: [PATCH 8/9] Fix code font --- guides/css/main.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/guides/css/main.scss b/guides/css/main.scss index 74f096fa0e..cbd24dd61f 100644 --- a/guides/css/main.scss +++ b/guides/css/main.scss @@ -15,7 +15,7 @@ $muted-color: #777777; $subtle-color: #aaaaaa; $font: 'Rubik', sans-serif; $font-color: black; -$code-font: 'Source Sans Pro', monospace; +$code-font: 'Monaco', monospace; body { font-family: $font; From e4d443990d8a90131bb73eb7ee0105e1909e2002 Mon Sep 17 00:00:00 2001 From: Robert Mosolgo Date: Wed, 28 Jun 2017 17:12:33 -0400 Subject: [PATCH 9/9] fix spacing for new font --- guides/css/main.scss | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/guides/css/main.scss b/guides/css/main.scss index cbd24dd61f..b20d097a71 100644 --- a/guides/css/main.scss +++ b/guides/css/main.scss @@ -92,10 +92,14 @@ pre { overflow-x: scroll; } -p, li, pre { +p, li { line-height: 1.3rem; } +pre { + line-height: 1.4rem; +} + p, ul { margin-bottom: 10px; }