timr 0.4.0 → 0.5.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
  SHA1:
3
- metadata.gz: f79b6ea230b0bb324476f5cb65f5f8905c8f0eac
4
- data.tar.gz: 2f85343c2c7ee84c052067f40d263a76ffffc832
3
+ metadata.gz: 0a52eda0ed77a6f73e3c0e039bc938fa21248a54
4
+ data.tar.gz: a17fe3a693f1cf2a7c544b6212f405cb3ba42e1c
5
5
  SHA512:
6
- metadata.gz: 374a2459ee630217d4cafa343150690d0729c1ef6a93c1221569e85ae79ea4a8be48919e2ccb43810ba95a354446d6a9bde388229bf6e7e53b6dfccd7a9a7cd8
7
- data.tar.gz: c1bdc85bc01a15f9f5cc827c3c2dff82ba0fbfe8c3e3d68a2987b8c61a1d0d590037ab0d841dde8a8041f332a7c28ae833de57d7f8afdc7e308823960fbe65f3
6
+ metadata.gz: 86632a136e85c82349380204a9e02d9ed9bea484ea634b85c44fed7af4ab1707470b85995c3cce4c8325562704826bb9bdf0aa526c283f3f83ed50705ad03458
7
+ data.tar.gz: e9be4b7834949de95f9cfcdb77a8f279dbf23d448ae83219bd169a5fd96d2ae7d2b1c02b14035e706710ab7b00f9d3ed90b4e7859bf3ab81d69969de3b63505b
data/.gitignore CHANGED
@@ -2,13 +2,9 @@
2
2
  .env
3
3
  .setup
4
4
  /api/
5
+ build.txt
5
6
  CHANGELOG-*.txt
6
7
  /coverage/
7
8
  Gemfile.lock
8
9
  README.html
9
10
  /tmp/
10
- *.log
11
- *.yml
12
- *.txt
13
- *.csv
14
- *.html
data/.gitlab-ci.yml ADDED
@@ -0,0 +1,95 @@
1
+ before_script:
2
+ - apt-get update -yqq
3
+ - 'which ssh-agent || ( apt-get install openssh-client -y )'
4
+ - 'which rsync || ( apt-get install rsync -yqq --force-yes )'
5
+ - eval $(ssh-agent -s)
6
+ - ssh-add <(echo "$SSH_PRIVATE_KEY")
7
+ - mkdir -p ~/.ssh
8
+ - '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config'
9
+ - ruby -v
10
+ - gem update --system
11
+ - gem install bundler -v '~>1.13'
12
+ - gem install ronn -v '0.7.3'
13
+ - bundler --version
14
+ - bundler install
15
+
16
+ stages:
17
+ - test
18
+ - release
19
+ - deploy
20
+
21
+ test_feature:
22
+ image: ruby:2.1
23
+ stage: test
24
+ environment: test
25
+ only:
26
+ - /^feature/
27
+ script:
28
+ - ./bin/test.sh
29
+
30
+ test_21:
31
+ image: ruby:2.1
32
+ stage: test
33
+ environment: test
34
+ only:
35
+ - tags
36
+ script:
37
+ - ./bin/test.sh
38
+
39
+ test_22:
40
+ image: ruby:2.2
41
+ stage: test
42
+ environment: test
43
+ only:
44
+ - tags
45
+ script:
46
+ - ./bin/test.sh
47
+
48
+ test_23:
49
+ image: ruby:2.3
50
+ stage: test
51
+ environment: test
52
+ only:
53
+ - tags
54
+ script:
55
+ - ./bin/test.sh
56
+
57
+ test_24:
58
+ image: ruby:2.4.0
59
+ stage: test
60
+ environment: test
61
+ only:
62
+ - tags
63
+ script:
64
+ - ./bin/test.sh
65
+
66
+ release:
67
+ image: ruby:2.4.0
68
+ stage: release
69
+ environment: gem
70
+ only:
71
+ - tags
72
+ script:
73
+ - mkdir -p ~/.gem
74
+ - 'printf "%s\n:rubygems_api_key: %s" "---" "${RUBYGEMSORG_API_KEY}" > ~/.gem/credentials; chmod 0600 ~/.gem/credentials'
75
+ - ./bin/release.sh
76
+
77
+ deploy_dev:
78
+ image: ruby:2.4.0
79
+ stage: deploy
80
+ environment: homepage_dev
81
+ only:
82
+ - develop
83
+ script:
84
+ - ./bin/build.sh
85
+ - ./bin/publish
86
+
87
+ deploy_prod:
88
+ image: ruby:2.4.0
89
+ stage: deploy
90
+ environment: homepage_prod
91
+ only:
92
+ - tags
93
+ script:
94
+ - ./bin/build.sh
95
+ - ./bin/publish
data/.travis.yml ADDED
@@ -0,0 +1,23 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.1
4
+ - 2.2
5
+ - 2.3
6
+ - 2.4.0
7
+ - ruby-head
8
+ sudo: required
9
+ before_install:
10
+ - gem --version
11
+ - gem update --system
12
+ - gem install bundler -v '~>1.13'
13
+ - bundler --version
14
+ install:
15
+ - bundler install
16
+ - 'gem build "${GEMSPEC_FILE}"'
17
+ - 'gem install "${GEM_NAME}"-*.gem'
18
+ - 'gem list -l "${GEM_NAME}"'
19
+ script:
20
+ - ./bin/test.sh
21
+ - cd
22
+ - which -a timr
23
+ - timr --version
data/bin/build_info.sh CHANGED
@@ -21,7 +21,8 @@ timr: %s
21
21
 
22
22
  --- build ---
23
23
  id: %s
24
- ref: %s@%s
24
+ branch: %s
25
+ commit: %s
25
26
  stage: %s
26
27
  server: %s %s
27
- " "${DATE}" "${RUBY_VERSION}" "${TIMR_VERSION}" "${CI_BUILD_ID}" "${CI_BUILD_REF}" "${CI_BUILD_REF_NAME}" "${CI_BUILD_STAGE}" "${CI_SERVER_NAME}" "${CI_SERVER_VERSION}"
28
+ " "${DATE}" "${RUBY_VERSION}" "${TIMR_VERSION}" "${CI_BUILD_ID}" "${CI_BUILD_REF_NAME}" "${CI_BUILD_REF}" "${CI_BUILD_STAGE}" "${CI_SERVER_NAME}" "${CI_SERVER_VERSION}"
data/bin/install.sh CHANGED
@@ -37,13 +37,15 @@ echo "install gem file '$gem_file'"
37
37
  gem install "$gem_file"
38
38
 
39
39
  # Create tmp directory.
40
- if [[ ! -d tmp ]]; then
41
- mkdir -p tmp
40
+ if [[ ! -d tmp/releases ]]; then
41
+ mkdir -p tmp/releases
42
+
42
43
  chmod u=rwx,go-rwx tmp
44
+ chmod u=rwx,go-rwx tmp/releases
43
45
  fi
44
46
 
45
47
  if [[ "$option" = "-f" ]]; then
46
- mv -v "$gem_file" tmp
48
+ mv -v "$gem_file" tmp/releases
47
49
  else
48
- mv -v -i "$gem_file" tmp
50
+ mv -v -i "$gem_file" tmp/releases
49
51
  fi
data/bin/publish CHANGED
@@ -27,10 +27,17 @@ fi
27
27
 
28
28
  which rsync &> /dev/null || { echo 'ERROR: rsync not found in PATH'; exit 1; }
29
29
 
30
- remote_path=$RSYNC_REMOTE_PATH_DEVELOP
31
- if [[ "$CI_BUILD_REF_NAME" = "master" ]]; then
32
- remote_path=$RSYNC_REMOTE_PATH_MASTER
33
- fi
30
+ echo "CI_BUILD_REF_NAME: '$CI_BUILD_REF_NAME'"
31
+
32
+ case "$CI_BUILD_REF_NAME" in
33
+ # For example v0.4.0
34
+ v*.*)
35
+ remote_path=$RSYNC_REMOTE_PATH_MASTER
36
+ ;;
37
+ *)
38
+ remote_path=$RSYNC_REMOTE_PATH_DEVELOP
39
+ ;;
40
+ esac
34
41
 
35
42
  echo "rsync to '${RSYNC_USER}@${RSYNC_HOST}:${remote_path}'"
36
43
  rsync ${RSYNC_OPTIONS} build.txt coverage api "${RSYNC_USER}@${RSYNC_HOST}:${remote_path}"
data/bin/release.sh CHANGED
@@ -28,8 +28,10 @@ echo "push gem file '$gem_file'"
28
28
  gem push "$gem_file"
29
29
 
30
30
  # Create tmp directory.
31
- if [[ ! -d tmp ]]; then
32
- mkdir -p tmp
31
+ if [[ ! -d tmp/releases ]]; then
32
+ mkdir -p tmp/releases
33
+
33
34
  chmod u=rwx,go-rwx tmp
35
+ chmod u=rwx,go-rwx tmp/releases
34
36
  fi
35
- mv -v -i "$gem_file" tmp
37
+ mv -v -i "$gem_file" tmp/releases
@@ -103,6 +103,7 @@ function _timr_report_main {
103
103
  --all
104
104
  --tasks
105
105
  --tracks
106
+ --format
106
107
  --csv
107
108
  --force
108
109
  )
@@ -190,7 +190,7 @@ module TheFox
190
190
  begin_datetime_s,
191
191
  end_datetime_s,
192
192
  duration ? duration.to_human : '---',
193
- task.short_id,
193
+ task.id_foreign_or_short,
194
194
  '%s %s' % [track.short_id, track.title(15)],
195
195
  ]
196
196
  end
@@ -220,7 +220,7 @@ module TheFox
220
220
  begin_datetime_s,
221
221
  end_datetime_s,
222
222
  duration ? duration.to_human : '---',
223
- task.short_id,
223
+ task.id_foreign_or_short,
224
224
  '%s %s' % [track.short_id, track.title(15)],
225
225
  ]
226
226
  end
@@ -27,6 +27,7 @@ module TheFox
27
27
  @to_opt = nil
28
28
  # @billed_opt = false
29
29
  # @unbilled_opt = false
30
+ @format_opt = nil
30
31
  @csv_opt = nil
31
32
  @force_opt = false
32
33
 
@@ -60,6 +61,9 @@ module TheFox
60
61
  # when '--unbilled'
61
62
  # @unbilled_opt = true
62
63
 
64
+ when '--format'
65
+ @format_opt = argv.shift
66
+
63
67
  when '--csv'
64
68
  @csv_opt = argv.shift
65
69
  if !@csv_opt
@@ -129,6 +133,14 @@ module TheFox
129
133
  else
130
134
  export_tasks_csv
131
135
  end
136
+ elsif @format_opt
137
+ if @tasks_opt
138
+ print_formatted_task_list
139
+ elsif @tracks_opt
140
+ print_formatted_track_list
141
+ else
142
+ print_formatted_task_list
143
+ end
132
144
  else
133
145
  if @tasks_opt
134
146
  print_task_table
@@ -215,7 +227,7 @@ module TheFox
215
227
  duration.to_human,
216
228
  unbilled_duration.to_human,
217
229
  # tracks_c,
218
- '%s %s' % [task.short_id, task.foreign_id ? task.foreign_id : task.name(15)]
230
+ '%s %s' % [task.id_foreign_or_short, task.name(15)]
219
231
  ]
220
232
  end
221
233
 
@@ -243,6 +255,13 @@ module TheFox
243
255
  end
244
256
  end
245
257
 
258
+ def print_formatted_task_list
259
+ puts 'print_formatted_task_list'
260
+ filtered_tasks.each do |task|
261
+ puts task.formatted(@format_opt)
262
+ end
263
+ end
264
+
246
265
  def print_track_table
247
266
  puts "From #{@from_opt.strftime('%F %T %z')}"
248
267
  puts " To #{@to_opt.strftime('%F %T %z')}"
@@ -303,7 +322,7 @@ module TheFox
303
322
  track.begin_datetime_s(@filter_options),
304
323
  track.end_datetime_s(@filter_options),
305
324
  duration.to_human,
306
- '%s' % [task.foreign_id ? task.foreign_id : task.short_id],
325
+ '%s' % [task.id_foreign_or_short],
307
326
  '%s %s' % [track.short_id, track.title(15)],
308
327
  ]
309
328
  end
@@ -331,6 +350,13 @@ module TheFox
331
350
  end
332
351
  end
333
352
 
353
+ def print_formatted_track_list
354
+ puts 'print_formatted_track_list'
355
+ @timr.tracks(@filter_options).each do |track_id, track|
356
+ puts track.formatted(@format_opt)
357
+ end
358
+ end
359
+
334
360
  def export_tasks_csv
335
361
  if @csv_opt == '-'
336
362
  csv_file_handle = STDOUT
@@ -660,11 +686,13 @@ module TheFox
660
686
  end
661
687
 
662
688
  def help
663
- puts 'usage: timr report '
689
+ puts 'usage: timr report [-d|--day <date>] [-m|--month <[YYYY-]MM>]'
690
+ puts ' [-y|--year [<YYYY>]] [-a|--all] [--tasks|--tracks]'
691
+ puts ' [--csv <path>] [--force]'
664
692
  puts ' or: timr report [-h|--help]'
665
693
  puts
666
694
  puts 'Options'
667
- puts ' -d, --day <date> A single day from 00:00 to 23:59.'
695
+ puts ' -d, --day [<date>] A single day from 00:00 to 23:59.'
668
696
  puts ' -m, --month <[YYYY-]MM> A single month from 01 to 31.'
669
697
  puts ' -y, --year [<YYYY>] A single year from 01-01 to 12-31.'
670
698
  puts ' -a, --all All.'
@@ -672,6 +700,7 @@ module TheFox
672
700
  puts ' --tracks Export Tracks'
673
701
  # puts ' --billed Filter only Tasks/Tracks which are billed.'
674
702
  # puts ' --unbilled Filter only Tasks/Tracks which are not billed.'
703
+ puts ' --format Format Tasks and Tracks output.'
675
704
  puts " --csv <path> Export as CSV file. Use '--csv -' to use STDOUT."
676
705
  puts " --force Force overwrite file."
677
706
  puts
@@ -680,6 +709,27 @@ module TheFox
680
709
  puts
681
710
  HelpCommand.print_datetime_help
682
711
  puts
712
+ puts 'Task Format'
713
+ puts ' %id ID'
714
+ puts ' %sid Short ID'
715
+ puts ' %fid Foreign ID'
716
+ puts ' %n Name'
717
+ puts ' %d Description'
718
+ puts
719
+ puts 'Track Format'
720
+ puts ' %id ID'
721
+ puts ' %sid Short ID'
722
+ puts ' %m Message'
723
+ puts ' %bdt Begin DateTime'
724
+ puts ' %bd Begin Date'
725
+ puts ' %bt Begin Time'
726
+ puts ' %edt End DateTime'
727
+ puts ' %ed End Date'
728
+ puts ' %et End Time'
729
+ puts
730
+ puts "Use '%T' prefix for each Task attribute for Track formatting."
731
+ puts "For example use '%Tid' to use the Task ID."
732
+ puts
683
733
  end
684
734
 
685
735
  end # class TrackCommand
@@ -115,7 +115,8 @@ module TheFox
115
115
  row << remaining_time_s
116
116
  row << remaining_time_percent_s
117
117
  end
118
- row << task.short_id
118
+
119
+ row << task.id_foreign_or_short
119
120
 
120
121
  if @verbose_opt
121
122
  row << '%s %s' % [track.short_id, track.title]
@@ -21,6 +21,7 @@ module TheFox
21
21
 
22
22
  def initialize(argv = Array.new)
23
23
  super()
24
+ # puts "argv #{argv}"
24
25
 
25
26
  @help_opt = false
26
27
  @show_opt = false
@@ -71,6 +72,7 @@ module TheFox
71
72
  @description_opt = argv.shift
72
73
  when '-e', '--est', '--estimation'
73
74
  @estimation_opt = argv.shift
75
+ # puts "est: #{@estimation_opt}"
74
76
  when '-b', '--billed'
75
77
  @billed_opt = true
76
78
  when '--unbilled'
@@ -99,6 +101,8 @@ module TheFox
99
101
  else
100
102
  @tasks_opt << arg
101
103
  end
104
+
105
+ # puts "argv #{argv}"
102
106
  end
103
107
 
104
108
  if @foreign_id_opt && @unset_foreign_id_opt
@@ -169,14 +173,14 @@ module TheFox
169
173
  end
170
174
  task_id = @tasks_opt.first
171
175
 
172
- if @foreign_id_opt.nil? && @unset_foreign_id_opt.nil?
173
- @name_opt.nil? && @description_opt.nil? &&
174
- @estimation_opt.nil? &&
175
- @billed_opt.nil? && @unbilled_opt.nil? &&
176
- @hourly_rate_opt.nil? && @unset_hourly_rate_opt.nil? &&
176
+ if @foreign_id_opt.nil? && @unset_foreign_id_opt.nil? && \
177
+ @name_opt.nil? && @description_opt.nil? && \
178
+ @estimation_opt.nil? && \
179
+ @billed_opt.nil? && @unbilled_opt.nil? && \
180
+ @hourly_rate_opt.nil? && @unset_hourly_rate_opt.nil? && \
177
181
  @has_flat_rate_opt.nil? && @unset_flat_rate_opt.nil?
178
182
 
179
- raise TaskCommandError, "No option given. See 'time task -h'."
183
+ raise TaskCommandError, "No option given. See 'timr task -h'."
180
184
  end
181
185
 
182
186
  task = @timr.get_task_by_id(task_id)
@@ -256,12 +260,12 @@ module TheFox
256
260
 
257
261
  def run_show_all
258
262
  @timr.tasks.each do |task_id, task|
259
- full_id = @verbose_opt ? task.id : task.short_id
263
+ task_id = @verbose_opt ? task.id : task.short_id
260
264
 
261
265
  if task.foreign_id
262
- puts '%s %s %s' % [full_id, task.foreign_id, task.name_s]
266
+ puts '%s %s %s' % [task_id, task.foreign_id, task.name_s]
263
267
  else
264
- puts '%s - %s' % [full_id, task.name_s]
268
+ puts '%s - %s' % [task_id, task.name_s]
265
269
  end
266
270
  end
267
271
  end
@@ -307,7 +307,7 @@ module TheFox
307
307
  end
308
308
 
309
309
  def check_opts_add
310
- if @start_date_opt || @start_time_opt ||
310
+ if @start_date_opt || @start_time_opt || \
311
311
  @end_date_opt || @end_time_opt
312
312
 
313
313
  if @start_date_opt.nil?
@@ -327,9 +327,9 @@ module TheFox
327
327
  end
328
328
 
329
329
  def check_opts_set
330
- if @start_date_opt.nil? && @start_time_opt.nil? &&
331
- @end_date_opt.nil? && @end_time_opt.nil? &&
332
- @message_opt.nil? && @task_id_opt.nil? &&
330
+ if @start_date_opt.nil? && @start_time_opt.nil? && \
331
+ @end_date_opt.nil? && @end_time_opt.nil? && \
332
+ @message_opt.nil? && @task_id_opt.nil? && \
333
333
  @billed_opt.nil? && @unbilled_opt.nil?
334
334
 
335
335
  raise TrackCommandError, "No option given. See 'timr track --help'."
@@ -29,6 +29,11 @@ module TheFox
29
29
  @tracks = Hash.new
30
30
  end
31
31
 
32
+ # Get Foreign ID or Short ID.
33
+ def id_foreign_or_short
34
+ @foreign_id ? @foreign_id : short_id
35
+ end
36
+
32
37
  def foreign_id=(foreign_id)
33
38
  @foreign_id = foreign_id
34
39
 
@@ -214,9 +219,12 @@ module TheFox
214
219
  bdt = track.begin_datetime
215
220
  edt = track.end_datetime || Time.now
216
221
 
217
- bdt && (
218
- bdt < from_opt && edt > from_opt || # Track A, B
219
- bdt >= from_opt && edt >= from_opt # Track C, D, F
222
+ bdt && ( \
223
+ # Track A, B
224
+ bdt < from_opt && edt > from_opt || \
225
+
226
+ # Track C, D, F
227
+ bdt >= from_opt && edt >= from_opt
220
228
  )
221
229
  }
222
230
  elsif from_opt.nil? && !to_opt.nil?
@@ -225,9 +233,12 @@ module TheFox
225
233
  bdt = track.begin_datetime
226
234
  edt = track.end_datetime || Time.now
227
235
 
228
- bdt && (
229
- bdt < to_opt && edt <= to_opt || # Track B, D, E
230
- bdt < to_opt && edt > to_opt # Track A, C
236
+ bdt && ( \
237
+ # Track B, D, E
238
+ bdt < to_opt && edt <= to_opt || \
239
+
240
+ # Track A, C
241
+ bdt < to_opt && edt > to_opt
231
242
  )
232
243
  }
233
244
  elsif !from_opt.nil? && !to_opt.nil?
@@ -236,11 +247,18 @@ module TheFox
236
247
  bdt = track.begin_datetime
237
248
  edt = track.end_datetime || Time.now
238
249
 
239
- bdt && (
240
- bdt >= from_opt && edt <= to_opt || # Track D
241
- bdt < from_opt && edt > to_opt || # Track A
242
- bdt < from_opt && edt <= to_opt && edt > from_opt || # Track B
243
- bdt >= from_opt && edt > to_opt && bdt < to_opt # Track C
250
+ bdt && ( \
251
+ # Track D
252
+ bdt >= from_opt && edt <= to_opt || \
253
+
254
+ # Track A
255
+ bdt < from_opt && edt > to_opt || \
256
+
257
+ # Track B
258
+ bdt < from_opt && edt <= to_opt && edt > from_opt || \
259
+
260
+ # Track C
261
+ bdt >= from_opt && edt > to_opt && bdt < to_opt
244
262
  )
245
263
  }
246
264
  else
@@ -759,13 +777,9 @@ module TheFox
759
777
  def to_track_array(options = Hash.new)
760
778
  full_id_opt = options.fetch(:full_id, false) # @TODO full_id unit test
761
779
 
762
- full_id = full_id_opt ? self.id : self.short_id
780
+ full_id = full_id_opt ? self.id : ( self.foreign_id ? self.foreign_id : self.short_id )
763
781
 
764
- name_a = ["Task: #{full_id}"]
765
-
766
- if self.foreign_id
767
- name_a << self.foreign_id
768
- end
782
+ name_a = ['Task:', full_id]
769
783
  if self.name
770
784
  name_a << self.name
771
785
  end
@@ -782,12 +796,10 @@ module TheFox
782
796
 
783
797
  # Used to print informations to STDOUT.
784
798
  def to_compact_array
799
+ full_id = self.foreign_id ? self.foreign_id : self.short_id
800
+
785
801
  to_ax = Array.new
786
- if self.foreign_id
787
- to_ax << 'Task: %s %s %s' % [self.short_id, self.foreign_id, self.name]
788
- else
789
- to_ax << 'Task: %s %s' % [self.short_id, self.name]
790
- end
802
+ to_ax << 'Task: %s %s' % [full_id, self.name]
791
803
  if self.description
792
804
  to_ax << 'Description: %s' % [self.description]
793
805
  end
@@ -810,13 +822,11 @@ module TheFox
810
822
  def to_detailed_array(options = Hash.new)
811
823
  full_id_opt = options.fetch(:full_id, false)
812
824
 
825
+ full_id = full_id_opt ? self.id : self.short_id
826
+
813
827
  to_ax = Array.new
814
828
 
815
- if full_id_opt
816
- to_ax << 'Task: %s' % [self.id]
817
- else
818
- to_ax << 'Task: %s' % [self.short_id]
819
- end
829
+ to_ax << 'Task: %s' % [full_id]
820
830
 
821
831
  if self.foreign_id
822
832
  to_ax << 'Foreign ID: %s' % [self.foreign_id]
@@ -925,6 +935,22 @@ module TheFox
925
935
  to_ax
926
936
  end
927
937
 
938
+ # Return formatted String.
939
+ #
940
+ # - `%id` - ID
941
+ # - `%sid` - Short ID
942
+ # - `%fid` - Foreign ID
943
+ # - `%n` - Name
944
+ # - `%d` - Description
945
+ def formatted(format, prefix = '%')
946
+ format
947
+ .gsub("#{prefix}id", self.id)
948
+ .gsub("#{prefix}sid", self.short_id ? self.short_id : '')
949
+ .gsub("#{prefix}fid", self.foreign_id ? self.foreign_id : '')
950
+ .gsub("#{prefix}n", self.name ? self.name : '')
951
+ .gsub("#{prefix}d", self.description ? self.description : '')
952
+ end
953
+
928
954
  def inspect
929
955
  "#<Task_#{short_id} tracks=#{@tracks.count}>"
930
956
  end
@@ -984,6 +1010,8 @@ module TheFox
984
1010
 
985
1011
  if @estimation
986
1012
  @meta['estimation'] = @estimation.to_i
1013
+ else
1014
+ @meta['estimation'] = nil
987
1015
  end
988
1016
  if @hourly_rate
989
1017
  @meta['hourly_rate'] = @hourly_rate.to_f
@@ -509,6 +509,43 @@ module TheFox
509
509
  self.id == track.id
510
510
  end
511
511
 
512
+ # Return formatted String.
513
+ #
514
+ # - `%id` - ID
515
+ # - `%sid` - Short ID
516
+ # - `%t` - Title generated from message.
517
+ # - `%m` - Message
518
+ # - `%bdt` - Begin DateTime
519
+ # - `%bd` - Begin Date
520
+ # - `%bt` - Begin Time
521
+ # - `%edt` - End DateTime
522
+ # - `%ed` - End Date
523
+ # - `%et` - End Time
524
+ def formatted(format)
525
+ formatted_s = format
526
+ .gsub('%id', self.id)
527
+ .gsub('%sid', self.short_id)
528
+ .gsub('%t', self.title ? self.title : '')
529
+ .gsub('%m', self.message ? self.message : '')
530
+ .gsub('%bdt', self.begin_datetime ? self.begin_datetime.strftime('%F %H:%M') : '')
531
+ .gsub('%bd', self.begin_datetime ? self.begin_datetime.strftime('%F') : '')
532
+ .gsub('%bt', self.begin_datetime ? self.begin_datetime.strftime('%H:%M') : '')
533
+ .gsub('%edt', self.end_datetime ? self.end_datetime.strftime('%F %H:%M') : '')
534
+ .gsub('%ed', self.end_datetime ? self.end_datetime.strftime('%F') : '')
535
+ .gsub('%et', self.end_datetime ? self.end_datetime.strftime('%H:%M') : '')
536
+
537
+ if @task
538
+ formatted_s = @task.formatted(formatted_s, '%T')
539
+ else
540
+ tmp_task = Task.new
541
+ tmp_task.id = ''
542
+
543
+ formatted_s = tmp_task.formatted(formatted_s, '%T')
544
+ end
545
+
546
+ formatted_s
547
+ end
548
+
512
549
  def inspect
513
550
  "#<Track #{short_id}>"
514
551
  end
data/lib/timr/timr.rb CHANGED
@@ -39,7 +39,6 @@ module TheFox
39
39
  if @config.file_path.exist?
40
40
  @config.load_from_file
41
41
  else
42
- #@config.save_to_file
43
42
  @config.save_to_file(nil, true)
44
43
  end
45
44
 
data/lib/timr/version.rb CHANGED
@@ -2,8 +2,8 @@
2
2
  module TheFox
3
3
  module Timr
4
4
  NAME = 'Timr'
5
- VERSION = '0.4.0'
6
- DATE = '2017-04-13'
5
+ VERSION = '0.5.0'
6
+ DATE = '2017-04-16'
7
7
  HOMEPAGE = 'https://github.com/TheFox/timr'
8
8
 
9
9
  MODEL_DATETIME_FORMAT = '%FT%T%z'
data/man/index.txt ADDED
@@ -0,0 +1,15 @@
1
+
2
+ timr(1) timr.1.ronn
3
+ timr-continue(1) timr-continue.1.ronn
4
+ timr-log(1) timr-log.1.ronn
5
+ timr-pause(1) timr-pause.1.ronn
6
+ timr-pop(1) timr-pop.1.ronn
7
+ timr-push(1) timr-push.1.ronn
8
+ timr-report(1) timr-report.1.ronn
9
+ timr-start(1) timr-start.1.ronn
10
+ timr-status(1) timr-status.1.ronn
11
+ timr-stop(1) timr-stop.1.ronn
12
+ timr-task(1) timr-task.1.ronn
13
+ timr-track(1) timr-track.1.ronn
14
+
15
+ timr-ftime(7) timr-ftime.7.ronn
data/man/timr-report.1 CHANGED
@@ -14,41 +14,37 @@ This command is designed to print a list of Tasks or Tracks to STDOUT and to exp
14
14
  .
15
15
  .SH "OPTIONS"
16
16
  .
17
- .TP
18
- \-d, \-\-day \fIdate\fR
19
- A single day from 00:00 to 23:59\. See timr\-ftime(7)\.
17
+ .IP "\(bu" 4
18
+ \-d, \-\-day \fIdate\fR: A single day from 00:00 to 23:59\. See timr\-ftime(7)\.
20
19
  .
21
- .TP
22
- \-m, \-\-month \fI[YYYY\-]MM\fR
23
- A single month from 01 to 31\.
20
+ .IP "\(bu" 4
21
+ \-m, \-\-month \fI[YYYY\-]MM\fR: A single month from 01 to 31\.
24
22
  .
25
- .TP
26
- \-y, \-\-year [\fIYYYY\fR]
27
- A single year from 01\-01 to 12\-31\.
23
+ .IP "\(bu" 4
24
+ \-y, \-\-year [\fIYYYY\fR]: A single year from 01\-01 to 12\-31\.
28
25
  .
29
- .TP
30
- \-a, \-\-all
31
- Export all\.
26
+ .IP "\(bu" 4
27
+ \-a, \-\-all: Export all\.
32
28
  .
33
- .TP
34
- \-\-tasks
35
- Export Tasks (default)
29
+ .IP "\(bu" 4
30
+ \-\-tasks : Export Tasks (default)
36
31
  .
37
- .TP
38
- \-\-tracks
39
- Export Tracks
32
+ .IP "\(bu" 4
33
+ \-\-tracks: Export Tracks
40
34
  .
41
- .TP
42
- \-\-csv \fIpath\fR
43
- Export as CSV file\. Use \fB\-\-csv \-\fR to use STDOUT\.
35
+ .IP "\(bu" 4
36
+ \-\-format See TASK FORMAT and TRACK FORMAT section\.
44
37
  .
45
- .TP
46
- \-\-force
47
- Force overwrite file\.
38
+ .IP "\(bu" 4
39
+ \-\-csv \fIpath\fR: Export as CSV file\. Use \fB\-\-csv \-\fR to use STDOUT\.
48
40
  .
49
- .TP
50
- \-h, \-\-help
51
- Displays the help page\.
41
+ .IP "\(bu" 4
42
+ \-\-force : Force overwrite file\.
43
+ .
44
+ .IP "\(bu" 4
45
+ \-h, \-\-help: Displays the help page\.
46
+ .
47
+ .IP "" 0
52
48
  .
53
49
  .SH "EXAMPLES"
54
50
  .
@@ -61,6 +57,8 @@ timr report \-\-day 2017\-01\-02 \-\-csv timr_report_20170102\.csv \-\-tracks
61
57
  timr report \-\-month 2017\-01 \-\-csv timr_report_201701\.csv
62
58
  timr report \-\-year 2017 \-\-csv timr_report_2017\.csv
63
59
  timr report \-\-all \-\-csv timr_report_all\.csv
60
+ timr report \-\-format \'\- %id\'
61
+ timr report \-\-tracks \-\-format \'\- %Tsid %sid %t\'
64
62
  .
65
63
  .fi
66
64
  .
@@ -218,6 +216,73 @@ TRACK_IS_BILLED
218
216
  .P
219
217
  The last row in CSV files is always the total sum\.
220
218
  .
219
+ .SH "TASK FORMAT"
220
+ .
221
+ .TP
222
+ %id
223
+ ID
224
+ .
225
+ .TP
226
+ %sid
227
+ Short ID
228
+ .
229
+ .TP
230
+ %fid
231
+ Foreign ID
232
+ .
233
+ .TP
234
+ %n
235
+ Name
236
+ .
237
+ .TP
238
+ %d
239
+ Description
240
+ .
241
+ .SH "TRACK FORMAT"
242
+ .
243
+ .TP
244
+ %id
245
+ ID
246
+ .
247
+ .TP
248
+ %sid
249
+ Short ID
250
+ .
251
+ .TP
252
+ %t
253
+ Title generated from message\.
254
+ .
255
+ .TP
256
+ %m
257
+ Message
258
+ .
259
+ .TP
260
+ %bdt
261
+ Begin DateTime
262
+ .
263
+ .TP
264
+ %bd
265
+ Begin Date
266
+ .
267
+ .TP
268
+ %bt
269
+ Begin Time
270
+ .
271
+ .TP
272
+ %edt
273
+ End DateTime
274
+ .
275
+ .TP
276
+ %ed
277
+ End Date
278
+ .
279
+ .TP
280
+ %et
281
+ End Time
282
+ .
283
+ .P
284
+ Use \fB%T\fR prefix for each Task attribute for Track formatting\. For example use \fB%Tid\fR to use the Task ID\.
285
+ .
221
286
  .SH "API REFERENCE"
222
287
  \fIhttps://timr\.fox21\.at/api/TheFox/Timr/Command/ReportCommand\.html\fR
223
288
  .
@@ -29,6 +29,9 @@ This command is designed to print a list of Tasks or Tracks to STDOUT and to exp
29
29
  * --tracks:
30
30
  Export Tracks
31
31
 
32
+ * --format
33
+ See TASK FORMAT and TRACK FORMAT section.
34
+
32
35
  * --csv <path>:
33
36
  Export as CSV file. Use `--csv -` to use STDOUT.
34
37
 
@@ -48,6 +51,8 @@ timr report --day 2017-01-02 --csv timr_report_20170102.csv --tracks
48
51
  timr report --month 2017-01 --csv timr_report_201701.csv
49
52
  timr report --year 2017 --csv timr_report_2017.csv
50
53
  timr report --all --csv timr_report_all.csv
54
+ timr report --format '- %id'
55
+ timr report --tracks --format '- %Tsid %sid %t'
51
56
  ```
52
57
 
53
58
  ## TASK TABLE COLUMNS
@@ -184,6 +189,57 @@ timr report --all --csv timr_report_all.csv
184
189
 
185
190
  The last row in CSV files is always the total sum.
186
191
 
192
+ ## TASK FORMAT
193
+
194
+ * %id:
195
+ ID
196
+
197
+ * %sid:
198
+ Short ID
199
+
200
+ * %fid:
201
+ Foreign ID
202
+
203
+ * %n:
204
+ Name
205
+
206
+ * %d:
207
+ Description
208
+
209
+ ## TRACK FORMAT
210
+
211
+ * %id:
212
+ ID
213
+
214
+ * %sid:
215
+ Short ID
216
+
217
+ * %t:
218
+ Title generated from message.
219
+
220
+ * %m:
221
+ Message
222
+
223
+ * %bdt:
224
+ Begin DateTime
225
+
226
+ * %bd:
227
+ Begin Date
228
+
229
+ * %bt:
230
+ Begin Time
231
+
232
+ * %edt:
233
+ End DateTime
234
+
235
+ * %ed:
236
+ End Date
237
+
238
+ * %et:
239
+ End Time
240
+
241
+ Use `%T` prefix for each Task attribute for Track formatting. For example use `%Tid` to use the Task ID.
242
+
187
243
  ## API REFERENCE
188
244
 
189
245
  <https://timr.fox21.at/api/TheFox/Timr/Command/ReportCommand.html>
data/timr.sublime-project CHANGED
@@ -24,6 +24,13 @@
24
24
  "working_dir": "${project_path:${folder}}",
25
25
  "path": "$HOME/.rbenv/shims:/usr/local/bin:$PATH",
26
26
  "shell": true
27
+ },
28
+ {
29
+ "name": "Install",
30
+ "cmd": [ "./bin/install.sh -f" ],
31
+ "working_dir": "${project_path:${folder}}",
32
+ "path": "$HOME/.rbenv/shims:/usr/local/bin:$PATH",
33
+ "shell": true
27
34
  }
28
35
  ]
29
36
  }
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: timr
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Christian Mayer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-04-13 00:00:00.000000000 Z
11
+ date: 2017-04-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: minitest
@@ -191,6 +191,7 @@ files:
191
191
  - lib/timr/version.rb
192
192
  - man/.gitignore
193
193
  - man/_footer
194
+ - man/index.txt
194
195
  - man/timr-continue.1
195
196
  - man/timr-continue.1.ronn
196
197
  - man/timr-ftime.7