mtncloud-cli 1.0.0 → 1.0.1

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.
@@ -1,6 +1,6 @@
1
1
 
2
2
  module MtnCloud
3
3
  module Cli
4
- VERSION = "1.0.0"
4
+ VERSION = "1.0.1"
5
5
  end
6
6
  end
@@ -1,109 +1,109 @@
1
- # Provide deep_merge.
2
- # Borrowed from rails active_support
3
- # https://github.com/rails/rails/blob/master/activesupport/lib/active_support/core_ext/hash/deep_merge.rb
4
- #
5
- class Hash
6
- # Returns a new hash with +self+ and +other_hash+ merged recursively.
7
- #
8
- # h1 = { a: true, b: { c: [1, 2, 3] } }
9
- # h2 = { a: false, b: { x: [3, 4, 5] } }
10
- #
11
- # h1.deep_merge(h2) # => { a: false, b: { c: [1, 2, 3], x: [3, 4, 5] } }
12
- #
13
- # Like with Hash#merge in the standard library, a block can be provided
14
- # to merge values:
15
- #
16
- # h1 = { a: 100, b: 200, c: { c1: 100 } }
17
- # h2 = { b: 250, c: { c1: 200 } }
18
- # h1.deep_merge(h2) { |key, this_val, other_val| this_val + other_val }
19
- # # => { a: 100, b: 450, c: { c1: 300 } }
20
- def deep_merge(other_hash, &block)
21
- dup.deep_merge!(other_hash, &block)
22
- end
23
-
24
- # Same as +deep_merge+, but modifies +self+.
25
- def deep_merge!(other_hash, &block)
26
- other_hash.each_pair do |current_key, other_value|
27
- this_value = self[current_key]
28
-
29
- self[current_key] = if this_value.is_a?(Hash) && other_value.is_a?(Hash)
30
- this_value.deep_merge(other_value, &block)
31
- else
32
- if block_given? && key?(current_key)
33
- block.call(current_key, this_value, other_value)
34
- else
35
- other_value
36
- end
37
- end
38
- end
39
-
40
- self
41
- end
42
-
43
- def deep_compact!
44
- self.each_pair do |k, v|
45
- if v.is_a?(Hash)
46
- self[k].deep_compact!
47
- elsif v.is_a?(Array)
48
- self[k].each do |it|
49
- if it.is_a?(Hash)
50
- it.deep_compact!
51
- elsif self[k] == nil || self[k] == ''
52
- # meh, preserve 'empty' array elements
53
- end
54
- end
55
- else
56
- if self[k] == nil || self[k] == ''
57
- self.delete(k)
58
- end
59
- end
60
- end
61
- self
62
- end
63
-
64
- # convert recognizable strings to booleans
65
- def booleanize!(true_values=['true','on'], false_values=['false','off'])
66
- self.each_pair do |k, v|
67
- if v.is_a?(Hash)
68
- self[k].booleanize!
69
- elsif v.is_a?(Array)
70
- self[k].each do |it|
71
- if it.is_a?(Hash)
72
- it.booleanize!
73
- elsif self[k] == nil || self[k] == ''
74
- # meh, preserve 'empty' array elements
75
- end
76
- end
77
- else
78
- if true_values.include?(v)
79
- self[k] = true
80
- elsif false_values.include?(v)
81
- self[k] = false
82
- end
83
- end
84
- end
85
- self
86
- end
87
-
88
- def upcase_keys!
89
- self.keys.each do |k|
90
- self[k.to_s.upcase] = self.delete(k)
91
- end
92
- self
93
- end
94
-
95
- def downcase_keys!
96
- self.keys.each do |k|
97
- self[k.to_s.downcase] = self.delete(k)
98
- end
99
- self
100
- end
101
-
102
- def capitalize_keys!
103
- self.keys.each do |k|
104
- self[k.to_s.capitalize] = self.delete(k)
105
- end
106
- self
107
- end
108
-
109
- end
1
+ # Provide deep_merge.
2
+ # Borrowed from rails active_support
3
+ # https://github.com/rails/rails/blob/master/activesupport/lib/active_support/core_ext/hash/deep_merge.rb
4
+ #
5
+ class Hash
6
+ # Returns a new hash with +self+ and +other_hash+ merged recursively.
7
+ #
8
+ # h1 = { a: true, b: { c: [1, 2, 3] } }
9
+ # h2 = { a: false, b: { x: [3, 4, 5] } }
10
+ #
11
+ # h1.deep_merge(h2) # => { a: false, b: { c: [1, 2, 3], x: [3, 4, 5] } }
12
+ #
13
+ # Like with Hash#merge in the standard library, a block can be provided
14
+ # to merge values:
15
+ #
16
+ # h1 = { a: 100, b: 200, c: { c1: 100 } }
17
+ # h2 = { b: 250, c: { c1: 200 } }
18
+ # h1.deep_merge(h2) { |key, this_val, other_val| this_val + other_val }
19
+ # # => { a: 100, b: 450, c: { c1: 300 } }
20
+ def deep_merge(other_hash, &block)
21
+ dup.deep_merge!(other_hash, &block)
22
+ end
23
+
24
+ # Same as +deep_merge+, but modifies +self+.
25
+ def deep_merge!(other_hash, &block)
26
+ other_hash.each_pair do |current_key, other_value|
27
+ this_value = self[current_key]
28
+
29
+ self[current_key] = if this_value.is_a?(Hash) && other_value.is_a?(Hash)
30
+ this_value.deep_merge(other_value, &block)
31
+ else
32
+ if block_given? && key?(current_key)
33
+ block.call(current_key, this_value, other_value)
34
+ else
35
+ other_value
36
+ end
37
+ end
38
+ end
39
+
40
+ self
41
+ end
42
+
43
+ def deep_compact!
44
+ self.each_pair do |k, v|
45
+ if v.is_a?(Hash)
46
+ self[k].deep_compact!
47
+ elsif v.is_a?(Array)
48
+ self[k].each do |it|
49
+ if it.is_a?(Hash)
50
+ it.deep_compact!
51
+ elsif self[k] == nil || self[k] == ''
52
+ # meh, preserve 'empty' array elements
53
+ end
54
+ end
55
+ else
56
+ if self[k] == nil || self[k] == ''
57
+ self.delete(k)
58
+ end
59
+ end
60
+ end
61
+ self
62
+ end
63
+
64
+ # convert recognizable strings to booleans
65
+ def booleanize!(true_values=['true','on'], false_values=['false','off'])
66
+ self.each_pair do |k, v|
67
+ if v.is_a?(Hash)
68
+ self[k].booleanize!
69
+ elsif v.is_a?(Array)
70
+ self[k].each do |it|
71
+ if it.is_a?(Hash)
72
+ it.booleanize!
73
+ elsif self[k] == nil || self[k] == ''
74
+ # meh, preserve 'empty' array elements
75
+ end
76
+ end
77
+ else
78
+ if true_values.include?(v)
79
+ self[k] = true
80
+ elsif false_values.include?(v)
81
+ self[k] = false
82
+ end
83
+ end
84
+ end
85
+ self
86
+ end
87
+
88
+ def upcase_keys!
89
+ self.keys.each do |k|
90
+ self[k.to_s.upcase] = self.delete(k)
91
+ end
92
+ self
93
+ end
94
+
95
+ def downcase_keys!
96
+ self.keys.each do |k|
97
+ self[k.to_s.downcase] = self.delete(k)
98
+ end
99
+ self
100
+ end
101
+
102
+ def capitalize_keys!
103
+ self.keys.each do |k|
104
+ self[k.to_s.capitalize] = self.delete(k)
105
+ end
106
+ self
107
+ end
108
+
109
+ end
@@ -1,5 +1,5 @@
1
- class NilClass
2
- def empty?
3
- true
4
- end
5
- end
1
+ class NilClass
2
+ def empty?
3
+ true
4
+ end
5
+ end
@@ -1,37 +1,37 @@
1
- # this does some monkey patching of third party RestClient
2
- # to modify the logging output a bit
3
- require 'rest-client'
4
-
5
- module RestClient
6
- class Request
7
-
8
- alias_method :original_log_request, :log_request
9
- def log_request
10
- begin
11
- return unless RestClient.log
12
- out = []
13
- # out << "RestClient.#{method} #{redacted_url.inspect}"
14
- out << "#{method.to_s.upcase} #{redacted_url.inspect}"
15
- out << payload.short_inspect if payload
16
- out << processed_headers.to_a.sort.map { |(k, v)| [k.inspect, v.inspect].join("=>") }.join(", ")
17
- RestClient.log << out.join(', ') + "\n"
18
- rescue
19
- # something went wrong, wrong gem version maybe...above is from rest-client 2.0.2
20
- # do it the old way
21
- original_log_request()
22
- end
23
- end
24
- =begin
25
- def log_response res
26
- return unless RestClient.log
27
- size = if @raw_response
28
- File.size(@tf.path)
29
- else
30
- res.body.nil? ? 0 : res.body.size
31
- end
32
-
33
- RestClient.log << "# => #{res.code} #{res.class.to_s.gsub(/^Net::HTTP/, '')} | #{(res['Content-type'] || '').gsub(/;.*$/, '')} #{size} bytes\n"
34
- end
35
- =end
36
- end
37
- end
1
+ # this does some monkey patching of third party RestClient
2
+ # to modify the logging output a bit
3
+ require 'rest-client'
4
+
5
+ module RestClient
6
+ class Request
7
+
8
+ alias_method :original_log_request, :log_request
9
+ def log_request
10
+ begin
11
+ return unless RestClient.log
12
+ out = []
13
+ # out << "RestClient.#{method} #{redacted_url.inspect}"
14
+ out << "#{method.to_s.upcase} #{redacted_url.inspect}"
15
+ out << payload.short_inspect if payload
16
+ out << processed_headers.to_a.sort.map { |(k, v)| [k.inspect, v.inspect].join("=>") }.join(", ")
17
+ RestClient.log << out.join(', ') + "\n"
18
+ rescue
19
+ # something went wrong, wrong gem version maybe...above is from rest-client 2.0.2
20
+ # do it the old way
21
+ original_log_request()
22
+ end
23
+ end
24
+ =begin
25
+ def log_response res
26
+ return unless RestClient.log
27
+ size = if @raw_response
28
+ File.size(@tf.path)
29
+ else
30
+ res.body.nil? ? 0 : res.body.size
31
+ end
32
+
33
+ RestClient.log << "# => #{res.code} #{res.class.to_s.gsub(/^Net::HTTP/, '')} | #{(res['Content-type'] || '').gsub(/;.*$/, '')} #{size} bytes\n"
34
+ end
35
+ =end
36
+ end
37
+ end
@@ -1,66 +1,66 @@
1
- class String
2
-
3
- def pluralize
4
- # hacky version of this until we want to depend on ActiveSupport
5
- value = self.dup
6
- if value == ""
7
- value
8
- elsif value[-1].chr == "y"
9
- value[0..-2] + "ies"
10
- elsif value[-1].chr == "s"
11
- if value[-2..-1] == "ss"
12
- value + "es"
13
- else
14
- value
15
- end
16
- else
17
- value + "s"
18
- end
19
- end
20
-
21
- def singularize
22
- # hacky version of this until we want to depend on ActiveSupport
23
- value = self.dup
24
- if value == ""
25
- value
26
- elsif value.size > 3 && value[-3..-1] == "ies"
27
- value[0..-4] + "y"
28
- elsif value.size > 2 && value[-3..-1] == "ses"
29
- value[0..-2]
30
- elsif value[-1] == "s"
31
- value[0..-2]
32
- else
33
- value
34
- end
35
- end
36
-
37
- def underscore
38
- value = self.dup
39
- value.gsub!(/::/, '/')
40
- value.gsub!(/([A-Z]+)([A-Z][a-z])/,'\1_\2')
41
- value.gsub!(/([a-z\d])([A-Z])/,'\1_\2')
42
- value.tr!("-", "_")
43
- value.tr!(" ", "_")
44
- value.downcase!
45
- value
46
- end
47
-
48
- def camelcase
49
- value = self.underscore.gsub(/\_([a-z])/) do $1.upcase end
50
- value = value[0, 1].downcase + value[1..-1]
51
- value
52
- end
53
-
54
- def upcamelcase
55
- self.camelcase.capitalize
56
- end
57
-
58
- def titleize
59
- self.underscore.split("_").map(&:capitalize).join(" ")
60
- end
61
-
62
- def dasherize
63
- self.underscore.gsub("_", "-")
64
- end
65
-
66
- end
1
+ class String
2
+
3
+ def pluralize
4
+ # hacky version of this until we want to depend on ActiveSupport
5
+ value = self.dup
6
+ if value == ""
7
+ value
8
+ elsif value[-1].chr == "y"
9
+ value[0..-2] + "ies"
10
+ elsif value[-1].chr == "s"
11
+ if value[-2..-1] == "ss"
12
+ value + "es"
13
+ else
14
+ value
15
+ end
16
+ else
17
+ value + "s"
18
+ end
19
+ end
20
+
21
+ def singularize
22
+ # hacky version of this until we want to depend on ActiveSupport
23
+ value = self.dup
24
+ if value == ""
25
+ value
26
+ elsif value.size > 3 && value[-3..-1] == "ies"
27
+ value[0..-4] + "y"
28
+ elsif value.size > 2 && value[-3..-1] == "ses"
29
+ value[0..-2]
30
+ elsif value[-1] == "s"
31
+ value[0..-2]
32
+ else
33
+ value
34
+ end
35
+ end
36
+
37
+ def underscore
38
+ value = self.dup
39
+ value.gsub!(/::/, '/')
40
+ value.gsub!(/([A-Z]+)([A-Z][a-z])/,'\1_\2')
41
+ value.gsub!(/([a-z\d])([A-Z])/,'\1_\2')
42
+ value.tr!("-", "_")
43
+ value.tr!(" ", "_")
44
+ value.downcase!
45
+ value
46
+ end
47
+
48
+ def camelcase
49
+ value = self.underscore.gsub(/\_([a-z])/) do $1.upcase end
50
+ value = value[0, 1].downcase + value[1..-1]
51
+ value
52
+ end
53
+
54
+ def upcamelcase
55
+ self.camelcase.capitalize
56
+ end
57
+
58
+ def titleize
59
+ self.underscore.split("_").map(&:capitalize).join(" ")
60
+ end
61
+
62
+ def dasherize
63
+ self.underscore.gsub("_", "-")
64
+ end
65
+
66
+ end
data/mtncloud-cli.gemspec CHANGED
@@ -1,38 +1,38 @@
1
- # coding: utf-8
2
- lib = File.expand_path('../lib', __FILE__)
3
- $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
- require 'mtncloud/cli/version'
5
-
6
- Gem::Specification.new do |spec|
7
- spec.name = "mtncloud-cli"
8
- spec.version = MtnCloud::Cli::VERSION
9
- spec.authors = ["Joshua Ukpozi", "Joseph Henry", "MTN Cloud"]
10
- spec.summary = "Provides CLI Interface to MTN Cloud"
11
- spec.description = "Cloud application management & orchestration CLI for MTN Cloud. Easily manage and orchestrate VMs on private or public infrastructure and containerized architectures."
12
- spec.license = "MIT"
13
-
14
- spec.files = `git ls-files -z`.split("\x0")
15
-
16
- spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
17
- spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
18
- spec.require_paths = ["lib"]
19
-
20
- spec.required_ruby_version = '>= 2.5.1' # according to http.rb doc
21
- spec.add_dependency "tins", '~> 1.43.0'
22
- spec.add_dependency "public_suffix", "4.0.7" # https://github.com/weppos/publicsuffix-ruby/blob/main/CHANGELOG.md
23
- spec.add_dependency "ffi", "1.15.5" # Fix for mismatched deps: https://github.com/ffi/ffi/issues/1103
24
- spec.add_development_dependency "bundler", ">= 2.2"
25
- spec.add_development_dependency "rake"
26
- spec.add_dependency 'term-ansicolor', '~> 1.3.0'
27
- spec.add_dependency "rest-client", "2.0.2"
28
- spec.add_dependency 'multipart-post'
29
- spec.add_dependency "filesize"
30
- spec.add_dependency 'mime-types'
31
- spec.add_dependency "http", "5.3.1"
32
- spec.add_dependency "rubyzip", '~> 2.3.2'
33
- spec.add_dependency "test-unit"
34
- # No longer part of Ruby's default libraries as of Ruby 4.0
35
- spec.add_dependency "readline"
36
- spec.add_dependency "logger"
37
- spec.add_dependency "ostruct"
38
- end
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'mtncloud/cli/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "mtncloud-cli"
8
+ spec.version = MtnCloud::Cli::VERSION
9
+ spec.authors = ["Joseph Henry", "Joshua Ukpozi", "MTN Cloud"]
10
+ spec.summary = "Provides CLI Interface to MTN Cloud"
11
+ spec.description = "Cloud application management & orchestration CLI for MTN Cloud. Easily manage and orchestrate VMs on private or public infrastructure and containerized architectures."
12
+ spec.license = "MIT"
13
+
14
+ spec.files = `git ls-files -z`.split("\x0")
15
+
16
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
17
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
18
+ spec.require_paths = ["lib"]
19
+
20
+ spec.required_ruby_version = '>= 2.5.1' # according to http.rb doc
21
+ spec.add_dependency "tins", '~> 1.43.0'
22
+ spec.add_dependency "public_suffix", "4.0.7" # https://github.com/weppos/publicsuffix-ruby/blob/main/CHANGELOG.md
23
+ spec.add_dependency "ffi", "1.15.5" # Fix for mismatched deps: https://github.com/ffi/ffi/issues/1103
24
+ spec.add_development_dependency "bundler", ">= 2.2"
25
+ spec.add_development_dependency "rake"
26
+ spec.add_dependency 'term-ansicolor', '~> 1.3.0'
27
+ spec.add_dependency "rest-client", "2.0.2"
28
+ spec.add_dependency 'multipart-post'
29
+ spec.add_dependency "filesize"
30
+ spec.add_dependency 'mime-types'
31
+ spec.add_dependency "http", "5.3.1"
32
+ spec.add_dependency "rubyzip", '~> 2.3.2'
33
+ spec.add_dependency "test-unit"
34
+ # No longer part of Ruby's default libraries as of Ruby 4.0
35
+ spec.add_dependency "readline"
36
+ spec.add_dependency "logger"
37
+ spec.add_dependency "ostruct"
38
+ end
metadata CHANGED
@@ -1,15 +1,16 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mtncloud-cli
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
- - Joshua Ukpozi
8
7
  - Joseph Henry
8
+ - Joshua Ukpozi
9
9
  - MTN Cloud
10
+ autorequire:
10
11
  bindir: bin
11
12
  cert_chain: []
12
- date: 1980-01-02 00:00:00.000000000 Z
13
+ date: 2026-11-02 00:00:00.000000000 Z
13
14
  dependencies:
14
15
  - !ruby/object:Gem::Dependency
15
16
  name: tins
@@ -238,6 +239,7 @@ dependencies:
238
239
  description: Cloud application management & orchestration CLI for MTN Cloud. Easily
239
240
  manage and orchestrate VMs on private or public infrastructure and containerized
240
241
  architectures.
242
+ email:
241
243
  executables:
242
244
  - mcs
243
245
  - mtncloud
@@ -741,9 +743,11 @@ files:
741
743
  - test/test_case.rb
742
744
  - test/test_config.rb
743
745
  - test/test_data_helper.rb
746
+ homepage:
744
747
  licenses:
745
748
  - MIT
746
749
  metadata: {}
750
+ post_install_message:
747
751
  rdoc_options: []
748
752
  require_paths:
749
753
  - lib
@@ -758,7 +762,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
758
762
  - !ruby/object:Gem::Version
759
763
  version: '0'
760
764
  requirements: []
761
- rubygems_version: 4.0.10
765
+ rubygems_version: 3.5.22
766
+ signing_key:
762
767
  specification_version: 4
763
768
  summary: Provides CLI Interface to MTN Cloud
764
769
  test_files: