work-md 0.3.5 → 0.3.9

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
  SHA256:
3
- metadata.gz: 9d880e4894863c9e62e915bb397194711aee0ec9d144dd0e53acffb4af268904
4
- data.tar.gz: f4082880a4a1d0feca7e6a4c6fda1c57b865b7c7a692a4e22a68c30e5adc6b3b
3
+ metadata.gz: 1d60ff8b9a7a58227c03ffdd52c61da194073d81c0e527caf567222ec1603cec
4
+ data.tar.gz: c4903302aa7c56acd9522c745049d219cd9c4dcbe98f5470210fa0f7476e06a7
5
5
  SHA512:
6
- metadata.gz: f262f4192079f5c19b51b07e7575d2efa8419d5f29a1479a04d36cf9795c68c9f0cb06563050ed643ffa95427695b710318b8db97293a0e64daf4d3396c2742c
7
- data.tar.gz: ca947bf521e40588ce9c7db992bd23954b7c3b4fe4dcf2345ce888196b1b1c5ac524fc5068aa3716ce625a2ab80e2e3ad915e845928135e35796848ecfc01564
6
+ metadata.gz: 205437250b4aa23ed69996b1d54fe34063fe3601bb33e4b1e91f090e8fee296916fd78a5b963238471ff2291109e29a4fd39a2faad3cb9d8eeac6c4d06bb5f0a
7
+ data.tar.gz: 1965c5824034763f978a1e1ab7064b390c3c73d09d4a7580ce0e1c8c09af71c5d9d693fd77372fe3142ee25bc46a273656b78937ab0ff8547a1b7732e48f0d75
data/bin/work-md CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
2
  # frozen_string_literal: true
3
3
 
4
- # require_relative '../lib/work-md'
5
- require 'work-md'
4
+ # require_relative '../lib/work/md'
5
+ require 'work/md'
6
6
 
7
7
  Work::Md::Cli.execute(ARGV)
@@ -7,29 +7,37 @@ module Work
7
7
  class << self
8
8
  def execute(argv = [])
9
9
  parsed_file_path = Work::Md::Config.work_dir + '/parsed.md'
10
- args = Hash[argv.join(' ').scan(/-?([^=\s]+)(?:=(\S+))?/)]
11
- parser = Work::Md::Parser::Engine.new
12
10
  t = Work::Md::Config.translations
13
11
 
14
- year = args['y'] || Time.new.year
15
- month = args['m'] || Time.new.month
12
+ parser = Work::Md::Parser::Engine.new
13
+ args_hash_to_parser = -> (args, received_parser) {
14
+ year = args['y'] || Time.new.year
15
+ month = args['m'] || Time.new.month
16
16
 
17
- month = "0#{month.to_i}" if month.to_i < 10
17
+ month = "0#{month.to_i}" if month.to_i < 10
18
18
 
19
- add_file_to_parser = lambda do |day|
20
- day = "0#{day.to_i}" if day.to_i < 10
19
+ add_file_to_parser = lambda do |day|
20
+ day = "0#{day.to_i}" if day.to_i < 10
21
21
 
22
- file_name = Work::Md::Config.work_dir + "/#{year}/#{month}/#{day}.md"
22
+ file_name = Work::Md::Config.work_dir + "/#{year}/#{month}/#{day}.md"
23
23
 
24
- parser.add_file(file_name)
25
- end
24
+ received_parser.add_file(file_name)
25
+ end
26
+
27
+ if args['d'].include?('..')
28
+ range = args['d'].split('..')
26
29
 
27
- if args['d'].include?('..')
28
- range = args['d'].split('..')
30
+ (range[0].to_i..range[1].to_i).each { |day| add_file_to_parser.call(day) }
31
+ else
32
+ args['d'].split(',').each { |day| add_file_to_parser.call(day) }
33
+ end
29
34
 
30
- (range[0].to_i..range[1].to_i).each { |day| add_file_to_parser.call(day) }
31
- else
32
- args['d'].split(',').each { |day| add_file_to_parser.call(day) }
35
+ received_parser
36
+ }
37
+
38
+ argv.join('#').split('#and#').map { |v| v.split("#") }.each do |args|
39
+ args_hash = Hash[args.join(' ').scan(/-?([^=\s]+)(?:=(\S+))?/)]
40
+ args_hash_to_parser.(args_hash, parser)
33
41
  end
34
42
 
35
43
  parser.freeze
@@ -52,44 +60,41 @@ module Work
52
60
  parser.interruptions.each do |interruption|
53
61
  f.puts("- #{interruption}\n")
54
62
  end
63
+ f.puts("\n") if parser.interruptions.size > 0
55
64
  f.puts("---\n\n")
56
65
  f.puts("### #{t[:difficulties]} (#{parser.difficulties.size}):\n\n")
57
66
  parser.difficulties.each do |difficulty|
58
67
  f.puts("- #{difficulty}\n")
59
68
  end
69
+ f.puts("\n") if parser.difficulties.size > 0
60
70
  f.puts("---\n\n")
61
71
  f.puts("### #{t[:observations]} (#{parser.observations.size}):\n\n")
62
72
  parser.observations.each do |observation|
63
73
  f.puts("- #{observation}\n")
64
74
  end
75
+ f.puts("\n") if parser.observations.size > 0
65
76
  f.puts("---\n\n")
66
77
  f.puts("### #{t[:pomodoros]} (#{parser.average_pomodoros} #{t[:per_day]}):\n\n")
67
78
  f.puts("**#{t[:total]}: #{parser.pomodoros_sum}**")
68
- f.puts("\n\n")
79
+ f.puts("\n")
69
80
  parser.pomodoros_bars.each do |pomodoro_bar|
70
81
  f.puts(pomodoro_bar)
71
- f.puts("\n\n")
82
+ f.puts("\n")
72
83
  end
73
84
  f.puts("---\n\n")
74
85
  f.puts("### #{t[:days_bars]}:\n\n")
75
86
  f.puts("**#{t[:pomodoros]}: ⬛ | #{t[:meetings]}: 📅 | #{t[:interruptions]}: ⚠️ | #{t[:difficulties]}: 😓 | #{t[:observations]}: 📝 | #{t[:tasks]}: ✔️**")
76
87
 
77
- f.puts("\n\n")
88
+ f.puts("\n")
78
89
  parser.days_bars.each do |day_bar|
79
90
  f.puts(day_bar)
80
- f.puts("\n\n")
91
+ f.puts("\n")
81
92
  end
82
93
 
83
94
  f.puts("\n\n")
84
95
  end
85
96
 
86
- editor = Work::Md::Config.editor
87
-
88
- if editor.nil?
89
- ::TTY::Editor.open(parsed_file_path)
90
- else
91
- ::TTY::Editor.open(parsed_file_path, command: editor)
92
- end
97
+ Work::Md::File.open_in_editor([parsed_file_path])
93
98
  rescue StandardError => e
94
99
  Work::Md::Cli.help(
95
100
  ::TTY::Box.frame(
@@ -6,7 +6,7 @@ module Work
6
6
  class Today
7
7
  class << self
8
8
  def execute(_argv = [])
9
- Work::Md::File.open_or_create(DateTime.now)
9
+ Work::Md::DateFile.open_or_create(DateTime.now)
10
10
  end
11
11
  end
12
12
  end
@@ -8,7 +8,7 @@ module Work
8
8
  def execute(_argv = [])
9
9
  file_names =
10
10
  [DateTime.now, Date.today.prev_day].map do |date|
11
- Work::Md::File.create_if_not_exist(date)
11
+ Work::Md::DateFile.create_if_not_exist(date)
12
12
  end
13
13
 
14
14
  Work::Md::File.open_in_editor(file_names)
@@ -6,7 +6,7 @@ module Work
6
6
  class Yesterday
7
7
  class << self
8
8
  def execute(_argv = [])
9
- Work::Md::File.open_or_create(Date.today.prev_day)
9
+ Work::Md::DateFile.open_or_create(Date.today.prev_day)
10
10
  end
11
11
  end
12
12
  end
@@ -0,0 +1,48 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Work
4
+ module Md
5
+ class DateFile
6
+ def self.open_or_create(some_date, dir: nil)
7
+ Work::Md::File.open_in_editor(
8
+ [create_if_not_exist(some_date, dir: dir)], dir: dir
9
+ )
10
+ end
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
15
+
16
+ file_name = "#{some_date.strftime('%Y/%m/%d')}.md"
17
+
18
+ return file_name if ::File.exist?("#{work_dir}/#{file_name}")
19
+
20
+ ::FileUtils
21
+ .mkdir_p("#{work_dir}/#{some_date.strftime('%Y/%m')}")
22
+
23
+ ::File.open(
24
+ "#{work_dir}/#{file_name}",
25
+ 'w+'
26
+ ) do |f|
27
+ f.puts("# #{some_date.strftime('%d/%m/%Y')} - #{Work::Md::Config.title} \n\n")
28
+ f.puts("### #{t[:tasks]}:\n\n")
29
+ f.puts("- [ ]\n\n")
30
+ f.puts("---\n\n")
31
+ f.puts("### #{t[:meetings]}:\n\n")
32
+ f.puts("- [ ]\n\n")
33
+ f.puts("---\n\n")
34
+ f.puts("### #{t[:interruptions]}:\n\n")
35
+ f.puts("---\n\n")
36
+ f.puts("### #{t[:difficulties]}:\n\n")
37
+ f.puts("---\n\n")
38
+ f.puts("### #{t[:observations]}:\n\n")
39
+ f.puts("---\n\n")
40
+ f.puts("### #{t[:pomodoros]}:\n\n")
41
+ f.puts("0\n\n")
42
+ end
43
+
44
+ file_name
45
+ end
46
+ end
47
+ end
48
+ end
data/lib/work/md/file.rb CHANGED
@@ -3,45 +3,6 @@
3
3
  module Work
4
4
  module Md
5
5
  class File
6
- def self.open_or_create(some_date, dir: nil)
7
- open_in_editor([create_if_not_exist(some_date, dir: dir)], dir: dir)
8
- end
9
-
10
- def self.create_if_not_exist(some_date, dir: nil)
11
- t = Work::Md::Config.translations
12
- work_dir = dir || Work::Md::Config.work_dir
13
-
14
- file_name = "#{some_date.strftime('%Y/%m/%d')}.md"
15
-
16
- return file_name if ::File.exist?("#{work_dir}/#{file_name}")
17
-
18
- ::FileUtils
19
- .mkdir_p("#{work_dir}/#{some_date.strftime('%Y/%m')}")
20
-
21
- ::File.open(
22
- "#{work_dir}/#{file_name}",
23
- 'w+'
24
- ) do |f|
25
- f.puts("# #{some_date.strftime('%d/%m/%Y')} - #{Work::Md::Config.title} \n\n")
26
- f.puts("### #{t[:tasks]}:\n\n")
27
- f.puts("- [ ]\n\n")
28
- f.puts("---\n\n")
29
- f.puts("### #{t[:meetings]}:\n\n")
30
- f.puts("- [ ]\n\n")
31
- f.puts("---\n\n")
32
- f.puts("### #{t[:interruptions]}:\n\n")
33
- f.puts("---\n\n")
34
- f.puts("### #{t[:difficulties]}:\n\n")
35
- f.puts("---\n\n")
36
- f.puts("### #{t[:observations]}:\n\n")
37
- f.puts("---\n\n")
38
- f.puts("### #{t[:pomodoros]}:\n\n")
39
- f.puts("0\n\n")
40
- end
41
-
42
- file_name
43
- end
44
-
45
6
  def self.open_in_editor(file_names = [], dir: nil)
46
7
  editor = Work::Md::Config.editor
47
8
  work_dir = dir || Work::Md::Config.work_dir
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'byebug'
4
+
3
5
  module Work
4
6
  module Md
5
7
  module Parser
@@ -144,53 +146,65 @@ module Work
144
146
  parsed_file.date =
145
147
  content.split(' - ')[0].gsub('# ', '').gsub("\n\n", '')
146
148
  elsif content.start_with?(@t[:tasks])
147
- parsed_file.tasks = parse_check_list(content)
149
+ parsed_file.tasks = parse_check_list(content, start_with: @t[:tasks])
148
150
  elsif content.start_with?(@t[:meetings])
149
- parsed_file.meetings = parse_check_list(content)
151
+ parsed_file.meetings = parse_check_list(content, start_with: @t[:meetings])
150
152
  elsif content.start_with?(@t[:interruptions])
151
153
  parsed_file.interruptions =
152
- parse_list(content).map do |interruption|
154
+ parse_list(content, start_with: @t[:interruptions]).map do |interruption|
153
155
  "(#{parsed_file.date}) #{interruption}"
154
156
  end
155
157
  elsif content.start_with?(@t[:difficulties])
156
- parsed_file.difficulties = parse_list(content).map do |difficulty|
157
- "(#{parsed_file.date}) #{difficulty}"
158
- end
158
+ parsed_file.difficulties =
159
+ parse_list(
160
+ content, start_with: @t[:difficulties]
161
+ ).map do |difficulty|
162
+ "(#{parsed_file.date}) #{difficulty}"
163
+ end
159
164
  elsif content.start_with?(@t[:observations])
160
- parsed_file.observations = parse_list(content).map do |observations|
161
- "(#{parsed_file.date}) #{observations}"
162
- end
165
+ parsed_file.observations =
166
+ parse_list(
167
+ content, start_with: @t[:observations]
168
+ ).map do |observations|
169
+ "(#{parsed_file.date}) #{observations}"
170
+ end
163
171
  elsif content.start_with?(@t[:pomodoros])
164
- parsed_file.pomodoros = parse_pomodoro(content)
172
+ parsed_file.pomodoros =
173
+ parse_pomodoro(content, start_with: @t[:pomodoros])
165
174
  end
166
175
  end
167
176
  # rubocop:enable Metrics/CyclomaticComplexity
168
177
  # rubocop:enable Metrics/PerceivedComplexity
169
178
 
170
- def parse_check_list(content)
171
- clear_list(basic_parse(content).split('- ['))
179
+ def parse_check_list(content, start_with: nil)
180
+ clear_list(basic_parse(content, start_with: start_with).split('- ['))
172
181
  end
173
182
 
174
- def parse_list(content)
175
- clear_list(basic_parse(content).split('- '))
183
+ def parse_list(content, start_with: nil)
184
+ clear_list(basic_parse(content, start_with: start_with).split('- '))
176
185
  end
177
186
 
178
- def parse_pomodoro(content)
179
- basic_parse(content).scan(/\d+/).first.to_i
187
+ def parse_pomodoro(content, start_with: nil)
188
+ basic_parse(content, start_with: start_with).scan(/\d+/).first.to_i
180
189
  end
181
190
 
182
- def basic_parse(content)
191
+ def basic_parse(content, start_with: nil)
192
+ return content.split("#{start_with}:\n")[1] unless start_with.nil?
193
+
183
194
  content.split(":\n\n")[1]
184
195
  end
185
196
 
197
+ # rubocop:disable Metrics/CyclomaticComplexity
186
198
  def clear_list(list)
187
199
  return list unless list.is_a?(Array)
188
200
 
189
201
  list
190
202
  .map { |s| s.gsub('---', '') unless s.nil? }
191
- .select { |s| (s != '') && (s != "\n\n") }
203
+ .select { |s| (s != "\n\n") && (s != "\n\n\n") }
192
204
  .map(&:strip)
205
+ .reject { |s| (s == '') }
193
206
  end
207
+ # rubocop:enable Metrics/CyclomaticComplexity
194
208
  end
195
209
  # rubocop:enable Metrics/ClassLength
196
210
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Work
4
4
  module Md
5
- VERSION = '0.3.5'
5
+ VERSION = '0.3.9'
6
6
  end
7
7
  end
data/lib/work/md.rb CHANGED
@@ -3,6 +3,7 @@
3
3
  require_relative 'md/version'
4
4
  require_relative 'md/config'
5
5
  require_relative 'md/file'
6
+ require_relative 'md/date_file'
6
7
  require_relative 'md/commands/today'
7
8
  require_relative 'md/commands/config'
8
9
  require_relative 'md/commands/yesterday'
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.3.5
4
+ version: 0.3.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-09-09 00:00:00.000000000 Z
11
+ date: 2021-09-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: tty-box
@@ -58,6 +58,7 @@ files:
58
58
  - lib/work/md/commands/tyesterday.rb
59
59
  - lib/work/md/commands/yesterday.rb
60
60
  - lib/work/md/config.rb
61
+ - lib/work/md/date_file.rb
61
62
  - lib/work/md/file.rb
62
63
  - lib/work/md/parser/engine.rb
63
64
  - lib/work/md/version.rb