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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1ea92d1c0f3a85e43472835d723ce7489139dec1efec32b6da558139bdcf9403
4
- data.tar.gz: e7c2e958600c472061d767c2334b05ae252ee7ac245955fe586885d687447501
3
+ metadata.gz: 8ee2eec2ca5623ae8ac25ec63d7b1cec543944f39dae960bfb7db38251de2c99
4
+ data.tar.gz: 034a75ad6f3b43444bf719c96c5025dd1228defb1c5f2d1cc78c041d29948f28
5
5
  SHA512:
6
- metadata.gz: 4a5b4644fea3ac676dd841a253694ce1844731b3dcb443a7ab13fd675fe57d5a47d531154b29036f68601efdffb07eee14035c42b194502233814bbc0c3bd183
7
- data.tar.gz: 9682e7ebf7cd265bf29092ae45743e541240c007b13a6a345488a52d94e55b22a4ec1ca91332020f89d195eadf39572dd91119a3d4e240ab5d3ada888d7dcb1c
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
@@ -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
@@ -105,6 +105,9 @@ class TimeSheet::Time::Entry
105
105
  rescue TimeSheet::Time::Exception => e
106
106
  self.exception = e
107
107
  false
108
+ rescue StandardError => e
109
+ binding.pry if Timesheet.options[:debug]
110
+ false
108
111
  end
109
112
 
110
113
  def valid!
@@ -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(share_url)
88
- id = share_url.match(/\/d\/([^\/]+)\//)[1]
89
- url = "https://docs.google.com/spreadsheets/d/#{id}/export?exportFormat=tsv"
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, col_sep: "\t")
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
@@ -1,3 +1,3 @@
1
1
  module TimeSheet
2
- VERSION = "0.9.1"
2
+ VERSION = "0.10.0"
3
3
  end
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", "~> 1.15"
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.9.1
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: 2020-01-25 00:00:00.000000000 Z
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: '1.15'
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: '1.15'
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
- rubyforge_project:
159
- rubygems_version: 2.7.6.2
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: []