open_api_annotator 0.2.0 → 0.3.0

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: 1bb9e46a88ce7e7634106d19d12c7df63d2f5760456c0419bf90607e49e5f10b
4
- data.tar.gz: 0f6d152a177721e6b753a2867cc7670d93d63c78734b38da6119ba57f273f9bb
3
+ metadata.gz: 82d5be185e7a5b82a671e9aa01df93bec5019fb50c08d9f98726ab9b93ed006d
4
+ data.tar.gz: 01aad8fa87590fa903129b0a1463c21b7cb644c3bfa68a158bf29a01076bcb12
5
5
  SHA512:
6
- metadata.gz: 5ffe01f6857c993dad939e5e0ae61091bc2536223ac6705c06d2f50d7646a53c8db746a7b76db88f24406e295dc2bf5f10b38cd9862175d3a8410afe65113da2
7
- data.tar.gz: 65d7dd45c64987f61bcaee80fa44c2a1b33215ccce83e5e7119a66cd61b96ead87682ab94858b952e3714806f3753beb648cfb6b9c59c22feac36775acea9410
6
+ metadata.gz: 188c9e6692583b26d1078cc850b4a236f9e8a2fac23ebd72b505978e28269a288d1348ae32a6eb0f16ec74464ab105caa1ca2207f6a8bed524c04622f64ce33d
7
+ data.tar.gz: a77a59eb416c77d93fcd18112889c583df63c5151ac5a33e3fcd617a26ef85dcc592df8fced40c8f597a578aec17ea7d1aa9e68f4aa19992d4ce76af585d7026
@@ -1,3 +1,7 @@
1
+ ## 0.3.0
2
+ - Add path parameters to parameters #8
3
+ - Enable add always requried fields #9
4
+
1
5
  ## 0.1.0
2
6
  First release
3
7
 
data/README.md CHANGED
@@ -76,7 +76,7 @@ end
76
76
 
77
77
  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.
78
78
 
79
- 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).
79
+ To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number using `bundle exec bump patch`(or minor, major), 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).
80
80
 
81
81
  ## Contributing
82
82
 
@@ -21,6 +21,10 @@ module OpenApiAnnotator
21
21
  schema.properties.merge!(build_attribute_properties(serializer))
22
22
  schema.properties.merge!(build_has_many_association_properties(serializer))
23
23
  schema.properties.merge!(build_has_one_and_belongs_to_association_properties(serializer))
24
+ required_fields = OpenApiAnnotator.config.always_required_fields
25
+ if required_fields.present?
26
+ schema.required = required_fields.select{|field| schema.properties[field] }
27
+ end
24
28
  schema
25
29
  end
26
30
 
@@ -28,11 +32,22 @@ module OpenApiAnnotator
28
32
  properties = {}
29
33
  serializer.open_api_attributes.each do |attribute|
30
34
  next unless attribute.valid?
31
- properties[attribute.name.to_sym] = OpenApi::Schema.new(
32
- type: attribute.type,
33
- format: attribute.format,
34
- nullable: attribute.nullable,
35
- )
35
+ properties[attribute.name.to_sym] = if attribute.type.is_a?(Array)
36
+ OpenApi::Schema.new(
37
+ type: "array",
38
+ items: OpenApi::Schema.new(
39
+ type: attribute.type.first,
40
+ format: attribute.format,
41
+ nullable: attribute.nullable,
42
+ )
43
+ )
44
+ else
45
+ OpenApi::Schema.new(
46
+ type: attribute.type,
47
+ format: attribute.format,
48
+ nullable: attribute.nullable,
49
+ )
50
+ end
36
51
  end
37
52
  properties
38
53
  end
@@ -5,6 +5,7 @@ module OpenApiAnnotator
5
5
  :path_regexp,
6
6
  :application_controller_class_name,
7
7
  :application_serializer_class_name,
8
+ :always_required_fields,
8
9
  )
9
10
  def application_serializer_class
10
11
  if application_serializer_class_name
@@ -50,6 +51,7 @@ module OpenApiAnnotator
50
51
  validate_path_regexp!
51
52
  validate_application_controller_class_name!
52
53
  validate_application_serializer_class_name!
54
+ validate_always_required_fields!
53
55
  end
54
56
 
55
57
  def validate_info!
@@ -95,6 +97,10 @@ module OpenApiAnnotator
95
97
  # Do nothing
96
98
  end
97
99
 
100
+ def validate_always_required_fields!
101
+ # Do nothing
102
+ end
103
+
98
104
  class InvalidError < StandardError; end
99
105
  end
100
106
  end
@@ -23,14 +23,26 @@ module OpenApiAnnotator
23
23
  media_type = resolve_media_type(route.controller_name, route.action_name)
24
24
  description = build_description(route.controller_name, route.action_name)
25
25
  next unless media_type
26
+ operation = OpenApi::Operation.new(responses: OpenApi::Responses.new)
26
27
  response = OpenApi::Response.new(
27
28
  description: description,
28
29
  content: {
29
30
  "application/json" => media_type,
30
31
  }
31
32
  )
32
- operation = OpenApi::Operation.new(responses: OpenApi::Responses.new)
33
33
  operation.responses["200"] = response
34
+ route.parameters.each do |parameter|
35
+ parameter = OpenApi::Parameter.new(
36
+ name: parameter[:name],
37
+ in: :path,
38
+ required: true,
39
+ schema: OpenApi::Schema.new(
40
+ type: :string
41
+ )
42
+ )
43
+ operation.parameters = [] unless operation.parameters
44
+ operation.parameters.push(parameter)
45
+ end
34
46
  path_item.operations[route.http_verb.underscore] = operation
35
47
  end
36
48
  path_item
@@ -81,38 +93,43 @@ module OpenApiAnnotator
81
93
  end
82
94
  end
83
95
 
84
- Route = Struct.new(:http_verb, :path, :controller_name, :action_name) do
85
- def initialize(http_verb:, path:, controller_name:, action_name:)
96
+ Route = Struct.new(:http_verb, :path, :controller_name, :action_name, :parameters) do
97
+ def initialize(http_verb:, path:, controller_name:, action_name:, parameters: [])
86
98
  self.http_verb = http_verb
87
99
  self.path = path
88
100
  self.controller_name = controller_name
89
101
  self.action_name = action_name
102
+ self.parameters = parameters
90
103
  end
91
104
  end
92
105
 
93
106
  class RoutesFinder
94
107
  def find_all
95
108
  @routes ||= Rails.application.routes.routes.routes.map do |route|
96
- path = PathResolver.new.resolve(route.path.ast)
109
+ parameters = []
110
+ path = PathResolver.new.resolve(route.path.ast, parameters)
97
111
  controller = route.requirements[:controller]
98
112
  action = route.requirements[:action]
99
- Route.new(http_verb: route.verb, path: path, controller_name: controller, action_name: action)
113
+ Route.new(http_verb: route.verb, path: path, controller_name: controller, action_name: action, parameters: parameters)
100
114
  end
101
115
  end
102
116
  end
103
117
 
104
118
  class PathResolver
105
- def resolve(ast)
119
+ def resolve(ast, parameters_context = [])
106
120
  res = ""
107
121
  if ast.type == :CAT
108
122
  left = ast.left
109
123
  res +=
110
124
  if left.type == :SYMBOL
125
+ parameters_context.push({
126
+ name: left.name,
127
+ })
111
128
  "{#{left.name}}"
112
129
  else
113
130
  left.to_s
114
131
  end
115
- res += resolve(ast.right)
132
+ res += resolve(ast.right, parameters_context)
116
133
  end
117
134
  res
118
135
  end
@@ -1,3 +1,3 @@
1
1
  module OpenApiAnnotator
2
- VERSION = "0.2.0"
2
+ VERSION = "0.3.0"
3
3
  end
@@ -21,7 +21,7 @@ Gem::Specification.new do |spec|
21
21
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
22
22
  spec.require_paths = ["lib"]
23
23
 
24
- spec.add_dependency "open_api", ">= 0.3.4"
24
+ spec.add_dependency "open_api", ">= 0.4.0"
25
25
  spec.add_dependency "active_model_serializers", "~> 0.10.0"
26
26
 
27
27
  rails_versions = ['>= 4.1', '< 6']
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: open_api_annotator
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kent Nagata
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-02-01 00:00:00.000000000 Z
11
+ date: 2019-04-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: open_api
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 0.3.4
19
+ version: 0.4.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: 0.3.4
26
+ version: 0.4.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: active_model_serializers
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -220,7 +220,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
220
220
  - !ruby/object:Gem::Version
221
221
  version: '0'
222
222
  requirements: []
223
- rubygems_version: 3.0.1
223
+ rubyforge_project:
224
+ rubygems_version: 2.7.6
224
225
  signing_key:
225
226
  specification_version: 4
226
227
  summary: OpenApi spec generation by bottom-up.