jekyll-recker 1.2.3 → 1.8.0

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