logbook-ruby 0.1.3 → 0.1.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Guardfile +0 -2
- data/lib/logbook/builder.rb +1 -0
- data/lib/logbook/log_entry.rb +23 -0
- data/lib/logbook/page.rb +24 -2
- data/lib/logbook/parser.rb +14 -10
- data/lib/logbook/task.rb +9 -0
- data/lib/logbook/task_definition.rb +8 -0
- data/lib/logbook/task_entry.rb +20 -0
- data/lib/logbook.rb +4 -3
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4bf9e794073c670236e9601796efb0ac9260d2825f409034b3f246dbe65cb4b6
|
4
|
+
data.tar.gz: 88bd820e0f1d5a07fccb6a75161c9d1e751d3d582ed3574ebaa5bdba983da17f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0f053d6ec96f78f6214449425e7e89d6f22f35095af529ea499d04ad261498cf52301b721b9a37812aba42e4c2071c49753232fbfc2eba0862508baa308d0e71
|
7
|
+
data.tar.gz: 7a9a11bc868752d1f3e50f59f0b5b99ec9b510f729710c85600f99b810cb490062e0bd2782d7828e32e8ad3f3ad0747c41d916a4aae2df2768de419f3c5d3d30
|
data/Guardfile
CHANGED
@@ -28,8 +28,6 @@ guard :rspec, cmd: "bundle exec rspec" do
|
|
28
28
|
require "guard/rspec/dsl"
|
29
29
|
dsl = Guard::RSpec::Dsl.new(self)
|
30
30
|
|
31
|
-
# Feel free to open issues for suggestions and improvements
|
32
|
-
|
33
31
|
# RSpec files
|
34
32
|
rspec = dsl.rspec
|
35
33
|
watch(rspec.spec_helper) { rspec.spec_dir }
|
data/lib/logbook/builder.rb
CHANGED
@@ -0,0 +1,23 @@
|
|
1
|
+
module Logbook
|
2
|
+
class LogEntry < Struct.new(:line_number, :time, :note)
|
3
|
+
DATE_PROPERTY_NAME = "Date"
|
4
|
+
|
5
|
+
attr_accessor :properties
|
6
|
+
|
7
|
+
def recorded_at
|
8
|
+
date = self.properties[DATE_PROPERTY_NAME]
|
9
|
+
time = self.time
|
10
|
+
|
11
|
+
DateTime.parse(date + " " + time)
|
12
|
+
rescue ArgumentError
|
13
|
+
end
|
14
|
+
|
15
|
+
def starts_clock?
|
16
|
+
false
|
17
|
+
end
|
18
|
+
|
19
|
+
def stops_clock?
|
20
|
+
true
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
data/lib/logbook/page.rb
CHANGED
@@ -7,11 +7,33 @@ module Logbook
|
|
7
7
|
end
|
8
8
|
|
9
9
|
def add(entry)
|
10
|
-
entries
|
10
|
+
entries << entry
|
11
11
|
end
|
12
12
|
|
13
13
|
def entry_at(line_number)
|
14
|
-
entries.find { |entry| entry.line_number <= line_number }
|
14
|
+
entries.reverse.find { |entry| entry.line_number <= line_number }
|
15
|
+
end
|
16
|
+
|
17
|
+
def total_duration
|
18
|
+
_, duration = entries.inject([nil, Duration.new(0)]) do |(previous_entry, duration), current_entry|
|
19
|
+
if previous_entry && previous_entry.starts_clock?
|
20
|
+
if current_entry.stops_clock?
|
21
|
+
new_duration = Duration.new(duration.minutes + minutes_in_between(previous_entry, current_entry))
|
22
|
+
[current_entry, new_duration]
|
23
|
+
else
|
24
|
+
[previous_entry, duration]
|
25
|
+
end
|
26
|
+
else
|
27
|
+
[current_entry, duration]
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
duration
|
32
|
+
end
|
33
|
+
|
34
|
+
private
|
35
|
+
def minutes_in_between(previous_entry, current_entry)
|
36
|
+
(current_entry.recorded_at.to_time - previous_entry.recorded_at.to_time) / 60
|
15
37
|
end
|
16
38
|
end
|
17
39
|
end
|
data/lib/logbook/parser.rb
CHANGED
@@ -11,11 +11,19 @@ module Logbook
|
|
11
11
|
rule(:label) { match["a-zA-Z"] >> match["a-zA-Z0-9_-"].repeat }
|
12
12
|
|
13
13
|
rule(:property_value) { match("[^\\n\\]\\[]").repeat(1) }
|
14
|
-
rule(:property)
|
14
|
+
rule(:property) do
|
15
|
+
whitespace >> str("[") >> label.as(:name) >> str(":") >> whitespace >>
|
16
|
+
property_value.as(:value) >> str("]") >> whitespace >> newline.maybe
|
17
|
+
end
|
15
18
|
rule(:tag) { whitespace >> str("#") >> label.as(:tag) >> whitespace >> newline.maybe }
|
16
19
|
rule(:property_or_tag_list) { (property.as(:property) | tag).repeat }
|
17
20
|
|
18
|
-
rule(:
|
21
|
+
rule(:time_value) do
|
22
|
+
match["0-9"].repeat(2, 2) >> str(":") >> match["0-9"].repeat(2, 2)
|
23
|
+
end
|
24
|
+
rule(:time) do
|
25
|
+
str("[") >> time_value.as(:time) >> str("]")
|
26
|
+
end
|
19
27
|
rule(:status) { str("[") >> label.as(:status) >> str("]") }
|
20
28
|
rule(:title) { text.repeat }
|
21
29
|
|
@@ -26,18 +34,14 @@ module Logbook
|
|
26
34
|
|
27
35
|
rule(:task_definition) do
|
28
36
|
status >> whitespace >> title.as(:title) >> str("\n") >>
|
29
|
-
|
30
|
-
|
31
|
-
newline.repeat >>
|
32
|
-
note.as(:note)
|
37
|
+
newline.repeat >> property_or_tag_list.as(:properties) >>
|
38
|
+
newline.repeat >> note.as(:note)
|
33
39
|
end
|
34
40
|
|
35
41
|
rule(:task_entry) do
|
36
42
|
time >> whitespace >> status >> whitespace >> title.as(:title) >> str("\n") >>
|
37
|
-
|
38
|
-
|
39
|
-
newline.repeat >>
|
40
|
-
note.as(:note)
|
43
|
+
newline.repeat >> property_or_tag_list.as(:properties) >>
|
44
|
+
newline.repeat >> note.as(:note)
|
41
45
|
end
|
42
46
|
|
43
47
|
rule(:page) do
|
data/lib/logbook/task.rb
ADDED
data/lib/logbook/task_entry.rb
CHANGED
@@ -1,7 +1,27 @@
|
|
1
|
+
require "date"
|
2
|
+
|
1
3
|
module Logbook
|
2
4
|
class TaskEntry < Struct.new(:line_number, :time, :title, :status, :properties, :tags, :note)
|
5
|
+
DATE_PROPERTY_NAME = "Date"
|
6
|
+
|
3
7
|
def merge_page_properties(properties)
|
4
8
|
self.properties = properties.merge(self.properties)
|
5
9
|
end
|
10
|
+
|
11
|
+
def recorded_at
|
12
|
+
date = self.properties[DATE_PROPERTY_NAME]
|
13
|
+
time = self.time
|
14
|
+
|
15
|
+
DateTime.parse(date + " " + time)
|
16
|
+
rescue ArgumentError
|
17
|
+
end
|
18
|
+
|
19
|
+
def starts_clock?
|
20
|
+
[Task::START, Task::RESUME, Task::REOPEN].include?(self.status)
|
21
|
+
end
|
22
|
+
|
23
|
+
def stops_clock?
|
24
|
+
true
|
25
|
+
end
|
6
26
|
end
|
7
27
|
end
|
data/lib/logbook.rb
CHANGED
@@ -1,14 +1,15 @@
|
|
1
1
|
module Logbook
|
2
|
-
VERSION = "0.1.
|
2
|
+
VERSION = "0.1.4"
|
3
3
|
|
4
4
|
require "logbook/builder"
|
5
5
|
require "logbook/page"
|
6
6
|
require "logbook/parser"
|
7
|
+
require "logbook/log_entry"
|
8
|
+
require "logbook/task"
|
7
9
|
require "logbook/task_definition"
|
8
10
|
require "logbook/task_entry"
|
9
11
|
|
12
|
+
Duration = Struct.new(:minutes)
|
10
13
|
Property = Struct.new(:name, :value)
|
11
14
|
Tag = Struct.new(:value)
|
12
|
-
|
13
|
-
LogEntry = Struct.new(:line_number, :time, :note)
|
14
15
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: logbook-ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gabriel Malkas
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-01-
|
11
|
+
date: 2018-01-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -114,8 +114,10 @@ files:
|
|
114
114
|
- bin/setup
|
115
115
|
- lib/logbook.rb
|
116
116
|
- lib/logbook/builder.rb
|
117
|
+
- lib/logbook/log_entry.rb
|
117
118
|
- lib/logbook/page.rb
|
118
119
|
- lib/logbook/parser.rb
|
120
|
+
- lib/logbook/task.rb
|
119
121
|
- lib/logbook/task_definition.rb
|
120
122
|
- lib/logbook/task_entry.rb
|
121
123
|
- logbook-ruby.gemspec
|