r2-oas 0.4.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.
Files changed (136) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +99 -0
  3. data/GEMSPEC.md +20 -0
  4. data/LICENSE.txt +21 -0
  5. data/README.ja.md +271 -0
  6. data/README.md +271 -0
  7. data/lib/r2-oas.rb +35 -0
  8. data/lib/r2-oas/app_configuration.rb +121 -0
  9. data/lib/r2-oas/app_configuration/deprecation.rb +28 -0
  10. data/lib/r2-oas/app_configuration/server.rb +35 -0
  11. data/lib/r2-oas/app_configuration/swagger.rb +35 -0
  12. data/lib/r2-oas/app_configuration/swagger/editor.rb +47 -0
  13. data/lib/r2-oas/app_configuration/swagger/ui.rb +45 -0
  14. data/lib/r2-oas/app_configuration/tool.rb +31 -0
  15. data/lib/r2-oas/app_configuration/tool/paths/stats.rb +43 -0
  16. data/lib/r2-oas/base.rb +48 -0
  17. data/lib/r2-oas/configuration.rb +121 -0
  18. data/lib/r2-oas/configuration/paths_config.rb +44 -0
  19. data/lib/r2-oas/deploy/client.rb +70 -0
  20. data/lib/r2-oas/deploy/swagger-ui/index.html.erb +60 -0
  21. data/lib/r2-oas/dynamic/schema/v3/object/from_routes/hookable_base_object.rb +100 -0
  22. data/lib/r2-oas/errors.rb +13 -0
  23. data/lib/r2-oas/hooks/global_hook.rb +20 -0
  24. data/lib/r2-oas/hooks/hook.rb +79 -0
  25. data/lib/r2-oas/hooks/repository.rb +15 -0
  26. data/lib/r2-oas/lib/core_ext/hash/deep_merge.rb +44 -0
  27. data/lib/r2-oas/lib/core_ext/object/blank.rb +135 -0
  28. data/lib/r2-oas/lib/three-way-merge/twm.rb +83 -0
  29. data/lib/r2-oas/logger/stdout_logger.rb +129 -0
  30. data/lib/r2-oas/pluggable_configuration.rb +36 -0
  31. data/lib/r2-oas/plugin/base.rb +44 -0
  32. data/lib/r2-oas/plugin/executor.rb +148 -0
  33. data/lib/r2-oas/plugin/hookable.rb +42 -0
  34. data/lib/r2-oas/plugin/public.rb +3 -0
  35. data/lib/r2-oas/plugin/transform/transform.rb +10 -0
  36. data/lib/r2-oas/plugin/transform/v3/transform.rb +20 -0
  37. data/lib/r2-oas/plugin/transform/v3/visitable.rb +37 -0
  38. data/lib/r2-oas/public.rb +5 -0
  39. data/lib/r2-oas/routing/adjustor.rb +44 -0
  40. data/lib/r2-oas/routing/base.rb +12 -0
  41. data/lib/r2-oas/routing/components/all.rb +5 -0
  42. data/lib/r2-oas/routing/components/base_component.rb +10 -0
  43. data/lib/r2-oas/routing/components/path_component.rb +67 -0
  44. data/lib/r2-oas/routing/components/request_component.rb +75 -0
  45. data/lib/r2-oas/routing/components/verb_component.rb +21 -0
  46. data/lib/r2-oas/routing/parser.rb +93 -0
  47. data/lib/r2-oas/schema/analyzer.rb +23 -0
  48. data/lib/r2-oas/schema/base.rb +11 -0
  49. data/lib/r2-oas/schema/builder.rb +23 -0
  50. data/lib/r2-oas/schema/cleaner.rb +23 -0
  51. data/lib/r2-oas/schema/editor.rb +146 -0
  52. data/lib/r2-oas/schema/generator.rb +23 -0
  53. data/lib/r2-oas/schema/manager/file/path_item_file_manager.rb +24 -0
  54. data/lib/r2-oas/schema/manager/file_manager.rb +26 -0
  55. data/lib/r2-oas/schema/monitor.rb +52 -0
  56. data/lib/r2-oas/schema/squeezer.rb +23 -0
  57. data/lib/r2-oas/schema/ui.rb +73 -0
  58. data/lib/r2-oas/schema/v3/analyzer.rb +58 -0
  59. data/lib/r2-oas/schema/v3/analyzer/base_analyzer.rb +71 -0
  60. data/lib/r2-oas/schema/v3/analyzer/components/object_analyzer.rb +38 -0
  61. data/lib/r2-oas/schema/v3/analyzer/components_analyzer.rb +30 -0
  62. data/lib/r2-oas/schema/v3/analyzer/path_analyzer.rb +116 -0
  63. data/lib/r2-oas/schema/v3/analyzer/tag_analyzer.rb +38 -0
  64. data/lib/r2-oas/schema/v3/base.rb +28 -0
  65. data/lib/r2-oas/schema/v3/builder.rb +28 -0
  66. data/lib/r2-oas/schema/v3/builder/base_builder.rb +72 -0
  67. data/lib/r2-oas/schema/v3/builder/doc_builder.rb +51 -0
  68. data/lib/r2-oas/schema/v3/cleaner.rb +19 -0
  69. data/lib/r2-oas/schema/v3/cleaner/base_cleaner.rb +30 -0
  70. data/lib/r2-oas/schema/v3/cleaner/components_cleaner.rb +42 -0
  71. data/lib/r2-oas/schema/v3/generator.rb +24 -0
  72. data/lib/r2-oas/schema/v3/generator/base_generator.rb +122 -0
  73. data/lib/r2-oas/schema/v3/generator/components/object_generator.rb +64 -0
  74. data/lib/r2-oas/schema/v3/generator/components/request_body_generator.rb +45 -0
  75. data/lib/r2-oas/schema/v3/generator/components_generator.rb +38 -0
  76. data/lib/r2-oas/schema/v3/generator/doc_generator.rb +115 -0
  77. data/lib/r2-oas/schema/v3/generator/path_generator.rb +78 -0
  78. data/lib/r2-oas/schema/v3/generator/schema_generator.rb +58 -0
  79. data/lib/r2-oas/schema/v3/manager/diff/base_array_diff_manager.rb +60 -0
  80. data/lib/r2-oas/schema/v3/manager/diff/base_diff_manager.rb +29 -0
  81. data/lib/r2-oas/schema/v3/manager/diff/base_hash_diff_manager.rb +95 -0
  82. data/lib/r2-oas/schema/v3/manager/diff/components_diff_manager.rb +19 -0
  83. data/lib/r2-oas/schema/v3/manager/diff/tag_diff_manager.rb +17 -0
  84. data/lib/r2-oas/schema/v3/manager/file/base_file_manager.rb +66 -0
  85. data/lib/r2-oas/schema/v3/manager/file/components_file_manager.rb +22 -0
  86. data/lib/r2-oas/schema/v3/manager/file/include_ref_base_file_manager.rb +89 -0
  87. data/lib/r2-oas/schema/v3/manager/file/path_item_file_manager.rb +22 -0
  88. data/lib/r2-oas/schema/v3/manager/file_manager.rb +12 -0
  89. data/lib/r2-oas/schema/v3/manager/pathname_manager.rb +78 -0
  90. data/lib/r2-oas/schema/v3/object/from_files/base_object.rb +62 -0
  91. data/lib/r2-oas/schema/v3/object/from_files/components/request_body_object.rb +103 -0
  92. data/lib/r2-oas/schema/v3/object/from_files/components/schema_object.rb +102 -0
  93. data/lib/r2-oas/schema/v3/object/from_files/components_object.rb +46 -0
  94. data/lib/r2-oas/schema/v3/object/from_files/external_document_object.rb +23 -0
  95. data/lib/r2-oas/schema/v3/object/from_files/info_object.rb +23 -0
  96. data/lib/r2-oas/schema/v3/object/from_files/openapi_object.rb +61 -0
  97. data/lib/r2-oas/schema/v3/object/from_files/path_item_object.rb +110 -0
  98. data/lib/r2-oas/schema/v3/object/from_files/paths_object.rb +33 -0
  99. data/lib/r2-oas/schema/v3/object/from_files/utils/all.rb +4 -0
  100. data/lib/r2-oas/schema/v3/object/from_files/utils/deep_methods.rb +27 -0
  101. data/lib/r2-oas/schema/v3/object/from_files/utils/refs.rb +151 -0
  102. data/lib/r2-oas/schema/v3/object/from_routes/base_object.rb +75 -0
  103. data/lib/r2-oas/schema/v3/object/from_routes/components/request_body_object.rb +96 -0
  104. data/lib/r2-oas/schema/v3/object/from_routes/components/schema_object.rb +59 -0
  105. data/lib/r2-oas/schema/v3/object/from_routes/components_object.rb +81 -0
  106. data/lib/r2-oas/schema/v3/object/from_routes/external_document_object.rb +28 -0
  107. data/lib/r2-oas/schema/v3/object/from_routes/info_object.rb +43 -0
  108. data/lib/r2-oas/schema/v3/object/from_routes/openapi_object.rb +59 -0
  109. data/lib/r2-oas/schema/v3/object/from_routes/path_item_object.rb +175 -0
  110. data/lib/r2-oas/schema/v3/object/from_routes/paths_object.rb +77 -0
  111. data/lib/r2-oas/schema/v3/object/from_routes/public.rb +9 -0
  112. data/lib/r2-oas/schema/v3/object/from_routes/server_object.rb +21 -0
  113. data/lib/r2-oas/schema/v3/object/from_routes/tag_object.rb +37 -0
  114. data/lib/r2-oas/schema/v3/object/store.rb +54 -0
  115. data/lib/r2-oas/schema/v3/squeezer.rb +29 -0
  116. data/lib/r2-oas/schema/v3/squeezer/base_squeezer.rb +37 -0
  117. data/lib/r2-oas/schema/v3/squeezer/path_squeezer.rb +28 -0
  118. data/lib/r2-oas/schema/v3/squeezer/tag_squeezer.rb +19 -0
  119. data/lib/r2-oas/shared/all.rb +4 -0
  120. data/lib/r2-oas/shared/callable.rb +17 -0
  121. data/lib/r2-oas/shared/sortable.rb +23 -0
  122. data/lib/r2-oas/store.rb +122 -0
  123. data/lib/r2-oas/support/deprecation.rb +24 -0
  124. data/lib/r2-oas/support/deprecation/behavior.rb +21 -0
  125. data/lib/r2-oas/support/deprecation/instance_delegator.rb +42 -0
  126. data/lib/r2-oas/support/deprecation/reporting.rb +91 -0
  127. data/lib/r2-oas/task.rb +11 -0
  128. data/lib/r2-oas/task_logging.rb +41 -0
  129. data/lib/r2-oas/tasks/common.rake +25 -0
  130. data/lib/r2-oas/tasks/main.rake +132 -0
  131. data/lib/r2-oas/tasks/tool.rake +86 -0
  132. data/lib/r2-oas/tool/paths/ls.rb +15 -0
  133. data/lib/r2-oas/tool/paths/stats.rb +84 -0
  134. data/lib/r2-oas/version.rb +5 -0
  135. data/r2-oas.gemspec +48 -0
  136. metadata +415 -0
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'easy_diff'
4
+ require 'r2-oas/schema/v3/base'
5
+
6
+ module R2OAS
7
+ module Schema
8
+ module V3
9
+ class BaseDiffManager < Base
10
+ include Sortable
11
+
12
+ def initialize(before_schema_data, after_schema_data)
13
+ @before_schema_data = before_schema_data
14
+ @after_schema_data = after_schema_data
15
+ end
16
+
17
+ def process_by_using_diff_data
18
+ raise NoImplementError, 'Please implement in inherited class.'
19
+ end
20
+
21
+ private
22
+
23
+ def ensure_presence_or_blank(data)
24
+ data.present? ? data : {}
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,95 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'base_diff_manager'
4
+
5
+ module R2OAS
6
+ module Schema
7
+ module V3
8
+ class BaseHashDiffManager < BaseDiffManager
9
+ include Sortable
10
+
11
+ def initialize(before_schema_data, after_schema_data)
12
+ super
13
+ @major_category = 'base'
14
+ @middle_category = 'middle'
15
+ end
16
+
17
+ def process_by_using_diff_data
18
+ before_target_data = sorted_target_data(@before_schema_data)
19
+ before_target_data_names = before_target_data.keys.uniq
20
+ after_target_data = sorted_target_data(@after_schema_data)
21
+ after_target_data_names = after_target_data.keys.uniq
22
+ target_names = (before_target_data_names + after_target_data_names).uniq
23
+
24
+ target_names.each do |target_name|
25
+ before_schema_data = schema_data_at(before_target_data, target_name)
26
+ after_schema_data = schema_data_at(after_target_data, target_name)
27
+
28
+ removed, added = before_schema_data.easy_diff(after_schema_data)
29
+ leftovers, = before_schema_data.easy_diff(removed)
30
+
31
+ is_removed = to_boolean(removed, target_name)
32
+ is_added = to_boolean(added, target_name)
33
+ is_leftovers = to_boolean(leftovers, target_name)
34
+
35
+ yield(target_name, is_removed, is_added, is_leftovers, after_schema_data) if block_given?
36
+ end
37
+
38
+ nil
39
+ end
40
+
41
+ private
42
+
43
+ def normalized(data)
44
+ if data.present?
45
+ data
46
+ elsif @middle_category.present?
47
+ { @major_category => { @middle_category => {} } }
48
+ else
49
+ { @major_category => {} }
50
+ end
51
+ end
52
+
53
+ def schema_data_at(data, key)
54
+ if @middle_category.present?
55
+ {
56
+ @major_category => {
57
+ @middle_category => {
58
+ key => data.fetch(key, nil)
59
+ }
60
+ }
61
+ }
62
+ else
63
+ {
64
+ @major_category => {
65
+ key => data.fetch(key, nil)
66
+ }
67
+ }
68
+ end
69
+ end
70
+
71
+ def sorted_target_data(data)
72
+ data = ensure_presence_or_blank(data)
73
+
74
+ if @middle_category.present?
75
+ sorted_data = deep_sort(data[@major_category], @middle_category)
76
+ result = ensure_presence_or_blank(sorted_data[@middle_category])
77
+ else
78
+ sorted_data = deep_sort(data, @major_category)
79
+ result = ensure_presence_or_blank(sorted_data[@major_category])
80
+ end
81
+
82
+ result
83
+ end
84
+
85
+ def to_boolean(diff, target_name)
86
+ if diff.present?
87
+ diff.fetch(@major_category, nil)&.fetch(@middle_category, nil)&.fetch(target_name, nil).present?
88
+ else
89
+ false
90
+ end
91
+ end
92
+ end
93
+ end
94
+ end
95
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'base_hash_diff_manager'
4
+
5
+ module R2OAS
6
+ module Schema
7
+ module V3
8
+ class ComponentsDiffManager < BaseHashDiffManager
9
+ def initialize(before_schema_data, after_schema_data, options = {})
10
+ super(before_schema_data, after_schema_data)
11
+ @major_category = 'components'
12
+ @middle_category = options[:middle_category]
13
+ @before_schema_data = normalized(before_schema_data)
14
+ @after_schema_data = normalized(after_schema_data)
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'base_array_diff_manager'
4
+
5
+ module R2OAS
6
+ module Schema
7
+ module V3
8
+ class TagDiffManager < BaseArrayDiffManager
9
+ def initialize(before_schema_data, after_schema_data)
10
+ super
11
+ @major_category = 'tags'
12
+ @judge_key = 'name'
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,66 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../pathname_manager'
4
+ require 'r2-oas/schema/v3/base'
5
+
6
+ module R2OAS
7
+ module Schema
8
+ module V3
9
+ class BaseFileManager < Base
10
+ attr_accessor :original_path
11
+
12
+ # e.x.) openapi_path = "#/components/schemas/Account"
13
+ def initialize(path, path_type = :full)
14
+ super()
15
+ @ext_name = :yml
16
+ @path_type = path_type
17
+ @original_path = path
18
+ @relative_save_file_path = PathnameManager.new(path, path_type).relative_save_file_path
19
+ end
20
+
21
+ def delete
22
+ File.delete(save_file_path) if FileTest.exists?(save_file_path)
23
+ end
24
+
25
+ def save(data)
26
+ abs_dir = File.dirname(save_file_path)
27
+ FileUtils.mkdir_p(abs_dir) unless FileTest.exists?(abs_dir)
28
+ File.write(save_file_path, data)
29
+ end
30
+
31
+ def save_after_deep_merge(data)
32
+ result = load_data.deep_merge(data)
33
+ save(result.to_yaml)
34
+ end
35
+
36
+ def save_file_path(type: :full)
37
+ file_path = File.expand_path(@relative_save_file_path)
38
+
39
+ case type
40
+ when :relative
41
+ file_path.sub(%r{^#{Dir.getwd}/?}, '')
42
+ else
43
+ file_path
44
+ end
45
+ end
46
+
47
+ def load_data
48
+ case @ext_name
49
+ when :yml
50
+ if FileTest.exists?(save_file_path)
51
+ YAML.load_file(save_file_path)
52
+ else
53
+ {}
54
+ end
55
+ else
56
+ raise NoSupportError, "Do not support @ext_name: #{@ext_name}"
57
+ end
58
+ end
59
+
60
+ def descendants_paths
61
+ []
62
+ end
63
+ end
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'include_ref_base_file_manager'
4
+
5
+ module R2OAS
6
+ module Schema
7
+ module V3
8
+ class ComponentsFileManager < IncludeRefBaseFileManager
9
+ def initialize(path, path_type = :ref)
10
+ super
11
+ @path_type = path_type
12
+ @original_path = path
13
+ @recursive_search_class = self.class
14
+ end
15
+
16
+ def skip_save?
17
+ save_file_path.in? paths_config.many_components_file_paths
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,89 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'base_file_manager'
4
+ require_relative '../pathname_manager'
5
+
6
+ module R2OAS
7
+ module Schema
8
+ module V3
9
+ class IncludeRefBaseFileManager < BaseFileManager
10
+ REF = '$ref'
11
+
12
+ def initialize(path, path_type = :ref)
13
+ super
14
+ @convert_underscore_to_slash = true
15
+ @parent_save_file_paths = []
16
+ @recursive_search_class = self.class
17
+ end
18
+
19
+ class << self
20
+ alias build new
21
+ end
22
+
23
+ def descendants_paths
24
+ results = []
25
+
26
+ deep_search_ref_recursive(load_data) do |relative_paths|
27
+ results.push(*relative_paths)
28
+ end
29
+
30
+ results.uniq
31
+ end
32
+ alias descendants_ref_paths descendants_paths
33
+
34
+ private
35
+
36
+ attr_accessor :parent_save_file_paths, :recursive_search_class
37
+
38
+ def deep_search_ref_recursive(yaml, &block)
39
+ case yaml
40
+ when Hash
41
+ yaml.each do |key, value|
42
+ process_deep_search_ref_recursive(key, value, &block)
43
+ end
44
+ # Support allOf/oneOf/anyOf
45
+ when Array
46
+ yaml.each do |el|
47
+ next unless el.is_a?(Hash)
48
+
49
+ el.each do |key, value|
50
+ process_deep_search_ref_recursive(key, value, &block)
51
+ end
52
+ end
53
+ end
54
+ end
55
+
56
+ def process_deep_search_ref_recursive(ref_key_or_not, ref_value_or_not, &block)
57
+ # Don't pick up JSON Schema $ref
58
+ # e.x.)
59
+ # $ref: { "type" => "string" }
60
+ if (ref_key_or_not.eql? REF) && ref_value_or_not.to_s.start_with?('#/')
61
+
62
+ # Avoid $ ref circular references
63
+ pm = PathnameManager.new(ref_value_or_not, :ref)
64
+ relative_save_file_path = pm.relative_save_file_path
65
+
66
+ if @parent_save_file_paths.include?(relative_save_file_path)
67
+ return
68
+ else
69
+ @parent_save_file_paths.push(relative_save_file_path)
70
+ end
71
+
72
+ child_file_manager = @recursive_search_class.build(ref_value_or_not, :ref)
73
+ child_load_data = child_file_manager.load_data
74
+
75
+ children_paths = []
76
+ deep_search_ref_recursive(child_load_data) do |children_path|
77
+ children_paths.push(*children_path)
78
+ end
79
+
80
+ results = [child_file_manager.save_file_path] + children_paths
81
+ yield results if block_given?
82
+ else
83
+ deep_search_ref_recursive(ref_value_or_not, &block)
84
+ end
85
+ end
86
+ end
87
+ end
88
+ end
89
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'include_ref_base_file_manager'
4
+ require_relative 'components_file_manager'
5
+ require_relative '../pathname_manager'
6
+
7
+ module R2OAS
8
+ module Schema
9
+ module V3
10
+ class PathItemFileManager < IncludeRefBaseFileManager
11
+ def initialize(path, path_type = :ref)
12
+ super
13
+ @recursive_search_class = ComponentsFileManager
14
+ end
15
+
16
+ def skip_save?
17
+ save_file_path.in? paths_config.many_paths_file_paths
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'file/base_file_manager'
4
+
5
+ module R2OAS
6
+ module Schema
7
+ module V3
8
+ class FileManager < BaseFileManager
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,78 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'r2-oas/schema/v3/base'
4
+
5
+ module R2OAS
6
+ module Schema
7
+ module V3
8
+ class PathnameManager < Base
9
+ # e.x.) path = "#/components/schemas/Account" (when path_type = :ref)
10
+ def initialize(path, path_type = :full)
11
+ super()
12
+ @ext_name = :yml
13
+ @path_type = path_type
14
+ @path = path
15
+ end
16
+
17
+ def object_type
18
+ case @path
19
+ when /schemas/
20
+ 'schemas'
21
+ when /requestBodies/
22
+ 'requestBodies'
23
+ when /securitySchemes/
24
+ 'securitySchemes'
25
+ when /parameters/
26
+ 'parameters'
27
+ when /responses/
28
+ 'responses'
29
+ when /examples/
30
+ 'examples'
31
+ when /headers/
32
+ 'headers'
33
+ when /links/
34
+ 'links'
35
+ when /callbacks/
36
+ 'callbacks'
37
+ end
38
+ end
39
+
40
+ def relative_save_file_path
41
+ result = normalized_about_path_type
42
+ if (@path_type.in? %i[ref relative]) && support_components_objects.include?(object_type)
43
+ dirname = File.dirname(result)
44
+ basename = File.basename(result, '.yml')
45
+ basename = basename.gsub(ns_div, '/').underscore
46
+ "#{schema_save_dir_path}/#{dirname}/#{basename}.yml"
47
+ elsif @path_type.eql?(:relative) && !support_components_objects.include?(object_type)
48
+ "#{schema_save_dir_path}/#{result.underscore}"
49
+ elsif @path_type.eql?(:full)
50
+ result
51
+ else
52
+ "#{schema_save_dir_path}/#{result}"
53
+ end
54
+ end
55
+
56
+ private
57
+
58
+ def normalized_about_path_type
59
+ case @path_type
60
+ when :ref
61
+ "#{@path.gsub('#/', '')}.#{@ext_name}"
62
+ when :relative
63
+ ext_name = File.extname(@path)
64
+ if ext_name.empty?
65
+ "#{@path}.#{@ext_name}"
66
+ else
67
+ @path
68
+ end
69
+ when :full
70
+ @path
71
+ else
72
+ raise NoSupportError, "Do not support path_type: #{@path_type}"
73
+ end
74
+ end
75
+ end
76
+ end
77
+ end
78
+ end