openapi_first 0.6.7 → 0.6.8

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: a97a8557c2c782446dcf83c1edc035cfc261f7ae9ad518cc3c8fb5b9e1d97741
4
- data.tar.gz: ceae221aef3485c31e7ef95daf5b1275ca109de18b7aacf6341cea3cf9199ef1
3
+ metadata.gz: f870c2a9a6147e40c7e7da2051172e2adfa4e976c82d60663a97f3b7e7602315
4
+ data.tar.gz: 1a06921d63a5158255f94f536259e1a0c7bb88eef00a685338ccecba1ec7e330
5
5
  SHA512:
6
- metadata.gz: 0fca37f03eb1adb6ce7b925b43ba09b6d7f0a49a5ef39d5c0e09f532a55c840a0ff7f9286edb3f970a5dcd7c6eb3431dd28bb2e8e76c384b3bed86723ed2cfc6
7
- data.tar.gz: 4256631ab1817269fb602159473dc2130e6ce3e323cf4d3f7c5e90222e4f00b925d9611418810fef13f4d78377ac3ad9a889c026b75d6443cdb6e1b8301282bc
6
+ metadata.gz: 761aba28e1b69b8916ae86df80130786011ed5e5d8cdb599131e19476c8ec6526ab0574b42e6cb1ccbe11ce2421abbc030c5f0f4c566091447fc07e408a559f4
7
+ data.tar.gz: 1d6454f4bd3801f6f44e9b23a3e756f46b5cfbf7bcab739b60559e8c96677383216b5e3b41df6e9de2efd11af8b67c3ba1f286631f38e9d7ff93fb1b097a7915
data/.rubocop.yml CHANGED
@@ -6,3 +6,9 @@ BlockLength:
6
6
  Exclude:
7
7
  - 'spec/**/*.rb'
8
8
  - '*.gemspec'
9
+ Style/HashEachMethods:
10
+ Enabled: false
11
+ Style/HashTransformKeys:
12
+ Enabled: true
13
+ Style/HashTransformValues:
14
+ Enabled: true
data/CHANGELOG.md CHANGED
@@ -2,6 +2,10 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ ## 0.6.8
6
+ - Performance: About 25% performance increase (i/s) with help of c++ based radix-tree and some optimizations
7
+ - Update dependencies
8
+
5
9
  ## 0.6.7
6
10
  - Fix: version number of oas_parser
7
11
 
data/Gemfile.lock CHANGED
@@ -1,10 +1,12 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- openapi_first (0.6.7)
4
+ openapi_first (0.6.8)
5
5
  json_schemer (~> 0.2)
6
- multi_json (~> 1.13)
7
- oas_parser (~> 0.23)
6
+ multi_json (~> 1.14)
7
+ mustermann-contrib (~> 1.1.1)
8
+ oas_parser (~> 0.24)
9
+ r2ree (~> 0.1)
8
10
  rack (~> 2.1)
9
11
 
10
12
  GEM
@@ -21,7 +23,7 @@ GEM
21
23
  ast (2.4.0)
22
24
  builder (3.2.4)
23
25
  coderay (1.1.2)
24
- concurrent-ruby (1.1.5)
26
+ concurrent-ruby (1.1.6)
25
27
  deep_merge (1.2.1)
26
28
  diff-lcs (1.3)
27
29
  ecma-re-validator (0.2.0)
@@ -32,7 +34,7 @@ GEM
32
34
  i18n (1.8.2)
33
35
  concurrent-ruby (~> 1.0)
34
36
  jaro_winkler (1.5.4)
35
- json_schemer (0.2.8)
37
+ json_schemer (0.2.10)
36
38
  ecma-re-validator (~> 0.2)
37
39
  hana (~> 1.3)
38
40
  regexp_parser (~> 1.5)
@@ -41,33 +43,36 @@ GEM
41
43
  mini_portile2 (2.4.0)
42
44
  minitest (5.14.0)
43
45
  multi_json (1.14.1)
44
- mustermann (1.0.3)
45
- mustermann-contrib (1.0.3)
46
+ mustermann (1.1.1)
47
+ ruby2_keywords (~> 0.0.1)
48
+ mustermann-contrib (1.1.1)
46
49
  hansi (~> 0.2.0)
47
- mustermann (= 1.0.3)
48
- nokogiri (1.10.7)
50
+ mustermann (= 1.1.1)
51
+ nokogiri (1.10.8)
49
52
  mini_portile2 (~> 2.4.0)
50
- oas_parser (0.23.0)
53
+ oas_parser (0.24.0)
51
54
  activesupport (>= 4.0.0)
52
55
  addressable (~> 2.3)
53
56
  builder (~> 3.2.3)
54
57
  deep_merge (~> 1.2.1)
55
58
  hash-deep-merge
56
- mustermann-contrib (~> 1.0.3s)
59
+ mustermann-contrib (~> 1.1.1)
57
60
  nokogiri
58
61
  parallel (1.19.1)
59
- parser (2.7.0.2)
62
+ parser (2.7.0.3)
60
63
  ast (~> 2.4.0)
61
64
  pry (0.12.2)
62
65
  coderay (~> 1.1.0)
63
66
  method_source (~> 0.9.0)
64
67
  public_suffix (4.0.3)
65
- rack (2.1.1)
68
+ r2ree (0.1.2)
69
+ rack (2.2.2)
66
70
  rack-test (1.1.0)
67
71
  rack (>= 1.0, < 3)
68
72
  rainbow (3.0.0)
69
- rake (10.5.0)
70
- regexp_parser (1.6.0)
73
+ rake (13.0.1)
74
+ regexp_parser (1.7.0)
75
+ rexml (3.2.4)
71
76
  rspec (3.9.0)
72
77
  rspec-core (~> 3.9.0)
73
78
  rspec-expectations (~> 3.9.0)
@@ -81,14 +86,16 @@ GEM
81
86
  diff-lcs (>= 1.2.0, < 2.0)
82
87
  rspec-support (~> 3.9.0)
83
88
  rspec-support (3.9.2)
84
- rubocop (0.79.0)
89
+ rubocop (0.80.0)
85
90
  jaro_winkler (~> 1.5.1)
86
91
  parallel (~> 1.10)
87
92
  parser (>= 2.7.0.1)
88
93
  rainbow (>= 2.2.2, < 4.0)
94
+ rexml
89
95
  ruby-progressbar (~> 1.7)
90
96
  unicode-display_width (>= 1.4.0, < 1.7)
91
97
  ruby-progressbar (1.10.1)
98
+ ruby2_keywords (0.0.2)
92
99
  thread_safe (0.3.6)
93
100
  tzinfo (1.2.6)
94
101
  thread_safe (~> 0.1)
@@ -100,12 +107,12 @@ PLATFORMS
100
107
  ruby
101
108
 
102
109
  DEPENDENCIES
103
- bundler (~> 2.0)
110
+ bundler (~> 2)
104
111
  openapi_first!
105
112
  pry
106
113
  rack-test (~> 1)
107
- rake (~> 10.0)
108
- rspec (~> 3.0)
114
+ rake (~> 13)
115
+ rspec (~> 3)
109
116
  rubocop
110
117
 
111
118
  BUNDLED WITH
data/README.md CHANGED
@@ -4,7 +4,7 @@ OpenapiFirst helps to implement HTTP APIs based on an [OpenApi](https://www.open
4
4
 
5
5
  ## TL;DR
6
6
 
7
- Start with writing an OpenAPI file that describes the API, which you are about to write. Use a [validator](http://speccy.io/) to make sure the file is valid.
7
+ Start with writing an OpenAPI file that describes the API, which you are about to write. Use a [validator](https://github.com/stoplightio/spectral/) to make sure the file is valid.
8
8
  In the following examples, the OpenAPI file is named `openapi/openapi.yaml`.
9
9
 
10
10
  Now implement your API:
@@ -230,7 +230,7 @@ end
230
230
 
231
231
  ## Mocking
232
232
 
233
- Currently out of scope.
233
+ Out of scope. Use [Prism](https://github.com/stoplightio/prism) or [fakeit](https://github.com/JustinFeng/fakeit).
234
234
 
235
235
  ## Alternatives
236
236
 
@@ -238,9 +238,11 @@ This gem is inspired by [committee](https://github.com/interagent/committee), wh
238
238
 
239
239
  ## Development
240
240
 
241
- After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
241
+ Run `bin/setup` to install dependencies.
242
242
 
243
- To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
243
+ Run `bundle exec rspec` to run the tests.
244
+
245
+ See `bundle exec rake -T` for rubygems related tasks.
244
246
 
245
247
  ### Run benchmarks
246
248
 
@@ -1,10 +1,12 @@
1
1
  PATH
2
2
  remote: ..
3
3
  specs:
4
- openapi_first (0.6.6)
4
+ openapi_first (0.6.8)
5
5
  json_schemer (~> 0.2)
6
- multi_json (~> 1.13)
7
- oas_parser (~> 0.23)
6
+ multi_json (~> 1.14)
7
+ mustermann-contrib (~> 1.1.1)
8
+ oas_parser (~> 0.24)
9
+ r2ree (~> 0.1)
8
10
  rack (~> 2.1)
9
11
 
10
12
  GEM
@@ -26,11 +28,12 @@ GEM
26
28
  json_schema (~> 0.14, >= 0.14.3)
27
29
  openapi_parser (>= 0.6.1)
28
30
  rack (>= 1.5)
29
- concurrent-ruby (1.1.5)
31
+ concurrent-ruby (1.1.6)
30
32
  deep_merge (1.2.1)
31
- dry-configurable (0.9.0)
33
+ dry-configurable (0.11.3)
32
34
  concurrent-ruby (~> 1.0)
33
35
  dry-core (~> 0.4, >= 0.4.7)
36
+ dry-equalizer (~> 0.2)
34
37
  dry-container (0.7.2)
35
38
  concurrent-ruby (~> 1.0)
36
39
  dry-configurable (~> 0.1, >= 0.1.3)
@@ -38,11 +41,11 @@ GEM
38
41
  concurrent-ruby (~> 1.0)
39
42
  dry-equalizer (0.3.0)
40
43
  dry-inflector (0.2.0)
41
- dry-logic (1.0.5)
44
+ dry-logic (1.0.6)
42
45
  concurrent-ruby (~> 1.0)
43
46
  dry-core (~> 0.2)
44
47
  dry-equalizer (~> 0.2)
45
- dry-types (1.2.2)
48
+ dry-types (1.3.1)
46
49
  concurrent-ruby (~> 1.0)
47
50
  dry-container (~> 0.3)
48
51
  dry-core (~> 0.4, >= 0.4.4)
@@ -59,21 +62,16 @@ GEM
59
62
  rack (>= 1.3.0)
60
63
  rack-accept
61
64
  hana (1.3.5)
62
- hanami-router (2.0.0.alpha1)
63
- dry-inflector (~> 0.1)
64
- hanami-utils (~> 2.0.alpha)
65
+ hanami-router (2.0.0.alpha2)
65
66
  mustermann (~> 1.0)
66
67
  mustermann-contrib (~> 1.0)
67
68
  rack (~> 2.0)
68
- hanami-utils (2.0.0.alpha1)
69
- concurrent-ruby (~> 1.0)
70
- transproc (~> 1.0)
71
69
  hansi (0.2.0)
72
70
  hash-deep-merge (0.1.1)
73
71
  i18n (1.8.2)
74
72
  concurrent-ruby (~> 1.0)
75
73
  json_schema (0.20.8)
76
- json_schemer (0.2.8)
74
+ json_schemer (0.2.10)
77
75
  ecma-re-validator (~> 0.2)
78
76
  hana (~> 1.3)
79
77
  regexp_parser (~> 1.5)
@@ -82,30 +80,33 @@ GEM
82
80
  mini_portile2 (2.4.0)
83
81
  minitest (5.14.0)
84
82
  multi_json (1.14.1)
85
- mustermann (1.0.3)
86
- mustermann-contrib (1.0.3)
83
+ mustermann (1.1.1)
84
+ ruby2_keywords (~> 0.0.1)
85
+ mustermann-contrib (1.1.1)
87
86
  hansi (~> 0.2.0)
88
- mustermann (= 1.0.3)
87
+ mustermann (= 1.1.1)
89
88
  mustermann-grape (1.0.1)
90
89
  mustermann (>= 1.0.0)
91
- nokogiri (1.10.7)
90
+ nokogiri (1.10.8)
92
91
  mini_portile2 (~> 2.4.0)
93
- oas_parser (0.23.0)
92
+ oas_parser (0.24.0)
94
93
  activesupport (>= 4.0.0)
95
94
  addressable (~> 2.3)
96
95
  builder (~> 3.2.3)
97
96
  deep_merge (~> 1.2.1)
98
97
  hash-deep-merge
99
- mustermann-contrib (~> 1.0.3s)
98
+ mustermann-contrib (~> 1.1.1)
100
99
  nokogiri
101
100
  openapi_parser (0.8.0)
102
101
  public_suffix (4.0.3)
103
- rack (2.1.1)
102
+ r2ree (0.1.2)
103
+ rack (2.2.2)
104
104
  rack-accept (0.4.5)
105
105
  rack (>= 0.4)
106
106
  rack-protection (2.0.8.1)
107
107
  rack
108
- regexp_parser (1.6.0)
108
+ regexp_parser (1.7.0)
109
+ ruby2_keywords (0.0.2)
109
110
  seg (1.2.0)
110
111
  sinatra (2.0.8.1)
111
112
  mustermann (~> 1.0)
@@ -117,7 +118,6 @@ GEM
117
118
  seg
118
119
  thread_safe (0.3.6)
119
120
  tilt (2.0.10)
120
- transproc (1.1.1)
121
121
  tzinfo (1.2.6)
122
122
  thread_safe (~> 0.1)
123
123
  uri_template (0.7.0)
@@ -1,9 +1,16 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'r2ree'
4
+
3
5
  module OpenapiFirst
4
6
  class Definition
5
7
  def initialize(parsed)
6
8
  @spec = parsed
9
+ normalized_paths = @spec.paths.map do |path|
10
+ path.path.gsub('{', ':').gsub('}', '')
11
+ end
12
+ @path_tree = R2ree.new(normalized_paths)
13
+ @paths = @spec.paths
7
14
  end
8
15
 
9
16
  def operations
@@ -11,8 +18,10 @@ module OpenapiFirst
11
18
  end
12
19
 
13
20
  def find_operation!(request)
14
- @spec
15
- .path_by_path(request.path)
21
+ path_index = @path_tree.find(request.path)
22
+ raise OasParser::PathNotFound if path_index == -1
23
+
24
+ @paths[path_index]
16
25
  .endpoint_by_method(request.request_method.downcase)
17
26
  end
18
27
 
@@ -55,9 +55,16 @@ module OpenapiFirst
55
55
  env[QUERY_PARAMS],
56
56
  env[REQUEST_BODY]
57
57
  ].tap(&:compact!)
58
- hash = {}.merge!(*sources)
59
- hash.define_singleton_method(:env) { env }
60
- hash
58
+ Params.new(env).merge!(*sources)
59
+ end
60
+ end
61
+
62
+ class Params < Hash
63
+ attr_reader :env
64
+
65
+ def initialize(env)
66
+ @env = env
67
+ super
61
68
  end
62
69
  end
63
70
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module OpenapiFirst
4
- VERSION = '0.6.7'
4
+ VERSION = '0.6.8'
5
5
  end
@@ -33,12 +33,14 @@ Gem::Specification.new do |spec|
33
33
  spec.require_paths = ['lib']
34
34
 
35
35
  spec.add_dependency 'json_schemer', '~> 0.2'
36
- spec.add_dependency 'multi_json', '~> 1.13'
37
- spec.add_dependency 'oas_parser', '~> 0.23'
36
+ spec.add_dependency 'multi_json', '~> 1.14'
37
+ spec.add_dependency 'mustermann-contrib', '~> 1.1.1'
38
+ spec.add_dependency 'oas_parser', '~> 0.24'
39
+ spec.add_dependency 'r2ree', '~> 0.1'
38
40
  spec.add_dependency 'rack', '~> 2.1'
39
41
 
40
- spec.add_development_dependency 'bundler', '~> 2.0'
42
+ spec.add_development_dependency 'bundler', '~> 2'
41
43
  spec.add_development_dependency 'rack-test', '~> 1'
42
- spec.add_development_dependency 'rake', '~> 10.0'
43
- spec.add_development_dependency 'rspec', '~> 3.0'
44
+ spec.add_development_dependency 'rake', '~> 13'
45
+ spec.add_development_dependency 'rspec', '~> 3'
44
46
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: openapi_first
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.7
4
+ version: 0.6.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andreas Haller
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-01-22 00:00:00.000000000 Z
11
+ date: 2020-02-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: json_schemer
@@ -30,28 +30,56 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '1.13'
33
+ version: '1.14'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '1.13'
40
+ version: '1.14'
41
+ - !ruby/object:Gem::Dependency
42
+ name: mustermann-contrib
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 1.1.1
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 1.1.1
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: oas_parser
43
57
  requirement: !ruby/object:Gem::Requirement
44
58
  requirements:
45
59
  - - "~>"
46
60
  - !ruby/object:Gem::Version
47
- version: '0.23'
61
+ version: '0.24'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '0.24'
69
+ - !ruby/object:Gem::Dependency
70
+ name: r2ree
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '0.1'
48
76
  type: :runtime
49
77
  prerelease: false
50
78
  version_requirements: !ruby/object:Gem::Requirement
51
79
  requirements:
52
80
  - - "~>"
53
81
  - !ruby/object:Gem::Version
54
- version: '0.23'
82
+ version: '0.1'
55
83
  - !ruby/object:Gem::Dependency
56
84
  name: rack
57
85
  requirement: !ruby/object:Gem::Requirement
@@ -72,14 +100,14 @@ dependencies:
72
100
  requirements:
73
101
  - - "~>"
74
102
  - !ruby/object:Gem::Version
75
- version: '2.0'
103
+ version: '2'
76
104
  type: :development
77
105
  prerelease: false
78
106
  version_requirements: !ruby/object:Gem::Requirement
79
107
  requirements:
80
108
  - - "~>"
81
109
  - !ruby/object:Gem::Version
82
- version: '2.0'
110
+ version: '2'
83
111
  - !ruby/object:Gem::Dependency
84
112
  name: rack-test
85
113
  requirement: !ruby/object:Gem::Requirement
@@ -100,28 +128,28 @@ dependencies:
100
128
  requirements:
101
129
  - - "~>"
102
130
  - !ruby/object:Gem::Version
103
- version: '10.0'
131
+ version: '13'
104
132
  type: :development
105
133
  prerelease: false
106
134
  version_requirements: !ruby/object:Gem::Requirement
107
135
  requirements:
108
136
  - - "~>"
109
137
  - !ruby/object:Gem::Version
110
- version: '10.0'
138
+ version: '13'
111
139
  - !ruby/object:Gem::Dependency
112
140
  name: rspec
113
141
  requirement: !ruby/object:Gem::Requirement
114
142
  requirements:
115
143
  - - "~>"
116
144
  - !ruby/object:Gem::Version
117
- version: '3.0'
145
+ version: '3'
118
146
  type: :development
119
147
  prerelease: false
120
148
  version_requirements: !ruby/object:Gem::Requirement
121
149
  requirements:
122
150
  - - "~>"
123
151
  - !ruby/object:Gem::Version
124
- version: '3.0'
152
+ version: '3'
125
153
  description:
126
154
  email:
127
155
  - andreas.haller@posteo.de