idcfcloud 0.1.4 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.codeclimate.yml +1 -0
- data/.gitignore +5 -3
- data/.rubocop.yml +16 -1
- data/README.md +61 -6
- data/exe/idcfcloud +9 -1
- data/idcfcloud.gemspec +9 -7
- data/lib/idcf/cli/conf/conf.yml +39 -5
- data/lib/idcf/cli/conf/const.rb +42 -17
- data/lib/idcf/cli/controller/base.rb +130 -60
- data/lib/idcf/cli/controller/extend/command.rb +18 -16
- data/lib/idcf/cli/controller/extend/init.rb +2 -0
- data/lib/idcf/cli/controller/extend/override.rb +1 -8
- data/lib/idcf/cli/controller/extend/search_module.rb +14 -0
- data/lib/idcf/cli/controller/ilb.rb +5 -34
- data/lib/idcf/cli/controller/include/command.rb +7 -80
- data/lib/idcf/cli/controller/include/init.rb +2 -4
- data/lib/idcf/cli/controller/include/util.rb +20 -63
- data/lib/idcf/cli/controller/include/validate.rb +7 -1
- data/lib/idcf/cli/controller/your.rb +0 -33
- data/lib/idcf/cli/error/cli_error.rb +7 -5
- data/lib/idcf/cli/extend/configure.rb +38 -33
- data/lib/idcf/cli/extend/update.rb +139 -54
- data/lib/idcf/cli/extend/update_file.rb +113 -18
- data/lib/idcf/cli/gem_ext/thor/init_util.rb +20 -7
- data/lib/idcf/cli/index.rb +21 -11
- data/lib/idcf/cli/lib/convert/formatter/base.rb +1 -1
- data/lib/idcf/cli/lib/convert/formatter/xml_format.rb +1 -1
- data/lib/idcf/cli/lib/convert/helper.rb +43 -7
- data/lib/idcf/cli/lib/util/ini_conf.rb +30 -8
- data/lib/idcf/cli/lib/util/yml_conf.rb +13 -2
- data/lib/idcf/cli/service/base.rb +121 -21
- data/lib/idcf/cli/service/ilb/add_server_for_protocol.rb +8 -3
- data/lib/idcf/cli/service/ilb/base_server_for_protocol.rb +21 -35
- data/lib/idcf/cli/service/ilb/delete_server_for_protocol.rb +9 -4
- data/lib/idcf/cli/validate/define/base.rb +3 -1
- data/lib/idcf/cli/validate/define/ilb/base.rb +0 -5
- data/lib/idcf/cli/version.rb +1 -1
- metadata +62 -23
- data/lib/idcf/cli/conf/service/.gitkeep +0 -0
- data/lib/idcf/cli/controller/include/override.rb +0 -30
- data/lib/idcf/cli/controller/include/sdk.rb +0 -94
@@ -3,6 +3,7 @@ require 'active_support/core_ext'
|
|
3
3
|
require 'idcf/cli/conf/const'
|
4
4
|
require 'idcf/cli/lib/util/template'
|
5
5
|
require_relative 'update_file'
|
6
|
+
require 'idcf/cli/lib/util/input'
|
6
7
|
module Idcf
|
7
8
|
module Cli
|
8
9
|
module Extend
|
@@ -15,83 +16,150 @@ module Idcf
|
|
15
16
|
COMP_N = 'complement'.freeze
|
16
17
|
|
17
18
|
def do_update(_o)
|
18
|
-
|
19
|
-
|
20
|
-
infos = {}
|
21
|
-
|
22
|
-
clients.each do |s_name, client|
|
23
|
-
info = make_module_info(client)
|
24
|
-
output_yaml(s_name, info)
|
25
|
-
infos[s_name] = info
|
26
|
-
end
|
19
|
+
s_schemas = schema_data_acquisition
|
20
|
+
output_schema(s_schemas)
|
27
21
|
output_complement
|
28
22
|
end
|
29
23
|
|
30
|
-
def
|
31
|
-
|
32
|
-
|
33
|
-
next
|
34
|
-
|
35
|
-
|
24
|
+
def output_schema(s_schemas)
|
25
|
+
s_schemas.each do |service, infos|
|
26
|
+
infos.each do |version, regions|
|
27
|
+
next if regions.nil? || regions.empty?
|
28
|
+
regions.each do |region, schema|
|
29
|
+
path = make_schema_file_path(service, version, region)
|
30
|
+
output_complement_file(JSON.pretty_generate(schema), path)
|
31
|
+
end
|
32
|
+
output_default_schema(service, version, regions)
|
36
33
|
end
|
37
34
|
end
|
38
35
|
end
|
39
36
|
|
40
|
-
def
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
37
|
+
def output_default_schema(service, version, regions)
|
38
|
+
return nil if regions.keys.include?('default')
|
39
|
+
latist = latest_schema(regions.values)
|
40
|
+
path = make_schema_file_path(service, version, 'default')
|
41
|
+
output_complement_file(JSON.pretty_generate(latist), path)
|
42
|
+
end
|
43
|
+
|
44
|
+
# get latest schema
|
45
|
+
#
|
46
|
+
# @param schemas [Array]
|
47
|
+
# @return Hash or nil
|
48
|
+
def latest_schema(schemas)
|
49
|
+
result = nil
|
50
|
+
v_str = '$version'
|
51
|
+
schemas.each do |data|
|
52
|
+
result ||= data
|
53
|
+
v1 = Gem::Version.create(data[v_str])
|
54
|
+
v2 = Gem::Version.create(result[v_str])
|
55
|
+
next unless v1 > v2
|
56
|
+
result = data
|
57
|
+
end
|
58
|
+
result
|
59
|
+
end
|
60
|
+
|
61
|
+
def output_complement
|
62
|
+
view = Idcf::Cli::Lib::Util::Template.new
|
63
|
+
view.set('variables', make_script_variables)
|
64
|
+
paths = {}
|
65
|
+
Idcf::Cli::Conf::Const::COMP_PATHS.each do |k, _v|
|
66
|
+
str = view.fetch("#{k}/#{COMP_N}.erb")
|
67
|
+
path = "#{Idcf::Cli::Conf::Const::OUT_DIR}/#{COMP_N}.#{k}"
|
68
|
+
paths[k] = File.expand_path(path)
|
69
|
+
output_complement_file(str, paths[k])
|
70
|
+
end
|
71
|
+
|
72
|
+
output_notification(paths)
|
73
|
+
end
|
74
|
+
|
75
|
+
# output notification
|
76
|
+
#
|
77
|
+
# @param paths [Hash]
|
78
|
+
def output_notification(paths)
|
79
|
+
script = ENV['SHELL'].split('/').pop.to_sym
|
80
|
+
return output_manual_writing(paths) if paths[script].nil?
|
81
|
+
startup_script_qa(paths, script)
|
82
|
+
end
|
83
|
+
|
84
|
+
def startup_script_qa(paths, script)
|
85
|
+
list = %w(y N)
|
86
|
+
puts "Do you want to edit the startup script?(#{list.join('/')})"
|
87
|
+
puts "[#{startup_script_path(script)}]"
|
88
|
+
ans = Idcf::Cli::Lib::Util::Input.qa_answer_input(list)
|
89
|
+
if ans == 'y'
|
90
|
+
output_startup_script(script, paths)
|
91
|
+
else
|
92
|
+
output_manual_writing(paths)
|
50
93
|
end
|
51
94
|
end
|
52
95
|
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
96
|
+
# startup script path
|
97
|
+
#
|
98
|
+
# @param script [String]
|
99
|
+
# @return String
|
100
|
+
def startup_script_path(script)
|
101
|
+
File.expand_path(Idcf::Cli::Conf::Const::COMP_PATHS[script])
|
102
|
+
end
|
103
|
+
|
104
|
+
# output start script
|
105
|
+
#
|
106
|
+
# @param paths [Hash]
|
107
|
+
def output_startup_script(script, paths)
|
108
|
+
s_script_path = startup_script_path(script)
|
109
|
+
write_str = "source #{paths[script]}"
|
110
|
+
|
111
|
+
if write_path?(s_script_path, write_str)
|
112
|
+
File.open(s_script_path, 'a') do |f|
|
113
|
+
f.puts write_str, ''
|
58
114
|
end
|
59
115
|
end
|
116
|
+
|
117
|
+
puts 'Run the following command:', write_str
|
60
118
|
end
|
61
119
|
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
120
|
+
# write path?
|
121
|
+
#
|
122
|
+
# @param path [String] setting path
|
123
|
+
# @param check_str
|
124
|
+
# @return Boolean
|
125
|
+
# @raise
|
126
|
+
def write_path?(path, check_str)
|
127
|
+
if File.exist?(path)
|
128
|
+
Idcf::Cli::Lib::Util::CliFile.writable(path)
|
129
|
+
return !write_line_str_exist?(path, check_str)
|
70
130
|
end
|
71
131
|
|
72
|
-
|
132
|
+
Idcf::Cli::Lib::Util::CliFile.writable(File.expand_path('..', path))
|
133
|
+
true
|
73
134
|
end
|
74
135
|
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
136
|
+
# write line str exist?
|
137
|
+
#
|
138
|
+
# @param path [String] setting path
|
139
|
+
# @param check_str
|
140
|
+
# @return Boolean
|
141
|
+
# @raise
|
142
|
+
def write_line_str_exist?(path, check_str)
|
143
|
+
File.open(path, 'r') do |f|
|
144
|
+
f.each_line do |line|
|
145
|
+
return true if line.strip == check_str
|
146
|
+
end
|
84
147
|
end
|
85
|
-
|
148
|
+
false
|
86
149
|
end
|
87
150
|
|
88
|
-
|
89
|
-
|
90
|
-
|
151
|
+
# manual write
|
152
|
+
#
|
153
|
+
# @param paths [Hash]
|
154
|
+
def output_manual_writing(paths)
|
155
|
+
puts 'please write in'
|
156
|
+
Idcf::Cli::Conf::Const::COMP_PATHS.each do |k, v|
|
157
|
+
puts v, paths[k]
|
158
|
+
end
|
91
159
|
end
|
92
160
|
|
93
161
|
def make_script_variables
|
94
|
-
self.class.init
|
162
|
+
self.class.init({})
|
95
163
|
make_flat_variables(self.class.subcommand_structure)
|
96
164
|
end
|
97
165
|
|
@@ -102,7 +170,7 @@ module Idcf
|
|
102
170
|
# @return Hash
|
103
171
|
def make_flat_variables(list, names = [])
|
104
172
|
{}.tap do |result|
|
105
|
-
name
|
173
|
+
name = names.empty? ? 'top' : names.join('_')
|
106
174
|
result[name] = list.keys
|
107
175
|
list.each do |k, v|
|
108
176
|
next unless v.class == Hash
|
@@ -112,6 +180,23 @@ module Idcf
|
|
112
180
|
end
|
113
181
|
end
|
114
182
|
end
|
183
|
+
|
184
|
+
def extract_commands(thor_class, commands)
|
185
|
+
thor_class.commands.keys.each do |k_c|
|
186
|
+
commands << k_c if commands.index(k_c).nil?
|
187
|
+
end
|
188
|
+
|
189
|
+
commands.sort
|
190
|
+
end
|
191
|
+
|
192
|
+
def extract_command_infos(t_class, s_name, infos)
|
193
|
+
commands = []
|
194
|
+
return extract_commands(t_class, commands) if infos[s_name].nil?
|
195
|
+
infos[s_name].keys.each do |name|
|
196
|
+
commands << name.to_s
|
197
|
+
end
|
198
|
+
extract_commands(t_class, commands)
|
199
|
+
end
|
115
200
|
end
|
116
201
|
end
|
117
202
|
end
|
@@ -1,24 +1,126 @@
|
|
1
1
|
require 'fileutils'
|
2
2
|
require 'idcf/cli/conf/const'
|
3
|
+
require 'open_uri_redirections'
|
3
4
|
|
4
5
|
module Idcf
|
5
6
|
module Cli
|
6
7
|
module Extend
|
7
8
|
# update file
|
8
9
|
module UpdateFile
|
10
|
+
BROKEN_UPDATE_FILE = 'The update file is damaged. '\
|
11
|
+
'Please consult with the administrator.'.freeze
|
12
|
+
|
9
13
|
protected
|
10
14
|
|
11
|
-
def
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
+
def schema_data_acquisition
|
16
|
+
{}.tap do |result|
|
17
|
+
self.class.subcommand_classes.each do |s_name, cls|
|
18
|
+
result[s_name] = service_schema_data_acquisition(cls)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
15
22
|
|
16
|
-
|
17
|
-
|
18
|
-
|
23
|
+
def service_schema_data_acquisition(cls)
|
24
|
+
{}.tap do |result|
|
25
|
+
schema_file_paths(cls).each do |version, infos|
|
26
|
+
result[version] = {}
|
27
|
+
infos.each do |region, path|
|
28
|
+
j = download_schema_file(path)
|
29
|
+
update_data_check(j)
|
30
|
+
result[version][region] = j
|
31
|
+
end
|
32
|
+
end
|
19
33
|
end
|
20
34
|
end
|
21
35
|
|
36
|
+
def download_schema_file(path)
|
37
|
+
d = file_load(path)
|
38
|
+
JSON.parse(d)
|
39
|
+
rescue
|
40
|
+
Idcf::Cli::Lib::Util::CliLogger.info("json format error:#{path}")
|
41
|
+
raise Idcf::Cli::Error::CliError, BROKEN_UPDATE_FILE
|
42
|
+
end
|
43
|
+
|
44
|
+
def update_data_check(j)
|
45
|
+
check_json_schema(j)
|
46
|
+
check_api_version_format(j['$version'])
|
47
|
+
end
|
48
|
+
|
49
|
+
def check_json_schema(j)
|
50
|
+
analyst = Idcf::JsonHyperSchema::Analyst.new
|
51
|
+
analyst.schema_links(j)
|
52
|
+
rescue => e
|
53
|
+
Idcf::Cli::Lib::Util::CliLogger.info('json-schema format error')
|
54
|
+
log_msg = "#{BROKEN_UPDATE_FILE}:#{e.message}"
|
55
|
+
Idcf::Cli::Lib::Util::CliLogger.error(log_msg)
|
56
|
+
raise Idcf::Cli::Error::CliError, BROKEN_UPDATE_FILE
|
57
|
+
end
|
58
|
+
|
59
|
+
def file_load(path)
|
60
|
+
open(path).read
|
61
|
+
rescue
|
62
|
+
nil
|
63
|
+
end
|
64
|
+
|
65
|
+
def schema_file_paths(cls)
|
66
|
+
{}.tap do |result|
|
67
|
+
Idcf::Cli::Lib::Configure.get_code_conf(cls.service_name).each do |k, v|
|
68
|
+
regions = {}
|
69
|
+
v['region'].each do |region, info|
|
70
|
+
regions[region] = create_schema_url(info['schema'])
|
71
|
+
end
|
72
|
+
|
73
|
+
result[k] = regions
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
def create_schema_url(path)
|
79
|
+
href_regexp = Idcf::Cli::Conf::Const::FULL_HREF_REGEXP
|
80
|
+
return path if path =~ href_regexp
|
81
|
+
path = File.expand_path("../#{path}", Idcf::Cli::Conf::Const::BASE_PATH)
|
82
|
+
return path if File.exist?(path)
|
83
|
+
File.expand_path(path)
|
84
|
+
end
|
85
|
+
|
86
|
+
# check api version format
|
87
|
+
#
|
88
|
+
# @param v_str [String] version string
|
89
|
+
# @return Boolean
|
90
|
+
# @raise
|
91
|
+
def check_api_version_format(v_str)
|
92
|
+
msg = 'Please inform an administrator.'
|
93
|
+
raise Idcf::Cli::Error::CliError, msg unless v_str =~ /\A\d+\.\d+\.\d+\Z/
|
94
|
+
true
|
95
|
+
end
|
96
|
+
|
97
|
+
# make schema file path
|
98
|
+
#
|
99
|
+
# @param service [String]
|
100
|
+
# @param version [String]
|
101
|
+
# @param region [String]
|
102
|
+
# @return String
|
103
|
+
# @raise At a writing in right error
|
104
|
+
def make_schema_file_path(service, version, region)
|
105
|
+
b_dir = schema_file_output_base_path
|
106
|
+
ext = Idcf::Cli::Conf::Const::CMD_FILE_EXT
|
107
|
+
path = "#{b_dir}/#{service}_#{version}_#{region}.#{ext}"
|
108
|
+
cli_file = Idcf::Cli::Lib::Util::CliFile
|
109
|
+
if File.exist?(path)
|
110
|
+
cli_file.writable(path)
|
111
|
+
else
|
112
|
+
cli_file.writable(File.dirname(path))
|
113
|
+
end
|
114
|
+
path
|
115
|
+
end
|
116
|
+
|
117
|
+
def schema_file_output_base_path
|
118
|
+
result = File.expand_path(Idcf::Cli::Conf::Const::CMD_FILE_DIR)
|
119
|
+
FileUtils.mkdir_p(result) unless Dir.exist?(result)
|
120
|
+
Idcf::Cli::Lib::Util::CliFile.writable(File.dirname(result))
|
121
|
+
result
|
122
|
+
end
|
123
|
+
|
22
124
|
def output_yaml(s_name, data)
|
23
125
|
dir = Idcf::Cli::Conf::Const::CMD_FILE_DIR
|
24
126
|
ext = Idcf::Cli::Conf::Const::CMD_FILE_EXT
|
@@ -28,25 +130,18 @@ module Idcf
|
|
28
130
|
|
29
131
|
def output_complement_file(str, outpath)
|
30
132
|
dir_path = File.dirname(outpath)
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
end
|
35
|
-
writable?(dir_path)
|
133
|
+
cli_file = Idcf::Cli::Lib::Util::CliFile
|
134
|
+
cli_file.mkdir(dir_path)
|
135
|
+
cli_file.writable(dir_path)
|
36
136
|
|
37
137
|
write_file(outpath, str)
|
38
138
|
end
|
39
139
|
|
40
140
|
def write_file(path, str)
|
41
|
-
File.open(path, 'w') do |f|
|
141
|
+
File.open(path, 'w', 0o755) do |f|
|
42
142
|
f.puts(str)
|
43
143
|
end
|
44
144
|
end
|
45
|
-
|
46
|
-
def writable?(path)
|
47
|
-
msg = "Permission error (#{path})"
|
48
|
-
raise Idcf::Cli::CliError, msg unless File.writable?(path)
|
49
|
-
end
|
50
145
|
end
|
51
146
|
end
|
52
147
|
end
|
@@ -1,3 +1,6 @@
|
|
1
|
+
require 'idcf/cli/lib/util/cli_logger'
|
2
|
+
require 'idcf/cli/lib/util/name'
|
3
|
+
|
1
4
|
# Thor extention
|
2
5
|
class Thor
|
3
6
|
class << self
|
@@ -15,21 +18,22 @@ class Thor
|
|
15
18
|
#
|
16
19
|
# @return String
|
17
20
|
def description
|
18
|
-
raise Idcf::Cli::CliError, 'Required Override'
|
21
|
+
raise Idcf::Cli::Error::CliError, 'Required Override'
|
19
22
|
end
|
20
23
|
|
21
24
|
# register sub command
|
22
25
|
#
|
23
26
|
# @param dir [String] underlayer path
|
24
27
|
# @param parent_dir_path [Stirng]
|
28
|
+
# @param arg [Hash] options
|
25
29
|
# @return nil
|
26
|
-
def sub_command_regist(under_path, parent_dir_path = '')
|
27
|
-
b_path =
|
30
|
+
def sub_command_regist(under_path, parent_dir_path = '', arg = {})
|
31
|
+
b_path = Idcf::Cli::Lib::Util::Name.namespace(name).underscore
|
28
32
|
Dir.glob(parent_dir_path + "/#{under_path}/*.rb").each do |f|
|
29
33
|
file_name = File.basename(f, '.*')
|
30
34
|
next if file_name == 'base'
|
31
35
|
|
32
|
-
command_regist file_name, "#{b_path}/#{under_path}/#{file_name}"
|
36
|
+
command_regist file_name, "#{b_path}/#{under_path}/#{file_name}", arg
|
33
37
|
end
|
34
38
|
end
|
35
39
|
|
@@ -37,11 +41,12 @@ class Thor
|
|
37
41
|
#
|
38
42
|
# @param command [String]
|
39
43
|
# @param require_path [String]
|
40
|
-
|
44
|
+
# @param o [Hash] options
|
45
|
+
def command_regist(command, require_path, arg)
|
41
46
|
require require_path
|
42
47
|
|
43
48
|
class_const = require_path.classify.constantize
|
44
|
-
class_const.init
|
49
|
+
class_const.init(arg)
|
45
50
|
register class_const,
|
46
51
|
command,
|
47
52
|
"#{command_help_string(command)} [OPTION]",
|
@@ -78,11 +83,19 @@ class Thor
|
|
78
83
|
end
|
79
84
|
end
|
80
85
|
|
86
|
+
def error_exit(e)
|
87
|
+
STDERR.puts e.message
|
88
|
+
Idcf::Cli::Lib::Util::CliLogger.error(e.message)
|
89
|
+
Idcf::Cli::Lib::Util::CliLogger.cleaning(options)
|
90
|
+
STDERR.puts "log path: #{Idcf::Cli::Lib::Util::CliLogger.current_path}"
|
91
|
+
exit 1
|
92
|
+
end
|
93
|
+
|
81
94
|
protected
|
82
95
|
|
83
96
|
def subcommand_class_structure(result)
|
84
97
|
subcommand_classes.each do |k, v|
|
85
|
-
commands
|
98
|
+
commands = v.subcommand_structure
|
86
99
|
result[k.to_s] = nil
|
87
100
|
result[k.to_s] = commands unless commands.empty?
|
88
101
|
end
|
data/lib/idcf/cli/index.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
require 'logger'
|
1
2
|
require 'thor'
|
2
3
|
require 'active_support'
|
3
4
|
require 'active_support/core_ext'
|
@@ -7,21 +8,29 @@ require 'idcf/cli/error/cli_error'
|
|
7
8
|
require_relative './validate/custom/init'
|
8
9
|
require_relative './gem_ext/thor/init_util'
|
9
10
|
require_relative './extend/init'
|
11
|
+
require 'idcf/cli/error/init'
|
12
|
+
require 'idcf/cli/lib/util/cli_file'
|
13
|
+
require 'idcf/cli/lib/util/cli_logger'
|
10
14
|
|
11
15
|
module Idcf
|
12
16
|
module Cli
|
13
17
|
# Index
|
14
18
|
class Index < Thor
|
15
|
-
@variables
|
19
|
+
@variables = nil
|
16
20
|
# command alias [alias] => [command]
|
17
21
|
COMMAND_MAPS = {}.freeze
|
18
22
|
|
19
23
|
include Idcf::Cli::Extend::Init
|
20
24
|
|
21
25
|
class << self
|
22
|
-
|
26
|
+
# init
|
27
|
+
#
|
28
|
+
# @param arg [Hash] options
|
29
|
+
def init(arg)
|
23
30
|
map COMMAND_MAPS
|
24
|
-
sub_command_regist('controller', File.dirname(__FILE__))
|
31
|
+
sub_command_regist('controller', File.dirname(__FILE__), arg)
|
32
|
+
rescue => e
|
33
|
+
error_exit(Idcf::Cli::Error::CliError.new(e.message))
|
25
34
|
end
|
26
35
|
end
|
27
36
|
|
@@ -31,14 +40,14 @@ module Idcf
|
|
31
40
|
end
|
32
41
|
|
33
42
|
desc 'init', 'initialize'
|
34
|
-
options global:
|
43
|
+
options global: true,
|
35
44
|
profile: 'default'
|
36
45
|
|
37
46
|
def init
|
38
47
|
configure
|
39
48
|
update
|
40
49
|
rescue => e
|
41
|
-
|
50
|
+
self.class.error_exit(e)
|
42
51
|
end
|
43
52
|
|
44
53
|
desc 'update', 'list update'
|
@@ -46,25 +55,26 @@ module Idcf
|
|
46
55
|
def update
|
47
56
|
do_update(options)
|
48
57
|
rescue => e
|
49
|
-
|
58
|
+
self.class.error_exit(e)
|
50
59
|
end
|
51
60
|
|
52
61
|
desc 'configure', 'create configure'
|
53
|
-
options global:
|
62
|
+
options global: true,
|
54
63
|
profile: 'default'
|
55
64
|
|
56
65
|
def configure
|
57
|
-
|
66
|
+
init_f = ARGV[0] == 'init'
|
67
|
+
do_configure(options, init_f)
|
58
68
|
rescue => e
|
59
|
-
|
69
|
+
self.class.error_exit(e)
|
60
70
|
end
|
61
71
|
|
62
72
|
desc 'version', 'version string'
|
63
73
|
|
64
74
|
def version
|
65
|
-
puts
|
75
|
+
puts Idcf::Cli::Conf::Const::VERSION_STR
|
66
76
|
rescue => e
|
67
|
-
|
77
|
+
self.class.error_exit(e)
|
68
78
|
end
|
69
79
|
end
|
70
80
|
end
|
@@ -1,8 +1,7 @@
|
|
1
|
+
require 'active_support'
|
2
|
+
require 'active_support/core_ext'
|
3
|
+
require 'idcf/cli/lib/util/name'
|
1
4
|
require 'active_support/core_ext/string/inflections'
|
2
|
-
require 'idcf/cli/lib/convert/formatter/xml_format'
|
3
|
-
require 'idcf/cli/lib/convert/formatter/json_format'
|
4
|
-
require 'idcf/cli/lib/convert/formatter/csv_format'
|
5
|
-
require 'idcf/cli/lib/convert/formatter/table_format'
|
6
5
|
|
7
6
|
module Idcf
|
8
7
|
module Cli
|
@@ -10,6 +9,8 @@ module Idcf
|
|
10
9
|
module Convert
|
11
10
|
# format helper
|
12
11
|
class Helper
|
12
|
+
FILTER_OPTION = [:json_path, :fields].freeze
|
13
|
+
|
13
14
|
# data convert
|
14
15
|
#
|
15
16
|
# @param data [Hash]
|
@@ -17,9 +18,44 @@ module Idcf
|
|
17
18
|
# @param f [String] format
|
18
19
|
# @return String
|
19
20
|
def format(data, err_f, f)
|
20
|
-
|
21
|
-
|
22
|
-
|
21
|
+
cls_load("Formatter::#{f.classify}Format").new.format(data, err_f)
|
22
|
+
end
|
23
|
+
|
24
|
+
# is filter target
|
25
|
+
# @param o [Hash]
|
26
|
+
# @return Boolean
|
27
|
+
def filter_target?(o)
|
28
|
+
FILTER_OPTION.each do |k|
|
29
|
+
return true if !o[k].nil? && !o[k].empty?
|
30
|
+
end
|
31
|
+
false
|
32
|
+
end
|
33
|
+
|
34
|
+
# data convert
|
35
|
+
#
|
36
|
+
# @param data [Hash]
|
37
|
+
# @param o [Hash] format
|
38
|
+
# @param table_flag [Boolean]
|
39
|
+
# @return Hash
|
40
|
+
def filter(data, o, table_flag)
|
41
|
+
return data unless [Hash, Array].include?(data.class)
|
42
|
+
result = data.deep_dup
|
43
|
+
FILTER_OPTION.each do |k|
|
44
|
+
next if o[k].nil? || o[k].empty?
|
45
|
+
fo = {
|
46
|
+
table_flag: table_flag
|
47
|
+
}
|
48
|
+
result = cls_load("Filter::#{k.to_s.classify}Filter").new(fo).filter(result, o[k])
|
49
|
+
end
|
50
|
+
result
|
51
|
+
end
|
52
|
+
|
53
|
+
protected
|
54
|
+
|
55
|
+
def cls_load(path)
|
56
|
+
cls = "#{Idcf::Cli::Lib::Util::Name.namespace(self.class.to_s)}::#{path}"
|
57
|
+
require cls.underscore
|
58
|
+
cls.constantize
|
23
59
|
end
|
24
60
|
end
|
25
61
|
end
|