journal-cli 1.0.27 → 1.0.29

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
  SHA256:
3
- metadata.gz: f0e13de67e2b05c78b16ff3e4c98e151c5de7b3be51079749599c804d7ea984e
4
- data.tar.gz: e4112cccece8944e08e0b83dcdf598c0469282062622d15d0e98063a5ff85ee9
3
+ metadata.gz: e8f83764338d653909b55685394ab55398913f1dfdf5a529bfe2d7e94857c586
4
+ data.tar.gz: c068e0799c4438f45aad8ac2e265d42324da686712a85c1709cd491ea1ca476f
5
5
  SHA512:
6
- metadata.gz: 95667e40648e73f25146b6c321142ba1abba26cd9aeefc4b6209e8c86e1452e0b2dc27e066a0ef3af88ed8f46a9c4961a26de71428b3638193e233aecdda479c
7
- data.tar.gz: 20bf7846052db8f466be5d45dde9e165d8c04a23cef87b53d304b68ce8dc7da621ac97644bda6c6944c8a99b0cec0471c8e6f4a78b4761d151c4942838d80192
6
+ metadata.gz: 8f35ef77c9762043790ee535e28a0892f78681f5895bd0db6cdb476e13524a35ccf0d80d31dff201a7307d630fc6f59729c9ba7b83698b7bbb428669cceafb96
7
+ data.tar.gz: 28fbd4e7ec6ac0ee506a8bed4413985a9424d6327025b571843bc0d28d17a17747808d33baa7d31d39d3e1e8b941c32a9dcf9883e5c5659af996261e7dc7f514
data/CHANGELOG.md CHANGED
@@ -1,3 +1,20 @@
1
+ ### 1.0.29
2
+
3
+ 2023-10-01 15:24
4
+
5
+ #### IMPROVED
6
+
7
+ - Config option `temp_in` can be set to `c` or `f` to control what scale temps are recorded in
8
+
9
+ ### 1.0.28
10
+
11
+ 2023-09-30 11:01
12
+
13
+ #### IMPROVED
14
+
15
+ - If creating an entry for a past date, get the historical weather for that date
16
+ - Add weather.moon type for getting moon phase, and include moon_phase in general weather data
17
+
1
18
  ### 1.0.27
2
19
 
3
20
  2023-09-23 08:03
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- journal-cli (1.0.27)
4
+ journal-cli (1.0.29)
5
5
  chronic (~> 0.10, >= 0.10.2)
6
6
  tty-reader (~> 0.9, >= 0.9.0)
7
7
  tty-which (~> 0.5, >= 0.5.0)
data/README.md CHANGED
@@ -56,6 +56,8 @@ If a question type is set to `weather.forecast`, only the predicted condition, h
56
56
 
57
57
  If the question type is `weather.current`, only the current condition and temperature will be recorded to the JSON, and a string containing "[TEMP] and [CONDITION]" (e.g. "64 and Sunny") will be recorded to Markdown/Day One for the question.
58
58
 
59
+ If the question type is `weather.moon`, only the moon phase will be output. Moon phase is also included in `weather.forecast` JSON and Markdown output.
60
+
59
61
  ### Journal Configuration
60
62
 
61
63
  Edit the file at `~/.config/journal/journals.yaml` following this structure:
@@ -148,8 +150,9 @@ A question `type` can be one of:
148
150
  - `text` or `string` will request a single-line string, submitted on return
149
151
  - `multiline` for multiline strings (opens a readline editor, use ctrl-d to save)
150
152
  - `weather` will just insert current weather data with no prompt
151
- * `weather.forecast` will insert just the forecast
152
- * `weather.current` will insert just the current temperature and condition
153
+ * `weather.forecast` will insert just the forecast (using weather history for backdated entries)
154
+ * `weather.current` will insert just the current temperature and condition (using weather history for backdated entries)
155
+ * `weather.moon` will insert the current moon phase for the entry date
153
156
  - `number` or `float` will request numeric input, stored as a float (decimal)
154
157
  - `integer` will convert numeric input to the nearest integer
155
158
  - `date` will request a natural language date which will be parsed into a date object
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ class ::Array
4
+ def shortest
5
+ inject { |memo, word| memo.length < word.length ? memo : word }
6
+ end
7
+
8
+ def longest
9
+ inject { |memo, word| memo.length > word.length ? memo : word }
10
+ end
11
+ end
@@ -136,11 +136,13 @@ module Journal
136
136
  return if data.nil? || !data.key?(key) || data[key].nil?
137
137
 
138
138
  case type
139
- when /^(weather|forecast)/
139
+ when /^(weather|forecast|moon)/
140
140
  header prompt
141
141
  @output << case type
142
142
  when /current$/
143
143
  data[key].current
144
+ when /moon$/
145
+ "Moon phase: #{data[key].moon}"
144
146
  else
145
147
  data[key].to_markdown
146
148
  end
@@ -174,6 +176,8 @@ module Journal
174
176
  v.current
175
177
  when /forecast$/
176
178
  data[k] = v.forecast
179
+ when /moon(_?phase)?$/
180
+ data[k] = v.moon
177
181
  else
178
182
  data[k] = v.to_s
179
183
  end
@@ -258,17 +262,23 @@ module Journal
258
262
  v.each do |key, value|
259
263
  result = case value.class.to_s
260
264
  when /Weather/
261
- if key =~ /current$/
262
- {
263
- 'temp' => value.data[:temp],
264
- 'condition' => value.data[:current_condition]
265
- }
266
- else
267
- {
268
- 'high' => value.data[:high],
269
- 'low' => value.data[:low],
270
- 'condition' => value.data[:condition]
271
- }
265
+ case key
266
+ when /current$/
267
+ {
268
+ 'temp' => value.data[:temp],
269
+ 'condition' => value.data[:current_condition]
270
+ }
271
+ when /moon(_?phase)?$/
272
+ {
273
+ 'phase' => value.data[:moon_phase]
274
+ }
275
+ else
276
+ {
277
+ 'high' => value.data[:high],
278
+ 'low' => value.data[:low],
279
+ 'condition' => value.data[:condition],
280
+ 'moon_phase' => value.data[:moon_phase]
281
+ }
272
282
  end
273
283
  else
274
284
  value
@@ -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'])
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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Journal
4
- VERSION = '1.0.27'
4
+ VERSION = '1.0.29'
5
5
  end
@@ -4,35 +4,52 @@ module Journal
4
4
  class Weather
5
5
  attr_reader :data
6
6
 
7
- def initialize(api, zip)
8
- res = `curl -SsL 'http://api.weatherapi.com/v1/forecast.json?key=#{api}&q=#{zip}&aqi=no'`
7
+ def initialize(api, zip, temp_in)
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'`
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')}'`
13
+ end
14
+
9
15
  data = JSON.parse(res)
10
16
 
11
17
  raise StandardError, 'invalid JSON response' if data.nil?
12
18
 
13
- raise StandardError, 'missing conditions' unless data['current']
19
+ raise StandardError, 'mising forecast' unless data['forecast']
20
+
21
+ temp_key = temp_in =~ /^c/ ? 'temp_c' : 'temp_f'
14
22
 
15
- curr_temp = data['current']['temp_f']
16
- curr_condition = data['current']['condition']['text']
23
+ if Journal.date.strftime('%Y-%m-%d') == Time.now.strftime('%Y-%m-%d')
24
+ raise StandardError, 'missing conditions' unless data['current']
17
25
 
18
- raise StandardError, 'mising forecast' unless data['forecast']
26
+ curr_temp = data['current'][temp_key]
27
+ curr_condition = data['current']['condition']['text']
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
31
+ curr_temp = hour[temp_key]
32
+ curr_condition = hour['condition']['text']
33
+ end
19
34
 
20
35
  forecast = data['forecast']['forecastday'][0]
21
36
 
37
+ moon_phase = forecast['astro']['moon_phase']
38
+
22
39
  day = forecast['date']
23
- high = forecast['day']['maxtemp_f']
24
- low = forecast['day']['mintemp_f']
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']
25
42
  condition = forecast['day']['condition']['text']
26
43
 
27
44
  hours = forecast['hour']
28
45
  temps = [
29
- { temp: hours[8]['temp_f'], condition: hours[8]['condition']['text'] },
30
- { temp: hours[10]['temp_f'], condition: hours[10]['condition']['text'] },
31
- { temp: hours[12]['temp_f'], condition: hours[12]['condition']['text'] },
32
- { temp: hours[14]['temp_f'], condition: hours[14]['condition']['text'] },
33
- { temp: hours[16]['temp_f'], condition: hours[16]['condition']['text'] },
34
- { temp: hours[18]['temp_f'], condition: hours[18]['condition']['text'] },
35
- { temp: hours[19]['temp_f'], 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'] }
36
53
  ]
37
54
 
38
55
  @data = {
@@ -42,18 +59,24 @@ module Journal
42
59
  temp: curr_temp,
43
60
  condition: condition,
44
61
  current_condition: curr_condition,
45
- temps: temps
62
+ temps: temps,
63
+ moon_phase: moon_phase
46
64
  }
47
65
  end
48
66
 
49
67
  def to_data
50
68
  {
51
- high: high,
52
- low: low,
53
- condition: curr_condition
69
+ high: @data[:high],
70
+ low: @data[:low],
71
+ condition: @data[:current_condition],
72
+ moon_phase: @data[:moon_phase]
54
73
  }
55
74
  end
56
75
 
76
+ def moon
77
+ @data[:moon_phase]
78
+ end
79
+
57
80
  def current
58
81
  "#{@data[:temp]} and #{@data[:current_condition]}"
59
82
  end
@@ -70,7 +93,8 @@ module Journal
70
93
  output = []
71
94
 
72
95
  output << "Forecast for #{@data[:day]}: #{forecast} "
73
- output << "Currently: #{current}"
96
+ output << "Currently: #{current} "
97
+ output << "Moon Phase: #{moon} "
74
98
  output << ''
75
99
 
76
100
  # Hours
data/src/_README.md CHANGED
@@ -59,6 +59,8 @@ If a question type is set to `weather.forecast`, only the predicted condition, h
59
59
 
60
60
  If the question type is `weather.current`, only the current condition and temperature will be recorded to the JSON, and a string containing "[TEMP] and [CONDITION]" (e.g. "64 and Sunny") will be recorded to Markdown/Day One for the question.
61
61
 
62
+ If the question type is `weather.moon`, only the moon phase will be output. Moon phase is also included in `weather.forecast` JSON and Markdown output.
63
+
62
64
  ### Journal Configuration
63
65
 
64
66
  Edit the file at `~/.config/journal/journals.yaml` following this structure:
@@ -151,8 +153,9 @@ A question `type` can be one of:
151
153
  - `text` or `string` will request a single-line string, submitted on return
152
154
  - `multiline` for multiline strings (opens a readline editor, use ctrl-d to save)
153
155
  - `weather` will just insert current weather data with no prompt
154
- * `weather.forecast` will insert just the forecast
155
- * `weather.current` will insert just the current temperature and condition
156
+ * `weather.forecast` will insert just the forecast (using weather history for backdated entries)
157
+ * `weather.current` will insert just the current temperature and condition (using weather history for backdated entries)
158
+ * `weather.moon` will insert the current moon phase for the entry date
156
159
  - `number` or `float` will request numeric input, stored as a float (decimal)
157
160
  - `integer` will convert numeric input to the nearest integer
158
161
  - `date` will request a natural language date which will be parsed into a date object
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: journal-cli
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.27
4
+ version: 1.0.29
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brett Terpstra
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-09-23 00:00:00.000000000 Z
11
+ date: 2023-10-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: tty-which
@@ -232,6 +232,7 @@ files:
232
232
  - bin/journal
233
233
  - journal-cli.gemspec
234
234
  - lib/journal-cli.rb
235
+ - lib/journal-cli/array.rb
235
236
  - lib/journal-cli/checkin.rb
236
237
  - lib/journal-cli/color.rb
237
238
  - lib/journal-cli/data.rb