time-sheet 0.9.1 → 0.10.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.rb +15 -0
- data/lib/time_sheet/time/cmd.rb +7 -0
- data/lib/time_sheet/time/entry.rb +3 -0
- data/lib/time_sheet/time/parser.rb +14 -6
- data/lib/time_sheet/version.rb +1 -1
- data/time_sheet.gemspec +1 -1
- metadata +10 -11
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8ee2eec2ca5623ae8ac25ec63d7b1cec543944f39dae960bfb7db38251de2c99
|
4
|
+
data.tar.gz: 034a75ad6f3b43444bf719c96c5025dd1228defb1c5f2d1cc78c041d29948f28
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c825f3278431d59904d411eaafd71e42fd827d83931d139aeb36a2c847f02af0edf97e9b55c4eec7bf55367f9c07273d09adfdf89b88938db20ad4a9569e996a
|
7
|
+
data.tar.gz: 9a5fb43cc6a19c7ce85b127621d35895c0a2580aee02f34a1862836885bc957e5e41b29bcfcf1cf6dd4824ba616a30b6d9aaa8fdfe4c02088a1f0abe78fc7f03
|
data/lib/time_sheet.rb
CHANGED
@@ -1,5 +1,12 @@
|
|
1
1
|
require 'time_sheet/version'
|
2
2
|
|
3
|
+
# silence HTTPClient
|
4
|
+
module Warning
|
5
|
+
def warn(mgs)
|
6
|
+
# drop
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
3
10
|
if defined?(Bundler)
|
4
11
|
begin
|
5
12
|
require 'pry'
|
@@ -15,4 +22,12 @@ module TimeSheet
|
|
15
22
|
def self.root
|
16
23
|
@root ||= File.expand_path(File.dirname(__FILE__) + '/..')
|
17
24
|
end
|
25
|
+
|
26
|
+
def self.options=(options)
|
27
|
+
@options = options
|
28
|
+
end
|
29
|
+
|
30
|
+
def self.options
|
31
|
+
@options
|
32
|
+
end
|
18
33
|
end
|
data/lib/time_sheet/time/cmd.rb
CHANGED
@@ -3,6 +3,8 @@ require 'time'
|
|
3
3
|
|
4
4
|
class TimeSheet::Time::Cmd
|
5
5
|
def run
|
6
|
+
TimeSheet.options = options
|
7
|
+
|
6
8
|
if d = options[:from]
|
7
9
|
if d.match(/^\d\d?-\d\d?$/)
|
8
10
|
d = "#{TimeSheet::Time::Util.now.year}-#{d}"
|
@@ -64,6 +66,10 @@ class TimeSheet::Time::Cmd
|
|
64
66
|
options[:to] = TimeSheet::Time::Util.month_end(-1)
|
65
67
|
options[:summary] = true
|
66
68
|
report
|
69
|
+
when 'year-to-day', 'year'
|
70
|
+
options[:from] = TimeSheet::Time::Util.year_start(-1)
|
71
|
+
options[:summary] = true
|
72
|
+
report
|
67
73
|
when 'overview'
|
68
74
|
overview
|
69
75
|
else
|
@@ -117,6 +123,7 @@ class TimeSheet::Time::Cmd
|
|
117
123
|
o.boolean '-s', '--summary', 'when reporting, add summary section'
|
118
124
|
o.boolean '--trim', 'compact the output for processing as CSV', default: false
|
119
125
|
o.boolean '-v', '--verbose', 'be more verbose'
|
126
|
+
o.boolean '--debug', 'drop into a REPL on errors'
|
120
127
|
o.separator "\n invoice options:"
|
121
128
|
o.integer '--package', 'for invoice output: build packages of this duration in hours', default: 0
|
122
129
|
o.integer '--petty', 'fold records under a certain threshold into a "misc" activity', default: 0
|
@@ -68,10 +68,11 @@ class TimeSheet::Time::Parser
|
|
68
68
|
|
69
69
|
Spreadsheet.open(filename).worksheets.each do |sheet|
|
70
70
|
headers = sheet.rows.first.to_a
|
71
|
-
sheet.rows[1..-1].each do |row|
|
71
|
+
sheet.rows[1..-1].each.with_index do |row, i|
|
72
72
|
# TODO find a way to guard against xls sheets with 65535 (empty)
|
73
73
|
# lines, perhaps:
|
74
74
|
# break if row[1].nil?
|
75
|
+
next if row.all?{|cell| [nil, ''].include?(cell)}
|
75
76
|
|
76
77
|
record = {}
|
77
78
|
row.each_with_index do |value, i|
|
@@ -84,16 +85,16 @@ class TimeSheet::Time::Parser
|
|
84
85
|
results
|
85
86
|
end
|
86
87
|
|
87
|
-
def parse_google_doc(
|
88
|
-
|
89
|
-
|
88
|
+
def parse_google_doc(url)
|
89
|
+
# Chart Tools datasource protocol, see
|
90
|
+
# https://developers.google.com/chart/interactive/docs/querylanguage
|
90
91
|
response = HTTPClient.get(url)
|
91
92
|
|
92
93
|
if response.status == 200
|
93
|
-
data = CSV.parse(response.body,
|
94
|
+
data = CSV.parse(response.body, liberal_parsing: true)
|
94
95
|
headers = data.shift
|
95
96
|
data.map do |row|
|
96
|
-
record = headers.zip(row).to_h
|
97
|
+
record = nullify_empties(headers.zip(row).to_h)
|
97
98
|
parse_date_and_time(record)
|
98
99
|
end
|
99
100
|
else
|
@@ -108,9 +109,16 @@ class TimeSheet::Time::Parser
|
|
108
109
|
'end' => (record['end'] ? DateTime.parse(record['end']) : nil)
|
109
110
|
)
|
110
111
|
rescue ArgumentError => e
|
112
|
+
binding.pry if TimeSheet.options[:debug]
|
111
113
|
puts "current record: #{record.inspect}"
|
112
114
|
return {}
|
113
115
|
# raise e
|
114
116
|
end
|
115
117
|
|
118
|
+
def nullify_empties(record)
|
119
|
+
record.transform_values do |v|
|
120
|
+
v == '' ? nil : v
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
116
124
|
end
|
data/lib/time_sheet/version.rb
CHANGED
data/time_sheet.gemspec
CHANGED
@@ -28,7 +28,7 @@ Gem::Specification.new do |spec|
|
|
28
28
|
spec.add_dependency 'slop'
|
29
29
|
spec.add_dependency 'httpclient'
|
30
30
|
|
31
|
-
spec.add_development_dependency "bundler", "~>
|
31
|
+
spec.add_development_dependency "bundler", "~> 2.2.16"
|
32
32
|
spec.add_development_dependency "rake", "~> 13.0"
|
33
33
|
spec.add_development_dependency "rspec", "~> 3.0"
|
34
34
|
spec.add_development_dependency 'pry'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: time-sheet
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.10.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Moritz Schepp
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-05-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: spreadsheet
|
@@ -58,14 +58,14 @@ dependencies:
|
|
58
58
|
requirements:
|
59
59
|
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version:
|
61
|
+
version: 2.2.16
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version:
|
68
|
+
version: 2.2.16
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: rake
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -108,7 +108,7 @@ dependencies:
|
|
108
108
|
- - ">="
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: '0'
|
111
|
-
description:
|
111
|
+
description:
|
112
112
|
email:
|
113
113
|
- moritz.schepp@gmail.com
|
114
114
|
executables:
|
@@ -134,13 +134,13 @@ files:
|
|
134
134
|
- lib/time_sheet/time/util.rb
|
135
135
|
- lib/time_sheet/version.rb
|
136
136
|
- time_sheet.gemspec
|
137
|
-
homepage:
|
137
|
+
homepage:
|
138
138
|
licenses:
|
139
139
|
- GPL-3.0-only
|
140
140
|
metadata:
|
141
141
|
bug_tracker_uri: https://github.com/moritzschepp/time-sheet/issues
|
142
142
|
documentation_uri: https://github.com/moritzschepp/time-sheet
|
143
|
-
post_install_message:
|
143
|
+
post_install_message:
|
144
144
|
rdoc_options: []
|
145
145
|
require_paths:
|
146
146
|
- lib
|
@@ -155,9 +155,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
155
155
|
- !ruby/object:Gem::Version
|
156
156
|
version: '0'
|
157
157
|
requirements: []
|
158
|
-
|
159
|
-
|
160
|
-
signing_key:
|
158
|
+
rubygems_version: 3.1.6
|
159
|
+
signing_key:
|
161
160
|
specification_version: 4
|
162
161
|
summary: a time tracking solution based on spreadsheets
|
163
162
|
test_files: []
|