command_line_reporter 3.3.6 → 4.0.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: 4a2787df26c02bb1e92edcdf6cb9bc01663cf7b5
4
- data.tar.gz: ed36d67ef61f86542166a616f82f91b6176fc328
3
+ metadata.gz: 1024c56ad76f095c3f3778ec780c4427f184ab34
4
+ data.tar.gz: 60ddfd0b420dc8ce7692f7d1cd226ba437c4349f
5
5
  SHA512:
6
- metadata.gz: b7482d1047e264db40d5bcc1b773c9105648324b8cf9c0f1cec553be7dd9ae89956703b251afeaa16113044d6b3465b7e83491bd05b0aba4a651cb403a6e007b
7
- data.tar.gz: fb4aa21ac3e2879ca200a5a93996c6ce26450e272dbcdba40586a300931db1a56b39b50dc1332a4c4d5e0f66459b577a21d0d5b47a2e821d9b4f0bbebab685a9
6
+ metadata.gz: 040a9a4fad99322164d8b42225f7c06335f1747d4e387ceb6ddc7a483dc7375717f3f442123e85a9c7bd75a3e4937da125a4651fc4148afdf9c20f9a0b11ad04
7
+ data.tar.gz: 9c0ba99f7fc2ba37cadcc3d8cf15eb10b94f8da4f5de036952344ebeea80917a3e9c389d5810a2f7019ba98ae608833a1dac8bf8f3058e106bfe230ff58886e3
data/README.md CHANGED
@@ -134,7 +134,7 @@ There are several methods the mixin provides that do not depend on the formatter
134
134
 
135
135
  ### License
136
136
 
137
- Copyright (c) 2011-2015 Wes Bailey
137
+ Copyright (c) 2011-2017 Wes Bailey
138
138
 
139
139
  Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
140
140
  associated documentation files (the "Software"), to deal in the Software without restriction,
@@ -8,17 +8,18 @@ require 'command_line_reporter/column'
8
8
  require 'command_line_reporter/table'
9
9
  require 'command_line_reporter/version'
10
10
 
11
+ # rubocop:disable Metrics/ModuleLength
11
12
  module CommandLineReporter
12
13
  include OptionsValidator
13
14
 
14
15
  attr_reader :formatter
15
16
 
16
17
  DEFAULTS = {
17
- :width => 100,
18
- :align => 'left',
19
- :formatter => 'nested',
20
- :encoding => :unicode,
21
- }
18
+ width: 100,
19
+ align: 'left',
20
+ formatter: 'nested',
21
+ encoding: :unicode
22
+ }.freeze
22
23
 
23
24
  def capture_output
24
25
  $stdout.rewind
@@ -38,7 +39,7 @@ module CommandLineReporter
38
39
  def formatter=(type = 'nested')
39
40
  return type if type.class != String
40
41
  name = type.capitalize + 'Formatter'
41
- klass = %W{CommandLineReporter #{name}}.inject(Kernel) {|s,c| s.const_get(c)}
42
+ klass = %W[CommandLineReporter #{name}].inject(Kernel) { |a, e| a.const_get(e) }
42
43
 
43
44
  # Each formatter is a singleton that responds to #instance
44
45
  @formatter = klass.instance
@@ -72,14 +73,14 @@ module CommandLineReporter
72
73
  char = options[:char].is_a?(String) ? options[:char] : use_char
73
74
  width = options[:width] || DEFAULTS[:width]
74
75
 
75
- aligned(char * width, :width => width, :color => options[:color], :bold => options[:bold])
76
+ aligned(char * width, width: width, color: options[:color], bold: options[:bold])
76
77
  end
77
78
 
78
79
  def vertical_spacing(lines = 1)
79
80
  lines = Integer(lines)
80
81
 
81
82
  # because puts "\n" * 0 produces an unwanted newline
82
- if lines == 0
83
+ if lines.zero?
83
84
  print "\0"
84
85
  else
85
86
  puts "\n" * lines
@@ -89,40 +90,24 @@ module CommandLineReporter
89
90
  def datetime(options = {})
90
91
  validate_options(options, :align, :width, :format, :color, :bold)
91
92
 
92
- format = options[:format] || '%Y-%m-%d - %l:%M:%S%p'
93
- align = options[:align] || DEFAULTS[:align]
94
- width = options[:width] || DEFAULTS[:width]
95
-
93
+ format = default_options_date_format(options[:format])
96
94
  text = Time.now.strftime(format)
97
95
 
98
- raise Exception if text.size > width
99
-
100
- aligned(text, :align => align, :width => width, :color => options[:color], :bold => options[:bold])
96
+ aligned(text, options)
101
97
  end
102
98
 
103
99
  def aligned(text, options = {})
104
- validate_options(options, :align, :width, :color, :bold)
100
+ validate_options(options, :align, :width, :format, :color, :bold)
105
101
 
106
- align = options[:align] || DEFAULTS[:align]
107
- width = options[:width] || DEFAULTS[:width]
108
- color = options[:color]
109
- bold = options[:bold] || false
102
+ options[:align] = default_options_align(options[:align])
103
+ options[:width] = default_options_width(options[:width])
104
+ options[:bold] = default_options_bold(options[:bold])
110
105
 
111
- line = case align
112
- when 'left'
113
- text
114
- when 'right'
115
- text.rjust(width)
116
- when 'center'
117
- text.rjust((width - text.size)/2 + text.size)
118
- else
119
- raise ArgumentError
120
- end
106
+ raise Exception if text.size > options[:width]
121
107
 
122
- line = line.send(color) if color
123
- line = line.send('bold') if bold
108
+ line = align_line(text, options)
124
109
 
125
- puts line
110
+ puts apply_color(line, options)
126
111
  end
127
112
 
128
113
  def table(options = {})
@@ -145,36 +130,98 @@ module CommandLineReporter
145
130
 
146
131
  private
147
132
 
133
+ def align_line(text, options)
134
+ case options[:align]
135
+ when 'left'
136
+ text
137
+ when 'right'
138
+ text.rjust(options[:width])
139
+ when 'center'
140
+ text.rjust((options[:width] - text.size) / 2 + text.size)
141
+ end
142
+ end
143
+
144
+ def apply_color(line, options)
145
+ line = line.send(options[:color]) if options[:color]
146
+ line = line.send('bold') if options[:bold]
147
+ line
148
+ end
149
+
150
+ # def default_datetime_options(options)
151
+ # format = define_format(options)
152
+ # align = default_options_align(options[:align])
153
+ # width = default_options_width(options[:width])
154
+ # [format, align, width]
155
+ # end
156
+
157
+ def default_options_date_format(format)
158
+ format || '%Y-%m-%d - %l:%M:%S%p'
159
+ end
160
+
148
161
  def section(type, options)
149
- title, width, align, lines, color, bold = assign_section_properties(options)
162
+ options = define_section_values(options)
150
163
 
151
- # This also ensures that width is a Fixnum
152
- raise ArgumentError if title.size > width
164
+ raise ArgumentError if options[:title].size > options[:width]
153
165
 
154
- if type == :footer
155
- vertical_spacing(lines)
156
- horizontal_rule(:char => options[:rule], :width => width, :color => color, :bold => bold) if options[:rule]
157
- end
166
+ print_header(type, options)
167
+ print_body(options)
168
+ print_footer(type, options)
169
+ end
170
+
171
+ def print_header(type, options)
172
+ return unless type == :header
173
+ vertical_spacing(options[:lines])
174
+ horizontal_rule(char: options[:rule], width: options[:width], color: options[:color], bold: options[:bold]) if options[:rule]
175
+ end
158
176
 
159
- aligned(title, :align => align, :width => width, :color => color, :bold => bold)
160
- datetime(:align => align, :width => width, :color => color, :bold => bold) if options[:timestamp]
177
+ def print_body(options)
178
+ aligned(options[:title], align: options[:align], width: options[:width], color: options[:color], bold: options[:bold])
179
+ datetime(align: options[:align], width: options[:width], color: options[:color], bold: options[:bold]) if options[:timestamp]
180
+ end
161
181
 
162
- if type == :header
163
- horizontal_rule(:char => options[:rule], :width => width, :color => color, :bold => bold) if options[:rule]
164
- vertical_spacing(lines)
165
- end
182
+ def print_footer(type, options)
183
+ return unless type == :footer
184
+ horizontal_rule(char: options[:rule], width: options[:width], color: options[:color], bold: options[:bold]) if options[:rule]
185
+ vertical_spacing(options[:lines])
166
186
  end
167
187
 
168
- def assign_section_properties options
188
+ def define_section_values(options)
169
189
  validate_options(options, :title, :width, :align, :spacing, :timestamp, :rule, :color, :bold)
170
190
 
171
- title = options[:title] || 'Report'
172
- width = options[:width] || DEFAULTS[:width]
173
- align = options[:align] || DEFAULTS[:align]
174
- lines = options[:spacing] || 1
175
- color = options[:color]
176
- bold = options[:bold] || false
191
+ options[:title] = default_options_title(options[:title])
192
+ options[:width] = default_options_width(options[:width])
193
+ options[:align] = default_options_align(options[:align])
194
+ options[:lines] = default_options_lines(options[:spacing])
195
+ options[:bold] = default_options_bold(options[:bold])
196
+
197
+ options
198
+ end
199
+
200
+ def default_options_title(title)
201
+ title || 'Report'
202
+ end
203
+
204
+ def default_options_width(width)
205
+ width ||= DEFAULTS[:width]
206
+ Integer(width)
207
+ width
208
+ end
209
+
210
+ def default_options_align(align)
211
+ align ||= DEFAULTS[:align]
212
+ validate_align(align)
213
+ align
214
+ end
215
+
216
+ def default_options_lines(lines)
217
+ lines || 1
218
+ end
219
+
220
+ def default_options_bold(bold)
221
+ bold || false
222
+ end
177
223
 
178
- return [title, width, align, lines, color, bold]
224
+ def validate_align(align)
225
+ raise ArgumentError unless %i[left center right].include?(align.to_sym)
179
226
  end
180
227
  end
@@ -4,71 +4,82 @@ module CommandLineReporter
4
4
  class Column
5
5
  include OptionsValidator
6
6
 
7
- VALID_OPTIONS = [:width, :padding, :align, :color, :bold, :underline, :reversed]
7
+ VALID_OPTIONS = %i[width padding align color bold underline reversed span].freeze
8
8
  attr_accessor :text, :size, *VALID_OPTIONS
9
9
 
10
10
  def initialize(text = nil, options = {})
11
- self.validate_options(options, *VALID_OPTIONS)
11
+ validate_options(options, *VALID_OPTIONS)
12
+ assign_alignment_defaults(options)
13
+ assign_color_defaults(options)
12
14
 
13
15
  self.text = text.to_s
14
-
15
- self.width = options[:width] || 10
16
- self.align = options[:align] || 'left'
17
- self.padding = options[:padding] || 0
18
- self.color = options[:color] || nil
19
- self.bold = options[:bold] || false
20
- self.underline = options[:underline] || false
21
- self.reversed = options[:reversed] || false
22
-
23
- raise ArgumentError unless self.width > 0
24
- raise ArgumentError unless self.padding.to_s.match(/^\d+$/)
25
16
  end
26
17
 
27
18
  def size
28
- self.width - 2 * self.padding
19
+ width - (2 * padding) + (3 * (span - 1))
29
20
  end
30
21
 
31
22
  def required_width
32
- self.text.to_s.size + 2 * self.padding
23
+ text.to_s.size + 2 * padding
33
24
  end
34
25
 
35
26
  def screen_rows
36
- if self.text.nil? || self.text.empty?
37
- [' ' * self.width]
27
+ if text.nil? || text.empty?
28
+ [' ' * width]
38
29
  else
39
- self.text.scan(/.{1,#{self.size}}/m).map {|s| to_cell(s)}
30
+ text.scan(/.{1,#{size}}/m).map { |s| to_cell(s) }
40
31
  end
41
32
  end
42
33
 
43
34
  private
44
35
 
36
+ def assign_alignment_defaults(options)
37
+ self.span = options[:span] || 1
38
+
39
+ self.width = options[:width] || 10
40
+ self.width = Integer(width)
41
+ self.width *= span
42
+
43
+ self.align = options[:align] || 'left'
44
+
45
+ self.padding = options[:padding] || 0
46
+ self.padding = Integer(padding)
47
+ end
48
+
49
+ def assign_color_defaults(options)
50
+ self.color = options[:color] || nil
51
+ self.bold = options[:bold] || false
52
+ self.underline = options[:underline] || false
53
+ self.reversed = options[:reversed] || false
54
+ end
55
+
45
56
  def to_cell(str)
46
57
  # NOTE: For making underline and reversed work Change so that based on the
47
58
  # unformatted text it determines how much spacing to add left and right
48
59
  # then colorize the cell text
49
60
  cell = str.empty? ? blank_cell : aligned_cell(str)
50
- padding_str = ' ' * self.padding
61
+ padding_str = ' ' * padding
51
62
  padding_str + colorize(cell) + padding_str
52
63
  end
53
64
 
54
65
  def blank_cell
55
- ' ' * self.size
66
+ ' ' * size
56
67
  end
57
68
 
58
69
  def aligned_cell(str)
59
- case self.align
70
+ case align
60
71
  when 'left'
61
- str.ljust(self.size)
72
+ str.ljust(size)
62
73
  when 'right'
63
- str.rjust(self.size)
74
+ str.rjust(size)
64
75
  when 'center'
65
- str.ljust((self.size - str.size)/2.0 + str.size).rjust(self.size)
76
+ str.ljust((size - str.size) / 2.0 + str.size).rjust(size)
66
77
  end
67
78
  end
68
79
 
69
80
  def colorize(str)
70
- str = str.send(color) if self.color
71
- str = str.send('bold') if self.bold
81
+ str = str.send(color) if color
82
+ str = str.send('bold') if bold
72
83
  str
73
84
  end
74
85
  end
@@ -6,18 +6,18 @@ module CommandLineReporter
6
6
  include Singleton
7
7
  include OptionsValidator
8
8
 
9
- VALID_OPTIONS = [:message, :type, :complete, :indent_size, :color, :bold]
9
+ VALID_OPTIONS = %i[message type complete indent_size color bold].freeze
10
10
  attr_accessor :indent_size, :complete_string, :message_string, :color, :bold
11
11
 
12
12
  def format(options, block)
13
- self.validate_options(options, *VALID_OPTIONS)
13
+ validate_options(options, *VALID_OPTIONS)
14
14
 
15
15
  indent_level :incr
16
16
 
17
- padding = ' ' * @indent_level * (options[:indent_size] || self.indent_size)
17
+ padding = ' ' * @indent_level * (options[:indent_size] || indent_size)
18
18
 
19
- message_str = padding + (options[:message] || self.message_string)
20
- complete_str = options[:complete] || self.complete_string
19
+ message_str = padding + (options[:message] || message_string)
20
+ complete_str = options[:complete] || complete_string
21
21
 
22
22
  if options[:type] == 'inline'
23
23
  colorize("#{message_str}...", true, options)
@@ -51,17 +51,13 @@ module CommandLineReporter
51
51
  str = str.send(options[:color]) if options[:color]
52
52
  str = str.bold if options[:bold]
53
53
 
54
- if inline
55
- print str
56
- else
57
- puts str
58
- end
54
+ inline ? print(str) : puts(str)
59
55
  end
60
56
 
61
57
  def indent_level(value)
62
58
  case value
63
59
  when :incr
64
- @indent_level = (@indent_level) ? @indent_level + 1 : 0
60
+ @indent_level = @indent_level ? @indent_level + 1 : 0
65
61
  when :decr
66
62
  @indent_level -= 1
67
63
  end
@@ -6,11 +6,11 @@ module CommandLineReporter
6
6
  include Singleton
7
7
  include OptionsValidator
8
8
 
9
- VALID_OPTIONS = [:indicator, :color, :bold]
9
+ VALID_OPTIONS = %i[indicator color bold].freeze
10
10
  attr_accessor *VALID_OPTIONS
11
11
 
12
12
  def format(options, block)
13
- self.validate_options(options, *VALID_OPTIONS)
13
+ validate_options(options, *VALID_OPTIONS)
14
14
 
15
15
  self.indicator = options[:indicator] if options[:indicator]
16
16
  self.color = options[:color]
@@ -22,10 +22,10 @@ module CommandLineReporter
22
22
  end
23
23
 
24
24
  def progress(override = nil)
25
- str = override || self.indicator
25
+ str = override || indicator
26
26
 
27
- str = str.send(self.color) if self.color
28
- str = str.send('bold') if self.bold
27
+ str = str.send(color) if color
28
+ str = str.send('bold') if bold
29
29
 
30
30
  print str
31
31
  end
@@ -2,11 +2,11 @@ module CommandLineReporter
2
2
  class Row
3
3
  include OptionsValidator
4
4
 
5
- VALID_OPTIONS = [:header, :color, :bold, :encoding]
5
+ VALID_OPTIONS = %i[header color bold encoding].freeze
6
6
  attr_accessor :columns, :border, *VALID_OPTIONS
7
7
 
8
8
  def initialize(options = {})
9
- self.validate_options(options, *VALID_OPTIONS)
9
+ validate_options(options, *VALID_OPTIONS)
10
10
 
11
11
  self.columns = []
12
12
  self.border = false
@@ -17,29 +17,23 @@ module CommandLineReporter
17
17
  end
18
18
 
19
19
  def add(column)
20
- if column.color.nil? && self.color
21
- column.color = self.color
22
- end
23
-
24
- if self.bold || self.header
25
- column.bold = true
26
- end
27
-
28
- self.columns << column
20
+ column.color = color if column.color.nil? && color
21
+ column.bold = true if bold || header
22
+ columns << column
29
23
  end
30
24
 
31
25
  def output
32
26
  screen_count.times do |sr|
33
27
  border_char = use_utf8? ? "\u2503" : '|'
34
28
 
35
- line = (self.border) ? "#{border_char} " : ''
29
+ line = border ? "#{border_char} " : ''
36
30
 
37
- self.columns.size.times do |mc|
38
- col = self.columns[mc]
31
+ columns.size.times do |mc|
32
+ col = columns[mc]
39
33
  # Account for the fact that some columns will have more screen rows than their
40
34
  # counterparts in the row. An example being:
41
- # c1 = Column.new('x' * 50, :width => 10)
42
- # c2 = Column.new('x' * 20, :width => 10)
35
+ # c1 = Column.new('x' * 50, width: 10)
36
+ # c2 = Column.new('x' * 20, width: 10)
43
37
  #
44
38
  # c1.screen_rows.size == 5
45
39
  # c2.screen_rows.size == 2
@@ -58,12 +52,12 @@ module CommandLineReporter
58
52
  if col.screen_rows[sr].nil?
59
53
  line << ' ' * col.width << ' '
60
54
  else
61
- line << self.columns[mc].screen_rows[sr] << ' '
55
+ line << columns[mc].screen_rows[sr] << ' '
62
56
  end
63
57
 
64
- if self.border
58
+ if border
65
59
  line << border_char
66
- line << ' ' if mc < self.columns.size - 1
60
+ line << ' ' if mc < columns.size - 1
67
61
  end
68
62
  end
69
63
 
@@ -74,11 +68,11 @@ module CommandLineReporter
74
68
  private
75
69
 
76
70
  def screen_count
77
- @sc ||= self.columns.inject(0) {|max,column| column.screen_rows.size > max ? column.screen_rows.size : max}
71
+ @sc ||= columns.inject(0) { |a, e| e.screen_rows.size > a ? e.screen_rows.size : a }
78
72
  end
79
73
 
80
74
  def use_utf8?
81
- self.encoding == :unicode && "\u2501" != "u2501"
75
+ encoding == :unicode && "\u2501" != 'u2501'
82
76
  end
83
77
  end
84
78
  end