time-sheet 0.14.1 → 1.0.0
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.
- checksums.yaml +4 -4
- data/lib/time_sheet/time/cmd.rb +1 -1
- data/lib/time_sheet/time/entry.rb +25 -3
- data/lib/time_sheet/time/parser.rb +13 -17
- data/lib/time_sheet/version.rb +1 -1
- data/time_sheet.gemspec +3 -2
- metadata +6 -20
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 461fe4226d6a5980fa168c7c918b01b35fb27aebef3110ff25d6d295709c6551
|
4
|
+
data.tar.gz: 830f66bef87e5925b117e32a2e82647736997381a07efe12a8e8151123e7d9cd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6b99531029582021e5eff7c47a1483e24ad6ceb86b0865c2abd7b6af0496225b9e0f222c958538f073553e6ce5b4e4fe36d8e9ec10d3d2ab9b7ed8e1b83523f7
|
7
|
+
data.tar.gz: 358e04d3c9f16416d451d192ed5ad2a94545ef135250ecb3836ce75d5f551b3295e65b1d44b3a36f9b71ab95386acd466e866e2c27457e61c8ed4b853d311ad5
|
data/lib/time_sheet/time/cmd.rb
CHANGED
@@ -129,7 +129,7 @@ class TimeSheet::Time::Cmd
|
|
129
129
|
o.boolean '-v', '--verbose', 'be more verbose'
|
130
130
|
o.boolean '--debug', 'drop into a REPL on errors'
|
131
131
|
o.separator "\n invoice options:"
|
132
|
-
o.
|
132
|
+
o.float '--package', 'for invoice output: build packages of this duration in hours', default: 0.0
|
133
133
|
o.integer '--petty', 'fold records under a certain threshold into a "misc" activity', default: 0
|
134
134
|
end
|
135
135
|
end
|
@@ -28,7 +28,8 @@ class TimeSheet::Time::Entry
|
|
28
28
|
def start
|
29
29
|
@start ||= Time.mktime(
|
30
30
|
date.year, date.month, date.day,
|
31
|
-
@data['start']
|
31
|
+
hour_for(@data['start']),
|
32
|
+
minute_for(@data['start'])
|
32
33
|
)
|
33
34
|
end
|
34
35
|
|
@@ -37,10 +38,31 @@ class TimeSheet::Time::Entry
|
|
37
38
|
|
38
39
|
@end ||= Time.mktime(
|
39
40
|
date.year, date.month, date.day,
|
40
|
-
ends_at
|
41
|
+
hour_for(ends_at),
|
42
|
+
minute_for(ends_at)
|
41
43
|
)
|
42
44
|
end
|
43
45
|
|
46
|
+
def hour_for(timish)
|
47
|
+
case timish
|
48
|
+
when Time then timish.hour
|
49
|
+
when DateTime then timish.hour
|
50
|
+
when Integer then timish / 60 / 60
|
51
|
+
else
|
52
|
+
binding.pry
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
def minute_for(timish)
|
57
|
+
case timish
|
58
|
+
when Time then timish.min
|
59
|
+
when DateTime then timish.min
|
60
|
+
when Integer then timish / 60 % 60
|
61
|
+
else
|
62
|
+
binding.pry
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
44
66
|
def employee
|
45
67
|
@employee ||= @data['employee'] || (self.prev ? self.prev.employee : 'Me')
|
46
68
|
end
|
@@ -121,7 +143,7 @@ class TimeSheet::Time::Entry
|
|
121
143
|
self.exception = e
|
122
144
|
false
|
123
145
|
rescue StandardError => e
|
124
|
-
binding.pry if
|
146
|
+
binding.pry if TimeSheet.options[:debug]
|
125
147
|
false
|
126
148
|
end
|
127
149
|
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require '
|
1
|
+
require 'roo'
|
2
2
|
require 'httpclient'
|
3
3
|
require 'csv'
|
4
4
|
|
@@ -12,7 +12,7 @@ class TimeSheet::Time::Parser
|
|
12
12
|
results = []
|
13
13
|
@dirs.each do |dir|
|
14
14
|
if File.directory?(dir)
|
15
|
-
results += Dir["#{dir}/**/*.
|
15
|
+
results += Dir["#{dir}/**/*.xlsx"]
|
16
16
|
else
|
17
17
|
results << dir
|
18
18
|
end
|
@@ -38,7 +38,6 @@ class TimeSheet::Time::Parser
|
|
38
38
|
results.sort!
|
39
39
|
results.each do |r|
|
40
40
|
unless r.valid?
|
41
|
-
# byebug
|
42
41
|
raise r.exception, [
|
43
42
|
r.exception.message, ': ',
|
44
43
|
r.data.inspect,
|
@@ -57,28 +56,25 @@ class TimeSheet::Time::Parser
|
|
57
56
|
if f.match(/https:\/\/docs\.google\.com/)
|
58
57
|
parse_google_doc(f)
|
59
58
|
else
|
60
|
-
|
59
|
+
parse_xlsx(f)
|
61
60
|
end
|
62
61
|
end
|
63
62
|
end
|
64
63
|
end
|
65
64
|
|
66
|
-
def
|
65
|
+
def parse_xlsx(filename)
|
67
66
|
results = []
|
68
67
|
|
69
|
-
Spreadsheet.open(filename)
|
70
|
-
|
71
|
-
sheet.
|
72
|
-
|
73
|
-
# lines, perhaps:
|
74
|
-
# break if row[1].nil?
|
75
|
-
next if row.all?{|cell| [nil, ''].include?(cell)}
|
68
|
+
xlsx = Roo::Spreadsheet.open(filename)
|
69
|
+
xlsx.each_with_pagename do |name, sheet|
|
70
|
+
headers = sheet.row(1).to_h{|e| [e, e]}
|
71
|
+
rows = sheet.parse(headers)
|
76
72
|
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
results <<
|
73
|
+
rows.each do |row|
|
74
|
+
next unless row['start']
|
75
|
+
next if row.values.all?{|v| [nil, ''].include?(v)}
|
76
|
+
|
77
|
+
results << row
|
82
78
|
end
|
83
79
|
end
|
84
80
|
|
data/lib/time_sheet/version.rb
CHANGED
data/time_sheet.gemspec
CHANGED
@@ -9,6 +9,7 @@ Gem::Specification.new do |spec|
|
|
9
9
|
spec.authors = ["Moritz Schepp"]
|
10
10
|
spec.email = ["moritz.schepp@gmail.com"]
|
11
11
|
spec.license = 'GPL-3.0-only'
|
12
|
+
spec.homepage = 'https://github.com/moritzschepp/time-sheet'
|
12
13
|
|
13
14
|
spec.summary = "a time tracking solution based on spreadsheets"
|
14
15
|
|
@@ -23,12 +24,12 @@ Gem::Specification.new do |spec|
|
|
23
24
|
spec.bindir = "exe"
|
24
25
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
25
26
|
spec.require_paths = ["lib"]
|
27
|
+
spec.required_ruby_version = '>= 3.1.0'
|
26
28
|
|
27
|
-
spec.add_dependency '
|
29
|
+
spec.add_dependency 'roo'
|
28
30
|
spec.add_dependency 'slop'
|
29
31
|
spec.add_dependency 'httpclient'
|
30
32
|
|
31
|
-
spec.add_development_dependency "bundler", "~> 2.2.16"
|
32
33
|
spec.add_development_dependency "rake", "~> 13.0"
|
33
34
|
spec.add_development_dependency "rspec", "~> 3.0"
|
34
35
|
spec.add_development_dependency 'pry'
|
metadata
CHANGED
@@ -1,17 +1,17 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: time-sheet
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Moritz Schepp
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2025-02-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: roo
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
@@ -52,20 +52,6 @@ dependencies:
|
|
52
52
|
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
|
-
- !ruby/object:Gem::Dependency
|
56
|
-
name: bundler
|
57
|
-
requirement: !ruby/object:Gem::Requirement
|
58
|
-
requirements:
|
59
|
-
- - "~>"
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: 2.2.16
|
62
|
-
type: :development
|
63
|
-
prerelease: false
|
64
|
-
version_requirements: !ruby/object:Gem::Requirement
|
65
|
-
requirements:
|
66
|
-
- - "~>"
|
67
|
-
- !ruby/object:Gem::Version
|
68
|
-
version: 2.2.16
|
69
55
|
- !ruby/object:Gem::Dependency
|
70
56
|
name: rake
|
71
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -134,7 +120,7 @@ files:
|
|
134
120
|
- lib/time_sheet/time/util.rb
|
135
121
|
- lib/time_sheet/version.rb
|
136
122
|
- time_sheet.gemspec
|
137
|
-
homepage:
|
123
|
+
homepage: https://github.com/moritzschepp/time-sheet
|
138
124
|
licenses:
|
139
125
|
- GPL-3.0-only
|
140
126
|
metadata:
|
@@ -148,14 +134,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
148
134
|
requirements:
|
149
135
|
- - ">="
|
150
136
|
- !ruby/object:Gem::Version
|
151
|
-
version:
|
137
|
+
version: 3.1.0
|
152
138
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
153
139
|
requirements:
|
154
140
|
- - ">="
|
155
141
|
- !ruby/object:Gem::Version
|
156
142
|
version: '0'
|
157
143
|
requirements: []
|
158
|
-
rubygems_version: 3.
|
144
|
+
rubygems_version: 3.5.16
|
159
145
|
signing_key:
|
160
146
|
specification_version: 4
|
161
147
|
summary: a time tracking solution based on spreadsheets
|