devlog 0.3.3 → 0.4.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.
data/lib/devlog.rb CHANGED
@@ -1,26 +1,17 @@
1
- #require "time"
2
- #require "date"
3
1
  require "active_support/all"
4
- require_relative "./devlog_settings"
5
-
6
- # Colors for devlog
7
- class String
8
- def red; colorize(self, "\e[1m\e[31m"); end
9
- def green; colorize(self, "\e[1m\e[32m"); end
10
- def dark_green; colorize(self, "\e[32m"); end
11
- def yellow; colorize(self, "\e[1m\e[33m"); end
12
- def blue; colorize(self, "\e[1m\e[34m"); end
13
- def dark_blue; colorize(self, "\e[34m"); end
14
- def pur; colorize(self, "\e[1m\e[35m"); end
15
- def colorize(text, color_code) "#{color_code}#{text}\e[0m" end
16
- end
2
+ require_relative "devlog/date_time_ago_in_words"
3
+ require_relative "devlog/version"
4
+ require_relative "devlog/utils"
5
+ require_relative "devlog/settings"
6
+
7
+ # DEPRECATION WARNING: to_time will always preserve the timezone offset of the receiver in Rails 8.0. To opt in to the new behavior, set `ActiveSupport.to_time_preserves_timezone = true`
8
+ ActiveSupport.to_time_preserves_timezone = true
17
9
 
18
10
  # The devlog module with all the mumbo
19
11
  module Devlog
20
12
  # :stopdoc:
21
13
  LIBPATH = ::File.expand_path(::File.dirname(__FILE__)) + ::File::SEPARATOR
22
14
  PATH = ::File.dirname(LIBPATH) + ::File::SEPARATOR
23
- VERSION = File.open(File.join(File.dirname(__FILE__), %w[.. VERSION]), 'r').read
24
15
 
25
16
  # :startdoc:
26
17
  # Returns the version string for the library.
@@ -69,10 +60,21 @@ module Devlog
69
60
  end
70
61
 
71
62
  # Parsing datetime
63
+ def time_with_zone
64
+ if !Time.zone
65
+ tz = devlog_timezone_setting
66
+ puts "Setting timezone to: #{tz}"
67
+ Time.zone = tz
68
+ end
69
+ Time.zone
70
+ end
71
+
72
72
  DATETIME_FORMAT = '%d.%m.%Y %H:%M:%S'.freeze
73
73
  def parse_datetime(line)
74
74
  parts = line[1..-1].split
75
- DateTime.strptime("#{parts[0]} #{parts[1]}", DATETIME_FORMAT)
75
+ result = time_with_zone.strptime("#{parts[0]} #{parts[1]}", DATETIME_FORMAT)
76
+ # puts "parse_datetime: #{line} => #{result}\n"
77
+ result
76
78
  rescue StandardError
77
79
  abort "\nError\nCan not parse line with invalid date:\n\n#{line}".to_s.blue
78
80
  end
@@ -114,9 +116,13 @@ module Devlog
114
116
  timeBegin_line_number = line_number
115
117
 
116
118
  # cs_time += (timeEnd - timeBegin).to_f * 24 #hours *60 #minutes *60 #seconds
117
- delta = (timeEnd - timeBegin).to_f * 24 #hours *60 #minutes *60 #seconds
119
+ delta = (timeEnd - timeBegin) #.to_f * 24 #hours *60 #minutes *60 #seconds
118
120
  t.coding_session_time += delta
119
121
 
122
+ #puts "timeBegin: #{timeBegin.class} #{timeEnd.to_i - timeBegin.to_i}"
123
+ #puts "timeEnd: #{timeEnd}"
124
+ #puts "delta: #{delta}"
125
+
120
126
  # zezzion
121
127
  temp_zezzion.coding_session_time += delta
122
128
  temp_zezzion.zzbegin = timeBegin
@@ -141,7 +147,7 @@ module Devlog
141
147
  timeBegin = parse_datetime(line)
142
148
  timeBegin_line_number = line_number
143
149
 
144
- delta = (timeEnd - timeBegin).to_f * 24
150
+ delta = (timeEnd - timeBegin) #.to_f * 24
145
151
  t.com_session_time += delta
146
152
 
147
153
  # zezzion
@@ -163,7 +169,7 @@ module Devlog
163
169
  puts "error adding temp_zezzion com_session_time at line: #{line}"
164
170
  end
165
171
  elsif line =~ /\A\+[0-9]+[m]/
166
- delta = (line.to_f / 60)
172
+ delta = (line.to_f * 60)
167
173
  t.com_session_time += delta
168
174
 
169
175
  # zezzion
@@ -173,7 +179,7 @@ module Devlog
173
179
  puts "error adding temp_zezzion com_session_time at line: #{line}"
174
180
  end
175
181
  elsif line =~ /\A\-[0-9]+[h]/
176
- delta = (line.to_f)
182
+ delta = (line.to_f * 60 * 60)
177
183
  t.payed_time += delta
178
184
 
179
185
  # zezzion
@@ -192,7 +198,7 @@ module Devlog
192
198
 
193
199
  # Helper for the time entries
194
200
  def devlog_session_entry(session_type = 'Coding', begin_end = 'BEGIN')
195
- "\n##{Time.now.strftime(DATETIME_FORMAT)} #{session_type}Session::#{begin_end}\n"
201
+ "\n##{time_with_zone.now.strftime(DATETIME_FORMAT)} #{session_type}Session::#{begin_end}\n"
196
202
  end
197
203
 
198
204
  # Prepend a string to a text file
@@ -296,7 +302,7 @@ module Devlog
296
302
 
297
303
  def weekly_pdf(tajm, weeks_from_now = 0, devlog_file = 'devlog.markdown')
298
304
  require 'erb'
299
- devlog_file = settings.devlog_file || devlog_file
305
+ devlog_file = settings.devlog_file_setting || devlog_file
300
306
  template = settings.has?(:weekly_timesheet_template) ? settings.weekly_timesheet_template : File.join(Devlog.path, 'templates', 'weekly_timesheet.erb.html')
301
307
  convert_command = settings.has?(:convert_to_pdf_command) ? settings.convert_to_pdf_command : 'wkhtmltopdf'
302
308
  puts "Using weekly template: #{template} #{settings.has?(:weekly_timesheet_template)}".green
@@ -321,7 +327,7 @@ module Devlog
321
327
 
322
328
  module SevendaysTotal
323
329
  def total_hours
324
- all.inject(0) { |time, zezzion| time + zezzion.session_time }.round(2)
330
+ ((all.inject(0) { |time, zezzion| time + zezzion.session_time }) / 60 / 60).round(2)
325
331
  end
326
332
 
327
333
  def total_hours_string
@@ -329,7 +335,7 @@ module Devlog
329
335
 
330
336
  return "" if total <= 0
331
337
 
332
- "#{total}h"
338
+ "#{total} [h]"
333
339
  end
334
340
  end
335
341
 
@@ -400,13 +406,15 @@ module Devlog
400
406
  all.first.zzbegin.strftime("%Y/%m/%d")
401
407
  end
402
408
 
409
+ def ends_at
410
+ all.last.zzend.strftime("%Y/%m/%d")
411
+ end
412
+
403
413
  def date
404
414
  DateTime.current.strftime("%Y/%m/%d")
405
415
  end
406
416
 
407
417
  DAYS.each do |day|
408
- attr_accessor day
409
-
410
418
  define_method(day) do
411
419
  value = Day.new(day, all.select { |zezzion| zezzion.zzbegin.send("#{day.to_s}?") } )
412
420
  instance_variable_set("@__#{day.to_s}", value) unless instance_variable_get("@__#{day.to_s}")&.any?
@@ -452,14 +460,13 @@ module Devlog
452
460
  @zezzions.first.zzend
453
461
  end
454
462
 
455
- # how much time between first session begin and last session end
456
- # in seconds
457
- # def devlog_time
458
- # (self.devlog_end.to_time - self.devlog_begin.to_time)/60.0/60.0
459
- # end
460
-
463
+ # total session time
461
464
  def session_time
462
- @zezzions.inject(0) { |time, zezzion| time + zezzion.session_time }.round(2)
465
+ @zezzions.inject(0) { |time, zezzion| time + zezzion.session_time }
466
+ end
467
+
468
+ def session_time_h
469
+ session_time.rounded_hours
463
470
  end
464
471
 
465
472
  # how many days devlog spans
@@ -477,35 +484,55 @@ module Devlog
477
484
  count_time( :months => 1)
478
485
  end
479
486
 
480
- # hours per day
487
+ # seconds per day
481
488
  def per_day
482
- (self.session_time/self.devlog_days).round(2)
489
+ self.session_time/self.devlog_days
490
+ end
491
+
492
+ def per_day_h
493
+ per_day.rounded_hours
483
494
  end
484
495
 
485
496
  def per_week
486
- (self.session_time/self.devlog_weeks).round(2)
497
+ self.session_time/self.devlog_weeks
498
+ end
499
+
500
+ def per_week_h
501
+ per_week.rounded_hours
487
502
  end
488
503
 
489
504
  def per_month
490
- (self.session_time/self.devlog_months).round(2)
505
+ self.session_time/self.devlog_months
506
+ end
507
+
508
+ def per_month_h
509
+ per_month.rounded_hours
491
510
  end
492
511
 
493
512
  # total charge time in hours, coding plus communication sessions
494
513
  def charge_time
495
- (coding_session_time + com_session_time).round(2)
514
+ coding_session_time + com_session_time
515
+ end
516
+
517
+ def charge_time_h
518
+ charge_time.rounded_hours
496
519
  end
497
520
 
498
521
  # total charge time in hours, coding plus communication sessions - payed hours
499
522
  def unpayed_time
500
- (coding_session_time + com_session_time + payed_time).round(2)
523
+ coding_session_time + com_session_time + payed_time
524
+ end
525
+
526
+ def unpayed_time_h
527
+ unpayed_time.rounded_hours
501
528
  end
502
529
 
503
530
  # return hours worked for the last X days, from current_time
504
531
  def hours_for_last(days, current_time = DateTime.now)
505
532
  endTime = current_time.to_time - days.days
506
533
  selected_zezzions = @zezzions.select { |z| z.zzbegin.to_time < current_time && z.zzend >= endTime }
507
- #puts("Selected sessons from #{current_time} to #{endTime}: #{selected_zezzions.size}")
508
- selected_zezzions.inject(0) { |time, z| time + z.session_time }.round(2)
534
+
535
+ selected_zezzions.inject(0) { |time, z| time + z.session_time }.to_f.rounded_hours
509
536
  end
510
537
 
511
538
  # from time to time select some zezzions
@@ -563,11 +590,27 @@ module Devlog
563
590
  @zezzions.last # devlog_end
564
591
  end
565
592
 
593
+ def last_payed_session
594
+ @zezzions.select{|zezzion| zezzion.payed_time<0}.first
595
+ end
596
+
566
597
  # return all sessions
567
598
  def devlog_sessions
568
599
  @zezzions
569
600
  end
570
601
 
602
+ def coding_session_time_h
603
+ coding_session_time.rounded_hours
604
+ end
605
+
606
+ def com_session_time_h
607
+ com_session_time.rounded_hours
608
+ end
609
+
610
+ def payed_time_h
611
+ payed_time.rounded_hours
612
+ end
613
+
571
614
  def validation_string
572
615
  vs = ''
573
616
  vs << (@zezzions.any? ? '' : "No sessions recorded, add some first...\n".red)
@@ -576,17 +619,17 @@ module Devlog
576
619
 
577
620
  def to_info_string(short=false)
578
621
  s = ''
579
- s << "\nSession::Time: = #{self.session_time} [h]\n"
580
- s << ("\nCodingSession::Time = %.1f [h]\n" % self.coding_session_time)
581
- s << ("\nComSession::Time = %.1f [h]\n" % self.com_session_time)
582
- s << ("\nCharge::Time = #{self.charge_time} [h]\n")
583
- s << ("\nUnpayed::Time = #{self.unpayed_time.to_s} [h]\n")
622
+ s << "\nSession::Time: = #{session_time_h} [h]\n"
623
+ s << ("\nCodingSession::Time = %.1f [h]\n" % coding_session_time_h)
624
+ s << ("\nComSession::Time = %.1f [h]\n" % com_session_time_h)
625
+ s << ("\nCharge::Time = #{charge_time_h} [h]\n")
626
+ s << ("\nUnpayed::Time = #{unpayed_time_h} [h]\n")
584
627
  s << ("\n")
585
628
  unless short
586
629
  s << ("Num of Sessions = #{self.devlog_sessions.size}\n")
587
- s << ("Hours per Day = #{self.per_day} [h]\n")
588
- s << ("Hours per Week = #{self.per_week} [h]\n")
589
- s << ("Hours per Month = #{self.per_month} [h]\n")
630
+ s << ("Hours per Day = #{self.per_day_h} [h]\n")
631
+ s << ("Hours per Week = #{self.per_week_h} [h]\n")
632
+ s << ("Hours per Month = #{self.per_month_h} [h]\n")
590
633
  s << ("Hours last 7 days = #{self.hours_for_last(7)} [h]\n")
591
634
  s << ("Hours last 14 days = #{self.hours_for_last(14)} [h]\n")
592
635
  s << ("Hours last 28 days = #{self.hours_for_last(28)} [h]\n")
@@ -605,8 +648,8 @@ module Devlog
605
648
  end
606
649
  s << ("\n")
607
650
  s << ("Longest Session = #{self.longest_session.to_s}\n")
608
- s << ("Shortest Session = #{self.shortest_session.to_s}\n")
609
- s << ("Last Session = #{self.devlog_end.ago_in_words}, duration: #{self.last_session.session_time.round(3)} [h]")
651
+ s << ("Shortest Session = #{self.shortest_session.to_s_in_seconds}\n")
652
+ s << ("Last Session = #{self.devlog_end.ago_in_words}, duration: #{self.last_session.in_hours} [h]")
610
653
  s << ("\n")
611
654
  s << ("Weekly Sessions\n")
612
655
  s << ("\n")
@@ -620,13 +663,23 @@ module Devlog
620
663
  sevendays_total += current_day_total_hours
621
664
  s << ("#{dayname.upcase}\n")
622
665
  s << ("begins at: #{current_day.begins_at}\n")
623
- s << ("breaks: #{current_day.breaks_at}\n")
624
- s << ("end_at: #{current_day.ends_at}\n")
625
- s << ("sum: #{current_day_total_hours}\n")
666
+ s << ("breaks at: #{current_day.breaks_at}\n")
667
+ s << ("ends at: #{current_day.ends_at}\n")
668
+ s << ("sum: #{current_day_total_hours} [h]\n")
626
669
  s << ("\n")
627
670
  end
628
671
  end
629
- s << ("Weekly sessions total: #{sevendays_total}\n")
672
+
673
+ 0.upto(5) do |week|
674
+ weekly_zezzions = zezzions_for_week(week, DateTime.current)
675
+ if weekly_zezzions.any?
676
+ sevendays = Sevendays.new(weekly_zezzions)
677
+ s << ("#{sevendays.begins_at}->#{sevendays.ends_at}: #{sevendays.total_hours_string}\n")
678
+ else
679
+ s << "No weekly sessions for week #{week}.\n"
680
+ end
681
+ end
682
+ s << "Last payed: #{last_payed_session.zzend.to_s}" if last_payed_session
630
683
  end
631
684
  s
632
685
  end
@@ -711,7 +764,15 @@ module Devlog
711
764
  end
712
765
 
713
766
  def to_s
714
- "#{session_time.round(3)} [h] #{type}, begin on line #{@zzbegin_line_number} at #{@zzbegin}, ends on line #{@zzend_line_number} at #{@zzend}"
767
+ "#{(session_time / 60 / 60).round(3)} [h] #{type}, begin on line #{@zzbegin_line_number} at #{@zzbegin}, ends on line #{@zzend_line_number} at #{@zzend}"
768
+ end
769
+
770
+ def to_s_in_seconds
771
+ "#{session_time.round(3)} [s] #{type}, begin on line #{@zzbegin_line_number} at #{@zzbegin}, ends on line #{@zzend_line_number} at #{@zzend}"
772
+ end
773
+
774
+ def in_hours
775
+ (session_time / 60 / 60).round(3)
715
776
  end
716
777
  end
717
778
 
@@ -725,36 +786,3 @@ module Devlog
725
786
  end
726
787
  end
727
788
  end
728
-
729
- module DateTimeAgoInWords
730
- def ago_in_words
731
- return 'a very very long time ago' if self.year < 1800
732
- secs = Time.now - self
733
- return 'just over' if secs > -1 && secs < 1
734
- return 'now' if secs <= -1
735
- pair = ago_in_words_pair(secs)
736
- ary = ago_in_words_singularize(pair)
737
- ary.size == 0 ? '' : ary.join(' and ') << ' ago'
738
- end
739
- private
740
- def ago_in_words_pair(secs)
741
- [[60, :seconds], [60, :minutes], [24, :hours], [100_000, :days]].map{ |count, name|
742
- if secs > 0
743
- secs, n = secs.divmod(count)
744
- "#{n.to_i} #{name}"
745
- end
746
- }.compact.reverse[0..1]
747
- end
748
- def ago_in_words_singularize(pair)
749
- if pair.size == 1
750
- pair.map! {|part| part[0, 2].to_i == 1 ? part.chomp('s') : part }
751
- else
752
- pair.map! {|part| part[0, 2].to_i == 1 ? part.chomp('s') : part[0, 2].to_i == 0 ? nil : part }
753
- end
754
- pair.compact
755
- end
756
- end
757
-
758
- class DateTime
759
- include DateTimeAgoInWords
760
- end
@@ -26,6 +26,8 @@ class DevlogSettingsTest < Test::Unit::TestCase
26
26
  def test_loading_from_yaml
27
27
  assert(settings.devlog_file == 'development_log.markdown',
28
28
  'example setting should be loaded')
29
+ assert(settings.timezone == 'Amsterdam',
30
+ 'example setting should be loaded')
29
31
  end
30
32
 
31
33
  def test_devlog_file_setting_returns_default_when_overriden_devlog_file_does_not_exist
data/test/devlog_test.rb CHANGED
@@ -1,6 +1,17 @@
1
1
  require 'test_helper'
2
2
 
3
3
  class DevlogTest < Test::Unit::TestCase
4
+ def test_version
5
+ assert ::Devlog.const_defined?(:VERSION)
6
+ end
7
+
8
+ def test_devlog_session_entry
9
+ dse = devlog_session_entry
10
+ tajmstring = "\n##{Time.zone.now.strftime(DATETIME_FORMAT)} CodingSession::BEGIN\n"
11
+
12
+ assert_equal tajmstring, dse
13
+ end
14
+
4
15
  def test_empty_devlog
5
16
  @tajm = parse_devlog_now(File.join(File.dirname(__FILE__), TEST_FILES_PATH, 'empty_devlog.markdown'))
6
17
  puts "#{@tajm.coding_session_time} #{@tajm.com_session_time} #{@tajm.payed_time}"
@@ -13,25 +24,34 @@ class DevlogTest < Test::Unit::TestCase
13
24
  load_devlog
14
25
  load_devlog_now
15
26
 
16
- assert(@tajm.coding_session_time==@tajm_now.coding_session_time, "not equal coding times")
27
+ assert(@tajm.coding_session_time==@tajm_now.coding_session_time, "not equal coding times #{@tajm.coding_session_time} #{@tajm_now.coding_session_time}")
17
28
  assert(@tajm.com_session_time==@tajm_now.com_session_time, "selftalk not repeated")
18
29
  assert(@tajm.payed_time==@tajm_now.payed_time, "selfpay not equal")
19
30
 
20
31
  assert(@tajm_now.zezzions.size>0, "where are the seeds of zezzions?")
21
- assert(@tajm_now.unpayed_time<0, "let's make sure opensource is free to develop it self")
32
+ assert(@tajm_now.unpayed_time<0, "let's make sure opensource is free to develop it self #{@tajm_now.unpayed_time} should be less than zero")
22
33
  assert(@tajm_now.zezzions.size>4, "at least 4 recorded sessions must there be?")
23
- assert(@tajm_now.devlog_begin.to_s=="2014-01-19T10:16:08+00:00", "a historycal moment in the akashic records was deleted, what?")
24
- assert(@tajm_now.devlog_begin.to_time.to_i == 1390126568, "or just a random number in a random dream...")
34
+ assert(@tajm_now.devlog_begin.to_s=="2014-01-19 10:16:08 +0100", "a historycal moment in the akashic records was deleted, what?")
35
+ assert(@tajm_now.devlog_begin.to_time.to_i == 1390122968, "or just a random number in a random dream...")
25
36
  end
26
37
 
27
38
  def test_devlog_test
28
39
  load_devlog_test
29
40
 
30
- assert(@tajm_test.coding_session_time== 4.5, "wrong total coding session time")
31
- assert(@tajm_test.com_session_time==1.0 , "wrong com session time")
32
- assert(@tajm_test.payed_time==-1, "wrong payed time")
33
- assert(@tajm_test.unpayed_time==4.5, "wrong unpayed wrong")
34
- assert(@tajm_test.charge_time==5.5, "wrong charge wrong")
41
+ assert_equal 16200.0, @tajm_test.coding_session_time, "wrong coding session time in seconds"
42
+ assert_equal 4.5, @tajm_test.coding_session_time_h , "wrong coding session time in hours"
43
+
44
+ assert_equal 3600.0, @tajm_test.com_session_time, "wrong com session time in seconds"
45
+ assert_equal 1.0, @tajm_test.com_session_time_h, "wrong com session time in hours"
46
+
47
+ assert_equal (-3600.0), @tajm_test.payed_time, "wrong payed time in seconds"
48
+ assert_equal (-1.0), @tajm_test.payed_time_h, "wrong payed time in hours"
49
+
50
+ assert_equal 16200.0, @tajm_test.unpayed_time, "wrong unpayed time in seconds"
51
+ assert_equal 4.5, @tajm_test.unpayed_time_h, "wrong unpayed time in hours"
52
+
53
+ assert_equal 19800.0, @tajm_test.charge_time, "wrong charge time in seconds"
54
+ assert_equal 5.5, @tajm_test.charge_time_h, "wrong charge time in hours"
35
55
  end
36
56
 
37
57
  def test_devlog_invalid_date
@@ -57,14 +77,17 @@ class DevlogTest < Test::Unit::TestCase
57
77
 
58
78
  def test_how_much_per_day
59
79
  load_devlog_stat
80
+
60
81
  assert(@tajm_stat.per_day>0, "the middle day value, not the mean")
61
- assert(@tajm_stat.per_day==1.0, "per day should be 1.0 but is #{@tajm_stat.per_day}")
82
+ assert_equal 3600.0, @tajm_stat.per_day, "per day should be 3600.0 but is #{@tajm_stat.per_day}"
83
+ assert_equal 1.0, @tajm_stat.per_day_h, "per day in hours should be 1.0 but is #{@tajm_stat.per_day_h}"
62
84
  end
63
85
 
64
86
  def test_how_much_per_week
65
87
  load_devlog_stat
66
88
  assert(@tajm_stat.per_week>0, "the middle week value, not the mean")
67
- assert(@tajm_stat.per_week==7.02, "per week should be 7.02 but is #{@tajm_stat.per_week}")
89
+ assert_equal 7.02, @tajm_stat.per_week_h, "per week in hours should be 7.02 but is #{@tajm_stat.per_week_h}"
90
+ assert(@tajm_stat.per_week>=25263.15, "per week in seconds should be 25263.16 but is #{@tajm_stat.per_week}")
68
91
  end
69
92
 
70
93
  def test_devlog_weeks
@@ -74,7 +97,9 @@ class DevlogTest < Test::Unit::TestCase
74
97
 
75
98
  def test_how_much_per_month
76
99
  load_devlog_stat
77
- assert(@tajm_stat.per_week>0, "the middle month value, not the mean")
100
+ assert(@tajm_stat.per_month>0, "the middle month value, not the mean")
101
+ assert_equal 8.0, @tajm_stat.per_month_h, "per month in hours should be 8.0 but is #{@tajm_stat.per_month_h}"
102
+ assert_equal 28800.0, @tajm_stat.per_month, "per month in seconds should be 28800.0 but is #{@tajm_stat.per_month}"
78
103
  end
79
104
 
80
105
  def test_devlog_days_0
@@ -84,22 +109,24 @@ class DevlogTest < Test::Unit::TestCase
84
109
 
85
110
  def test_devlog_days_1
86
111
  load_devlog_stat
87
- assert(@tajm_stat.devlog_days==8, "should be 8 devlog days")
112
+ assert_equal 8, @tajm_stat.devlog_days, "should be 8 devlog days"
88
113
  end
89
114
 
90
115
  def test_devlog_days_2
91
116
  load_devlog_single
92
- assert(@tajm_single.devlog_days==1, "should be 1 devlog day")
117
+ assert_equal 1, @tajm_single.devlog_days, "should be 1 devlog day"
93
118
  end
94
119
 
95
120
  def test_devlog_begin
96
121
  load_devlog_stat
97
- assert(@tajm_stat.devlog_begin.to_s=="2014-03-01T10:00:00+00:00", "devlog begin is wrong")
122
+
123
+ assert_equal "2014-03-01 10:00:00 +0100", @tajm_stat.devlog_begin.to_s, "devlog begin is wrong"
98
124
  end
99
125
 
100
126
  def test_devlog_end
101
127
  load_devlog_stat
102
- assert(@tajm_stat.devlog_end.to_s=="2014-03-08T11:00:00+00:00", "devlog end is wrong")
128
+
129
+ assert_equal "2014-03-08 11:00:00 +0100", @tajm_stat.devlog_end.to_s, "devlog end is wrong"
103
130
  end
104
131
 
105
132
  def test_hours_for_last0
@@ -107,11 +134,13 @@ class DevlogTest < Test::Unit::TestCase
107
134
  hours = @tajm_stat.hours_for_last(0, parse_datetime("#09.03.2014 11:00:00"))
108
135
  assert(hours==0, "should be 0, but is #{hours}")
109
136
  end
137
+
110
138
  def test_hours_for_last7
111
139
  load_devlog_stat
112
140
  hours = @tajm_stat.hours_for_last(7, parse_datetime("#09.03.2014 11:00:00"))
113
141
  assert(hours==7, "should be 7, but is #{hours}")
114
142
  end
143
+
115
144
  def test_hours_for_last1
116
145
  load_devlog_stat
117
146
  hours = @tajm_stat.hours_for_last(1, parse_datetime("#09.03.2014 11:00:00"))
@@ -125,9 +154,12 @@ class DevlogTest < Test::Unit::TestCase
125
154
 
126
155
  def test_negative_sessions
127
156
  load_devlog_negative
157
+
128
158
  assert(@tajm_negative.devlog_sessions.size==5, "should be 5, but is #{@tajm_negative.devlog_sessions.size}")
159
+
129
160
  shortest_session_time_rounded = @tajm_negative.shortest_session.session_time.round(2)
130
- assert(shortest_session_time_rounded==-2, "should be -2.0, but is #{shortest_session_time_rounded}")
161
+
162
+ assert_equal (-7200.0), shortest_session_time_rounded, "should be -7200.0, but is #{shortest_session_time_rounded}"
131
163
  assert(@tajm_negative.negative_sessions.size==2, "should be 2, but is #{@tajm_negative.negative_sessions.size}")
132
164
  end
133
165
 
@@ -171,7 +203,7 @@ class DevlogTest < Test::Unit::TestCase
171
203
  stop_coding_session(@empty_devlog)
172
204
  assert(File.readlines(@empty_devlog).grep(/CodingSession::END/).size>0, "should insert CodingSession::END at top of file")
173
205
  assert(is_session_open(@empty_devlog)==false, "should be false, session should be closed after stopping")
174
- assert(File.exists?(@devlog_info)==true, "should exist")
206
+ assert(File.exist?(@devlog_info)==true, "should exist")
175
207
  hasinfo = parse_devlog_now(@empty_devlog).has_info?
176
208
  assert(hasinfo==true, 'should have info')
177
209
  assert(File.readlines(@devlog_info).grep(/Session::Time/).size>0, "should have info about Session::Time")
@@ -1 +1,2 @@
1
- devlog_file: "test/test_devlogs/test_devlog.markdown"
1
+ devlog_file: "test/test_devlogs/test_devlog.markdown"
2
+ timezone: 'Ljubljana'
@@ -4,7 +4,7 @@ let's see how it goes today.
4
4
 
5
5
  #01.06.2017 09:38:35 CodingSession::BEGIN
6
6
 
7
- #31.06.2017 18:20:50 CodingSession::END
7
+ #32.06.2017 18:20:50 CodingSession::END
8
8
 
9
9
  nevermind, just do it...
10
10
 
@@ -1,5 +1,5 @@
1
1
  # Override the default location of the_project_folder_path/../info/devlog.markdown
2
2
  devlog_file: development_log.markdown
3
-
3
+ timezone: Amsterdam
4
4
  nested:
5
5
  setting: xyz
data/test/test_helper.rb CHANGED
@@ -1,57 +1,55 @@
1
- require 'rubygems'
2
- require 'test/unit'
3
-
4
1
  $LOAD_PATH.unshift(File.dirname(__FILE__))
5
2
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
6
3
  require 'devlog'
7
-
8
- class Test::Unit::TestCase
9
- include Devlog
10
- end
4
+ require 'test/unit'
11
5
 
12
6
  TEST_FILES_PATH = 'test_devlogs'.freeze
13
7
  TEMP_PATH = '../tmp'.freeze
14
8
 
15
- def parse_test_devlog(filename)
16
- parse_devlog_now(File.join(File.dirname(__FILE__), TEST_FILES_PATH, filename))
17
- end
18
-
19
- def load_devlog
20
- @tajm = parse_devlog_now(File.join(File.dirname(__FILE__), '..', 'devlog.markdown'))
21
- puts "#{@tajm.coding_session_time} #{@tajm.com_session_time} #{@tajm.payed_time}"
22
- assert(@tajm.coding_session_time>0, "truth")
23
- assert(@tajm.com_session_time>0, "love")
24
- assert(@tajm.payed_time<0, "simplicity")
25
- end
26
-
27
- def load_devlog_now
28
- @tajm_now = parse_devlog_now(File.join(File.dirname(__FILE__), '..', 'devlog.markdown'))
29
- puts "#{@tajm_now.coding_session_time} #{@tajm_now.com_session_time} #{@tajm_now.payed_time}"
30
- assert(@tajm_now.coding_session_time>0, "truth")
31
- assert(@tajm_now.com_session_time>0, "love")
32
- assert(@tajm_now.payed_time<0, "simplicity")
33
- end
34
-
35
- def load_devlog_test
36
- @tajm_test = parse_test_devlog('test_devlog.markdown')
37
- puts "#{@tajm_test.coding_session_time} #{@tajm_test.com_session_time} #{@tajm_test.payed_time}"
38
- assert(@tajm_test.coding_session_time>0, "truth")
39
- assert(@tajm_test.com_session_time>0, "love")
40
- assert(@tajm_test.payed_time<0, "simplicity")
41
- end
42
-
43
- def load_devlog_stat
44
- @tajm_stat = parse_test_devlog('test_stats_devlog.markdown')
45
- end
46
-
47
- def load_devlog_single
48
- @tajm_single = parse_test_devlog('test_single_devlog.markdown')
49
- end
50
-
51
- def load_devlog_negative
52
- @tajm_negative = parse_test_devlog('test_negative_devlog.markdown')
53
- end
9
+ class Test::Unit::TestCase
10
+ include Devlog
54
11
 
55
- def load_devlog_weekly
56
- @tajm_weekly = parse_test_devlog('test_weekly_devlog.markdown')
12
+ def parse_test_devlog(filename)
13
+ parse_devlog_now(File.join(File.dirname(__FILE__), TEST_FILES_PATH, filename))
14
+ end
15
+
16
+ def load_devlog
17
+ @tajm = parse_devlog_now(File.join(File.dirname(__FILE__), '..', 'devlog.markdown'))
18
+ puts "#{@tajm.coding_session_time} #{@tajm.com_session_time} #{@tajm.payed_time}"
19
+ assert(@tajm.coding_session_time>0, "truth")
20
+ assert(@tajm.com_session_time>0, "love")
21
+ assert(@tajm.payed_time<0, "simplicity")
22
+ end
23
+
24
+ def load_devlog_now
25
+ @tajm_now = parse_devlog_now(File.join(File.dirname(__FILE__), '..', 'devlog.markdown'))
26
+ puts "#{@tajm_now.coding_session_time} #{@tajm_now.com_session_time} #{@tajm_now.payed_time}"
27
+ assert(@tajm_now.coding_session_time>0, "truth")
28
+ assert(@tajm_now.com_session_time>0, "love")
29
+ assert(@tajm_now.payed_time<0, "simplicity")
30
+ end
31
+
32
+ def load_devlog_test
33
+ @tajm_test = parse_test_devlog('test_devlog.markdown')
34
+ puts "#{@tajm_test.coding_session_time} #{@tajm_test.com_session_time} #{@tajm_test.payed_time}"
35
+ assert(@tajm_test.coding_session_time>0, "truth")
36
+ assert(@tajm_test.com_session_time>0, "love")
37
+ assert(@tajm_test.payed_time<0, "simplicity")
38
+ end
39
+
40
+ def load_devlog_stat
41
+ @tajm_stat = parse_test_devlog('test_stats_devlog.markdown')
42
+ end
43
+
44
+ def load_devlog_single
45
+ @tajm_single = parse_test_devlog('test_single_devlog.markdown')
46
+ end
47
+
48
+ def load_devlog_negative
49
+ @tajm_negative = parse_test_devlog('test_negative_devlog.markdown')
50
+ end
51
+
52
+ def load_devlog_weekly
53
+ @tajm_weekly = parse_test_devlog('test_weekly_devlog.markdown')
54
+ end
57
55
  end