work-md 0.4.5 → 0.4.9

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: 5e11b12242f29e25b4cd175693b475d548e37c422f966cca7c4ecdd7ae7bbf23
4
- data.tar.gz: 7707b5b4ddbcf93fcfa22209eafcfd214de35cf56faec7739ed2b3239af33cd1
3
+ metadata.gz: 3333dbe54859ef57acade3b997c337b6994b64e681369e782e39a80fb478632d
4
+ data.tar.gz: e7de4d34bf2c5eb846fa160bf0cff93250216dbc45daa6b26035ac3a3784ede6
5
5
  SHA512:
6
- metadata.gz: 49da10202bf64a92baff477f92ad3cb510e8445ef4792b64298f0449680862b0b241ed8a710f047dd846ee5cf9d53930b9bc1594ca1a4e9fcaa29b6adef8ad0e
7
- data.tar.gz: 932cc585bf763de7d26eade30b48a903885ba23a17a5a6594e3d088f598a7b99fbb99414bb98b0042b2b351f7a32e740c8c0bd74f82851afd2960235ec5aa06d
6
+ metadata.gz: 3ea36e20ab31b4237157d55327978cba6c64c3b4f02df9987fcb56993b1af1826fa7ed5dbe2371ee83a0e06d6e2987126010e34351694f6fdb2538c68bafc356
7
+ data.tar.gz: 9bb98607f7e1ed8d426164b5b28a8f0406160405706adb3f2bbfcb90af6cb4cfe860b35672d147742f47fa9c89c665f4582f6a43fe4e229374ea901122f7cca3
data/lib/work/md/cli.rb CHANGED
@@ -10,10 +10,13 @@ module Work
10
10
  't' => 'today',
11
11
  'ty' => 'tyesterday',
12
12
  'y' => 'yesterday',
13
+ 'to' => 'tomorrow',
13
14
  'c' => 'config',
14
15
  'p' => 'parse',
15
16
  'pl' => 'plast',
16
17
  'a' => 'annotations',
18
+ 'o' => 'open',
19
+ 'd' => 'delete',
17
20
  'l' => 'last',
18
21
  'tl' => 'tlast'
19
22
  }.freeze
@@ -61,20 +64,28 @@ module Work
61
64
  '- work-md today',
62
65
  '- work-md yesterday',
63
66
  '- work-md tyesterday',
67
+ '- work-md tomorrow',
64
68
  '- work-md last',
65
69
  '- work-md tlast',
66
70
  '- work-md parse',
67
71
  '- work-md plast',
68
72
  '- work-md annotations',
73
+ '- work-md open',
69
74
  '- work-md config',
70
75
  '',
71
76
  'for more information: github.com/work-md',
72
- padding: 1,
73
- title: { top_left: '(work-md)', bottom_right: "(v#{Work::Md::VERSION})" }
77
+ **normal_frame_style
74
78
  )
75
79
  # rubocop:enable Layout/LineLength
76
80
  end
77
81
 
82
+ def self.normal_frame_style
83
+ {
84
+ padding: 1,
85
+ title: { top_left: '(work-md)', bottom_right: "(v#{Work::Md::VERSION})" }
86
+ }
87
+ end
88
+
78
89
  def self.error_frame_style
79
90
  {
80
91
  padding: 1,
@@ -0,0 +1,47 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Work
4
+ module Md
5
+ module Commands
6
+ class Delete
7
+ class << self
8
+ def execute(argv = [])
9
+ prompt = TTY::Prompt.new
10
+
11
+ file_paths = Work::Md::DateFile.list_file_paths_by_argv_query(argv)
12
+
13
+ if file_paths == []
14
+ puts ::TTY::Box.frame(
15
+ "message: File(s) not found!",
16
+ **Work::Md::Cli.error_frame_style
17
+ )
18
+
19
+ return
20
+ end
21
+
22
+ file_paths.each do |file_name|
23
+ if prompt.yes?("Do you really want to delete \"#{file_name}\"!?")
24
+ ::File.delete(file_name)
25
+ end
26
+ end
27
+ rescue StandardError
28
+ Work::Md::Cli.help(
29
+ ::TTY::Box.frame(
30
+ "message: Some error occurred interpreting your command or the date sent is invalid!",
31
+ '',
32
+ 'Usage examples:',
33
+ '',
34
+ 'work-md d -d=1 -m=5 -y=2000 # delete day 1 from month 5 and year 2000',
35
+ 'work-md d -d=1,2,3 # delete day 1, 2 and 3 from the current month and year',
36
+ 'work-md d -d=1,2 -m=4 # delete day 1 and 2 from month 4 and current year',
37
+ 'work-md d -d=1..10 -m=4 # delete day 1 to 10 from month 4 and current year',
38
+ 'work-md d -d=1..25 -m=2 and -d=1..25 -m=2 -y=1999 # delete day 1 to 25 from month 2 and current year and 1 to 25 from month 2 in 1999',
39
+ **Work::Md::Cli.error_frame_style
40
+ )
41
+ )
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
@@ -5,31 +5,74 @@ module Work
5
5
  module Commands
6
6
  class Last
7
7
  class << self
8
- def execute(_argv = [])
9
- found_file = false
10
- current_day = Date.today.prev_day
8
+ def execute(argv = [])
11
9
  work_dir = Work::Md::Config.work_dir
12
10
 
13
- (1..160).each do
14
- file_name = "#{current_day.strftime('%Y/%m/%d')}.md"
11
+ if argv == []
12
+ current_day = Date.today.prev_day
13
+ found_file = false
15
14
 
16
- if ::File.exist?("#{work_dir}/#{file_name}")
17
- Work::Md::File.open_in_editor([file_name])
18
- found_file = true
19
- break
15
+ (1..160).each do
16
+ file_name = "#{current_day.strftime('%Y/%m/%d')}.md"
17
+
18
+ if ::File.exist?("#{work_dir}/#{file_name}")
19
+ Work::Md::File.open_in_editor([file_name])
20
+ found_file = true
21
+ break
22
+ end
23
+
24
+ current_day = current_day.prev_day
20
25
  end
21
26
 
22
- current_day = current_day.prev_day
27
+ unless found_file
28
+ Work::Md::Cli.help(
29
+ ::TTY::Box.frame(
30
+ "message: No file found in last 5 months",
31
+ **Work::Md::Cli.error_frame_style
32
+ )
33
+ )
34
+ end
35
+
36
+ return
23
37
  end
24
38
 
25
- unless found_file
39
+ to_open = []
40
+ is_numeric = ->(str) {
41
+ str == "#{str.to_f}" || str == "#{str.to_i}"
42
+ }
43
+
44
+ if is_numeric.(argv.first)
45
+ last_n = argv.first.to_i
46
+ else
26
47
  Work::Md::Cli.help(
27
48
  ::TTY::Box.frame(
28
- "message: No file found in last 5 months",
49
+ "message: 'last' command accept only numeric arguments, you give: #{argv.inspect}",
50
+ '',
51
+ 'Usage example:',
52
+ '',
53
+ 'work-md l 7 # open the last 7 days',
54
+ 'work-md l # open the last day',
29
55
  **Work::Md::Cli.error_frame_style
30
56
  )
31
57
  )
58
+ return
32
59
  end
60
+
61
+ last_date = Date.today.prev_day
62
+
63
+ (1..last_n).map do
64
+ last_file_name = "#{last_date.strftime('%Y/%m/%d')}.md"
65
+
66
+ if ::File.exist?("#{work_dir}/#{last_file_name}")
67
+ to_open.push("#{work_dir}/#{last_file_name}")
68
+ else
69
+ nil
70
+ end
71
+
72
+ last_date = last_date.prev_day
73
+ end
74
+
75
+ Work::Md::File.open_in_editor(to_open)
33
76
  end
34
77
  end
35
78
  end
@@ -0,0 +1,45 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Work
4
+ module Md
5
+ module Commands
6
+ class Open
7
+ class << self
8
+ def execute(argv = [])
9
+ file_paths =
10
+ Work::Md::DateFile.list_file_paths_by_argv_query(
11
+ argv,
12
+ create_inexistent: true
13
+ )
14
+
15
+ if file_paths == []
16
+ puts ::TTY::Box.frame(
17
+ "message: File(s) not found!",
18
+ **Work::Md::Cli.error_frame_style
19
+ )
20
+
21
+ return
22
+ end
23
+
24
+ Work::Md::File.open_in_editor(file_paths)
25
+ rescue
26
+ Work::Md::Cli.help(
27
+ ::TTY::Box.frame(
28
+ "message: Some error occurred interpreting your command or the date sent is invalid!",
29
+ '',
30
+ 'Usage examples:',
31
+ '',
32
+ 'work-md o -d=1 -m=5 -y=2000 # open day 1 from month 5 and year 2000',
33
+ 'work-md o -d=1,2,3 # open day 1, 2 and 3 from the current month and year',
34
+ 'work-md o -d=1,2 -m=4 # open day 1 and 2 from month 4 and current year',
35
+ 'work-md o -d=1..10 -m=4 # open day 1 to 10 from month 4 and current year',
36
+ 'work-md o -d=1..25 -m=2 and -d=1..25 -m=2 -y=1999 # open day 1 to 25 from month 2 and current year and 1 to 25 from month 2 in 1999',
37
+ **Work::Md::Cli.error_frame_style
38
+ )
39
+ )
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
@@ -7,34 +7,10 @@ module Work
7
7
  class << self
8
8
  def execute(argv = [])
9
9
  parser = Work::Md::Parser::Engine.new
10
- argv_keys_to_parser = -> (argv_keys, received_parser) {
11
- year = argv_keys['y'] || Time.new.year
12
- month = argv_keys['m'] || Time.new.month
13
10
 
14
- month = "0#{month.to_i}" if month.to_i < 10
15
-
16
- add_file_to_parser = lambda do |day|
17
- day = "0#{day.to_i}" if day.to_i < 10
18
-
19
- file_name = Work::Md::Config.work_dir + "/#{year}/#{month}/#{day}.md"
20
-
21
- received_parser.add_file(file_name)
22
- end
23
-
24
- if argv_keys['d'].include?('..')
25
- range = argv_keys['d'].split('..')
26
-
27
- (range[0].to_i..range[1].to_i).each { |day| add_file_to_parser.call(day) }
28
- else
29
- argv_keys['d'].split(',').each { |day| add_file_to_parser.call(day) }
30
- end
31
-
32
- received_parser
33
- }
34
-
35
- argv.join('#').split('#and#').map { |v| v.split("#") }.each do |args|
36
- argv_keys_to_parser.(Work::Md::Cli.fetch_argv_keys(args), parser)
37
- end
11
+ Work::Md::DateFile
12
+ .list_file_paths_by_argv_query(argv)
13
+ .each { |file_path| parser.add_file(file_path) }
38
14
 
39
15
  Work::Md::File.create_and_open_parsed(parser)
40
16
  rescue Work::Md::Parser::Error => e
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Work
4
+ module Md
5
+ module Commands
6
+ class Tomorrow
7
+ class << self
8
+ def execute(_argv = [])
9
+ Work::Md::DateFile.open_or_create(Date.today.next_day)
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -3,25 +3,63 @@
3
3
  module Work
4
4
  module Md
5
5
  class DateFile
6
- def self.open_or_create(some_date, dir: nil)
6
+ def self.open_or_create(some_date)
7
7
  Work::Md::File.open_in_editor(
8
- [create_if_not_exist(some_date, dir: dir)], dir: dir
8
+ [create_if_not_exist(some_date)]
9
9
  )
10
10
  end
11
11
 
12
- def self.create_if_not_exist(some_date, dir: nil)
13
- t = Work::Md::Config.translations
14
- work_dir = dir || Work::Md::Config.work_dir
12
+ def self.list_file_paths_by_argv_query(argv, create_inexistent: false)
13
+ file_paths = []
14
+
15
+ argv_keys_to_files = -> (argv_keys, acc_file_paths) {
16
+ year = argv_keys['y'] || Time.new.year
17
+ month = argv_keys['m'] || Time.new.month
18
+
19
+ month = "0#{month.to_i}" if month.to_i < 10
20
+
21
+ add_file_to_acc = lambda do |day|
22
+ day = "0#{day.to_i}" if day.to_i < 10
23
+
24
+ file_path = Work::Md::Config.work_dir + "/#{year}/#{month}/#{day}.md"
15
25
 
16
- file_name = "#{some_date.strftime('%Y/%m/%d')}.md"
26
+ if create_inexistent
27
+ create_if_not_exist(DateTime.new(year.to_i, month.to_i, day.to_i))
17
28
 
18
- return file_name if ::File.exist?("#{work_dir}/#{file_name}")
29
+ acc_file_paths.push(file_path)
30
+ elsif ::File.exist? file_path
31
+ acc_file_paths.push(file_path)
32
+ end
33
+ end
34
+
35
+ if argv_keys['d'].include?('..')
36
+ range = argv_keys['d'].split('..')
37
+
38
+ (range[0].to_i..range[1].to_i).each { |day| add_file_to_acc.call(day) }
39
+ else
40
+ argv_keys['d'].split(',').each { |day| add_file_to_acc.call(day) }
41
+ end
42
+
43
+ acc_file_paths
44
+ }
45
+
46
+ argv.join('#').split('#and#').map { |v| v.split("#") }.each do |args|
47
+ argv_keys_to_files.(Work::Md::Cli.fetch_argv_keys(args), file_paths)
48
+ end
49
+
50
+ file_paths
51
+ end
52
+
53
+ def self.create_if_not_exist(some_date)
54
+ t = Work::Md::Config.translations
55
+ file = date_to_file_locations(some_date)
56
+ return file[:name] if ::File.exist?(file[:path])
19
57
 
20
58
  ::FileUtils
21
- .mkdir_p("#{work_dir}/#{some_date.strftime('%Y/%m')}")
59
+ .mkdir_p(file[:dir])
22
60
 
23
61
  ::File.open(
24
- "#{work_dir}/#{file_name}",
62
+ file[:path],
25
63
  'w+'
26
64
  ) do |f|
27
65
  f.puts("# #{some_date.strftime('%d/%m/%Y')} - #{Work::Md::Config.title} \n\n")
@@ -41,7 +79,17 @@ module Work
41
79
  f.puts("0\n\n")
42
80
  end
43
81
 
44
- file_name
82
+ file[:name]
83
+ end
84
+
85
+ def self.date_to_file_locations(some_date)
86
+ work_dir = Work::Md::Config.work_dir
87
+
88
+ {
89
+ name: "#{some_date.strftime('%Y/%m/%d')}.md",
90
+ dir: "#{work_dir}/#{some_date.strftime('%Y/%m')}",
91
+ path: "#{work_dir}/#{some_date.strftime('%Y/%m/%d')}.md"
92
+ }
45
93
  end
46
94
  end
47
95
  end
data/lib/work/md/file.rb CHANGED
@@ -3,19 +3,6 @@
3
3
  module Work
4
4
  module Md
5
5
  class File
6
- def self.open_in_editor(file_names = [], dir: nil)
7
- editor = Work::Md::Config.editor
8
- work_dir = dir || Work::Md::Config.work_dir
9
-
10
- ::FileUtils.cd(work_dir) do
11
- ENV['EDITOR'] = editor unless editor.nil?
12
-
13
- return ::TTY::Editor.open(file_names[0]) if file_names[1].nil?
14
-
15
- ::TTY::Editor.open(file_names[0], file_names[1])
16
- end
17
- end
18
-
19
6
  def self.create_and_open_parsed(parser)
20
7
  parser.freeze
21
8
 
@@ -76,6 +63,19 @@ module Work
76
63
 
77
64
  Work::Md::File.open_in_editor([parsed_file_path])
78
65
  end
66
+
67
+ def self.open_in_editor(file_names = [])
68
+ editor = Work::Md::Config.editor
69
+ work_dir = Work::Md::Config.work_dir
70
+
71
+ ::FileUtils.cd(work_dir) do
72
+ ENV['EDITOR'] = editor unless editor.nil?
73
+
74
+ return ::TTY::Editor.open(file_names[0]) if file_names[1].nil?
75
+
76
+ ::TTY::Editor.open(*file_names)
77
+ end
78
+ end
79
79
  end
80
80
  end
81
81
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Work
4
4
  module Md
5
- VERSION = '0.4.5'
5
+ VERSION = '0.4.9'
6
6
  end
7
7
  end
data/lib/work/md.rb CHANGED
@@ -7,10 +7,13 @@ require_relative 'md/date_file'
7
7
  require_relative 'md/commands/today'
8
8
  require_relative 'md/commands/config'
9
9
  require_relative 'md/commands/yesterday'
10
+ require_relative 'md/commands/tomorrow'
10
11
  require_relative 'md/commands/tyesterday'
11
12
  require_relative 'md/commands/annotations'
12
13
  require_relative 'md/commands/last'
13
14
  require_relative 'md/commands/tlast'
15
+ require_relative 'md/commands/open'
16
+ require_relative 'md/commands/delete'
14
17
  require_relative 'md/parser/engine'
15
18
  require_relative 'md/commands/parse'
16
19
  require_relative 'md/commands/plast'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: work-md
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.5
4
+ version: 0.4.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Henrique Fernandez Teixeira
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-11-26 00:00:00.000000000 Z
11
+ date: 2022-09-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: tty-box
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: 0.7.0
41
+ - !ruby/object:Gem::Dependency
42
+ name: tty-prompt
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 0.23.1
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 0.23.1
41
55
  description:
42
56
  email:
43
57
  - hriqueft@gmail.com
@@ -54,11 +68,14 @@ files:
54
68
  - lib/work/md/cli.rb
55
69
  - lib/work/md/commands/annotations.rb
56
70
  - lib/work/md/commands/config.rb
71
+ - lib/work/md/commands/delete.rb
57
72
  - lib/work/md/commands/last.rb
73
+ - lib/work/md/commands/open.rb
58
74
  - lib/work/md/commands/parse.rb
59
75
  - lib/work/md/commands/plast.rb
60
76
  - lib/work/md/commands/tlast.rb
61
77
  - lib/work/md/commands/today.rb
78
+ - lib/work/md/commands/tomorrow.rb
62
79
  - lib/work/md/commands/tyesterday.rb
63
80
  - lib/work/md/commands/yesterday.rb
64
81
  - lib/work/md/config.rb