devlog 0.0.2 → 0.0.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 57d73038e69a1550073fd71d8272085ad3feb660
4
- data.tar.gz: a234e808266dbcd543ec9f35f06cc2d2f3ea5729
3
+ metadata.gz: c17dd2cce02aef60e7d7bc439502746a2fe7ae91
4
+ data.tar.gz: 6c6dc8f2d7ecdb2d891680a39505f623dd712d9f
5
5
  SHA512:
6
- metadata.gz: b8b88776ad5e576499f5915aaec0ef8c48b7490fc096cdcb217233cd711363cf48a3a8363be4b8cdad9ce31f4e2af75ddb5172f1b1cbbee6c7e865196eac1f50
7
- data.tar.gz: b81742c5df67f1f985908e93a6e0db8c5fb86763dc28d3d5a6ef94b2c1a806f86f7bcd7a1796393bf66fb8babbb9c07e58f110b5b9d31169511dfc368d98a39c
6
+ metadata.gz: 380f4bc48f1de2d19d58d5a9a34c46d0150567deb3f4859c0d84fa106daaa4354ff043664df17e20c8e8c9ba3563ee1461f7df578f23115eb665e000352fa2be
7
+ data.tar.gz: 3aa058eefadc8f68692ad7d04f2091b52d9e6fcdecb453fa38fb1094d9964f1689054040f93819c66e29b9564eb6104059fa11c27cc49e51e29003380d92367c
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.2
1
+ 0.0.3
data/bin/devlog CHANGED
@@ -2,15 +2,18 @@
2
2
  require 'benchmark'
3
3
  require File.expand_path(File.join(File.dirname(__FILE__), %w[.. lib devlog.rb]))
4
4
  USAGE= <<-EOF
5
- #{Devlog.display_version}
5
+ #{Devlog.display_version}
6
+ This software is intended to parse and present information within devlog.markdown development logs.
6
7
 
7
- This software is intended to parse and present information within devlog.markdown development logs.
8
+ #{'Use it as You'.green} #{'dodo'.pur}.
8
9
 
9
- #{'Use it as You'.green} #{'dodo'.pur}.
10
+ Using with a file:
10
11
 
11
- Usage:
12
+ #{'devlog'.red} /path/to/devlog.markdown
12
13
 
13
- #{'devlog'.red} /path/to/devlog.markdown
14
+ or just in a folder with a 'devlog.markdown' file:
15
+
16
+ #{'devlog'.green}
14
17
 
15
18
  EOF
16
19
  #arguments
@@ -18,40 +21,35 @@ $:.unshift File.join(File.dirname(__FILE__))
18
21
  @in_file = ARGV[0]
19
22
  def print_usage
20
23
  puts USAGE
21
- exit
22
24
  end
23
25
  def dodo
24
- if @in_file
25
- include Devlog
26
- time = Benchmark.realtime do
26
+ include Devlog
27
+ time = Benchmark.realtime do
28
+ if @in_file
29
+ puts "Parsing #{@in_file}...".red
27
30
  t = parse_devlog_now(@in_file)
28
- puts "\nSession::Time: = #{t.session_time} [h]\n"
29
- puts("\nCodingSession::Time = %.1f [h]" % t.coding_session_time)
30
- puts("\nComSession::Time = %.1f [h]" % t.com_session_time)
31
- puts("\nCharge::Time = #{t.charge_time} [h]")
32
- puts("\nUnpayed::Time = #{t.unpayed_time} [h]\n")
33
- puts("\n")
34
- puts("Num of Sessions = #{t.devlog_sessions.size}\n")
35
- puts("Hours per Day = #{t.per_day} [h]\n")
36
- puts("Hours per Week = #{t.per_week} [h]\n")
37
- puts("Hours per Month = #{t.per_month} [h]\n")
38
- puts("Hours last 7 days = #{t.hours_for_last(7)} [h]\n")
39
- puts("Hours last 14 days = #{t.hours_for_last(14)} [h]\n")
40
- puts("Hours last 28 days = #{t.hours_for_last(28)} [h]\n")
41
- puts("\n")
42
- puts("Devlog Time = #{t.devlog_days * 24} [hours]\n")
43
- puts("Devlog Days = #{t.devlog_days} [days]\n")
44
- puts("Devlog Weeks = #{t.devlog_weeks} [weeks]\n")
45
- puts("Devlog Months = #{t.devlog_months} [months]\n")
46
- puts("\n")
47
- puts("Longest Session = #{t.longest_session.session_time.round(2)} [hours]\n")
48
- puts("Shortest Session = #{t.shortest_session.session_time.round(2)} [hours]\n")
31
+ puts t.validation_string
32
+ puts t.to_info_string
33
+ 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
49
38
  end
50
- puts "\nRealtime used : #{time}sec"
51
- end
39
+ end
40
+ puts "\nRealtime used : #{time}sec\n\n"
52
41
  end
53
- if ARGV.size > 0
54
- dodo
55
- else
56
- print_usage
42
+
43
+ begin
44
+
45
+ if ARGV.size > 0
46
+ dodo
47
+ else
48
+ dodo
49
+ end
50
+
51
+ rescue
52
+ print_usage
57
53
  end
54
+
55
+ #exit
data/devlog.gemspec CHANGED
@@ -2,16 +2,14 @@
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.0.2 ruby lib
6
5
 
7
6
  Gem::Specification.new do |s|
8
7
  s.name = "devlog"
9
- s.version = "0.0.2"
8
+ s.version = "0.0.3"
10
9
 
11
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
12
- s.require_paths = ["lib"]
13
11
  s.authors = ["mihael"]
14
- s.date = "2014-02-10"
12
+ s.date = "2014-08-15"
15
13
  s.description = "devlog.markdown time&space extractor"
16
14
  s.email = "kitschmaster@gmail.com"
17
15
  s.executables = ["devlog"]
@@ -47,12 +45,14 @@ Gem::Specification.new do |s|
47
45
  "test/devlog_test.rb",
48
46
  "test/test_helper.rb",
49
47
  "test_devlog.markdown",
48
+ "test_negative_devlog.markdown",
50
49
  "test_single_devlog.markdown",
51
50
  "test_stats_devlog.markdown"
52
51
  ]
53
52
  s.homepage = "http://github.com/mihael/devlog"
54
53
  s.licenses = ["MIT"]
55
- s.rubygems_version = "2.2.1"
54
+ s.require_paths = ["lib"]
55
+ s.rubygems_version = "2.0.14"
56
56
  s.summary = "takes devlog.markdown and gives info"
57
57
 
58
58
  if s.respond_to? :specification_version then
data/devlog.markdown CHANGED
@@ -1,10 +1,23 @@
1
+ #15.08.2014 19:14:21 CodingSession::END
2
+
3
+ adding some nice stuff... can now see negative and zero sessions, which are basically error entries with zero or negative time.
4
+
5
+ line numbers are recorded, and printed next to the zero and negative sessions...
6
+
7
+ running 'devlog' in a folder where there is a devlog.markdown file present, it will attempt to parse and present info...
8
+
9
+ improved the output...
10
+
11
+ 0.0.3 it is
12
+
13
+ #15.08.2014 16:35:49 CodingSession::BEGIN
14
+
1
15
  #03.02.2014 21:02:30 CodingSession::END
2
16
 
3
17
  added some tests, and some new calculations, the devlog binary prints out better stats... 0.0.1 it is.
4
18
 
5
19
  #03.02.2014 09:37:36 CodingSession::BEGIN
6
20
 
7
-
8
21
  #02.02.2014 17:06:00 CodingSession::END
9
22
 
10
23
  experiencing some bad weather, which took down an optical cable and cut our village off the internet grid...
data/lib/devlog.rb CHANGED
@@ -14,7 +14,7 @@ module Devlog
14
14
  # :stopdoc:
15
15
  LIBPATH = ::File.expand_path(::File.dirname(__FILE__)) + ::File::SEPARATOR
16
16
  PATH = ::File.dirname(LIBPATH) + ::File::SEPARATOR
17
- VERSION = File.open(File.join(File.dirname(__FILE__), %w[.. VERSION]), 'r')
17
+ VERSION = File.open(File.join(File.dirname(__FILE__), %w[.. VERSION]), 'r').read
18
18
  # :startdoc:
19
19
  # Returns the version string for the library.
20
20
  #
@@ -48,13 +48,12 @@ module Devlog
48
48
  Dir.glob(search_me).sort.each {|rb| require rb}
49
49
  end
50
50
  def self.display_version
51
- "\n#{'Devlog'.green} v#{Devlog.version}\n\n"
51
+ "\n#{'Devlog'.green} v#{Devlog.version}\n"
52
52
  end
53
53
  # Write siple console log
54
54
  def self.log(txt)
55
55
  puts "#{txt}"
56
56
  end
57
-
58
57
 
59
58
  def parse_datetime(line)
60
59
  parts = line[1..-1].split
@@ -63,28 +62,40 @@ module Devlog
63
62
 
64
63
  def parse_devlog_now(devlog=nil)
65
64
  t = Parsing.new
65
+ t.devlog_file = devlog
66
+
66
67
  return t unless devlog
68
+ return t unless File.exist?(devlog)
67
69
 
68
70
  timeEnd = nil
69
71
  timeBegin = nil
72
+ timeEnd_line_number = nil
73
+ timeBegin_line_number = nil
70
74
  in_session = false
71
75
  temp_zezzion = nil
72
76
 
77
+ line_number = 0
73
78
  File.open(devlog, "r").each do |line|
79
+ line_number+=1
80
+
74
81
  if line =~ /-NOCHARGE/
75
82
  in_session = false #do not count nocharge sessions, this is a secret feature
76
83
  elsif line =~ /\A#/ && line =~ /CodingSession::END/
77
84
  in_session = true
78
85
  timeEnd = parse_datetime(line)
86
+ timeEnd_line_number = line_number
79
87
 
80
88
  #zezzion
81
89
  temp_zezzion = Zezzion.new
82
90
  temp_zezzion.zzend = timeEnd
91
+ temp_zezzion.zzend_line_number = timeEnd_line_number
83
92
 
84
93
  elsif line =~ /\A#/ && line =~ /CodingSession::BEGIN/
85
94
  if in_session
86
95
  in_session = false
87
96
  timeBegin = parse_datetime(line)
97
+ timeBegin_line_number = line_number
98
+
88
99
  #cs_time += (timeEnd - timeBegin).to_f * 24 #hours *60 #minutes *60 #seconds
89
100
  delta = (timeEnd - timeBegin).to_f * 24 #hours *60 #minutes *60 #seconds
90
101
  t.coding_session_time += delta
@@ -92,6 +103,7 @@ module Devlog
92
103
  #zezzion
93
104
  temp_zezzion.coding_session_time += delta
94
105
  temp_zezzion.zzbegin = timeBegin
106
+ temp_zezzion.zzbegin_line_number = timeBegin_line_number
95
107
  t.add_zezzion temp_zezzion
96
108
  temp_zezzion = nil
97
109
 
@@ -99,22 +111,26 @@ module Devlog
99
111
  elsif line =~ /\A#/ && line =~ /ComSession::END/
100
112
  in_session = true
101
113
  timeEnd = parse_datetime(line)
114
+ timeEnd_line_number = line_number
102
115
 
103
116
  #zezzion
104
117
  temp_zezzion = Zezzion.new(Zezzion::COM)
105
118
  temp_zezzion.zzend = timeEnd
106
-
119
+ temp_zezzion.zzend_line_number = timeEnd_line_number
107
120
 
108
121
  elsif line =~ /\A#/ && line =~ /ComSession::BEGIN/
109
122
  if in_session
110
123
  in_session = false
111
124
  timeBegin = parse_datetime(line)
125
+ timeBegin_line_number = line_number
126
+
112
127
  delta = (timeEnd - timeBegin).to_f * 24
113
128
  t.com_session_time += delta
114
129
 
115
130
  #zezzion
116
131
  temp_zezzion.coding_session_time += delta
117
132
  temp_zezzion.zzbegin = timeBegin
133
+ temp_zezzion.zzbegin_line_number = timeBegin_line_number
118
134
  t.add_zezzion temp_zezzion
119
135
  temp_zezzion = nil
120
136
 
@@ -200,10 +216,10 @@ module Devlog
200
216
  end
201
217
 
202
218
  class Parsing
203
- #this is the total time, but each sessino has these same params
219
+ #this is the total time, but each session has these same params
204
220
  attr_accessor :coding_session_time, :com_session_time, :payed_time #backward compatible object with Tajm, from devlog 0.0.0
205
221
 
206
- attr_accessor :zezzions
222
+ attr_accessor :zezzions, :devlog_file
207
223
 
208
224
  def initialize(viewing_time_current_date=DateTime.now)
209
225
  @viewing_time_current_date = viewing_time_current_date
@@ -213,13 +229,15 @@ module Devlog
213
229
  @coding_session_time = 0.0
214
230
  @com_session_time = 0.0
215
231
  @payed_time = 0.0
232
+
233
+ @devlog_file = ""
216
234
  end
217
235
 
218
236
  def add_zezzion(zezzion)
219
237
  @zezzions << zezzion
220
238
  end
221
239
 
222
- #gloabl devlog start, first entry
240
+ #global devlog start, first entry
223
241
  def devlog_begin
224
242
  @zezzions.last.zzbegin
225
243
  end
@@ -291,14 +309,80 @@ module Devlog
291
309
  @zezzions.min_by(&:session_time)
292
310
  end
293
311
 
312
+ def negative_sessions
313
+ @zezzions.select{|zezzion| zezzion.session_time<0}
314
+ end
315
+
316
+ def zero_sessions
317
+ @zezzions.select{|zezzion| zezzion.session_time==0.0}
318
+ end
319
+
320
+ def zero_sessions_to_s
321
+ sessions_to_s(zero_sessions)
322
+ end
323
+
324
+ def negative_sessions_to_s
325
+ sessions_to_s(negative_sessions)
326
+ end
327
+
328
+ def last_session
329
+ @zezzions.first #devlog_begin
330
+ end
331
+
332
+ def first_session
333
+ @zezzions.last #devlog_end
334
+ end
335
+
294
336
  #return all sessions
295
337
  def devlog_sessions
296
338
  @zezzions
297
339
  end
298
340
 
341
+ def validation_string
342
+ vs = ""
343
+ vs << (@zezzions.any? ? '' : "No sessions recorded, add some first...\n".red)
344
+ vs << (File.exist?(self.devlog_file) ? '' : "No such file #{self.devlog_file}...\n".red)
345
+ end
299
346
 
347
+ def to_info_string
348
+ s = ""
349
+ s << "\nSession::Time: = #{self.session_time} [h]\n"
350
+ s << ("\nCodingSession::Time = %.1f [h]" % self.coding_session_time)
351
+ s << ("\nComSession::Time = %.1f [h]" % self.com_session_time)
352
+ s << ("\nCharge::Time = #{self.charge_time} [h]")
353
+ s << ("\nUnpayed::Time = #{self.unpayed_time.to_s.green} [h]\n")
354
+ s << ("\n")
355
+ s << ("Num of Sessions = #{self.devlog_sessions.size}\n")
356
+ s << ("Hours per Day = #{self.per_day} [h]\n")
357
+ s << ("Hours per Week = #{self.per_week} [h]\n")
358
+ s << ("Hours per Month = #{self.per_month} [h]\n")
359
+ s << ("Hours last 7 days = #{self.hours_for_last(7)} [h]\n")
360
+ s << ("Hours last 14 days = #{self.hours_for_last(14)} [h]\n")
361
+ s << ("Hours last 28 days = #{self.hours_for_last(28)} [h]\n")
362
+ s << ("\n")
363
+ s << ("Devlog Time = #{self.devlog_days * 24} [hours]\n")
364
+ s << ("Devlog Days = #{self.devlog_days} [days]\n")
365
+ s << ("Devlog Weeks = #{self.devlog_weeks} [weeks]\n")
366
+ s << ("Devlog Months = #{self.devlog_months} [months]\n")
367
+ if self.negative_sessions.any?
368
+ s << ("\n")
369
+ s << ("#{'Negative Sessions'.red} = #{self.negative_sessions_to_s}\n")
370
+ end
371
+ if self.zero_sessions.any?
372
+ s << ("\n")
373
+ s << ("#{'Zero Sessions'.blue} = #{self.zero_sessions_to_s}\n")
374
+ end
375
+ 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]")
379
+ end
300
380
 
301
381
  private
382
+ def sessions_to_s(sessions)
383
+ "\n" + sessions.collect{|session| " " + session.to_s}.join("\n")
384
+ end
385
+
302
386
  #count :weeks=>1, or :days=>1, or :years=>1
303
387
  def count_time(options)
304
388
  num = 0
@@ -314,10 +398,11 @@ module Devlog
314
398
 
315
399
 
316
400
  class Zezzion
317
- COM = 1
318
- COD = 0
401
+ COM = 1 #communication session
402
+ COD = 0 #coding session
319
403
  attr_accessor :zzbegin, :zzend, :zzbegin_title, :zzend_title, :zztype
320
404
  attr_accessor :coding_session_time, :com_session_time, :payed_time
405
+ attr_accessor :zzend_line_number, :zzbegin_line_number
321
406
 
322
407
  def initialize(zztype=COD)
323
408
  @zztype = zztype
@@ -329,6 +414,8 @@ module Devlog
329
414
  @coding_session_time = 0.0
330
415
  @com_session_time = 0.0
331
416
  @payed_time = 0.0
417
+ @zzbegin_line_number = 0
418
+ @zzend_line_number = 0
332
419
  end
333
420
 
334
421
  #in seconds
@@ -354,10 +441,18 @@ module Devlog
354
441
  session_time/days
355
442
  end
356
443
  def per_week
357
-
444
+ #todo
358
445
  end
359
446
  def per_month
447
+ #todo
448
+ end
360
449
 
450
+ def type
451
+ zztype == 0 ? "CodingSession" : "ComSession"
452
+ end
453
+
454
+ 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]"
361
456
  end
362
457
  end
363
458
 
@@ -371,5 +466,37 @@ module Devlog
371
466
  end
372
467
 
373
468
  end
374
-
469
+
470
+ end
471
+
472
+ module DateTimeAgoInWords
473
+ def ago_in_words
474
+ return 'a very very long time ago' if self.year < 1800
475
+ secs = Time.now - self
476
+ return 'just now' if secs > -1 && secs < 1
477
+ return '' if secs <= -1
478
+ pair = ago_in_words_pair(secs)
479
+ ary = ago_in_words_singularize(pair)
480
+ ary.size == 0 ? '' : ary.join(' and ') << ' ago'
481
+ end
482
+ private
483
+ def ago_in_words_pair(secs)
484
+ [[60, :seconds], [60, :minutes], [24, :hours], [100_000, :days]].map{ |count, name|
485
+ if secs > 0
486
+ secs, n = secs.divmod(count)
487
+ "#{n.to_i} #{name}"
488
+ end
489
+ }.compact.reverse[0..1]
490
+ end
491
+ def ago_in_words_singularize(pair)
492
+ if pair.size == 1
493
+ pair.map! {|part| part[0, 2].to_i == 1 ? part.chomp('s') : part }
494
+ else
495
+ pair.map! {|part| part[0, 2].to_i == 1 ? part.chomp('s') : part[0, 2].to_i == 0 ? nil : part }
496
+ end
497
+ pair.compact
498
+ end
499
+ end
500
+ class DateTime
501
+ include DateTimeAgoInWords
375
502
  end
data/test/devlog_test.rb CHANGED
@@ -123,4 +123,21 @@ class DevlogTest < Test::Unit::TestCase
123
123
  load_devlog_stat
124
124
  assert(@tajm_stat.devlog_sessions.size==8, "should be 8, but is #{@tajm_stat.devlog_sessions.size}")
125
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
142
+
126
143
  end
data/test/test_helper.rb CHANGED
@@ -39,4 +39,8 @@ end
39
39
 
40
40
  def load_devlog_single
41
41
  @tajm_single = parse_devlog_now(File.join(File.dirname(__FILE__), '..', 'test_single_devlog.markdown'))
42
- end
42
+ end
43
+
44
+ def load_devlog_negative
45
+ @tajm_negative = parse_devlog_now(File.join(File.dirname(__FILE__), '..', 'test_negative_devlog.markdown'))
46
+ end
@@ -0,0 +1,31 @@
1
+ #03.02.2014 16:20:03 CodingSession::END
2
+
3
+ - 1 hour negative
4
+
5
+ #03.02.2014 17:20:03 CodingSession::BEGIN
6
+
7
+
8
+ #02.02.2014 17:20:03 CodingSession::END
9
+
10
+ 1 hour positive
11
+
12
+ #02.02.2014 16:20:03 CodingSession::BEGIN
13
+
14
+
15
+ #02.02.2014 08:10:10 ComSession::END
16
+
17
+ -2 hours negative session
18
+
19
+ #02.02.2014 10:10:10 ComSession::BEGIN
20
+
21
+ #01.01.2014 20:21:20 CodingSession::END
22
+
23
+ 0 session
24
+
25
+ #01.01.2014 20:21:20 CodingSession::BEGIN
26
+
27
+ #01.01.2014 20:20:20 CodingSession::END
28
+
29
+ 1 hour positive session
30
+
31
+ #01.01.2014 16:20:20 CodingSession::BEGIN
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.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - mihael
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-02-10 00:00:00.000000000 Z
11
+ date: 2014-08-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: jeweler
@@ -74,6 +74,7 @@ files:
74
74
  - test/devlog_test.rb
75
75
  - test/test_helper.rb
76
76
  - test_devlog.markdown
77
+ - test_negative_devlog.markdown
77
78
  - test_single_devlog.markdown
78
79
  - test_stats_devlog.markdown
79
80
  homepage: http://github.com/mihael/devlog
@@ -96,7 +97,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
96
97
  version: '0'
97
98
  requirements: []
98
99
  rubyforge_project:
99
- rubygems_version: 2.2.1
100
+ rubygems_version: 2.0.14
100
101
  signing_key:
101
102
  specification_version: 4
102
103
  summary: takes devlog.markdown and gives info