Class: Devlog::Parsing

Inherits:
Object
  • Object
show all
Defined in:
lib/devlog.rb

Overview

The parsing object

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(viewing_time_current_date = DateTime.now) ⇒ Parsing

Returns a new instance of Parsing.



304
305
306
307
308
309
310
311
312
313
314
# File 'lib/devlog.rb', line 304

def initialize(viewing_time_current_date = DateTime.now)
  @viewing_time_current_date = viewing_time_current_date
  @zezzions = []

  # backward compatible object with Tajm, from devlog 0.0.0
  @coding_session_time = 0.0
  @com_session_time = 0.0
  @payed_time = 0.0

  @devlog_file = ''
end

Instance Attribute Details

#coding_session_timeObject

this is the total time, but each session has these same params



300
301
302
# File 'lib/devlog.rb', line 300

def coding_session_time
  @coding_session_time
end

#com_session_timeObject

this is the total time, but each session has these same params



300
301
302
# File 'lib/devlog.rb', line 300

def com_session_time
  @com_session_time
end

#devlog_fileObject

Returns the value of attribute devlog_file.



302
303
304
# File 'lib/devlog.rb', line 302

def devlog_file
  @devlog_file
end

#payed_timeObject

this is the total time, but each session has these same params



300
301
302
# File 'lib/devlog.rb', line 300

def payed_time
  @payed_time
end

#zezzionsObject

Returns the value of attribute zezzions.



302
303
304
# File 'lib/devlog.rb', line 302

def zezzions
  @zezzions
end

Instance Method Details

#add_zezzion(zezzion) ⇒ Object



320
321
322
# File 'lib/devlog.rb', line 320

def add_zezzion(zezzion)
  @zezzions << zezzion
end

#charge_timeObject

total charge time in hours, coding plus communication sessions



373
374
375
# File 'lib/devlog.rb', line 373

def charge_time
  (coding_session_time + com_session_time).round(2)
end

#devlog_beginObject

global devlog start, first entry



325
326
327
# File 'lib/devlog.rb', line 325

def devlog_begin
  @zezzions.last.zzbegin
end

#devlog_daysObject

how many days devlog spans



345
346
347
348
# File 'lib/devlog.rb', line 345

def devlog_days
  count_time( :days => 1)
  # (self.devlog_end - self.devlog_begin).to_i + 1 #counting days like this, would not account for daylight saving changes
end

#devlog_endObject

global devlog end, last entry



330
331
332
# File 'lib/devlog.rb', line 330

def devlog_end
  @zezzions.first.zzend
end

#devlog_monthsObject



355
356
357
# File 'lib/devlog.rb', line 355

def devlog_months
  count_time( :months => 1)
end

#devlog_sessionsObject

return all sessions



423
424
425
# File 'lib/devlog.rb', line 423

def devlog_sessions
  @zezzions
end

#devlog_weeksObject

how many weeks devlog spans



351
352
353
# File 'lib/devlog.rb', line 351

def devlog_weeks
  (devlog_days/7.0).round(2)
end

#first_sessionObject



418
419
420
# File 'lib/devlog.rb', line 418

def first_session
  @zezzions.last # devlog_end
end

#has_info?Boolean

Returns:

  • (Boolean)


316
317
318
# File 'lib/devlog.rb', line 316

def has_info?
  @zezzions.any?
end

#hours_for_last(days, beginTime = DateTime.now) ⇒ Object

return hours worked for the last X days, from beginTime



383
384
385
386
387
388
# File 'lib/devlog.rb', line 383

def hours_for_last(days, beginTime = DateTime.now)
  endTime = beginTime.to_time - days.days
  selected_zezzions = @zezzions.select { |z| z.zzbegin.to_time < beginTime && z.zzend >= endTime }
  # puts("Selected sessons from #{beginTime} to #{endTime}: #{selected_zezzions.size}")
  selected_zezzions.inject(0) { |time, z| time + z.session_time }.round(2)
end

#last_sessionObject



414
415
416
# File 'lib/devlog.rb', line 414

def last_session
  @zezzions.first # devlog_begin
end

#longest_sessionObject



390
391
392
# File 'lib/devlog.rb', line 390

def longest_session
  @zezzions.max_by(&:session_time)
end

#negative_sessionsObject



398
399
400
# File 'lib/devlog.rb', line 398

def negative_sessions
  @zezzions.select{|zezzion| zezzion.session_time<0}
end

#negative_sessions_to_sObject



410
411
412
# File 'lib/devlog.rb', line 410

def negative_sessions_to_s
  sessions_to_s(negative_sessions)
end

#per_dayObject

hours per day



360
361
362
# File 'lib/devlog.rb', line 360

def per_day
  (self.session_time/self.devlog_days).round(2)
end

#per_monthObject



368
369
370
# File 'lib/devlog.rb', line 368

def per_month
  (self.session_time/self.devlog_months).round(2)
end

#per_weekObject



364
365
366
# File 'lib/devlog.rb', line 364

def per_week
  (self.session_time/self.devlog_weeks).round(2)
end

#session_timeObject

how much time between first session begin and last session end in seconds def devlog_time

(self.devlog_end.to_time - self.devlog_begin.to_time)/60.0/60.0

end



340
341
342
# File 'lib/devlog.rb', line 340

def session_time
  @zezzions.inject(0) { |time, zezzion| time + zezzion.session_time }.round(2)
end

#shortest_sessionObject



394
395
396
# File 'lib/devlog.rb', line 394

def shortest_session
  @zezzions.min_by(&:session_time)
end

#to_info_string(short = false) ⇒ Object



433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
# File 'lib/devlog.rb', line 433

def to_info_string(short=false)
  s = ''
  s <<  "\nSession::Time:      = #{self.session_time} [h]\n"
  s << ("\nCodingSession::Time = %.1f [h]\n" % self.coding_session_time)
  s << ("\nComSession::Time    = %.1f [h]\n" % self.com_session_time)
  s << ("\nCharge::Time        = #{self.charge_time} [h]\n")
  s << ("\nUnpayed::Time       = #{self.unpayed_time.to_s} [h]\n")
  s << ("\n")
  unless short
    s << ("Num of Sessions     = #{self.devlog_sessions.size}\n")
    s << ("Hours per Day       = #{self.per_day} [h]\n")
    s << ("Hours per Week      = #{self.per_week} [h]\n")
    s << ("Hours per Month     = #{self.per_month} [h]\n")
    s << ("Hours last 7 days   = #{self.hours_for_last(7)} [h]\n")
    s << ("Hours last 14 days  = #{self.hours_for_last(14)} [h]\n")
    s << ("Hours last 28 days  = #{self.hours_for_last(28)} [h]\n")
    s << ("\n")
    s << ("Devlog Time         = #{self.devlog_days * 24} [h]\n")
    s << ("Devlog Days         = #{self.devlog_days}  [days]\n")
    s << ("Devlog Weeks        = #{self.devlog_weeks}  [weeks]\n")
    s << ("Devlog Months       = #{self.devlog_months}  [months]\n")
    if self.negative_sessions.any?
      s << ("\n")
      s << ("#{'Negative Sessions'.red}   = #{self.negative_sessions_to_s}\n")
    end
    if self.zero_sessions.any?
      s << ("\n")
      s << ("#{'Zero Sessions'.blue}       = #{self.zero_sessions_to_s}\n")
    end
    s << ("\n")
    s << ("Longest Session     = #{self.longest_session.to_s}\n")
    s << ("Shortest Session    = #{self.shortest_session.to_s}\n")
    s << ("Last Session        = #{self.devlog_end.ago_in_words}, duration: #{self.last_session.session_time.round(3)} [h]")
  end
  s
end

#unpayed_timeObject

total charge time in hours, coding plus communication sessions - payed hours



378
379
380
# File 'lib/devlog.rb', line 378

def unpayed_time
  (coding_session_time + com_session_time + payed_time).round(2)
end

#validation_stringObject



427
428
429
430
431
# File 'lib/devlog.rb', line 427

def validation_string
  vs = ''
  vs << (@zezzions.any? ? '' : "No sessions recorded, add some first...\n".red)
  vs << (File.exist?(devlog_file) ? '' : "No such file #{devlog_file}...\n".red)
end

#zero_sessionsObject



402
403
404
# File 'lib/devlog.rb', line 402

def zero_sessions
  @zezzions.select{|zezzion| zezzion.session_time==0.0}
end

#zero_sessions_to_sObject



406
407
408
# File 'lib/devlog.rb', line 406

def zero_sessions_to_s
  sessions_to_s(zero_sessions)
end