From acf8d4275d5c6cd5dbe5e867b671d8d06d72634e Mon Sep 17 00:00:00 2001 From: Roscoe Date: Sun, 26 Oct 2025 23:57:02 +0000 Subject: [PATCH] Improve code formatting --- .rubocop.yml | 4 + main.rb | 356 +++++++++++++++++++++++++-------------------------- 2 files changed, 182 insertions(+), 178 deletions(-) diff --git a/.rubocop.yml b/.rubocop.yml index 9ced3f2..313766c 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -10,3 +10,7 @@ Layout/IndentationWidth: Enabled: false Layout/FirstArgumentIndentation: Enabled: false +Layout/LineLength: + Enabled: false +Metrics/BlockLength: + Enabled: false diff --git a/main.rb b/main.rb index 167fe18..c8930df 100644 --- a/main.rb +++ b/main.rb @@ -11,204 +11,204 @@ options = { :user_name => ENV['SMTP_UNAME'], :password => ENV['SMTP_PWORD'], :authentication => :plain, # :plain, :login, :cram_md5, no auth by default - :domain => ENV['SMTP_DOMAIN'], # the HELO domain provided by the client to the server + :domain => ENV['SMTP_DOMAIN'] # the HELO domain provided by the client to the server } begin - client = Mysql2::Client.new( - host: ENV['MARIA_HOST'], - port: ENV['MARIA_PORT'], - username: ENV['MARIA_UNAME'], - password: ENV['MARIA_PWORD'], - database: ENV['MARIA_DBASE'] - ) - puts "Successfully connected to MariaDB!" + client = Mysql2::Client.new( + host: ENV['MARIA_HOST'], + port: ENV['MARIA_PORT'], + username: ENV['MARIA_UNAME'], + password: ENV['MARIA_PWORD'], + database: ENV['MARIA_DBASE'] + ) - puts "Compiling data..." - results_today = client.query(%( - SELECT LogDateTime, temp, dew, hum, rrate, rmonth, ryear - FROM Realtime - WHERE CAST(LogDateTime AS DATE) = CAST(NOW() AS DATE) - ORDER BY LogDateTime ASC - )) - results_now = client.query(%( - SELECT LogDateTime, temp, dew, hum, press, presstrendval, rfall, rrate, rainunit, wspeed, wgust, windunit, - windTM, TwindTM, wgustTM, TwgustTM - FROM Realtime - ORDER BY LogDateTime DESC - LIMIT 1 - )) + puts 'Successfully connected to MariaDB!' - today = results_today.first - now = results_now.first + puts 'Compiling data...' + results_today = client.query(%( + SELECT LogDateTime, temp, dew, hum, rrate, rmonth, ryear + FROM Realtime + WHERE CAST(LogDateTime AS DATE) = CAST(NOW() AS DATE) + ORDER BY LogDateTime ASC + )) + results_now = client.query(%( + SELECT LogDateTime, temp, dew, hum, press, presstrendval, rfall, rrate, rainunit, wspeed, wgust, windunit, + windTM, TwindTM, wgustTM, TwgustTM + FROM Realtime + ORDER BY LogDateTime DESC + LIMIT 1 + )) - maxmin = { - :temp => { - :max => { - :value => -1000, - :time => nil - }, - :min => { - :value => 1000, - :time => nil - } + today = results_today.first + now = results_now.first + + maxmin = { + :temp => { + :max => { + :value => -1000, + :time => nil }, - :dew => { - :max => { - :value => -1000, - :time => nil - }, - :min => { - :value => 1000, - :time => nil - } + :min => { + :value => 1000, + :time => nil + } + }, + :dew => { + :max => { + :value => -1000, + :time => nil }, - :hum => { - :max => { - :value => -1, - :time => nil - }, - :min => { - :value => 101, - :time => nil - } + :min => { + :value => 1000, + :time => nil + } + }, + :hum => { + :max => { + :value => -1, + :time => nil }, - :rainrate => { - :max => { - :value => 0, - :time => nil - } + :min => { + :value => 101, + :time => nil + } + }, + :rainrate => { + :max => { + :value => 0, + :time => nil } } + } - results_today.each do |result| - # Max Temp - if result['temp'] >= maxmin[:temp][:max][:value] - maxmin[:temp][:max][:value] = result['temp'].to_f - maxmin[:temp][:max][:time] = result['LogDateTime'].strftime("%H:%M") - end - - # Min Temp - if result['temp'] <= maxmin[:temp][:min][:value] - maxmin[:temp][:min][:value] = result['temp'].to_f - maxmin[:temp][:min][:time] = result['LogDateTime'].strftime("%H:%M") - end - - # Max Dew Point - if result['dew'] >= maxmin[:dew][:max][:value] - maxmin[:dew][:max][:value] = result['dew'].to_f - maxmin[:dew][:max][:time] = result['LogDateTime'].strftime("%H:%M") - end - - # Min Dew Point - if result['dew'] <= maxmin[:dew][:min][:value] - maxmin[:dew][:min][:value] = result['dew'].to_f - maxmin[:dew][:min][:time] = result['LogDateTime'].strftime("%H:%M") - end - - # Max Humidity - if result['hum'] >= maxmin[:hum][:max][:value] - maxmin[:hum][:max][:value] = result['hum'] - maxmin[:hum][:max][:time] = result['LogDateTime'].strftime("%H:%M") - end - - # Min Humidity - if result['hum'] <= maxmin[:hum][:min][:value] - maxmin[:hum][:min][:value] = result['hum'] - maxmin[:hum][:min][:time] = result['LogDateTime'].strftime("%H:%M") - end - - # Max Rain Rate - if result['rrate'] >= maxmin[:rainrate][:max][:value] - maxmin[:rainrate][:max][:value] = result['rrate'].to_f - maxmin[:rainrate][:max][:time] = result['LogDateTime'].strftime("%H:%M") - end + results_today.each do |result| + # Max Temp + if result['temp'] >= maxmin[:temp][:max][:value] + maxmin[:temp][:max][:value] = result['temp'].to_f + maxmin[:temp][:max][:time] = result['LogDateTime'].strftime('%H:%M') end - puts "Data compiled!" - - puts "Generating e-mail body..." - - table = Terminal::Table.new :title => "Weather Summary as of #{now["LogDateTime"].strftime("%l:%M %p, %a %b %d %Y")}" do |t| - t << [ - { :value => "Temperature", :colspan => 2, :alignment => :center}, - { :value => "Dew Point", :colspan => 2, :alignment => :center} - ] - t << :separator - t << [ - "Current", "#{now["temp"].to_s("F")}C", - "Current", "#{now["dew"].to_s("F")}C" - ] - t << [ - "Today's High", "#{maxmin[:temp][:max][:value]}C at #{maxmin[:temp][:max][:time]}", - "Today's High", "#{maxmin[:dew][:max][:value]}C at #{maxmin[:dew][:max][:time]}" - ] - t << [ - "Today's Low", "#{maxmin[:temp][:min][:value]}C at #{maxmin[:temp][:min][:time]}", - "Today's Low", "#{maxmin[:dew][:min][:value]}C at #{maxmin[:dew][:min][:time]}" - ] - t << :separator - t << [ - { :value => "Humidity", :colspan => 2, :alignment => :center}, - { :value => "Barometric Pressure (SL)", :colspan => 2, :alignment => :center} - ] - t << :separator - t << [ - "Current", "#{now["hum"]}%", - "Current", "#{now["press"].to_s("F")} mb" - ] - t << [ - "Today's High", "#{maxmin[:hum][:max][:value]}% at #{maxmin[:hum][:max][:time]}", - "Trend", "#{now["presstrendval"]} mb/hr" - ] - t << [ - "Today's Low", "#{maxmin[:hum][:min][:value]}% at #{maxmin[:hum][:min][:time]}", - "","" - ] - t << :separator - t << [ - { :value => "Rain", :colspan => 2, :alignment => :center}, - { :value => "Wind", :colspan => 2, :alignment => :center} - ] - t << :separator - t << [ - "Current Rate", "#{now["rrate"]} #{now["rainunit"]}", - "Current Speed", "#{now["wspeed"].to_s} #{now["windunit"]}" - ] - t << [ - "Today's High Rate", "#{maxmin[:rainrate][:max][:value]} #{now["rainunit"]} at #{maxmin[:rainrate][:max][:time]}", - "Gust", "#{now["wgust"].to_s} #{now["windunit"]}" - ] - t << [ - "Today's Total", "#{now["rfall"].to_s("F")} #{now["rainunit"]}", - "Today's High Speed", "#{now["windTM"].to_s} #{now["windunit"]} at #{now["TwindTM"]}" - ] - t << [ - "Monthly Total","#{today["rmonth"].to_s("F")} #{now["rainunit"]}", - "Today's High Gust", "#{now["wgustTM"]} #{now["windunit"]} at #{now["TwgustTM"]}" - ] - t << [ - "Yearly Total","#{today["ryear"].to_s("F")} #{now["rainunit"]}", - "", "" - ] + # Min Temp + if result['temp'] <= maxmin[:temp][:min][:value] + maxmin[:temp][:min][:value] = result['temp'].to_f + maxmin[:temp][:min][:time] = result['LogDateTime'].strftime('%H:%M') end - puts "E-mail body generated!" + # Max Dew Point + if result['dew'] >= maxmin[:dew][:max][:value] + maxmin[:dew][:max][:value] = result['dew'].to_f + maxmin[:dew][:max][:time] = result['LogDateTime'].strftime('%H:%M') + end - puts "Sending e-mail..." + # Min Dew Point + if result['dew'] <= maxmin[:dew][:min][:value] + maxmin[:dew][:min][:value] = result['dew'].to_f + maxmin[:dew][:min][:time] = result['LogDateTime'].strftime('%H:%M') + end - Pony.mail( - :to => ENV['MAIL_RECIPIENT'], - :from => ENV['MAIL_SENDER'], - :subject => 'Daily Weather Summary', - :body => table.to_s, - :via => :smtp, - :via_options => options - ) + # Max Humidity + if result['hum'] >= maxmin[:hum][:max][:value] + maxmin[:hum][:max][:value] = result['hum'] + maxmin[:hum][:max][:time] = result['LogDateTime'].strftime('%H:%M') + end - puts "E-mail sent!" - puts "DONE!" + # Min Humidity + if result['hum'] <= maxmin[:hum][:min][:value] + maxmin[:hum][:min][:value] = result['hum'] + maxmin[:hum][:min][:time] = result['LogDateTime'].strftime('%H:%M') + end + # Max Rain Rate + if result['rrate'] >= maxmin[:rainrate][:max][:value] + maxmin[:rainrate][:max][:value] = result['rrate'].to_f + maxmin[:rainrate][:max][:time] = result['LogDateTime'].strftime('%H:%M') + end + end + + puts 'Data compiled!' + + puts 'Generating e-mail body...' + + table = Terminal::Table.new :title => "Weather Summary as of #{now['LogDateTime'].strftime('%l:%M %p, %a %b %d %Y')}" do |t| + t << [ + { :value => 'Temperature', :colspan => 2, :alignment => :center }, + { :value => 'Dew Point', :colspan => 2, :alignment => :center } + ] + t << :separator + t << [ + 'Current', "#{now['temp'].to_s('F')}C", + 'Current', "#{now['dew'].to_s('F')}C" + ] + t << [ + "Today's High", "#{maxmin[:temp][:max][:value]}C at #{maxmin[:temp][:max][:time]}", + "Today's High", "#{maxmin[:dew][:max][:value]}C at #{maxmin[:dew][:max][:time]}" + ] + t << [ + "Today's Low", "#{maxmin[:temp][:min][:value]}C at #{maxmin[:temp][:min][:time]}", + "Today's Low", "#{maxmin[:dew][:min][:value]}C at #{maxmin[:dew][:min][:time]}" + ] + t << :separator + t << [ + { :value => 'Humidity', :colspan => 2, :alignment => :center }, + { :value => 'Barometric Pressure (SL)', :colspan => 2, :alignment => :center } + ] + t << :separator + t << [ + 'Current', "#{now['hum']}%", + 'Current', "#{now['press'].to_s('F')} mb" + ] + t << [ + "Today's High", "#{maxmin[:hum][:max][:value]}% at #{maxmin[:hum][:max][:time]}", + 'Trend', "#{now['presstrendval']} mb/hr" + ] + t << [ + "Today's Low", "#{maxmin[:hum][:min][:value]}% at #{maxmin[:hum][:min][:time]}", + '', '' + ] + t << :separator + t << [ + { :value => 'Rain', :colspan => 2, :alignment => :center }, + { :value => 'Wind', :colspan => 2, :alignment => :center } + ] + t << :separator + t << [ + 'Current Rate', "#{now['rrate']} #{now['rainunit']}", + 'Current Speed', "#{now['wspeed']} #{now['windunit']}" + ] + t << [ + "Today's High Rate", "#{maxmin[:rainrate][:max][:value]} #{now['rainunit']} at #{maxmin[:rainrate][:max][:time]}", + 'Gust', "#{now['wgust']} #{now['windunit']}" + ] + t << [ + "Today's Total", "#{now['rfall'].to_s('F')} #{now['rainunit']}", + "Today's High Speed", "#{now['windTM']} #{now['windunit']} at #{now['TwindTM']}" + ] + t << [ + 'Monthly Total', "#{today['rmonth'].to_s('F')} #{now['rainunit']}", + "Today's High Gust", "#{now['wgustTM']} #{now['windunit']} at #{now['TwgustTM']}" + ] + t << [ + 'Yearly Total', "#{today['ryear'].to_s('F')} #{now['rainunit']}", + '', '' + ] + end + + puts 'E-mail body generated!' + + puts 'Sending e-mail...' + + Pony.mail( + :to => ENV['MAIL_RECIPIENT'], + :from => ENV['MAIL_SENDER'], + :subject => 'Daily Weather Summary', + :body => table.to_s, + :via => :smtp, + :via_options => options + ) + + puts 'E-mail sent!' + puts 'DONE!' rescue Mysql2::Error => e puts "Error connecting to database: #{e.message}" ensure