rack-graphql 1.2.0 → 2.0.0.rc

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: fa676bb1795a98e7072837c677ce6b1dbd2cecf63bbf09ec1da762ac93826f01
4
- data.tar.gz: baaeac57d1febfa1b30dee33c589d08ebc9e2258d9d5b4fac87a047e023e023f
3
+ metadata.gz: 1075eb9d4a87a4e94b555c8b7f60a6a36c8369b2ff0d60a8e7be9db675f47494
4
+ data.tar.gz: ae1137154106d644ee012734ed0d5d21ac11412fb55a4ba12394bdc26e57b873
5
5
  SHA512:
6
- metadata.gz: fe96ed09318ad1d487a2437596e5150f28e1a721a7127eeff1bd615898831f1365097b8dce89aa40ed46584eadaff2f5baf31d0ae413230158a7af4ab52380ed
7
- data.tar.gz: 3c97c70827c54268518ec6e4552a962e140bd1742f3cc0e20a83900a4b3dc820afdf933ec79a90cd37622c2a8d44ffd6a732dc83115fcadeb339af927c3b324e
6
+ metadata.gz: 2eeb4e9eed9cf0030651c30d6ef16bb53f14ece2cf2f94c36f162d13d3732fe53e699e64b59d2d807b2d64386453d21627f3f718a50db99e10ab74f1fa2c9c20
7
+ data.tar.gz: efe2f531123d657e2480a08f4d0b898d9cda4fea50bbe9422faaeb4fc0d4d3ddec13c93c54c4aae5a9792d7bece88652cb35bdeca82bfdbdf315f6c9df724427
@@ -0,0 +1,11 @@
1
+ version: 1
2
+
3
+ update_configs:
4
+ - package_manager: "ruby:bundler"
5
+ directory: "/"
6
+ update_schedule: "monthly"
7
+ commit_message:
8
+ prefix: "[dependabot]"
9
+ allowed_updates:
10
+ - match:
11
+ update_type: "all"
@@ -0,0 +1,33 @@
1
+ ---
2
+ name: Bug report
3
+ about: Create a report to track an issue that has been identified
4
+ title: ''
5
+ labels: ''
6
+ assignees: ''
7
+
8
+ ---
9
+
10
+ **Describe the bug**
11
+ A clear and concise description of what the bug is.
12
+
13
+ **To Reproduce**
14
+ Steps to reproduce the behavior:
15
+ 1. Go to '...'
16
+ 2. Click on '....'
17
+ 3. Scroll down to '....'
18
+ 4. See error
19
+
20
+ **Expected behavior**
21
+ A clear and concise description of what you expected to happen.
22
+
23
+ **Mutation/Query**
24
+
25
+ **URL and HTTP method (for non-GQL):**
26
+
27
+ **Sentry or Logs URL:**
28
+
29
+ **User/authentication details**
30
+ Impacted user name or service account
31
+
32
+ **Additional context**
33
+ Add any other context about the problem here.
@@ -0,0 +1 @@
1
+ blank_issues_enabled: false
@@ -0,0 +1,22 @@
1
+ ---
2
+ name: New story
3
+ about: Add a new story for implementation
4
+ title: ''
5
+ labels: ''
6
+ assignees: ''
7
+
8
+ ---
9
+
10
+ **Describe the solution**
11
+ A clear and concise description of what you want to happen.
12
+ When will this feature be done?
13
+
14
+ **Describe the users**
15
+ Who are we building this feature for?
16
+
17
+ **Additional context**
18
+ Add any other context or screenshots about the feature request here.
19
+ Link to any applicable documents describing the feature.
20
+
21
+ **Designs**
22
+ Link to any applicable designs on Invision.
@@ -0,0 +1,18 @@
1
+ ## Description
2
+ <!--- Describe your changes in detail -->
3
+
4
+ ## Related issue(s)
5
+ <!--- GH issue number -->
6
+
7
+ ## Motivation and Context
8
+ <!--- Why is this change required? What problem does it solve? -->
9
+ <!--- If it fixes an open issue, please link to the issue here. -->
10
+
11
+ ## How Has This Been Tested?
12
+ <!--- Please describe in detail how you tested your changes. -->
13
+
14
+ ## Screenshots (if appropriate):
15
+ <!--- Please add any screenshots of the feature. -->
16
+
17
+ ## Related PRs
18
+ <!--- Please add links to any related PRs (backend, component packages, etc). -->
@@ -0,0 +1,16 @@
1
+ # automatically approve PRs submitted by Dependabot or Renofidev
2
+ # this will allow Dependabot to automatically merge dependency update PRs where CI passes
3
+ # from: https://github.com/hmarr/auto-approve-action
4
+ name: Auto approve dependency upgrades PRs
5
+
6
+ on:
7
+ pull_request
8
+
9
+ jobs:
10
+ auto-approve:
11
+ runs-on: ubuntu-latest
12
+ steps:
13
+ - uses: hmarr/auto-approve-action@v2.0.0
14
+ if: github.actor == 'dependabot[bot]' || github.actor == 'dependabot-preview[bot]' || github.actor == 'renofidev'
15
+ with:
16
+ github-token: "${{ secrets.GITHUB_TOKEN }}"
@@ -3,8 +3,9 @@ sudo: false
3
3
  language: ruby
4
4
  cache: bundler
5
5
  rvm:
6
- - 2.5
7
6
  - 2.6
7
+ - 2.7
8
8
  before_install: gem install bundler
9
9
  script:
10
- - bundle exec rake
10
+ - bundle exec rake rubocop
11
+ - bundle exec rake spec
@@ -0,0 +1,6 @@
1
+ # CHANGELOG
2
+
3
+ ## 2.0.0.rc - 2020-09-11
4
+
5
+ - Catch all exceptions raised by the app respond with 500 status codea and json content type
6
+ - Add ability to not log exception backtrace with `RackGraphql.log_exception_backtrace = false`
@@ -1,56 +1,63 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- rack-graphql (1.2.0)
5
- graphql (>= 1.9.0)
4
+ rack-graphql (2.0.0.rc)
5
+ graphql (~> 1.9)
6
6
  oj
7
- rack (>= 2.0.0)
7
+ rack (~> 2.0)
8
8
 
9
9
  GEM
10
10
  remote: https://rubygems.org/
11
11
  specs:
12
- ast (2.4.0)
13
- coderay (1.1.2)
14
- diff-lcs (1.3)
15
- graphql (1.9.17)
16
- jaro_winkler (1.5.4)
17
- method_source (0.9.2)
18
- oj (3.10.0)
19
- parallel (1.19.1)
20
- parser (2.7.0.1)
21
- ast (~> 2.4.0)
22
- pry (0.12.2)
23
- coderay (~> 1.1.0)
24
- method_source (~> 0.9.0)
25
- rack (2.0.8)
12
+ ast (2.4.1)
13
+ coderay (1.1.3)
14
+ diff-lcs (1.4.4)
15
+ graphql (1.11.4)
16
+ method_source (1.0.0)
17
+ oj (3.10.14)
18
+ parallel (1.19.2)
19
+ parser (2.7.1.4)
20
+ ast (~> 2.4.1)
21
+ pry (0.13.1)
22
+ coderay (~> 1.1)
23
+ method_source (~> 1.0)
24
+ rack (2.2.3)
26
25
  rack-test (1.1.0)
27
26
  rack (>= 1.0, < 3)
28
27
  rainbow (3.0.0)
29
28
  rake (13.0.1)
29
+ regexp_parser (1.7.1)
30
+ rexml (3.2.4)
30
31
  rspec (3.9.0)
31
32
  rspec-core (~> 3.9.0)
32
33
  rspec-expectations (~> 3.9.0)
33
34
  rspec-mocks (~> 3.9.0)
34
- rspec-core (3.9.1)
35
- rspec-support (~> 3.9.1)
36
- rspec-expectations (3.9.0)
35
+ rspec-core (3.9.2)
36
+ rspec-support (~> 3.9.3)
37
+ rspec-expectations (3.9.2)
37
38
  diff-lcs (>= 1.2.0, < 2.0)
38
39
  rspec-support (~> 3.9.0)
39
40
  rspec-mocks (3.9.1)
40
41
  diff-lcs (>= 1.2.0, < 2.0)
41
42
  rspec-support (~> 3.9.0)
42
- rspec-support (3.9.2)
43
- rubocop (0.78.0)
44
- jaro_winkler (~> 1.5.1)
43
+ rspec-support (3.9.3)
44
+ rubocop (0.90.0)
45
45
  parallel (~> 1.10)
46
- parser (>= 2.6)
46
+ parser (>= 2.7.1.1)
47
47
  rainbow (>= 2.2.2, < 4.0)
48
+ regexp_parser (>= 1.7)
49
+ rexml
50
+ rubocop-ast (>= 0.3.0, < 1.0)
48
51
  ruby-progressbar (~> 1.7)
49
- unicode-display_width (>= 1.4.0, < 1.7)
50
- rubocop-performance (1.5.2)
51
- rubocop (>= 0.71.0)
52
+ unicode-display_width (>= 1.4.0, < 2.0)
53
+ rubocop-ast (0.3.0)
54
+ parser (>= 2.7.1.4)
55
+ rubocop-performance (1.8.0)
56
+ rubocop (>= 0.87.0)
57
+ rubocop-rspec (1.43.2)
58
+ rubocop (~> 0.87)
52
59
  ruby-progressbar (1.10.1)
53
- unicode-display_width (1.6.0)
60
+ unicode-display_width (1.7.0)
54
61
 
55
62
  PLATFORMS
56
63
  ruby
@@ -64,6 +71,7 @@ DEPENDENCIES
64
71
  rspec
65
72
  rubocop
66
73
  rubocop-performance
74
+ rubocop-rspec
67
75
 
68
76
  BUNDLED WITH
69
- 2.0.2
77
+ 2.1.4
data/README.md CHANGED
@@ -27,6 +27,7 @@ run RackGraphql::Application.call(
27
27
  app_name: 'your-service-name', # optional, used for health endpoint content
28
28
  context_handler: YourGraphqlContextHandler, # optional, empty `proc` by default
29
29
  health_route: true, # optional, true by default
30
+ logger: A9n.logger, # optional, not set by default
30
31
  )
31
32
  ```
32
33
 
@@ -69,6 +70,14 @@ class GraphqlContextHandler
69
70
  end
70
71
  ```
71
72
 
73
+ ### Logging exception backtrace
74
+
75
+ RackGraphql catches all errors and respond with 500 code. By default it adds exception backtrace to the response body. If you don't want to have the backtrace in the response set:
76
+
77
+ ```
78
+ RackGraphql.log_exception_backtrace = false
79
+ ```
80
+
72
81
  ## Contributing
73
82
 
74
83
  Bug reports and pull requests are welcome on GitHub at https://github.com/RenoFi/rack-graphql. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
data/Rakefile CHANGED
@@ -5,4 +5,4 @@ require 'rubocop/rake_task'
5
5
  RSpec::Core::RakeTask.new(:spec)
6
6
  RuboCop::RakeTask.new
7
7
 
8
- task default: %i[rubocop spec]
8
+ task default: %i[rubocop:auto_correct spec]
@@ -7,3 +7,11 @@ require 'rack_graphql/exceptions'
7
7
  require 'rack_graphql/health_response_builder'
8
8
  require 'rack_graphql/middleware'
9
9
  require 'rack_graphql/application'
10
+
11
+ module RackGraphql
12
+ class << self
13
+ attr_accessor :log_exception_backtrace
14
+ end
15
+
16
+ self.log_exception_backtrace = true
17
+ end
@@ -13,17 +13,40 @@ module RackGraphql
13
13
 
14
14
  return [400, {}, []] unless params.is_a?(Hash)
15
15
 
16
- variables = ensure_hash(params['variables'])
16
+ variables = ensure_hash(params['variables'])
17
17
  operation_name = params['operationName']
18
- context = context_handler.call(env)
18
+ context = context_handler.call(env)
19
19
 
20
20
  log("Executing with params: #{params.inspect}, operationName: #{operation_name}, variables: #{variables.inspect}")
21
21
  result = execute(params: params, operation_name: operation_name, variables: variables, context: context)
22
22
 
23
- [200, response_headers(result), [response_body(result)]]
23
+ [
24
+ 200,
25
+ response_headers(result),
26
+ [response_body(result)]
27
+ ]
24
28
  rescue AmbiguousParamError => e
25
- log("Responded with #{e.class} because of #{e.message}")
26
- [400, { 'Content-Type' => 'application/json' }, [Oj.dump({})]]
29
+ exception_string = dump_exception(e)
30
+ log(exception_string)
31
+ env[Rack::RACK_ERRORS].puts(exception_string)
32
+ env[Rack::RACK_ERRORS].flush
33
+ [
34
+ 400,
35
+ { 'Content-Type' => 'application/json' },
36
+ [Oj.dump({})]
37
+ ]
38
+ rescue StandardError, LoadError, SyntaxError => e
39
+ # To respect the graphql spec, all errors need to be returned as json.
40
+ # It needs to take Rack::ShowExceptions role of catching all exceptions raised by the app.
41
+ exception_string = dump_exception(e)
42
+ log(exception_string)
43
+ env[Rack::RACK_ERRORS].puts(exception_string)
44
+ env[Rack::RACK_ERRORS].flush
45
+ [
46
+ 500,
47
+ { 'Content-Type' => 'application/json' },
48
+ [Oj.dump(errors: [{ message: exception_string }])]
49
+ ]
27
50
  ensure
28
51
  ActiveRecord::Base.clear_active_connections! if defined?(ActiveRecord::Base)
29
52
  end
@@ -37,7 +60,7 @@ module RackGraphql
37
60
  end
38
61
 
39
62
  def post_data(env)
40
- ::Oj.load(env['rack.input'].gets)
63
+ ::Oj.load(env['rack.input'].gets.to_s)
41
64
  rescue Oj::ParseError
42
65
  nil
43
66
  end
@@ -124,5 +147,12 @@ module RackGraphql
124
147
  return unless logger
125
148
  logger.debug("[rack-graphql] #{message}")
126
149
  end
150
+
151
+ # Based on https://github.com/rack/rack/blob/master/lib/rack/show_exceptions.rb
152
+ def dump_exception(exception)
153
+ string = "#{exception.class}: #{exception.message}\n"
154
+ string << exception.backtrace.map { |l| "\t#{l}" }.join("\n") if RackGraphql.log_exception_backtrace
155
+ string
156
+ end
127
157
  end
128
158
  end
@@ -1,3 +1,3 @@
1
1
  module RackGraphql
2
- VERSION = '1.2.0'.freeze
2
+ VERSION = '2.0.0.rc'.freeze
3
3
  end
@@ -3,14 +3,14 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
3
  require 'rack_graphql/version'
4
4
 
5
5
  Gem::Specification.new do |spec|
6
- spec.name = 'rack-graphql'
7
- spec.version = RackGraphql::VERSION
8
- spec.authors = ['Krzysztof Knapik', 'RenoFi Engineering Team']
9
- spec.email = ['knapo@knapo.net', 'engineering@renofi.com']
6
+ spec.name = 'rack-graphql'
7
+ spec.version = RackGraphql::VERSION
8
+ spec.authors = ['Krzysztof Knapik', 'RenoFi Engineering Team']
9
+ spec.email = ['knapo@knapo.net', 'engineering@renofi.com']
10
10
 
11
- spec.summary = 'Rack middleware implementing graphql endpoint.'
11
+ spec.summary = 'Rack middleware implementing graphql endpoint.'
12
12
  spec.homepage = 'https://github.com/RenoFi/rack-graphql'
13
- spec.license = 'MIT'
13
+ spec.license = 'MIT'
14
14
 
15
15
  spec.metadata['homepage_uri'] = 'https://github.com/RenoFi/rack-graphql'
16
16
  spec.metadata['source_code_uri'] = 'https://github.com/RenoFi/rack-graphql'
@@ -18,15 +18,15 @@ Gem::Specification.new do |spec|
18
18
  spec.files = Dir.chdir(__dir__) do
19
19
  `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(bin/|spec/|\.rub)}) }
20
20
  end
21
- spec.bindir = 'exe'
22
- spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
21
+ spec.bindir = 'exe'
22
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
23
23
  spec.require_paths = ['lib']
24
24
 
25
- spec.required_ruby_version = '>= 2.5'
25
+ spec.required_ruby_version = '>= 2.6'
26
26
 
27
- spec.add_dependency 'graphql', '>= 1.9.0'
27
+ spec.add_dependency 'graphql', '~> 1.9'
28
28
  spec.add_dependency 'oj'
29
- spec.add_dependency 'rack', '>= 2.0.0'
29
+ spec.add_dependency 'rack', '~> 2.0'
30
30
 
31
31
  spec.add_development_dependency 'bundler'
32
32
  spec.add_development_dependency 'pry'
@@ -35,4 +35,5 @@ Gem::Specification.new do |spec|
35
35
  spec.add_development_dependency 'rspec'
36
36
  spec.add_development_dependency 'rubocop'
37
37
  spec.add_development_dependency 'rubocop-performance'
38
+ spec.add_development_dependency 'rubocop-rspec'
38
39
  end
metadata CHANGED
@@ -1,30 +1,30 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rack-graphql
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0
4
+ version: 2.0.0.rc
5
5
  platform: ruby
6
6
  authors:
7
7
  - Krzysztof Knapik
8
8
  - RenoFi Engineering Team
9
- autorequire:
9
+ autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
- date: 2020-01-02 00:00:00.000000000 Z
12
+ date: 2020-09-11 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: graphql
16
16
  requirement: !ruby/object:Gem::Requirement
17
17
  requirements:
18
- - - ">="
18
+ - - "~>"
19
19
  - !ruby/object:Gem::Version
20
- version: 1.9.0
20
+ version: '1.9'
21
21
  type: :runtime
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
- - - ">="
25
+ - - "~>"
26
26
  - !ruby/object:Gem::Version
27
- version: 1.9.0
27
+ version: '1.9'
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: oj
30
30
  requirement: !ruby/object:Gem::Requirement
@@ -43,16 +43,16 @@ dependencies:
43
43
  name: rack
44
44
  requirement: !ruby/object:Gem::Requirement
45
45
  requirements:
46
- - - ">="
46
+ - - "~>"
47
47
  - !ruby/object:Gem::Version
48
- version: 2.0.0
48
+ version: '2.0'
49
49
  type: :runtime
50
50
  prerelease: false
51
51
  version_requirements: !ruby/object:Gem::Requirement
52
52
  requirements:
53
- - - ">="
53
+ - - "~>"
54
54
  - !ruby/object:Gem::Version
55
- version: 2.0.0
55
+ version: '2.0'
56
56
  - !ruby/object:Gem::Dependency
57
57
  name: bundler
58
58
  requirement: !ruby/object:Gem::Requirement
@@ -151,7 +151,21 @@ dependencies:
151
151
  - - ">="
152
152
  - !ruby/object:Gem::Version
153
153
  version: '0'
154
- description:
154
+ - !ruby/object:Gem::Dependency
155
+ name: rubocop-rspec
156
+ requirement: !ruby/object:Gem::Requirement
157
+ requirements:
158
+ - - ">="
159
+ - !ruby/object:Gem::Version
160
+ version: '0'
161
+ type: :development
162
+ prerelease: false
163
+ version_requirements: !ruby/object:Gem::Requirement
164
+ requirements:
165
+ - - ">="
166
+ - !ruby/object:Gem::Version
167
+ version: '0'
168
+ description:
155
169
  email:
156
170
  - knapo@knapo.net
157
171
  - engineering@renofi.com
@@ -159,9 +173,16 @@ executables: []
159
173
  extensions: []
160
174
  extra_rdoc_files: []
161
175
  files:
176
+ - ".dependabot/config.yml"
177
+ - ".github/ISSUE_TEMPLATE/bug_report.md"
178
+ - ".github/ISSUE_TEMPLATE/config.yml"
179
+ - ".github/ISSUE_TEMPLATE/story.md"
180
+ - ".github/PULL_REQUEST_TEMPLATE.md"
181
+ - ".github/workflows/auto-approve.yml"
162
182
  - ".gitignore"
163
183
  - ".rspec"
164
184
  - ".travis.yml"
185
+ - CHANGELOG.md
165
186
  - Gemfile
166
187
  - Gemfile.lock
167
188
  - LICENSE
@@ -181,7 +202,7 @@ licenses:
181
202
  metadata:
182
203
  homepage_uri: https://github.com/RenoFi/rack-graphql
183
204
  source_code_uri: https://github.com/RenoFi/rack-graphql
184
- post_install_message:
205
+ post_install_message:
185
206
  rdoc_options: []
186
207
  require_paths:
187
208
  - lib
@@ -189,15 +210,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
189
210
  requirements:
190
211
  - - ">="
191
212
  - !ruby/object:Gem::Version
192
- version: '2.5'
213
+ version: '2.6'
193
214
  required_rubygems_version: !ruby/object:Gem::Requirement
194
215
  requirements:
195
- - - ">="
216
+ - - ">"
196
217
  - !ruby/object:Gem::Version
197
- version: '0'
218
+ version: 1.3.1
198
219
  requirements: []
199
- rubygems_version: 3.0.6
200
- signing_key:
220
+ rubygems_version: 3.1.2
221
+ signing_key:
201
222
  specification_version: 4
202
223
  summary: Rack middleware implementing graphql endpoint.
203
224
  test_files: []