open_api_annotator 0.2.0 → 0.3.0

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: 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.