jekyll-recker 1.2.3 → 1.8.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.
Files changed (43) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +6 -7
  3. data/_includes/figure.html +14 -0
  4. data/_includes/footer.html +10 -1
  5. data/_includes/head.html +21 -0
  6. data/_includes/nav.html +3 -6
  7. data/_includes/pager.html +13 -0
  8. data/_layouts/home.html +13 -9
  9. data/_layouts/page.html +13 -8
  10. data/_layouts/post.html +20 -28
  11. data/lib/jekyll-recker.rb +17 -17
  12. data/lib/jekyll_recker/commands.rb +27 -0
  13. data/lib/jekyll_recker/configuration.rb +37 -0
  14. data/lib/jekyll_recker/error.rb +6 -0
  15. data/lib/jekyll_recker/extensions.rb +38 -0
  16. data/lib/jekyll_recker/filters.rb +13 -0
  17. data/lib/jekyll_recker/generators.rb +110 -0
  18. data/lib/jekyll_recker/mixins.rb +43 -0
  19. data/lib/{jekyll-recker → jekyll_recker}/shell.rb +5 -5
  20. data/lib/jekyll_recker/social.rb +175 -0
  21. data/lib/jekyll_recker/tags.rb +14 -0
  22. data/lib/jekyll_recker/utils.rb +37 -0
  23. data/lib/jekyll_recker/version.rb +5 -0
  24. metadata +103 -24
  25. data/_layouts/default.html +0 -16
  26. data/assets/inconsolata.css +0 -27
  27. data/assets/jekyll-recker.scss +0 -107
  28. data/assets/open-sans.css +0 -63
  29. data/lib/jekyll-recker/commands.rb +0 -12
  30. data/lib/jekyll-recker/commands/share.rb +0 -25
  31. data/lib/jekyll-recker/commands/slack.rb +0 -31
  32. data/lib/jekyll-recker/commands/tweet.rb +0 -31
  33. data/lib/jekyll-recker/configuration.rb +0 -35
  34. data/lib/jekyll-recker/error.rb +0 -8
  35. data/lib/jekyll-recker/generators.rb +0 -17
  36. data/lib/jekyll-recker/logger.rb +0 -20
  37. data/lib/jekyll-recker/mixins.rb +0 -27
  38. data/lib/jekyll-recker/slack.rb +0 -70
  39. data/lib/jekyll-recker/stats.rb +0 -109
  40. data/lib/jekyll-recker/tags.rb +0 -16
  41. data/lib/jekyll-recker/twitter.rb +0 -83
  42. data/lib/jekyll-recker/version.rb +0 -7
  43. data/lib/jekyll-recker/words.rb +0 -82
@@ -1,109 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'date'
4
-
5
- module Jekyll
6
- module Recker
7
- # Stats
8
- module Stats
9
- include Jekyll::Recker::LoggingMixin
10
-
11
- def self.crunch(site)
12
- stats = {}
13
- BaseCruncher.descendants.each do |cruncher_class|
14
- cruncher = cruncher_class.new(site)
15
- logger.info "crunching stats.#{cruncher.stats_key}"
16
- stats[cruncher.stats_key] = cruncher.crunch
17
- end
18
- stats
19
- end
20
-
21
- # Base Cruncher
22
- class BaseCruncher
23
- include Jekyll::Filters
24
- include DescendantsMixin
25
-
26
- def initialize(site)
27
- @site = site
28
- end
29
-
30
- private
31
-
32
- attr_reader :journal
33
-
34
- def average(numlist)
35
- calc = numlist.inject { |sum, el| sum + el }.to_f / numlist.size
36
- calc.round
37
- end
38
-
39
- def total(numlist)
40
- numlist.inject(0) { |sum, x| sum + x }
41
- end
42
-
43
- def entries
44
- @site.posts.docs.select(&:published?)
45
- end
46
- end
47
-
48
- # PostCountCruncher
49
- class PostCountCruncher < BaseCruncher
50
- def stats_key
51
- 'posts'
52
- end
53
-
54
- def crunch
55
- entries.count.pretty
56
- end
57
- end
58
-
59
- # WordCountCruncher
60
- class WordCountCruncher < BaseCruncher
61
- def stats_key
62
- 'words'
63
- end
64
-
65
- def crunch
66
- total_counts = entries.collect(&:content).map { |c| number_of_words(c) }
67
- {
68
- 'average' => average(total_counts).pretty,
69
- 'total' => total(total_counts).pretty
70
- }
71
- end
72
- end
73
-
74
- # Streak Cruncher
75
- class StreakCruncher < BaseCruncher
76
- def stats_key
77
- 'days'
78
- end
79
-
80
- def crunch
81
- streaks.take(1).map do |count, dates|
82
- {
83
- 'days' => count.pretty,
84
- 'start' => dates[0],
85
- 'end' => dates[1]
86
- }
87
- end.first
88
- end
89
-
90
- private
91
-
92
- def streaks
93
- _streaks = []
94
- entry_dates.slice_when do |prev, curr|
95
- curr != prev - 1
96
- end.each do |dates|
97
- first, last = dates.minmax
98
- _streaks << [(last - first).to_i, [first, last]]
99
- end
100
- _streaks
101
- end
102
-
103
- def entry_dates
104
- entries.collect(&:date).map { |t| Date.new(t.year, t.month, t.day) }.sort.reverse
105
- end
106
- end
107
- end
108
- end
109
- end
@@ -1,16 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Jekyll
4
- module Recker
5
- module Tags
6
- # Version
7
- class Version < Liquid::Tag
8
- def render(_context)
9
- VERSION
10
- end
11
- end
12
- end
13
- end
14
- end
15
-
16
- Liquid::Template.register_tag('recker_version', Jekyll::Recker::Tags::Version)
@@ -1,83 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'twitter'
4
-
5
- module Jekyll
6
- module Recker
7
- # Twitter Client
8
- class Twitter
9
- include LoggingMixin
10
-
11
- def initialize(dry: false)
12
- @dry = dry
13
- end
14
-
15
- def discover_credentials!
16
- @creds = extract_from_env || extract_from_config
17
- raise ReckerError, 'cannot find twitter credentials!' if @creds.nil?
18
-
19
- set_credentials!
20
- end
21
-
22
- def post_latest!
23
- if @dry
24
- logger.info('tweeting in dry mode, printing message')
25
- logger.info("BEGIN TWEET\n#{tweet_body.strip}\nEND TWEET")
26
- else
27
- @client.update(tweet_body)
28
- end
29
- end
30
-
31
- def latest
32
- Configuration.latest_post
33
- end
34
-
35
- private
36
-
37
- def tweet_body
38
- url = File.join Configuration.jekyll['url'], latest.url
39
- <<~TWEET
40
- #{latest.data['date'].strftime('%A, %B %-d %Y')}
41
- #{latest.data['title']}
42
- #{url}
43
- TWEET
44
- end
45
-
46
- def set_credentials!
47
- @client ||= ::Twitter::REST::Client.new do |settings|
48
- settings.consumer_key = @creds['consumer_api_key']
49
- settings.consumer_secret = @creds['consumer_api_secret']
50
- settings.access_token = @creds['access_token']
51
- settings.access_token_secret = @creds['access_token_secret']
52
- end
53
- end
54
-
55
- def extract_from_env
56
- values = cred_fieldnames.map { |k| ENV[k.upcase] }
57
-
58
- return nil if values.any? { |v| v.nil? || v.empty? }
59
-
60
- Hash[cred_fieldnames.zip(values)]
61
- end
62
-
63
- def extract_from_config
64
- values = cred_fieldnames.map do |k|
65
- Recker.shell(Configuration.twitter["#{k}_cmd"]).strip
66
- end
67
-
68
- return nil if values.any? { |v| v.nil? || v.empty? }
69
-
70
- Hash[cred_fieldnames.zip(values)]
71
- end
72
-
73
- def cred_fieldnames
74
- %w[
75
- access_token_secret
76
- access_token
77
- consumer_api_key
78
- consumer_api_secret
79
- ]
80
- end
81
- end
82
- end
83
- end
@@ -1,7 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Jekyll
4
- module Recker
5
- VERSION = '1.2.3'
6
- end
7
- end
@@ -1,82 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Jekyll
4
- module Recker
5
- # Words
6
- module Words
7
- def self.array_to_and_list(array)
8
- case array.length
9
- when 0
10
- ''
11
- when 1
12
- array.first
13
- when 2
14
- "#{array.first} and #{array.last}"
15
- else
16
- array[0...-1].join(', ') + ", and #{array.last}"
17
- end
18
- end
19
-
20
- def self.and_list_to_array(str)
21
- str = str.gsub(' and ', ', ')
22
- str.split(',').map(&:strip).reject(&:empty?)
23
- end
24
-
25
- def self.prettify_number(number)
26
- number.to_s.reverse.gsub(/(\d{3})(?=\d)/, '\\1,').reverse
27
- end
28
-
29
- def self.prettify_path(path, home = nil)
30
- home ||= File.expand_path('~/')
31
- path.sub(home, '~')
32
- end
33
-
34
- def self.to_word_list(str)
35
- str.split(' ')
36
- end
37
-
38
- def self.to_weighted_list(arr)
39
- arr.uniq.map do |word|
40
- [word, arr.count(word)]
41
- end
42
- end
43
- end
44
- end
45
- end
46
-
47
- # Array extensions
48
- class Array
49
- def to_and_list
50
- Jekyll::Recker::Words.array_to_and_list(self)
51
- end
52
-
53
- def to_weighted_list
54
- Jekyll::Recker::Words.to_weighted_list(self)
55
- end
56
- end
57
-
58
- # Integer extensions
59
- class Integer
60
- def pretty
61
- Jekyll::Recker::Words.prettify_number(self)
62
- end
63
- end
64
-
65
- # String extensions
66
- class String
67
- def words
68
- Jekyll::Recker::Words.to_word_list(self)
69
- end
70
-
71
- def word_count
72
- Jekyll::Recker::Words.to_word_list(self).count
73
- end
74
-
75
- def pretty_path(home = nil)
76
- Jekyll::Recker::Words.prettify_path(self, home)
77
- end
78
-
79
- def to_and_array
80
- Jekyll::Recker::Words.and_list_to_array(self)
81
- end
82
- end