jekyll-recker 1.2.1 → 1.6.0

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