devlog 0.1.2 → 0.1.3
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/Gemfile +1 -0
- data/Gemfile.lock +4 -0
- data/VERSION +1 -1
- data/bin/devlog +11 -5
- data/devlog.gemspec +6 -3
- data/devlog.markdown +19 -1
- data/lib/devlog.rb +45 -27
- data/test/devlog_test.rb +28 -5
- metadata +16 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7493b2bbd6d4cffb285aa30469f67c7fe6f73111
|
4
|
+
data.tar.gz: 1eb62c36e3c51d93d259c6152d3177b44be57539
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 011975f73976cd54a868d7e7f9d61c0a1058f6a5804d54e6cd26907336b3f5e2865cc873f509e55556d5222ba5901d044f079514f97debf711fea90c0a2f814b
|
7
|
+
data.tar.gz: 1b74fd0683516915ffe226ac12168fa99f7ce36678b4289b9910564bac47f987eb1458e1a39dabf7f5146b6a41f39add1d72cb70a66182cba0502e5f76826d09
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -49,10 +49,13 @@ GEM
|
|
49
49
|
multi_json (~> 1.3)
|
50
50
|
multi_xml (~> 0.5)
|
51
51
|
rack (~> 1.2)
|
52
|
+
power_assert (0.2.2)
|
52
53
|
rack (1.5.2)
|
53
54
|
rake (10.1.1)
|
54
55
|
rdoc (4.1.1)
|
55
56
|
json (~> 1.4)
|
57
|
+
test-unit (3.0.8)
|
58
|
+
power_assert
|
56
59
|
thread_safe (0.3.4)
|
57
60
|
tzinfo (1.2.2)
|
58
61
|
thread_safe (~> 0.1)
|
@@ -63,3 +66,4 @@ PLATFORMS
|
|
63
66
|
DEPENDENCIES
|
64
67
|
activesupport (>= 4.1)
|
65
68
|
jeweler (~> 2.0)
|
69
|
+
test-unit
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.3
|
data/bin/devlog
CHANGED
@@ -3,11 +3,11 @@ require 'benchmark'
|
|
3
3
|
require File.expand_path(File.join(File.dirname(__FILE__), %w[.. lib devlog.rb]))
|
4
4
|
USAGE= <<-EOF
|
5
5
|
#{Devlog.display_version}
|
6
|
-
This software is intended to parse and present information within devlog.markdown development logs.
|
6
|
+
This software is intended to parse and present information within devlog.markdown development logs. It also helps You to write the devlog.
|
7
7
|
|
8
8
|
#{'Use it as You'.green} #{'dodo'.pur}.
|
9
9
|
|
10
|
-
Using with a file:
|
10
|
+
Using with a file, for parsing and seeing the information summary:
|
11
11
|
|
12
12
|
#{'devlog'.red} /path/to/devlog.markdown
|
13
13
|
|
@@ -15,12 +15,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:
|
18
|
+
write commands for the current folder, the top three:
|
19
19
|
|
20
20
|
#{'devlog'.green} b ~ starts coding session
|
21
21
|
#{'devlog'.green} e ~ stops coding session
|
22
|
+
#{'devlog'.green} save ~ save info.markdown, commit & push git repo
|
23
|
+
|
24
|
+
#{'devlog'.green} i ~ save info.markdown
|
22
25
|
#{'devlog'.green} s ~ status of coding session
|
23
|
-
#{'devlog'.green} save ~ commit & push git repo
|
24
26
|
#{'devlog'.green} commit ~ commit git repo
|
25
27
|
#{'devlog'.green} push ~ push git repo
|
26
28
|
|
@@ -50,6 +52,9 @@ def dodo
|
|
50
52
|
elsif @in_file_or_cmd == 'e'
|
51
53
|
puts "CodingSession::END"
|
52
54
|
stop_coding_session("devlog.markdown")
|
55
|
+
elsif @in_file_or_cmd == 'i'
|
56
|
+
puts "Save info.markdown"
|
57
|
+
save_info("devlog.markdown")
|
53
58
|
elsif @in_file_or_cmd == 'commit'
|
54
59
|
puts "Commit git"
|
55
60
|
`git commit -am "devlog"`
|
@@ -57,7 +62,8 @@ def dodo
|
|
57
62
|
puts "Push git"
|
58
63
|
`git push`
|
59
64
|
elsif @in_file_or_cmd == 'save'
|
60
|
-
puts "Commit and push git"
|
65
|
+
puts "Save info.markdown and Commit and push git"
|
66
|
+
save_info("devlog.markdown")
|
61
67
|
`git commit -am "devlog" && git push`
|
62
68
|
elsif @in_file_or_cmd == 's'
|
63
69
|
puts is_session_open("devlog.markdown") ? "Session is open..." : "No open session."
|
data/devlog.gemspec
CHANGED
@@ -2,16 +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.
|
5
|
+
# stub: devlog 0.1.3 ruby lib
|
6
6
|
|
7
7
|
Gem::Specification.new do |s|
|
8
8
|
s.name = "devlog"
|
9
|
-
s.version = "0.1.
|
9
|
+
s.version = "0.1.3"
|
10
10
|
|
11
11
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
12
12
|
s.require_paths = ["lib"]
|
13
13
|
s.authors = ["mihael"]
|
14
|
-
s.date = "2015-02-
|
14
|
+
s.date = "2015-02-17"
|
15
15
|
s.description = "devlog.markdown time&space extractor"
|
16
16
|
s.email = "kitschmaster@gmail.com"
|
17
17
|
s.executables = ["devlog"]
|
@@ -62,13 +62,16 @@ Gem::Specification.new do |s|
|
|
62
62
|
|
63
63
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
64
64
|
s.add_runtime_dependency(%q<activesupport>, [">= 4.1"])
|
65
|
+
s.add_development_dependency(%q<test-unit>, [">= 0"])
|
65
66
|
s.add_development_dependency(%q<jeweler>, ["~> 2.0"])
|
66
67
|
else
|
67
68
|
s.add_dependency(%q<activesupport>, [">= 4.1"])
|
69
|
+
s.add_dependency(%q<test-unit>, [">= 0"])
|
68
70
|
s.add_dependency(%q<jeweler>, ["~> 2.0"])
|
69
71
|
end
|
70
72
|
else
|
71
73
|
s.add_dependency(%q<activesupport>, [">= 4.1"])
|
74
|
+
s.add_dependency(%q<test-unit>, [">= 0"])
|
72
75
|
s.add_dependency(%q<jeweler>, ["~> 2.0"])
|
73
76
|
end
|
74
77
|
end
|
data/devlog.markdown
CHANGED
@@ -1,3 +1,21 @@
|
|
1
|
+
#16.02.2015 23:09:06 CodingSession::END
|
2
|
+
|
3
|
+
who's got time...not to sweet dream. still did not get rid of active support... well, let's keep it until, after all, it's active, reactive uppsort... and maybe someday You would dare work without it.
|
4
|
+
|
5
|
+
let's see, if ii comment out active_support and run rake test:
|
6
|
+
|
7
|
+
23 tests, 53 assertions, 0 failures, 10 errors, 0 pendings, 0 omissions, 0 notifications
|
8
|
+
|
9
|
+
just 10 errors, not failures, but what is the difference between the two, 0 is not 1.
|
10
|
+
|
11
|
+
#16.02.2015 23:08:38 CodingSession::BEGIN
|
12
|
+
|
13
|
+
#09.02.2015 15:41:16 CodingSession::END
|
14
|
+
|
15
|
+
aha... no comment haha...
|
16
|
+
|
17
|
+
#09.02.2015 15:41:09 CodingSession::BEGIN
|
18
|
+
|
1
19
|
|
2
20
|
#02.02.2015 17:53:20 CodingSession::END
|
3
21
|
|
@@ -100,7 +118,7 @@ obviously the parse_devlog method returns the Tajm object, so that is where the
|
|
100
118
|
|
101
119
|
ii have the methods implemented at #02.02.2014 15:10:01 and am about to run the test again... the darn thing still fails! :) and the methods are simply empty now, so let's make the tests pass by returning what, more than zero... ii would need to know exactly the hours and the some testing... so let me do something funky...
|
102
120
|
|
103
|
-
ii
|
121
|
+
ii added parse_devlog_now, which will be developed as the new thing, (LOL back at this record at #16.02.2015 22:59:10) while parse_devlog will be used as reference, to get the reference time and compare for validity.
|
104
122
|
|
105
123
|
also, this morning, ii discovered ii am unable to install gems under ruby 1.8.7 after installing that with rvm on 10.9 OSX, soo ii will add some more code to the binary script, to enable me to push this devlog to a github or any git repo actually and have the summary of the devlog parse inserted before pushing. it just requires some more commands to be implemented and some more parsing...
|
106
124
|
|
data/lib/devlog.rb
CHANGED
@@ -240,6 +240,17 @@ module Devlog
|
|
240
240
|
#close the current session, if any
|
241
241
|
def stop_coding_session(devlog_file='devlog.markdown')
|
242
242
|
prepend_string(devlog_session_entry('Coding', 'END'), devlog_file)
|
243
|
+
save_info(devlog_file)
|
244
|
+
end
|
245
|
+
|
246
|
+
def save_info(devlog_file='devlog.markdown', info_file='info.markdown')
|
247
|
+
info = parse_devlog_now(devlog_file)
|
248
|
+
if info.has_info?
|
249
|
+
File.open(File.join(File.dirname(devlog_file), info_file), 'w') {|f| f.write(info.to_info_string(short=true)) }
|
250
|
+
`cp #{devlog_file} #{File.join(File.dirname(devlog_file), 'README.markdown')}`
|
251
|
+
else
|
252
|
+
puts "No info present.".red
|
253
|
+
end
|
243
254
|
end
|
244
255
|
|
245
256
|
#if the first non empty line is not and END entry then session is open (or malformed file)
|
@@ -278,7 +289,11 @@ module Devlog
|
|
278
289
|
@payed_time = 0.0
|
279
290
|
|
280
291
|
@devlog_file = ""
|
281
|
-
|
292
|
+
end
|
293
|
+
|
294
|
+
def has_info?
|
295
|
+
@zezzions.any?
|
296
|
+
end
|
282
297
|
|
283
298
|
def add_zezzion(zezzion)
|
284
299
|
@zezzions << zezzion
|
@@ -391,38 +406,41 @@ module Devlog
|
|
391
406
|
vs << (File.exist?(self.devlog_file) ? '' : "No such file #{self.devlog_file}...\n".red)
|
392
407
|
end
|
393
408
|
|
394
|
-
def to_info_string
|
409
|
+
def to_info_string(short=false)
|
395
410
|
s = ""
|
396
411
|
s << "\nSession::Time: = #{self.session_time} [h]\n"
|
397
|
-
s << ("\nCodingSession::Time = %.1f [h]" % self.coding_session_time)
|
398
|
-
s << ("\nComSession::Time = %.1f [h]" % self.com_session_time)
|
399
|
-
s << ("\nCharge::Time = #{self.charge_time} [h]")
|
400
|
-
s << ("\nUnpayed::Time = #{self.unpayed_time.to_s
|
401
|
-
s << ("\n")
|
402
|
-
s << ("Num of Sessions = #{self.devlog_sessions.size}\n")
|
403
|
-
s << ("Hours per Day = #{self.per_day} [h]\n")
|
404
|
-
s << ("Hours per Week = #{self.per_week} [h]\n")
|
405
|
-
s << ("Hours per Month = #{self.per_month} [h]\n")
|
406
|
-
s << ("Hours last 7 days = #{self.hours_for_last(7)} [h]\n")
|
407
|
-
s << ("Hours last 14 days = #{self.hours_for_last(14)} [h]\n")
|
408
|
-
s << ("Hours last 28 days = #{self.hours_for_last(28)} [h]\n")
|
412
|
+
s << ("\nCodingSession::Time = %.1f [h]\n" % self.coding_session_time)
|
413
|
+
s << ("\nComSession::Time = %.1f [h]\n" % self.com_session_time)
|
414
|
+
s << ("\nCharge::Time = #{self.charge_time} [h]\n")
|
415
|
+
s << ("\nUnpayed::Time = #{self.unpayed_time.to_s} [h]\n")
|
409
416
|
s << ("\n")
|
410
|
-
|
411
|
-
|
412
|
-
|
413
|
-
|
414
|
-
|
417
|
+
unless short
|
418
|
+
s << ("Num of Sessions = #{self.devlog_sessions.size}\n")
|
419
|
+
s << ("Hours per Day = #{self.per_day} [h]\n")
|
420
|
+
s << ("Hours per Week = #{self.per_week} [h]\n")
|
421
|
+
s << ("Hours per Month = #{self.per_month} [h]\n")
|
422
|
+
s << ("Hours last 7 days = #{self.hours_for_last(7)} [h]\n")
|
423
|
+
s << ("Hours last 14 days = #{self.hours_for_last(14)} [h]\n")
|
424
|
+
s << ("Hours last 28 days = #{self.hours_for_last(28)} [h]\n")
|
415
425
|
s << ("\n")
|
416
|
-
s << ("
|
417
|
-
|
418
|
-
|
426
|
+
s << ("Devlog Time = #{self.devlog_days * 24} [h]\n")
|
427
|
+
s << ("Devlog Days = #{self.devlog_days} [days]\n")
|
428
|
+
s << ("Devlog Weeks = #{self.devlog_weeks} [weeks]\n")
|
429
|
+
s << ("Devlog Months = #{self.devlog_months} [months]\n")
|
430
|
+
if self.negative_sessions.any?
|
431
|
+
s << ("\n")
|
432
|
+
s << ("#{'Negative Sessions'.red} = #{self.negative_sessions_to_s}\n")
|
433
|
+
end
|
434
|
+
if self.zero_sessions.any?
|
435
|
+
s << ("\n")
|
436
|
+
s << ("#{'Zero Sessions'.blue} = #{self.zero_sessions_to_s}\n")
|
437
|
+
end
|
419
438
|
s << ("\n")
|
420
|
-
s << ("
|
439
|
+
s << ("Longest Session = #{self.longest_session.to_s}\n")
|
440
|
+
s << ("Shortest Session = #{self.shortest_session.to_s}\n")
|
441
|
+
s << ("Last Session = #{self.devlog_end.ago_in_words}, duration: #{self.last_session.session_time.round(3)} [h]")
|
421
442
|
end
|
422
|
-
s
|
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]")
|
443
|
+
s
|
426
444
|
end
|
427
445
|
|
428
446
|
private
|
data/test/devlog_test.rb
CHANGED
@@ -136,8 +136,8 @@ class DevlogTest < Test::Unit::TestCase
|
|
136
136
|
end
|
137
137
|
|
138
138
|
def test_start_coding_session
|
139
|
-
@empty_devlog = File.join(File.dirname(__FILE__), '..', '
|
140
|
-
File.
|
139
|
+
@empty_devlog = File.join(File.dirname(__FILE__), '..', 'tmp1_devlog.markdown')
|
140
|
+
File.open(@empty_devlog, 'w') {|f| f.puts('empty')}
|
141
141
|
start_coding_session(@empty_devlog)
|
142
142
|
assert(File.readlines(@empty_devlog).grep(/CodingSession::BEGIN/).size>0, "should insert CodingSession::BEGIN at top of file")
|
143
143
|
assert(is_session_open(@empty_devlog)==true, "should be true, session should be open after starting")
|
@@ -145,12 +145,35 @@ class DevlogTest < Test::Unit::TestCase
|
|
145
145
|
end
|
146
146
|
|
147
147
|
def test_stop_coding_session
|
148
|
-
@empty_devlog = File.join(File.dirname(__FILE__), '..', '
|
149
|
-
File.
|
148
|
+
@empty_devlog = File.join(File.dirname(__FILE__), '..', 'tmp2_devlog.markdown')
|
149
|
+
File.delete(@empty_devlog) if File.exist?(@empty_devlog)
|
150
|
+
File.open(@empty_devlog, 'w') {|f| f.puts('empty')}
|
150
151
|
stop_coding_session(@empty_devlog)
|
151
152
|
assert(File.readlines(@empty_devlog).grep(/CodingSession::END/).size>0, "should insert CodingSession::END at top of file")
|
152
153
|
assert(is_session_open(@empty_devlog)==false, "should be false, session should be closed after stopping")
|
153
|
-
File.delete(@empty_devlog)
|
154
|
+
File.delete(@empty_devlog) if File.exist?(@empty_devlog)
|
155
|
+
end
|
156
|
+
|
157
|
+
def test_save_info_after_stop_coding_session
|
158
|
+
@devlog_info = File.join(File.dirname(__FILE__), '..', 'info.markdown')
|
159
|
+
@empty_devlog = File.join(File.dirname(__FILE__), '..', 'tmp3_devlog.markdown')
|
160
|
+
#File.delete(@empty_devlog) if File.exist?(@empty_devlog)
|
161
|
+
File.new(@empty_devlog, 'w').puts('\n')
|
162
|
+
start_coding_session(@empty_devlog)
|
163
|
+
assert(File.readlines(@empty_devlog).grep(/CodingSession::BEGIN/).size>0, "should insert CodingSession::BEGIN at top of file")
|
164
|
+
assert(is_session_open(@empty_devlog)==true, "should be true, session should be open after starting")
|
165
|
+
prepend_string('+1h', @empty_devlog)
|
166
|
+
sleep(1)
|
167
|
+
stop_coding_session(@empty_devlog)
|
168
|
+
assert(File.readlines(@empty_devlog).grep(/CodingSession::END/).size>0, "should insert CodingSession::END at top of file")
|
169
|
+
assert(is_session_open(@empty_devlog)==false, "should be false, session should be closed after stopping")
|
170
|
+
assert(File.exists?(@devlog_info)==true, "should exist")
|
171
|
+
hasinfo = parse_devlog_now(@empty_devlog).has_info?
|
172
|
+
assert(hasinfo==true, 'should have info')
|
173
|
+
assert(File.readlines(@devlog_info).grep(/Session::Time/).size>0, "should have info about Session::Time")
|
174
|
+
assert(File.readlines(@devlog_info).grep(/Unpayed::Time/).size>0, "should have info about Session::Time")
|
175
|
+
assert(File.readlines(@devlog_info).grep(/Num of Sessions/).size==0, "should not include full info")
|
176
|
+
#File.delete(@empty_devlog) if File.exist?(@empty_devlog)
|
154
177
|
end
|
155
178
|
|
156
179
|
def test_is_session_open
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: devlog
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- mihael
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-02-
|
11
|
+
date: 2015-02-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -24,6 +24,20 @@ dependencies:
|
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '4.1'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: test-unit
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
27
41
|
- !ruby/object:Gem::Dependency
|
28
42
|
name: jeweler
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|