jekyll-recker 2.3.1 → 2.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0eae22b002ade0f4221755d4de3893fe42e802da54705d41887b7cc6def3f4a8
4
- data.tar.gz: b76f167177035a42fb196ee51c3ca44b55ce945e11f72dd49c53340bb47b786d
3
+ metadata.gz: 7f3c029100fd9fc95b7f7b065e17bbb5cd2baf321fd0b3f93aeac96505e816d6
4
+ data.tar.gz: f66cd31401dd09fd965f34372c117dd26ab582cb8d761d5a00fa1a41352c3e31
5
5
  SHA512:
6
- metadata.gz: 032c96a18fb0a1e9d83e5cf2ce84e801b8573aaa7e8eac01093cb166f74d7e751b6e72bbec8af0be0ac2d5a1d502560b9651585be4a4ea52e1f13c8e5377b23d
7
- data.tar.gz: 78dd6d4ac429dc0c3edfe28fb4ef64f1ed05c678d0b82aa566f0fcdd1dce4c45351cd8334425ef68a528f1af625b0104b552204f309f18cc2b0f262e1423db30
6
+ metadata.gz: 2171c0a55cb2e419ae0c120880fef8e11fd4d01b554327f2adca939f8a92c5c0e0b37934acf58d64bbf276688cc7785aa4c06b46db5a224be721b71a0a3d4805
7
+ data.tar.gz: f07aadca9f824b3c22bcbca26c208fe29e1ffa6fee993984263456f951d861d58ec2697aed963a9bbd7924c3d8b6282ef2f6857f335ab8a343b3486fef039e88
@@ -32,7 +32,7 @@ module JekyllRecker
32
32
 
33
33
  def words
34
34
  content.split.map do |token|
35
- token.gsub!(/[^0-9a-z ]/i, '')
35
+ token.gsub!(/[^0-9a-z ']/i, '')
36
36
  token.downcase
37
37
  end
38
38
  end
@@ -4,7 +4,7 @@ module JekyllRecker
4
4
  # Filters
5
5
  module Filters
6
6
  def uyd_date(date)
7
- date.strftime('%A, %B %d %Y')
7
+ date.strftime('%A, %B %-d %Y')
8
8
  end
9
9
 
10
10
  def pretty(num)
@@ -8,28 +8,41 @@ module JekyllRecker
8
8
  include Date
9
9
  include Logging
10
10
  include Math
11
- end
12
-
13
- # Stats Generator
14
- class Stats < Jekyll::Generator
15
- include Base
16
11
 
17
12
  attr_reader :site
18
13
 
14
+ def name
15
+ self.class.name.split('::').last.downcase
16
+ end
17
+
19
18
  def generate(site)
20
19
  @site = Site.new(site)
21
- generate_stats!
22
20
  if @site.production?
23
- info 'production detected. skipping graphs'
21
+ info "skipping #{name} generator"
24
22
  else
25
- info 'generating graphs'
26
- Graphs.generate_graphs(@site)
23
+ info "running #{name} generator"
24
+ data = crunch
25
+ File.open(data_file_target, 'w') { |f| f.write(JSON.pretty_generate(data)) } unless data.nil?
27
26
  end
28
27
  end
29
28
 
30
- def generate_stats!
31
- info 'calculating statistics'
32
- site.data['stats'] = {
29
+ def data_file_target
30
+ File.join site.data_dir, "#{name}.json"
31
+ end
32
+ end
33
+
34
+ # Stats Generator
35
+ class Stats < Jekyll::Generator
36
+ include Base
37
+
38
+ attr_reader :site
39
+
40
+ def crunch
41
+ generate_stats
42
+ end
43
+
44
+ def generate_stats
45
+ {
33
46
  'total_words' => total(site.word_counts),
34
47
  'average_words' => average(site.word_counts),
35
48
  'total_posts' => site.entries.size,
@@ -51,45 +64,44 @@ module JekyllRecker
51
64
  end
52
65
 
53
66
  def swears
54
- %w[
55
- ass
56
- asshole
57
- booger
58
- crap
59
- damn
60
- fart
61
- fuck
62
- hell
63
- jackass
64
- piss
65
- poop
66
- shit
67
- ]
67
+ site.recker_config.fetch('swears', [])
68
68
  end
69
69
  end
70
70
 
71
- # Image Resize Generator
72
- class ImageResize < Jekyll::Generator
71
+ # Graphs Generator
72
+ class Graphs < Jekyll::Generator
73
73
  include Base
74
74
 
75
- attr_reader :site
75
+ def crunch
76
+ JekyllRecker::Graphs.generate_graphs(site)
77
+ nil
78
+ end
79
+ end
76
80
 
77
- def generate(site)
78
- @site = Site.new(site)
81
+ # Git Generator
82
+ class Git < Jekyll::Generator
83
+ include Base
79
84
 
80
- if @site.production?
81
- info 'production detected, skipping images'
82
- return
83
- end
85
+ def crunch
86
+ {
87
+ 'commit_count' => Shell.run('git rev-list --count master').chomp
88
+ }
89
+ end
90
+ end
84
91
 
85
- load_deps!
92
+ # Image Resize Generator
93
+ class ImageResize < Jekyll::Generator
94
+ include Base
86
95
 
96
+ def crunch
97
+ load_deps!
87
98
  info 'checking images'
88
99
  resizeable_images.each do |f, d|
89
100
  info "resizing #{f} to fit #{d}"
90
101
  image = MiniMagick::Image.new(f)
91
102
  image.resize d
92
103
  end
104
+ nil
93
105
  end
94
106
 
95
107
  def too_big?(width, height)
@@ -101,13 +113,12 @@ module JekyllRecker
101
113
  require 'mini_magick'
102
114
  end
103
115
 
104
- def graph?(file)
105
- file.include?('/graphs/')
116
+ def images_without_graphs
117
+ site.images.reject { |i| i.include?('/graphs/') }
106
118
  end
107
119
 
108
120
  def resizeable_images
109
- without_graphs = site.images.reject { |i| graph?(i) }
110
- with_sizes = without_graphs.map { |f| [f, FastImage.size(f)].flatten }
121
+ with_sizes = images_without_graphs.map { |f| [f, FastImage.size(f)].flatten }
111
122
  with_sizes.select! { |f| too_big?(f[1], f[2]) }
112
123
  with_sizes.map do |f, w, h|
113
124
  dimensions = if w > h
@@ -66,14 +66,18 @@ module JekyllRecker
66
66
  class Swears
67
67
  include Base
68
68
 
69
- attr_reader :results
70
-
71
69
  def initialize(site)
72
- @results = site.data['stats']['swears'].clone
73
- @results.delete('total')
70
+ @data_dir = site.data_dir
74
71
  @graphs_dir = site.graphs_dir
75
72
  end
76
73
 
74
+ def results
75
+ path = File.join(@data_dir, 'stats.json')
76
+ data = JSON.parse(File.read(path))['swears']
77
+ data.delete('total')
78
+ data
79
+ end
80
+
77
81
  def write
78
82
  g = ::Gruff::Pie.new('800x600')
79
83
  g.theme = Gruff::Themes::PASTEL
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'bundler'
4
+
3
5
  module JekyllRecker
4
6
  # Site
5
7
  class Site
@@ -15,7 +17,6 @@ module JekyllRecker
15
17
  entries.first
16
18
  end
17
19
 
18
-
19
20
  def production?
20
21
  ENV['JEKYLL_ENV'] == 'production'
21
22
  end
@@ -57,14 +58,18 @@ module JekyllRecker
57
58
  recker_config.fetch('graphs', 'assets/images/graphs/')
58
59
  end
59
60
 
61
+ def data_dir
62
+ File.join Bundler.root, '_data'
63
+ end
64
+
60
65
  private
61
66
 
62
67
  def build_entries
63
68
  @site.posts.docs
64
- .select(&:published?)
65
- .sort_by(&:date)
66
- .reverse
67
- .map { |p| Entry.new(p) }
69
+ .select(&:published?)
70
+ .sort_by(&:date)
71
+ .reverse
72
+ .map { |p| Entry.new(p) }
68
73
  end
69
74
  end
70
75
  end
@@ -46,7 +46,7 @@ module JekyllRecker
46
46
  def config_key
47
47
  self.class.const_get(:KEY)
48
48
  end
49
- alias :name :config_key
49
+ alias name config_key
50
50
 
51
51
  def post_body
52
52
  <<~BODY
@@ -90,22 +90,29 @@ module JekyllRecker
90
90
  end
91
91
 
92
92
  def post!
93
- message_body = ::Slack::Notifier::Util::LinkFormatter.format(post_body)
94
93
  workspaces.each do |key, config|
95
94
  info "posting to #{key} workspace"
96
95
  if @dry
97
- puts "BEGIN MESSAGE\n#{message_body.strip}\nEND MESSAGE"
96
+ puts "BEGIN MESSAGE\n#{post_body.strip}\nEND MESSAGE"
98
97
  else
99
- ::Slack::Notifier.new(
100
- @creds[key].strip,
101
- channel: config.fetch('channel'),
102
- username: config.fetch('username'),
103
- icon_emoji: config.fetch('emoji')
104
- ).post(text: message_body)
98
+ post(key, config)
105
99
  end
106
100
  end
107
101
  end
108
102
 
103
+ def post(key, config)
104
+ ::Slack::Notifier.new(
105
+ @creds[key].strip,
106
+ channel: config.fetch('channel'),
107
+ username: config.fetch('username'),
108
+ icon_emoji: config.fetch('emoji')
109
+ ).post(text: message_body)
110
+ end
111
+
112
+ def post_body
113
+ ::Slack::Notifier::Util::LinkFormatter.format(super)
114
+ end
115
+
109
116
  private
110
117
 
111
118
  def extract_from_config(data)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module JekyllRecker
4
- VERSION = '2.3.1'
4
+ VERSION = '2.4.0'
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jekyll-recker
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.3.1
4
+ version: 2.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alex Recker