command_line_reporter 3.3.6 → 4.0.0

Sign up to get free protection for your applications and to get access to all the features.
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