betterdocs 0.8.0 → 0.9.1

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: 7324105b58e4926bdbcec0e372efda88e523c1c31fb4f0181e9d4cebc94b135c
4
- data.tar.gz: 6926a2ea9814cae5e763113badf138104f2fd9ae250c57e9cc8a16fb6eb18d43
3
+ metadata.gz: 0ade3c403e3b64e631aa874f8a041faa0060b271d7140f3e3b8651774ea68531
4
+ data.tar.gz: 8d0bd97c440253344047b7ee3a8ae27ba6c6d6f81e77b63399e25a69a5dbbee3
5
5
  SHA512:
6
- metadata.gz: ccaab04fbb9dfc351d79b9b722d1430c1a8afc5007f3f8bfd68d2d7d1c06ab4d26cf843e745750d1eb805b3d83122fb6b48597a8c1a3bc127fee5bc95e43443e
7
- data.tar.gz: 67968de292f5c9e0d17b0d2669d72ca75f1e6d709ea219de4f36beab3b99e14452dfa626ff4cb0fe6222419ba99e19f3be4f4765242dbd8d9f0622839d150cf9
6
+ metadata.gz: c0b80edb3b5fab827daa3630a53facaa5114604bd9e1ee7ed1618c28e7cbb8c7ba29068a148932a0510dc66295902ce0105fc14bfb6d861a0f559398cc4f121f
7
+ data.tar.gz: 20ec168d448cfec1c6bbed09ed30ef22fd8beeb9ec8c2a281f6da31594e900c755e80c285fd5cfb5669945d6ecf22c34814047c2a3ac4a1c0008128ee3c84da5
@@ -3,7 +3,7 @@ name: Betterdocs pipeline
3
3
  agent:
4
4
  machine:
5
5
  type: e1-standard-2
6
- os_image: ubuntu1804
6
+ os_image: ubuntu2004
7
7
 
8
8
  blocks:
9
9
  - name: "Unit Tests"
data/.tool-versions CHANGED
@@ -1 +1,2 @@
1
- ruby 3.0.1
1
+ ruby 3.0.4
2
+ bundler 2.3.8
data/README.md CHANGED
@@ -22,88 +22,92 @@ This api generator requires that you follow the [representer pattern](http://nic
22
22
 
23
23
  ## Controller
24
24
 
25
- class ThingsController < ApplicationController
26
- # :nocov: Documentation
27
- doc :action do
28
- section :things_list
29
- title 'A List of things ⇄ [Details](things_details.md)'
30
- description to <<-end
31
- This action shows a list of things. **Markdown** can be used.
32
- end
33
-
34
- param :order do
35
- description to <<-end
36
- Optional parameter to order the list.
37
- end
38
- required no
39
- value 'created_at:ASC'
40
- end
41
-
42
- response do
43
- generate_fake_result_with_representer
44
- end
45
- end
46
- # :nocov:
47
- def index
48
- render json: real_result_with_representer
49
- end
25
+ ```ruby
26
+ class ThingsController < ApplicationController
27
+ # :nocov: Documentation
28
+ doc :action do
29
+ section :things_list
30
+ title 'A List of things ⇄ [Details](things_details.md)'
31
+ description to <<-end
32
+ This action shows a list of things. **Markdown** can be used.
33
+ end
50
34
 
51
- # :nocov: Documentation
52
- doc :action do
53
- section :things_details
54
- title 'Things Details ⇄ [List](things_list.md)'
55
- description to <<-end
56
- The details of a thing. You must give an id for the thing
57
- end
58
-
59
- param :thing_id do
60
- description 'The id of the thing you want to see. Required.'
61
- required yes # this is the default
62
- value 38
63
- end
64
-
65
- response do
66
- generate_fake_details_response_with_representer
67
- end
68
- end
69
- # :nocov:
70
- def show
71
- render json: real_result_with_representer
35
+ param :order do
36
+ description to <<-end
37
+ Optional parameter to order the list.
72
38
  end
39
+ required no
40
+ value 'created_at:ASC'
41
+ end
42
+
43
+ response do
44
+ generate_fake_result_with_representer
45
+ end
46
+ end
47
+ # :nocov:
48
+ def index
49
+ render json: real_result_with_representer
50
+ end
51
+
52
+ # :nocov: Documentation
53
+ doc :action do
54
+ section :things_details
55
+ title 'Things Details ⇄ [List](things_list.md)'
56
+ description to <<-end
57
+ The details of a thing. You must give an id for the thing
58
+ end
59
+
60
+ param :thing_id do
61
+ description 'The id of the thing you want to see. Required.'
62
+ required yes # this is the default
63
+ value 38
64
+ end
65
+
66
+ response do
67
+ generate_fake_details_response_with_representer
73
68
  end
69
+ end
70
+ # :nocov:
71
+ def show
72
+ render json: real_result_with_representer
73
+ end
74
+ end
75
+ ```
74
76
 
75
77
  ## Representer
76
78
 
77
79
  Betterdocs comes with its own representer class. It is not documented
78
80
  yet but works kind of like [ROAR](https://github.com/apotonick/roar).
79
81
 
80
- module ThingsRepresenter
81
-
82
- extend ActiveSupport::Concern
83
- include Betterdocs::Representer
82
+ ```ruby
83
+ module ThingsRepresenter
84
84
 
85
- property :microfleem_count, if: -> { has_microfleems? }, as: :number_of_fleems do
86
- description 'If we have microfleems, return the count'
87
- types Integer
88
- example '5000'
89
- end
85
+ extend ActiveSupport::Concern
86
+ include Betterdocs::Representer
90
87
 
91
- property :title, as: :name do
92
- description to <<-end
93
- Represent the internal field "title" as the name of the thing
94
- end
95
- types String
96
- example 'my_name'
97
- end
88
+ property :microfleem_count, if: -> { has_microfleems? }, as: :number_of_fleems do
89
+ description 'If we have microfleems, return the count'
90
+ types Integer
91
+ example '5000'
92
+ end
98
93
 
99
- link :self do
100
- description to <<-end
101
- Link to this resource itself
102
- (<a href="opinion_details.md">things details</a>)
103
- end
104
- url { thing_url(id) }
105
- end
94
+ property :title, as: :name do
95
+ description to <<-end
96
+ Represent the internal field "title" as the name of the thing
97
+ end
98
+ types String
99
+ example 'my_name'
100
+ end
101
+
102
+ link :self do
103
+ description to <<-end
104
+ Link to this resource itself
105
+ (<a href="opinion_details.md">things details</a>)
106
106
  end
107
+ url { thing_url(id) }
108
+ end
109
+ end
110
+ ```
107
111
 
108
112
  AUTHORS
109
113
  -------
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.8.0
1
+ 0.9.1
data/betterdocs.gemspec CHANGED
@@ -1,21 +1,21 @@
1
1
  # -*- encoding: utf-8 -*-
2
- # stub: betterdocs 0.8.0 ruby lib
2
+ # stub: betterdocs 0.9.1 ruby lib
3
3
 
4
4
  Gem::Specification.new do |s|
5
5
  s.name = "betterdocs".freeze
6
- s.version = "0.8.0"
6
+ s.version = "0.9.1"
7
7
 
8
8
  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
9
9
  s.require_paths = ["lib".freeze]
10
10
  s.authors = ["betterplace Developers".freeze]
11
- s.date = "2021-07-07"
11
+ s.date = "2022-07-14"
12
12
  s.description = "This library provides tools to generate API documention for a web site's REST-ful JSON API.".freeze
13
13
  s.email = "developers@betterplace.org".freeze
14
14
  s.extra_rdoc_files = ["README.md".freeze, "lib/betterdocs.rb".freeze, "lib/betterdocs/controller_collector.rb".freeze, "lib/betterdocs/dsl.rb".freeze, "lib/betterdocs/dsl/common.rb".freeze, "lib/betterdocs/dsl/controller.rb".freeze, "lib/betterdocs/dsl/controller/action.rb".freeze, "lib/betterdocs/dsl/controller/action/param.rb".freeze, "lib/betterdocs/dsl/controller/action/response.rb".freeze, "lib/betterdocs/dsl/controller/controller.rb".freeze, "lib/betterdocs/dsl/controller/controller_base.rb".freeze, "lib/betterdocs/dsl/json_params.rb".freeze, "lib/betterdocs/dsl/json_params/param.rb".freeze, "lib/betterdocs/dsl/json_type_mapper.rb".freeze, "lib/betterdocs/dsl/naming.rb".freeze, "lib/betterdocs/dsl/representer.rb".freeze, "lib/betterdocs/dsl/result.rb".freeze, "lib/betterdocs/dsl/result/collection_property.rb".freeze, "lib/betterdocs/dsl/result/link.rb".freeze, "lib/betterdocs/dsl/result/property.rb".freeze, "lib/betterdocs/generator/config_shortcuts.rb".freeze, "lib/betterdocs/generator/markdown.rb".freeze, "lib/betterdocs/generator/swagger.rb".freeze, "lib/betterdocs/global.rb".freeze, "lib/betterdocs/json_params_representer.rb".freeze, "lib/betterdocs/json_params_representer_collector.rb".freeze, "lib/betterdocs/json_time_with_zone.rb".freeze, "lib/betterdocs/mix_into_controller.rb".freeze, "lib/betterdocs/railtie.rb".freeze, "lib/betterdocs/rake_tasks.rb".freeze, "lib/betterdocs/representer.rb".freeze, "lib/betterdocs/result_representer.rb".freeze, "lib/betterdocs/result_representer_collector.rb".freeze, "lib/betterdocs/sanitizer.rb".freeze, "lib/betterdocs/section.rb".freeze, "lib/betterdocs/version.rb".freeze]
15
15
  s.files = [".codeclimate.yml".freeze, ".gitignore".freeze, ".rspec".freeze, ".semaphore/semaphore.yml".freeze, ".tool-versions".freeze, ".vscode/settings.json".freeze, "COPYING".freeze, "Gemfile".freeze, "LICENSE".freeze, "README.md".freeze, "Rakefile".freeze, "VERSION".freeze, "betterdocs.gemspec".freeze, "lib/betterdocs.rb".freeze, "lib/betterdocs/controller_collector.rb".freeze, "lib/betterdocs/dsl.rb".freeze, "lib/betterdocs/dsl/common.rb".freeze, "lib/betterdocs/dsl/controller.rb".freeze, "lib/betterdocs/dsl/controller/action.rb".freeze, "lib/betterdocs/dsl/controller/action/param.rb".freeze, "lib/betterdocs/dsl/controller/action/response.rb".freeze, "lib/betterdocs/dsl/controller/controller.rb".freeze, "lib/betterdocs/dsl/controller/controller_base.rb".freeze, "lib/betterdocs/dsl/json_params.rb".freeze, "lib/betterdocs/dsl/json_params/param.rb".freeze, "lib/betterdocs/dsl/json_type_mapper.rb".freeze, "lib/betterdocs/dsl/naming.rb".freeze, "lib/betterdocs/dsl/representer.rb".freeze, "lib/betterdocs/dsl/result.rb".freeze, "lib/betterdocs/dsl/result/collection_property.rb".freeze, "lib/betterdocs/dsl/result/link.rb".freeze, "lib/betterdocs/dsl/result/property.rb".freeze, "lib/betterdocs/generator/config_shortcuts.rb".freeze, "lib/betterdocs/generator/markdown.rb".freeze, "lib/betterdocs/generator/markdown/templates/README.md.erb".freeze, "lib/betterdocs/generator/markdown/templates/section.md.erb".freeze, "lib/betterdocs/generator/swagger.rb".freeze, "lib/betterdocs/generator/swagger_static/index.html".freeze, "lib/betterdocs/global.rb".freeze, "lib/betterdocs/json_params_representer.rb".freeze, "lib/betterdocs/json_params_representer_collector.rb".freeze, "lib/betterdocs/json_time_with_zone.rb".freeze, "lib/betterdocs/mix_into_controller.rb".freeze, "lib/betterdocs/railtie.rb".freeze, "lib/betterdocs/rake_tasks.rb".freeze, "lib/betterdocs/representer.rb".freeze, "lib/betterdocs/result_representer.rb".freeze, "lib/betterdocs/result_representer_collector.rb".freeze, "lib/betterdocs/sanitizer.rb".freeze, "lib/betterdocs/section.rb".freeze, "lib/betterdocs/tasks/doc.rake".freeze, "lib/betterdocs/version.rb".freeze, "spec/assets/app/assets/images/logos/logo.png".freeze, "spec/assets/app/controllers/api/foos_controller.rb".freeze, "spec/assets/app/views/api_v4/documentation/assets/CHANGELOG.md".freeze, "spec/assets/config/betterdocs.yml".freeze, "spec/betterdocs/dsl/controller/action/param_spec.rb".freeze, "spec/betterdocs/dsl/controller/action/response_spec.rb".freeze, "spec/betterdocs/dsl/json_type_mapper_spec.rb".freeze, "spec/betterdocs/dsl/result/collection_property_spec.rb".freeze, "spec/betterdocs/dsl/result/link_spec.rb".freeze, "spec/betterdocs/dsl/result/property_spec.rb".freeze, "spec/betterdocs/generator/markdown_spec.rb".freeze, "spec/betterdocs/global_spec.rb".freeze, "spec/betterdocs/json_params_representer_spec.rb".freeze, "spec/betterdocs/result_representer_spec.rb".freeze, "spec/betterdocs/sanitizer_spec.rb".freeze, "spec/controller_dsl_spec.rb".freeze, "spec/result_representer_dsl_spec.rb".freeze, "spec/spec_helper.rb".freeze]
16
16
  s.homepage = "http://github.com/betterplace/betterdocs".freeze
17
17
  s.rdoc_options = ["--title".freeze, "Betterdocs".freeze, "--main".freeze, "README.md".freeze]
18
- s.rubygems_version = "3.2.15".freeze
18
+ s.rubygems_version = "3.3.14".freeze
19
19
  s.summary = "Betterplace API documentation library".freeze
20
20
  s.test_files = ["spec/assets/app/controllers/api/foos_controller.rb".freeze, "spec/betterdocs/dsl/controller/action/param_spec.rb".freeze, "spec/betterdocs/dsl/controller/action/response_spec.rb".freeze, "spec/betterdocs/dsl/json_type_mapper_spec.rb".freeze, "spec/betterdocs/dsl/result/collection_property_spec.rb".freeze, "spec/betterdocs/dsl/result/link_spec.rb".freeze, "spec/betterdocs/dsl/result/property_spec.rb".freeze, "spec/betterdocs/generator/markdown_spec.rb".freeze, "spec/betterdocs/global_spec.rb".freeze, "spec/betterdocs/json_params_representer_spec.rb".freeze, "spec/betterdocs/result_representer_spec.rb".freeze, "spec/betterdocs/sanitizer_spec.rb".freeze, "spec/controller_dsl_spec.rb".freeze, "spec/result_representer_dsl_spec.rb".freeze, "spec/spec_helper.rb".freeze]
21
21
 
@@ -24,7 +24,7 @@ Gem::Specification.new do |s|
24
24
  end
25
25
 
26
26
  if s.respond_to? :add_runtime_dependency then
27
- s.add_development_dependency(%q<gem_hadar>.freeze, ["~> 1.11.0"])
27
+ s.add_development_dependency(%q<gem_hadar>.freeze, ["~> 1.12.0"])
28
28
  s.add_development_dependency(%q<rake>.freeze, [">= 0"])
29
29
  s.add_development_dependency(%q<simplecov>.freeze, [">= 0"])
30
30
  s.add_development_dependency(%q<rspec>.freeze, [">= 0"])
@@ -35,7 +35,7 @@ Gem::Specification.new do |s|
35
35
  s.add_runtime_dependency(%q<infobar>.freeze, [">= 0"])
36
36
  s.add_runtime_dependency(%q<mize>.freeze, [">= 0"])
37
37
  else
38
- s.add_dependency(%q<gem_hadar>.freeze, ["~> 1.11.0"])
38
+ s.add_dependency(%q<gem_hadar>.freeze, ["~> 1.12.0"])
39
39
  s.add_dependency(%q<rake>.freeze, [">= 0"])
40
40
  s.add_dependency(%q<simplecov>.freeze, [">= 0"])
41
41
  s.add_dependency(%q<rspec>.freeze, [">= 0"])
@@ -18,6 +18,8 @@ class Betterdocs::Dsl::Result::Property < Betterdocs::Dsl::Representer
18
18
 
19
19
  dsl_accessor :types
20
20
 
21
+ dsl_accessor :optional
22
+
21
23
  dsl_accessor :sanitize do Betterdocs::Global.default_sanitize end
22
24
 
23
25
  def initialize(representer, name, options, &block)
@@ -10,7 +10,7 @@ module Betterdocs
10
10
  end
11
11
 
12
12
  def sections
13
- Dir[config.api_controllers.to_s].each(&method(:load))
13
+ config.api_controllers.each(&method(:load))
14
14
  config.sections
15
15
  end
16
16
 
@@ -39,7 +39,7 @@ module Betterdocs
39
39
  Betterdocs.rails.configuration.action_controller.asset_host = Betterdocs::Global.asset_host
40
40
  options = {
41
41
  host: Betterdocs::Global.api_host,
42
- protocol: Betterdocs::Global.api_protocol,
42
+ protocol: Betterdocs::Global.api_protocol
43
43
  }
44
44
  infobar.puts color(40, "Setting default_url_options to #{options.inspect}.")
45
45
  Betterdocs.rails.application.routes.default_url_options = options
@@ -58,7 +58,7 @@ module Betterdocs
58
58
  sections.values.each do |section|
59
59
  infobar.progress(
60
60
  message: " Section #{section.name.to_s.inspect} %c/%t in %te ETA %e @%E ",
61
- force: true,
61
+ force: true
62
62
  )
63
63
  @only =~ section.name or next if @only
64
64
 
@@ -74,7 +74,7 @@ module Betterdocs
74
74
  config.each_swagger_asset do |src, dst|
75
75
  infobar.progress(
76
76
  message: " Asset #{File.basename(src).inspect} %c/%t in %te ETA %e @%E ",
77
- force: true,
77
+ force: true
78
78
  )
79
79
  mkdir_p File.dirname(dst)
80
80
  cp Betterdocs.rails.root.join(src), dst
@@ -125,9 +125,9 @@ module Betterdocs
125
125
  offset: { type: 'integer' },
126
126
  total_pages: { type: 'integer' },
127
127
  current_page: { type: 'integer' },
128
- per_page: { type: 'integer' },
128
+ per_page: { type: 'integer' }
129
129
  },
130
- required: %w[total_entries offset current_page per_page total_pages data],
130
+ required: %w[total_entries offset current_page per_page total_pages data]
131
131
  }
132
132
  end
133
133
 
@@ -159,9 +159,9 @@ module Betterdocs
159
159
  backtrace: { type: 'array', items: { type: 'string' } },
160
160
  message: { type: 'string' },
161
161
  errors: { type: 'object' },
162
- links: { type: 'array', items: { type: 'string' } },
162
+ links: { type: 'array', items: { type: 'string' } }
163
163
  },
164
- required: %w[name status status_code reason backtrace message links],
164
+ required: %w[name status status_code reason backtrace message links]
165
165
  }
166
166
  end
167
167
 
@@ -198,7 +198,7 @@ module Betterdocs
198
198
  def get_request_definition(params)
199
199
  schema = { type: 'object', properties: {}, required: [] }
200
200
  params.each do |param|
201
- schema[:properties][param.name] = get_schema(param.types, nil, param.description)
201
+ schema[:properties][param.name] = get_schema(param.types, nil, param.description, nil)
202
202
  schema[:required].push(param.name) if param.required == true || param.required == 'yes'
203
203
  end
204
204
  schema
@@ -237,10 +237,10 @@ module Betterdocs
237
237
  description.include?('DEPRECATED')
238
238
  end
239
239
 
240
- def get_schema(types, sub_cls, description)
240
+ def get_schema(types, sub_cls, description, optional)
241
241
  type, nullable = get_type(types)
242
242
  deprecated = get_deprecated_from_description(description)
243
- res = { description: description, type: type, nullable: nullable, deprecated: deprecated }
243
+ res = { description: description, type: type, nullable: nullable, deprecated: deprecated, optional: optional }
244
244
  case type
245
245
  when 'array'
246
246
  items = { type: 'string' }
@@ -269,9 +269,10 @@ module Betterdocs
269
269
  properties: {
270
270
  rel: { type: 'string', enum: [] },
271
271
  href: { type: 'string' },
272
+ templated: { type: 'boolean' }
272
273
  },
273
- required: %w[rel href],
274
- },
274
+ required: %w[rel href]
275
+ }
275
276
  }
276
277
  enum = definition[:properties][:links][:items][:properties][:rel][:enum]
277
278
  enum.push(value) unless enum.include?(value)
@@ -291,7 +292,8 @@ module Betterdocs
291
292
  sub_cls = get_dto_name(subs[p.nesting_name])
292
293
  cls = sub_cls || resp_cls
293
294
  definition = initialise_definition(definitions, cls)
294
- definition[:properties][p.public_name] = get_schema(p.types, get_dto_name(p.sub_representer?), p.description)
295
+ definition[:properties][p.public_name] =
296
+ get_schema(p.types, get_dto_name(p.sub_representer?), p.description, p.optional)
295
297
  end
296
298
  (response.full?(:links) || []).each do |l|
297
299
  sub_cls = get_dto_name(subs[l.nesting_name])
@@ -302,13 +304,16 @@ module Betterdocs
302
304
 
303
305
  def get_schema_ref(name)
304
306
  {
305
- "$ref": "#/components/schemas/#{name}",
307
+ "$ref": "#/components/schemas/#{name}"
306
308
  }
307
309
  end
308
310
 
309
311
  def add_required_to_definitions(definitions)
310
312
  definitions.each do |def_key, d|
311
- req = d[:properties].select { |_k, v| v.key?(:nullable) }.keys
313
+ req = d[:properties].select { |_k, v| v.key?(:nullable) && !v[:optional] }.keys
314
+ d[:properties].each do |p|
315
+ p.delete(:optional)
316
+ end
312
317
  definitions[def_key][:required] = req unless req.empty?
313
318
  end
314
319
  end
@@ -1,6 +1,6 @@
1
1
  module Betterdocs
2
2
  # Betterdocs version
3
- VERSION = '0.8.0'
3
+ VERSION = '0.9.1'
4
4
  VERSION_ARRAY = VERSION.split('.').map(&:to_i) # :nodoc:
5
5
  VERSION_MAJOR = VERSION_ARRAY[0] # :nodoc:
6
6
  VERSION_MINOR = VERSION_ARRAY[1] # :nodoc:
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: betterdocs
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.0
4
+ version: 0.9.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - betterplace Developers
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-07-07 00:00:00.000000000 Z
11
+ date: 2022-07-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: gem_hadar
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 1.11.0
19
+ version: 1.12.0
20
20
  type: :development
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: 1.11.0
26
+ version: 1.12.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -297,7 +297,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
297
297
  - !ruby/object:Gem::Version
298
298
  version: '0'
299
299
  requirements: []
300
- rubygems_version: 3.2.15
300
+ rubygems_version: 3.3.14
301
301
  signing_key:
302
302
  specification_version: 4
303
303
  summary: Betterplace API documentation library