obst 0.1.6 → 0.1.7

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
  SHA256:
3
- metadata.gz: a5789a008e6c945b5ec70d5e7fc26f14ddebde0a68bb7439e1b1d7cb704a430a
4
- data.tar.gz: c765b723bb0761c7b99511d27138dccb0df126197b1d322fef9a5f8c655dc096
3
+ metadata.gz: cc318da9a56d9fd4593627a727f36a2ff01ab2e9ba5d1f4969bc4d299acce702
4
+ data.tar.gz: 6f649344c285a743333d35d7bd4cf11844a38f810fee94040c3de7a46e75f8f4
5
5
  SHA512:
6
- metadata.gz: ea12a1c66ba26cea6744579da6954119bdb9902899e6903430349b36fab3b9ee464b1b0e1acdcd73b6e3e7f364dbdc595f9c115654989a98d1a4cdd440d902c3
7
- data.tar.gz: 03b54cfde71edf09ffc5629be69633195c6b51ec1ffed1fa7fc132263a644e7cc61342de951ab217eb93e81c692d2de591748350f8f3d84cba9717d6b1edd1f5
6
+ metadata.gz: 21c1eea8e6a53ba8c9f94d09d3996eee64f522bd503458600d4db87d584ceb1b2496d55fcb031123a8bcd0b3a3b957c9e6b36772921e8f7f71e19f537fe13b98
7
+ data.tar.gz: b44b1782a1e95a5d791b90538e2023515a3da8d69432b76a93bd376d5ef65699190972675354c1c6a76a6233b6e5bf1e1bf171c0f78655a0dfd9917df39c0621
data/exe/obst CHANGED
@@ -15,5 +15,7 @@ File.open(obst_md, 'w') do |f|
15
15
  f.puts "\n"
16
16
  f.puts Obst::Chart::DailyChange.new(C: path).to_s
17
17
  f.puts "\n"
18
+ f.puts Obst::LongTimeNoSee.new(C: path).to_s
19
+ f.puts "\n"
18
20
  f.puts Obst::TouchedFiles.new(C: path).to_s
19
21
  end
@@ -0,0 +1,28 @@
1
+ require "set"
2
+ require "obst/group_by_days"
3
+
4
+ module Obst
5
+ class LastSeen
6
+ include Enumerable
7
+
8
+ def initialize(**opts)
9
+ @groups = Obst::GroupByDays.new(**opts)
10
+ end
11
+
12
+ def each(&block)
13
+ return self unless block
14
+
15
+ seen = Set.new
16
+ @groups.each do |record|
17
+ record.file_changes.keys.each do |file|
18
+ if seen.include?(file)
19
+ record.file_changes.delete(file)
20
+ else
21
+ seen << file
22
+ end
23
+ end
24
+ block.call(record)
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,31 @@
1
+ require "obst/last_seen"
2
+
3
+ module Obst
4
+ class LongTimeNoSee
5
+ def initialize(**opts)
6
+ opts = opts.merge(days: 7)
7
+ @weekly = LastSeen.new(**opts)
8
+ end
9
+
10
+ def to_s
11
+ @buffer = ["# Long time no see\n"]
12
+ @weekly.each_with_index do |record, i|
13
+ @buffer << "- #{record.time} #{week_count(i)} (#{record.file_changes.count})"
14
+ list_files(record)
15
+ end
16
+ @buffer.join("\n")
17
+ end
18
+
19
+ def list_files(record)
20
+ record.group_inlines do |line|
21
+ @buffer << "\t- #{line}"
22
+ end
23
+ end
24
+
25
+ def week_count(i)
26
+ return 'today' if i == 0
27
+ return '1.week.ago' if i == 1
28
+ "#{i}.weeks.ago"
29
+ end
30
+ end
31
+ end
data/lib/obst/pack_log.rb CHANGED
@@ -46,6 +46,28 @@ module Obst
46
46
  end
47
47
  end
48
48
  end
49
+
50
+ def group_by_final_status
51
+ groups = Hash.new{ |h, k| h[k] = [] }
52
+ file_changes.each_pair{ |file, changes| groups[changes.final] << file }
53
+ groups
54
+ end
55
+
56
+ def group_inlines(&block)
57
+ gbfs = group_by_final_status
58
+
59
+ [
60
+ [:new, :a, '#2db7b5'],
61
+ [:mod, :m, '#d3be03'],
62
+ [:del, :d, '#c71585'],
63
+ [:nil, nil, 'grey']
64
+ ].each do |long, short, color|
65
+ files = gbfs[short]
66
+ next if files.empty?
67
+ inline_str = files.sort!.map{ |name| "[[#{name}]]" }.join(' / ')
68
+ block.call("<font color='#{color}'>#{long} #{files.count}:</font> #{inline_str}")
69
+ end
70
+ end
49
71
  end
50
72
 
51
73
  # yield PackLog::Record(
@@ -46,26 +46,11 @@ module Obst
46
46
  end
47
47
 
48
48
  def list_files(record)
49
- group_by_final_status = Hash.new{ |h, k| h[k] = [] }
50
- record.file_changes.each_pair{ |file, status| group_by_final_status[status.final] << file }
51
-
52
- [
53
- [:new, :a, '#2db7b5'],
54
- [:mod, :m, '#d3be03'],
55
- [:del, :d, '#c71585'],
56
- [:nil, nil, 'grey']
57
- ].each do |long, short, color|
58
- files = group_by_final_status[short]
59
- next if files.empty?
60
- inline_str = inline(files)
61
- @buffer << "\t\t- <font color='#{color}'>#{long} #{files.count}:</font> #{inline_str}"
49
+ record.group_inlines do |line|
50
+ @buffer << "\t\t- #{line}"
62
51
  end
63
52
  end
64
53
 
65
- def inline(files)
66
- files.sort!.map{ |name| "[[#{name}]]" }.join(' / ')
67
- end
68
-
69
54
  def suffix_s(i)
70
55
  i == 0 ? '' : 's'
71
56
  end
data/lib/obst/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Obst
2
- VERSION = "0.1.6"
2
+ VERSION = "0.1.7"
3
3
  end
data/lib/obst.rb CHANGED
@@ -2,6 +2,7 @@ require "obst/version"
2
2
  require "obst/git_log"
3
3
  require "obst/group_by_days"
4
4
  require "obst/touched_files"
5
+ require "obst/long_time_no_see"
5
6
  require "obst/daily_gauge"
6
7
  require "obst/chart"
7
8
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: obst
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.6
4
+ version: 0.1.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - ken
@@ -34,6 +34,8 @@ files:
34
34
  - lib/obst/daily_increment.rb
35
35
  - lib/obst/git_log.rb
36
36
  - lib/obst/group_by_days.rb
37
+ - lib/obst/last_seen.rb
38
+ - lib/obst/long_time_no_see.rb
37
39
  - lib/obst/pack_log.rb
38
40
  - lib/obst/touched_files.rb
39
41
  - lib/obst/version.rb