rack-graphql 1.0.0 → 1.2.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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.