myworklog 1.1.1 → 1.1.5

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: 694b96c440effe98b20dea018f6bf98f2eff3c93efaa57733a8e2db001531225
4
- data.tar.gz: cdf1f7fd2db0bed741c68bb3c99ed2af1dd99b7c12793c35c68974cd5fa7a2c5
3
+ metadata.gz: 6fc3e032e7220ac9749c9644ee0f1f238e0492043f89288afdf7c443aacc5fcc
4
+ data.tar.gz: 9ceac43973316b614a5939b04918e12b8a3295af91e328f6a1ea5588e51a6edc
5
5
  SHA512:
6
- metadata.gz: 41dcf2cd09f51b0667e32b6137aaf360b3aaa975f1f4809f1cebb81a66f336c997c02b13489f71da0fa705053cb74c88bd5e80ef8a1b19288c79be468cf058d2
7
- data.tar.gz: 857ffa80fbdc6bb05d2a73d4de1c15ba751085a22d776312243c848b49757ff623990f0bae2ad85001aa2c8051834f0387cd8f2fc23a62869e48a0d157226699
6
+ metadata.gz: 07b24c7a42117bc3e0f00c65ac1f5443a1785584a24583538570c0a585353bd2c18d365917a17780e874277ed938a73d0999d9bda54aadc66152447ab3cb3a71
7
+ data.tar.gz: 430bab758bd15ba3efcabadbf69a287bc6ead53a27be26e3ac000850ba7e3cd347c5dff7baf64e1bfa17ef2806e6377041b429b44c0917ab383f3235615456c1
data/bin/myworklog CHANGED
@@ -1,3 +1,3 @@
1
1
  #!/usr/bin/env ruby
2
- require 'worklog_cli'
2
+ require 'work_log_cli'
3
3
  WorkLogCli.start(ARGV)
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'work_log_controller'
4
+
5
+ class ListStrategy
6
+ attr_reader :date, :month, :year
7
+
8
+ def initialize(date, month, year)
9
+ @date = date
10
+ @month = month
11
+ @year = year
12
+ end
13
+
14
+ def execute
15
+ return list_by_month_and_year if @month && @year
16
+ return list_by_month_current_year if @month && @year.nil?
17
+ return list_by_year if @month.nil? && @year
18
+
19
+ list_by_date
20
+ end
21
+
22
+ private
23
+
24
+ def list_by_date
25
+ WorkLogController.new.list(@date)
26
+ end
27
+
28
+ def list_by_month_and_year
29
+ WorkLogController.new.find_by_month_and_year(@month, @year)
30
+ end
31
+
32
+ def list_by_month_current_year
33
+ WorkLogController.new.find_by_month_and_year(@month, Date.today.year)
34
+ end
35
+
36
+ def list_by_year
37
+ WorkLogController.new.find_by_year(@year)
38
+ end
39
+ end
data/lib/printer.rb ADDED
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Printer
4
+ def print(work_log_list)
5
+ puts ''
6
+ if work_log_list.empty?
7
+ puts 'Work log(s) not found'
8
+ else
9
+ work_log_list.each do |work_log|
10
+ puts "#{work_log.id} | #{work_log}"
11
+ end
12
+ end
13
+ puts ''
14
+ end
15
+ end
@@ -3,7 +3,9 @@
3
3
  require 'thor'
4
4
  require 'date'
5
5
  require 'rubygems'
6
- require_relative 'work_log_controller'
6
+ require 'work_log_controller'
7
+ require 'list_strategy'
8
+ require 'printer'
7
9
 
8
10
  DATE_FORMAT = 'DD/MM/YYYY'
9
11
 
@@ -25,39 +27,36 @@ class WorkLogCli < Thor
25
27
 
26
28
  Availble options:
27
29
 
30
+ with [DATE], prints the work logged for the given date in DD/MM/YYYY
31
+
28
32
  With -m option, prints all the work logs for the specified month, assumes the current year
29
33
 
30
34
  With -m and -y options, prints all the work logs for the specified month and year
31
35
 
32
36
  With -y option, prints all the work logs for the specified year
33
37
 
38
+ With --all option, prints all the work logs from the database
39
+
34
40
  Usage examples:
35
41
 
36
- `myworklog -m 2` Will print all the work logs logged in Februrary of the current year
42
+ `myworklog 10/10/2019` Will print all the work logs for the given date
43
+
44
+ `myworklog -m 2` Will print all the work logs loggedi n Februrary of the current year
37
45
 
38
46
  `myworklog -m 2 -y 2019` Will print all the work logs logged in Februrary of 2019
39
47
 
40
48
  `myworklog -y 2020` Will print all the work logs logged in 2020
41
49
 
50
+ `myworklog --all`
51
+
42
52
  LONGDESC
43
53
  options m: :numeric
44
54
  options y: :numeric
55
+ options all: :string
45
56
  def list(date = '')
46
- if options[:m] && options[:y]
47
- print(WorkLogController.new.find_by_month_and_year(options[:m], options[:y]))
48
- elsif options[:m] && options[:y].nil?
49
- print(WorkLogController.new.find_by_month_and_year(options[:m], Date.today.year))
50
- elsif options[:m].nil? && options[:y]
51
- print(WorkLogController.new.find_by_year(options[:y]))
52
- else
53
- print(WorkLogController.new.list(date))
54
- end
55
- end
56
-
57
- desc 'list_all', 'prints all the work logs'
57
+ return print(WorkLogController.new.list_all) if options[:all]
58
58
 
59
- def list_all
60
- print(WorkLogController.new.list_all)
59
+ print(ListStrategy.new(date, options[:m], options[:y]).execute)
61
60
  end
62
61
 
63
62
  desc 'delete [ID]', 'Deletes the work log by ID. You can use the `list` command to retrieve the ID'
@@ -65,7 +64,7 @@ class WorkLogCli < Thor
65
64
  def delete(id)
66
65
  WorkLogController.new.delete(id)
67
66
  puts "Work log with #{id} ID has been deleted!"
68
- rescue Exception => e
67
+ rescue ArgumentError => e
69
68
  puts e
70
69
  end
71
70
 
@@ -78,15 +77,19 @@ class WorkLogCli < Thor
78
77
 
79
78
  private
80
79
 
80
+ def list_by_year(year)
81
+ print(WorkLogController.new.find_by_year(year))
82
+ end
83
+
84
+ def list_by_month(month)
85
+ print(WorkLogController.new.find_by_month_and_year(month, Date.today.year))
86
+ end
87
+
88
+ def list_by_month_and_year(month, year)
89
+ print(WorkLogController.new.find_by_month_and_year(month, year))
90
+ end
91
+
81
92
  def print(work_log_list)
82
- puts ''
83
- if work_log_list.empty?
84
- puts 'Work log(s) not found'
85
- else
86
- work_log_list.each do |work_log|
87
- puts "#{work_log.id} | #{work_log}"
88
- end
89
- end
90
- puts ''
93
+ Printer.new.print(work_log_list)
91
94
  end
92
95
  end
@@ -7,15 +7,19 @@ require_relative 'work_log'
7
7
 
8
8
  class WorkLogController
9
9
  def add_work_log(date, description)
10
+ if description.nil? || description.empty?
11
+ raise ArgumentError, 'Description must not be empty'
12
+ end
13
+
10
14
  WorkLogFileDao.new.save(create_work_log(date, description))
11
15
  end
12
16
 
13
17
  def list(date)
14
- WorkLogFileDao.new.list(parse_date(date))
18
+ sort_by_date(WorkLogFileDao.new.list(parse_date(date)))
15
19
  end
16
20
 
17
21
  def list_all
18
- WorkLogFileDao.new.list_all
22
+ sort_by_date(WorkLogFileDao.new.list_all)
19
23
  end
20
24
 
21
25
  def delete(id)
@@ -23,11 +27,11 @@ class WorkLogController
23
27
  end
24
28
 
25
29
  def find_by_month_and_year(month, year)
26
- WorkLogFileDao.new.find_by_month_and_year(month, year)
30
+ sort_by_date(WorkLogFileDao.new.find_by_month_and_year(month, year))
27
31
  end
28
32
 
29
33
  def find_by_year(year)
30
- WorkLogFileDao.new.find_by_year(year)
34
+ sort_by_date(WorkLogFileDao.new.find_by_year(year))
31
35
  end
32
36
 
33
37
  private
@@ -45,4 +49,8 @@ class WorkLogController
45
49
  Date.strptime(date, '%d/%m/%Y')
46
50
  end
47
51
  end
52
+
53
+ def sort_by_date(work_log_list)
54
+ work_log_list.sort_by(&:date)
55
+ end
48
56
  end
@@ -39,7 +39,7 @@ class WorkLogFileDao
39
39
 
40
40
  def delete(id)
41
41
  PStore.new(FULL_DB_FILE_PATH).transaction do |store|
42
- raise Exception, "Id #{id} not found" if store[id].nil?
42
+ raise ArgumentError, "Id #{id} not found" if store[id].nil?
43
43
 
44
44
  store.delete(id)
45
45
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: myworklog
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.1
4
+ version: 1.1.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gyowanny Queiroz
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-02-24 00:00:00.000000000 Z
11
+ date: 2020-02-26 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Log your work from cmd and keep track of what you have done... just in
14
14
  case your boss ask
@@ -20,10 +20,12 @@ extensions: []
20
20
  extra_rdoc_files: []
21
21
  files:
22
22
  - bin/myworklog
23
+ - lib/list_strategy.rb
24
+ - lib/printer.rb
23
25
  - lib/work_log.rb
26
+ - lib/work_log_cli.rb
24
27
  - lib/work_log_controller.rb
25
28
  - lib/work_log_file_dao.rb
26
- - lib/worklog_cli.rb
27
29
  homepage: http://rubygems.org/gems/myworklog
28
30
  licenses:
29
31
  - MIT