devlog 0.0.3 → 0.1.0
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/.ruby-version +1 -1
- data/Gemfile +3 -4
- data/Gemfile.lock +12 -5
- data/README.md +42 -4
- data/VERSION +1 -1
- data/bin/devlog +47 -24
- data/devlog.gemspec +10 -8
- data/devlog.markdown +16 -1
- data/lib/devlog.rb +56 -9
- data/test/devlog_test.rb +157 -137
- data/test/test_helper.rb +18 -18
- data/test_open_devlog.markdown +9 -0
- metadata +19 -18
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 19e13234e260fdcf4a605fed718d18e38582b527
|
4
|
+
data.tar.gz: cb768c8e8fd307785e5fb5c500614296967a0abe
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 84575cdfb6b41b2392823f592b4d5231d0560b11c170afe60cde836637c4f67f15135b803b705ab7a2ec8951dad29a8fc6c1f4abe5f6cd76778fb17f44b466a1
|
7
|
+
data.tar.gz: 7a71510e171eec5a56e0be41f1c806bb97eb24dc7a6376fe977a563334cbdac49b5b7bff042af16e45c291612bd22e4ea3140b0ab930c99850e1549bdb221998
|
data/.ruby-version
CHANGED
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,9 +1,12 @@
|
|
1
1
|
GEM
|
2
2
|
remote: https://rubygems.org/
|
3
3
|
specs:
|
4
|
-
activesupport (
|
5
|
-
i18n (~> 0.6, >= 0.6.
|
6
|
-
|
4
|
+
activesupport (4.1.9)
|
5
|
+
i18n (~> 0.6, >= 0.6.9)
|
6
|
+
json (~> 1.7, >= 1.7.7)
|
7
|
+
minitest (~> 5.1)
|
8
|
+
thread_safe (~> 0.1)
|
9
|
+
tzinfo (~> 1.1)
|
7
10
|
addressable (2.3.5)
|
8
11
|
builder (3.2.2)
|
9
12
|
descendants_tracker (0.0.3)
|
@@ -20,7 +23,7 @@ GEM
|
|
20
23
|
oauth2
|
21
24
|
hashie (2.0.5)
|
22
25
|
highline (1.6.20)
|
23
|
-
i18n (0.
|
26
|
+
i18n (0.7.0)
|
24
27
|
jeweler (2.0.1)
|
25
28
|
builder
|
26
29
|
bundler (>= 1.0)
|
@@ -34,6 +37,7 @@ GEM
|
|
34
37
|
jwt (0.1.11)
|
35
38
|
multi_json (>= 1.5)
|
36
39
|
mini_portile (0.5.2)
|
40
|
+
minitest (5.5.1)
|
37
41
|
multi_json (1.8.4)
|
38
42
|
multi_xml (0.5.5)
|
39
43
|
multipart-post (2.0.0)
|
@@ -49,10 +53,13 @@ GEM
|
|
49
53
|
rake (10.1.1)
|
50
54
|
rdoc (4.1.1)
|
51
55
|
json (~> 1.4)
|
56
|
+
thread_safe (0.3.4)
|
57
|
+
tzinfo (1.2.2)
|
58
|
+
thread_safe (~> 0.1)
|
52
59
|
|
53
60
|
PLATFORMS
|
54
61
|
ruby
|
55
62
|
|
56
63
|
DEPENDENCIES
|
57
|
-
activesupport (~>
|
64
|
+
activesupport (~> 4.1.8)
|
58
65
|
jeweler (~> 2.0)
|
data/README.md
CHANGED
@@ -8,21 +8,59 @@ structure
|
|
8
8
|
|
9
9
|
a devlog consists of many coding or communication sessions.
|
10
10
|
|
11
|
-
the current session is
|
11
|
+
the current development session is written at the top of the file.
|
12
12
|
|
13
13
|
older sessions are towards the end of the file.
|
14
14
|
|
15
|
-
the first session is the
|
15
|
+
the first session is the one at the bottom, scroll down at the end of the file.
|
16
16
|
|
17
17
|
sessions are separated with beginning and end "devlog DSL" entries,
|
18
18
|
|
19
19
|
these must be entered at the start of the line.
|
20
20
|
|
21
|
+
how to write?
|
22
|
+
=============
|
23
|
+
|
24
|
+
like a book, top down, but always start a new session on top of the file, so that Your customer sees the latest entry there.
|
21
25
|
|
22
26
|
devlog DSL
|
23
27
|
==========
|
24
28
|
|
29
|
+
|
30
|
+
#DD.MM.YYYY HH:MM:SS CodingSession::END
|
31
|
+
|
32
|
+
devlog text...
|
33
|
+
|
25
34
|
#DD.MM.YYYY HH:MM:SS CodingSession::BEGIN
|
26
35
|
|
27
|
-
|
28
|
-
|
36
|
+
using the devlog binary
|
37
|
+
===================
|
38
|
+
|
39
|
+
to parse a devlog file explicitly:
|
40
|
+
|
41
|
+
`devlog /path/devlog_file.markdown`
|
42
|
+
|
43
|
+
to run in current folder (default), expecting file `devlog.markdown` to be present in it:
|
44
|
+
|
45
|
+
`devlog`
|
46
|
+
|
47
|
+
run in current folder and spawn coding session:
|
48
|
+
|
49
|
+
`devlog begin`
|
50
|
+
|
51
|
+
run in current folder and finish coding session:
|
52
|
+
|
53
|
+
`devlog end`
|
54
|
+
|
55
|
+
run in current folder and commit to git repo (if any):
|
56
|
+
|
57
|
+
`devlog commit`
|
58
|
+
|
59
|
+
run in current folder and push to git repo (if any):
|
60
|
+
|
61
|
+
`devlog push`
|
62
|
+
|
63
|
+
run in current folder and commit&push git repo (if any):
|
64
|
+
|
65
|
+
`devlog save`
|
66
|
+
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0
|
1
|
+
0.1.0
|
data/bin/devlog
CHANGED
@@ -11,45 +11,68 @@ Using with a file:
|
|
11
11
|
|
12
12
|
#{'devlog'.red} /path/to/devlog.markdown
|
13
13
|
|
14
|
-
or
|
14
|
+
or in a folder with a 'devlog.markdown' file in it:
|
15
15
|
|
16
16
|
#{'devlog'.green}
|
17
17
|
|
18
|
+
commands for the current folder:
|
19
|
+
|
20
|
+
#{'devlog'.green} b ~ starts coding session
|
21
|
+
#{'devlog'.green} e ~ stops coding session
|
22
|
+
#{'devlog'.green} s ~ status of coding session
|
23
|
+
#{'devlog'.green} save ~ commit & push git repo
|
24
|
+
#{'devlog'.green} commit ~ commit git repo
|
25
|
+
#{'devlog'.green} push ~ push git repo
|
26
|
+
|
18
27
|
EOF
|
19
28
|
#arguments
|
20
29
|
$:.unshift File.join(File.dirname(__FILE__))
|
21
|
-
@
|
30
|
+
@in_file_or_cmd = ARGV[0]
|
22
31
|
def print_usage
|
23
32
|
puts USAGE
|
24
33
|
end
|
34
|
+
def parse_now(devlog_file='devlog.markdown', msg='')
|
35
|
+
puts msg
|
36
|
+
t = parse_devlog_now(devlog_file)
|
37
|
+
puts t.validation_string
|
38
|
+
puts t.to_info_string
|
39
|
+
puts is_session_open(devlog_file) ? "\nSession is open...".yellow : "\nNo open session.".green
|
40
|
+
end
|
25
41
|
def dodo
|
26
42
|
include Devlog
|
27
43
|
time = Benchmark.realtime do
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
44
|
+
|
45
|
+
if @in_file_or_cmd == 'commit'
|
46
|
+
`git commit -am 'devlog';git push`
|
47
|
+
elsif @in_file_or_cmd == 'b'
|
48
|
+
start_coding_session("devlog.markdown")
|
49
|
+
elsif @in_file_or_cmd == 'e'
|
50
|
+
stop_coding_session("devlog.markdown")
|
51
|
+
elsif @in_file_or_cmd == 'commit'
|
52
|
+
puts "Commit git"
|
53
|
+
`git commit -am "devlog"`
|
54
|
+
elsif @in_file_or_cmd == 'push'
|
55
|
+
puts "Push git"
|
56
|
+
`git push`
|
57
|
+
elsif @in_file_or_cmd == 'save'
|
58
|
+
puts "Commit and push git"
|
59
|
+
`git commit -am "devlog" && git push`
|
60
|
+
elsif @in_file_or_cmd == 's'
|
61
|
+
puts is_session_open("devlog.markdown") ? "Session is open..." : "No open session."
|
62
|
+
elsif @in_file_or_cmd =~ /markdown/
|
63
|
+
parse_now(@in_file_or_cmd, "Parsing #{@in_file_or_cmd}...".red)
|
33
64
|
else
|
34
|
-
|
35
|
-
t = parse_devlog_now("devlog.markdown") #try default file
|
36
|
-
puts t.validation_string
|
37
|
-
puts t.to_info_string
|
65
|
+
parse_now('devlog.markdown', "Parsing devlog.markdown in current folder...".green)
|
38
66
|
end
|
67
|
+
|
39
68
|
end
|
40
|
-
puts "\
|
69
|
+
puts "\n\n"
|
70
|
+
#puts "\nRealtime: #{time}sec\n\n"
|
41
71
|
end
|
42
|
-
|
72
|
+
#devlog run
|
43
73
|
begin
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
else
|
48
|
-
dodo
|
49
|
-
end
|
50
|
-
|
51
|
-
rescue
|
74
|
+
dodo
|
75
|
+
rescue Exception => e
|
76
|
+
puts "\nRuntime exception: #{e.message.to_s.blue}\n"
|
52
77
|
print_usage
|
53
|
-
end
|
54
|
-
|
55
|
-
#exit
|
78
|
+
end
|
data/devlog.gemspec
CHANGED
@@ -2,14 +2,16 @@
|
|
2
2
|
# DO NOT EDIT THIS FILE DIRECTLY
|
3
3
|
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
|
+
# stub: devlog 0.1.0 ruby lib
|
5
6
|
|
6
7
|
Gem::Specification.new do |s|
|
7
8
|
s.name = "devlog"
|
8
|
-
s.version = "0.0
|
9
|
+
s.version = "0.1.0"
|
9
10
|
|
10
11
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
12
|
+
s.require_paths = ["lib"]
|
11
13
|
s.authors = ["mihael"]
|
12
|
-
s.date = "
|
14
|
+
s.date = "2015-02-02"
|
13
15
|
s.description = "devlog.markdown time&space extractor"
|
14
16
|
s.email = "kitschmaster@gmail.com"
|
15
17
|
s.executables = ["devlog"]
|
@@ -46,28 +48,28 @@ Gem::Specification.new do |s|
|
|
46
48
|
"test/test_helper.rb",
|
47
49
|
"test_devlog.markdown",
|
48
50
|
"test_negative_devlog.markdown",
|
51
|
+
"test_open_devlog.markdown",
|
49
52
|
"test_single_devlog.markdown",
|
50
53
|
"test_stats_devlog.markdown"
|
51
54
|
]
|
52
55
|
s.homepage = "http://github.com/mihael/devlog"
|
53
56
|
s.licenses = ["MIT"]
|
54
|
-
s.
|
55
|
-
s.rubygems_version = "2.0.14"
|
57
|
+
s.rubygems_version = "2.4.5"
|
56
58
|
s.summary = "takes devlog.markdown and gives info"
|
57
59
|
|
58
60
|
if s.respond_to? :specification_version then
|
59
61
|
s.specification_version = 4
|
60
62
|
|
61
63
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
62
|
-
s.add_runtime_dependency(%q<
|
63
|
-
s.
|
64
|
+
s.add_runtime_dependency(%q<activesupport>, ["~> 4.1.8"])
|
65
|
+
s.add_development_dependency(%q<jeweler>, ["~> 2.0"])
|
64
66
|
else
|
67
|
+
s.add_dependency(%q<activesupport>, ["~> 4.1.8"])
|
65
68
|
s.add_dependency(%q<jeweler>, ["~> 2.0"])
|
66
|
-
s.add_dependency(%q<activesupport>, ["~> 3.2"])
|
67
69
|
end
|
68
70
|
else
|
71
|
+
s.add_dependency(%q<activesupport>, ["~> 4.1.8"])
|
69
72
|
s.add_dependency(%q<jeweler>, ["~> 2.0"])
|
70
|
-
s.add_dependency(%q<activesupport>, ["~> 3.2"])
|
71
73
|
end
|
72
74
|
end
|
73
75
|
|
data/devlog.markdown
CHANGED
@@ -1,3 +1,18 @@
|
|
1
|
+
|
2
|
+
#02.02.2015 17:53:20 CodingSession::END
|
3
|
+
|
4
|
+
cleaning up a little... enhancing the devlog executable features...
|
5
|
+
|
6
|
+
if You now put Your devlog.markdown under git, You can simply go to Your devlog dir and say: devlog save, and it will commit and push the git repository with default message: "devlog".
|
7
|
+
|
8
|
+
getting this: /Users/mihael/.rvm/gems/ruby-2.2.0@devlog/gems/activesupport-3.2.16/lib/active_support/values/time_zone.rb:270: warning: circular argument reference - now ... [which is obviously related to this](https://github.com/rails/rails/issues/18201)
|
9
|
+
|
10
|
+
next time ii work on this code want to also get rid of activesupport dependency... for now changed the gem required version in the Gemfile...
|
11
|
+
|
12
|
+
releasing a minor new version...
|
13
|
+
|
14
|
+
#02.02.2015 11:04:30 CodingSession::BEGIN
|
15
|
+
|
1
16
|
#15.08.2014 19:14:21 CodingSession::END
|
2
17
|
|
3
18
|
adding some nice stuff... can now see negative and zero sessions, which are basically error entries with zero or negative time.
|
@@ -108,7 +123,7 @@ of communication hours to this devlog, so that tests can be written...
|
|
108
123
|
|
109
124
|
and start a new session higher up, after ii take some breaths...
|
110
125
|
|
111
|
-
as text gets written down, at the end of the session ii scroll to the top again and insert the ending command
|
126
|
+
as text gets written down, at the end of the session ii scroll to the top again and insert the ending command.
|
112
127
|
|
113
128
|
#02.02.2014 13:53:37 CodingSession::BEGIN
|
114
129
|
|
data/lib/devlog.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
|
-
require "
|
1
|
+
#require "time"
|
2
|
+
#require "date"
|
2
3
|
require "active_support/all"
|
4
|
+
|
3
5
|
class String
|
4
6
|
def red; colorize(self, "\e[1m\e[31m"); end
|
5
7
|
def green; colorize(self, "\e[1m\e[32m"); end
|
@@ -55,9 +57,11 @@ module Devlog
|
|
55
57
|
puts "#{txt}"
|
56
58
|
end
|
57
59
|
|
60
|
+
#parsing datetime
|
61
|
+
DATETIME_FORMAT = "%d.%m.%Y %H:%M:%S"
|
58
62
|
def parse_datetime(line)
|
59
63
|
parts = line[1..-1].split
|
60
|
-
DateTime.strptime("#{parts[0]} #{parts[1]}",
|
64
|
+
DateTime.strptime("#{parts[0]} #{parts[1]}", DATETIME_FORMAT)
|
61
65
|
end
|
62
66
|
|
63
67
|
def parse_devlog_now(devlog=nil)
|
@@ -172,6 +176,7 @@ module Devlog
|
|
172
176
|
t
|
173
177
|
end
|
174
178
|
|
179
|
+
#this is just a historic event, not used
|
175
180
|
def parse_devlog(devlog=nil)
|
176
181
|
t = Tajm.new
|
177
182
|
return t unless devlog
|
@@ -215,6 +220,48 @@ module Devlog
|
|
215
220
|
t
|
216
221
|
end
|
217
222
|
|
223
|
+
#workflow methods
|
224
|
+
|
225
|
+
#helper for the time entries
|
226
|
+
def devlog_session_entry(session_type='Coding', begin_end='BEGIN')
|
227
|
+
"\n##{Time.now.strftime(DATETIME_FORMAT)} #{session_type}Session::#{begin_end}\n"
|
228
|
+
end
|
229
|
+
|
230
|
+
#prepend a string to a text file
|
231
|
+
def prepend_string(t="\n", devlog_file='devlog.markdown')
|
232
|
+
system "echo '#{t}' | cat - #{devlog_file} > #{devlog_file}.tmp && mv #{devlog_file}.tmp #{devlog_file}"
|
233
|
+
end
|
234
|
+
|
235
|
+
#insert a new session
|
236
|
+
def start_coding_session(devlog_file='devlog.markdown')
|
237
|
+
prepend_string(devlog_session_entry('Coding', 'BEGIN'), devlog_file)
|
238
|
+
end
|
239
|
+
|
240
|
+
#close the current session, if any
|
241
|
+
def stop_coding_session(devlog_file='devlog.markdown')
|
242
|
+
prepend_string(devlog_session_entry('Coding', 'END'), devlog_file)
|
243
|
+
end
|
244
|
+
|
245
|
+
#if the first non empty line is not and END entry then session is open (or malformed file)
|
246
|
+
def is_session_open(devlog_file='devlog.markdown')
|
247
|
+
is_open = true
|
248
|
+
File.open(devlog_file, 'r') do |f|
|
249
|
+
loop do
|
250
|
+
break if not line = f.gets #exit on end of file, read line
|
251
|
+
if (line.strip.size>0) #non empty line
|
252
|
+
if (line =~ /Session::END/)
|
253
|
+
is_open = false
|
254
|
+
break
|
255
|
+
else
|
256
|
+
break
|
257
|
+
end
|
258
|
+
end
|
259
|
+
end
|
260
|
+
end
|
261
|
+
is_open
|
262
|
+
end
|
263
|
+
|
264
|
+
#the parsing object
|
218
265
|
class Parsing
|
219
266
|
#this is the total time, but each session has these same params
|
220
267
|
attr_accessor :coding_session_time, :com_session_time, :payed_time #backward compatible object with Tajm, from devlog 0.0.0
|
@@ -360,7 +407,7 @@ module Devlog
|
|
360
407
|
s << ("Hours last 14 days = #{self.hours_for_last(14)} [h]\n")
|
361
408
|
s << ("Hours last 28 days = #{self.hours_for_last(28)} [h]\n")
|
362
409
|
s << ("\n")
|
363
|
-
s << ("Devlog Time = #{self.devlog_days * 24} [
|
410
|
+
s << ("Devlog Time = #{self.devlog_days * 24} [h]\n")
|
364
411
|
s << ("Devlog Days = #{self.devlog_days} [days]\n")
|
365
412
|
s << ("Devlog Weeks = #{self.devlog_weeks} [weeks]\n")
|
366
413
|
s << ("Devlog Months = #{self.devlog_months} [months]\n")
|
@@ -373,9 +420,9 @@ module Devlog
|
|
373
420
|
s << ("#{'Zero Sessions'.blue} = #{self.zero_sessions_to_s}\n")
|
374
421
|
end
|
375
422
|
s << ("\n")
|
376
|
-
s << ("Longest Session = #{self.longest_session.
|
377
|
-
s << ("Shortest Session = #{self.shortest_session.
|
378
|
-
s << ("Last Session = #{self.devlog_end.ago_in_words}, duration: #{self.last_session.session_time.round(
|
423
|
+
s << ("Longest Session = #{self.longest_session.to_s}\n")
|
424
|
+
s << ("Shortest Session = #{self.shortest_session.to_s}\n")
|
425
|
+
s << ("Last Session = #{self.devlog_end.ago_in_words}, duration: #{self.last_session.session_time.round(3)} [h]")
|
379
426
|
end
|
380
427
|
|
381
428
|
private
|
@@ -452,7 +499,7 @@ module Devlog
|
|
452
499
|
end
|
453
500
|
|
454
501
|
def to_s
|
455
|
-
"#{type}, begin on line #{@zzbegin_line_number} at #{@zzbegin}, ends on line #{@zzend_line_number} at #{@zzend}
|
502
|
+
"#{session_time.round(3)} [h] #{type}, begin on line #{@zzbegin_line_number} at #{@zzbegin}, ends on line #{@zzend_line_number} at #{@zzend}"
|
456
503
|
end
|
457
504
|
end
|
458
505
|
|
@@ -473,8 +520,8 @@ module DateTimeAgoInWords
|
|
473
520
|
def ago_in_words
|
474
521
|
return 'a very very long time ago' if self.year < 1800
|
475
522
|
secs = Time.now - self
|
476
|
-
return 'just
|
477
|
-
return '' if secs <= -1
|
523
|
+
return 'just over' if secs > -1 && secs < 1
|
524
|
+
return 'now' if secs <= -1
|
478
525
|
pair = ago_in_words_pair(secs)
|
479
526
|
ary = ago_in_words_singularize(pair)
|
480
527
|
ary.size == 0 ? '' : ary.join(' and ') << ' ago'
|
data/test/devlog_test.rb
CHANGED
@@ -2,142 +2,162 @@ require 'test_helper'
|
|
2
2
|
|
3
3
|
class DevlogTest < Test::Unit::TestCase
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
5
|
+
def test_empty_devlog
|
6
|
+
@tajm = parse_devlog(File.join(File.dirname(__FILE__), '..', 'empty_devlog.markdown'))
|
7
|
+
puts "#{@tajm.coding_session_time} #{@tajm.com_session_time} #{@tajm.payed_time}"
|
8
|
+
assert(@tajm.coding_session_time==0, "time is money is love")
|
9
|
+
assert(@tajm.com_session_time==0, "selftalk")
|
10
|
+
assert(@tajm.payed_time==0, "selfpay")
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_devlog_now
|
14
|
+
load_devlog
|
15
|
+
load_devlog_now
|
16
|
+
|
17
|
+
assert(@tajm.coding_session_time==@tajm_now.coding_session_time, "not equal coding times")
|
18
|
+
assert(@tajm.com_session_time==@tajm_now.com_session_time, "selftalk not repeated")
|
19
|
+
assert(@tajm.payed_time==@tajm_now.payed_time, "selfpay not equal")
|
20
|
+
|
21
|
+
assert(@tajm_now.zezzions.size>0, "where are the seeds of zezzions?")
|
22
|
+
assert(@tajm_now.unpayed_time<0, "let's make sure opensource is free to develop it self")
|
23
|
+
assert(@tajm_now.zezzions.size>4, "at least 4 recorded sessions must there be?")
|
24
|
+
assert(@tajm_now.devlog_begin.to_s=="2014-01-19T10:16:08+00:00", "a historycal moment in the akashic records was deleted, what?")
|
25
|
+
assert(@tajm_now.devlog_begin.to_time.to_i == 1390126568, "or just a random number in a random dream...")
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_devlog_test
|
29
|
+
load_devlog_test
|
30
|
+
|
31
|
+
assert(@tajm_test.coding_session_time== 4.5, "wrong total coding session time")
|
32
|
+
assert(@tajm_test.com_session_time==1.0 , "wrong com session time")
|
33
|
+
assert(@tajm_test.payed_time==-1, "wrong payed time")
|
34
|
+
assert(@tajm_test.unpayed_time==4.5, "wrong unpayed wrong")
|
35
|
+
assert(@tajm_test.charge_time==5.5, "wrong charge wrong")
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_p_session_time
|
39
|
+
p = Parsing.new
|
40
|
+
zezzion = Zezzion.new
|
41
|
+
zezzion.zzend = parse_datetime("#08.03.2014 11:00:00 CodingSession::END")
|
42
|
+
zezzion.zzbegin = parse_datetime("#08.03.2014 10:00:00 CodingSession::BEGIN")
|
43
|
+
zezzion.coding_session_time = 60*60 #1h
|
44
|
+
p.add_zezzion zezzion
|
45
|
+
zezzion.zzend = parse_datetime("#09.03.2014 11:00:00 CodingSession::END")
|
46
|
+
zezzion.zzbegin = parse_datetime("#09.03.2014 10:00:00 CodingSession::BEGIN")
|
47
|
+
zezzion.coding_session_time = 60*60 #1h
|
48
|
+
p.add_zezzion zezzion
|
49
|
+
|
50
|
+
assert(p.session_time==60*60*2, "should be 7200s but is #{p.session_time}")
|
51
|
+
end
|
52
|
+
|
53
|
+
def test_how_much_per_day
|
54
|
+
load_devlog_stat
|
55
|
+
assert(@tajm_stat.per_day>0, "the middle day value, not the mean")
|
56
|
+
assert(@tajm_stat.per_day==1.0, "per day should be 1.0 but is #{@tajm_stat.per_day}")
|
57
|
+
end
|
58
|
+
|
59
|
+
def test_how_much_per_week
|
60
|
+
load_devlog_stat
|
61
|
+
assert(@tajm_stat.per_week>0, "the middle week value, not the mean")
|
62
|
+
assert(@tajm_stat.per_week==7.02, "per week should be 7.02 but is #{@tajm_stat.per_week}")
|
63
|
+
end
|
64
|
+
|
65
|
+
def test_devlog_weeks
|
66
|
+
load_devlog_stat
|
67
|
+
assert(@tajm_stat.devlog_weeks==1.14, "devlog weeks should be 1.14 but is #{@tajm_stat.devlog_weeks}")
|
68
|
+
end
|
69
|
+
|
70
|
+
def test_how_much_per_month
|
71
|
+
load_devlog_stat
|
72
|
+
assert(@tajm_stat.per_week>0, "the middle month value, not the mean")
|
73
|
+
end
|
74
|
+
|
75
|
+
def test_devlog_days_0
|
76
|
+
load_devlog_test
|
77
|
+
assert(@tajm_test.devlog_days==33, "should be 33 devlog days")
|
78
|
+
end
|
79
|
+
|
80
|
+
def test_devlog_days_1
|
81
|
+
load_devlog_stat
|
82
|
+
assert(@tajm_stat.devlog_days==8, "should be 8 devlog days")
|
83
|
+
end
|
84
|
+
|
85
|
+
def test_devlog_days_2
|
86
|
+
load_devlog_single
|
87
|
+
assert(@tajm_single.devlog_days==1, "should be 1 devlog day")
|
88
|
+
end
|
89
|
+
|
90
|
+
def test_devlog_begin
|
91
|
+
load_devlog_stat
|
92
|
+
assert(@tajm_stat.devlog_begin.to_s=="2014-03-01T10:00:00+00:00", "devlog begin is wrong")
|
93
|
+
end
|
94
|
+
|
95
|
+
def test_devlog_end
|
96
|
+
load_devlog_stat
|
97
|
+
assert(@tajm_stat.devlog_end.to_s=="2014-03-08T11:00:00+00:00", "devlog end is wrong")
|
98
|
+
end
|
99
|
+
|
100
|
+
def test_hours_for_last0
|
101
|
+
load_devlog_stat
|
102
|
+
hours = @tajm_stat.hours_for_last(0, parse_datetime("#09.03.2014 11:00:00"))
|
103
|
+
assert(hours==0, "should be 0, but is #{hours}")
|
104
|
+
end
|
105
|
+
def test_hours_for_last7
|
106
|
+
load_devlog_stat
|
107
|
+
hours = @tajm_stat.hours_for_last(7, parse_datetime("#09.03.2014 11:00:00"))
|
108
|
+
assert(hours==7, "should be 7, but is #{hours}")
|
109
|
+
end
|
110
|
+
def test_hours_for_last1
|
111
|
+
load_devlog_stat
|
112
|
+
hours = @tajm_stat.hours_for_last(1, parse_datetime("#09.03.2014 11:00:00"))
|
113
|
+
assert(hours==1, "should be 1, but is #{hours}")
|
114
|
+
|
115
|
+
end
|
116
|
+
|
117
|
+
def test_session_count
|
118
|
+
load_devlog_stat
|
119
|
+
assert(@tajm_stat.devlog_sessions.size==8, "should be 8, but is #{@tajm_stat.devlog_sessions.size}")
|
120
|
+
end
|
121
|
+
|
122
|
+
def test_negative_sessions
|
123
|
+
load_devlog_negative
|
124
|
+
assert(@tajm_negative.devlog_sessions.size==5, "should be 5, but is #{@tajm_negative.devlog_sessions.size}")
|
125
|
+
shortest_session_time_rounded = @tajm_negative.shortest_session.session_time.round(2)
|
126
|
+
assert(shortest_session_time_rounded==-2, "should be -2.0, but is #{shortest_session_time_rounded}")
|
127
|
+
assert(@tajm_negative.negative_sessions.size==2, "should be 2, but is #{@tajm_negative.negative_sessions.size}")
|
128
|
+
end
|
129
|
+
|
130
|
+
def test_zero_sessions
|
131
|
+
load_devlog_negative
|
132
|
+
assert(@tajm_negative.devlog_sessions.size==5, "should be 5, but is #{@tajm_negative.devlog_sessions.size}")
|
133
|
+
zero_session_time_rounded = @tajm_negative.zero_sessions.first.session_time.round(2)
|
134
|
+
assert(zero_session_time_rounded==0.0, "should be 0.0, but is #{zero_session_time_rounded}")
|
135
|
+
assert(@tajm_negative.zero_sessions.size==1, "should be 1, but is #{@tajm_negative.zero_sessions.size}")
|
136
|
+
end
|
137
|
+
|
138
|
+
def test_start_coding_session
|
139
|
+
@empty_devlog = File.join(File.dirname(__FILE__), '..', 'tmp_devlog.markdown')
|
140
|
+
File.new(@empty_devlog, 'w').puts('empty')
|
141
|
+
start_coding_session(@empty_devlog)
|
142
|
+
assert(File.readlines(@empty_devlog).grep(/CodingSession::BEGIN/).size>0, "should insert CodingSession::BEGIN at top of file")
|
143
|
+
assert(is_session_open(@empty_devlog)==true, "should be true, session should be open after starting")
|
144
|
+
File.delete(@empty_devlog)
|
145
|
+
end
|
146
|
+
|
147
|
+
def test_stop_coding_session
|
148
|
+
@empty_devlog = File.join(File.dirname(__FILE__), '..', 'tmp_devlog.markdown')
|
149
|
+
File.new(@empty_devlog, 'w').puts('empty')
|
150
|
+
stop_coding_session(@empty_devlog)
|
151
|
+
assert(File.readlines(@empty_devlog).grep(/CodingSession::END/).size>0, "should insert CodingSession::END at top of file")
|
152
|
+
assert(is_session_open(@empty_devlog)==false, "should be false, session should be closed after stopping")
|
153
|
+
File.delete(@empty_devlog)
|
154
|
+
end
|
155
|
+
|
156
|
+
def test_is_session_open
|
157
|
+
@closed_devlog = File.join(File.dirname(__FILE__), '..', 'test_devlog.markdown')
|
158
|
+
assert(is_session_open(@closed_devlog)==false, "should be false, session should be closed")
|
159
|
+
@open_devlog = File.join(File.dirname(__FILE__), '..', 'test_open_devlog.markdown')
|
160
|
+
assert(is_session_open(@open_devlog)==true, "should be true, session should be open")
|
161
|
+
end
|
142
162
|
|
143
163
|
end
|
data/test/test_helper.rb
CHANGED
@@ -10,37 +10,37 @@ class Test::Unit::TestCase
|
|
10
10
|
end
|
11
11
|
|
12
12
|
def load_devlog
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
13
|
+
@tajm = parse_devlog(File.join(File.dirname(__FILE__), '..', 'devlog.markdown'))
|
14
|
+
puts "#{@tajm.coding_session_time} #{@tajm.com_session_time} #{@tajm.payed_time}"
|
15
|
+
assert(@tajm.coding_session_time>0, "no time no money no love")
|
16
|
+
assert(@tajm.com_session_time>0, "no selftalk")
|
17
|
+
assert(@tajm.payed_time<0, "no selfpay")
|
18
18
|
end
|
19
19
|
|
20
20
|
def load_devlog_now
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
21
|
+
@tajm_now = parse_devlog_now(File.join(File.dirname(__FILE__), '..', 'devlog.markdown'))
|
22
|
+
puts "#{@tajm_now.coding_session_time} #{@tajm_now.com_session_time} #{@tajm_now.payed_time}"
|
23
|
+
assert(@tajm_now.coding_session_time>0, "no time no money no love")
|
24
|
+
assert(@tajm_now.com_session_time>0, "no selftalk")
|
25
|
+
assert(@tajm_now.payed_time<0, "no selfpay")
|
26
26
|
end
|
27
27
|
|
28
28
|
def load_devlog_test
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
29
|
+
@tajm_test = parse_devlog_now(File.join(File.dirname(__FILE__), '..', 'test_devlog.markdown'))
|
30
|
+
puts "#{@tajm_test.coding_session_time} #{@tajm_test.com_session_time} #{@tajm_test.payed_time}"
|
31
|
+
assert(@tajm_test.coding_session_time>0, "no time no money no love")
|
32
|
+
assert(@tajm_test.com_session_time>0, "no selftalk")
|
33
|
+
assert(@tajm_test.payed_time<0, "no selfpay")
|
34
34
|
end
|
35
35
|
|
36
36
|
def load_devlog_stat
|
37
|
-
|
37
|
+
@tajm_stat = parse_devlog_now(File.join(File.dirname(__FILE__), '..', 'test_stats_devlog.markdown'))
|
38
38
|
end
|
39
39
|
|
40
40
|
def load_devlog_single
|
41
|
-
|
41
|
+
@tajm_single = parse_devlog_now(File.join(File.dirname(__FILE__), '..', 'test_single_devlog.markdown'))
|
42
42
|
end
|
43
43
|
|
44
44
|
def load_devlog_negative
|
45
|
-
|
45
|
+
@tajm_negative = parse_devlog_now(File.join(File.dirname(__FILE__), '..', 'test_negative_devlog.markdown'))
|
46
46
|
end
|
metadata
CHANGED
@@ -1,43 +1,43 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: devlog
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- mihael
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2015-02-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: activesupport
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - ~>
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
19
|
+
version: 4.1.8
|
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: 4.1.8
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: jeweler
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - ~>
|
31
|
+
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
34
|
-
type: :
|
33
|
+
version: '2.0'
|
34
|
+
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - ~>
|
38
|
+
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
40
|
+
version: '2.0'
|
41
41
|
description: devlog.markdown time&space extractor
|
42
42
|
email: kitschmaster@gmail.com
|
43
43
|
executables:
|
@@ -47,8 +47,8 @@ extra_rdoc_files:
|
|
47
47
|
- LICENSE
|
48
48
|
- README.md
|
49
49
|
files:
|
50
|
-
- .ruby-gemset
|
51
|
-
- .ruby-version
|
50
|
+
- ".ruby-gemset"
|
51
|
+
- ".ruby-version"
|
52
52
|
- Gemfile
|
53
53
|
- Gemfile.lock
|
54
54
|
- LICENSE
|
@@ -75,6 +75,7 @@ files:
|
|
75
75
|
- test/test_helper.rb
|
76
76
|
- test_devlog.markdown
|
77
77
|
- test_negative_devlog.markdown
|
78
|
+
- test_open_devlog.markdown
|
78
79
|
- test_single_devlog.markdown
|
79
80
|
- test_stats_devlog.markdown
|
80
81
|
homepage: http://github.com/mihael/devlog
|
@@ -87,17 +88,17 @@ require_paths:
|
|
87
88
|
- lib
|
88
89
|
required_ruby_version: !ruby/object:Gem::Requirement
|
89
90
|
requirements:
|
90
|
-
- -
|
91
|
+
- - ">="
|
91
92
|
- !ruby/object:Gem::Version
|
92
93
|
version: '0'
|
93
94
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
94
95
|
requirements:
|
95
|
-
- -
|
96
|
+
- - ">="
|
96
97
|
- !ruby/object:Gem::Version
|
97
98
|
version: '0'
|
98
99
|
requirements: []
|
99
100
|
rubyforge_project:
|
100
|
-
rubygems_version: 2.
|
101
|
+
rubygems_version: 2.4.5
|
101
102
|
signing_key:
|
102
103
|
specification_version: 4
|
103
104
|
summary: takes devlog.markdown and gives info
|