ec2ctl 0.7.9 → 0.8.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.
@@ -0,0 +1,179 @@
1
+ require "logger"
2
+ require "forwardable"
3
+
4
+ module EC2Ctl
5
+ class Logger
6
+ extend Forwardable
7
+
8
+ InvalidOutputFormat = Class.new RuntimeError
9
+
10
+ VALID_FORMATS = %w(json yaml table markdown backlog)
11
+
12
+ def initialize(
13
+ output_format: :json,
14
+ null_output: false,
15
+ pretty: false,
16
+ verbose: false,
17
+ std_io: STDOUT,
18
+ err_io: STDERR
19
+ )
20
+ @output_format = output_format
21
+ @null_output = null_output
22
+ @std_logger = ::Logger.new std_io
23
+ @err_logger = ::Logger.new err_io
24
+
25
+ @std_logger.level = verbose ? ::Logger::DEBUG : ::Logger::INFO
26
+ @err_logger.level = verbose ? ::Logger::DEBUG : ::Logger::INFO
27
+
28
+ @std_logger.formatter = formatter(std_io, pretty)
29
+ @err_logger.formatter = formatter(err_io, pretty)
30
+
31
+ self
32
+ end
33
+
34
+ %i(debug info warn).each do |m|
35
+ define_method m do |args|
36
+ @std_logger.send m, to_hash(args)
37
+ end
38
+ end
39
+
40
+ %i(error fatal).each do |m|
41
+ define_method m do |args|
42
+ @err_logger.send m, to_hash(args)
43
+ end
44
+ end
45
+
46
+ def_delegators :@std_logger, :debug?, :info?, :warn?, :error?, :fatal?
47
+
48
+ private
49
+
50
+ def to_hash(object)
51
+ case object
52
+ when Struct
53
+ object.each_pair.to_a.map {|a|
54
+ [a.first, to_hash(a.last)]
55
+ }.to_h
56
+ when Hash
57
+ object.to_a.map {|a|
58
+ [a.first, to_hash(a.last)]
59
+ }.to_h
60
+ when Array, Aws::Resources::Collection
61
+ object.map {|o| to_hash(o)}
62
+ when Aws::Resources::Resource
63
+ to_hash object.data
64
+ else
65
+ object
66
+ end
67
+ end
68
+
69
+ def formatter(io, pretty)
70
+ -> (severity, time, progname, message) {
71
+ return "" if @null_output
72
+
73
+ data = {
74
+ time: time,
75
+ severity: severity,
76
+ }.merge(
77
+ if message.is_a? Hash
78
+ message
79
+ else
80
+ {message: message}
81
+ end
82
+ )
83
+
84
+ case @output_format
85
+ when /\Ajson\z/i
86
+ require "json"
87
+
88
+ json = JSON.send((pretty ? :pretty_generate : :generate), data) + "\n"
89
+
90
+ if io.tty?
91
+ require "coderay"
92
+ CodeRay.scan(json, :json).terminal
93
+ else
94
+ json
95
+ end
96
+ when /\Ayaml\z/i
97
+ require "yaml"
98
+
99
+ # korehahidoi
100
+ require "json"
101
+ yaml = YAML.dump(JSON.load(JSON.generate(data)))
102
+
103
+ if io.tty?
104
+ require "coderay"
105
+ CodeRay.scan(yaml, :yaml).terminal
106
+ else
107
+ yaml
108
+ end
109
+ when /\Atable|markdown|backlog\z/i
110
+ require "terminal-table"
111
+ require "json"
112
+
113
+ title, content = data.find {|k, v| !%i(time severity).include?(k)}
114
+
115
+ headings, rows = begin
116
+ case content
117
+ when Hash
118
+ row = content.values.map do |value|
119
+ case value
120
+ when Hash, Array
121
+ JSON.generate value
122
+ else
123
+ value.to_s
124
+ end
125
+ end
126
+
127
+ [content.keys.map(&:to_s), [row]]
128
+ when Array
129
+ if content.first.is_a? Hash
130
+ rows = content.map do |item|
131
+ item.values.map do |value|
132
+ case value
133
+ when Hash, Array
134
+ JSON.generate value
135
+ else
136
+ value.to_s
137
+ end
138
+ end
139
+ end
140
+
141
+ [content.first.keys, rows]
142
+ else
143
+ [["items"], [content]]
144
+ end
145
+ else
146
+ fail
147
+ end
148
+ rescue
149
+ [["data"], [[content.to_json]]]
150
+ end
151
+
152
+ table = Terminal::Table.new(
153
+ title: (@output_format == :table ? title : nil),
154
+ headings: headings,
155
+ rows: rows,
156
+ ).to_s
157
+
158
+ output = case @output_format
159
+ when /\Atable\z/i
160
+ table + "\n"
161
+ when /\Amarkdown\z/i
162
+ lines = table.lines[1..-2]
163
+ lines[1].gsub!("+", "|")
164
+ lines.join
165
+ when /\Abacklog\z/i
166
+ lines = table.lines[1..-2]
167
+ lines[0].sub!("\n", "h\n")
168
+ lines[1] = nil
169
+ lines.compact.join
170
+ end
171
+
172
+ output + "\n"
173
+ else
174
+ fail InvalidOutputFormat, "Valid output formats are #{VALID_FORMATS}"
175
+ end
176
+ }
177
+ end
178
+ end
179
+ end
@@ -1,3 +1,3 @@
1
1
  module EC2Ctl
2
- VERSION = "0.7.9"
2
+ VERSION = "0.8.0"
3
3
  end
metadata CHANGED
@@ -1,114 +1,114 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ec2ctl
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.9
4
+ version: 0.8.0
5
5
  platform: ruby
6
6
  authors:
7
- - y13i
7
+ - Yoriki Yamaguchi
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-06-07 00:00:00.000000000 Z
11
+ date: 2016-07-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: commander
14
+ name: aws-sdk
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '0'
19
+ version: '2.3'
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: '0'
26
+ version: '2.3'
27
27
  - !ruby/object:Gem::Dependency
28
- name: aws-sdk
28
+ name: commander
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ">="
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '2.0'
33
+ version: '4.4'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ">="
38
+ - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '2.0'
40
+ version: '4.4'
41
41
  - !ruby/object:Gem::Dependency
42
- name: terminal-table
42
+ name: coderay
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ">="
45
+ - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '0'
47
+ version: '1.1'
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ">="
52
+ - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '0'
54
+ version: '1.1'
55
55
  - !ruby/object:Gem::Dependency
56
- name: bundler
56
+ name: terminal-table
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '1.10'
62
- type: :development
61
+ version: '1.6'
62
+ type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '1.10'
68
+ version: '1.6'
69
69
  - !ruby/object:Gem::Dependency
70
- name: rake
70
+ name: bundler
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: '10.0'
75
+ version: '1.12'
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: '10.0'
82
+ version: '1.12'
83
83
  - !ruby/object:Gem::Dependency
84
- name: rspec
84
+ name: rake
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - ">="
87
+ - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: '0'
89
+ version: '10.0'
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
- - - ">="
94
+ - - "~>"
95
95
  - !ruby/object:Gem::Version
96
- version: '0'
96
+ version: '10.0'
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: pry
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
- - - ">="
101
+ - - "~>"
102
102
  - !ruby/object:Gem::Version
103
- version: '0'
103
+ version: '0.10'
104
104
  type: :development
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
- - - ">="
108
+ - - "~>"
109
109
  - !ruby/object:Gem::Version
110
- version: '0'
111
- description: A minimum tool for EC2 instances.
110
+ version: '0.10'
111
+ description: A small command line tool for managing EC2/ELB.
112
112
  email:
113
113
  - email@y13i.com
114
114
  executables:
@@ -117,7 +117,10 @@ extensions: []
117
117
  extra_rdoc_files: []
118
118
  files:
119
119
  - ".gitignore"
120
+ - ".travis.yml"
121
+ - CODE_OF_CONDUCT.md
120
122
  - Gemfile
123
+ - LICENSE
121
124
  - README.md
122
125
  - Rakefile
123
126
  - bin/console
@@ -127,9 +130,11 @@ files:
127
130
  - lib/ec2ctl.rb
128
131
  - lib/ec2ctl/cli.rb
129
132
  - lib/ec2ctl/client.rb
133
+ - lib/ec2ctl/logger.rb
130
134
  - lib/ec2ctl/version.rb
131
135
  homepage: https://github.com/y13i/ec2ctl
132
- licenses: []
136
+ licenses:
137
+ - MIT
133
138
  metadata: {}
134
139
  post_install_message:
135
140
  rdoc_options: []
@@ -139,7 +144,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
139
144
  requirements:
140
145
  - - ">="
141
146
  - !ruby/object:Gem::Version
142
- version: '0'
147
+ version: 2.1.0
143
148
  required_rubygems_version: !ruby/object:Gem::Requirement
144
149
  requirements:
145
150
  - - ">="
@@ -150,5 +155,5 @@ rubyforge_project:
150
155
  rubygems_version: 2.5.1
151
156
  signing_key:
152
157
  specification_version: 4
153
- summary: A minimum tool for EC2 instances.
158
+ summary: A small command line tool for managing EC2/ELB.
154
159
  test_files: []