jekyll-recker 1.7.0 → 1.12.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 853460ad6e8cc68998d94ec9b8370fcc8c91ac36e464c20bb503a430c0b61775
4
- data.tar.gz: b41ff9a6f988de20e74265844092d6bda6a458f3720e9ac49c8276f07702c0e7
3
+ metadata.gz: f0acecf9f429bcd83a0cbe8204e046bee16c5a30de1e458b4080db7502e3a831
4
+ data.tar.gz: 2b579e98cd7b81c71f063652a45b791708825b58d6ba83d2146ab2f321b0ce2e
5
5
  SHA512:
6
- metadata.gz: 3e8981f6cfe48b770faca2e93836c4f85994237e981cb2b767d760cc23f9decfdc4f24f800daf1b759258efd9b9ff060444034cb3d91a4534a471f5ca19306e0
7
- data.tar.gz: 3d9c4aaacc354e02570cf31c18761a02b529cd6b624a389e6e8effe50db599678850e1ec19ea32e0353e33905a97e72e1e40f9060b1324ce112357473e110a03
6
+ metadata.gz: a8b792c90336432c126993937c45dafcb88b1741bfbe2f0eafb32f8c6cc7607d402c442a782409b69a52664cbffe886cf8be39efff0890c15a2f96d84c5f83a9
7
+ data.tar.gz: 14da6696ecf19dc25ea9d02a7ef1904c7e975f8137f0a41ee333da524ff1d242391673a2d6c31d81a77a0ce11d45aed03677b7173e24dae6a91716255f146689
@@ -2,7 +2,7 @@
2
2
  {%- if include.url %}
3
3
  <a href="{{ include.url }}">
4
4
  {%- endif %}
5
- <img alt="{{ alt | default: include.filename }}" src="{{ site.baseurl }}assets/images/{{ include.filename }}"/>
5
+ <img alt="{{ include.alt | default: include.filename }}" src="{{ site.baseurl }}assets/images/{{ include.filename }}"/>
6
6
  {%- if include.url %}
7
7
  </a>
8
8
  {%- endif %}
@@ -2,20 +2,18 @@
2
2
 
3
3
  require 'jekyll'
4
4
 
5
- module Jekyll
6
- # Recker
7
- module Recker
8
- require 'jekyll_recker/mixins.rb'
5
+ # jekyll-recker
6
+ #
7
+ # The greatest jekyll plugin in the world
8
+ module JekyllRecker
9
+ autoload :Mixins, 'jekyll_recker/mixins.rb'
10
+ autoload :Shell, 'jekyll_recker/shell.rb'
11
+ autoload :Social, 'jekyll_recker/social.rb'
12
+ autoload :VERSION, 'jekyll_recker/version.rb'
9
13
 
10
- require 'jekyll_recker/commands.rb'
11
- require 'jekyll_recker/configuration.rb'
12
- require 'jekyll_recker/error.rb'
13
- require 'jekyll_recker/filters.rb'
14
- require 'jekyll_recker/generators.rb'
15
- require 'jekyll_recker/shell.rb'
16
- require 'jekyll_recker/social.rb'
17
- require 'jekyll_recker/tags.rb'
18
- require 'jekyll_recker/version.rb'
19
- require 'jekyll_recker/words.rb'
20
- end
14
+ # Eager loads!
15
+ require 'jekyll_recker/commands.rb'
16
+ require 'jekyll_recker/filters.rb'
17
+ require 'jekyll_recker/generators.rb'
18
+ require 'jekyll_recker/tags.rb'
21
19
  end
@@ -1,30 +1,29 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module Jekyll
4
- module Recker
5
- # Commands
6
- module Commands
7
- # Share
8
- class Share < Jekyll::Command
9
- include Mixins::Logging
3
+ module JekyllRecker
4
+ # Commands
5
+ module Commands
6
+ # Share
7
+ class Share < Jekyll::Command
8
+ include Mixins::Logging
10
9
 
11
- def self.init_with_program(prog)
12
- prog.command(:share) do |c|
13
- c.syntax 'share'
14
- c.description 'Share latest post with each configured backend'
15
- c.option 'dry', '-d', '--dry', 'perform dry run'
16
- c.action { |args, opts| action(args, opts) }
17
- end
10
+ def self.init_with_program(prog)
11
+ prog.command(:share) do |c|
12
+ c.syntax 'share'
13
+ c.description 'Share latest post with each configured backend'
14
+ c.option 'dry', '-d', '--dry', 'perform dry run'
15
+ c.action { |args, opts| action(args, opts) }
18
16
  end
17
+ end
19
18
 
20
- def self.action(args, options)
21
- args += %w[slack twitter] if args.empty?
22
- Recker::Social::Slack.share(dry: options['dry']) if args.include?('slack')
23
- Recker::Social::Twitter.share(dry: options['dry']) if args.include?('twitter')
24
- rescue ReckerError => e
25
- logger.error e.message
26
- exit 1
27
- end
19
+ def self.action(args, options)
20
+ site = Jekyll::Site.new(configuration_from_options(options))
21
+ site.reset
22
+ site.read
23
+ Social.action(site, args, options)
24
+ rescue StandardError => e
25
+ logger.error e.message
26
+ exit 1
28
27
  end
29
28
  end
30
29
  end
@@ -1,15 +1,18 @@
1
1
  # frozen_string_literal: true
2
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
3
+ module JekyllRecker
4
+ # Filters
5
+ module Filters
6
+ # Converts a date object to standard Uhh Yeah Dude format.
7
+ def uyd_date(date)
8
+ date.strftime('%A, %B %d %Y')
9
+ end
10
+
11
+ # Adds commas to a number
12
+ def pretty(num)
13
+ num.to_s.reverse.gsub(/(\d{3})(?=\d)/, '\\1,').reverse
11
14
  end
12
15
  end
13
16
  end
14
17
 
15
- Liquid::Template.register_filter(Jekyll::Recker::Filters)
18
+ Liquid::Template.register_filter(JekyllRecker::Filters)
@@ -1,111 +1,152 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module Jekyll
4
- module Recker
5
- module Generators
6
- # Stats Module
7
- #
8
- # Functions for stats generators.
9
- # @abstract
10
- module Stats
11
- include Mixins::Logging
12
- include Jekyll::Filters
13
-
14
- def key
15
- self.class.const_get(:KEY)
3
+ require 'mini_magick'
4
+ require 'fastimage'
5
+
6
+ module JekyllRecker
7
+ module Generators
8
+ # Image Resize Generator
9
+ class ImageResize < Jekyll::Generator
10
+ include Mixins::Logging
11
+
12
+ def generate(site)
13
+ @site = site
14
+ logger.info 'checking images'
15
+ resizeable_images.each do |f, d|
16
+ logger.info "resizing #{f} to fit #{d}"
17
+ image = MiniMagick::Image.new(f)
18
+ image.resize d
16
19
  end
20
+ end
17
21
 
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
22
+ def image?(file)
23
+ ['.jpg', 'jpeg', '.png', '.svg'].include? File.extname(file)
24
+ end
24
25
 
25
- def crunch
26
- raise NotImplementedError, '#crunch not implemented!'
27
- end
26
+ def too_big?(width, height)
27
+ width > 800 || height > 800
28
+ end
28
29
 
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.
33
- def average(numlist)
34
- calc = numlist.inject { |sum, el| sum + el }.to_f / numlist.size
35
- calc.round
36
- end
30
+ def images
31
+ @site.static_files.collect(&:path).select { |f| image?(f) }
32
+ end
37
33
 
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.
42
- def total(numlist)
43
- numlist.inject(0) { |sum, x| sum + x }
34
+ def resizeable_images
35
+ with_sizes = images.map { |f| [f, FastImage.size(f)].flatten }
36
+ with_sizes.select! { |f| too_big?(f[1], f[2]) }
37
+ with_sizes.map do |f, w, h|
38
+ dimensions = if w > h
39
+ '800x600'
40
+ else
41
+ '600x800'
42
+ end
43
+ [f, dimensions]
44
44
  end
45
+ end
46
+ end
45
47
 
46
- def entries
47
- @site.posts.docs.select(&:published?)
48
- end
48
+ # Stats Module
49
+ #
50
+ # Functions for stats generators.
51
+ # @abstract
52
+ module Stats
53
+ include Mixins::Logging
54
+ include Jekyll::Filters
55
+
56
+ def key
57
+ self.class.const_get(:KEY)
49
58
  end
50
59
 
51
- # Post Count Generator
52
- class PostCount < Jekyll::Generator
53
- include Stats
60
+ def generate(site)
61
+ @site = site
62
+ logger.info "crunching stats.#{key}"
63
+ @site.data['stats'] ||= {}
64
+ @site.data['stats'][key] = crunch
65
+ end
54
66
 
55
- KEY = 'posts'
67
+ def crunch
68
+ raise NotImplementedError, '#crunch not implemented!'
69
+ end
56
70
 
57
- def crunch
58
- entries.count.pretty
59
- end
71
+ # Calculates the average of a list of numbers.
72
+ #
73
+ # @param [Array<Numeric>] numlist list of numbers to be averaged.
74
+ # @return [Numeric] rounded, calculated average of numlist.
75
+ def average(numlist)
76
+ calc = numlist.inject { |sum, el| sum + el }.to_f / numlist.size
77
+ calc.round
78
+ end
79
+
80
+ # Calculates the total of a list of numbers.
81
+ #
82
+ # @param [Array<Numeric>] numlist list of numbers to be totaled.
83
+ # @return [Numeric] calculated total of numlist.
84
+ def total(numlist)
85
+ numlist.inject(0) { |sum, x| sum + x }
60
86
  end
61
87
 
62
- # Word Count Generator
63
- class Words < Jekyll::Generator
64
- include Stats
88
+ def entries
89
+ @site.posts.docs.select(&:published?)
90
+ end
91
+ end
65
92
 
66
- KEY = 'words'
93
+ # Post Count Generator
94
+ class PostCount < Jekyll::Generator
95
+ include Stats
67
96
 
68
- def crunch
69
- total_counts = entries.collect(&:content).map { |c| number_of_words(c) }
70
- {
71
- 'average' => average(total_counts).pretty,
72
- 'total' => total(total_counts).pretty
73
- }
74
- end
97
+ KEY = 'posts'
98
+
99
+ def crunch
100
+ entries.count
75
101
  end
102
+ end
76
103
 
77
- # Streak Count Generator
78
- class Streaks < Jekyll::Generator
79
- include Stats
104
+ # Word Count Generator
105
+ class Words < Jekyll::Generator
106
+ include Stats
80
107
 
81
- KEY = 'days'
108
+ KEY = 'words'
82
109
 
83
- def crunch
84
- streaks.take(1).map do |count, dates|
85
- {
86
- 'days' => count.pretty,
87
- 'start' => dates[0],
88
- 'end' => dates[1]
89
- }
90
- end.first
91
- end
110
+ def crunch
111
+ total_counts = entries.collect(&:content).map { |c| number_of_words(c) }
112
+ {
113
+ 'average' => average(total_counts),
114
+ 'total' => total(total_counts)
115
+ }
116
+ end
117
+ end
92
118
 
93
- private
94
-
95
- def streaks
96
- _streaks = []
97
- entry_dates.slice_when do |prev, curr|
98
- curr != prev - 1
99
- end.each do |dates|
100
- first, last = dates.minmax
101
- _streaks << [(last - first).to_i, [first, last]]
102
- end
103
- _streaks
104
- end
119
+ # Streak Count Generator
120
+ class Streaks < Jekyll::Generator
121
+ include Stats
122
+
123
+ KEY = 'days'
105
124
 
106
- def entry_dates
107
- entries.collect(&:date).map { |t| Date.new(t.year, t.month, t.day) }.sort.reverse
125
+ def crunch
126
+ streaks.take(1).map do |count, dates|
127
+ {
128
+ 'days' => count,
129
+ 'start' => dates[0],
130
+ 'end' => dates[1]
131
+ }
132
+ end.first
133
+ end
134
+
135
+ private
136
+
137
+ def streaks
138
+ _streaks = []
139
+ entry_dates.slice_when do |prev, curr|
140
+ curr != prev - 1
141
+ end.each do |dates|
142
+ first, last = dates.minmax
143
+ _streaks << [(last - first).to_i, [first, last]]
108
144
  end
145
+ _streaks
146
+ end
147
+
148
+ def entry_dates
149
+ entries.collect(&:date).map { |t| Date.new(t.year, t.month, t.day) }.sort.reverse
109
150
  end
110
151
  end
111
152
  end
@@ -2,43 +2,38 @@
2
2
 
3
3
  require 'logger'
4
4
 
5
- module Jekyll
6
- module Recker
7
- module Mixins
8
- # Descendants
9
- module Descendants
10
- def self.included(base)
11
- base.extend(self)
12
- end
13
-
14
- def descendants
15
- ObjectSpace.each_object(Class).select { |klass| klass < self }
16
- end
5
+ module JekyllRecker
6
+ module Mixins
7
+ # Introspection
8
+ #
9
+ # Adds functions which let the class see things about itself.
10
+ module Introspection
11
+ def self.included(base)
12
+ base.extend(self)
17
13
  end
18
14
 
19
- # Introspection
20
- module Introspection
21
- def self.included(base)
22
- base.extend(self)
23
- end
15
+ # Get the class instance
16
+ def class_name
17
+ self.class.name.split('::').last
18
+ end
24
19
 
25
- def class_name
26
- self.class.name.split('::').last
27
- end
20
+ # Get a list of all classes which inherit from this class
21
+ def descendants
22
+ ObjectSpace.each_object(Class).select { |klass| klass < self }
28
23
  end
24
+ end
29
25
 
30
- # Logging
31
- module Logging
32
- def self.included(base)
33
- base.extend(self)
34
- end
26
+ # Logging
27
+ module Logging
28
+ def self.included(base)
29
+ base.extend(self)
30
+ end
35
31
 
36
- def logger
37
- @logger ||= Logger.new(
38
- STDOUT,
39
- formatter: proc { |_severity, _datetime, _progname, msg| "jekyll-recker: #{msg}\n" }
40
- )
41
- end
32
+ def logger
33
+ @logger ||= Logger.new(
34
+ STDOUT,
35
+ formatter: proc { |_severity, _datetime, _progname, msg| "jekyll-recker: #{msg}\n" }
36
+ )
42
37
  end
43
38
  end
44
39
  end
@@ -2,13 +2,10 @@
2
2
 
3
3
  require 'open3'
4
4
 
5
- module Jekyll
6
- # Recker
7
- module Recker
8
- # ShellCommandFailed
9
- class ShellCommandFailed < ReckerError; end
10
-
11
- def self.shell(cmd)
5
+ module JekyllRecker
6
+ # Shell
7
+ module Shell
8
+ def self.run(cmd)
12
9
  out, err, status = Open3.capture3(cmd)
13
10
  return out if status.success?
14
11
 
@@ -22,7 +19,7 @@ module Jekyll
22
19
  #{err}
23
20
  ERROR
24
21
 
25
- raise ShellCommandFailed, msg
22
+ raise msg
26
23
  end
27
24
  end
28
25
  end
@@ -3,170 +3,178 @@
3
3
  require 'slack-notifier'
4
4
  require 'twitter'
5
5
 
6
- module Jekyll
7
- # Recker
8
- module Recker
9
- module Social
10
- # Backend
11
- #
12
- # Backend base class for social sharing backends.
13
- # @abstract
14
- class Share
15
- include Mixins::Introspection
16
- include Mixins::Logging
17
-
18
- def self.share(dry: false)
19
- backend = new(dry: dry)
20
- logger.info "#{backend.name} - building configuration"
21
- backend.configure!
22
-
23
- logger.info "#{backend.name} - sharing \"#{backend.latest_title}\""
24
- backend.post!
25
- end
6
+ module JekyllRecker
7
+ module Social
8
+ def self.action(site, args, options)
9
+ args += %w[slack twitter] if args.empty?
10
+ Slack.share(site, dry: options['dry']) if args.include?('slack')
11
+ Twitter.share(site, dry: options['dry']) if args.include?('twitter')
12
+ end
26
13
 
27
- def initialize(dry: false)
28
- @dry = dry
29
- end
14
+ # Backend
15
+ #
16
+ # Backend base class for social sharing backends.
17
+ # @abstract
18
+ class Share
19
+ include Mixins::Introspection
20
+ include Mixins::Logging
21
+
22
+ def self.share(site, dry: false)
23
+ backend = new(site, dry: dry)
24
+ logger.info "#{backend.name} - building configuration"
25
+ backend.configure!
26
+
27
+ logger.info "#{backend.name} - sharing \"#{backend.latest_title}\""
28
+ backend.post!
29
+ end
30
30
 
31
- def dry?
32
- @dry
33
- end
31
+ def initialize(site, dry: false)
32
+ @site = site
33
+ @dry = dry
34
+ end
34
35
 
35
- def config
36
- @config ||= Jekyll::Recker::Configuration.recker.fetch(config_key)
37
- end
36
+ def dry?
37
+ @dry
38
+ end
38
39
 
39
- def config_key
40
- class_name.downcase
41
- end
42
- alias name config_key
43
-
44
- def post_body
45
- url = File.join Configuration.jekyll['url'], latest.url
46
- <<~BODY
47
- #{latest.data['date'].strftime('%A, %B %-d %Y')}
48
- #{latest.data['title']}
49
- #{url}
50
- BODY
51
- end
40
+ def config
41
+ @site.config.fetch('recker', {}).fetch(config_key, {})
42
+ end
52
43
 
53
- def latest
54
- @latest ||= Configuration.latest_post
55
- end
44
+ def config_key
45
+ class_name.downcase
46
+ end
47
+ alias name config_key
48
+
49
+ def post_body
50
+ url = File.join @site.config['url'], latest.url
51
+ <<~BODY
52
+ #{latest.data['date'].strftime('%A, %B %-d %Y')}
53
+ #{latest.data['title']}
54
+ #{url}
55
+ BODY
56
+ end
56
57
 
57
- def latest_title
58
- latest.data['title']
59
- end
58
+ def latest
59
+ @latest ||= @site.posts.docs.last
60
+ end
60
61
 
61
- def configure!
62
- raise NotImplementedError
63
- end
62
+ def latest_title
63
+ latest.data['title']
64
+ end
64
65
 
65
- def post!
66
- raise NotImplementedError
67
- end
66
+ def configure!
67
+ raise NotImplementedError
68
68
  end
69
69
 
70
- # Slack
71
- #
72
- # Slack social sharing backend
73
- class Slack < Share
74
- def configure!
75
- @creds = {}
76
- workspaces.each do |key, data|
77
- webhook = ENV["SLACK_#{key.upcase}_WEBHOOK"] || extract_from_config(data)
78
- if webhook.nil?
79
- raise ReckerError, "cannot find slack webhook for #{key} workspace!"
80
- end
70
+ def post!
71
+ raise NotImplementedError
72
+ end
73
+ end
81
74
 
82
- @creds[key] = webhook
75
+ # Slack
76
+ #
77
+ # Slack social sharing backend
78
+ class Slack < Share
79
+ def configure!
80
+ @creds = {}
81
+ workspaces.each do |key, data|
82
+ webhook = ENV["SLACK_#{key.upcase}_WEBHOOK"] || extract_from_config(data)
83
+ if webhook.nil?
84
+ raise "cannot find slack webhook for #{key} workspace!"
83
85
  end
86
+
87
+ @creds[key] = webhook
84
88
  end
89
+ end
85
90
 
86
- def post!
87
- message_body = ::Slack::Notifier::Util::LinkFormatter.format(post_body)
88
- workspaces.each do |key, config|
89
- logger.info "posting to #{key} workspace"
90
- if @dry
91
- logger.info("BEGIN MESSAGE\n#{message_body.strip}\nEND MESSAGE")
92
- else
93
- ::Slack::Notifier.new(
94
- @creds[key].strip,
95
- channel: config.fetch('channel'),
96
- username: config.fetch('username'),
97
- icon_emoji: config.fetch('emoji')
98
- ).post(text: message_body)
99
- end
91
+ def post!
92
+ message_body = ::Slack::Notifier::Util::LinkFormatter.format(post_body)
93
+ workspaces.each do |key, config|
94
+ logger.info "posting to #{key} workspace"
95
+ if @dry
96
+ logger.info("BEGIN MESSAGE\n#{message_body.strip}\nEND MESSAGE")
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)
100
104
  end
101
105
  end
106
+ end
102
107
 
103
- private
108
+ private
104
109
 
105
- def extract_from_config(data)
106
- cmd = data['webhook_cmd']
107
- return nil if cmd.nil?
110
+ def extract_from_config(data)
111
+ cmd = data['webhook_cmd']
112
+ return nil if cmd.nil?
108
113
 
109
- Jekyll::Recker.shell(cmd)
110
- end
114
+ Shell.run(cmd)
115
+ end
111
116
 
112
- def workspaces
113
- config.each
114
- end
117
+ def workspaces
118
+ config.each
115
119
  end
120
+ end
116
121
 
117
- # Twitter
118
- #
119
- # Twitter social sharing backend
120
- class Twitter < Share
121
- def configure!
122
- creds = extract_from_env || extract_from_config
123
- raise ReckerError, 'cannot find twitter credentials!' if creds.nil?
122
+ # Twitter
123
+ #
124
+ # Twitter social sharing backend
125
+ class Twitter < Share
126
+ def configure!
127
+ creds = extract_from_env || extract_from_config
128
+ raise 'cannot find twitter credentials!' if creds.nil?
124
129
 
125
- @client = ::Twitter::REST::Client.new do |settings|
126
- settings.consumer_key = creds['consumer_api_key']
127
- settings.consumer_secret = creds['consumer_api_secret']
128
- settings.access_token = creds['access_token']
129
- settings.access_token_secret = creds['access_token_secret']
130
- end
130
+ @client = ::Twitter::REST::Client.new do |settings|
131
+ settings.consumer_key = creds['consumer_api_key']
132
+ settings.consumer_secret = creds['consumer_api_secret']
133
+ settings.access_token = creds['access_token']
134
+ settings.access_token_secret = creds['access_token_secret']
131
135
  end
136
+ end
132
137
 
133
- def post!
134
- if dry?
135
- logger.info('tweeting in dry mode, printing message')
136
- logger.info("BEGIN TWEET\n#{post_body}END TWEET")
137
- else
138
- @client.update(post_body)
139
- end
138
+ def post!
139
+ if dry?
140
+ logger.info('tweeting in dry mode, printing message')
141
+ logger.info("BEGIN TWEET\n#{post_body}END TWEET")
142
+ else
143
+ @client.update(post_body)
140
144
  end
145
+ end
141
146
 
142
- private
147
+ private
143
148
 
144
- def extract_from_env
145
- values = cred_fieldnames.map { |k| ENV["TWITTER_#{k.upcase}"] }
149
+ def extract_from_env
150
+ values = cred_fieldnames.map { |k| ENV["TWITTER_#{k.upcase}"] }
146
151
 
147
- return nil if values.any? { |v| v.nil? || v.empty? }
152
+ return nil if values.any? { |v| v.nil? || v.empty? }
153
+
154
+ Hash[cred_fieldnames.zip(values)]
155
+ end
148
156
 
149
- Hash[cred_fieldnames.zip(values)]
157
+ def extract_from_config
158
+ values = cred_fieldnames.map do |k|
159
+ Shell.run(twitter_config["#{k}_cmd"]).strip
150
160
  end
151
161
 
152
- def extract_from_config
153
- values = cred_fieldnames.map do |k|
154
- Recker.shell(Configuration.twitter["#{k}_cmd"]).strip
155
- end
162
+ return nil if values.any? { |v| v.nil? || v.empty? }
156
163
 
157
- return nil if values.any? { |v| v.nil? || v.empty? }
164
+ Hash[cred_fieldnames.zip(values)]
165
+ end
158
166
 
159
- Hash[cred_fieldnames.zip(values)]
160
- end
167
+ def twitter_config
168
+ @site.config.fetch('recker', {}).fetch('twitter', {})
169
+ end
161
170
 
162
- def cred_fieldnames
163
- [
164
- 'access_token_secret',
165
- 'access_token',
166
- 'consumer_api_key',
167
- 'consumer_api_secret'
168
- ]
169
- end
171
+ def cred_fieldnames
172
+ %w[
173
+ access_token_secret
174
+ access_token
175
+ consumer_api_key
176
+ consumer_api_secret
177
+ ]
170
178
  end
171
179
  end
172
180
  end
@@ -1,16 +1,14 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module Jekyll
4
- module Recker
5
- module Tags
6
- # Returns the VERSION of the running jekyll-recker gem.
7
- class Version < Liquid::Tag
8
- def render(_context)
9
- VERSION
10
- end
3
+ module JekyllRecker
4
+ module Tags
5
+ # Returns the VERSION of the running jekyll-recker gem.
6
+ class Version < Liquid::Tag
7
+ def render(_context)
8
+ VERSION
11
9
  end
12
10
  end
13
11
  end
14
12
  end
15
13
 
16
- Liquid::Template.register_tag('recker_version', Jekyll::Recker::Tags::Version)
14
+ Liquid::Template.register_tag('recker_version', JekyllRecker::Tags::Version)
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module Jekyll
4
- module Recker
5
- VERSION = '1.7.0'
6
- end
3
+ module JekyllRecker
4
+ VERSION = '1.12.0'
7
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jekyll-recker
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.7.0
4
+ version: 1.12.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-10 00:00:00.000000000 Z
11
+ date: 2020-07-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bump
@@ -94,6 +94,20 @@ dependencies:
94
94
  - - ">="
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: fastimage
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'
97
111
  - !ruby/object:Gem::Dependency
98
112
  name: jekyll
99
113
  requirement: !ruby/object:Gem::Requirement
@@ -108,6 +122,20 @@ dependencies:
108
122
  - - "~>"
109
123
  - !ruby/object:Gem::Version
110
124
  version: '3.8'
125
+ - !ruby/object:Gem::Dependency
126
+ name: mini_magick
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'
111
139
  - !ruby/object:Gem::Dependency
112
140
  name: slack-notifier
113
141
  requirement: !ruby/object:Gem::Requirement
@@ -156,8 +184,6 @@ files:
156
184
  - _layouts/post.html
157
185
  - lib/jekyll-recker.rb
158
186
  - lib/jekyll_recker/commands.rb
159
- - lib/jekyll_recker/configuration.rb
160
- - lib/jekyll_recker/error.rb
161
187
  - lib/jekyll_recker/filters.rb
162
188
  - lib/jekyll_recker/generators.rb
163
189
  - lib/jekyll_recker/mixins.rb
@@ -165,7 +191,6 @@ files:
165
191
  - lib/jekyll_recker/social.rb
166
192
  - lib/jekyll_recker/tags.rb
167
193
  - lib/jekyll_recker/version.rb
168
- - lib/jekyll_recker/words.rb
169
194
  homepage: https://www.github.com/arecker/jekyll-recker/
170
195
  licenses:
171
196
  - GPLv3
@@ -1,39 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Jekyll
4
- module Recker
5
- # Configuration
6
- module Configuration
7
- def self.jekyll
8
- @jekyll ||= Jekyll.configuration
9
- end
10
-
11
- def self.recker
12
- jekyll.fetch('recker', {})
13
- end
14
-
15
- def self.facebook
16
- recker.fetch('facebook', {})
17
- end
18
-
19
- def self.twitter
20
- recker.fetch('twitter', {})
21
- end
22
-
23
- def self.slack
24
- recker.fetch('slack', {})
25
- end
26
-
27
- def self.site
28
- @site = Jekyll::Site.new(jekyll)
29
- @site.reset
30
- @site.read
31
- @site
32
- end
33
-
34
- def self.latest_post
35
- @latest_post ||= site.posts.docs.last
36
- end
37
- end
38
- end
39
- end
@@ -1,8 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Jekyll
4
- module Recker
5
- # ReckerError
6
- class ReckerError < StandardError; end
7
- end
8
- 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