rack-graphql 1.0.0 → 1.2.4

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: e7f00f1a34ea61f6d51c99f959813d95719796d732a61b307a74644c7d1195b0
4
- data.tar.gz: 865e223d7fdeba8694b40cbb33ecfaa825d60ee8fffd939baf6d16db0d72a480
3
+ metadata.gz: ad72995a97636738e4bffab0a6b6e238ff977c235305c7bcae168117de59115d
4
+ data.tar.gz: a6f19b6371d91d7de8db37f7f40909ef639ffd7b225cfc2f45e6ea16241afd94
5
5
  SHA512:
6
- metadata.gz: 60abee68f5762fe9aa1b7e0a1ca70e0431bfa898fb6324e2c15fb21b7a3ec67b5957332ab9cf154f73b35620d3efeb35cdfb37a026229c5af9b8611e4253c58f
7
- data.tar.gz: e87197a5ce76d2e57be41bcc30efb1b28541ea04e3e19919595a4c639d5b3a9e7ac196f1739378cc0072c535985546ca329726e4da68fc6d451ebf8b93905c21
6
+ metadata.gz: 8da35ce898800200e1c8b1dfea8c597c551c713c49a7699d42d0a4222b56e36f8aac189029b4b912a719367292ca5bb4a19b2ccffe661c367162ba66126093e7
7
+ data.tar.gz: 01f8fa1c60af82ecd4e5de10dfb56748c97f10aebcb736402a15bcbeec9e6c92e21fb1013ca2d33312b4191b559ed5c92769d83f0de707a361a922521af8e9cb
@@ -0,0 +1,18 @@
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"
12
+ automerged_updates:
13
+ - match:
14
+ dependency_type: "development"
15
+ update_type: "all"
16
+ - match:
17
+ dependency_type: "production"
18
+ 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
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 Dependabot 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]'
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
7
- - 2.6.5
8
- before_install: gem install bundler -v 2.0.2
6
+ - 2.6
7
+ - 2.7
8
+ before_install: gem install bundler
9
9
  script:
10
- - bundle exec rake
10
+ - bundle exec rake rubocop
11
+ - bundle exec rake spec
@@ -1,56 +1,63 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- rack-graphql (1.0.0)
5
- graphql (>= 1.9.0)
4
+ rack-graphql (1.2.4)
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)
12
+ ast (2.4.1)
13
+ coderay (1.1.3)
14
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.6.5.0)
15
+ graphql (1.11.1)
16
+ method_source (1.0.0)
17
+ oj (3.10.6)
18
+ parallel (1.19.2)
19
+ parser (2.7.1.3)
21
20
  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)
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.0)
35
- rspec-support (~> 3.9.0)
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
- rspec-mocks (3.9.0)
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.0)
43
- rubocop (0.78.0)
44
- jaro_winkler (~> 1.5.1)
43
+ rspec-support (3.9.3)
44
+ rubocop (0.85.1)
45
45
  parallel (~> 1.10)
46
- parser (>= 2.6)
46
+ parser (>= 2.7.0.1)
47
47
  rainbow (>= 2.2.2, < 4.0)
48
+ regexp_parser (>= 1.7)
49
+ rexml
50
+ rubocop-ast (>= 0.0.3)
48
51
  ruby-progressbar (~> 1.7)
49
- unicode-display_width (>= 1.4.0, < 1.7)
50
- rubocop-performance (1.5.1)
52
+ unicode-display_width (>= 1.4.0, < 2.0)
53
+ rubocop-ast (0.0.3)
54
+ parser (>= 2.7.0.1)
55
+ rubocop-performance (1.6.1)
51
56
  rubocop (>= 0.71.0)
57
+ rubocop-rspec (1.40.0)
58
+ rubocop (>= 0.68.1)
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/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]
@@ -1,9 +1,9 @@
1
- require 'json'
2
1
  require 'oj'
3
2
  require 'rack'
4
3
  require 'graphql'
5
4
 
6
5
  require 'rack_graphql/version'
6
+ require 'rack_graphql/exceptions'
7
7
  require 'rack_graphql/health_response_builder'
8
8
  require 'rack_graphql/middleware'
9
9
  require 'rack_graphql/application'
@@ -1,11 +1,11 @@
1
1
  module RackGraphql
2
2
  class Application
3
- def self.call(schema:, app_name: 'rack-graphql-service', context_handler: nil,
3
+ def self.call(schema:, app_name: 'rack-graphql-service', logger: nil, context_handler: nil,
4
4
  health_route: true, health_response_builder: RackGraphql::HealthResponseBuilder)
5
5
 
6
6
  ::Rack::Builder.new do
7
7
  map '/graphql' do
8
- run RackGraphql::Middleware.new(schema: schema, context_handler: context_handler)
8
+ run RackGraphql::Middleware.new(schema: schema, context_handler: context_handler, logger: logger)
9
9
  end
10
10
 
11
11
  if health_route
@@ -0,0 +1,3 @@
1
+ module RackGraphql
2
+ AmbiguousParamError = Class.new(ArgumentError)
3
+ end
@@ -18,13 +18,13 @@ module RackGraphql
18
18
  end
19
19
 
20
20
  def body
21
- JSON.generate(
22
- status: :ok,
23
- request_ip: request.ip,
24
- app_name: app_name,
25
- app_env: ENV['RACK_ENV'],
26
- host: ENV['HOSTNAME'],
27
- revision: ENV['REVISION']
21
+ Oj.dump(
22
+ 'status' => 'ok',
23
+ 'request_ip' => request.ip,
24
+ 'app_name' => app_name,
25
+ 'app_env' => ENV['RACK_ENV'],
26
+ 'host' => ENV['HOSTNAME'],
27
+ 'revision' => ENV['REVISION']
28
28
  )
29
29
  end
30
30
  end
@@ -1,7 +1,8 @@
1
1
  module RackGraphql
2
2
  class Middleware
3
- def initialize(schema:, context_handler: nil)
3
+ def initialize(schema:, logger: nil, context_handler: nil)
4
4
  @schema = schema
5
+ @logger = logger
5
6
  @context_handler = context_handler || ->(_) {}
6
7
  end
7
8
 
@@ -12,14 +13,16 @@ module RackGraphql
12
13
 
13
14
  return [400, {}, []] unless params.is_a?(Hash)
14
15
 
15
- variables = ensure_hash(params['variables'])
16
+ variables = ensure_hash(params['variables'])
16
17
  operation_name = params['operationName']
17
- context = context_handler.call(env)
18
+ context = context_handler.call(env)
18
19
 
20
+ log("Executing with params: #{params.inspect}, operationName: #{operation_name}, variables: #{variables.inspect}")
19
21
  result = execute(params: params, operation_name: operation_name, variables: variables, context: context)
20
22
 
21
23
  [200, response_headers(result), [response_body(result)]]
22
- rescue ArgumentError
24
+ rescue AmbiguousParamError => e
25
+ log("Responded with #{e.class} because of #{e.message}")
23
26
  [400, { 'Content-Type' => 'application/json' }, [Oj.dump({})]]
24
27
  ensure
25
28
  ActiveRecord::Base.clear_active_connections! if defined?(ActiveRecord::Base)
@@ -27,14 +30,14 @@ module RackGraphql
27
30
 
28
31
  private
29
32
 
30
- attr_reader :schema, :context_handler
33
+ attr_reader :schema, :logger, :context_handler
31
34
 
32
35
  def post_request?(env)
33
36
  env['REQUEST_METHOD'] == 'POST'
34
37
  end
35
38
 
36
39
  def post_data(env)
37
- ::Oj.load(env['rack.input'].gets)
40
+ ::Oj.load(env['rack.input'].gets.to_s)
38
41
  rescue Oj::ParseError
39
42
  nil
40
43
  end
@@ -48,14 +51,14 @@ module RackGraphql
48
51
  begin
49
52
  ensure_hash(Oj.load(ambiguous_param))
50
53
  rescue Oj::ParseError
51
- raise ArgumentError, "Unexpected parameter: #{ambiguous_param}"
54
+ raise AmbiguousParamError, "Unexpected parameter: #{ambiguous_param}"
52
55
  end
53
56
  when Hash
54
57
  ambiguous_param
55
58
  when nil
56
59
  {}
57
60
  else
58
- fail ArgumentError, "Unexpected parameter: #{ambiguous_param}"
61
+ fail AmbiguousParamError, "Unexpected parameter: #{ambiguous_param}"
59
62
  end
60
63
  end
61
64
 
@@ -116,5 +119,10 @@ module RackGraphql
116
119
 
117
120
  result.subscription?
118
121
  end
122
+
123
+ def log(message)
124
+ return unless logger
125
+ logger.debug("[rack-graphql] #{message}")
126
+ end
119
127
  end
120
128
  end
@@ -1,3 +1,3 @@
1
1
  module RackGraphql
2
- VERSION = '1.0.0'.freeze
2
+ VERSION = '1.2.4'.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,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rack-graphql
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.2.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Krzysztof Knapik
@@ -9,22 +9,22 @@ authors:
9
9
  autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
- date: 2019-12-20 00:00:00.000000000 Z
12
+ date: 2020-06-18 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,6 +151,20 @@ dependencies:
151
151
  - - ">="
152
152
  - !ruby/object:Gem::Version
153
153
  version: '0'
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'
154
168
  description:
155
169
  email:
156
170
  - knapo@knapo.net
@@ -159,6 +173,12 @@ 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"
@@ -170,6 +190,7 @@ files:
170
190
  - lib/rack-graphql.rb
171
191
  - lib/rack_graphql.rb
172
192
  - lib/rack_graphql/application.rb
193
+ - lib/rack_graphql/exceptions.rb
173
194
  - lib/rack_graphql/health_response_builder.rb
174
195
  - lib/rack_graphql/middleware.rb
175
196
  - lib/rack_graphql/version.rb
@@ -188,14 +209,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
188
209
  requirements:
189
210
  - - ">="
190
211
  - !ruby/object:Gem::Version
191
- version: '2.5'
212
+ version: '2.6'
192
213
  required_rubygems_version: !ruby/object:Gem::Requirement
193
214
  requirements:
194
215
  - - ">="
195
216
  - !ruby/object:Gem::Version
196
217
  version: '0'
197
218
  requirements: []
198
- rubygems_version: 3.0.6
219
+ rubygems_version: 3.1.2
199
220
  signing_key:
200
221
  specification_version: 4
201
222
  summary: Rack middleware implementing graphql endpoint.