dldinternet-mixlib-thor 0.3.0 → 0.6.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: aba87a8cf7a0eea1b986f0bf4e6c7acef5a29ae5
4
- data.tar.gz: c3191d983e5850ef82ddc99993979dd125c90198
3
+ metadata.gz: e514a24e53b9e7fcb0f1fa73351a0dd13094728f
4
+ data.tar.gz: e84ce7160a7bb7c8f830ad1372341e44da96107f
5
5
  SHA512:
6
- metadata.gz: 55068aec8c2821617239ac0e8d6ddf1f72611b142954d99e7c02b01e7ef9cd88a83ed6107cbc15cd574417a87e4e45a093da84b17e5de76af54fd4ee04e82227
7
- data.tar.gz: 210afd4629473fd758d12e938a90973bd9d284b8421e4d96a321bd71db3b168bde4bbd1b261b31a5470e7df0efcdd3d6e31d225192fbdf89d4f12e6d77f234ab
6
+ metadata.gz: ddaf17824e3cb6444869eb9d1248e06ef4c629b910b8adbaed403249156f34654f9c5c0f5e2c219364c82160909fc5c92fb338c63449a2c9f294e44376e0eeea
7
+ data.tar.gz: 295010865bc6e1373a7b5f1268a38bbff5fc6066126024d8ce1874fa538de18251b90c0c44f921e1241cf3baec54d6a09b1620e280d0011b6744e3594b2825d1
@@ -1,9 +1,10 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- dldinternet-mixlib-thor (0.3.0)
4
+ dldinternet-mixlib-thor (0.6.0)
5
5
  awesome_print
6
6
  command_line_reporter (~> 3.3, >= 3.3.6)
7
+ config-factory
7
8
  dldinternet-mixlib-logging (>= 0.7.0)
8
9
  hashie
9
10
  inifile
@@ -13,11 +14,12 @@ PATH
13
14
  GEM
14
15
  remote: https://rubygems.org/
15
16
  specs:
16
- awesome_print (1.7.0)
17
+ awesome_print (1.8.0)
17
18
  builder (3.2.3)
18
19
  colored (1.2)
19
20
  command_line_reporter (3.3.6)
20
21
  colored (>= 1.2)
22
+ config-factory (0.0.9)
21
23
  cucumber (0.10.7)
22
24
  builder (>= 2.1.2)
23
25
  diff-lcs (>= 1.1.2)
@@ -29,11 +31,11 @@ GEM
29
31
  logging (~> 2.1, >= 2.1.0)
30
32
  gherkin (2.4.21)
31
33
  json (>= 1.4.6)
32
- hashie (3.5.5)
34
+ hashie (3.5.6)
33
35
  inifile (3.0.0)
34
36
  json (2.0.3)
35
37
  little-plugger (1.1.4)
36
- logging (2.2.0)
38
+ logging (2.2.2)
37
39
  little-plugger (~> 1.1)
38
40
  multi_json (~> 1.10)
39
41
  multi_json (1.12.1)
@@ -44,7 +46,7 @@ GEM
44
46
  rubygems-tasks (0.2.4)
45
47
  term-ansicolor (1.4.0)
46
48
  tins (~> 1.0)
47
- thor (0.19.4)
49
+ thor (0.20.0)
48
50
  tins (1.13.2)
49
51
 
50
52
  PLATFORMS
@@ -24,6 +24,7 @@ Gem::Specification.new do |gem|
24
24
  gem.add_dependency 'hashie' #, '~> '
25
25
  gem.add_dependency 'command_line_reporter', '~> 3.3', '>= 3.3.6'
26
26
  gem.add_dependency 'dldinternet-mixlib-logging', '>= 0.7.0'
27
+ gem.add_dependency 'config-factory' #, '~> '
27
28
 
28
29
  gem.add_development_dependency 'bundler', '~> 1.0'
29
30
  gem.add_development_dependency 'rake', '~> 10'
@@ -1,19 +1,18 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'awesome_print'
4
+ require 'dldinternet/formatters/basic'
4
5
 
5
6
  module DLDInternet
6
7
  module Formatters
7
8
  # Awesome formatter
8
- class Awesome
9
+ class Awesome < DLDInternet::Formatters::Basic
9
10
  attr_reader :format
10
11
  attr_reader :object
11
12
  attr_reader :title
12
13
 
13
- def initialize(obj, format, title)
14
- @object = obj
15
- @format = format
16
- @title = title
14
+ def initialize(obj, format, options)
15
+ super
17
16
  end
18
17
 
19
18
  def format_it
@@ -2,6 +2,8 @@
2
2
 
3
3
  require 'json'
4
4
  require 'yaml'
5
+ require 'awesome_print'
6
+ require 'hashie/mash'
5
7
 
6
8
  module DLDInternet
7
9
  module Formatters
@@ -10,25 +12,219 @@ module DLDInternet
10
12
  attr_reader :format
11
13
  attr_reader :object
12
14
  attr_reader :title
15
+ attr_reader :columns
16
+ attr_reader :is_a_hash
17
+ attr_reader :widths
18
+ attr_reader :options
13
19
 
14
- def initialize(obj, format, title)
20
+ def initialize(obj, format, options)
21
+ @options = options
15
22
  @object = obj
16
23
  @format = format
17
- @title = title
24
+ @title = options[:title] || nil
25
+ @is_a_hash = @object.is_a?(Hash)
26
+ @columns = options[:columns] || nil
27
+ if @columns
28
+ @columns = Hashie::Mash.new(Hash[@columns.split(/\s*,\s*/).map{ |c| [c, nil]}])
29
+ @columns.dup.map{ |h,v|
30
+ submap(h, v)
31
+ }
32
+ end
33
+ end
34
+
35
+ def header_it(item=nil)
36
+ item ||=
37
+ if @is_a_hash
38
+ if @columns.nil?
39
+ object.keys
40
+ else
41
+ @columns.keys
42
+ end
43
+ else
44
+ object.to_s
45
+ end
46
+
47
+ format_item item, true
18
48
  end
19
49
 
20
- def format_it
50
+ def format_it(item=nil)
51
+ item ||=
52
+ if @is_a_hash
53
+ if @columns.nil?
54
+ object
55
+ else
56
+ hsh = {}
57
+ object.each do |key,val|
58
+ hsh[key] = val if @columns.keys.include?(key)
59
+ end
60
+ hsh
61
+ end
62
+ else
63
+ object
64
+ end
65
+
66
+ format_item item
67
+ end
68
+
69
+ # :reek:DuplicateMethodCall {enabled: false}
70
+ def widths
71
+ unless @widths
72
+ @widths = Hashie::Mash.new
73
+ if @is_a_hash
74
+ widths_hash
75
+ else
76
+ widths_array
77
+ end
78
+ end
79
+ @widths
80
+ end
81
+
82
+ # :reek:DuplicateMethodCall {enabled: false}
83
+ def widths=(w)
84
+ @widths = w
85
+ end
86
+
87
+ # :reek:DuplicateMethodCall {enabled: false}
88
+ def table_widths
89
+ if object.is_a?(Array) && object.size > 0 && object[0].is_a?(Hash)
90
+ tws = nil
91
+ object.each do |obj|
92
+ fmt = self.class.new(obj, format, options)
93
+ tws ||= fmt.widths
94
+ fmt.widths.each { |c,w|
95
+ if tws[c] < w
96
+ tws[c] = w
97
+ end
98
+ }
99
+ end
100
+ @widths = tws
101
+ else
102
+ widths
103
+ end
104
+ end
105
+
106
+ private
107
+
108
+ def format_item(item, header=false)
21
109
  case format.to_s.downcase
22
110
  when 'json'
23
- JSON.pretty_generate(object)
111
+ JSON.pretty_generate(item)
24
112
  when 'yaml'
25
- object.to_yaml
113
+ item.to_yaml
26
114
  when 'none'
27
- object
115
+ item
116
+ else
117
+ if item.is_a?(Array) # header ||
118
+ if widths.is_a?(Hash)
119
+ if @columns.nil?
120
+ wdths = widths.map { |c,w| w }
121
+ else
122
+ wdths = widths.map { |c,w| w if @columns.include?(c) }.select{ |w| !w.nil? }
123
+ end
124
+ end
125
+ i = -1
126
+ nitm = item.map{ |c|
127
+ i += 1
128
+ w = wdths[i]
129
+ sprintf("%-#{w}s", c.to_s)
130
+ }
131
+ nitm.join(" ")
132
+ elsif item.is_a?(Hash)
133
+ item.map do |key, val|
134
+ if @columns.nil? || (@columns.keys.include?(key) && @columns[key].nil?)
135
+ sprintf("%-#{widths[key]}s", val.to_s)
136
+ else
137
+ sprintf("%-#{widths[key]}s", subcolumn(key, val))
138
+ end
139
+ end
140
+ else
141
+ item.to_s
142
+ end
143
+ end
144
+ end
145
+
146
+ def submap(col, val, sub=nil)
147
+ sub ||= @columns
148
+ m = col.match(/^([^.]+)\.(.*)$/)
149
+ if m
150
+ val = sub[m[1]]
151
+ val ||= Hashie::Mash.new
152
+ submap(m[2], val, val)
153
+ sub[m[1]] = val
154
+ sub.delete(col)
28
155
  else
29
- object.to_s
156
+ if val
157
+ val[col] = nil
158
+ else
159
+ sub[col] = val
160
+ end
30
161
  end
31
162
  end
163
+
164
+ def widths_array
165
+ idx = 0
166
+ @object.each do |val|
167
+ set_width(idx, val)
168
+ idx += 1
169
+ end
170
+ end
171
+
172
+ def widths_hash
173
+ @object.each do |key, _|
174
+ klen = key.to_s.length
175
+ wid = @widths[key]
176
+ @widths[key] = klen if !wid || wid < klen
177
+ end
178
+ obj_width(@object)
179
+ end
180
+
181
+ def set_width(idx, val)
182
+ vlen = val.to_s.length
183
+ wid = @widths[idx] || 0
184
+ @widths[idx] = vlen if wid < vlen
185
+ end
186
+
187
+ def obj_width(obj)
188
+ obj.each do |key, val|
189
+ set_width(key, val)
190
+ end
191
+ end
192
+
193
+ def subcolumn(key, val, sub=nil)
194
+ sub ||= @columns
195
+ if sub[key]
196
+ if sub[key].is_a?(Hash)
197
+ vals = subvalues(key, val, sub)
198
+ if vals.is_a?(Array)
199
+ vals.flatten!
200
+ # vals = vals[0] if vals.size == 1
201
+ end
202
+ column(vals.to_s)
203
+ else
204
+ column(val.to_s) if sub.has_key?(m[1]) && sub[m[1]].nil?
205
+ end
206
+ else
207
+ column(val.to_s) if sub.has_key?(key) # && sub[key].nil?)
208
+ end
209
+ end
210
+
211
+ def subvalues(key, val, sub)
212
+ if sub[key].is_a?(Hash)
213
+ sub[key].keys.map {|k|
214
+ case val.class.name
215
+ when /^Hash/
216
+ val[k]
217
+ when /^Array/
218
+ val.map {|v|
219
+ subvalues(k, v[k], sub[key])
220
+ }
221
+ end
222
+ }
223
+ else
224
+ val
225
+ end
226
+ end
227
+
32
228
  end
33
229
  end
34
230
  end
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'dldinternet/formatters/basic'
3
4
  require 'dldinternet/formatters/colors'
4
- require 'awesome_print'
5
5
  require 'command_line_reporter'
6
6
 
7
7
  module DLDInternet
@@ -11,25 +11,22 @@ module DLDInternet
11
11
  class Table < DLDInternet::Formatters::Basic
12
12
  include CommandLineReporter
13
13
 
14
- attr_reader :widths
15
- attr_reader :is_a_hash
16
-
17
- def initialize(obj, format, title)
14
+ def initialize(obj, format, options)
18
15
  super
19
- # self.formatter = ''
20
- @object = [@object] unless @object.is_a?(Array)
21
- @is_a_hash = @object[0].is_a?(Hash)
16
+ # @object = [@object] unless @object.is_a?(Array)
17
+ @values = Hashie::Mash.new
22
18
  end
23
19
 
24
20
  def run
25
21
  suppress_output
26
22
 
27
- header(title: @title, align: 'center') if @title
23
+ header(title: @title, align: 'center') if @title #&& !@title.empty?
28
24
 
29
25
  table border: true, encoding: :ascii do
30
26
  header_row
31
27
  idx = 0
32
- @object.each do |obj|
28
+ list = @object.is_a?(Array) ? @object : [@object]
29
+ list.each do |obj|
33
30
  obj_row(idx, obj)
34
31
  end
35
32
  end
@@ -44,7 +41,7 @@ module DLDInternet
44
41
  if @is_a_hash
45
42
  row color: 'light_yellow', bold: true, encoding: :ascii do
46
43
  @object[0].each do |key, _|
47
- column key.to_s, width: widths[key]
44
+ column key.to_s, width: widths[key] if (@columns.nil? || @columns.keys.include?(key))
48
45
  end
49
46
  end
50
47
  end
@@ -53,8 +50,12 @@ module DLDInternet
53
50
  def obj_row(idx, obj)
54
51
  row color: 'white', bold: false do
55
52
  if @is_a_hash
56
- obj.each do |_, val|
57
- column val.to_s
53
+ obj.each do |key, val|
54
+ if @columns.nil? || (@columns.keys.include?(key) && @columns[key].nil?)
55
+ column val.to_s
56
+ else
57
+ subcolumn(key, val)
58
+ end
58
59
  end
59
60
  else
60
61
  column obj.to_s, width: widths[idx]
@@ -63,50 +64,6 @@ module DLDInternet
63
64
  end
64
65
  end
65
66
 
66
- # :reek:DuplicateMethodCall {enabled: false}
67
- def widths
68
- unless @widths
69
- @widths = Hashie::Mash.new
70
- if @is_a_hash
71
- widths_hash
72
- else
73
- widths_array
74
- end
75
- end
76
- @widths
77
- end
78
-
79
- def widths_array
80
- idx = 0
81
- @object.each do |val|
82
- set_width(idx, val)
83
- idx += 1
84
- end
85
- end
86
-
87
- def widths_hash
88
- @object[0].each do |key, _|
89
- klen = key.to_s.length
90
- wid = @widths[key]
91
- @widths[key] = klen if !wid || wid < klen
92
- end
93
- @object.each do |obj|
94
- obj_width(obj)
95
- end
96
- end
97
-
98
- def set_width(idx, val)
99
- vlen = val.to_s.length
100
- wid = @widths[idx] || 0
101
- @widths[idx] = vlen if wid < vlen
102
- end
103
-
104
- def obj_width(obj)
105
- obj.each do |key, val|
106
- set_width(key, val)
107
- end
108
- end
109
-
110
67
  def format_it
111
68
  run
112
69
  end
@@ -56,10 +56,18 @@ module DLDInternet
56
56
  def initialize(args = [], local_options = {}, config = {})
57
57
  super(args,local_options,config)
58
58
  @log_level = :warn #|| @config[:log_level].to_sym
59
- @formatter ||= ->(hsh, tit) { default_formatter(hsh, tit) }
60
- @writer ||= ->(str) { puts str }
61
- @header ||= ->{}
62
- @format ||= ->(res) { puts res.ai }
59
+ @formatter ||= ->(hsh, opts) {
60
+ default_formatter(hsh, opts)
61
+ }
62
+ @writer ||= ->(str) {
63
+ puts str
64
+ }
65
+ @header ||= ->(res, fmtr=nil) {
66
+ default_header(res, fmtr)
67
+ }
68
+ @format ||= ->(res, fmtr=nil) {
69
+ default_format(res, nil, fmtr)
70
+ }
63
71
  end
64
72
 
65
73
  desc "help [COMMAND]", "Describe available commands or one specific command"
@@ -5,6 +5,7 @@ require 'dldinternet/formatters'
5
5
  require 'hashie/mash'
6
6
  require 'dldinternet/thor/version'
7
7
  require 'inifile'
8
+ require 'config/factory'
8
9
 
9
10
  module DLDInternet
10
11
  module Thor
@@ -30,6 +31,76 @@ module DLDInternet
30
31
  @options[:output] ||= @options[:format]
31
32
  end
32
33
 
34
+ def load_inifile
35
+ unless File.exist?(@options[:inifile])
36
+ raise "#{@options[:inifile]} not found!"
37
+ end
38
+ begin
39
+ ini = ::IniFile.load(@options[:inifile])
40
+ ini['global'].each{ |key,value|
41
+ @options[key.to_s]=value
42
+ ENV[key.to_s]=value
43
+ }
44
+ def _expand(k,v,regex,rerun)
45
+ matches = v.match(regex)
46
+ if matches
47
+ var = matches[1]
48
+ if options[var]
49
+ options[k]=v.gsub(/\%\(#{var}\)/,options[var]).gsub(/\%#{var}/,options[var])
50
+ else
51
+ rerun[var] = 1
52
+ end
53
+ end
54
+ end
55
+
56
+ pending = nil
57
+ rerun = {}
58
+ begin
59
+ pending = rerun
60
+ rerun = {}
61
+ options.to_hash.each{|k,v|
62
+ if v.to_s.match(/\%/)
63
+ _expand(k,v,%r'[^\\]\%\((\w+)\)', rerun)
64
+ _expand(k,v,%r'[^\\]\%(\w+)', rerun)
65
+ end
66
+ }
67
+ # Should break out the first time that we make no progress!
68
+ end while pending != rerun
69
+ rescue ::IniFile::Error => e
70
+ # noop
71
+ rescue ::Exception => e
72
+ @logger.error "#{e.class.name} #{e.message}"
73
+ raise e
74
+ end
75
+ end
76
+
77
+ def load_config
78
+ if File.exist?(@options[:config])
79
+ begin
80
+ envs = ::Config::Factory::Environments.load_file(@options[:config])
81
+ if envs and envs.is_a?(Hash) and @options[:environment]
82
+ @options[:environments] = ::Hashie::Mash.new(envs)
83
+ else
84
+ yaml = ::YAML.load(File.read(@options[:config]))
85
+ if yaml
86
+ yaml.each {|key, value|
87
+ @options[key.to_s.gsub(%r{[-]}, '_').to_sym]=value
88
+ }
89
+ else
90
+ msg = "#{options.config} is not a valid configuration!"
91
+ @logger.error msg
92
+ raise StandardError.new(msg)
93
+ end
94
+ end
95
+ rescue ::Exception => e
96
+ @logger.error "#{e.class.name} #{e.message}"
97
+ raise e
98
+ end
99
+ else
100
+ @logger.warn "#{options.config} not found"
101
+ end
102
+ end
103
+
33
104
  def parse_options
34
105
  validate_options
35
106
 
@@ -60,63 +131,20 @@ module DLDInternet
60
131
  }
61
132
  }
62
133
  @config[:log_levels] ||= LOG_LEVELS
134
+ @options[:log_config] = @config
63
135
  # initLogging(@config)
64
136
  @logger = getLogger(@config)
65
137
 
66
138
  if @options[:inifile]
67
139
  @options[:inifile] = File.expand_path(@options[:inifile])
68
- unless File.exist?(@options[:inifile])
69
- raise "#{@options[:inifile]} not found!"
70
- end
71
- begin
72
- ini = ::IniFile.load(@options[:inifile])
73
- ini['global'].each{ |key,value|
74
- @options[key.to_s]=value
75
- ENV[key.to_s]=value
76
- }
77
- def _expand(k,v,regex,rerun)
78
- matches = v.match(regex)
79
- if matches
80
- var = matches[1]
81
- if options[var]
82
- options[k]=v.gsub(/\%\(#{var}\)/,options[var]).gsub(/\%#{var}/,options[var])
83
- else
84
- rerun[var] = 1
85
- end
86
- end
87
- end
88
-
89
- pending = nil
90
- rerun = {}
91
- begin
92
- pending = rerun
93
- rerun = {}
94
- options.to_hash.each{|k,v|
95
- if v.to_s.match(/\%/)
96
- _expand(k,v,%r'[^\\]\%\((\w+)\)', rerun)
97
- _expand(k,v,%r'[^\\]\%(\w+)', rerun)
98
- end
99
- }
100
- # Should break out the first time that we make no progress!
101
- end while pending != rerun
102
- rescue ::IniFile::Error => e
103
- # noop
104
- rescue ::Exception => e
105
- @logger.error "#{e.class.name} #{e.message}"
106
- raise e
107
- end
140
+ load_inifile
108
141
  elsif @options[:config]
109
142
  @options[:config] = File.expand_path(@options[:config])
110
- if File.exist?(@options[:config])
111
- begin
112
- yaml = ::YAML.load(File.read(@options[:config]))
113
- yaml.each{ |key,value|
114
- @options[key.to_s.gsub(%r{[-]},'_')]=value
115
- }
116
- rescue ::Exception => e
117
- @logger.error "#{e.class.name} #{e.message}"
118
- raise e
119
- end
143
+ if @options[:config] =~ /\.ini/i
144
+ @options[:inifile] = @options[:config]
145
+ load_inifile
146
+ else
147
+ load_config
120
148
  end
121
149
  end
122
150
  if options[:debug]
@@ -134,22 +162,33 @@ module DLDInternet
134
162
  @config[:output] || :none
135
163
  end
136
164
 
137
- def default_formatter(obj, title)
138
- format_helper = DLDInternet::Formatters::Basic.new(obj, notation, title)
165
+ def default_formatter(obj, opts=nil)
166
+ opts ||= Hashie::Mash.new(options.to_h)
167
+ format_helper = DLDInternet::Formatters::Basic.new(obj, notation, title: opts[:title], columns: opts[:columns])
139
168
  case notation.to_sym
169
+ when :json
170
+ when :yaml
140
171
  when :none
141
172
  when :basic
142
173
  when :text
143
174
  # noop
144
175
  when :awesome
145
- format_helper = DLDInternet::Formatters::Awesome.new(obj, notation, title)
146
- when :json
147
- when :yaml
176
+ format_helper = DLDInternet::Formatters::Awesome.new(obj, notation, title: opts[:title], columns: opts[:columns])
148
177
  when :table
149
- format_helper = DLDInternet::Formatters::Table.new(obj, notation, title)
178
+ format_helper = DLDInternet::Formatters::Table.new(obj, notation, title: opts[:title], columns: opts[:columns])
150
179
  else
151
180
  raise DLDInternet::Formatters::Error, "Unknown format requested: #{notation}"
152
181
  end
182
+ format_helper
183
+ end
184
+
185
+ def default_header(obj, format_helper=nil)
186
+ format_helper ||= default_formatter(obj)
187
+ format_helper.header_it
188
+ end
189
+
190
+ def default_format(obj, opts=nil, format_helper=nil)
191
+ format_helper ||= default_formatter(obj, opts || options)
153
192
  format_helper.format_it
154
193
  end
155
194
 
@@ -176,18 +215,19 @@ module DLDInternet
176
215
  end
177
216
  end
178
217
 
179
- def format_it(obj, title = '')
180
- formatter.call(obj, title)
218
+ def string_it(obj, fmtr=nil, header=false)
219
+ fmtr ||= @formatter.call(obj, options)
220
+ fmtr.send(header ? :header_it : :format_it, obj)
181
221
  end
182
222
 
183
223
  def write(obj)
184
224
  writer.call(obj)
185
225
  end
186
226
 
187
- def output(obj)
227
+ def output(obj, fmtr=nil, header=false)
188
228
  unless obj.nil?
189
229
  hash = obj.is_a?(Array) ? obj.map { |o| hash_it(o) } : (obj.is_a?(String) ? obj : hash_it(obj))
190
- str = format_it(hash)
230
+ str = string_it(hash, fmtr, header)
191
231
  write str
192
232
  end
193
233
  end
@@ -197,30 +237,46 @@ module DLDInternet
197
237
  @logger.info @_invocations.map{ |_,v| v[0]}.join(' ') if options[:verbose]
198
238
  end
199
239
 
200
- def command_out(res)
240
+ def command_out(res, fmtr=nil)
241
+ unless fmtr
242
+ fmtr = formatter.call(res, options)
243
+ fmtr.table_widths
244
+ end
201
245
  case options[:format]
202
- when /text|none/
203
- output header_line unless options[:header] === false
246
+ when /text|none|plain/
247
+ output(header_line(res, fmtr), fmtr, true) unless options[:header] === false
204
248
  case res.class.name
205
249
  when /Array/
206
250
  res.each do |obj|
207
- output format_line(obj)
251
+ output format_line(obj, fmtr)
208
252
  end
209
253
  # when /Hash|String/
210
254
  else
211
- output format_line(res)
255
+ output format_line(res, fmtr)
212
256
  end
213
257
  else
214
258
  output res
215
259
  end
216
260
  end
217
261
 
218
- def header_line()
219
- @header.call()
262
+ def header_line(obj, fmtr=nil)
263
+ if obj.is_a?(String)
264
+ obj
265
+ elsif obj.is_a?(Hash)
266
+ @header.call(obj, fmtr)
267
+ elsif obj.is_a?(Array)
268
+ if obj.size > 0
269
+ header_line(obj[0], fmtr)
270
+ else
271
+ header_line({}, fmtr)
272
+ end
273
+ else
274
+ raise "Cannot produce header from this object: #{obj.class.name}"
275
+ end
220
276
  end
221
277
 
222
- def format_line(obj)
223
- @format.call(obj)
278
+ def format_line(obj, fmtr=nil)
279
+ @format.call(obj, fmtr)
224
280
  end
225
281
 
226
282
  def invoke_command(command, *args) #:nodoc:
@@ -1,7 +1,7 @@
1
1
  module Dldinternet
2
2
  module Mixlib
3
3
  module Thor
4
- VERSION = '0.3.0'
4
+ VERSION = '0.6.0'
5
5
 
6
6
  module Version # :nodoc: all
7
7
  MAJOR, MINOR, RELEASE, *OTHER = VERSION.split '.'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dldinternet-mixlib-thor
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Christo De Lange
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-04-02 00:00:00.000000000 Z
11
+ date: 2017-09-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -120,6 +120,20 @@ dependencies:
120
120
  - - ">="
121
121
  - !ruby/object:Gem::Version
122
122
  version: 0.7.0
123
+ - !ruby/object:Gem::Dependency
124
+ name: config-factory
125
+ requirement: !ruby/object:Gem::Requirement
126
+ requirements:
127
+ - - ">="
128
+ - !ruby/object:Gem::Version
129
+ version: '0'
130
+ type: :runtime
131
+ prerelease: false
132
+ version_requirements: !ruby/object:Gem::Requirement
133
+ requirements:
134
+ - - ">="
135
+ - !ruby/object:Gem::Version
136
+ version: '0'
123
137
  - !ruby/object:Gem::Dependency
124
138
  name: bundler
125
139
  requirement: !ruby/object:Gem::Requirement
@@ -176,7 +190,6 @@ files:
176
190
  - LICENSE.txt
177
191
  - README.md
178
192
  - Rakefile
179
- - atlassian-ide-plugin.xml
180
193
  - dldinternet-mixlib-thor.gemspec
181
194
  - lib/dldinternet/formatters.rb
182
195
  - lib/dldinternet/formatters/awesome.rb
@@ -1,6 +0,0 @@
1
- <atlassian-ide-plugin>
2
- <project-configuration id="1">
3
- <servers id="2" />
4
- <default-jira-server id="3">581e0341-9c55-46b3-8f0d-36fc14bcc37d</default-jira-server>
5
- </project-configuration>
6
- </atlassian-ide-plugin>