eworld 2.2.2 → 2.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/eworld.rb +13 -14
- data/lib/routes/generate.rb +0 -43
- data/lib/routes/{scan.rb → validate.rb} +1 -13
- data/lib/scanners/route_scanner.rb +1 -1
- data/lib/version.rb +1 -1
- metadata +5 -12
- data/lib/rules/js/rule_js_parameters.rb +0 -60
- data/lib/scanners/controller_scanner.rb +0 -137
- data/lib/scanners/entity_scanner.rb +0 -15
- data/lib/scanners/permission_scanner.rb +0 -15
- data/lib/scanners/queue_scanner.rb +0 -15
- data/opt/schema/controllers.yml +0 -32
- data/opt/schema/database.yml +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2011a169fec8d083f237af3e0e2addf03dae9578
|
4
|
+
data.tar.gz: 16da5f8ecc95470d7684b4f6a33828b55a582739
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cf1208be1aa917d58cdf51cc2011268f625feb3a3e14f8fd92571f69f714b30059d0d24b79dbd890ef072dfa2b95c65a8f537a25ca8a7c6ee618a35cda846322
|
7
|
+
data.tar.gz: 5c1714ad25ed5dfce2dba8707bfb8f24ffc0c5be68132730c498dad026a32133c0bac3fcf89ecb62429fef3c7b92c6b90fb724097c24ca9d7084ef06d3b25073
|
data/lib/eworld.rb
CHANGED
@@ -9,7 +9,6 @@ require 'writers/base_writer'
|
|
9
9
|
|
10
10
|
Dir["#{File.dirname(__FILE__)}/core/**/*.rb"].each { |file| load(file) }
|
11
11
|
Dir["#{File.dirname(__FILE__)}/routes/**/*.rb"].each { |file| load(file) }
|
12
|
-
Dir["#{File.dirname(__FILE__)}/rules/**/*.rb"].each { |file| load(file) }
|
13
12
|
Dir["#{File.dirname(__FILE__)}/scanners/**/*.rb"].each { |file| load(file) }
|
14
13
|
Dir["#{File.dirname(__FILE__)}/writers/**/*.rb"].each { |file| load(file) unless file =~ /\/(base_writer)\.rb\z/ }
|
15
14
|
|
@@ -58,19 +57,6 @@ TEMPLATE
|
|
58
57
|
end
|
59
58
|
end
|
60
59
|
|
61
|
-
# s - SCAN
|
62
|
-
if is_albert_mac
|
63
|
-
app.command :scan, :aliases => [:s] do |scan|
|
64
|
-
scan.summary 'Scan the codebase'
|
65
|
-
scan.options do |opts|
|
66
|
-
opts.opt :project, 'Specify Project ID', :short => '-p', :long => '--project', :type => :string
|
67
|
-
end
|
68
|
-
scan.action do |opts, args|
|
69
|
-
AppCommand::Scan.new(opts, args).execute
|
70
|
-
end
|
71
|
-
end
|
72
|
-
end
|
73
|
-
|
74
60
|
# U - UPDATE
|
75
61
|
app.command :update, :aliases => [:U] do |update|
|
76
62
|
update.summary 'Check for updates'
|
@@ -79,6 +65,19 @@ TEMPLATE
|
|
79
65
|
end
|
80
66
|
end
|
81
67
|
|
68
|
+
# v - VALIDATE
|
69
|
+
if is_albert_mac
|
70
|
+
app.command :validate, :aliases => [:v] do |validate|
|
71
|
+
validate.summary 'Valdiate the codebase'
|
72
|
+
validate.options do |opts|
|
73
|
+
opts.opt :project, 'Specify Project ID', :short => '-p', :long => '--project', :type => :string
|
74
|
+
end
|
75
|
+
validate.action do |opts, args|
|
76
|
+
AppCommand::Validate.new(opts, args).execute
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
82
81
|
# x - CONFIG
|
83
82
|
app.command :config, :aliases => [:x] do |config|
|
84
83
|
config.summary 'Setup your configuration file'
|
data/lib/routes/generate.rb
CHANGED
@@ -45,17 +45,6 @@ module AppCommand
|
|
45
45
|
|
46
46
|
puts if @verbose
|
47
47
|
|
48
|
-
td = @ui_project[Blufin::Projects::TRANSIENT_DATA]
|
49
|
-
root = Blufin::Strings::remove_surrounding_slashes(td[Blufin::Projects::CG_QUASAR_ROOT])
|
50
|
-
js = Blufin::Strings::remove_surrounding_slashes(td[Blufin::Projects::CG_QUASAR_JS])
|
51
|
-
|
52
|
-
Blufin::Terminal::execute_proc("Scanning: #{Blufin::Terminal::format_highlight('Javascript')}", Proc.new {
|
53
|
-
eb = @errors.length
|
54
|
-
@js, je = Blufin::ScannerJs::scan("#{@project_path}/#{root}/#{js}")
|
55
|
-
@errors.concat(je)
|
56
|
-
eb == @errors.length
|
57
|
-
}, verbose: @verbose)
|
58
|
-
|
59
48
|
Blufin::Terminal::execute_proc("Scanning: #{Blufin::Terminal::format_highlight('Routes')}", Proc.new {
|
60
49
|
eb = @errors.length
|
61
50
|
@routes_to_write, re = EWorld::RouteScanner::scan(@ui_project)
|
@@ -63,13 +52,6 @@ module AppCommand
|
|
63
52
|
eb == @errors.length
|
64
53
|
}, verbose: @verbose)
|
65
54
|
|
66
|
-
Blufin::Terminal::execute_proc("Scanning: #{Blufin::Terminal::format_highlight('Controllers')}", Proc.new {
|
67
|
-
eb = @errors.length
|
68
|
-
@controllers, ce = EWorld::ControllerScanner::scan(@api_project)
|
69
|
-
@errors.concat(ce)
|
70
|
-
eb == @errors.length
|
71
|
-
}, verbose: @verbose)
|
72
|
-
|
73
55
|
puts if @errors.any? && @verbose
|
74
56
|
|
75
57
|
Blufin::ScannerError::output_cli(@errors, false) if @errors.any?
|
@@ -84,31 +66,6 @@ module AppCommand
|
|
84
66
|
@overwritten.concat(ro)
|
85
67
|
}, verbose: @verbose)
|
86
68
|
|
87
|
-
Blufin::Terminal::execute_proc("Processing: #{Blufin::Terminal::format_highlight('Controllers')}", Proc.new {
|
88
|
-
cg, co = EWorld::ControllerWriter::write(@api_project, @ui_project, @controllers)
|
89
|
-
@generated.concat(cg)
|
90
|
-
@overwritten.concat(co)
|
91
|
-
|
92
|
-
}, verbose: @verbose)
|
93
|
-
|
94
|
-
Blufin::Terminal::execute_proc("Processing: #{Blufin::Terminal::format_highlight('Services')}", Proc.new {
|
95
|
-
sg, so = EWorld::ServiceWriter::write(@api_project, @ui_project, @controllers)
|
96
|
-
@generated.concat(sg)
|
97
|
-
@overwritten.concat(so)
|
98
|
-
}, verbose: @verbose)
|
99
|
-
|
100
|
-
Blufin::Terminal::execute_proc("Processing: #{Blufin::Terminal::format_highlight('API Docs (JSON)')}", Proc.new {
|
101
|
-
ag, ao = EWorld::ApiDocsWriter::write(@api_project, @ui_project, @controllers)
|
102
|
-
@generated.concat(ag)
|
103
|
-
@overwritten.concat(ao)
|
104
|
-
}, verbose: @verbose)
|
105
|
-
|
106
|
-
Blufin::Terminal::execute_proc("Processing: #{Blufin::Terminal::format_highlight('JS Docs (JSON)')}", Proc.new {
|
107
|
-
jg, jo = EWorld::JsDocsWriter::write(@api_project, @ui_project, @js)
|
108
|
-
@generated.concat(jg)
|
109
|
-
@overwritten.concat(jo)
|
110
|
-
}, verbose: @verbose)
|
111
|
-
|
112
69
|
# Reformat front-end.
|
113
70
|
Blufin::Terminal::execute_proc('Re-formatting UI codebase', Proc.new {
|
114
71
|
Blufin::Terminal::execute('git add .', @project_path_ui, verbose: false)
|
@@ -1,6 +1,6 @@
|
|
1
1
|
module AppCommand
|
2
2
|
|
3
|
-
class
|
3
|
+
class Validate < ::Convoy::ActionCommand::Base
|
4
4
|
|
5
5
|
def execute
|
6
6
|
|
@@ -68,23 +68,11 @@ module AppCommand
|
|
68
68
|
end
|
69
69
|
end
|
70
70
|
|
71
|
-
run_js_rules(@js) unless @js.nil?
|
72
|
-
|
73
71
|
# Output Errors (if any).
|
74
72
|
Blufin::ScannerError::output_cli(@errors)
|
75
73
|
|
76
74
|
end
|
77
75
|
|
78
|
-
private
|
79
|
-
|
80
|
-
# Runs all the rules for the JS files.
|
81
|
-
# @return void
|
82
|
-
def run_js_rules(data)
|
83
|
-
|
84
|
-
@errors = EWorld::RuleJsParameters::run(data, @errors)
|
85
|
-
|
86
|
-
end
|
87
|
-
|
88
76
|
end
|
89
77
|
|
90
78
|
end
|
@@ -165,7 +165,7 @@ module EWorld
|
|
165
165
|
end
|
166
166
|
|
167
167
|
# TODO - If non-tabs, must have FULLPATH, CODE, TITLE
|
168
|
-
# TODO - If tabs, must have ICON, TAB_PARENT
|
168
|
+
# TODO - If tabs, must have ICON, TAB_PARENT (AND TAB PARENT MUST MATCH PARENT).
|
169
169
|
|
170
170
|
expected_name = Blufin::Strings::remove_surrounding_slashes("#{parent_path}/#{child[PATH]}").gsub('/', '-')
|
171
171
|
# Handle special case for dashboard.
|
data/lib/version.rb
CHANGED
@@ -1 +1 @@
|
|
1
|
-
EWORLD_VERSION = '2.
|
1
|
+
EWORLD_VERSION = '2.3.0'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: eworld
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Albert Rannetsperger
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-01-
|
11
|
+
date: 2020-01-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: blufin-lib
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 2.
|
19
|
+
version: 2.3.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: 2.
|
26
|
+
version: 2.3.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: columnist
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -66,12 +66,7 @@ files:
|
|
66
66
|
- lib/core/opt.rb
|
67
67
|
- lib/eworld.rb
|
68
68
|
- lib/routes/generate.rb
|
69
|
-
- lib/routes/
|
70
|
-
- lib/rules/js/rule_js_parameters.rb
|
71
|
-
- lib/scanners/controller_scanner.rb
|
72
|
-
- lib/scanners/entity_scanner.rb
|
73
|
-
- lib/scanners/permission_scanner.rb
|
74
|
-
- lib/scanners/queue_scanner.rb
|
69
|
+
- lib/routes/validate.rb
|
75
70
|
- lib/scanners/route_scanner.rb
|
76
71
|
- lib/version.rb
|
77
72
|
- lib/writers/api_docs_writer.rb
|
@@ -85,8 +80,6 @@ files:
|
|
85
80
|
- lib/writers/service_writer.rb
|
86
81
|
- opt/config/schema.yml
|
87
82
|
- opt/config/template.yml
|
88
|
-
- opt/schema/controllers.yml
|
89
|
-
- opt/schema/database.yml
|
90
83
|
- opt/schema/routes.yml
|
91
84
|
homepage: http://rubygems.org/gems/eworld
|
92
85
|
licenses:
|
@@ -1,60 +0,0 @@
|
|
1
|
-
module EWorld
|
2
|
-
|
3
|
-
class RuleJsParameters
|
4
|
-
|
5
|
-
# This rule validate JS method parameters.
|
6
|
-
# It checks that the parameters match the actual methods and that we have a description/return type.
|
7
|
-
# @return Array (of errors)
|
8
|
-
def self.run(js_data, errors)
|
9
|
-
raise RuntimeError, "Expected Array, instead got: #{errors.class}" unless errors.is_a?(Array)
|
10
|
-
@errors = errors
|
11
|
-
js_data.each { |data| handler(data[1][:file], data[1]) }
|
12
|
-
@errors
|
13
|
-
end
|
14
|
-
|
15
|
-
private
|
16
|
-
|
17
|
-
# @return void
|
18
|
-
def self.handler(file, data)
|
19
|
-
|
20
|
-
@file = file
|
21
|
-
|
22
|
-
data[:methods].each do |method_name, method_data|
|
23
|
-
|
24
|
-
begin
|
25
|
-
|
26
|
-
@line = method_data[:line]
|
27
|
-
@line_number = method_data[:line_number]
|
28
|
-
|
29
|
-
# Skip private methods.
|
30
|
-
next if method_data[:private]
|
31
|
-
|
32
|
-
expected = method_data[:params].keys
|
33
|
-
actual = method_data[:docs][:params].keys
|
34
|
-
|
35
|
-
# Throw error if params don't match comments.
|
36
|
-
raise RuntimeError, "#{method_name} \xe2\x80\x94 Param docs are missing, corrupted or incorrect." if expected.to_s != actual.to_s
|
37
|
-
|
38
|
-
# Make sure we have all the comment doc stuff we need.
|
39
|
-
if method_data[:docs].is_a?(Hash)
|
40
|
-
missing_items = []
|
41
|
-
missing_items << 'description' unless method_data[:docs].has_key?(:description)
|
42
|
-
missing_items << 'return' unless method_data[:docs].has_key?(:return)
|
43
|
-
if missing_items.any?
|
44
|
-
@line = "\xe2\x80\x94"
|
45
|
-
@line_number = @line_number + 1
|
46
|
-
raise RuntimeError, "Comment docs are missing \xe2\x86\x92 #{missing_items.join(', ')}"
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
rescue RuntimeError => e
|
51
|
-
@errors << Blufin::ScannerError.new(@file, @line, @line_number, e.message)
|
52
|
-
end
|
53
|
-
|
54
|
-
end
|
55
|
-
|
56
|
-
end
|
57
|
-
|
58
|
-
end
|
59
|
-
|
60
|
-
end
|
@@ -1,137 +0,0 @@
|
|
1
|
-
module EWorld
|
2
|
-
|
3
|
-
class ControllerScanner
|
4
|
-
|
5
|
-
SCHEMA_FILE = "#{App::Opt::get_base_path}#{App::Opt::OPT_PATH}/schema/controllers.yml"
|
6
|
-
|
7
|
-
# Responsible for scanning the .codegen/controllers/[MULTIPLE].yml file(s).
|
8
|
-
# @return Array
|
9
|
-
def self.scan(api_project)
|
10
|
-
|
11
|
-
# TODO - Need to inject permissions.
|
12
|
-
# TODO - Need to inject entities.
|
13
|
-
|
14
|
-
raise RuntimeError, "Expected project type to be: #{Blufin::Projects::TYPE_API_SIMPLE}, instead got: #{api_project[Blufin::Projects::TYPE]}" unless api_project[Blufin::Projects::TYPE] == Blufin::Projects::TYPE_API_SIMPLE
|
15
|
-
@errors = []
|
16
|
-
@controllers = {}
|
17
|
-
@classes_seen = []
|
18
|
-
@paths_seen = []
|
19
|
-
begin
|
20
|
-
@project_path = Blufin::Projects::get_project_path(api_project[Blufin::Projects::PROJECT_ID])
|
21
|
-
@project_path_api = Blufin::Projects::get_project_path(api_project[Blufin::Projects::PROJECT_ID], true)
|
22
|
-
@project_transient_api = api_project[Blufin::Projects::TRANSIENT_DATA]
|
23
|
-
@controller_path = "#{EWorld::BaseWriter::get_java_path_for(@project_path, @project_transient_api['ControllerPath'])}/#{EWorld::ControllerWriter::PACKAGE_NAME}"
|
24
|
-
@service_path = "#{EWorld::BaseWriter::get_java_path_for(@project_path, @project_transient_api['ServicePath'])}/#{EWorld::ServiceWriter::PACKAGE_NAME}"
|
25
|
-
controller_yml_path = "#{@project_path}/.#{Blufin::Projects::CODEGEN}/controllers"
|
26
|
-
# If path not found, bomb-out immediately.
|
27
|
-
unless Blufin::Files::path_exists(controller_yml_path)
|
28
|
-
@errors << Blufin::ScannerError::add_error(nil, "YML Controller path not found: #{controller_yml_path}")
|
29
|
-
return @errors, {}
|
30
|
-
end
|
31
|
-
# If the parent path where controllers/services should live doesn't exists -- bomb-out!
|
32
|
-
[@controller_path, @service_path].each do |path|
|
33
|
-
unless Blufin::Files::path_exists(path)
|
34
|
-
@errors << Blufin::ScannerError::add_error(nil, "Path not found: #{path}")
|
35
|
-
return {}, @errors
|
36
|
-
end
|
37
|
-
end
|
38
|
-
# Loop all the YML files. Each file = 1 controller.
|
39
|
-
Blufin::Files::get_files_in_dir(controller_yml_path).each do |controller_file|
|
40
|
-
@file = controller_file
|
41
|
-
# Get extension + controller root path.
|
42
|
-
fs = @file.split('.')
|
43
|
-
@root_path = fs[fs.length - 2].split('/')
|
44
|
-
@root_path = @root_path[@root_path.length - 1]
|
45
|
-
@class_name = "#{Blufin::Strings::snake_case_to_camel_case(@root_path.gsub('-', '_'))}"
|
46
|
-
ext = fs[fs.length - 1]
|
47
|
-
# Make sure we don't have duplicate class names.
|
48
|
-
@errors << Blufin::ScannerError::add_error(@file, "Duplicate class: #{@class_name}") if @classes_seen.include?(@class_name.upcase)
|
49
|
-
@classes_seen << @class_name.upcase
|
50
|
-
# Make sure we have validly named YML file(s).
|
51
|
-
@errors << Blufin::ScannerError::add_error(@file, "Expected extension to be lowercase 'yml', instead got: #{ext}") if ext.downcase != 'yml'
|
52
|
-
unless ext.downcase == 'yml'
|
53
|
-
@errors << Blufin::ScannerError::add_error(@file, "Expected extension to be 'yml', instead got: #{ext}")
|
54
|
-
next
|
55
|
-
end
|
56
|
-
controller_yml = Blufin::Yml::read_file(@file, SCHEMA_FILE)
|
57
|
-
# Validate file. If errors, go to next file.
|
58
|
-
next unless validate_file(controller_yml)
|
59
|
-
controller_yml['RootPath'] = Blufin::Strings::remove_surrounding_slashes(@root_path)
|
60
|
-
@controllers[@class_name] = controller_yml
|
61
|
-
end
|
62
|
-
rescue => e
|
63
|
-
Blufin::Terminal::print_exception(e)
|
64
|
-
end
|
65
|
-
return @controllers, @errors
|
66
|
-
end
|
67
|
-
|
68
|
-
private
|
69
|
-
|
70
|
-
# Put all validation here. If any errors get added, this method returns FALSE and the loop at the top skips processing.
|
71
|
-
# @return bool
|
72
|
-
def self.validate_file(data)
|
73
|
-
error_count_before = @errors.length
|
74
|
-
if data.has_key?('EndPoints') && data['EndPoints'].is_a?(Array)
|
75
|
-
data['EndPoints'].each do |resource|
|
76
|
-
path = resource['Path']
|
77
|
-
path_full = "/#{Blufin::Strings::remove_surrounding_slashes(@root_path)}/#{Blufin::Strings::remove_surrounding_slashes(resource['Path'])}"
|
78
|
-
path_downcase = path_full.downcase
|
79
|
-
method = resource['Method']
|
80
|
-
path_method = "#{method} #{path_downcase}"
|
81
|
-
prefix = "#{path_full} \xe2\x80\x94 "
|
82
|
-
# Make sure path does not have trailing/preceding slashes.
|
83
|
-
@errors << Blufin::ScannerError::add_error(@file, "#{prefix}Path should not have trailing/preceding slash(es): #{path}") if path =~ /^\// || path =~ /\/$/
|
84
|
-
# Make sure paths are always lowercase.
|
85
|
-
@errors << Blufin::ScannerError::add_error(@file, "#{prefix}Path(s) must be lowercase, found: #{path_full}") if path_full != path_downcase
|
86
|
-
path_full.downcase!
|
87
|
-
# Make sure there are no duplicate permissions.
|
88
|
-
if resource.has_key?('Permissions')
|
89
|
-
perms = []
|
90
|
-
resource['Permissions'].each do |perm|
|
91
|
-
if perms.include?(perm)
|
92
|
-
@errors << Blufin::ScannerError::add_error(@file, "#{prefix}Duplicate permission(s): #{perm}")
|
93
|
-
next
|
94
|
-
end
|
95
|
-
perms << perm
|
96
|
-
end
|
97
|
-
end
|
98
|
-
# Make sure we don't have duplicate paths.
|
99
|
-
@errors << Blufin::ScannerError::add_error(@file, "Duplicate end-point: #{path_method}") if @paths_seen.include?(path_method)
|
100
|
-
@paths_seen << path_method
|
101
|
-
|
102
|
-
if %w(POST PUT).include?(method)
|
103
|
-
|
104
|
-
# TODO NOW - Validate POST/PUT stuff.
|
105
|
-
|
106
|
-
end
|
107
|
-
|
108
|
-
# TODO NOW - Validate Service/Method exists.
|
109
|
-
# TODO NOW - Validate Request Params match service method.
|
110
|
-
# TODO NOW - What about abstract controller calls for entities?
|
111
|
-
|
112
|
-
end
|
113
|
-
end
|
114
|
-
|
115
|
-
service_file = "#{@service_path}/#{@class_name}Service.java"
|
116
|
-
if Blufin::Files::file_exists(service_file)
|
117
|
-
|
118
|
-
# TODO - Must scan file here ...
|
119
|
-
|
120
|
-
java_data, errors = Blufin::ScannerJava::scan_file(service_file)
|
121
|
-
|
122
|
-
# TODO - REMOVE
|
123
|
-
# puts
|
124
|
-
# puts java_data.to_yaml
|
125
|
-
# puts errors.to_yaml
|
126
|
-
|
127
|
-
@errors.concat(errors)
|
128
|
-
|
129
|
-
end
|
130
|
-
|
131
|
-
# If errors have been added, return FALSE.
|
132
|
-
@errors.length == error_count_before
|
133
|
-
end
|
134
|
-
|
135
|
-
end
|
136
|
-
|
137
|
-
end
|
data/opt/schema/controllers.yml
DELETED
@@ -1,32 +0,0 @@
|
|
1
|
-
type: map
|
2
|
-
mapping:
|
3
|
-
EndPoints:
|
4
|
-
type: seq
|
5
|
-
sequence:
|
6
|
-
- type: map
|
7
|
-
mapping:
|
8
|
-
Path:
|
9
|
-
required: true
|
10
|
-
pattern: /^[a-z0-9\-\/]+$/
|
11
|
-
Method:
|
12
|
-
required: true
|
13
|
-
enum: [GET, POST, PUT, PATCH, DELETE]
|
14
|
-
RequestParams:
|
15
|
-
type: seq
|
16
|
-
sequence:
|
17
|
-
- type: map
|
18
|
-
mapping:
|
19
|
-
Name:
|
20
|
-
required: true
|
21
|
-
pattern: /^[A-Za-z0-9]+$/
|
22
|
-
Type:
|
23
|
-
required: true
|
24
|
-
enum: [String]
|
25
|
-
Required:
|
26
|
-
required: true
|
27
|
-
type: bool
|
28
|
-
Permissions:
|
29
|
-
type: seq
|
30
|
-
sequence:
|
31
|
-
- type: str
|
32
|
-
pattern: /^[A-Z0-9_]+$/
|
data/opt/schema/database.yml
DELETED
File without changes
|