myworklog 1.0.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 52edc3202c110eab72423c6c78978fdb6b350805a19735f62371ebd0b833f312
4
+ data.tar.gz: 2919dac5538aaedd39618dbf27f036d5fe83d37dea201f8228a17146a2459010
5
+ SHA512:
6
+ metadata.gz: aff6e16f652b5d413862b40f7b0118b710c5f69e9297530f6f7ff73f6e78b6888e42aac4d9d1cbde740c8e53b6cf76424e8f744e63099a2b2657a8b9c1bb1e4b
7
+ data.tar.gz: 13590defc6c36c214354cadbebb4b3e66e794217839294e8e760aee2e010737c5bb91124e9934527c9af3091389eb1527d23c8a59716aa457865b11b5bd1172b
data/bin/myworklog ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+ require 'worklog_cli'
3
+ WorkLogCli.start(ARGV)
data/lib/work_log.rb ADDED
@@ -0,0 +1,13 @@
1
+ class WorkLog
2
+ attr_reader :id, :date, :description
3
+
4
+ def initialize(id, date, description)
5
+ @id = id
6
+ @date = date
7
+ @description = description
8
+ end
9
+
10
+ def to_s
11
+ "#{@date.strftime('%d/%m/%Y')} - #{@description}"
12
+ end
13
+ end
@@ -0,0 +1,39 @@
1
+ require 'securerandom'
2
+ require 'Date'
3
+ require_relative 'work_log_file_dao'
4
+ require_relative 'work_log'
5
+
6
+ class WorkLogController
7
+
8
+ def add_work_log(date, description)
9
+ WorkLogFileDao.new.save(create_work_log(date, description))
10
+ end
11
+
12
+ def list(date)
13
+ WorkLogFileDao.new.list(parse_date(date))
14
+ end
15
+
16
+ def list_all
17
+ WorkLogFileDao.new.list_all
18
+ end
19
+
20
+ def delete(id)
21
+ WorkLogFileDao.new.delete(id)
22
+ end
23
+
24
+ private
25
+
26
+ def create_work_log(date, description)
27
+ WorkLog.new(SecureRandom.uuid, parse_date(date), description)
28
+ end
29
+
30
+ def parse_date(date)
31
+ if date.nil? || date.empty? || date.downcase == 'today'
32
+ Date.today
33
+ elsif date.downcase == 'yesterday'
34
+ Date.today.prev_day
35
+ else
36
+ Date::strptime(date, "%d/%m/%Y")
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,42 @@
1
+ require 'pstore'
2
+ require 'fileutils'
3
+
4
+ class WorkLogFileDao
5
+ DB_FILE_NAME = 'myworklog.pstore'
6
+ DB_FOLDER = '.myworklog'
7
+ HOME_FOLDER = File.expand_path('~')
8
+ FULL_DB_FILE_PATH = "#{HOME_FOLDER}/#{DB_FOLDER}/#{DB_FILE_NAME}"
9
+
10
+ def initialize
11
+ db_folder_full_path = "#{HOME_FOLDER}/#{DB_FOLDER}"
12
+ FileUtils.mkdir_p(db_folder_full_path) unless File.directory?(db_folder_full_path)
13
+ end
14
+
15
+ def save(work_log)
16
+ PStore.new(FULL_DB_FILE_PATH).transaction { |store| store[work_log.id] = work_log }
17
+ end
18
+
19
+ def list(date)
20
+ store = PStore.new(FULL_DB_FILE_PATH)
21
+ list = []
22
+ store.transaction(true) do
23
+ store.roots
24
+ .map { |root| list << store[root] if store[root].date == date }
25
+ end
26
+ list
27
+ end
28
+
29
+ def list_all
30
+ store = PStore.new(FULL_DB_FILE_PATH)
31
+ list = []
32
+ store.transaction(true) { store.roots.map { |root| list << store[root] } }
33
+ list
34
+ end
35
+
36
+ def delete(id)
37
+ PStore.new(FULL_DB_FILE_PATH).transaction do |store|
38
+ raise Exception.new("Id #{id} not found") if store[id] == nil
39
+ store.delete(id)
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,50 @@
1
+ require 'thor'
2
+ require 'date'
3
+ require_relative 'work_log_controller'
4
+
5
+ DATE_FORMAT = 'DD/MM/YYYY'
6
+
7
+ class WorkLogCli < Thor
8
+ desc 'add [DATE] [DESCRIPTION]', "adds a new work log. Use 'today' as DATE for current date or 'yesterday'. Date format #{DATE_FORMAT}"
9
+
10
+ def add(date, description)
11
+ WorkLogController.new.add_work_log(date, description)
12
+ end
13
+
14
+ desc 'list [DATE]', "prints work logs limited by DATE. Use 'today' or leave it empty for current day. Date format #{DATE_FORMAT}"
15
+
16
+ def list(date='')
17
+ print(WorkLogController.new.list(date))
18
+ end
19
+
20
+ desc 'list_all', "prints all the work logs"
21
+
22
+ def list_all
23
+ print(WorkLogController.new.list_all)
24
+ end
25
+
26
+ desc 'delete [ID]', 'Deletes the work log by ID. Use list command before to retrieve the ID'
27
+
28
+ def delete(id)
29
+ begin
30
+ WorkLogController.new.delete(id)
31
+ puts "Work log with #{id} ID has been deleted!"
32
+ rescue Exception => msg
33
+ puts msg
34
+ end
35
+ end
36
+
37
+ private
38
+
39
+ def print(work_log_list)
40
+ puts ''
41
+ if work_log_list.empty?
42
+ puts 'Work log(s) not found'
43
+ elsif
44
+ work_log_list.each do |work_log|
45
+ puts "#{work_log.id} | #{work_log}"
46
+ end
47
+ end
48
+ puts ''
49
+ end
50
+ end
metadata ADDED
@@ -0,0 +1,51 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: myworklog
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.5
5
+ platform: ruby
6
+ authors:
7
+ - Gyowanny Queiroz
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2020-02-20 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: Log your work from cmd and keep track of what you have done. Just in
14
+ case your boss asks
15
+ email:
16
+ - gyowanny@gmail.com
17
+ executables:
18
+ - myworklog
19
+ extensions: []
20
+ extra_rdoc_files: []
21
+ files:
22
+ - bin/myworklog
23
+ - lib/work_log.rb
24
+ - lib/work_log_controller.rb
25
+ - lib/work_log_file_dao.rb
26
+ - lib/worklog_cli.rb
27
+ homepage: http://rubygems.org/gems/myworklog
28
+ licenses:
29
+ - MIT
30
+ metadata:
31
+ source_code_uri: https://github.com/gyoqueiroz/myworklog
32
+ post_install_message:
33
+ rdoc_options: []
34
+ require_paths:
35
+ - lib
36
+ required_ruby_version: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ required_rubygems_version: !ruby/object:Gem::Requirement
42
+ requirements:
43
+ - - ">="
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ requirements: []
47
+ rubygems_version: 3.0.3
48
+ signing_key:
49
+ specification_version: 4
50
+ summary: My Work Log
51
+ test_files: []