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.



271
272
273
274
275
276
277
278
279
280
281
# File 'lib/devlog.rb', line 271

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



267
268
269
# File 'lib/devlog.rb', line 267

def coding_session_time
  @coding_session_time
end

#com_session_timeObject

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



267
268
269
# File 'lib/devlog.rb', line 267

def com_session_time
  @com_session_time
end

#devlog_fileObject

Returns the value of attribute devlog_file.



269
270
271
# File 'lib/devlog.rb', line 269

def devlog_file
  @devlog_file
end

#payed_timeObject

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



267
268
269
# File 'lib/devlog.rb', line 267

def payed_time
  @payed_time
end

#zezzionsObject

Returns the value of attribute zezzions.



269
270
271
# File 'lib/devlog.rb', line 269

def zezzions
  @zezzions
end

Instance Method Details

#add_zezzion(zezzion) ⇒ Object



283
284
285
# File 'lib/devlog.rb', line 283

def add_zezzion(zezzion)
  @zezzions << zezzion
end

#charge_timeObject

total charge time in hours, coding plus communication sessions



334
335
336
# File 'lib/devlog.rb', line 334

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

#devlog_beginObject

global devlog start, first entry



288
289
290
# File 'lib/devlog.rb', line 288

def devlog_begin
  @zezzions.last.zzbegin
end

#devlog_daysObject

how many days devlog spans



308
309
310
311
# File 'lib/devlog.rb', line 308

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



293
294
295
# File 'lib/devlog.rb', line 293

def devlog_end
  @zezzions.first.zzend
end

#devlog_monthsObject



318
319
320
# File 'lib/devlog.rb', line 318

def devlog_months
  count_time(:months=>1)
end

#devlog_sessionsObject

return all sessions



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

def devlog_sessions
  @zezzions
end

#devlog_weeksObject

how many weeks devlog spans



314
315
316
# File 'lib/devlog.rb', line 314

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

#first_sessionObject



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

def first_session
  @zezzions.last #devlog_end
end

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

return hours worked for the last X days, from beginTime



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

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(time=0){|time, z| time+z.session_time}.round(2)
end

#last_sessionObject



375
376
377
# File 'lib/devlog.rb', line 375

def last_session
  @zezzions.first #devlog_begin
end

#longest_sessionObject



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

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

#negative_sessionsObject



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

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

#negative_sessions_to_sObject



371
372
373
# File 'lib/devlog.rb', line 371

def negative_sessions_to_s
  sessions_to_s(negative_sessions)
end

#per_dayObject

hours per day



323
324
325
# File 'lib/devlog.rb', line 323

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

#per_monthObject



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

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

#per_weekObject



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

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



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

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

#shortest_sessionObject



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

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

#to_info_stringObject



394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
# File 'lib/devlog.rb', line 394

def to_info_string
  s = ""
  s <<  "\nSession::Time:      = #{self.session_time} [h]\n"
  s << ("\nCodingSession::Time = %.1f [h]" % self.coding_session_time)
  s << ("\nComSession::Time    = %.1f [h]" % self.com_session_time)
  s << ("\nCharge::Time        = #{self.charge_time} [h]")
  s << ("\nUnpayed::Time       = #{self.unpayed_time.to_s.green} [h]\n")
  s << ("\n")
  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

#unpayed_timeObject

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



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

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

#validation_stringObject



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

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

#zero_sessionsObject



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

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

#zero_sessions_to_sObject



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

def zero_sessions_to_s
  sessions_to_s(zero_sessions)
end