piece_of_wax 0.0.2 → 1.0.0.rc1
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 +4 -4
- data/bin/piece_of_wax +2 -2
- data/lib/piece_of_wax.rb +28 -58
- data/lib/piece_of_wax/logfile.rb +64 -0
- metadata +80 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 818b72b11bd06930c11e17c07e72512f9a4b1864dfb00090c681226414b720a3
|
4
|
+
data.tar.gz: f2423eb394952af0fadd964245b4637e5e2b58267933442459ea89dbe3203640
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 105bd336b6d5d5ed58b53263fe05ed542f3b1dc35c2d346239f469d2935a9e73b2ad05249db8e984d28843b077b3a1850f5ab456825a43813b3673c48294bb51
|
7
|
+
data.tar.gz: 20b656e3e4fb4bb5a53e69ee010a0bcf87845479e437c267a549855cfca70be9a12393d5787c2d507fc66526d499e47599e36a5fc44f0d9e8fa7bb05446ad709
|
data/bin/piece_of_wax
CHANGED
data/lib/piece_of_wax.rb
CHANGED
@@ -1,68 +1,38 @@
|
|
1
|
+
require "json"
|
2
|
+
require "piece_of_wax/cli_options"
|
3
|
+
require "piece_of_wax/date_time"
|
4
|
+
require "piece_of_wax/date_time_decorator/error_message_display"
|
5
|
+
require "piece_of_wax/logfile"
|
1
6
|
require "thor"
|
2
|
-
require "date"
|
3
7
|
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
8
|
+
module PieceOfWax
|
9
|
+
class CLI < Thor
|
10
|
+
desc 'activity "_activity_"', "log activity (wrap multi-word entries in quotation marks)"
|
11
|
+
option :time, aliases: :t, desc: 'time when activity was started'
|
12
|
+
def activity(str)
|
13
|
+
CLIOptions.instance.set(options)
|
14
|
+
time = DateTime.safe_parse(options[:time]) || DateTime.current_time
|
15
|
+
Logfile.new(DateTime.current_date).add_activity(time, str)
|
16
|
+
$stdout.puts "wrote #{str} to file"
|
17
|
+
end
|
10
18
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
19
|
+
desc "read [date]", "print activities on given [date] (yesterday by default)"
|
20
|
+
option :military, aliases: :m, desc: 'render time in military (24-hour) format'
|
21
|
+
def read(date_str = '')
|
22
|
+
CLIOptions.instance.set(options)
|
23
|
+
date = DateTime.safe_parse(date_str) || DateTime.current_date
|
24
|
+
logfile = Logfile.new(date)
|
25
|
+
if logfile.contents
|
26
|
+
$stdout.puts logfile
|
27
|
+
else
|
28
|
+
$stderr.puts "Sorry, I couldn't find any logs for #{DateTimeDecorator::ErrorMessageDisplay.new(date)}."
|
18
29
|
end
|
19
|
-
puts output
|
20
|
-
end
|
21
|
-
|
22
|
-
private
|
23
|
-
|
24
|
-
def write_to_file(str)
|
25
|
-
today = Time.now.strftime("%y%m%d")
|
26
|
-
File.open("#{today}.txt", "a+") do |f|
|
27
|
-
f.puts(str)
|
28
30
|
end
|
29
|
-
end
|
30
31
|
|
31
|
-
|
32
|
-
"%s.txt" % Date.parse(date).strftime("%y%m%d")
|
33
|
-
end
|
32
|
+
private
|
34
33
|
|
35
|
-
|
36
|
-
|
37
|
-
'yesterday'
|
38
|
-
else
|
39
|
-
date
|
34
|
+
def exit_on_failure?
|
35
|
+
true
|
40
36
|
end
|
41
37
|
end
|
42
|
-
|
43
|
-
def generate_output(lines)
|
44
|
-
date = date_format(lines[0].split(' ')[0])
|
45
|
-
result =
|
46
|
-
lines.each_cons(2).reduce([date]) do |output, (line1, line2)|
|
47
|
-
output << output_line(line1, line2)
|
48
|
-
end
|
49
|
-
result << output_line(lines.last, "#{date} 05:45:00 -0500 - #{lines.last.split(' - ')[1]}")
|
50
|
-
end
|
51
|
-
|
52
|
-
def output_line(line1, line2)
|
53
|
-
date_info1, activity1 = line1.split(' - ')
|
54
|
-
date_info2, _activity2 = line2.split(' - ')
|
55
|
-
_date1, time1, _time_delta1 = date_info1.split(' ')
|
56
|
-
_date2, time2, _time_delta2 = date_info2.split(' ')
|
57
|
-
"#{time_format(time1)}-#{time_format(time2)} - #{activity1}"
|
58
|
-
end
|
59
|
-
|
60
|
-
def date_format(str)
|
61
|
-
year, month, day = str.split('-').map(&:to_i)
|
62
|
-
Date.new(year, month, day).strftime('%-m/%-d/%y')
|
63
|
-
end
|
64
|
-
|
65
|
-
def time_format(str)
|
66
|
-
str.split(':').first(2).join(':')
|
67
|
-
end
|
68
38
|
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
require 'erb'
|
2
|
+
require 'json'
|
3
|
+
require 'piece_of_wax/file_io'
|
4
|
+
require 'piece_of_wax/output_line/activity'
|
5
|
+
require 'piece_of_wax/output_line/date'
|
6
|
+
|
7
|
+
module PieceOfWax
|
8
|
+
class Logfile
|
9
|
+
def initialize(date)
|
10
|
+
filename = "%s.txt" % date.strftime("%y%m%d")
|
11
|
+
@file_io = FileIO.new(filename)
|
12
|
+
end
|
13
|
+
|
14
|
+
def contents
|
15
|
+
return unless raw_content = @file_io.read
|
16
|
+
JSON.parse(raw_content)
|
17
|
+
end
|
18
|
+
|
19
|
+
def add_activity(time, description)
|
20
|
+
data =
|
21
|
+
{ datetime: time, description: description }
|
22
|
+
obj =
|
23
|
+
if contents
|
24
|
+
contents.insert(proper_index(time), data)
|
25
|
+
else
|
26
|
+
[data]
|
27
|
+
end
|
28
|
+
str = obj.to_json
|
29
|
+
@file_io.overwrite_with(str)
|
30
|
+
end
|
31
|
+
|
32
|
+
def to_s
|
33
|
+
output =
|
34
|
+
ERB.new(<<~ERB).result(binding)
|
35
|
+
<%= OutputLine::Date.new(first_entry['datetime']) %>
|
36
|
+
<% contents.each_cons(2).map do |line1, line2| %>
|
37
|
+
<%= OutputLine::Activity.new(line1['datetime'], line2['datetime'], line1['description']) %>
|
38
|
+
<% end.join("\n") %>
|
39
|
+
<%= OutputLine::Activity.new(last_entry['datetime'], "17:45:00 -0500", last_entry['description']) %>
|
40
|
+
ERB
|
41
|
+
# Unsure why ERB is inserting the double linebreaks after each
|
42
|
+
# iteration of `contents.each_cons(2)`. For now, subbing single linebreak
|
43
|
+
# to eliminate doubles.
|
44
|
+
output.gsub("\n\n", "\n")
|
45
|
+
end
|
46
|
+
|
47
|
+
private
|
48
|
+
|
49
|
+
def proper_index(time)
|
50
|
+
contents.each_with_index do |line, i|
|
51
|
+
return i if Time.parse(line['datetime']) > time
|
52
|
+
end
|
53
|
+
return contents.length
|
54
|
+
end
|
55
|
+
|
56
|
+
def first_entry
|
57
|
+
contents.first
|
58
|
+
end
|
59
|
+
|
60
|
+
def last_entry
|
61
|
+
contents.last
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: piece_of_wax
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 1.0.0.rc1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ben Stegeman
|
@@ -14,28 +14,98 @@ dependencies:
|
|
14
14
|
name: thor
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
19
|
+
version: '1.0'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
26
|
+
version: '1.0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: aruba
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '1.0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: pry
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 0.11.3
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 0.11.3
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: pry-nav
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0.3'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0.3'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: pry-remote
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: 0.1.7
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 0.1.7
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: rspec
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: 3.7.0
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: 3.7.0
|
27
97
|
- !ruby/object:Gem::Dependency
|
28
98
|
name: timecop
|
29
99
|
requirement: !ruby/object:Gem::Requirement
|
30
100
|
requirements:
|
31
|
-
- -
|
101
|
+
- - "~>"
|
32
102
|
- !ruby/object:Gem::Version
|
33
103
|
version: 0.9.1
|
34
104
|
type: :development
|
35
105
|
prerelease: false
|
36
106
|
version_requirements: !ruby/object:Gem::Requirement
|
37
107
|
requirements:
|
38
|
-
- -
|
108
|
+
- - "~>"
|
39
109
|
- !ruby/object:Gem::Version
|
40
110
|
version: 0.9.1
|
41
111
|
description: ''
|
@@ -47,6 +117,7 @@ extra_rdoc_files: []
|
|
47
117
|
files:
|
48
118
|
- bin/piece_of_wax
|
49
119
|
- lib/piece_of_wax.rb
|
120
|
+
- lib/piece_of_wax/logfile.rb
|
50
121
|
homepage:
|
51
122
|
licenses:
|
52
123
|
- MIT
|
@@ -62,9 +133,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
62
133
|
version: '0'
|
63
134
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
64
135
|
requirements:
|
65
|
-
- - "
|
136
|
+
- - ">"
|
66
137
|
- !ruby/object:Gem::Version
|
67
|
-
version:
|
138
|
+
version: 1.3.1
|
68
139
|
requirements: []
|
69
140
|
rubyforge_project:
|
70
141
|
rubygems_version: 2.7.6
|