r2-oas 0.4.1 → 0.5.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: a6ff37fb9f530ea30d7a06154dd6036ae63fdbd1358cab2d38bad3b2fd6334fc
4
- data.tar.gz: 99f6574107d260c8961d645c1dfbc29b19143b19d5a903554e4576be39280f9f
3
+ metadata.gz: 7a8548f2c821fe7b76548b748dbe733ce0f11386d76ae046cc047b0fe0eb017b
4
+ data.tar.gz: ee6ebb9740a854142b929195a57206cf8cedfeb1f965e4217e048152effc03a0
5
5
  SHA512:
6
- metadata.gz: 964aefff2e439e5d0eab907fc0c1301826dd81bdefa23f07d8ec822b054a4eb31c689b8e927e0ed28b4c790a26013c8d14d65d5706205fec5a02207fee661ec3
7
- data.tar.gz: 484e127af388c3b633a5a7683f8493fa95fa2d1a6ef4981d227e37ce2676d7022170c18d708eb6ecb23eacfa9c48ac39865fe9e746e7d6fd94073e224c673047
6
+ metadata.gz: fcdf6903f652e7109c137b05123d6d244aaec02e9bb2a1fd657bc710ae549c6d84bd887c281a2f881e070d757299f17334200273bb2b3f9e6b988d16578a246b
7
+ data.tar.gz: 129cfd622a8bd4c5b55bd5415cb24f24d0b918ea7cd9781aec7127b41640c3fe116b5f7e4dfe20add9ec68993d075471d172bd4919fda957893dc8b747c48ce2
@@ -1,4 +1,14 @@
1
- # Change Log
1
+ # CHANGELOG
2
+
3
+ ## v0.5.0
4
+
5
+ 2020-01-29
6
+
7
+ - [`Breaking`] Remove `use_object_classes` option ([#171](https://github.com/yukihirop/r2-oas/pull/171))
8
+ - [`Feature`] Upgrade init command ([#176](https://github.com/yukihirop/r2-oas/pull/176))
9
+ - [`EOL`] EOL Ruby `2.3` and Support over Ruby `2.5.0` ([#170](https://github.com/yukihirop/r2-oas/pull/170))
10
+
11
+ Please see mileston [v0.5.0](https://github.com/yukihirop/r2-oas/milestone/5?closed=1)
2
12
 
3
13
  ## v0.4.1
4
14
 
@@ -50,8 +50,17 @@ $ brew cask install chromedriver
50
50
  gemをrequire後、以下のrakeタスクを実行するだけです。
51
51
 
52
52
  ```bash
53
- bundle exec routes:oas:docs
54
- bundle exec routes:oas:editor
53
+ $ bundle exec rake routes:oas:init
54
+ create oas_docs
55
+ create oas_docs/.paths
56
+ create oas_docs/plugins/helpers
57
+ create oas_docs/tasks/helpers
58
+ create oas_docs/plugins/.gitkeep
59
+ create oas_docs/plugins/helpers/.gitkeep
60
+ create oas_docs/tasks/.gitkeep
61
+ create oas_docs/tasks/helpers/.gitkeep
62
+ $ bundle exec rake routes:oas:docs
63
+ $ bundle exec rake routes:oas:editor
55
64
  ```
56
65
 
57
66
  #### Generate docs
@@ -79,6 +88,14 @@ railsプロジェクトのルートディレクトリで以下のコマンドが
79
88
 
80
89
  ```bash
81
90
  $ bundle exec rake routes:oas:init
91
+ create oas_docs
92
+ create oas_docs/.paths
93
+ create oas_docs/plugins/helpers
94
+ create oas_docs/tasks/helpers
95
+ create oas_docs/plugins/.gitkeep
96
+ create oas_docs/plugins/helpers/.gitkeep
97
+ create oas_docs/tasks/.gitkeep
98
+ create oas_docs/tasks/helpers/.gitkeep
82
99
  ```
83
100
 
84
101
  ### Generate
@@ -141,7 +158,7 @@ $ OAS_FILE="~/Desktop/swagger.yml" bundle exec rake routes:oas:analyze
141
158
 
142
159
  ## ❤️ Support Ruby Version
143
160
 
144
- - Ruby (>= 2.3.3p222 (2016-11-21 revision 56859) [x86_64-darwin18])
161
+ - Ruby (>= 2.5.0)
145
162
 
146
163
  ## ❤️ Support Rouging
147
164
 
@@ -185,8 +202,6 @@ OpenAPIの3.0.0をサポートしてます。
185
202
  .
186
203
  .
187
204
  ===== Bundle install for All Support Ruby Result =====
188
- ruby-2.3.3: 0
189
- ruby-2.4.2: 0
190
205
  ruby-2.5.8: 0
191
206
  ruby-2.6.6: 0
192
207
  ruby-2.7.1: 0
@@ -214,8 +229,6 @@ ruby-2.7.1: 0
214
229
  .
215
230
  .
216
231
  ===== Rspec for All Support Ruby Result =====
217
- ruby-2.3.3: 0
218
- ruby-2.4.2: 0
219
232
  ruby-2.5.8: 0
220
233
  ruby-2.6.6: 0
221
234
  ruby-2.7.1: 0
data/README.md CHANGED
@@ -64,8 +64,17 @@ R2OAS.load_tasks
64
64
  ```
65
65
 
66
66
  ```bash
67
- bundle exec routes:oas:docs
68
- bundle exec routes:oas:editor
67
+ $ bundle exec rake routes:oas:init
68
+ create oas_docs
69
+ create oas_docs/.paths
70
+ create oas_docs/plugins/helpers
71
+ create oas_docs/tasks/helpers
72
+ create oas_docs/plugins/.gitkeep
73
+ create oas_docs/plugins/helpers/.gitkeep
74
+ create oas_docs/tasks/.gitkeep
75
+ create oas_docs/tasks/helpers/.gitkeep
76
+ $ bundle exec rake routes:oas:docs
77
+ $ bundle exec rake routes:oas:editor
69
78
  ```
70
79
 
71
80
  #### Generate docs
@@ -90,6 +99,14 @@ Initialize r2-oas.
90
99
 
91
100
  ```bash
92
101
  $ bundle exec rake routes:oas:init
102
+ create oas_docs
103
+ create oas_docs/.paths
104
+ create oas_docs/plugins/helpers
105
+ create oas_docs/tasks/helpers
106
+ create oas_docs/plugins/.gitkeep
107
+ create oas_docs/plugins/helpers/.gitkeep
108
+ create oas_docs/tasks/.gitkeep
109
+ create oas_docs/tasks/helpers/.gitkeep
93
110
  ```
94
111
 
95
112
  ### Generate
@@ -147,7 +164,7 @@ Full docs are available at https://yukihirop.github.io/r2-oas
147
164
 
148
165
  ## ❤️ Support Ruby Version
149
166
 
150
- - Ruby (>= 2.3.3p222 (2016-11-21 revision 56859) [x86_64-darwin18])
167
+ - Ruby (>= 2.5.0)
151
168
 
152
169
  ## ❤️ Support Rouging
153
170
 
@@ -189,8 +206,6 @@ Full docs are available at https://yukihirop.github.io/r2-oas/#/setting/configur
189
206
  .
190
207
  .
191
208
  ===== Bundle install for All Support Ruby Result =====
192
- ruby-2.3.3: 0
193
- ruby-2.4.2: 0
194
209
  ruby-2.5.8: 0
195
210
  ruby-2.6.6: 0
196
211
  ruby-2.7.1: 0
@@ -218,8 +233,6 @@ ruby-2.7.1: 0
218
233
  .
219
234
  .
220
235
  ===== Rspec for All Support Ruby Result =====
221
- ruby-2.3.3: 0
222
- ruby-2.4.2: 0
223
236
  ruby-2.5.8: 0
224
237
  ruby-2.6.6: 0
225
238
  ruby-2.7.1: 0
@@ -3,17 +3,17 @@
3
3
  require 'fileutils'
4
4
 
5
5
  require_relative 'app_configuration'
6
- require_relative 'pluggable_configuration'
7
6
  require_relative 'configuration/paths_config'
8
7
  require_relative 'logger/stdout_logger'
9
8
  require_relative 'support/deprecation'
9
+ require_relative 'helpers/file_helper'
10
10
 
11
11
  module R2OAS
12
12
  module Configuration
13
13
  extend AppConfiguration
14
- extend PluggableConfiguration
14
+ include Helpers::FileHelper
15
15
 
16
- PUBLIC_VALID_OPTIONS_KEYS = AppConfiguration::VALID_OPTIONS_KEYS + PluggableConfiguration::VALID_OPTIONS_KEYS
16
+ PUBLIC_VALID_OPTIONS_KEYS = AppConfiguration::VALID_OPTIONS_KEYS
17
17
 
18
18
  UNPUBLIC_VALID_OPTIONS_KEYS = %i[
19
19
  paths_config
@@ -24,18 +24,8 @@ module R2OAS
24
24
 
25
25
  attr_accessor *PUBLIC_VALID_OPTIONS_KEYS
26
26
 
27
- # MEMO: override because deprecated
28
- def use_object_classes=(data)
29
- ::R2OAS::Deprecation.will_remove(<<-MSG.squish)
30
- Using a R2OAS.use_object_classes= in configuration is deprecated and
31
- will be removed in r2-oas (v0.4.2).
32
- MSG
33
- @use_object_classes = data
34
- end
35
-
36
27
  def self.extended(base)
37
28
  base.send :set_default_for_configuration, base
38
- base.send :set_default_for_pluggable, base
39
29
  end
40
30
 
41
31
  def configure
@@ -63,17 +53,14 @@ module R2OAS
63
53
  end
64
54
  end
65
55
 
66
- def pluggable_configuration_options
67
- PluggableConfiguration::VALID_OPTIONS_KEYS.inject({}) do |option, key|
68
- option.merge!(key => send(key))
69
- end
70
- end
71
-
72
56
  def load_tasks
73
57
  load_local_tasks
74
58
  end
75
59
 
76
60
  def init
61
+ old_stdout = $stdout
62
+ $stdout = StringIO.new
63
+
77
64
  plugins_path = File.expand_path("#{root_dir_path}/#{local_plugins_dir_name}")
78
65
  plugins_helpers_path = "#{plugins_path}/helpers"
79
66
  tasks_path = File.expand_path("#{root_dir_path}/#{local_tasks_dir_name}")
@@ -84,14 +71,21 @@ module R2OAS
84
71
  gitkeep_tasks_path = "#{tasks_path}/.gitkeep"
85
72
  gitkeep_tasks_helpers_path = "#{tasks_helpers_path}/.gitkeep"
86
73
 
87
- FileUtils.mkdir_p(plugins_helpers_path) unless FileTest.exists?(plugins_helpers_path)
88
- FileUtils.mkdir_p(tasks_helpers_path) unless FileTest.exists?(tasks_helpers_path)
74
+ paths_config.create_dot_paths(false)
75
+ mkdir_p_dir_or_skip(plugins_helpers_path)
76
+ mkdir_p_dir_or_skip(tasks_helpers_path)
77
+ write_file_or_skip(gitkeep_plugins_path, '')
78
+ write_file_or_skip(gitkeep_plugins_helpers_path, '')
79
+ write_file_or_skip(gitkeep_tasks_path, '')
80
+ write_file_or_skip(gitkeep_tasks_helpers_path, '')
81
+
82
+ if $stdout.string.present?
83
+ STDOUT.puts $stdout.string
84
+ else
85
+ STDOUT.puts "Already Initialized existing oas_docs in #{root_dir_path}"
86
+ end
89
87
 
90
- File.write(gitkeep_plugins_path, '') unless FileTest.exists?(gitkeep_plugins_path)
91
- File.write(gitkeep_plugins_helpers_path, '') unless FileTest.exists?(gitkeep_plugins_helpers_path)
92
- File.write(gitkeep_tasks_path, '') unless FileTest.exists?(gitkeep_tasks_path)
93
- File.write(gitkeep_tasks_helpers_path, '') unless FileTest.exists?(gitkeep_tasks_helpers_path)
94
- paths_config.create_dot_paths
88
+ $stdout = old_stdout
95
89
  end
96
90
 
97
91
  def output_dir_path
@@ -117,9 +111,5 @@ module R2OAS
117
111
  def set_default_for_configuration(target)
118
112
  AppConfiguration.set_default(target)
119
113
  end
120
-
121
- def set_default_for_pluggable(target)
122
- PluggableConfiguration.set_default(target)
123
- end
124
114
  end
125
115
  end
@@ -1,10 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'r2-oas/schema/manager/file/path_item_file_manager'
4
+ require 'r2-oas/helpers/file_helper'
4
5
 
5
6
  module R2OAS
6
7
  module Configuration
7
8
  class PathsConfig
9
+ include Helpers::FileHelper
10
+
8
11
  def initialize(root_dir_path, schema_save_dir_name)
9
12
  @root_dir_path = root_dir_path
10
13
  @schema_save_dir_path = "#{root_dir_path}/#{schema_save_dir_name}"
@@ -25,11 +28,11 @@ module R2OAS
25
28
  end.uniq.compact.reject(&:empty?)
26
29
  end
27
30
 
28
- def create_dot_paths
31
+ def create_dot_paths(silent = true)
29
32
  abs_root_path = File.expand_path(@root_dir_path)
30
33
 
31
- FileUtils.mkdir_p(abs_root_path) unless FileTest.exists?(abs_root_path)
32
- File.write(abs_paths_path, '') unless FileTest.exists?(abs_paths_path)
34
+ mkdir_p_dir_or_skip(abs_root_path, silent)
35
+ write_file_or_skip(abs_paths_path, '', silent)
33
36
  end
34
37
 
35
38
  def many_components_file_paths
@@ -0,0 +1,68 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'fileutils'
4
+
5
+ # https :/ / keyesberry.hatenadiary.org / entry / 20101107 / p1
6
+ #
7
+ # Text attributes
8
+ # 0 All attributes off
9
+ # 1 Bold on
10
+ # 4 Underscore (on monochrome display adapter only)
11
+ # 5 Blink on
12
+ # 7 Reverse video on
13
+ # 8 Concealed on
14
+
15
+ # Foreground colors
16
+ # 30 Black
17
+ # 31 Red
18
+ # 32 Green
19
+ # 33 Yellow
20
+ # 34 Blue
21
+ # 35 Magenta
22
+ # 36 Cyan
23
+ # 37 White
24
+
25
+ # Background colors
26
+ # 40 Black
27
+ # 41 Red
28
+ # 42 Green
29
+ # 43 Yellow
30
+ # 44 Blue
31
+ # 45 Magenta
32
+ # 46 Cyan
33
+ # 47 White
34
+ module R2OAS
35
+ module Helpers
36
+ module FileHelper
37
+ def write_file_or_skip(file_path, data, silent = false)
38
+ unless FileTest.exists?(file_path)
39
+ File.write(file_path, data)
40
+ puts "#{space}#{bold('create')}\t#{relative(file_path)}" unless silent
41
+ end
42
+ end
43
+
44
+ def mkdir_p_dir_or_skip(dir_path, silent = false)
45
+ unless FileTest.exists?(dir_path)
46
+ FileUtils.mkdir_p(dir_path)
47
+ puts "#{space}#{bold('create')}\t#{relative(dir_path)}" unless silent
48
+ end
49
+ end
50
+
51
+ private
52
+
53
+ def relative(path)
54
+ current_dir_pathname = Pathname.new(Dir.pwd)
55
+ target_path = Pathname.new(path)
56
+ target_path.relative_path_from(current_dir_pathname)
57
+ end
58
+
59
+ def bold(str)
60
+ "\e[1m#{str}\e[0m"
61
+ end
62
+
63
+ def space
64
+ ' '
65
+ end
66
+ end
67
+ end
68
+ end
@@ -5,6 +5,11 @@ require 'r2-oas/hooks/hook'
5
5
  module R2OAS
6
6
  module Plugin
7
7
  module Hookable
8
+ def self.extended(base)
9
+ super
10
+ base.class_variable_set(:@@hook_klass, ::R2OAS::Hooks::Hook.register(:plugin, base))
11
+ end
12
+
8
13
  def hooks_map
9
14
  hook_klass.repository[:plugin]
10
15
  end
@@ -14,11 +19,11 @@ module R2OAS
14
19
  end
15
20
 
16
21
  def hook_klass=(klass)
17
- @@hook_klass = klass
22
+ class_variable_set(:@@hook_klass, klass)
18
23
  end
19
24
 
20
25
  def hook_klass
21
- @@hook_klass
26
+ class_variable_get(:@@hook_klass)
22
27
  end
23
28
 
24
29
  def on(on, callback, once = false)
@@ -1,5 +1,3 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'r2-oas/configuration'
4
- require 'r2-oas/errors'
5
- require 'r2-oas/schema/v3/object/from_routes/public'
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal:true
2
2
 
3
3
  require 'docker'
4
- require 'eventmachine'
4
+ require 'em/pure_ruby'
5
5
  require 'watir'
6
6
  require 'tempfile'
7
7
  require 'fileutils'
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal:true
2
2
 
3
- require 'eventmachine'
3
+ require 'em/pure_ruby'
4
4
 
5
5
  # Scope Rails
6
6
  module R2OAS
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal:true
2
2
 
3
3
  require 'docker'
4
- require 'eventmachine'
4
+ require 'em/pure_ruby'
5
5
  require 'watir'
6
6
  require 'forwardable'
7
7
 
@@ -16,40 +16,16 @@ module R2OAS
16
16
  send("#{key}=", app_configuration_options[key])
17
17
  end
18
18
 
19
- PluggableConfiguration::VALID_OPTIONS_KEYS.each do |key|
20
- instance_variable_set(:"@#{key}", pluggable_configuration_options[key])
21
- end
22
-
23
19
  @opts = opts
24
20
  @plugin_executor = ::R2OAS::Plugin::Executor.new(@plugins, opts)
25
21
  end
26
22
 
27
- def info_object_class
28
- @use_object_classes[:info_object]
29
- end
30
-
31
- def paths_object_class
32
- @use_object_classes[:paths_object]
33
- end
34
-
35
- def path_item_object_class
36
- @use_object_classes[:path_item_object]
37
- end
38
-
39
- def external_document_object_class
40
- @use_object_classes[:external_document_object]
41
- end
42
-
43
- def components_object_class
44
- @use_object_classes[:components_object]
23
+ def doc
24
+ @doc ||= {}
45
25
  end
46
26
 
47
- def components_schema_object_class
48
- @use_object_classes[:components_schema_object]
49
- end
50
-
51
- def components_request_body_object_class
52
- @use_object_classes[:components_request_body_object]
27
+ def to_doc
28
+ raise 'Implement Inherit Class'
53
29
  end
54
30
 
55
31
  private
@@ -58,17 +34,7 @@ module R2OAS
58
34
  R2OAS.app_configuration_options
59
35
  end
60
36
 
61
- def pluggable_configuration_options
62
- R2OAS.pluggable_configuration_options
63
- end
64
-
65
- # Can not define attr_accessor for PluggableConfiguration::VALID_OPTIONS_KEYS.
66
- # Because, PuggableConfiguration module is not loaded when this class is loaded.
67
37
  attr_accessor *AppConfiguration::VALID_OPTIONS_KEYS
68
-
69
- def to_doc
70
- raise 'Implement Inherit Class'
71
- end
72
38
  end
73
39
  end
74
40
  end
@@ -1,13 +1,14 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'r2-oas/dynamic/schema/v3/object/from_routes/hookable_base_object'
3
+ require 'r2-oas/schema/v3/object/from_routes/base_object'
4
4
  require 'r2-oas/schema/v3/manager/file/components_file_manager'
5
+ require_relative 'schema_object'
5
6
 
6
7
  module R2OAS
7
8
  module Schema
8
9
  module V3
9
10
  module Components
10
- class RequestBodyObject < R2OAS::Dynamic::Schema::V3::HookableBaseObject
11
+ class RequestBodyObject < R2OAS::Schema::V3::BaseObject
11
12
  def initialize(route_data, path, opts = {})
12
13
  super(opts)
13
14
  @path_comp = Routing::PathComponent.new(path)
@@ -23,10 +24,9 @@ module R2OAS
23
24
  end
24
25
 
25
26
  def to_doc
26
- execute_before_create(@schema_name)
27
27
  create_doc do
28
28
  child_file_manager = ComponentsFileManager.new("#/components/schemas/#{_components_schema_name}", :ref)
29
- schema_object = components_schema_object_class.new(@route_data, @path, @opts)
29
+ schema_object = Components::SchemaObject.new(@route_data, @path, @opts)
30
30
 
31
31
  unless child_file_manager.skip_save?
32
32
  result = {
@@ -45,22 +45,9 @@ module R2OAS
45
45
  )
46
46
  end
47
47
  end
48
- execute_after_create(@schema_name)
49
48
  doc
50
49
  end
51
50
 
52
- # MEMO:
53
- # please override in inherited class.
54
- def components_schema_name(_doc, _path_component, _tag_name, _verb, schema_name)
55
- schema_name
56
- end
57
-
58
- # MEMO:
59
- # please override in inherited class.
60
- def components_request_body_name(_doc, _path_component, _tag_name, _verb, schema_name)
61
- schema_name
62
- end
63
-
64
51
  def generate?
65
52
  file_manager = ComponentsFileManager.new("#/components/schemas/#{_components_schema_name}", :ref)
66
53
  (@verb.in? http_methods_when_generate_request_body) && !file_manager.skip_save?
@@ -83,11 +70,11 @@ module R2OAS
83
70
  end
84
71
 
85
72
  def _components_schema_name
86
- components_schema_name(doc, @path_comp, @tag_name, @verb, @schema_name)
73
+ @schema_name
87
74
  end
88
75
 
89
76
  def _components_request_body_name
90
- components_request_body_name(doc, @path_comp, @tag_name, @verb, @schema_name)
77
+ @schema_name
91
78
  end
92
79
  end
93
80
  end
@@ -1,12 +1,12 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'r2-oas/dynamic/schema/v3/object/from_routes/hookable_base_object'
3
+ require 'r2-oas/schema/v3/object/from_routes/base_object'
4
4
 
5
5
  module R2OAS
6
6
  module Schema
7
7
  module V3
8
8
  module Components
9
- class SchemaObject < R2OAS::Dynamic::Schema::V3::HookableBaseObject
9
+ class SchemaObject < R2OAS::Schema::V3::BaseObject
10
10
  def initialize(route_data, path, opts = {})
11
11
  super(opts)
12
12
  @path_comp = Routing::PathComponent.new(path)
@@ -22,18 +22,10 @@ module R2OAS
22
22
  end
23
23
 
24
24
  def to_doc
25
- execute_before_create(@schema_name)
26
25
  create_doc
27
- execute_after_create(@schema_name)
28
26
  doc
29
27
  end
30
28
 
31
- # MEMO:
32
- # please override in inherited class.
33
- def components_schema_name(_doc, _path_component, _tag_name, _verb, _http_status, schema_name)
34
- schema_name
35
- end
36
-
37
29
  private
38
30
 
39
31
  def create_doc
@@ -49,8 +41,8 @@ module R2OAS
49
41
  doc.merge!(result)
50
42
  end
51
43
 
52
- def _components_schema_name(http_status)
53
- components_schema_name(doc, @path_comp, @tag_name, @verb, http_status, @schema_name)
44
+ def _components_schema_name(_http_status)
45
+ @schema_name
54
46
  end
55
47
  end
56
48
  end
@@ -1,18 +1,24 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'r2-oas/dynamic/schema/v3/object/from_routes/hookable_base_object'
3
+ require_relative 'base_object'
4
4
  require_relative 'components/schema_object'
5
5
  require_relative 'components/request_body_object'
6
+ require_relative 'path_item_object'
6
7
 
7
8
  module R2OAS
8
9
  module Schema
9
10
  module V3
10
- class ComponentsObject < R2OAS::Dynamic::Schema::V3::HookableBaseObject
11
+ class ComponentsObject < BaseObject
11
12
  def initialize(routes_data, opts = {})
12
13
  super(opts)
13
14
  @routes_data = routes_data
14
15
  end
15
16
 
17
+ def to_doc
18
+ create_doc
19
+ doc
20
+ end
21
+
16
22
  def create_doc
17
23
  create_doc_for_components_schemas!
18
24
  create_doc_for_components_request_bodies!
@@ -24,14 +30,14 @@ module R2OAS
24
30
  result = components_schema_docs.each_with_object({}) do |(schema_name, components_schema_doc), docs|
25
31
  docs[schema_name] = components_schema_doc
26
32
  end
27
- doc.merge!('schemas' => result)
33
+ doc.merge!({ 'schemas' => result })
28
34
  end
29
35
 
30
36
  def create_doc_for_components_request_bodies!
31
37
  result = components_request_body_docs.each_with_object({}) do |(schema_name, components_request_body_doc), docs|
32
38
  docs[schema_name] = components_request_body_doc
33
39
  end
34
- doc.merge!('requestBodies' => result)
40
+ doc.merge!({ 'requestBodies' => result })
35
41
  end
36
42
 
37
43
  # e.x.)
@@ -43,9 +49,9 @@ module R2OAS
43
49
  path = route_el[:path]
44
50
  route_data = route_el[:data]
45
51
 
46
- path_item_object = path_item_object_class.new(route_data, path, @opts)
52
+ path_item_object = PathItemObject.new(route_data, path, @opts)
47
53
  path_item_object.http_statuses.each do |http_status|
48
- components_schema_object = components_schema_object_class.new(route_data, path, @opts)
54
+ components_schema_object = Components::SchemaObject.new(route_data, path, @opts)
49
55
  components_schema_doc = components_schema_object.to_doc
50
56
  schema_name = components_schema_object.send(:_components_schema_name, http_status)
51
57
 
@@ -63,7 +69,7 @@ module R2OAS
63
69
  path = route_el[:path]
64
70
  route_data = route_el[:data]
65
71
 
66
- components_request_body_object = components_request_body_object_class.new(route_data, path, @opts)
72
+ components_request_body_object = Components::RequestBodyObject.new(route_data, path, @opts)
67
73
  next unless components_request_body_object.generate?
68
74
 
69
75
  components_request_body_doc = components_request_body_object.to_doc
@@ -1,15 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'r2-oas/dynamic/schema/v3/object/from_routes/hookable_base_object'
3
+ require_relative 'base_object'
4
4
 
5
5
  module R2OAS
6
6
  module Schema
7
7
  module V3
8
- class ExternalDocumentObject < R2OAS::Dynamic::Schema::V3::HookableBaseObject
8
+ class ExternalDocumentObject < BaseObject
9
9
  def to_doc
10
- execute_before_create
11
10
  create_doc
12
- execute_after_create
13
11
  doc
14
12
  end
15
13
 
@@ -1,15 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'r2-oas/dynamic/schema/v3/object/from_routes/hookable_base_object'
3
+ require_relative 'base_object'
4
4
 
5
5
  module R2OAS
6
6
  module Schema
7
7
  module V3
8
- class InfoObject < R2OAS::Dynamic::Schema::V3::HookableBaseObject
8
+ class InfoObject < BaseObject
9
9
  def to_doc
10
- execute_before_create
11
10
  create_doc
12
- execute_after_create
13
11
  doc
14
12
  end
15
13
 
@@ -3,6 +3,10 @@
3
3
  require_relative 'base_object'
4
4
  require_relative 'tag_object'
5
5
  require_relative 'server_object'
6
+ require_relative 'info_object'
7
+ require_relative 'external_document_object'
8
+ require_relative 'components_object'
9
+ require_relative 'paths_object'
6
10
 
7
11
  module R2OAS
8
12
  module Schema
@@ -25,13 +29,13 @@ module R2OAS
25
29
  'servers' => servers_doc,
26
30
  'components' => components_doc
27
31
  }
28
- result
32
+ doc.merge!(result)
29
33
  end
30
34
 
31
35
  private
32
36
 
33
37
  def info_doc
34
- info_object_class.new(@opts).to_doc
38
+ InfoObject.new(@opts).to_doc
35
39
  end
36
40
 
37
41
  def tags_doc
@@ -39,11 +43,11 @@ module R2OAS
39
43
  end
40
44
 
41
45
  def paths_doc
42
- paths_object_class.new(@routes_data, @opts).to_doc
46
+ PathsObject.new(@routes_data, @opts).to_doc
43
47
  end
44
48
 
45
49
  def external_docs_doc
46
- external_document_object_class.new(@opts).to_doc
50
+ ExternalDocumentObject.new(@opts).to_doc
47
51
  end
48
52
 
49
53
  def servers_doc
@@ -51,7 +55,7 @@ module R2OAS
51
55
  end
52
56
 
53
57
  def components_doc
54
- components_object_class.new(@routes_data, @opts).to_doc
58
+ ComponentsObject.new(@routes_data, @opts).to_doc
55
59
  end
56
60
  end
57
61
  end
@@ -1,13 +1,15 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'forwardable'
4
- require 'r2-oas/dynamic/schema/v3/object/from_routes/hookable_base_object'
5
4
  require 'r2-oas/routing/components/path_component'
5
+ require_relative 'base_object'
6
+ require_relative 'components/schema_object'
7
+ require_relative 'components/request_body_object'
6
8
 
7
9
  module R2OAS
8
10
  module Schema
9
11
  module V3
10
- class PathItemObject < R2OAS::Dynamic::Schema::V3::HookableBaseObject
12
+ class PathItemObject < BaseObject
11
13
  extend Forwardable
12
14
  # reference
13
15
  # https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.0.md#path-item-object
@@ -27,15 +29,13 @@ module R2OAS
27
29
  @required_parameters = route_data[:required_parameters]
28
30
  @format_name = create_format_name
29
31
  @http_status_manager = HttpStatusManager.new(@path, @verb, http_statuses_when_http_method)
30
- @components_schema_object = components_schema_object_class.new(route_data, path, opts)
31
- @components_request_body_object = components_request_body_object_class.new(route_data, path, opts)
32
+ @components_schema_object = Components::SchemaObject.new(route_data, path, opts)
33
+ @components_request_body_object = Components::RequestBodyObject.new(route_data, path, opts)
32
34
  support_field_name? if route_data.key?(:verb)
33
35
  end
34
36
 
35
37
  def to_doc
36
- execute_before_create(@path)
37
38
  create_doc
38
- execute_after_create(@path)
39
39
  doc
40
40
  end
41
41
 
@@ -1,23 +1,28 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'r2-oas/dynamic/schema/v3/object/from_routes/hookable_base_object'
4
3
  require 'r2-oas/routing/components/path_component'
4
+ require_relative 'base_object'
5
+ require_relative 'path_item_object'
5
6
 
6
7
  module R2OAS
7
8
  module Schema
8
9
  module V3
9
- class PathsObject < R2OAS::Dynamic::Schema::V3::HookableBaseObject
10
+ class PathsObject < BaseObject
10
11
  def initialize(routes_data, opts = {})
11
12
  super(opts)
12
13
  @routes_data = routes_data
13
- define_hookable_tmp_object_class
14
+ end
15
+
16
+ def to_doc
17
+ create_doc
18
+ doc
14
19
  end
15
20
 
16
21
  def create_doc
17
22
  if unit_paths_file_path.present?
18
23
  unit_paths_data = YAML.load_file(unit_paths_file_path)['paths']
19
24
  result = unit_paths_data.each_with_object({}) do |(path, path_item_doc), docs|
20
- docs[path] = HookableTmpObjectClass.new(path_item_doc, path, @opts).to_doc
25
+ docs[path] = PathItemObject.new(path_item_doc, path, @opts).to_doc
21
26
  end
22
27
  else
23
28
  result = path_item_docs.each_with_object({}) do |(path, path_item_doc), docs|
@@ -29,31 +34,6 @@ module R2OAS
29
34
 
30
35
  private
31
36
 
32
- def define_hookable_tmp_object_class
33
- klass = Class.new(path_item_object_class) do |_c|
34
- def initialize(data, path, opts = {})
35
- super(opts)
36
- @data = data
37
- @path = path
38
- @path_comp = Routing::PathComponent.new(path)
39
- use_superclass_hook
40
- end
41
-
42
- def create_doc
43
- doc.merge!(@data)
44
- end
45
-
46
- def to_doc
47
- execute_before_create(@path)
48
- create_doc
49
- execute_after_create(@path)
50
- execute_transform_plugins(:path_item, doc, @path_comp)
51
- doc
52
- end
53
- end
54
- Object.const_set(:HookableTmpObjectClass, klass) unless defined?(HookableTmpObjectClass)
55
- end
56
-
57
37
  def path_item_docs
58
38
  # e.x.)
59
39
  # [
@@ -63,7 +43,7 @@ module R2OAS
63
43
  path = route_el[:path]
64
44
  route_data = route_el[:data]
65
45
 
66
- path_item_doc = path_item_object_class.new(route_data, path, @opts).to_doc
46
+ path_item_doc = PathItemObject.new(route_data, path, @opts).to_doc
67
47
  if data[path].present?
68
48
  data[path].merge!(path_item_doc)
69
49
  else
@@ -10,9 +10,8 @@ load File.expand_path('common.rake', __dir__)
10
10
  namespace :routes do
11
11
  namespace :oas do
12
12
  desc '[R2-OAS] Initialize'
13
- task init: [:common] do
13
+ task :init do
14
14
  R2OAS.init
15
- puts '[R2-OAS] Initialized!'
16
15
  end
17
16
 
18
17
  desc '[R2-OAS] Generate OAS documentation files'
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module R2OAS
4
- VERSION = '0.4.1'
4
+ VERSION = '0.5.0'
5
5
  end
@@ -27,7 +27,7 @@ Gem::Specification.new do |spec|
27
27
  spec.bindir = 'exe'
28
28
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
29
29
  spec.require_paths = ['lib']
30
- spec.required_ruby_version = Gem::Requirement.new('>= 2.3.3p222')
30
+ spec.required_ruby_version = Gem::Requirement.new('>= 2.5.0')
31
31
 
32
32
  spec.add_runtime_dependency 'docker-api', '>= 1.34.2'
33
33
  spec.add_runtime_dependency 'easy_diff', '>= 1.0.0'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: r2-oas
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.1
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - yukihirop
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-08-24 00:00:00.000000000 Z
11
+ date: 2021-01-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: docker-api
@@ -240,8 +240,8 @@ files:
240
240
  - lib/r2-oas/configuration/paths_config.rb
241
241
  - lib/r2-oas/deploy/client.rb
242
242
  - lib/r2-oas/deploy/swagger-ui/index.html.erb
243
- - lib/r2-oas/dynamic/schema/v3/object/from_routes/hookable_base_object.rb
244
243
  - lib/r2-oas/errors.rb
244
+ - lib/r2-oas/helpers/file_helper.rb
245
245
  - lib/r2-oas/hooks/global_hook.rb
246
246
  - lib/r2-oas/hooks/hook.rb
247
247
  - lib/r2-oas/hooks/repository.rb
@@ -251,7 +251,6 @@ files:
251
251
  - lib/r2-oas/lib/core_ext/string/filters.rb
252
252
  - lib/r2-oas/lib/three-way-merge/twm.rb
253
253
  - lib/r2-oas/logger/stdout_logger.rb
254
- - lib/r2-oas/pluggable_configuration.rb
255
254
  - lib/r2-oas/plugin/base.rb
256
255
  - lib/r2-oas/plugin/executor.rb
257
256
  - lib/r2-oas/plugin/hookable.rb
@@ -323,6 +322,7 @@ files:
323
322
  - lib/r2-oas/schema/v3/object/from_files/utils/all.rb
324
323
  - lib/r2-oas/schema/v3/object/from_files/utils/deep_methods.rb
325
324
  - lib/r2-oas/schema/v3/object/from_files/utils/refs.rb
325
+ - lib/r2-oas/schema/v3/object/from_routes/all.rb
326
326
  - lib/r2-oas/schema/v3/object/from_routes/base_object.rb
327
327
  - lib/r2-oas/schema/v3/object/from_routes/components/request_body_object.rb
328
328
  - lib/r2-oas/schema/v3/object/from_routes/components/schema_object.rb
@@ -332,7 +332,6 @@ files:
332
332
  - lib/r2-oas/schema/v3/object/from_routes/openapi_object.rb
333
333
  - lib/r2-oas/schema/v3/object/from_routes/path_item_object.rb
334
334
  - lib/r2-oas/schema/v3/object/from_routes/paths_object.rb
335
- - lib/r2-oas/schema/v3/object/from_routes/public.rb
336
335
  - lib/r2-oas/schema/v3/object/from_routes/server_object.rb
337
336
  - lib/r2-oas/schema/v3/object/from_routes/tag_object.rb
338
337
  - lib/r2-oas/schema/v3/object/store.rb
@@ -359,10 +358,10 @@ licenses:
359
358
  - MIT
360
359
  metadata:
361
360
  bug_tracker_uri: https://github.com/yukihirop/r2-oas/issues
362
- changelog_uri: https://github.com/yukihirop/r2-oas/blob/v0.4.1/CHANGELOG.md
361
+ changelog_uri: https://github.com/yukihirop/r2-oas/blob/v0.5.0/CHANGELOG.md
363
362
  documentation_uri: https://yukihirop.github.io/r2-oas
364
- source_code_uri: https://github.com/yukihirop/r2-oas/tree/v0.4.1
365
- post_install_message:
363
+ source_code_uri: https://github.com/yukihirop/r2-oas/tree/v0.5.0
364
+ post_install_message:
366
365
  rdoc_options: []
367
366
  require_paths:
368
367
  - lib
@@ -370,7 +369,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
370
369
  requirements:
371
370
  - - ">="
372
371
  - !ruby/object:Gem::Version
373
- version: 2.3.3p222
372
+ version: 2.5.0
374
373
  required_rubygems_version: !ruby/object:Gem::Requirement
375
374
  requirements:
376
375
  - - ">="
@@ -378,7 +377,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
378
377
  version: '0'
379
378
  requirements: []
380
379
  rubygems_version: 3.1.2
381
- signing_key:
380
+ signing_key:
382
381
  specification_version: 4
383
382
  summary: Provide rake tasks to management API Docment (OpenAPI)
384
383
  test_files: []
@@ -1,100 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'r2-oas/schema/v3/object/from_routes/base_object'
4
- require 'r2-oas/hooks/hook'
5
-
6
- module R2OAS
7
- module Dynamic
8
- module Schema
9
- module V3
10
- class HookableBaseObject < R2OAS::Schema::V3::BaseObject
11
- module ClassMethods
12
- def before_create(&block)
13
- proc = (block_given? ? block : proc {})
14
- on(:before_create, proc)
15
- end
16
-
17
- def after_create(&block)
18
- proc = (block_given? ? block : proc {})
19
- on(:after_create, proc)
20
- end
21
- end
22
-
23
- def self.inherited(base)
24
- base.extend ClassMethods
25
- self.hook = Hooks::Hook.register(:dynamic, base)
26
- end
27
-
28
- def self.hooks
29
- superclass.hook.repository[:dynamic][self].global_hooks_data
30
- end
31
-
32
- def self.hook=(value)
33
- @@hook = value
34
- end
35
-
36
- def self.hook
37
- @@hook
38
- end
39
-
40
- class << self
41
- def on(on, callback, once = false)
42
- hook.on(on, callback, self, once)
43
- end
44
-
45
- # MEMO: Do not Use
46
- def off(on, callback, once = false)
47
- hook.off(on, callback, self, once)
48
- end
49
-
50
- def execute_hook(on, *data)
51
- hook.execute_hook(on, *data, self)
52
- end
53
-
54
- def has_hook?(name)
55
- hook.has_hook?(name, self)
56
- end
57
- end
58
-
59
- attr_accessor :doc
60
-
61
- def initialize(opts = {})
62
- super(opts)
63
- self.doc = {}
64
- end
65
-
66
- # MEMO: Please overwrite when passing arguments other than `doc`
67
- def to_doc
68
- execute_before_create
69
- create_doc
70
- execute_after_create
71
- doc
72
- end
73
-
74
- def use_superclass_hook
75
- self.class.hook.repository[:dynamic][self.class] = self.class.hook.repository[:dynamic][self.class.superclass]
76
- end
77
-
78
- private
79
-
80
- def create_doc
81
- raise NoImplementError
82
- end
83
-
84
- def execute_before_create(*data)
85
- execute_hook_method(:before_create, *data)
86
- end
87
-
88
- def execute_after_create(*data)
89
- execute_hook_method(:after_create, *data)
90
- end
91
-
92
- def execute_hook_method(method_name, *data)
93
- args = [doc].push(*data)
94
- self.class.execute_hook(method_name.to_sym, *args) if self.class.has_hook?(method_name.to_sym)
95
- end
96
- end
97
- end
98
- end
99
- end
100
- end
@@ -1,36 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'r2-oas/schema/v3/object/from_routes/public'
4
- require_relative 'support/deprecation'
5
-
6
- module R2OAS
7
- module PluggableConfiguration
8
- # rubocop:disable Style/MutableConstant
9
- DEFAULT_USE_OBJECT_CLASSES = {
10
- info_object: R2OAS::Schema::V3::InfoObject,
11
- paths_object: R2OAS::Schema::V3::PathsObject,
12
- path_item_object: R2OAS::Schema::V3::PathItemObject,
13
- external_document_object: R2OAS::Schema::V3::ExternalDocumentObject,
14
- components_object: R2OAS::Schema::V3::ComponentsObject,
15
- components_schema_object: R2OAS::Schema::V3::Components::SchemaObject,
16
- components_request_body_object: R2OAS::Schema::V3::Components::RequestBodyObject
17
- }
18
- # rubocop:enable Style/MutableConstant
19
-
20
- VALID_OPTIONS_KEYS = %i[
21
- use_object_classes
22
- ].freeze
23
-
24
- attr_reader *VALID_OPTIONS_KEYS
25
-
26
- private
27
-
28
- module_function
29
-
30
- def set_default(target)
31
- Deprecation.silence do
32
- target.use_object_classes = DEFAULT_USE_OBJECT_CLASSES
33
- end
34
- end
35
- end
36
- end