pto 0.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/bin/pto +77 -0
- metadata +44 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: d180d119e1f1b5b66163fbaeb1336b7e740edf53e3a25ec6c3de46311f965f1d
|
4
|
+
data.tar.gz: '068f57a398f5dade3702dc165344e2d7a7705b9e5b66750bfd8016f838cdc85d'
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: eedd1ac8f77c5c9a2869cb894d6ad31024217747ddb87399225d29663507549d7a3b79e499d663fcb2e3acb68e53ed4850bc9e1e0baf1d60ef47737e0aaa562f
|
7
|
+
data.tar.gz: 2e1400872b68c20153d0f97752da5819763d74f3905b7a35d3d245f01b48273198036649a43e3ec3dad0b433bbe340095145f98ed69d62736040832dc1534925
|
data/bin/pto
ADDED
@@ -0,0 +1,77 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'optparse'
|
4
|
+
require 'date'
|
5
|
+
|
6
|
+
def convert(str)
|
7
|
+
case str
|
8
|
+
when /(.*)\/(.*)/
|
9
|
+
return Float($1) / Float($2)
|
10
|
+
when /(.*)\.(.*)/
|
11
|
+
return Float(str)
|
12
|
+
else
|
13
|
+
return Integer(str)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def days_until_cap(accrual:, cap:, rate:)
|
18
|
+
days = 0
|
19
|
+
return days if accrual >= cap
|
20
|
+
|
21
|
+
daily_rate = rate / 365.0
|
22
|
+
while accrual < cap
|
23
|
+
accrual += daily_rate
|
24
|
+
days += 1
|
25
|
+
end
|
26
|
+
days
|
27
|
+
end
|
28
|
+
|
29
|
+
def main(options = {})
|
30
|
+
accrual = convert(options[:accrual])
|
31
|
+
cap = convert(options[:cap])
|
32
|
+
rate = convert(options[:rate])
|
33
|
+
|
34
|
+
days = days_until_cap(accrual: accrual, cap: cap, rate: rate)
|
35
|
+
if days == 0
|
36
|
+
puts "Already over cap :-( Please take some PTO ASAP!"
|
37
|
+
else
|
38
|
+
cap_date = Date.today + days
|
39
|
+
puts "Cap is hit in #{days} days - on #{cap_date}. Please take some PTO before then :-)"
|
40
|
+
end
|
41
|
+
|
42
|
+
return true
|
43
|
+
end
|
44
|
+
|
45
|
+
options = {}
|
46
|
+
optparse = OptionParser.new do |opts|
|
47
|
+
opts.on("-aACCRUAL", "--accrual=ACCRUAL", "Set current accrual in number of days. Defaults to zero.") do |accrual|
|
48
|
+
options[:accrual] = accrual
|
49
|
+
end
|
50
|
+
opts.on("-cCAP", "--cap=CAP", "Set cap in number of days. Required argument.") do |cap|
|
51
|
+
options[:cap] = cap
|
52
|
+
end
|
53
|
+
opts.on("-rRATE", "--rate=RATE", "Set accrual rate in number of days per year. Required argument.") do |rate|
|
54
|
+
options[:rate] = rate
|
55
|
+
end
|
56
|
+
opts.on("-h", "--help", "Prints this help") do
|
57
|
+
puts opts
|
58
|
+
exit
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
begin
|
63
|
+
optparse.parse!
|
64
|
+
mandatory = [:cap, :rate]
|
65
|
+
missing = mandatory.select{ |param| options[param].nil? }
|
66
|
+
unless missing.empty?
|
67
|
+
raise OptionParser::MissingArgument.new(missing.join(', '))
|
68
|
+
end
|
69
|
+
rescue OptionParser::InvalidOption, OptionParser::MissingArgument
|
70
|
+
puts $!.to_s
|
71
|
+
puts optparse
|
72
|
+
exit
|
73
|
+
end
|
74
|
+
|
75
|
+
options[:accrual] = 0.0 if options[:accrual].nil?
|
76
|
+
|
77
|
+
main(options)
|
metadata
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: pto
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Magne Land
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2021-01-08 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description:
|
14
|
+
email: magne.land@gmail.com
|
15
|
+
executables:
|
16
|
+
- pto
|
17
|
+
extensions: []
|
18
|
+
extra_rdoc_files: []
|
19
|
+
files:
|
20
|
+
- bin/pto
|
21
|
+
homepage: https://github.com/magneland/pto
|
22
|
+
licenses:
|
23
|
+
- MIT
|
24
|
+
metadata: {}
|
25
|
+
post_install_message:
|
26
|
+
rdoc_options: []
|
27
|
+
require_paths:
|
28
|
+
- lib
|
29
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
35
|
+
requirements:
|
36
|
+
- - ">="
|
37
|
+
- !ruby/object:Gem::Version
|
38
|
+
version: '0'
|
39
|
+
requirements: []
|
40
|
+
rubygems_version: 3.1.3
|
41
|
+
signing_key:
|
42
|
+
specification_version: 4
|
43
|
+
summary: Calculate your future Paid Time Off (PTO) accrual
|
44
|
+
test_files: []
|