punched 1.3.1 → 1.3.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e95894483cb39658bf8b2df9eddece40e114f5afc4c62e8705c5de00345ee3cd
4
- data.tar.gz: 32431041a7583350ff2f4dd4e1f90c104cae6f100838caf708560a4f9fac5e8a
3
+ metadata.gz: 332d10b07688d8df737329d65083cdee12e2f2a7fd2cc7d84a503fe8948688a0
4
+ data.tar.gz: 36a9ee38a2ad8187ba685982d01b0ae7422c077ec7107a1756706c9a675d15f7
5
5
  SHA512:
6
- metadata.gz: 6d56bd82d7e3e745a0d6c712e3f68af52e65a8df0e0430e68bea264138d36d60a0cef92fcf039ba183307e85e3aab59793525d030c1441fa2709982b742373f7
7
- data.tar.gz: c99e60f4b12a4848feec37f5454ce1c6b343e5d083821276aa7cb12f050406533b560c02250788736c956e401f05f604afc2ab0c63272a542016623c17f5f0fb
6
+ metadata.gz: c79f2403337f89533eaa77695786d33c41c6003d47e49f0eee1a62b66305eb9ee74fcf579a8efc44f1dfea2439de159aeef7f58c3d66a77567adce2daa7883db
7
+ data.tar.gz: 9337844f5458db7fc43ee924e31f71567a5f97b12ac30d4fa34bd422b90d7e3ecb444264c87ec738b4f61a873d964ce43f8dabee527f547dcf2b085176ce1f60
@@ -0,0 +1,23 @@
1
+ name: Specs
2
+
3
+ on: [push]
4
+
5
+ jobs:
6
+ build:
7
+
8
+ runs-on: ubuntu-latest
9
+
10
+ strategy:
11
+ matrix:
12
+ ruby-version: ['2.7', '3.0', '3.1', '3.2']
13
+
14
+ steps:
15
+ - uses: actions/checkout@v3
16
+ - name: Set up Ruby
17
+ uses: ruby/setup-ruby@ec02537da5712d66d4d50a0f33b7eb52773b5ed1
18
+ with:
19
+ ruby-version: ${{ matrix.ruby-version }}
20
+ - name: Install dependencies
21
+ run: bundle install
22
+ - name: Run tests
23
+ run: bundle exec rspec
data/.gitignore CHANGED
@@ -1,3 +1,4 @@
1
1
  Gemfile.lock
2
2
  punchcard_test_data/
3
3
  /*.gem
4
+ /vendor
data/README.md CHANGED
@@ -1,7 +1,7 @@
1
1
  # Punchcard
2
2
  ## Minimal time tracking tool for cli
3
3
 
4
- [![Build Status](https://img.shields.io/travis/pstaender/punched.svg?branch=v1.0.0&style=flat-square)](https://travis-ci.org/pstaender/punched)
4
+ ![status](https://github.com/pstaender/punched/actions/workflows/specs.yml/badge.svg)
5
5
 
6
6
  [![asciicast](https://asciinema.org/a/222572.svg)](https://asciinema.org/a/222572)
7
7
 
@@ -150,6 +150,26 @@ By default, PunchCard will store the data in `~/.punchcard/`. Define your custom
150
150
  export PUNCHCARD_DIR=~/Nextcloud/punchcard
151
151
  ```
152
152
 
153
+ ### Bash auto complete
154
+
155
+ It is possible to add an auto completion for punchcard to your bash (tested on zsh so far). Add the following to your `.zshrc` / `.bashrc`:
156
+
157
+ ```bash
158
+ PUNCHCARD_EXEC_PATH=$(which punched)
159
+
160
+ punchcard_projects () {
161
+ ls $PUNCHCARD_DIR
162
+ return 0
163
+ }
164
+
165
+ [ -f $PUNCHCARD_EXEC_PATH ] && complete -F punchcard_projects $PUNCHCARD_EXEC_PATH
166
+ ```
167
+
168
+ Ensure that the `$PUNCHCARD_DIR` environment variable is also set (see `Store projects files in a custom folder and sync them between computers`).
169
+
170
+ Now you get a list of your existing projects everytime hitting a tab-key while using `punched`.
171
+
172
+ In `rvm` the return value of `which punched` will be empty; use rvm to get the absolute path and / or set the path manually.
153
173
 
154
174
  ### Tests
155
175
 
data/bin/punched CHANGED
@@ -157,6 +157,7 @@ project_name = ARGV[1]
157
157
 
158
158
  if selected_action
159
159
  begin
160
+ raise UnknownActionError.new(selected_action) unless action_available?(selected_action)
160
161
  if selected_action == 'all'
161
162
  all(ARGV[1] || 'plain')
162
163
  elsif selected_action == 'totalsum'
@@ -183,6 +184,6 @@ if selected_action
183
184
  rescue PunchCardError => e
184
185
  exit_with_error! "Error: #{e.message}"
185
186
  rescue UnknownActionError => e
186
- exit_with_error! "Unrecognized action '#{selected_action || e.message}'\n#{usage}"
187
+ exit_with_error! "Unknown action '#{e.message}'\n#{usage}"
187
188
  end
188
189
  end
data/lib/punchcard.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # (c) 2017-2019 by Philipp Staender
3
+ # (c) 2017-2023 by Philipp Staender
4
4
 
5
5
  require 'date'
6
6
  require 'time'
@@ -13,7 +13,7 @@ class PunchCard
13
13
  HOURLY_RATE_PATTERN = /^\s*(\d+)([^\d]+)*\s*/i.freeze
14
14
  TIME_POINT_PATTERN = /^((\d+|.+?\s[\+\-]\d{4}?\s*)(\-)*(\d+|\s.+\d?)*)$/.freeze
15
15
  META_KEY_PATTERN = /^([a-zA-Z0-9]+)\:\s*(.*)$/.freeze
16
- VERSION = '1.3.1'
16
+ VERSION = '1.3.3'
17
17
 
18
18
  attr_accessor :title
19
19
 
@@ -108,7 +108,7 @@ class PunchCard
108
108
  find_or_make_file
109
109
  durations = []
110
110
  last_activity = nil
111
- project_data.map do |line|
111
+ project_data_without_comments.map do |line|
112
112
  points = line_to_time_points(line)
113
113
  next unless points
114
114
 
@@ -179,7 +179,7 @@ class PunchCard
179
179
 
180
180
  def total(start_at: nil, end_at: nil)
181
181
  total = 0
182
- project_data.map do |line|
182
+ project_data_without_comments.map do |line|
183
183
  points = line_to_time_points(line)
184
184
  next unless points
185
185
 
@@ -297,7 +297,7 @@ class PunchCard
297
297
  end
298
298
 
299
299
  def last_entry
300
- project_data.last
300
+ project_data_without_comments.last
301
301
  end
302
302
 
303
303
  def timestamp
@@ -309,12 +309,14 @@ class PunchCard
309
309
  end
310
310
 
311
311
  def read_project_data
312
- title = nil
312
+ title = File.basename(project_file)
313
313
  timestamps = []
314
314
  i = 0
315
315
  File.open(project_file, 'r').each_line do |line|
316
316
  line.strip!
317
- if i.zero?
317
+ next if line.start_with?('#')
318
+
319
+ if i.zero? && !line.match(TIME_POINT_PATTERN)
318
320
  title = line
319
321
  elsif line.match(META_KEY_PATTERN)
320
322
  set line.match(META_KEY_PATTERN)[1], line.match(META_KEY_PATTERN)[2]
@@ -332,6 +334,10 @@ class PunchCard
332
334
  File.open(project_file).each_line.map(&:strip)
333
335
  end
334
336
 
337
+ def project_data_without_comments
338
+ project_data.filter { |l| !l.start_with?('#')}
339
+ end
340
+
335
341
  def write_string_to_project_file!(string)
336
342
  File.open(project_file, 'w') { |f| f.write(string) }
337
343
  end
@@ -84,18 +84,18 @@ describe PunchCard do
84
84
  expect(my_project_file.lines[-2]).to match(/^\d+/)
85
85
  end
86
86
 
87
- it 'should convert names to underscore with special characters' do
88
- PunchCard.new 'Playing Motörhead'
89
- expect(my_project_file('playing_mot_rhead').strip).to eq('Playing Motörhead')
90
- project = PunchCard.new 'Playing*'
91
- expect(project.project).to eq('playing_mot_rhead')
87
+ it 'ignores lines starting with #' do
88
+ start_and_stop
89
+ File.write("#{example_settings_dir}/my_project", my_project_file + "\n# A comment line")
90
+ start_and_stop
91
+ expect(my_project_file).to match("\n# A comment line")
92
92
  end
93
93
 
94
- xit 'should read and write utf8 names' do
94
+ it 'should convert names to underscore with special characters' do
95
95
  PunchCard.new 'Playing Motörhead'
96
96
  expect(my_project_file('playing_mot_rhead').strip).to eq('Playing Motörhead')
97
97
  project = PunchCard.new 'Playing*'
98
- expect(project.project).to eq('Playing Motörhead')
98
+ expect(project.project).to eq('playing_mot_rhead')
99
99
  end
100
100
 
101
101
  it 'should set hourlyRate' do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: punched
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.1
4
+ version: 1.3.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Philipp Staender
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-08-30 00:00:00.000000000 Z
11
+ date: 2023-09-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: markdown-tables
@@ -32,8 +32,8 @@ executables:
32
32
  extensions: []
33
33
  extra_rdoc_files: []
34
34
  files:
35
+ - ".github/workflows/specs.yml"
35
36
  - ".gitignore"
36
- - ".travis.yml"
37
37
  - Gemfile
38
38
  - LICENSE
39
39
  - README.md
@@ -60,7 +60,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
60
60
  - !ruby/object:Gem::Version
61
61
  version: '0'
62
62
  requirements: []
63
- rubygems_version: 3.0.6
63
+ rubygems_version: 3.2.3
64
64
  signing_key:
65
65
  specification_version: 4
66
66
  summary: Punchcard Timetracker
data/.travis.yml DELETED
@@ -1,9 +0,0 @@
1
- language: ruby
2
- rvm:
3
- - 2.6
4
- - 2.7
5
- - ruby-head
6
- script: bundle exec rspec
7
- matrix:
8
- allow_failures:
9
- - rvm: ruby-head