jekyll-recker 2.3.1 → 2.4.0

Sign up to get free protection for your applications and to get access to all the features.
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