jekyll-recker 2.2.0 → 2.6.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: ea539028f1189e2337f3303c646c14a6c479c9a8bc4345e095b4807c6cbc78f0
4
- data.tar.gz: 54890ff14bc9a52cecf154b1af2f44b64a4536a19c270e7bc741bb5f8be1436f
3
+ metadata.gz: bdf9c611731a2e0718c709f65098e3008bbc0d87fa90ab8fc63f7bbcdf915af7
4
+ data.tar.gz: fe79480653eef7c46b5df4dcc2769e7904181ec14f8a42f0b36a0e2ab9f309fa
5
5
  SHA512:
6
- metadata.gz: f7907b88a8fdf1ceb6cdc8f57042b6cc1424ff09a243f50b6790953ab591b625489e656f5ac35e63f3b2760b6ec5d5e659e0fd6ee19de3d7b3b0ef839d0cc924
7
- data.tar.gz: 31a39ca124631df4a59216b7734d7f6e33419a3ebfcc717d54a6a53334c5eea44be3db6c4eca1cdecf3d361f417bb58ab1af3bb26a71f4b169b054fefb351daa
6
+ metadata.gz: 951fbcab06f8f1fad983451ff63ff90af992813998abcb612a75f9c4fb58b7aa65932fee89fe6cd7af82584b0738711ace1eae8b100f3d0ed78f9c04f2f1dbe3
7
+ data.tar.gz: 59e1751c79042d60b43f1abd226802438c908c9c8a754fe280f18ec0d0749bb686abafa46f91eebc2a697e0cf398668e72a5025383c25cff8676426a71ecca2f
@@ -0,0 +1,114 @@
1
+ body {
2
+ max-width: 750px;
3
+ margin: 0 auto;
4
+ padding: 10px;
5
+ font-size: 16px;
6
+ line-height: 1.5;
7
+ -webkit-font-smoothing: antialiased;
8
+ -moz-osx-font-smoothing: grayscale;
9
+ }
10
+
11
+ * {
12
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
13
+ }
14
+
15
+ .post p {
16
+ font-size: 18px;
17
+ }
18
+
19
+ code, pre, .code {
20
+ font-family: monospace;
21
+ }
22
+
23
+ .title {
24
+ margin: 0;
25
+ }
26
+
27
+ .subtitle {
28
+ font-size: 18px;
29
+ margin: 0;
30
+ }
31
+
32
+ blockquote, small, figcaption, .subtitle {
33
+ color: #6f7370;
34
+ }
35
+
36
+ figure {
37
+ text-align: left;
38
+ }
39
+
40
+ figure img {
41
+ width: 100%;
42
+ height: auto;
43
+ max-width: 625px;
44
+ margin-right: auto;
45
+ display: block;
46
+ }
47
+
48
+ figure figcaption p {
49
+ font-style: italic;
50
+ line-height: 1.3;
51
+ margin-top: 10px;
52
+ }
53
+
54
+ figure {
55
+ text-align: left;
56
+ margin-top: 20px;
57
+ margin-bottom: 20px;
58
+ margin-left: 0;
59
+ max-width: 400px;
60
+ }
61
+
62
+ .float-right {
63
+ float: right;
64
+ }
65
+
66
+ .clearfix::after {
67
+ content: "";
68
+ clear: both;
69
+ display: block;
70
+ }
71
+
72
+ .column {
73
+ float: left;
74
+ width: 50%;
75
+ }
76
+
77
+ .show-on-mobile {
78
+ display: none;
79
+ }
80
+
81
+ @media screen and (max-width: 600px) {
82
+ .column {
83
+ width: 100%;
84
+ }
85
+
86
+ .hide-on-mobile {
87
+ display: none;
88
+ }
89
+
90
+ .show-on-mobile {
91
+ display: block;
92
+ }
93
+ }
94
+
95
+ /* Clear floats after the columns */
96
+ .row:after {
97
+ content: "";
98
+ display: table;
99
+ clear: both;
100
+ }
101
+
102
+ .crowded h3, .crowded h2, .crowded p, .crowded ul {
103
+ margin-bottom: 0px;
104
+ margin-top: 5px;
105
+ }
106
+
107
+ td, nav span a {
108
+ padding-right: 5px;
109
+ }
110
+
111
+ footer small::after {
112
+ content:"\a";
113
+ white-space: pre;
114
+ }
@@ -17,7 +17,7 @@ module JekyllRecker
17
17
  end
18
18
 
19
19
  def self.action(args, options)
20
- site = Jekyll::Site.new(configuration_from_options(options))
20
+ site = ::Jekyll::Site.new(configuration_from_options(options))
21
21
  site.reset
22
22
  site.read
23
23
  Social.action(site, args, options)
@@ -17,5 +17,9 @@ module JekyllRecker
17
17
  }
18
18
  end
19
19
  end
20
+
21
+ def time_to_date(time)
22
+ ::Date.parse(time.strftime('%Y-%m-%d'))
23
+ end
20
24
  end
21
25
  end
@@ -3,6 +3,9 @@
3
3
  module JekyllRecker
4
4
  # Entry
5
5
  class Entry
6
+ include Date
7
+ include Filters
8
+
6
9
  def initialize(doc)
7
10
  @doc = doc
8
11
  end
@@ -12,12 +15,24 @@ module JekyllRecker
12
15
  end
13
16
 
14
17
  def date
15
- @date ||= ::Date.parse(@doc.date.strftime('%Y-%m-%d'))
18
+ @date ||= time_to_date(@doc.date)
19
+ end
20
+
21
+ def title
22
+ uyd_date(date)
23
+ end
24
+
25
+ def subtitle
26
+ @doc.data['title']
27
+ end
28
+
29
+ def url
30
+ @doc.url
16
31
  end
17
32
 
18
33
  def words
19
34
  content.split.map do |token|
20
- token.gsub!(/[^0-9a-z ]/i, '')
35
+ token.gsub!(/[^0-9a-z ']/i, '')
21
36
  token.downcase
22
37
  end
23
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)
@@ -1,112 +1,167 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'bundler'
4
-
5
3
  module JekyllRecker
6
4
  # Generators Module
7
5
  module Generators
8
- # Base Generator Functions
9
- module Base
6
+ # Stats Generator
7
+ class Stats < Jekyll::Generator
10
8
  include Date
11
9
  include Logging
12
10
  include Math
13
11
 
14
- def production?
15
- ENV['JEKYLL_ENV'] == 'production'
12
+ attr_reader :site
13
+
14
+ def generate(site)
15
+ @site = Site.new(site)
16
+ info 'calculating statistics'
17
+ site.data['stats'] = stats
16
18
  end
17
19
 
18
- def word_counts
19
- @word_counts ||= bodies.map(&:split).map(&:size)
20
+ def stats
21
+ @stats ||= {
22
+ 'total_words' => total(site.word_counts),
23
+ 'average_words' => average(site.word_counts),
24
+ 'total_posts' => site.entries.size,
25
+ 'consecutive_posts' => calculate_streaks(site.dates).first['days'],
26
+ 'swears' => calculate_swears
27
+ }
20
28
  end
21
29
 
22
- def words
23
- bodies.map(&:split).flatten
30
+ private
31
+
32
+ def calculate_swears
33
+ results = Hash[count_swears]
34
+ results['total'] = total(results.values)
35
+ results
24
36
  end
25
37
 
26
- def bodies
27
- entries.collect(&:content)
38
+ def count_swears
39
+ occurences(swears, site.words).reject { |_k, v| v.zero? }.sort_by { |_k, v| -v }
28
40
  end
29
41
 
30
- def entries
31
- @site.posts.docs.select(&:published?).sort_by(&:date).reverse
42
+ def swears
43
+ site.recker_config.fetch('swears', [])
32
44
  end
45
+ end
46
+
47
+ # Graphs Generator
48
+ class Graphs < Jekyll::Generator
49
+ include Logging
50
+
51
+ attr_reader :site
33
52
 
34
- def dates
35
- entries.collect(&:date).map { |t| ::Date.new(t.year, t.month, t.day) }
53
+ def generate(site)
54
+ @site = Site.new(site)
55
+ if @site.production? && @site.recker_config.fetch('production_skip_graphs', true)
56
+ info 'skipping graphs (production)'
57
+ else
58
+ info 'generating graphs'
59
+ JekyllRecker::Graphs.generate_graphs(@site)
60
+ end
36
61
  end
37
62
  end
38
63
 
39
- # Stats Generator
40
- class Stats < Jekyll::Generator
41
- include Base
42
- include Graphs
64
+ # Image Resize Generator
65
+ class ImageResize < Jekyll::Generator
66
+ require 'fastimage'
67
+ require 'mini_magick'
68
+
69
+ include Logging
70
+
71
+ attr_reader :site
43
72
 
44
73
  def generate(site)
45
- @site = site
46
- logger.info 'calculating statistics'
47
- @site.data['stats'] = data
48
- if production?
49
- logger.info 'production detected. skipping graphs'
74
+ @site = Site.new(site)
75
+ if @site.production? && @site.recker_config.fetch('production_skip_images', true)
76
+ info 'skipping image resizing (production)'
50
77
  else
51
- require 'gruff'
52
- logger.info 'generating graphs'
53
- generate_graphs(entries, swear_results, graphs_dir)
78
+ info 'checking images sizes'
79
+ resizeable_images.each do |f, d|
80
+ info "resizing #{f} to fit #{d}"
81
+ image = MiniMagick::Image.new(f)
82
+ image.resize d
83
+ end
54
84
  end
55
85
  end
56
86
 
57
- def data
58
- {
59
- 'total_words' => total(word_counts),
60
- 'average_words' => average(word_counts),
61
- 'total_posts' => entries.size,
62
- 'consecutive_posts' => calculate_streaks(dates).first['days'],
63
- 'swears' => {
64
- 'total' => swear_results.map(&:last).reduce(0, :+),
65
- 'words' => swear_results
66
- }
67
- }
87
+ def too_big?(width, height)
88
+ width > 800 || height > 800
89
+ end
90
+
91
+ def images_without_graphs
92
+ site.images.reject { |i| i.include?('/graphs/') }
93
+ end
94
+
95
+ def resizeable_images
96
+ with_sizes = images_without_graphs.map { |f| [f, FastImage.size(f)].flatten }
97
+ with_sizes.select! { |f| too_big?(f[1], f[2]) }
98
+ with_sizes.map do |f, w, h|
99
+ dimensions = if w > h
100
+ '800x600'
101
+ else
102
+ '600x800'
103
+ end
104
+ [f, dimensions]
105
+ end
106
+ end
107
+ end
108
+
109
+ # Code Coverage Generator
110
+ class CodeCoverage < Jekyll::Generator
111
+ include Logging
112
+
113
+ attr_reader :site
114
+
115
+ def generate(site)
116
+ @site = Site.new(site)
117
+ info 'running tests'
118
+ Shell.run 'rspec'
119
+ info 'reading code coverage'
120
+ @site.data['coverage'] = JSON.parse(File.read(tmp_file))
68
121
  end
69
122
 
70
123
  private
71
124
 
72
- def swear_results
73
- @swear_results ||= count_swears
125
+ def tmp_file
126
+ site.tmp_join('coverage.json')
127
+ end
128
+ end
129
+
130
+ # Yard Generator
131
+ class Yard < Jekyll::Generator
132
+ include Logging
133
+
134
+ attr_reader :site
135
+
136
+ def generate(site)
137
+ @site = Site.new(site)
138
+ info 'generating documentation'
139
+ target = @site.site_join(docs_path)
140
+ Shell.run "yard -o #{target} -q"
74
141
  end
75
142
 
76
- def graphs_dir
77
- recker = @site.config.fetch('recker', {})
78
- recker.fetch('graphs', 'assets/images/graphs/')
143
+ def docs_path
144
+ site.recker_config.fetch('yard_docs_path', 'doc')
79
145
  end
146
+ end
80
147
 
81
- def count_swears
82
- results = Hash.new(0)
83
- bodies.map(&:split).each do |words|
84
- words = words.map(&:downcase)
85
- swears.each do |swear|
86
- count = words.count(swear)
87
- results[swear] += count
88
- end
89
- end
90
- results.reject { |_k, v| v.zero? }.sort_by { |_k, v| -v }
148
+ # Git History Generator
149
+ class GitHistory < Jekyll::Generator
150
+ include Logging
151
+
152
+ attr_reader :site
153
+
154
+ def generate(site)
155
+ @site = Site.new(site)
156
+ info 'reading git history'
157
+ site.data['git'] = {
158
+ 'commit_count' => commit_count
159
+ }
91
160
  end
92
161
 
93
- def swears
94
- %w[
95
- ass
96
- asshole
97
- booger
98
- crap
99
- damn
100
- fart
101
- fuck
102
- hell
103
- jackass
104
- piss
105
- poop
106
- shit
107
- ]
162
+ def commit_count
163
+ @commit_count ||= Shell.run('git rev-list --count master').chomp
108
164
  end
109
165
  end
110
- require 'jekyll_recker/generators/image_resize.rb'
111
166
  end
112
167
  end
@@ -1,48 +1,57 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'bundler'
4
-
5
3
  module JekyllRecker
6
4
  # Graphs module
7
5
  module Graphs
8
- def generate_graphs(posts, swears, graphs_dir)
9
- WordCount.new(posts, graphs_dir).write
10
- Swears.new(swears, graphs_dir).write
6
+ def self.generate_graphs(site)
7
+ require 'gruff'
8
+ WordCount.new(site).write
9
+ Swears.new(site).write
10
+ end
11
+
12
+ # Base Graph
13
+ module Base
14
+ attr_reader :site
15
+
16
+ def graphs_join(path)
17
+ File.join site.root, @graphs_dir, path
18
+ end
11
19
  end
12
20
 
13
21
  # Word Count Graph
14
22
  class WordCount
15
- def initialize(posts, graphs_dir)
16
- @posts = posts[0..6].reverse
17
- @graphs_dir = graphs_dir
23
+ include Base
24
+
25
+ def initialize(site)
26
+ @site = site
27
+ @graphs_dir = site.graphs_dir
18
28
  end
19
29
 
20
- def graphs_join(path)
21
- File.join Bundler.root, @graphs_dir, path
30
+ def posts
31
+ site.entries[0..6].reverse
32
+ end
33
+
34
+ def word_counts
35
+ site.word_counts[0..6].reverse
22
36
  end
23
37
 
24
38
  def title
25
39
  format = '%m/%d/%y'
26
- first = @posts.first.date.strftime(format)
27
- last = @posts.last.date.strftime(format)
40
+ first = posts.first.date.strftime(format)
41
+ last = posts.last.date.strftime(format)
28
42
  "Word Count: #{first} - #{last}"
29
43
  end
30
44
 
31
45
  def labels
32
- Hash[@posts.each_with_index.map { |p, i| [i, p.date.strftime('%a')] }]
33
- end
34
-
35
- # TODO: copied from jekyll
36
- def number_of_words(input)
37
- input.split.length
46
+ Hash[posts.each_with_index.map { |p, i| [i, p.date.strftime('%a')] }]
38
47
  end
39
48
 
40
49
  def write
41
- g = Gruff::Line.new('800x600')
50
+ g = ::Gruff::Line.new('800x600')
42
51
  g.theme = Gruff::Themes::PASTEL
43
52
  g.hide_legend = true
44
53
  g.labels = labels
45
- g.data :words, @posts.collect(&:content).map { |c| number_of_words(c) }
54
+ g.data :words, word_counts
46
55
  g.title = title
47
56
  g.x_axis_label = 'Day'
48
57
  g.y_axis_label = 'Word Count'
@@ -53,26 +62,26 @@ module JekyllRecker
53
62
 
54
63
  # Swears Chart
55
64
  class Swears
56
- attr_reader :results
65
+ include Base
57
66
 
58
- def initialize(results, graphs_dir)
59
- @results = results
60
- @graphs_dir = graphs_dir
67
+ def initialize(site)
68
+ @site = site
61
69
  end
62
70
 
63
- # TODO: I SUCK
64
- def graphs_join(path)
65
- File.join Bundler.root, @graphs_dir, path
71
+ def results
72
+ data = site.data['stats']['swears'].clone
73
+ data.delete('total')
74
+ data
66
75
  end
67
76
 
68
77
  def write
69
- g = Gruff::Pie.new('800x600')
78
+ g = ::Gruff::Pie.new('800x600')
70
79
  g.theme = Gruff::Themes::PASTEL
71
80
  g.hide_legend = false
72
81
  g.legend_at_bottom = true
73
82
  g.minimum_value = 0
74
83
  results.each { |w, n| g.data w, n }
75
- g.write(graphs_join('swears.png'))
84
+ g.write(site.graphs_join('swears.png'))
76
85
  end
77
86
  end
78
87
  end
@@ -9,11 +9,12 @@ module JekyllRecker
9
9
  base.extend(self)
10
10
  end
11
11
 
12
+ def info(msg)
13
+ Jekyll.logger.info 'jekyll-recker:', msg
14
+ end
15
+
12
16
  def logger
13
- @logger ||= Logger.new(
14
- STDOUT,
15
- formatter: proc { |_severity, _datetime, _progname, msg| "jekyll-recker: #{msg}\n" }
16
- )
17
+ ::Jekyll.logger
17
18
  end
18
19
  end
19
20
  end
@@ -11,5 +11,13 @@ module JekyllRecker
11
11
  def total(numlist)
12
12
  numlist.inject(0) { |sum, x| sum + x }
13
13
  end
14
+
15
+ def occurences(keys, targets)
16
+ results = Hash.new(0)
17
+ targets.each do |target|
18
+ results[target] += 1 if keys.include? target
19
+ end
20
+ results
21
+ end
14
22
  end
15
23
  end
@@ -11,14 +11,83 @@ module JekyllRecker
11
11
  @entries ||= build_entries
12
12
  end
13
13
 
14
+ def latest
15
+ entries.first
16
+ end
17
+
14
18
  def production?
15
19
  ENV['JEKYLL_ENV'] == 'production'
16
20
  end
17
21
 
22
+ def data
23
+ @site.data
24
+ end
25
+
26
+ def url
27
+ @site.config['url']
28
+ end
29
+
30
+ def word_counts
31
+ entries.collect(&:word_count)
32
+ end
33
+
34
+ def words
35
+ entries.collect(&:words).flatten
36
+ end
37
+
38
+ def dates
39
+ entries.collect(&:date)
40
+ end
41
+
42
+ def images
43
+ exts = ['.jpg', 'jpeg', '.png', '.svg']
44
+ @site.static_files.collect(&:path).select { |f| exts.include? File.extname(f) }
45
+ end
46
+
47
+ def root
48
+ File.absolute_path(File.join(__dir__, '../../'))
49
+ end
50
+
51
+ def root_join(path)
52
+ File.join(root, path)
53
+ end
54
+
55
+ def recker_config
56
+ @site.config.fetch('recker', {})
57
+ end
58
+
59
+ def config
60
+ @site.config
61
+ end
62
+
63
+ def graphs_dir
64
+ recker_config.fetch('graphs', 'assets/images/graphs/')
65
+ end
66
+
67
+ def data_dir
68
+ File.join root, '_data'
69
+ end
70
+
71
+ def tmp_join(path)
72
+ File.join root, 'tmp', path
73
+ end
74
+
75
+ def graphs_join(path)
76
+ File.join root, 'assets/images/graphs/', path
77
+ end
78
+
79
+ def site_join(path)
80
+ File.join(root, '_site', path)
81
+ end
82
+
18
83
  private
19
84
 
20
85
  def build_entries
21
- @site.posts.docs.select(&:published?).sort_by(&:date).reverse.map { |p| Entry.new(p) }
86
+ @site.posts.docs
87
+ .select(&:published?)
88
+ .sort_by(&:date)
89
+ .reverse
90
+ .map { |p| Entry.new(p) }
22
91
  end
23
92
  end
24
93
  end
@@ -19,17 +19,19 @@ module JekyllRecker
19
19
  class Share
20
20
  include Logging
21
21
 
22
+ attr_reader :site
23
+
22
24
  def self.share(site, dry: false)
23
25
  backend = new(site, dry: dry)
24
- logger.info "#{backend.name} - building configuration"
26
+ info "#{backend.name} - building configuration"
25
27
  backend.configure!
26
28
 
27
- logger.info "#{backend.name} - sharing \"#{backend.latest_title}\""
29
+ info "#{backend.name} - sharing \"#{backend.latest_title}\""
28
30
  backend.post!
29
31
  end
30
32
 
31
33
  def initialize(site, dry: false)
32
- @site = site
34
+ @site = Site.new(site)
33
35
  @dry = dry
34
36
  end
35
37
 
@@ -38,29 +40,28 @@ module JekyllRecker
38
40
  end
39
41
 
40
42
  def config
41
- @site.config.fetch('recker', {}).fetch(config_key, {})
43
+ site.recker_config.fetch(config_key, {})
42
44
  end
43
45
 
44
46
  def config_key
45
47
  self.class.const_get(:KEY)
46
48
  end
47
- alias name :config_key
49
+ alias name config_key
48
50
 
49
51
  def post_body
50
- url = File.join @site.config['url'], latest.url
51
52
  <<~BODY
52
- #{latest.data['date'].strftime('%A, %B %-d %Y')}
53
- #{latest.data['title']}
54
- #{url}
53
+ #{latest.title}
54
+ #{latest.subtitle}
55
+ #{File.join site.url, latest.url}
55
56
  BODY
56
57
  end
57
58
 
58
- def latest
59
- @latest ||= @site.posts.docs.last
59
+ def latest_title
60
+ latest.title
60
61
  end
61
62
 
62
- def latest_title
63
- latest.data['title']
63
+ def latest
64
+ site.latest
64
65
  end
65
66
 
66
67
  def configure!
@@ -89,22 +90,29 @@ module JekyllRecker
89
90
  end
90
91
 
91
92
  def post!
92
- message_body = ::Slack::Notifier::Util::LinkFormatter.format(post_body)
93
93
  workspaces.each do |key, config|
94
- logger.info "posting to #{key} workspace"
94
+ info "posting to #{key} workspace"
95
95
  if @dry
96
- logger.info("BEGIN MESSAGE\n#{message_body.strip}\nEND MESSAGE")
96
+ puts "BEGIN MESSAGE\n#{post_body.strip}\nEND MESSAGE"
97
97
  else
98
- ::Slack::Notifier.new(
99
- @creds[key].strip,
100
- channel: config.fetch('channel'),
101
- username: config.fetch('username'),
102
- icon_emoji: config.fetch('emoji')
103
- ).post(text: message_body)
98
+ post(key, config)
104
99
  end
105
100
  end
106
101
  end
107
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: post_body)
110
+ end
111
+
112
+ def post_body
113
+ ::Slack::Notifier::Util::LinkFormatter.format(super)
114
+ end
115
+
108
116
  private
109
117
 
110
118
  def extract_from_config(data)
@@ -139,8 +147,8 @@ module JekyllRecker
139
147
 
140
148
  def post!
141
149
  if dry?
142
- logger.info('tweeting in dry mode, printing message')
143
- logger.info("BEGIN TWEET\n#{post_body}END TWEET")
150
+ info('tweeting in dry mode, printing message')
151
+ puts "BEGIN TWEET\n#{post_body}END TWEET"
144
152
  else
145
153
  @client.update(post_body)
146
154
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module JekyllRecker
4
- VERSION = '2.2.0'
4
+ VERSION = '2.6.0'
5
5
  end
@@ -0,0 +1,2 @@
1
+ *
2
+ !.gitignore
metadata CHANGED
@@ -1,15 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jekyll-recker
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.2.0
4
+ version: 2.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alex Recker
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-07-25 00:00:00.000000000 Z
11
+ date: 2020-07-28 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: fastimage
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: gruff
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
13
41
  - !ruby/object:Gem::Dependency
14
42
  name: jekyll
15
43
  requirement: !ruby/object:Gem::Requirement
@@ -24,6 +52,90 @@ dependencies:
24
52
  - - "~>"
25
53
  - !ruby/object:Gem::Version
26
54
  version: '3.8'
55
+ - !ruby/object:Gem::Dependency
56
+ name: mini_magick
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rspec
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: simplecov
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: slack-notifier
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: twitter
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: yard
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :runtime
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
27
139
  description:
28
140
  email:
29
141
  - alex@reckerfamily.com
@@ -31,13 +143,13 @@ executables: []
31
143
  extensions: []
32
144
  extra_rdoc_files: []
33
145
  files:
146
+ - assets/site.css
34
147
  - lib/jekyll-recker.rb
35
148
  - lib/jekyll_recker/commands.rb
36
149
  - lib/jekyll_recker/date.rb
37
150
  - lib/jekyll_recker/entry.rb
38
151
  - lib/jekyll_recker/filters.rb
39
152
  - lib/jekyll_recker/generators.rb
40
- - lib/jekyll_recker/generators/image_resize.rb
41
153
  - lib/jekyll_recker/graphs.rb
42
154
  - lib/jekyll_recker/logging.rb
43
155
  - lib/jekyll_recker/math.rb
@@ -46,6 +158,7 @@ files:
46
158
  - lib/jekyll_recker/social.rb
47
159
  - lib/jekyll_recker/tags.rb
48
160
  - lib/jekyll_recker/version.rb
161
+ - tmp/.gitignore
49
162
  homepage: https://www.github.com/arecker/blog
50
163
  licenses:
51
164
  - GPLv3
@@ -1,58 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module JekyllRecker
4
- module Generators
5
- # Image Resize Generator
6
- class ImageResize < Jekyll::Generator
7
- include Base
8
-
9
- def generate(site)
10
- @site = site
11
- if production?
12
- logger.info 'production detected, skipping images'
13
- return
14
- else
15
- logger.info 'loading image resizing deps'
16
- require 'fastimage'
17
- require 'mini_magick'
18
- end
19
- logger.info 'checking images'
20
- resizeable_images.each do |f, d|
21
- logger.info "resizing #{f} to fit #{d}"
22
- image = MiniMagick::Image.new(f)
23
- image.resize d
24
- end
25
- end
26
-
27
- def image?(file)
28
- ['.jpg', 'jpeg', '.png', '.svg'].include? File.extname(file)
29
- end
30
-
31
- def too_big?(width, height)
32
- width > 800 || height > 800
33
- end
34
-
35
- def graph?(file)
36
- file.include?('/graphs/')
37
- end
38
-
39
- def images
40
- @site.static_files.collect(&:path).select { |f| image?(f) }
41
- end
42
-
43
- def resizeable_images
44
- without_graphs = images.reject { |i| graph?(i) }
45
- with_sizes = without_graphs.map { |f| [f, FastImage.size(f)].flatten }
46
- with_sizes.select! { |f| too_big?(f[1], f[2]) }
47
- with_sizes.map do |f, w, h|
48
- dimensions = if w > h
49
- '800x600'
50
- else
51
- '600x800'
52
- end
53
- [f, dimensions]
54
- end
55
- end
56
- end
57
- end
58
- end