idcfcloud 0.1.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 (57) hide show
  1. checksums.yaml +7 -0
  2. data/.codeclimate.yml +21 -0
  3. data/.gitignore +56 -0
  4. data/.rubocop.yml +26 -0
  5. data/Gemfile +7 -0
  6. data/LICENSE.txt +21 -0
  7. data/README.md +91 -0
  8. data/Rakefile +8 -0
  9. data/bin/idcfcloud +17 -0
  10. data/config/config_sample.ini +16 -0
  11. data/exe/idcfcloud +4 -0
  12. data/idcfcloud.gemspec +43 -0
  13. data/lib/idcf/cli/conf/conf.yml +10 -0
  14. data/lib/idcf/cli/conf/const.rb +37 -0
  15. data/lib/idcf/cli/conf/service/.gitkeep +0 -0
  16. data/lib/idcf/cli/controller/base.rb +151 -0
  17. data/lib/idcf/cli/controller/extend/command.rb +48 -0
  18. data/lib/idcf/cli/controller/extend/init.rb +17 -0
  19. data/lib/idcf/cli/controller/extend/override.rb +21 -0
  20. data/lib/idcf/cli/controller/extend/search_module.rb +54 -0
  21. data/lib/idcf/cli/controller/ilb.rb +62 -0
  22. data/lib/idcf/cli/controller/include/command.rb +106 -0
  23. data/lib/idcf/cli/controller/include/init.rb +21 -0
  24. data/lib/idcf/cli/controller/include/override.rb +30 -0
  25. data/lib/idcf/cli/controller/include/sdk.rb +83 -0
  26. data/lib/idcf/cli/controller/include/util.rb +101 -0
  27. data/lib/idcf/cli/controller/include/validate.rb +79 -0
  28. data/lib/idcf/cli/controller/your.rb +57 -0
  29. data/lib/idcf/cli/error/cli_error.rb +11 -0
  30. data/lib/idcf/cli/extend/configure.rb +71 -0
  31. data/lib/idcf/cli/extend/init.rb +13 -0
  32. data/lib/idcf/cli/extend/update.rb +109 -0
  33. data/lib/idcf/cli/extend/update_file.rb +53 -0
  34. data/lib/idcf/cli/gem_ext/thor/init_util.rb +92 -0
  35. data/lib/idcf/cli/index.rb +71 -0
  36. data/lib/idcf/cli/lib/convert/formatter/base.rb +21 -0
  37. data/lib/idcf/cli/lib/convert/formatter/csv_format.rb +115 -0
  38. data/lib/idcf/cli/lib/convert/formatter/json_format.rb +19 -0
  39. data/lib/idcf/cli/lib/convert/formatter/table_format.rb +19 -0
  40. data/lib/idcf/cli/lib/convert/formatter/xml_format.rb +21 -0
  41. data/lib/idcf/cli/lib/convert/helper.rb +28 -0
  42. data/lib/idcf/cli/lib/util/ini_conf.rb +67 -0
  43. data/lib/idcf/cli/lib/util/template.rb +29 -0
  44. data/lib/idcf/cli/lib/util/yml_conf.rb +37 -0
  45. data/lib/idcf/cli/service/base.rb +56 -0
  46. data/lib/idcf/cli/service/ilb/add_server_for_protocol.rb +20 -0
  47. data/lib/idcf/cli/service/ilb/base_server_for_protocol.rb +111 -0
  48. data/lib/idcf/cli/service/ilb/delete_server_for_protocol.rb +29 -0
  49. data/lib/idcf/cli/templates/bash/complement.erb +37 -0
  50. data/lib/idcf/cli/templates/zsh/complement.erb +46 -0
  51. data/lib/idcf/cli/validate/custom/init.rb +14 -0
  52. data/lib/idcf/cli/validate/custom/month_check_validator.rb +39 -0
  53. data/lib/idcf/cli/validate/custom/require_relation_validator.rb +50 -0
  54. data/lib/idcf/cli/validate/define/base.rb +36 -0
  55. data/lib/idcf/cli/validate/define/ilb/base.rb +27 -0
  56. data/lib/idcf/cli/version.rb +5 -0
  57. metadata +317 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: be0ca7ba05fc04b552bfce556e6a1da26d6e2a1b
4
+ data.tar.gz: b2683c9799d48cc98e6381d6b857b035b4da4920
5
+ SHA512:
6
+ metadata.gz: f45c4186da2c87c295f0538c34305f1c55239ee57d1b169c5a4f79bfe48ecbbda6dc04c63eea5761259088cb291bff1629c8d5b5947d921ea7fb973d5bf71411
7
+ data.tar.gz: fcb4b65abdf03db3e6d2cb7e42dcc8c5a7df5edab3d7cdf03d69e8e85c48445772c726b674e096c9df353df22a5175384736fc7019894b0cbca65702f2673898
data/.codeclimate.yml ADDED
@@ -0,0 +1,21 @@
1
+ ---
2
+ engines:
3
+ duplication:
4
+ enabled: true
5
+ config:
6
+ languages:
7
+ - ruby
8
+ exclude_paths:
9
+ - 'test/**/*'
10
+ fixme:
11
+ enabled: true
12
+ rubocop:
13
+ enabled: true
14
+ ratings:
15
+ paths:
16
+ - "**.rb"
17
+ exclude_paths:
18
+ - vendor/bundle
19
+ - .idea
20
+ - bin
21
+ - doc
data/.gitignore ADDED
@@ -0,0 +1,56 @@
1
+ *.gem
2
+ *.rbc
3
+ /.config
4
+ /coverage/
5
+ /InstalledFiles
6
+ /pkg/
7
+ /spec/reports/
8
+ /spec/examples.txt
9
+ /test/tmp/
10
+ /test/version_tmp/
11
+ /tmp/
12
+ /output/
13
+ /config/config.ini
14
+ /lib/idcf/cli/conf/service/*.yml
15
+
16
+ .idea/*
17
+ *.iml
18
+
19
+ # Used by dotenv library to load environment variables.
20
+ # .env
21
+
22
+ ## Specific to RubyMotion:
23
+ .dat*
24
+ .repl_history
25
+ build/
26
+ *.bridgesupport
27
+ build-iPhoneOS/
28
+ build-iPhoneSimulator/
29
+
30
+ ## Specific to RubyMotion (use of CocoaPods):
31
+ #
32
+ # We recommend against adding the Pods directory to your .gitignore. However
33
+ # you should judge for yourself, the pros and cons are mentioned at:
34
+ # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control
35
+ #
36
+ # vendor/Pods/
37
+
38
+ ## Documentation cache and generated files:
39
+ /.yardoc/
40
+ /_yardoc/
41
+ /doc/
42
+ /rdoc/
43
+
44
+ ## Environment normalization:
45
+ /.bundle/
46
+ /vendor/bundle
47
+ /lib/bundler/man/
48
+
49
+ # for a library or gem, you might want to ignore these files since the code is
50
+ # intended to run in multiple environments; otherwise, check them in:
51
+ # Gemfile.lock
52
+ # .ruby-version
53
+ # .ruby-gemset
54
+
55
+ # unless supporting rvm < 1.11.0 or doing something fancy, ignore this:
56
+ .rvmrc
data/.rubocop.yml ADDED
@@ -0,0 +1,26 @@
1
+ AllCops:
2
+ TargetRubyVersion: 2.2
3
+ Metrics/BlockLength:
4
+ Exclude:
5
+ - '*.gemspec'
6
+ - 'test/**/*'
7
+ Metrics/LineLength:
8
+ Exclude:
9
+ - 'test/**/*'
10
+ Metrics/MethodLength:
11
+ Exclude:
12
+ - 'test/**/*'
13
+ Metrics/ClassLength:
14
+ Exclude:
15
+ - 'test/**/*'
16
+ Style/IdenticalConditionalBranches:
17
+ Exclude:
18
+ - 'test/**/*'
19
+ Metrics/PerceivedComplexity:
20
+ Exclude:
21
+ - 'test/**/*'
22
+ Metrics/AbcSize:
23
+ Exclude:
24
+ - 'test/**/*'
25
+ LineLength:
26
+ Max: 100
data/Gemfile ADDED
@@ -0,0 +1,7 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in idcfcloud.gemspec
4
+ gemspec
5
+
6
+ gem 'idcf-ilb',
7
+ github: 'idcf/idcf-ilb-ruby', branch: 'master'
data/LICENSE.txt ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2017 IDC Frontier Inc.
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,91 @@
1
+ # idcfcloud-cli
2
+
3
+ ## Installation
4
+
5
+ Note: requires Ruby 2.2.7 or higher.
6
+
7
+ Carry out the next command to initialize.
8
+
9
+ ```
10
+ bin/idcfcloud init
11
+ ```
12
+
13
+ If you want each user to have their own configuration file, use the "--no-global" option and have the file created in the following:
14
+
15
+ ```
16
+ ~/.idcfcloud/config.ini
17
+ ```
18
+
19
+ Install idcfcloud-cli by using the following command:
20
+
21
+ ```
22
+ $ gem install idcfcloud
23
+ ```
24
+ or
25
+ ```
26
+ $ git clone [idcfcloud]
27
+ $ bundle install --path vendor/bundle
28
+ ```
29
+
30
+ ## Usage
31
+
32
+ ```
33
+ $ bin/idcfcloud <serviceName> <command> [attributes] [option]
34
+ ```
35
+
36
+ If you want to set more than one attribute, use the json form.
37
+
38
+ ```ex)
39
+ '{"ipaddress": "0.0.0.0", "port": 80}'
40
+ ```
41
+
42
+ ## ServiceName
43
+ [ILB](#ilb)
44
+
45
+ [Your](#your)
46
+
47
+ #### <a name="ilb"></a>ILB
48
+
49
+ https://github.com/idcf/idcf-ilb-ruby
50
+
51
+ ##### ILB Extend Commands
52
+
53
+ add server
54
+
55
+ ``` code
56
+ bin/idcfcloud ilb add_server_for_protocol <lb_id> <protocol> <protocol_port> <data> [option]
57
+ ```
58
+
59
+ | data | type | example | note |
60
+ |:---|:---|:---|:---|
61
+ | ipaddress | String | 0.0.0.0 | no cidr |
62
+ | port | Numeric | 80 | |
63
+
64
+ delete server
65
+
66
+ ``` code
67
+ bin/idcfcloud ilb delete_server_for_protocol <lb_id> <protocol> <protocol_port> <data> [option]
68
+ ```
69
+
70
+ #### <a name="your"></a>Your
71
+
72
+ http://docs.idcf.jp/cloud/billing/
73
+
74
+
75
+ ## Development
76
+
77
+ Running the following test code is possible, but not recommended nor supported. Run only a code of a target.
78
+
79
+ ```code
80
+ bundle exec ruby test/run_test.rb idcf/cli/controller/test_billing.rb
81
+ ```
82
+
83
+ In order to avoid collapsed setting in ILB, make sure you understand how things work before running a code.
84
+
85
+ ## Contributing
86
+
87
+ 1. Fork it ( https://github.com/idcf/idcfcloud-cli/fork )
88
+ 2. Create your feature branch (git checkout -b my-new-feature)
89
+ 3. Commit your changes (git commit -am 'Add some feature')
90
+ 4. Push the branch (git push origin my-new-feature)
91
+ 5. Create a new Pull Request
data/Rakefile ADDED
@@ -0,0 +1,8 @@
1
+ require 'bundler/gem_tasks'
2
+
3
+ task default: :test
4
+
5
+ desc 'Run tests'
6
+ task :test do
7
+ ruby('test/run_test.rb')
8
+ end
data/bin/idcfcloud ADDED
@@ -0,0 +1,17 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+ #
4
+ # This file was generated by Bundler.
5
+ #
6
+ # The application 'idcfcloud' is installed as part of a gem, and
7
+ # this file is here to facilitate running it.
8
+ #
9
+
10
+ require "pathname"
11
+ ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile",
12
+ Pathname.new(__FILE__).realpath)
13
+
14
+ require "rubygems"
15
+ require "bundler/setup"
16
+
17
+ load Gem.bin_path("idcfcloud", "idcfcloud")
@@ -0,0 +1,16 @@
1
+ [default]
2
+ api_key = [key]
3
+ secret_key = [secret_key]
4
+ obst_api_key = [key]
5
+ obst_secret_key = [secret_key]
6
+
7
+ ;override default output
8
+ ;output = xml
9
+ ;override host
10
+ ;ilb.v1.host.jp-east = [domain]
11
+
12
+ ;It's possible to add a section and overwrite partially from default.
13
+ [test]
14
+ api_key = [key]
15
+ secret_key = [secret_key]
16
+
data/exe/idcfcloud ADDED
@@ -0,0 +1,4 @@
1
+ require 'idcf/cli/index'
2
+
3
+ Idcf::Cli::Index.init
4
+ Idcf::Cli::Index.start(ARGV)
data/idcfcloud.gemspec ADDED
@@ -0,0 +1,43 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'idcf/cli/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = 'idcfcloud'
8
+ spec.version = Idcf::Cli::VERSION
9
+ spec.authors = ['IDC Frontier Inc.']
10
+ spec.email = []
11
+
12
+ spec.summary = 'IDCF Cli tools'
13
+ spec.description = 'IDCF Cli'
14
+ spec.homepage = 'https://www.idcfcloud.jp'
15
+ spec.license = 'MIT'
16
+
17
+ spec.post_install_message = 'Please carry out \'init\' command.'
18
+
19
+ spec.files = `git ls-files -z`.split("\x0").reject do |f|
20
+ f.match(%r{^(test|spec|features)/})
21
+ end
22
+
23
+ spec.bindir = 'exe'
24
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
25
+ spec.require_paths = ['lib']
26
+
27
+ spec.add_development_dependency 'bundler', '~> 1.14'
28
+ spec.add_development_dependency 'rake', '~> 10.0'
29
+
30
+ spec.add_dependency 'test-unit', '~> 3.2', '>= 3.2.5'
31
+ spec.add_dependency 'test-unit-notify', '~> 1.0', '>= 1.0.4'
32
+
33
+ spec.add_dependency 'activerecord', '~> 4.2', '>= 4.2.3'
34
+ spec.add_dependency 'activesupport', '~> 4.2', '>= 4.2.3'
35
+ spec.add_dependency 'inifile', '~> 3.0', '>= 3.0.0'
36
+ spec.add_dependency 'thor', '~> 0.19.4'
37
+ spec.add_dependency 'builder', '~> 3.1'
38
+ spec.add_dependency 'kosi', '~> 1.0', '>= 1.0.0'
39
+
40
+ spec.add_runtime_dependency 'idcf-your'
41
+ spec.add_runtime_dependency 'idcf-faraday_middleware'
42
+ spec.add_runtime_dependency 'idcf-ilb'
43
+ end
@@ -0,0 +1,10 @@
1
+ output: json #json xml csv table
2
+ ilb:
3
+ v1:
4
+ host:
5
+ jp-east: ilb.jp-east.idcfcloud.com
6
+ jp-east-2: ilb.jp-east-2.idcfcloud.com
7
+ jp-west: ilb.jp-west.idcfcloud.com
8
+ your:
9
+ v1:
10
+ host: your.idcfcloud.com
@@ -0,0 +1,37 @@
1
+ module Idcf
2
+ module Cli
3
+ module Conf
4
+ # const
5
+ class Const
6
+ dir_path = File.dirname(__FILE__)
7
+ BASE_PATH = File.expand_path("#{dir_path}/../../../")
8
+ LOCAL_ERROR_PREFIX = '[idcfcli]'.freeze
9
+ HEADERS = {
10
+ 'User-Agent': "IDCF CLI v#{Idcf::Cli::VERSION}"
11
+ }.freeze
12
+ VALIDATOR_DIR_PATH = 'idcf/cli/validate/define'.freeze
13
+ CODE_CONF_PATH = "#{BASE_PATH}/idcf/cli/conf/conf.yml".freeze
14
+ USER_CONF_PATH = '~/.idcfcloud/config.ini'.freeze
15
+ USER_CONF_GLOBAL = "#{BASE_PATH}/../config/config.ini".freeze
16
+ REGIONS = %w(jp-east jp-east-2 jp-west).freeze
17
+ USER_CONF_ITEMS = {
18
+ api_key: nil,
19
+ secret_key: nil,
20
+ region: REGIONS
21
+ }.freeze
22
+ CMD_FILE_DIR = "#{BASE_PATH}/idcf/cli/conf/service".freeze
23
+ CMD_FILE_EXT = 'yml'.freeze
24
+ SERVICE_PATH = 'idcf/cli/service'.freeze
25
+ TEMPLATE_DIR = "#{BASE_PATH}/idcf/cli/templates".freeze
26
+ OUT_DIR = "#{BASE_PATH}/../output".freeze
27
+ COMP_NOTIFICATION = <<EOT.freeze
28
+ please write in
29
+ ~/.bash_profile
30
+ source %s
31
+ ~/.zprofile
32
+ source %s
33
+ EOT
34
+ end
35
+ end
36
+ end
37
+ end
File without changes
@@ -0,0 +1,151 @@
1
+ require 'thor'
2
+ require 'json'
3
+ require 'active_support'
4
+ require 'active_support/core_ext'
5
+ require 'idcf/cli/conf/const'
6
+ require 'idcf/cli/lib/util/ini_conf'
7
+ require 'idcf/cli/lib/util/yml_conf'
8
+ require 'active_record'
9
+ require 'idcf/cli/lib/convert/helper'
10
+ require_relative './extend/init'
11
+ require_relative './include/init'
12
+
13
+ module Idcf
14
+ module Cli
15
+ module Controller
16
+ # Controller Base
17
+ class Base < Thor
18
+ class_option :output,
19
+ type: :string,
20
+ aliases: '-o',
21
+ desc: 'output type: table/json/xml/csv'
22
+ class_option :profile,
23
+ type: :string,
24
+ desc: 'use profile'
25
+ class_option :api_key,
26
+ type: :string,
27
+ desc: 'api key'
28
+ class_option :secret_key,
29
+ type: :string,
30
+ desc: 'secret key'
31
+ class_option :no_ssl,
32
+ desc: 'not use ssl'
33
+ class_option :no_vssl,
34
+ desc: 'not use verify ssl'
35
+
36
+ attr_reader :config, :code_conf, :cmd, :m_classes
37
+
38
+ extend Idcf::Cli::Controller::Extend::Init
39
+ include Idcf::Cli::Controller::Include::Init
40
+
41
+ class << self
42
+ def init
43
+ fn = to_s.underscore.split('/').pop
44
+ dir = Idcf::Cli::Conf::Const::CMD_FILE_DIR
45
+ ext = Idcf::Cli::Conf::Const::CMD_FILE_EXT
46
+ path = "#{dir}/#{fn}.#{ext}"
47
+
48
+ if File.exist?(path)
49
+ cf = Idcf::Cli::Lib::Util::YmlConf.new(path)
50
+ register_sdk_method! cf.find('')
51
+ end
52
+
53
+ register_service_method!
54
+ end
55
+
56
+ # regist method
57
+ #
58
+ # @param methods [Hash]
59
+ def register_sdk_method!(methods)
60
+ return unless methods
61
+ methods.each do |command, s|
62
+ register_method!(command, s[:params], s[:options])
63
+ end
64
+ end
65
+
66
+ # regist service method
67
+ def register_service_method!
68
+ make_module_classes.each do |cn, c|
69
+ register_method!(cn, c.params, c.options)
70
+ end
71
+ end
72
+ end
73
+
74
+ protected
75
+
76
+ def execute(cmd, *args)
77
+ data = run(cmd, args)
78
+ puts make_result_str(data, false, options)
79
+ rescue => e
80
+ STDERR.puts e.message
81
+ exit 1
82
+ end
83
+
84
+ def run(cmd, args)
85
+ @cmd = cmd
86
+ check_params(self.class.make_module_classes, cmd, *args)
87
+ o = options
88
+ data = do_validate(o)
89
+ if data
90
+ STDERR.puts data[:message].flatten
91
+ exit 1
92
+ end
93
+ data = make_result_data(do_command(cmd, *args, o), o)
94
+ data
95
+ end
96
+
97
+ def do_command(cmd, *args, o)
98
+ m_class = self.class.search_module_class(cmd)
99
+
100
+ arg = convert_arg_json(*args)
101
+ client = make_client(o)
102
+ return m_class.new.do(client, *arg, o) unless m_class.nil?
103
+ do_sdk(client, cmd, *arg, o)
104
+ end
105
+
106
+ # make response base data
107
+ #
108
+ # @return Hash
109
+ def make_base_response
110
+ {
111
+ status: 200,
112
+ message: '',
113
+ data: []
114
+ }
115
+ end
116
+
117
+ # make error result
118
+ #
119
+ # @param error [Exception]
120
+ # @return Hash
121
+ def make_error(error)
122
+ error.to_s =~ /status code: ?(\d+)/
123
+ match = Regexp.last_match(1)
124
+ result = make_base_response
125
+ result[:status] = match ? match.to_i : 400
126
+ result[:message] = error.message
127
+ result
128
+ end
129
+
130
+ def make_result_data(data, o)
131
+ result = data
132
+ format = output_format(o, '')
133
+ if format == 'csv' || format == 'table'
134
+ result = make_table_data(data)
135
+ else
136
+ result = make_base_response
137
+ result[:data] = data
138
+ end
139
+ result
140
+ end
141
+
142
+ # table data
143
+ # @param data [Hash]
144
+ # @return Hash
145
+ def make_table_data(data)
146
+ data
147
+ end
148
+ end
149
+ end
150
+ end
151
+ end
@@ -0,0 +1,48 @@
1
+ require 'idcf/cli/conf/const'
2
+ module Idcf
3
+ module Cli
4
+ module Controller
5
+ module Extend
6
+ # command
7
+ module Command
8
+ def register_method!(name, params, options)
9
+ register_method_option! options
10
+ cp = make_param_s params
11
+ desc "#{name} #{cp}", ''
12
+ define_method name.to_sym do |*args|
13
+ execute(__method__, *args)
14
+ end
15
+ end
16
+
17
+ # make param string
18
+ #
19
+ # @param params[Array]
20
+ # @return String
21
+ def make_param_s(params)
22
+ cp = []
23
+ return '' if params.nil?
24
+ params.each do |param|
25
+ f = param[:arg_type].to_s == 'req' ? '<%s>' : '[%s]'
26
+ cp << format(f, param[:name])
27
+ end
28
+ cp.join(' ')
29
+ end
30
+
31
+ # regist method option
32
+ #
33
+ # @param values [Hash] name => desc
34
+ def register_method_option!(values)
35
+ return if values.nil?
36
+ values.each do |opn, op|
37
+ option = {}
38
+ op.each do |ok, ov|
39
+ option[ok.to_sym] = ov
40
+ end
41
+ method_option opn, option
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,17 @@
1
+ require_relative './override'
2
+ require_relative './search_module'
3
+ require_relative './command'
4
+ module Idcf
5
+ module Cli
6
+ module Controller
7
+ module Extend
8
+ # init load
9
+ module Init
10
+ include Override
11
+ include SearchModule
12
+ include Command
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,21 @@
1
+ module Idcf
2
+ module Cli
3
+ module Controller
4
+ module Extend
5
+ # override methods
6
+ module Override
7
+ def description
8
+ raise Idcf::Cli::CliError, 'Require override'
9
+ end
10
+
11
+ # blank client
12
+ #
13
+ # @return Mixed
14
+ def make_blank_client
15
+ # blank client
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,54 @@
1
+ require 'idcf/cli/conf/const'
2
+ module Idcf
3
+ module Cli
4
+ module Controller
5
+ module Extend
6
+ # model class search
7
+ module SearchModule
8
+ # search module class
9
+ #
10
+ # @param class_mame [String]
11
+ # @return Mixed
12
+ def search_module_class(module_name)
13
+ make_module_classes.each do |k, v|
14
+ return v if module_name.to_s == k
15
+ end
16
+ nil
17
+ end
18
+
19
+ # make module require and class list
20
+ #
21
+ # @return Hash
22
+ def make_module_classes
23
+ return @m_classes if @m_classes
24
+ result = {}
25
+ make_service_paths.each do |fn, path|
26
+ require path
27
+ result[fn] = path.classify.constantize
28
+ end
29
+
30
+ @m_classes = result
31
+ end
32
+
33
+ def make_service_paths
34
+ s_name = make_model_name
35
+ base_path = Idcf::Cli::Conf::Const::BASE_PATH
36
+ s_path = "#{Idcf::Cli::Conf::Const::SERVICE_PATH}/#{s_name}"
37
+ {}.tap do |result|
38
+ Dir.glob("#{base_path}/#{s_path}/*.rb").each do |f|
39
+ fn = File.basename(f, '.rb')
40
+ result[fn] = "#{s_path}/#{fn}" unless fn =~ /^base_*/
41
+ end
42
+ end
43
+ end
44
+
45
+ def make_model_name
46
+ list = to_s.split('::')
47
+ list.shift(3)
48
+ list.join('/').underscore
49
+ end
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end