devlog 0.0.3 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c17dd2cce02aef60e7d7bc439502746a2fe7ae91
4
- data.tar.gz: 6c6dc8f2d7ecdb2d891680a39505f623dd712d9f
3
+ metadata.gz: 19e13234e260fdcf4a605fed718d18e38582b527
4
+ data.tar.gz: cb768c8e8fd307785e5fb5c500614296967a0abe
5
5
  SHA512:
6
- metadata.gz: 380f4bc48f1de2d19d58d5a9a34c46d0150567deb3f4859c0d84fa106daaa4354ff043664df17e20c8e8c9ba3563ee1461f7df578f23115eb665e000352fa2be
7
- data.tar.gz: 3aa058eefadc8f68692ad7d04f2091b52d9e6fcdecb453fa38fb1094d9964f1689054040f93819c66e29b9564eb6104059fa11c27cc49e51e29003380d92367c
6
+ metadata.gz: 84575cdfb6b41b2392823f592b4d5231d0560b11c170afe60cde836637c4f67f15135b803b705ab7a2ec8951dad29a8fc6c1f4abe5f6cd76778fb17f44b466a1
7
+ data.tar.gz: 7a71510e171eec5a56e0be41f1c806bb97eb24dc7a6376fe977a563334cbdac49b5b7bff042af16e45c291612bd22e4ea3140b0ab930c99850e1549bdb221998
data/.ruby-version CHANGED
@@ -1,3 +1,3 @@
1
- ruby-2.0.0
1
+ 2.2.0
2
2
 
3
3
 
data/Gemfile CHANGED
@@ -1,7 +1,6 @@
1
1
  source "https://rubygems.org"
2
+ gem "activesupport", "~> 4.1.8"
2
3
 
3
- #group :development, :test do
4
+ group :development, :test do
4
5
  gem "jeweler", "~> 2.0"
5
- #gem "rspec", '~> 1.3'
6
- gem "activesupport", "~> 3.2"
7
- #end
6
+ end
data/Gemfile.lock CHANGED
@@ -1,9 +1,12 @@
1
1
  GEM
2
2
  remote: https://rubygems.org/
3
3
  specs:
4
- activesupport (3.2.16)
5
- i18n (~> 0.6, >= 0.6.4)
6
- multi_json (~> 1.0)
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.6.9)
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 (~> 3.2)
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 always written on the top of the file.
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 most down, scroll down at the end of the file.
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
- syntax
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.3
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 just in a folder with a 'devlog.markdown' file:
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
- @in_file = ARGV[0]
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
- if @in_file
29
- puts "Parsing #{@in_file}...".red
30
- t = parse_devlog_now(@in_file)
31
- puts t.validation_string
32
- puts t.to_info_string
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
- puts "Parsing devlog.markdown in current folder...".green
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 "\nRealtime used : #{time}sec\n\n"
69
+ puts "\n\n"
70
+ #puts "\nRealtime: #{time}sec\n\n"
41
71
  end
42
-
72
+ #devlog run
43
73
  begin
44
-
45
- if ARGV.size > 0
46
- dodo
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.3"
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 = "2014-08-15"
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.require_paths = ["lib"]
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<jeweler>, ["~> 2.0"])
63
- s.add_runtime_dependency(%q<activesupport>, ["~> 3.2"])
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 like: #02.02.2014 17:05:50 CodingSession::END
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 "date"
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]}","%d.%m.%Y %H:%M:%S")
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} [hours]\n")
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.session_time.round(2)} [hours]\n")
377
- s << ("Shortest Session = #{self.shortest_session.session_time.round(2)} [hours]\n")
378
- s << ("Last Session = #{self.devlog_end.ago_in_words}, duration: #{self.last_session.session_time.round(2)} [hours]")
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}, #{session_time.round(2)}[hour]"
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 now' if secs > -1 && secs < 1
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
- 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_last7
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
- def test_hours_for_last7
117
- load_devlog_stat
118
- hours = @tajm_stat.hours_for_last(7, parse_datetime("#20.03.2014 11:00:00"))
119
- assert(hours==0, "should be 0, but is #{hours}")
120
- end
121
-
122
- def test_session_count
123
- load_devlog_stat
124
- assert(@tajm_stat.devlog_sessions.size==8, "should be 8, but is #{@tajm_stat.devlog_sessions.size}")
125
- end
126
-
127
- def test_negative_sessions
128
- load_devlog_negative
129
- assert(@tajm_negative.devlog_sessions.size==5, "should be 5, but is #{@tajm_negative.devlog_sessions.size}")
130
- shortest_session_time_rounded = @tajm_negative.shortest_session.session_time.round(2)
131
- assert(shortest_session_time_rounded==-2, "should be -2.0, but is #{shortest_session_time_rounded}")
132
- assert(@tajm_negative.negative_sessions.size==2, "should be 2, but is #{@tajm_negative.negative_sessions.size}")
133
- end
134
-
135
- def test_zero_sessions
136
- load_devlog_negative
137
- assert(@tajm_negative.devlog_sessions.size==5, "should be 5, but is #{@tajm_negative.devlog_sessions.size}")
138
- zero_session_time_rounded = @tajm_negative.zero_sessions.first.session_time.round(2)
139
- assert(zero_session_time_rounded==0.0, "should be 0.0, but is #{zero_session_time_rounded}")
140
- assert(@tajm_negative.zero_sessions.size==1, "should be 1, but is #{@tajm_negative.zero_sessions.size}")
141
- end
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
- @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")
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
- @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")
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
- @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")
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
- @tajm_stat = parse_devlog_now(File.join(File.dirname(__FILE__), '..', 'test_stats_devlog.markdown'))
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
- @tajm_single = parse_devlog_now(File.join(File.dirname(__FILE__), '..', 'test_single_devlog.markdown'))
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
- @tajm_negative = parse_devlog_now(File.join(File.dirname(__FILE__), '..', 'test_negative_devlog.markdown'))
45
+ @tajm_negative = parse_devlog_now(File.join(File.dirname(__FILE__), '..', 'test_negative_devlog.markdown'))
46
46
  end
@@ -0,0 +1,9 @@
1
+ this devlog is open... a session is taking place...
2
+
3
+ #02.02.2015 16:20:03 CodingSession::BEGIN
4
+
5
+ #02.02.2015 16:20:01 CodingSession::END
6
+
7
+ previous session
8
+
9
+ #02.02.2015 16:20:00 CodingSession::BEGIN
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.3
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: 2014-08-15 00:00:00.000000000 Z
11
+ date: 2015-02-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: jeweler
14
+ name: activesupport
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ~>
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '2.0'
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: '2.0'
26
+ version: 4.1.8
27
27
  - !ruby/object:Gem::Dependency
28
- name: activesupport
28
+ name: jeweler
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ~>
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '3.2'
34
- type: :runtime
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: '3.2'
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.0.14
101
+ rubygems_version: 2.4.5
101
102
  signing_key:
102
103
  specification_version: 4
103
104
  summary: takes devlog.markdown and gives info