jekyll-recker 1.2.1 → 1.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.
Files changed (35) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +105 -0
  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 +14 -13
  12. data/lib/jekyll_recker/commands.rb +35 -0
  13. data/lib/{jekyll-recker → jekyll_recker}/configuration.rb +6 -0
  14. data/lib/{jekyll-recker → jekyll_recker}/error.rb +0 -0
  15. data/lib/jekyll_recker/facebook.rb +97 -0
  16. data/lib/jekyll_recker/filters.rb +15 -0
  17. data/lib/{jekyll-recker/stats.rb → jekyll_recker/generators.rb} +42 -39
  18. data/lib/{jekyll-recker → jekyll_recker}/logger.rb +0 -0
  19. data/lib/jekyll_recker/mixins.rb +29 -0
  20. data/lib/{jekyll-recker → jekyll_recker}/shell.rb +0 -0
  21. data/lib/{jekyll-recker → jekyll_recker}/slack.rb +10 -1
  22. data/lib/{jekyll-recker → jekyll_recker}/tags.rb +1 -1
  23. data/lib/{jekyll-recker → jekyll_recker}/twitter.rb +10 -2
  24. data/lib/{jekyll-recker → jekyll_recker}/version.rb +1 -1
  25. data/lib/{jekyll-recker → jekyll_recker}/words.rb +0 -0
  26. metadata +104 -35
  27. data/README.org +0 -204
  28. data/_layouts/default.html +0 -14
  29. data/assets/jekyll-recker.scss +0 -110
  30. data/lib/jekyll-recker/commands.rb +0 -12
  31. data/lib/jekyll-recker/commands/share.rb +0 -25
  32. data/lib/jekyll-recker/commands/slack.rb +0 -30
  33. data/lib/jekyll-recker/commands/tweet.rb +0 -31
  34. data/lib/jekyll-recker/generators.rb +0 -17
  35. data/lib/jekyll-recker/mixins.rb +0 -27
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Jekyll
4
+ module Recker
5
+ # Filters
6
+ module Filters
7
+ # Converts a date object to standard Uhh Yeah Dude format.
8
+ def uyd_date(date)
9
+ date.strftime('%A, %B %d %Y')
10
+ end
11
+ end
12
+ end
13
+ end
14
+
15
+ Liquid::Template.register_filter(Jekyll::Recker::Filters)
@@ -1,41 +1,44 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'date'
4
-
5
3
  module Jekyll
6
4
  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
5
+ module Generators
6
+ # Stats Module
7
+ #
8
+ # Functions for stats generators.
9
+ # @abstract
10
+ module Stats
11
+ include Mixins::Logging
23
12
  include Jekyll::Filters
24
- include DescendantsMixin
25
13
 
26
- def initialize(site)
27
- @site = site
14
+ def key
15
+ self.class.const_get(:KEY)
28
16
  end
29
17
 
30
- private
18
+ def generate(site)
19
+ @site = site
20
+ logger.info "crunching stats.#{key}"
21
+ @site.data['stats'] ||= {}
22
+ @site.data['stats'][key] = crunch
23
+ end
31
24
 
32
- attr_reader :journal
25
+ def crunch
26
+ raise NotImplementedError, '#crunch not implemented!'
27
+ end
33
28
 
29
+ # Calculates the average of a list of numbers.
30
+ #
31
+ # @param [Array<Numeric>] numlist list of numbers to be averaged.
32
+ # @return [Numeric] rounded, calculated average of numlist.
34
33
  def average(numlist)
35
34
  calc = numlist.inject { |sum, el| sum + el }.to_f / numlist.size
36
35
  calc.round
37
36
  end
38
37
 
38
+ # Calculates the total of a list of numbers.
39
+ #
40
+ # @param [Array<Numeric>] numlist list of numbers to be totaled.
41
+ # @return [Numeric] calculated total of numlist.
39
42
  def total(numlist)
40
43
  numlist.inject(0) { |sum, x| sum + x }
41
44
  end
@@ -45,22 +48,22 @@ module Jekyll
45
48
  end
46
49
  end
47
50
 
48
- # PostCountCruncher
49
- class PostCountCruncher < BaseCruncher
50
- def stats_key
51
- 'posts'
52
- end
51
+ # Post Count Generator
52
+ class PostCount < Jekyll::Generator
53
+ include Stats
54
+
55
+ KEY = 'posts'
53
56
 
54
57
  def crunch
55
58
  entries.count.pretty
56
59
  end
57
60
  end
58
61
 
59
- # WordCountCruncher
60
- class WordCountCruncher < BaseCruncher
61
- def stats_key
62
- 'words'
63
- end
62
+ # Word Count Generator
63
+ class Words < Jekyll::Generator
64
+ include Stats
65
+
66
+ KEY = 'words'
64
67
 
65
68
  def crunch
66
69
  total_counts = entries.collect(&:content).map { |c| number_of_words(c) }
@@ -71,11 +74,11 @@ module Jekyll
71
74
  end
72
75
  end
73
76
 
74
- # Streak Cruncher
75
- class StreakCruncher < BaseCruncher
76
- def stats_key
77
- 'days'
78
- end
77
+ # Streak Count Generator
78
+ class Streaks < Jekyll::Generator
79
+ include Stats
80
+
81
+ KEY = 'days'
79
82
 
80
83
  def crunch
81
84
  streaks.take(1).map do |count, dates|
@@ -94,7 +97,7 @@ module Jekyll
94
97
  entry_dates.slice_when do |prev, curr|
95
98
  curr != prev - 1
96
99
  end.each do |dates|
97
- first, last = dates.min, dates.max
100
+ first, last = dates.minmax
98
101
  _streaks << [(last - first).to_i, [first, last]]
99
102
  end
100
103
  _streaks
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Jekyll
4
+ module Recker
5
+ module Mixins
6
+ # Descendants
7
+ module Descendants
8
+ def self.included(base)
9
+ base.extend(self)
10
+ end
11
+
12
+ def descendants
13
+ ObjectSpace.each_object(Class).select { |klass| klass < self }
14
+ end
15
+ end
16
+
17
+ # Logging
18
+ module Logging
19
+ def self.included(base)
20
+ base.extend(self)
21
+ end
22
+
23
+ def logger
24
+ Jekyll::Recker.logger
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -7,7 +7,16 @@ module Jekyll
7
7
  module Recker
8
8
  # Slack
9
9
  class Slack
10
- include Jekyll::Recker::LoggingMixin
10
+ include Jekyll::Recker::Mixins::Logging
11
+
12
+ def self.share(dry: false)
13
+ each_in_config(dry: dry) do |client|
14
+ logger.info "#{client.key}: discovering webhook"
15
+ client.discover_webhook!
16
+ logger.info "#{client.key}: posting #{client.latest.data['title']}"
17
+ client.post_latest!
18
+ end
19
+ end
11
20
 
12
21
  def self.each_in_config(dry: false)
13
22
  Configuration.slack.map do |key, body|
@@ -3,7 +3,7 @@
3
3
  module Jekyll
4
4
  module Recker
5
5
  module Tags
6
- # Version
6
+ # Returns the VERSION of the running jekyll-recker gem.
7
7
  class Version < Liquid::Tag
8
8
  def render(_context)
9
9
  VERSION
@@ -6,7 +6,15 @@ module Jekyll
6
6
  module Recker
7
7
  # Twitter Client
8
8
  class Twitter
9
- include LoggingMixin
9
+ include Mixins::Logging
10
+
11
+ def self.share(dry: false)
12
+ client = new(dry: dry)
13
+ logger.info 'discovering credentials'
14
+ client.discover_credentials!
15
+ logger.info "tweeting #{client.latest.data['title']}"
16
+ client.post_latest!
17
+ end
10
18
 
11
19
  def initialize(dry: false)
12
20
  @dry = dry
@@ -53,7 +61,7 @@ module Jekyll
53
61
  end
54
62
 
55
63
  def extract_from_env
56
- values = cred_fieldnames.map { |k| ENV[k.upcase] }
64
+ values = cred_fieldnames.map { |k| ENV["TWITTER_#{k.upcase}"] }
57
65
 
58
66
  return nil if values.any? { |v| v.nil? || v.empty? }
59
67
 
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Jekyll
4
4
  module Recker
5
- VERSION = '1.2.1'
5
+ VERSION = '1.6.0'
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,37 +1,37 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jekyll-recker
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.1
4
+ version: 1.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-04-04 00:00:00.000000000 Z
11
+ date: 2020-05-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: jekyll
14
+ name: bump
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '3.8'
20
- type: :runtime
19
+ version: '0'
20
+ type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - "~>"
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '3.8'
26
+ version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
- name: slack-notifier
28
+ name: pry
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: '0'
34
- type: :runtime
34
+ type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
@@ -39,13 +39,13 @@ dependencies:
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
- name: twitter
42
+ name: rake
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - ">="
46
46
  - !ruby/object:Gem::Version
47
47
  version: '0'
48
- type: :runtime
48
+ type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
@@ -53,7 +53,7 @@ dependencies:
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
- name: bundler
56
+ name: rspec
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - ">="
@@ -67,7 +67,21 @@ dependencies:
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
69
  - !ruby/object:Gem::Dependency
70
- name: rake
70
+ name: rubocop
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
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: yard
71
85
  requirement: !ruby/object:Gem::Requirement
72
86
  requirements:
73
87
  - - ">="
@@ -80,6 +94,62 @@ dependencies:
80
94
  - - ">="
81
95
  - !ruby/object:Gem::Version
82
96
  version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: jekyll
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '3.8'
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '3.8'
111
+ - !ruby/object:Gem::Dependency
112
+ name: koala
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: slack-notifier
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'
139
+ - !ruby/object:Gem::Dependency
140
+ name: twitter
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :runtime
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
83
153
  description:
84
154
  email:
85
155
  - alex@reckerfamily.com
@@ -88,33 +158,32 @@ extensions: []
88
158
  extra_rdoc_files: []
89
159
  files:
90
160
  - LICENSE
91
- - README.org
161
+ - README.md
162
+ - _includes/figure.html
92
163
  - _includes/footer.html
164
+ - _includes/head.html
93
165
  - _includes/header.html
94
166
  - _includes/nav.html
95
- - _layouts/default.html
167
+ - _includes/pager.html
96
168
  - _layouts/home.html
97
169
  - _layouts/page.html
98
170
  - _layouts/post.html
99
- - assets/jekyll-recker.scss
100
171
  - lib/jekyll-recker.rb
101
- - lib/jekyll-recker/commands.rb
102
- - lib/jekyll-recker/commands/share.rb
103
- - lib/jekyll-recker/commands/slack.rb
104
- - lib/jekyll-recker/commands/tweet.rb
105
- - lib/jekyll-recker/configuration.rb
106
- - lib/jekyll-recker/error.rb
107
- - lib/jekyll-recker/generators.rb
108
- - lib/jekyll-recker/logger.rb
109
- - lib/jekyll-recker/mixins.rb
110
- - lib/jekyll-recker/shell.rb
111
- - lib/jekyll-recker/slack.rb
112
- - lib/jekyll-recker/stats.rb
113
- - lib/jekyll-recker/tags.rb
114
- - lib/jekyll-recker/twitter.rb
115
- - lib/jekyll-recker/version.rb
116
- - lib/jekyll-recker/words.rb
117
- homepage: https://www.alexrecker.com/jekyll-recker.html
172
+ - lib/jekyll_recker/commands.rb
173
+ - lib/jekyll_recker/configuration.rb
174
+ - lib/jekyll_recker/error.rb
175
+ - lib/jekyll_recker/facebook.rb
176
+ - lib/jekyll_recker/filters.rb
177
+ - lib/jekyll_recker/generators.rb
178
+ - lib/jekyll_recker/logger.rb
179
+ - lib/jekyll_recker/mixins.rb
180
+ - lib/jekyll_recker/shell.rb
181
+ - lib/jekyll_recker/slack.rb
182
+ - lib/jekyll_recker/tags.rb
183
+ - lib/jekyll_recker/twitter.rb
184
+ - lib/jekyll_recker/version.rb
185
+ - lib/jekyll_recker/words.rb
186
+ homepage: https://www.github.com/arecker/jekyll-recker/
118
187
  licenses:
119
188
  - GPLv3
120
189
  metadata: {}
@@ -136,5 +205,5 @@ requirements: []
136
205
  rubygems_version: 3.0.3
137
206
  signing_key:
138
207
  specification_version: 4
139
- summary: This is the jekyll theme for my personal website.
208
+ summary: The Greatest Jekyll Plugin in the World
140
209
  test_files: []