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 +4 -4
- data/.dependabot/config.yml +11 -0
- data/.github/ISSUE_TEMPLATE/bug_report.md +33 -0
- data/.github/ISSUE_TEMPLATE/config.yml +1 -0
- data/.github/ISSUE_TEMPLATE/story.md +22 -0
- data/.github/PULL_REQUEST_TEMPLATE.md +18 -0
- data/.github/workflows/auto-approve.yml +16 -0
- data/.travis.yml +3 -2
- data/CHANGELOG.md +6 -0
- data/Gemfile.lock +37 -29
- data/README.md +9 -0
- data/Rakefile +1 -1
- data/lib/rack_graphql.rb +8 -0
- data/lib/rack_graphql/middleware.rb +36 -6
- data/lib/rack_graphql/version.rb +1 -1
- data/rack-graphql.gemspec +12 -11
- metadata +39 -18
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1075eb9d4a87a4e94b555c8b7f60a6a36c8369b2ff0d60a8e7be9db675f47494
|
4
|
+
data.tar.gz: ae1137154106d644ee012734ed0d5d21ac11412fb55a4ba12394bdc26e57b873
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2eeb4e9eed9cf0030651c30d6ef16bb53f14ece2cf2f94c36f162d13d3732fe53e699e64b59d2d807b2d64386453d21627f3f718a50db99e10ab74f1fa2c9c20
|
7
|
+
data.tar.gz: efe2f531123d657e2480a08f4d0b898d9cda4fea50bbe9422faaeb4fc0d4d3ddec13c93c54c4aae5a9792d7bece88652cb35bdeca82bfdbdf315f6c9df724427
|
@@ -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 }}"
|
data/.travis.yml
CHANGED
data/CHANGELOG.md
ADDED
data/Gemfile.lock
CHANGED
@@ -1,56 +1,63 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
rack-graphql (
|
5
|
-
graphql (
|
4
|
+
rack-graphql (2.0.0.rc)
|
5
|
+
graphql (~> 1.9)
|
6
6
|
oj
|
7
|
-
rack (
|
7
|
+
rack (~> 2.0)
|
8
8
|
|
9
9
|
GEM
|
10
10
|
remote: https://rubygems.org/
|
11
11
|
specs:
|
12
|
-
ast (2.4.
|
13
|
-
coderay (1.1.
|
14
|
-
diff-lcs (1.
|
15
|
-
graphql (1.
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
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.
|
35
|
-
rspec-support (~> 3.9.
|
36
|
-
rspec-expectations (3.9.
|
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.
|
43
|
-
rubocop (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.
|
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, <
|
50
|
-
rubocop-
|
51
|
-
|
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.
|
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.
|
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
data/lib/rack_graphql.rb
CHANGED
@@ -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
|
16
|
+
variables = ensure_hash(params['variables'])
|
17
17
|
operation_name = params['operationName']
|
18
|
-
context
|
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
|
-
[
|
23
|
+
[
|
24
|
+
200,
|
25
|
+
response_headers(result),
|
26
|
+
[response_body(result)]
|
27
|
+
]
|
24
28
|
rescue AmbiguousParamError => e
|
25
|
-
|
26
|
-
|
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
|
data/lib/rack_graphql/version.rb
CHANGED
data/rack-graphql.gemspec
CHANGED
@@ -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
|
7
|
-
spec.version
|
8
|
-
spec.authors
|
9
|
-
spec.email
|
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
|
11
|
+
spec.summary = 'Rack middleware implementing graphql endpoint.'
|
12
12
|
spec.homepage = 'https://github.com/RenoFi/rack-graphql'
|
13
|
-
spec.license
|
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
|
22
|
-
spec.executables
|
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.
|
25
|
+
spec.required_ruby_version = '>= 2.6'
|
26
26
|
|
27
|
-
spec.add_dependency 'graphql', '
|
27
|
+
spec.add_dependency 'graphql', '~> 1.9'
|
28
28
|
spec.add_dependency 'oj'
|
29
|
-
spec.add_dependency 'rack', '
|
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:
|
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-
|
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
|
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
|
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
|
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
|
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
|
-
|
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.
|
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:
|
218
|
+
version: 1.3.1
|
198
219
|
requirements: []
|
199
|
-
rubygems_version: 3.
|
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: []
|