request_handler 1.1.0 → 2.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.circleci/config.yml +75 -0
- data/CHANGELOG.md +35 -0
- data/CODE_OF_CONDUCT.md +69 -0
- data/Gemfile +3 -0
- data/{LICENSE.txt → LICENSE} +0 -0
- data/README.md +241 -45
- data/lib/request_handler.rb +8 -16
- data/lib/request_handler/base.rb +44 -35
- data/lib/request_handler/base_parser.rb +9 -0
- data/lib/request_handler/builder/base.rb +23 -0
- data/lib/request_handler/builder/body_builder.rb +27 -0
- data/lib/request_handler/builder/fieldsets_builder.rb +28 -0
- data/lib/request_handler/builder/fieldsets_resource_builder.rb +17 -0
- data/lib/request_handler/builder/filter_builder.rb +31 -0
- data/lib/request_handler/builder/headers_builder.rb +23 -0
- data/lib/request_handler/builder/include_options_builder.rb +23 -0
- data/lib/request_handler/builder/multipart_builder.rb +22 -0
- data/lib/request_handler/builder/multipart_resource_builder.rb +35 -0
- data/lib/request_handler/builder/options_builder.rb +97 -0
- data/lib/request_handler/builder/page_builder.rb +30 -0
- data/lib/request_handler/builder/page_resource_builder.rb +23 -0
- data/lib/request_handler/builder/query_builder.rb +23 -0
- data/lib/request_handler/builder/sort_options_builder.rb +23 -0
- data/lib/request_handler/concerns/config_helper.rb +25 -0
- data/lib/request_handler/config.rb +33 -0
- data/lib/request_handler/error.rb +14 -3
- data/lib/request_handler/fieldsets_parser.rb +35 -11
- data/lib/request_handler/filter_parser.rb +25 -1
- data/lib/request_handler/header_parser.rb +30 -3
- data/lib/request_handler/include_option_parser.rb +19 -6
- data/lib/request_handler/json_api_document_parser.rb +15 -1
- data/lib/request_handler/multipart_parser.rb +25 -17
- data/lib/request_handler/option_parser.rb +3 -3
- data/lib/request_handler/page_parser.rb +33 -17
- data/lib/request_handler/query_parser.rb +8 -0
- data/lib/request_handler/schema_parser.rb +41 -21
- data/lib/request_handler/sort_option_parser.rb +18 -7
- data/lib/request_handler/validation/definition_engine.rb +35 -0
- data/lib/request_handler/validation/dry_engine.rb +58 -0
- data/lib/request_handler/validation/engine.rb +32 -0
- data/lib/request_handler/validation/errors.rb +5 -0
- data/lib/request_handler/validation/result.rb +17 -0
- data/lib/request_handler/version.rb +1 -1
- data/request_handler.gemspec +9 -8
- metadata +66 -42
- data/.travis.yml +0 -40
@@ -0,0 +1,35 @@
|
|
1
|
+
require_relative 'errors'
|
2
|
+
require_relative 'engine'
|
3
|
+
require_relative 'result'
|
4
|
+
require 'active_support/core_ext/hash/keys'
|
5
|
+
|
6
|
+
module RequestHandler
|
7
|
+
module Validation
|
8
|
+
class DefinitionEngine < Engine
|
9
|
+
def self.valid_schema?(definition)
|
10
|
+
definition.is_a?(::Definition::Types::Base)
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.validate(value, schema, options: {}) # rubocop:disable Lint/UnusedMethodArgument
|
14
|
+
value = value.deep_symbolize_keys if value.is_a?(Hash)
|
15
|
+
result = schema.conform(value)
|
16
|
+
Result.new(output: result.value, errors: result.error_hash)
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.validate!(value, schema, options: {})
|
20
|
+
validate(value, schema, options).tap do |result|
|
21
|
+
valid = result.respond_to?(:valid?) ? result.valid? : result.success?
|
22
|
+
raise Validation::Error unless valid
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def self.error_message(validation_error)
|
27
|
+
validation_error.message
|
28
|
+
end
|
29
|
+
|
30
|
+
def self.error_pointer(validation_error)
|
31
|
+
validation_error.error_path.join('/')
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
require_relative 'errors'
|
2
|
+
require_relative 'engine'
|
3
|
+
require_relative 'result'
|
4
|
+
require 'active_support/core_ext/hash/keys'
|
5
|
+
|
6
|
+
module RequestHandler
|
7
|
+
module Validation
|
8
|
+
class DryEngine < Engine
|
9
|
+
def self.valid_schema?(schema)
|
10
|
+
schema_instance?(schema) || schema_class?(schema)
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.validate(value, schema, options: {})
|
14
|
+
value = value.deep_symbolize_keys if value.is_a?(Hash)
|
15
|
+
to_result(call_schema(value, schema, options))
|
16
|
+
rescue Dry::Types::ConstraintError => e
|
17
|
+
Result.new(output: nil, errors: { '' => e })
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.call_schema(value, schema, options)
|
21
|
+
if options.empty?
|
22
|
+
schema_instance?(schema) ? schema.call(value) : schema.new.call(value)
|
23
|
+
else
|
24
|
+
schema_instance?(schema) ? schema.with(options).call(value) : schema.new(options).call(value)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def self.schema_instance?(schema)
|
29
|
+
schema.respond_to?(:call)
|
30
|
+
end
|
31
|
+
|
32
|
+
def self.schema_class?(schema)
|
33
|
+
schema.respond_to?(:schema)
|
34
|
+
end
|
35
|
+
|
36
|
+
def self.validate!(value, schema, options: {})
|
37
|
+
validate(value, schema, options).tap do |result|
|
38
|
+
valid = result.respond_to?(:valid?) ? result.valid? : result.success?
|
39
|
+
raise Validation::Error unless valid
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def self.to_result(result)
|
44
|
+
output = result.respond_to?(:to_h) ? result.to_h : result
|
45
|
+
errors = result.respond_to?(:errors) ? result.errors.to_h : {}
|
46
|
+
Result.new(output: output, errors: errors)
|
47
|
+
end
|
48
|
+
|
49
|
+
def self.error_message(validation_error)
|
50
|
+
validation_error
|
51
|
+
end
|
52
|
+
|
53
|
+
def self.error_pointer(_validation_error)
|
54
|
+
nil
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
|
2
|
+
require_relative 'errors'
|
3
|
+
|
4
|
+
module RequestHandler
|
5
|
+
module Validation
|
6
|
+
class Engine
|
7
|
+
def self.valid_schema?(_schema)
|
8
|
+
raise NotImplementedError
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.validate(_value, _schema, options: {}) # rubocop:disable Lint/UnusedMethodArgument
|
12
|
+
raise NotImplementedError
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.validate!(_value, _schema, options: {}) # rubocop:disable Lint/UnusedMethodArgument
|
16
|
+
raise NotImplementedError
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.error_message(_validation_error)
|
20
|
+
raise NotImplementedError
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.error_pointer(_validation_error)
|
24
|
+
raise NotImplementedError
|
25
|
+
end
|
26
|
+
|
27
|
+
private
|
28
|
+
|
29
|
+
attr_accessor :value, :schema, :options
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
data/request_handler.gemspec
CHANGED
@@ -7,14 +7,14 @@ require 'request_handler/version'
|
|
7
7
|
Gem::Specification.new do |spec|
|
8
8
|
spec.name = 'request_handler'
|
9
9
|
spec.version = RequestHandler::VERSION
|
10
|
-
spec.authors = ['Andreas Eger', '
|
11
|
-
spec.email = ['andreas.eger@runtastic.com', '
|
10
|
+
spec.authors = ['Andreas Eger', 'Dominik Goltermann']
|
11
|
+
spec.email = ['andreas.eger@runtastic.com', 'dominik.goltermann@runtastic.com']
|
12
12
|
|
13
13
|
spec.summary = 'shared base for request_handler using dry-* gems'
|
14
14
|
spec.description = 'shared base for request_handler using dry-* gems'
|
15
15
|
spec.homepage = 'https://github.com/runtastic/request_handler'
|
16
16
|
spec.license = 'MIT'
|
17
|
-
spec.required_ruby_version = '~> 2.
|
17
|
+
spec.required_ruby_version = '~> 2.4'
|
18
18
|
|
19
19
|
spec.files = `git ls-files -z`.split("\x0").reject do |f|
|
20
20
|
f.match(%r{^(test|spec|features)/})
|
@@ -23,13 +23,12 @@ Gem::Specification.new do |spec|
|
|
23
23
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
24
24
|
spec.require_paths = ['lib']
|
25
25
|
|
26
|
-
spec.add_dependency '
|
27
|
-
spec.add_dependency 'dry-types', '~> 0.11', '>= 0.11.0'
|
28
|
-
|
29
|
-
spec.add_dependency 'confstruct', '~> 1.0.2'
|
26
|
+
spec.add_dependency 'docile', '~> 1.3'
|
30
27
|
spec.add_dependency 'multi_json', '~> 1.12'
|
28
|
+
spec.add_dependency 'activesupport', '> 4.0'
|
29
|
+
spec.add_dependency 'gem_config', '~> 0.3 '
|
31
30
|
|
32
|
-
spec.add_development_dependency 'bundler'
|
31
|
+
spec.add_development_dependency 'bundler'
|
33
32
|
spec.add_development_dependency 'rake', '~> 10.0'
|
34
33
|
spec.add_development_dependency 'rspec', '~> 3.5'
|
35
34
|
spec.add_development_dependency 'fuubar', '~> 2.2'
|
@@ -44,4 +43,6 @@ Gem::Specification.new do |spec|
|
|
44
43
|
spec.add_development_dependency 'guard-rubocop'
|
45
44
|
|
46
45
|
spec.add_development_dependency 'rack'
|
46
|
+
|
47
|
+
spec.add_development_dependency 'definition', '~> 0.5'
|
47
48
|
end
|
metadata
CHANGED
@@ -1,98 +1,86 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: request_handler
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1
|
4
|
+
version: 2.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andreas Eger
|
8
|
-
-
|
9
|
-
autorequire:
|
8
|
+
- Dominik Goltermann
|
9
|
+
autorequire:
|
10
10
|
bindir: exe
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2021-06-14 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
|
-
name:
|
15
|
+
name: docile
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
17
17
|
requirements:
|
18
18
|
- - "~>"
|
19
19
|
- !ruby/object:Gem::Version
|
20
|
-
version: '
|
21
|
-
- - ">="
|
22
|
-
- !ruby/object:Gem::Version
|
23
|
-
version: 0.11.0
|
20
|
+
version: '1.3'
|
24
21
|
type: :runtime
|
25
22
|
prerelease: false
|
26
23
|
version_requirements: !ruby/object:Gem::Requirement
|
27
24
|
requirements:
|
28
25
|
- - "~>"
|
29
26
|
- !ruby/object:Gem::Version
|
30
|
-
version: '
|
31
|
-
- - ">="
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: 0.11.0
|
27
|
+
version: '1.3'
|
34
28
|
- !ruby/object:Gem::Dependency
|
35
|
-
name:
|
29
|
+
name: multi_json
|
36
30
|
requirement: !ruby/object:Gem::Requirement
|
37
31
|
requirements:
|
38
32
|
- - "~>"
|
39
33
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
41
|
-
- - ">="
|
42
|
-
- !ruby/object:Gem::Version
|
43
|
-
version: 0.11.0
|
34
|
+
version: '1.12'
|
44
35
|
type: :runtime
|
45
36
|
prerelease: false
|
46
37
|
version_requirements: !ruby/object:Gem::Requirement
|
47
38
|
requirements:
|
48
39
|
- - "~>"
|
49
40
|
- !ruby/object:Gem::Version
|
50
|
-
version: '
|
51
|
-
- - ">="
|
52
|
-
- !ruby/object:Gem::Version
|
53
|
-
version: 0.11.0
|
41
|
+
version: '1.12'
|
54
42
|
- !ruby/object:Gem::Dependency
|
55
|
-
name:
|
43
|
+
name: activesupport
|
56
44
|
requirement: !ruby/object:Gem::Requirement
|
57
45
|
requirements:
|
58
|
-
- - "
|
46
|
+
- - ">"
|
59
47
|
- !ruby/object:Gem::Version
|
60
|
-
version:
|
48
|
+
version: '4.0'
|
61
49
|
type: :runtime
|
62
50
|
prerelease: false
|
63
51
|
version_requirements: !ruby/object:Gem::Requirement
|
64
52
|
requirements:
|
65
|
-
- - "
|
53
|
+
- - ">"
|
66
54
|
- !ruby/object:Gem::Version
|
67
|
-
version:
|
55
|
+
version: '4.0'
|
68
56
|
- !ruby/object:Gem::Dependency
|
69
|
-
name:
|
57
|
+
name: gem_config
|
70
58
|
requirement: !ruby/object:Gem::Requirement
|
71
59
|
requirements:
|
72
60
|
- - "~>"
|
73
61
|
- !ruby/object:Gem::Version
|
74
|
-
version: '
|
62
|
+
version: '0.3'
|
75
63
|
type: :runtime
|
76
64
|
prerelease: false
|
77
65
|
version_requirements: !ruby/object:Gem::Requirement
|
78
66
|
requirements:
|
79
67
|
- - "~>"
|
80
68
|
- !ruby/object:Gem::Version
|
81
|
-
version: '
|
69
|
+
version: '0.3'
|
82
70
|
- !ruby/object:Gem::Dependency
|
83
71
|
name: bundler
|
84
72
|
requirement: !ruby/object:Gem::Requirement
|
85
73
|
requirements:
|
86
|
-
- - "
|
74
|
+
- - ">="
|
87
75
|
- !ruby/object:Gem::Version
|
88
|
-
version: '
|
76
|
+
version: '0'
|
89
77
|
type: :development
|
90
78
|
prerelease: false
|
91
79
|
version_requirements: !ruby/object:Gem::Requirement
|
92
80
|
requirements:
|
93
|
-
- - "
|
81
|
+
- - ">="
|
94
82
|
- !ruby/object:Gem::Version
|
95
|
-
version: '
|
83
|
+
version: '0'
|
96
84
|
- !ruby/object:Gem::Dependency
|
97
85
|
name: rake
|
98
86
|
requirement: !ruby/object:Gem::Requirement
|
@@ -247,23 +235,38 @@ dependencies:
|
|
247
235
|
- - ">="
|
248
236
|
- !ruby/object:Gem::Version
|
249
237
|
version: '0'
|
238
|
+
- !ruby/object:Gem::Dependency
|
239
|
+
name: definition
|
240
|
+
requirement: !ruby/object:Gem::Requirement
|
241
|
+
requirements:
|
242
|
+
- - "~>"
|
243
|
+
- !ruby/object:Gem::Version
|
244
|
+
version: '0.5'
|
245
|
+
type: :development
|
246
|
+
prerelease: false
|
247
|
+
version_requirements: !ruby/object:Gem::Requirement
|
248
|
+
requirements:
|
249
|
+
- - "~>"
|
250
|
+
- !ruby/object:Gem::Version
|
251
|
+
version: '0.5'
|
250
252
|
description: shared base for request_handler using dry-* gems
|
251
253
|
email:
|
252
254
|
- andreas.eger@runtastic.com
|
253
|
-
-
|
255
|
+
- dominik.goltermann@runtastic.com
|
254
256
|
executables: []
|
255
257
|
extensions: []
|
256
258
|
extra_rdoc_files: []
|
257
259
|
files:
|
260
|
+
- ".circleci/config.yml"
|
258
261
|
- ".gitignore"
|
259
262
|
- ".rspec"
|
260
263
|
- ".rubocop.yml"
|
261
|
-
- ".travis.yml"
|
262
264
|
- CHANGELOG.md
|
265
|
+
- CODE_OF_CONDUCT.md
|
263
266
|
- Dangerfile
|
264
267
|
- Gemfile
|
265
268
|
- Guardfile
|
266
|
-
- LICENSE
|
269
|
+
- LICENSE
|
267
270
|
- README.md
|
268
271
|
- Rakefile
|
269
272
|
- bin/ci
|
@@ -271,7 +274,24 @@ files:
|
|
271
274
|
- bin/setup
|
272
275
|
- lib/request_handler.rb
|
273
276
|
- lib/request_handler/base.rb
|
277
|
+
- lib/request_handler/base_parser.rb
|
274
278
|
- lib/request_handler/body_parser.rb
|
279
|
+
- lib/request_handler/builder/base.rb
|
280
|
+
- lib/request_handler/builder/body_builder.rb
|
281
|
+
- lib/request_handler/builder/fieldsets_builder.rb
|
282
|
+
- lib/request_handler/builder/fieldsets_resource_builder.rb
|
283
|
+
- lib/request_handler/builder/filter_builder.rb
|
284
|
+
- lib/request_handler/builder/headers_builder.rb
|
285
|
+
- lib/request_handler/builder/include_options_builder.rb
|
286
|
+
- lib/request_handler/builder/multipart_builder.rb
|
287
|
+
- lib/request_handler/builder/multipart_resource_builder.rb
|
288
|
+
- lib/request_handler/builder/options_builder.rb
|
289
|
+
- lib/request_handler/builder/page_builder.rb
|
290
|
+
- lib/request_handler/builder/page_resource_builder.rb
|
291
|
+
- lib/request_handler/builder/query_builder.rb
|
292
|
+
- lib/request_handler/builder/sort_options_builder.rb
|
293
|
+
- lib/request_handler/concerns/config_helper.rb
|
294
|
+
- lib/request_handler/config.rb
|
275
295
|
- lib/request_handler/document_parser.rb
|
276
296
|
- lib/request_handler/error.rb
|
277
297
|
- lib/request_handler/fieldsets_parser.rb
|
@@ -288,13 +308,18 @@ files:
|
|
288
308
|
- lib/request_handler/schema_parser.rb
|
289
309
|
- lib/request_handler/sort_option.rb
|
290
310
|
- lib/request_handler/sort_option_parser.rb
|
311
|
+
- lib/request_handler/validation/definition_engine.rb
|
312
|
+
- lib/request_handler/validation/dry_engine.rb
|
313
|
+
- lib/request_handler/validation/engine.rb
|
314
|
+
- lib/request_handler/validation/errors.rb
|
315
|
+
- lib/request_handler/validation/result.rb
|
291
316
|
- lib/request_handler/version.rb
|
292
317
|
- request_handler.gemspec
|
293
318
|
homepage: https://github.com/runtastic/request_handler
|
294
319
|
licenses:
|
295
320
|
- MIT
|
296
321
|
metadata: {}
|
297
|
-
post_install_message:
|
322
|
+
post_install_message:
|
298
323
|
rdoc_options: []
|
299
324
|
require_paths:
|
300
325
|
- lib
|
@@ -302,16 +327,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
302
327
|
requirements:
|
303
328
|
- - "~>"
|
304
329
|
- !ruby/object:Gem::Version
|
305
|
-
version: '2.
|
330
|
+
version: '2.4'
|
306
331
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
307
332
|
requirements:
|
308
333
|
- - ">="
|
309
334
|
- !ruby/object:Gem::Version
|
310
335
|
version: '0'
|
311
336
|
requirements: []
|
312
|
-
|
313
|
-
|
314
|
-
signing_key:
|
337
|
+
rubygems_version: 3.1.2
|
338
|
+
signing_key:
|
315
339
|
specification_version: 4
|
316
340
|
summary: shared base for request_handler using dry-* gems
|
317
341
|
test_files: []
|
data/.travis.yml
DELETED
@@ -1,40 +0,0 @@
|
|
1
|
-
language: ruby
|
2
|
-
cache: bundler
|
3
|
-
rvm:
|
4
|
-
- 2.2.10
|
5
|
-
- 2.3.7
|
6
|
-
- 2.4.4
|
7
|
-
- 2.5.1
|
8
|
-
- jruby-9.1.17.0
|
9
|
-
- jruby-9.2.0.0
|
10
|
-
jdk:
|
11
|
-
- oraclejdk8
|
12
|
-
env:
|
13
|
-
- "JRUBY_OPTS='--dev --debug'"
|
14
|
-
- "JRUBY_OPTS='-Xcompile.invokedynamic=true --debug'"
|
15
|
-
matrix:
|
16
|
-
exclude:
|
17
|
-
- rvm: 2.2.10
|
18
|
-
jdk: oraclejdk8
|
19
|
-
env: "JRUBY_OPTS='-Xcompile.invokedynamic=true --debug'"
|
20
|
-
- rvm: 2.3.7
|
21
|
-
jdk: oraclejdk8
|
22
|
-
env: "JRUBY_OPTS='-Xcompile.invokedynamic=true --debug'"
|
23
|
-
- rvm: 2.4.4
|
24
|
-
jdk: oraclejdk8
|
25
|
-
env: "JRUBY_OPTS='-Xcompile.invokedynamic=true --debug'"
|
26
|
-
- rvm: 2.5.1
|
27
|
-
jdk: oraclejdk8
|
28
|
-
env: "JRUBY_OPTS='-Xcompile.invokedynamic=true --debug'"
|
29
|
-
allow_failures:
|
30
|
-
- rvm: jruby-9.1.17.0
|
31
|
-
jdk: oraclejdk8
|
32
|
-
env: "JRUBY_OPTS='-Xcompile.invokedynamic=true --debug'"
|
33
|
-
- rvm: jruby-9.2.0.0
|
34
|
-
jdk: oraclejdk8
|
35
|
-
env: "JRUBY_OPTS='-Xcompile.invokedynamic=true --debug'"
|
36
|
-
before_install:
|
37
|
-
- gem update --system
|
38
|
-
- gem install bundler -v 1.16.2
|
39
|
-
before_script:
|
40
|
-
- bundle exec danger
|