journal-cli 1.0.31 → 1.0.32

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.
@@ -17,67 +17,67 @@ module Color
17
17
  # @example Send a text string as a color
18
18
  # Color.send('red') => "\e[31m"
19
19
  ATTRIBUTES = [
20
- [:clear, 0], # String#clear is already used to empty string in Ruby 1.9
21
- [:reset, 0], # synonym for :clear
22
- [:bold, 1],
23
- [:dark, 2],
24
- [:italic, 3], # not widely implemented
25
- [:underline, 4],
26
- [:underscore, 4], # synonym for :underline
27
- [:blink, 5],
28
- [:rapid_blink, 6], # not widely implemented
29
- [:negative, 7], # no reverse because of String#reverse
30
- [:concealed, 8],
31
- [:strikethrough, 9], # not widely implemented
32
- [:strike, 9], # not widely implemented
33
- [:black, 30],
34
- [:red, 31],
35
- [:green, 32],
36
- [:yellow, 33],
37
- [:blue, 34],
38
- [:magenta, 35],
39
- [:purple, 35],
40
- [:cyan, 36],
41
- [:white, 37],
42
- [:bgblack, 40],
43
- [:bgred, 41],
44
- [:bggreen, 42],
45
- [:bgyellow, 43],
46
- [:bgblue, 44],
47
- [:bgmagenta, 45],
48
- [:bgpurple, 45],
49
- [:bgcyan, 46],
50
- [:bgwhite, 47],
51
- [:boldblack, 90],
52
- [:boldred, 91],
53
- [:boldgreen, 92],
54
- [:boldyellow, 93],
55
- [:boldblue, 94],
56
- [:boldmagenta, 95],
57
- [:boldpurple, 95],
58
- [:boldcyan, 96],
59
- [:boldwhite, 97],
60
- [:boldbgblack, 100],
61
- [:boldbgred, 101],
62
- [:boldbggreen, 102],
63
- [:boldbgyellow, 103],
64
- [:boldbgblue, 104],
65
- [:boldbgmagenta, 105],
66
- [:boldbgpurple, 105],
67
- [:boldbgcyan, 106],
68
- [:boldbgwhite, 107],
69
- [:softpurple, '0;35;40'],
70
- [:hotpants, '7;34;40'],
71
- [:knightrider, '7;30;40'],
72
- [:flamingo, '7;31;47'],
73
- [:yeller, '1;37;43'],
74
- [:whiteboard, '1;30;47'],
75
- [:chalkboard, '1;37;40'],
76
- [:led, '0;32;40'],
77
- [:redacted, '0;30;40'],
78
- [:alert, '1;31;43'],
79
- [:error, '1;37;41'],
80
- [:default, '0;39']
20
+ [:clear, 0], # String#clear is already used to empty string in Ruby 1.9
21
+ [:reset, 0], # synonym for :clear
22
+ [:bold, 1],
23
+ [:dark, 2],
24
+ [:italic, 3], # not widely implemented
25
+ [:underline, 4],
26
+ [:underscore, 4], # synonym for :underline
27
+ [:blink, 5],
28
+ [:rapid_blink, 6], # not widely implemented
29
+ [:negative, 7], # no reverse because of String#reverse
30
+ [:concealed, 8],
31
+ [:strikethrough, 9], # not widely implemented
32
+ [:strike, 9], # not widely implemented
33
+ [:black, 30],
34
+ [:red, 31],
35
+ [:green, 32],
36
+ [:yellow, 33],
37
+ [:blue, 34],
38
+ [:magenta, 35],
39
+ [:purple, 35],
40
+ [:cyan, 36],
41
+ [:white, 37],
42
+ [:bgblack, 40],
43
+ [:bgred, 41],
44
+ [:bggreen, 42],
45
+ [:bgyellow, 43],
46
+ [:bgblue, 44],
47
+ [:bgmagenta, 45],
48
+ [:bgpurple, 45],
49
+ [:bgcyan, 46],
50
+ [:bgwhite, 47],
51
+ [:boldblack, 90],
52
+ [:boldred, 91],
53
+ [:boldgreen, 92],
54
+ [:boldyellow, 93],
55
+ [:boldblue, 94],
56
+ [:boldmagenta, 95],
57
+ [:boldpurple, 95],
58
+ [:boldcyan, 96],
59
+ [:boldwhite, 97],
60
+ [:boldbgblack, 100],
61
+ [:boldbgred, 101],
62
+ [:boldbggreen, 102],
63
+ [:boldbgyellow, 103],
64
+ [:boldbgblue, 104],
65
+ [:boldbgmagenta, 105],
66
+ [:boldbgpurple, 105],
67
+ [:boldbgcyan, 106],
68
+ [:boldbgwhite, 107],
69
+ [:softpurple, "0;35;40"],
70
+ [:hotpants, "7;34;40"],
71
+ [:knightrider, "7;30;40"],
72
+ [:flamingo, "7;31;47"],
73
+ [:yeller, "1;37;43"],
74
+ [:whiteboard, "1;30;47"],
75
+ [:chalkboard, "1;37;40"],
76
+ [:led, "0;32;40"],
77
+ [:redacted, "0;30;40"],
78
+ [:alert, "1;31;43"],
79
+ [:error, "1;37;41"],
80
+ [:default, "0;39"]
81
81
  ].map(&:freeze).freeze
82
82
 
83
83
  # Array of attribute keys only
@@ -109,8 +109,8 @@ module Color
109
109
  ##
110
110
  def validate_color
111
111
  valid_color = nil
112
- compiled = ''
113
- normalize_color.split('').each do |char|
112
+ compiled = ""
113
+ normalize_color.chars.each do |char|
114
114
  compiled += char
115
115
  valid_color = compiled if Color.attributes.include?(compiled.to_sym) || compiled =~ /^([fb]g?)?#([a-f0-9]{6})$/i
116
116
  end
@@ -126,7 +126,7 @@ module Color
126
126
  ## @return [String] Normalized color name
127
127
  ##
128
128
  def normalize_color
129
- gsub(/_/, '').sub(/bright/i, 'bold').sub(/bgbold/, 'boldbg')
129
+ delete("_").sub(/bright/i, "bold").sub(/bgbold/, "boldbg")
130
130
  end
131
131
 
132
132
  # Get the calculated ANSI color at the end of the
@@ -137,7 +137,7 @@ module Color
137
137
  def last_color_code
138
138
  m = scan(ESCAPE_REGEX)
139
139
 
140
- em = ['0']
140
+ em = ["0"]
141
141
  fg = nil
142
142
  bg = nil
143
143
  rgbf = nil
@@ -145,8 +145,8 @@ module Color
145
145
 
146
146
  m.each do |c|
147
147
  case c
148
- when '0'
149
- em = ['0']
148
+ when "0"
149
+ em = ["0"]
150
150
  fg, bg, rgbf, rgbb = nil
151
151
  when /^[34]8/
152
152
  case c
@@ -158,7 +158,7 @@ module Color
158
158
  rgbb = c
159
159
  end
160
160
  else
161
- c.split(/;/).each do |i|
161
+ c.split(";").each do |i|
162
162
  x = i.to_i
163
163
  if x <= 9
164
164
  em << x
@@ -179,10 +179,10 @@ module Color
179
179
  end
180
180
  end
181
181
 
182
- escape = "\e[#{em.join(';')}m"
182
+ escape = "\e[#{em.join(";")}m"
183
183
  escape += "\e[#{rgbb}m" if rgbb
184
184
  escape += "\e[#{rgbf}m" if rgbf
185
- escape + "\e[#{[fg, bg].delete_if(&:nil?).join(';')}m"
185
+ escape + "\e[#{[fg, bg].delete_if(&:nil?).join(";")}m"
186
186
  end
187
187
  end
188
188
 
@@ -230,24 +230,24 @@ module Color
230
230
  ## @return [String] Colorized string
231
231
  ##
232
232
  def template(input)
233
- input = input.join(' ') if input.is_a? Array
234
- return input.gsub(/(?<!\\)\{(\w+)\}/i, '') unless Color.coloring?
233
+ input = input.join(" ") if input.is_a? Array
234
+ return input.gsub(/(?<!\\)\{(\w+)\}/i, "") unless Color.coloring?
235
235
 
236
236
  input = input.gsub(/(?<!\\)\{((?:[fb]g?)?#[a-f0-9]{3,6})\}/i) do
237
- hex = Regexp.last_match(1)
238
- rgb(hex)
239
- end
237
+ hex = Regexp.last_match(1)
238
+ rgb(hex)
239
+ end
240
240
 
241
- fmt = input.gsub(/%/, '%%')
241
+ fmt = input.gsub(/%/, "%%")
242
242
  fmt = fmt.gsub(/(?<!\\)\{(\w+)\}/i) do
243
- Regexp.last_match(1).split('').map { |c| "%<#{c}>s" }.join('')
243
+ Regexp.last_match(1).chars.map { |c| "%<#{c}>s" }.join("")
244
244
  end
245
245
 
246
- colors = { w: white, k: black, g: green, l: blue,
247
- y: yellow, c: cyan, m: magenta, r: red,
248
- W: bgwhite, K: bgblack, G: bggreen, L: bgblue,
249
- Y: bgyellow, C: bgcyan, M: bgmagenta, R: bgred,
250
- d: dark, b: bold, u: underline, i: italic, x: reset }
246
+ colors = {w: white, k: black, g: green, l: blue,
247
+ y: yellow, c: cyan, m: magenta, r: red,
248
+ W: bgwhite, K: bgblack, G: bggreen, L: bgblue,
249
+ Y: bgyellow, C: bgcyan, M: bgmagenta, R: bgred,
250
+ d: dark, b: bold, u: underline, i: italic, x: reset}
251
251
 
252
252
  format(fmt, colors)
253
253
  end
@@ -275,12 +275,12 @@ module Color
275
275
 
276
276
  module_eval(new_method)
277
277
 
278
- next unless c =~ /bold/
278
+ next unless /bold/.match?(c)
279
279
 
280
280
  # Accept brightwhite in addition to boldwhite
281
281
  new_method = <<-EOSCRIPT
282
282
  # color string as #{c}
283
- def #{c.to_s.sub(/bold/, 'bright')}(string = nil)
283
+ def #{c.to_s.sub(/bold/, "bright")}(string = nil)
284
284
  result = ''
285
285
  result << "\e[#{v}m" if Color.coloring?
286
286
  if block_given?
@@ -308,8 +308,8 @@ module Color
308
308
  ## @return [String] ANSI escape string
309
309
  ##
310
310
  def rgb(hex)
311
- is_bg = hex.match(/^bg?#/) ? true : false
312
- hex_string = hex.sub(/^([fb]g?)?#/, '')
311
+ is_bg = /^bg?#/.match?(hex)
312
+ hex_string = hex.sub(/^([fb]g?)?#/, "")
313
313
 
314
314
  if hex_string.length == 3
315
315
  parts = hex_string.match(/(?<r>.)(?<g>.)(?<b>.)/)
@@ -319,7 +319,7 @@ module Color
319
319
  t << parts[e]
320
320
  t << parts[e]
321
321
  end
322
- hex_string = t.join('')
322
+ hex_string = t.join("")
323
323
  end
324
324
 
325
325
  parts = hex_string.match(/(?<r>..)(?<g>..)(?<b>..)/)
@@ -328,7 +328,7 @@ module Color
328
328
  t << parts[e].hex
329
329
  end
330
330
 
331
- "\e[#{is_bg ? '48' : '38'};2;#{t.join(';')}m"
331
+ "\e[#{is_bg ? "48" : "38"};2;#{t.join(";")}m"
332
332
  end
333
333
 
334
334
  # Regular expression that is used to scan for ANSI-sequences while
@@ -339,13 +339,13 @@ module Color
339
339
  # ANSI-sequences are stripped from the string.
340
340
  def uncolor(string = nil) # :yields:
341
341
  if block_given?
342
- yield.to_str.gsub(COLORED_REGEXP, '')
342
+ yield.to_str.gsub(COLORED_REGEXP, "")
343
343
  elsif string.respond_to?(:to_str)
344
- string.to_str.gsub(COLORED_REGEXP, '')
344
+ string.to_str.gsub(COLORED_REGEXP, "")
345
345
  elsif respond_to?(:to_str)
346
- to_str.gsub(COLORED_REGEXP, '')
346
+ to_str.gsub(COLORED_REGEXP, "")
347
347
  else
348
- ''
348
+ ""
349
349
  end
350
350
  end
351
351
 
@@ -13,7 +13,7 @@ module Journal
13
13
  def to_data
14
14
  output = {}
15
15
  @questions.each do |q|
16
- output[q['key']] = self[q['key']]
16
+ output[q["key"]] = self[q["key"]]
17
17
  end
18
18
  output
19
19
  end
@@ -13,14 +13,14 @@ module Journal
13
13
  ## @return [Question] the question object
14
14
  ##
15
15
  def initialize(question)
16
- @key = question['key']
17
- @type = question['type']
18
- @min = question['min']&.to_i || 1
19
- @max = question['max']&.to_i || 5
20
- @prompt = question['prompt'] || nil
21
- @secondary_prompt = question['secondary_prompt'] || nil
22
- @gum = TTY::Which.exist?('gum')
23
- @condition = question.key?('condition') ? question['condition'].parse_condition : true
16
+ @key = question["key"]
17
+ @type = question["type"]
18
+ @min = question["min"]&.to_i || 1
19
+ @max = question["max"]&.to_i || 5
20
+ @prompt = question["prompt"] || nil
21
+ @secondary_prompt = question["secondary_prompt"] || nil
22
+ @gum = TTY::Which.exist?("gum")
23
+ @condition = question.key?("condition") ? question["condition"].parse_condition : true
24
24
  end
25
25
 
26
26
  ##
@@ -41,7 +41,7 @@ module Journal
41
41
  when /^(text|string|line)/i
42
42
  read_line
43
43
  when /^(weather|forecast)/i
44
- Weather.new(Journal.config['weather_api'], Journal.config['zip'], Journal.config['temp_in'])
44
+ Weather.new(Journal.config["weather_api"], Journal.config["zip"], Journal.config["temp_in"])
45
45
  when /^multi/i
46
46
  read_lines
47
47
  when /^(date|time)/i
@@ -92,7 +92,7 @@ module Journal
92
92
  Journal.notify("{by}#{prompt}")
93
93
 
94
94
  line = @gum ? read_line_gum(prompt) : read_line_tty
95
- return output.join("\n") if line =~ /^ *$/
95
+ return output.join("\n") if /^ *$/.match?(line)
96
96
 
97
97
  output << line
98
98
  output << read_line(prompt: @secondary_prompt) unless @secondary_prompt.nil?
@@ -129,7 +129,7 @@ module Journal
129
129
  ##
130
130
  ##
131
131
  def read_number_gum
132
- trap('SIGINT') { exit! }
132
+ trap("SIGINT") { exit! }
133
133
  res = `gum input --placeholder "#{@min}-#{@max}"`.strip
134
134
  return nil if res.strip.empty?
135
135
 
@@ -144,9 +144,9 @@ module Journal
144
144
  ## @return [Number] integer response
145
145
  ##
146
146
  def read_line_tty
147
- trap('SIGINT') { exit! }
147
+ trap("SIGINT") { exit! }
148
148
  reader = TTY::Reader.new
149
- res = reader.read_line('>> ')
149
+ res = reader.read_line(">> ")
150
150
  return nil if res.strip.empty?
151
151
 
152
152
  res
@@ -160,7 +160,7 @@ module Journal
160
160
  ## @return [Number] integer response
161
161
  ##
162
162
  def read_line_gum(prompt)
163
- trap('SIGINT') { exit! }
163
+ trap("SIGINT") { exit! }
164
164
  `gum input --placeholder "#{prompt} (blank to end answer)"`
165
165
  end
166
166
 
@@ -170,7 +170,7 @@ module Journal
170
170
  ## @return [string] multiline input
171
171
  ##
172
172
  def read_mutliline_tty
173
- trap('SIGINT') { exit! }
173
+ trap("SIGINT") { exit! }
174
174
  reader = TTY::Reader.new
175
175
  res = reader.read_multiline
176
176
  res.join("\n")
@@ -182,7 +182,7 @@ module Journal
182
182
  ## @return [string] multiline input
183
183
  ##
184
184
  def read_multiline_gum(prompt)
185
- trap('SIGINT') { exit! }
185
+ trap("SIGINT") { exit! }
186
186
  `gum write --placeholder "#{prompt}" --width 80 --char-limit 0`
187
187
  end
188
188
  end
@@ -13,10 +13,10 @@ module Journal
13
13
  ## @return [Section] the configured section
14
14
  ##
15
15
  def initialize(section)
16
- @key = section['key']
17
- @title = section['title']
18
- @condition = section.key?('condition') ? section['condition'].parse_condition : true
19
- @questions = section['questions'].map { |question| Question.new(question) }
16
+ @key = section["key"]
17
+ @title = section["title"]
18
+ @condition = section.key?("condition") ? section["condition"].parse_condition : true
19
+ @questions = section["questions"].map { |question| Question.new(question) }
20
20
  @questions.delete_if { |q| q.prompt.nil? }
21
21
  @answers = {}
22
22
  ask_questions
@@ -29,9 +29,9 @@ module Journal
29
29
  ##
30
30
  def ask_questions
31
31
  @questions.each do |question|
32
- if question.key =~ /\./
32
+ if /\./.match?(question.key)
33
33
  res = @answers
34
- keys = question.key.split(/\./)
34
+ keys = question.key.split(".")
35
35
  keys.each_with_index do |key, i|
36
36
  next if i == keys.count - 1
37
37
 
@@ -5,17 +5,17 @@ class ::String
5
5
  def parse_condition
6
6
  condition = dup
7
7
  time_rx = /(?<comp>[<>=]{1,2}|before|after) +(?<time>(?:noon|midnight|[0-9]+) *(?:am|pm)?)$/i
8
- return true unless condition =~ time_rx
8
+ return true unless condition&.match?(time_rx)
9
9
 
10
10
  now = Journal.date
11
11
  m = condition.match(time_rx)
12
- time = Chronic.parse(m['time'])
12
+ time = Chronic.parse(m["time"])
13
13
  now.localtime
14
14
  time.localtime
15
- time_of_day = Time.parse("#{now.strftime('%Y-%m-%d')} #{time.strftime('%H:%M')}")
16
- Journal.notify("{br}Invalid time string in question (#{m['time']})", exit_code: 4) unless time
15
+ time_of_day = Time.parse("#{now.strftime("%Y-%m-%d")} #{time.strftime("%H:%M")}")
16
+ Journal.notify("{br}Invalid time string in question (#{m["time"]})", exit_code: 4) unless time
17
17
 
18
- case m['comp']
18
+ case m["comp"]
19
19
  when /^<=$/
20
20
  now <= time_of_day
21
21
  when /^(<|bef)/i
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Journal
4
- VERSION = '1.0.31'
4
+ VERSION = "1.0.32"
5
5
  end
@@ -6,50 +6,50 @@ module Journal
6
6
 
7
7
  def initialize(api, zip, temp_in)
8
8
  Journal.date.localtime
9
- if Journal.date.strftime('%Y-%m-%d') == Time.now.strftime('%Y-%m-%d')
10
- res = `curl -SsL 'http://api.weatherapi.com/v1/forecast.json?key=#{api}&q=#{zip}&aqi=no'`
9
+ res = if Journal.date.strftime("%Y-%m-%d") == Time.now.strftime("%Y-%m-%d")
10
+ `curl -SsL 'http://api.weatherapi.com/v1/forecast.json?key=#{api}&q=#{zip}&aqi=no'`
11
11
  else
12
- res = `curl -SsL 'http://api.weatherapi.com/v1/history.json?key=#{api}&q=#{zip}&aqi=no&dt=#{Journal.date.strftime('%Y-%m-%d')}'`
12
+ `curl -SsL 'http://api.weatherapi.com/v1/history.json?key=#{api}&q=#{zip}&aqi=no&dt=#{Journal.date.strftime("%Y-%m-%d")}'`
13
13
  end
14
14
 
15
15
  data = JSON.parse(res)
16
16
 
17
- raise StandardError, 'invalid JSON response' if data.nil?
17
+ raise StandardError, "invalid JSON response" if data.nil?
18
18
 
19
- raise StandardError, 'mising forecast' unless data['forecast']
19
+ raise StandardError, "missing forecast" unless data["forecast"]
20
20
 
21
- temp_key = temp_in =~ /^c/ ? 'temp_c' : 'temp_f'
21
+ temp_key = /^c/.match?(temp_in) ? "temp_c" : "temp_f"
22
22
 
23
- if Journal.date.strftime('%Y-%m-%d') == Time.now.strftime('%Y-%m-%d')
24
- raise StandardError, 'missing conditions' unless data['current']
23
+ if Journal.date.strftime("%Y-%m-%d") == Time.now.strftime("%Y-%m-%d")
24
+ raise StandardError, "missing conditions" unless data["current"]
25
25
 
26
- curr_temp = data['current'][temp_key]
27
- curr_condition = data['current']['condition']['text']
26
+ curr_temp = data["current"][temp_key]
27
+ curr_condition = data["current"]["condition"]["text"]
28
28
  else
29
- time = Journal.date.strftime('%Y-%m-%d %H:00')
30
- hour = data['forecast']['forecastday'][0]['hour'].filter { |h| h['time'].to_s =~ /#{time}/ }.first
29
+ time = Journal.date.strftime("%Y-%m-%d %H:00")
30
+ hour = data["forecast"]["forecastday"][0]["hour"].find { |h| h["time"].to_s =~ /#{time}/ }
31
31
  curr_temp = hour[temp_key]
32
- curr_condition = hour['condition']['text']
32
+ curr_condition = hour["condition"]["text"]
33
33
  end
34
34
 
35
- forecast = data['forecast']['forecastday'][0]
35
+ forecast = data["forecast"]["forecastday"][0]
36
36
 
37
- moon_phase = forecast['astro']['moon_phase']
37
+ moon_phase = forecast["astro"]["moon_phase"]
38
38
 
39
- day = forecast['date']
40
- high = temp_in =~ /^c/ ? forecast['day']['maxtemp_c'] : forecast['day']['maxtemp_f']
41
- low = temp_in =~ /^c/ ? forecast['day']['mintemp_c'] : forecast['day']['mintemp_f']
42
- condition = forecast['day']['condition']['text']
39
+ day = forecast["date"]
40
+ high = /^c/.match?(temp_in) ? forecast["day"]["maxtemp_c"] : forecast["day"]["maxtemp_f"]
41
+ low = /^c/.match?(temp_in) ? forecast["day"]["mintemp_c"] : forecast["day"]["mintemp_f"]
42
+ condition = forecast["day"]["condition"]["text"]
43
43
 
44
- hours = forecast['hour']
44
+ hours = forecast["hour"]
45
45
  temps = [
46
- { temp: hours[8][temp_key], condition: hours[8]['condition']['text'] },
47
- { temp: hours[10][temp_key], condition: hours[10]['condition']['text'] },
48
- { temp: hours[12][temp_key], condition: hours[12]['condition']['text'] },
49
- { temp: hours[14][temp_key], condition: hours[14]['condition']['text'] },
50
- { temp: hours[16][temp_key], condition: hours[16]['condition']['text'] },
51
- { temp: hours[18][temp_key], condition: hours[18]['condition']['text'] },
52
- { temp: hours[19][temp_key], condition: hours[20]['condition']['text'] }
46
+ {temp: hours[8][temp_key], condition: hours[8]["condition"]["text"]},
47
+ {temp: hours[10][temp_key], condition: hours[10]["condition"]["text"]},
48
+ {temp: hours[12][temp_key], condition: hours[12]["condition"]["text"]},
49
+ {temp: hours[14][temp_key], condition: hours[14]["condition"]["text"]},
50
+ {temp: hours[16][temp_key], condition: hours[16]["condition"]["text"]},
51
+ {temp: hours[18][temp_key], condition: hours[18]["condition"]["text"]},
52
+ {temp: hours[19][temp_key], condition: hours[20]["condition"]["text"]}
53
53
  ]
54
54
 
55
55
  @data = {
@@ -95,43 +95,43 @@ module Journal
95
95
  output << "Forecast for #{@data[:day]}: #{forecast} "
96
96
  output << "Currently: #{current} "
97
97
  output << "Moon Phase: #{moon} "
98
- output << ''
98
+ output << ""
99
99
 
100
100
  # Hours
101
101
  hours_text = %w[8am 10am 12pm 2pm 4pm 6pm 8pm]
102
- step_out = ['|']
102
+ step_out = ["|"]
103
103
  @data[:temps].each_with_index do |_h, i|
104
104
  width = @data[:temps][i][:condition].length + 1
105
105
  step_out << format("%#{width}s |", hours_text[i])
106
106
  end
107
107
 
108
- output << step_out.join('')
108
+ output << step_out.join("")
109
109
 
110
110
  # table separator
111
- step_out = ['|']
111
+ step_out = ["|"]
112
112
  @data[:temps].each do |temp|
113
113
  width = temp[:condition].length + 1
114
- step_out << "#{'-' * width}-|"
114
+ step_out << "#{"-" * width}-|"
115
115
  end
116
116
 
117
- output << step_out.join('')
117
+ output << step_out.join("")
118
118
 
119
119
  # Conditions
120
- step_out = ['|']
120
+ step_out = ["|"]
121
121
  @data[:temps].each do |temp|
122
- step_out << format(' %s |', temp[:condition])
122
+ step_out << format(" %s |", temp[:condition])
123
123
  end
124
124
 
125
- output << step_out.join('')
125
+ output << step_out.join("")
126
126
 
127
127
  # Temps
128
- step_out = ['|']
128
+ step_out = ["|"]
129
129
  @data[:temps].each do |temp|
130
130
  width = temp[:condition].length + 1
131
131
  step_out << format("%#{width}s |", temp[:temp])
132
132
  end
133
133
 
134
- output << step_out.join('')
134
+ output << step_out.join("")
135
135
 
136
136
  output.join("\n")
137
137
  end