about summary refs log tree commit diff stats
path: root/ara.pl
Commit message (Collapse)AuthorAgeFilesLines
* Remove $SIG{__DIE__}Andinus2020-06-151-1/+0
| | | | | <haarg> notandinus: __DIE__ handlers get called even for errors that are trapped by an eval
* Override warn & die sub to add colorsAndinus2020-06-151-14/+15
|
* Move HelpMessage sub near GetOptionsAndinus2020-06-151-18/+18
|
* Add option to remove number formatting with wordsAndinus2020-06-141-5/+7
|
* Format numbers with Number::Format::SouthAsian, add to cpanfileAndinus2020-06-141-16/+26
|
* Print error when no rows to printAndinus2020-06-141-0/+3
|
* Change warning color to yellow from redAndinus2020-06-141-4/+5
|
* Add option to show only passed statesAndinus2020-06-141-8/+22
| | | | | | | Now user can specify states in "show" option & only those states will be printed, "hide" option is ignored when "show" is passed. Note: "hide" is ignored only for states & not for columns.
* Warn on invalid options instead of dyingAndinus2020-06-141-4/+8
|
* Make text on output readableAndinus2020-06-141-4/+4
|
* Use foreach instead of each, remove iterator reset lineAndinus2020-06-141-3/+2
| | | | | | Initial commit message was "Remove useless line", that line would feel bad so I changed it. I think it got left out when I moved from each to foreach.
* Warn about not hiding notes column only if notes option was passedAndinus2020-06-141-1/+2
| | | | | Warning about not hiding notes column will only print if user passed --notes.
* Alias updated to last updatedAndinus2020-06-141-0/+5
|
* Document a line, ignoring a warningAndinus2020-06-141-0/+1
| | | | | | | | | | | | | | | | | | | | It would've printed something like: Name "HTTP::Simple::UA" used only once: possible typo at /home/andinus/projects/scripts/ara line 121. Error in tempfile() using template https:/api.covid19india.org/XXXXXXXXXX: Parent directory (https:/api.covid19india.org/) does not exist at /home/andinus/perl5/lib/perl5/HTTP/Simple.pm line 69. Grinnz on #perl (freenode.net) said: probably because HTTP::Simple isn't loaded until runtime, that warning is pretty stupid it's a workaround for before they had proper lexical variables to work with that can detect typoes correctly
* Enforce local optionAndinus2020-06-141-6/+9
| | | | | | | Till now the local option was actually useless, this enforces it. The program will only not respect local option if the file doesn't exist. Otherwise in all cases it shall respect the option.
* Fix file fetching logic, use mtime, switch to HTTP::SimpleAndinus2020-06-141-8/+9
| | | | | | | | | | | | | | | The issue with ctime is that it doesn't change & stays the same as when the file was actually created, this means the code was running the if block basically everytime after 8 minutes of file creation. And I couldn't use mtime because HTTP::Tiny's mirror method stores mtime as 'Last Modified' header. This switch to HTTP::Simple will download the file everytime which means the mtime changes & we can make the program not look for file every time. However this also means that we are downloading the whole file everytime instead of only when it changes. Meh... It's okay because the alternative is to write a complicated logic.
* Add ability to hide columnsAndinus2020-06-141-23/+30
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Only hiding "State" & "Notes" column is forbidden & will print a warning for the user. I should also optimize other parts, like it still creates $deaths & does all related calulations even if we hide that column. And for @columns part, #perl (freenode.net) suggested some other methods too but later we found out they were all broken (logical error), the solutions were nice though & so I'm recording them here. I could've created a %fields hash like this: my %fields = ( State => 1 ... ); And then I would delete the things that user wants to hide: delete $fields{s/\b(\w)/\U$1/gr} for keys %hide; Either like that or like this: delete @fields{ map ucfirst, keys %hide }; Then just used keys %fields in setCols(). Issue with the first delete method is that it's complicated & I didn't understand it so I wasn't going to use it anyways. Issue with the second delete method is that it wouldn't have worked with "Last Updated" field because there is a space in between, ucfirst function would've only capitalized 'L' of "Last". Even if I understood the first method or somehow fix the second method all this still wont work because keys %fields would get me columns in random order which isn't what I want.
* Fix rows option behaviourAndinus2020-06-141-8/+8
| | | | | | | | | | | | The behaviour was broken because previously it wouldn't have printed as many rows as user had entered because of other options. For example, say if user ran `ara --rows 2 --hide india`, previously this would've printed only 1 row because "India" is always the first row & the foreach loop would've looped only two times so $rows_to_print was more like number of rows to iterate over. Now it does what it says, it prints that many number of rows.
* Initialize %hide earlierAndinus2020-06-141-2/+1
|
* Shorten "State Unassigned", check for statecode if length > 16Andinus2020-06-131-2/+10
|
* Add option to hide statesAndinus2020-06-131-7/+22
| | | | I could also extend this to hiding columns.
* Add option to hide 'Total' rowAndinus2020-06-131-2/+9
|
* Add more colors to outputAndinus2020-06-131-4/+14
| | | | This also tunes the colors a bit.
* Remove colors from Last Updated columnAndinus2020-06-131-8/+5
| | | | I decided it looks better without colors.
* Add colors to terminal outputAndinus2020-06-131-11/+47
| | | | | | | | | | | Colors in deltas will be changed as they increase or decrease. Maybe I should define colors with some magic math, I'll think about it. For now this is good enough. Currently it's 19:00 here & states haven't yet updated the records so I don't see any colors, I'll see them in action at night when they're updated. I should remove colors from Last Updated column maybe because it's not that helpful, almost all states update daily.
* Fix CRITICAL error: unveil was overriden by custom subAndinus2020-06-111-5/+8
| | | | | | | | | | sub declarations are decided on compile time irrespective of surrounding if blocks so unveil sub was getting overriden by { return 1; } everytime which means that basically unveil wasn't running at all. And this is why I should've written tests or maybe even add a debug flag that would warn each time custom unveil is called.
* Use OpenBSD::Unveil only on OpenBSDAndinus2020-06-111-1/+7
| | | | | | | | This will fail if user doesn't has the path in @INC which might be possible on custom Perl install. I'll add a note about this in README. This is good for non-OpenBSD users as now the program will run on their system without any changes.
* Add "nodelta" flagAndinus2020-06-111-7/+10
| | | | "nodelta" flag will not print any delta changes.
* Save $file in cache directoryAndinus2020-06-101-5/+7
| | | | This includes unix specific code & should be mentioned in README.
* Use sprintf to append delta valuesAndinus2020-06-101-8/+3
| | | | | This does the same thing as the if block, I also applied it to all three values because "why not?". sprintf handles this cleanly.
* Use ->ctime instead of accessing the array directlyAndinus2020-06-101-1/+1
|
* Use ctime instead of mtime to compareAndinus2020-06-101-3/+3
| | | | | | | | HTTP::Tiny sets mtime to "Last Modified" time set by the server. ctime is set as the time when that file gets created on disk so we use that to compare now, actually this should've been used from the start but File::Fetch didn't set mtime differently (?) so mtime worked till we used File::Fetch.
* Better unveil listAndinus2020-06-101-3/+4
| | | | While not perfect this is a lot better than the old list.
* Switch to HTTP::Tiny, add to cpanfileAndinus2020-06-101-5/+10
| | | | HTTP::Tiny has more options.
* Don't add '+' to deltaconfirmed if it's a negative numberAndinus2020-06-081-1/+6
| | | | | "State Unassigned" had deltaconfirmed of -773 today which showed up as "+-773".
* Restyle codeAndinus2020-06-071-46/+47
| | | | Looks like many like this style, looks good to me too.
* Use foreach instead of eachAndinus2020-06-061-3/+4
|
* Use if block instead of '?'Andinus2020-06-061-2/+4
|
* Remove unused feature 'say'Andinus2020-06-061-1/+0
|
* Change Notes column width to 74Andinus2020-06-061-1/+1
|
* Add help flagAndinus2020-06-061-0/+12
|
* Add $rows argument, change behaviourAndinus2020-06-061-73/+81
| | | | | | | | | | | | | User can now specify the number of rows to print. It'll print all the rows if --notes is passed or if $rows evaluates to false or if the user passed value greater than the length of Array. It'll now warn the user if file doesn't exist locally & user has passed --local, also instead of just dying it fetches the file from the web instead. $covid_19_data not doesn't get printed if --notes is passed. We assume that the user either wants to see notes or $covid_19_data.
* use Getopt::Long to GetOptions from cliAndinus2020-06-061-9/+31
|
* Switch to Text::ASCIITable for $covid_19_dataAndinus2020-06-061-8/+18
| | | | Instead of using 2 modules we switch everything to Text:ASCIITable.
* Remove DateTime, use Time::Moment insteadAndinus2020-06-061-9/+11
| | | | | | | After removing all DateTime code it took ~0.98s to run, before that it was ~1.2s. And after removing 'use DateTime' it now takes ~0.30s to run, all of this is without File::Fetch part, it loaded the data from disk instead of fetching.
* Use == to compare numbers instead of eqAndinus2020-06-061-1/+1
| | | | | No need to convert it to string for comparision, we instead use == to compare numbers.
* Use Time::Moment for $file_mtime instead of DateTimeAndinus2020-06-061-5/+3
| | | | | | | | | First step to replacing DateTime with Time::Moment, DateTime is very huge, no need to load that large module for simple tasks, it'll also make the program run faster. This comparison happens in utc time instead of converting it to other time zone which was meaningless anyways.
* use File::Fetch only when requiredAndinus2020-06-061-1/+2
| | | | | 'use File::Fetch' gets processed at compile time so we use 'require File::Fetch' instead.
* Use Text::ASCIITable for State NotesAndinus2020-06-051-7/+7
| | | | | | Text::Table::Tiny wasn't good for state notes because they were long & had characters like '\n'. Text::ASCIITable has nice options to work with these.
* Print state notes along with covid-19 dataAndinus2020-06-051-4/+16
|