jekyll-recker 1.7.0 → 1.8.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: 78979b0c186d78e9296b547ead2c4f5a908945d7fe83fa498984e9dfa8766fc6
4
+ data.tar.gz: dc418d310aec0d6245d637e4ac5f20c428f07f954d7416cb03794781d58e263c
5
5
  SHA512:
6
- metadata.gz: 3e8981f6cfe48b770faca2e93836c4f85994237e981cb2b767d760cc23f9decfdc4f24f800daf1b759258efd9b9ff060444034cb3d91a4534a471f5ca19306e0
7
- data.tar.gz: 3d9c4aaacc354e02570cf31c18761a02b529cd6b624a389e6e8effe50db599678850e1ec19ea32e0353e33905a97e72e1e40f9060b1324ce112357473e110a03
6
+ metadata.gz: 70a080461c6462a80c0296a5573f91f2d8f0eb5995d9fda6be73d018af4cd1999cd1816fb7ca18949a18abd06a05740daefc358f2db9f26e37d4249b21207ad4
7
+ data.tar.gz: 96d7b050be0ad82ae2da7d1e1cadfe4aa328f4f3a780a800243d2027646a16babc22c030619289f8122899accfc24c40546fa2fa443aa70373b15c0280facaa0
@@ -2,20 +2,22 @@
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 :Configuration, 'jekyll_recker/configuration.rb'
10
+ autoload :Error, 'jekyll_recker/error.rb'
11
+ autoload :Mixins, 'jekyll_recker/mixins.rb'
12
+ autoload :Shell, 'jekyll_recker/shell.rb'
13
+ autoload :Social, 'jekyll_recker/social.rb'
14
+ autoload :VERSION, 'jekyll_recker/version.rb'
15
+ autoload :Utils, 'jekyll_recker/utils.rb'
9
16
 
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
17
+ # Eager loads!
18
+ require 'jekyll_recker/commands.rb'
19
+ require 'jekyll_recker/extensions.rb'
20
+ require 'jekyll_recker/filters.rb'
21
+ require 'jekyll_recker/generators.rb'
22
+ require 'jekyll_recker/tags.rb'
21
23
  end
@@ -1,30 +1,26 @@
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
+ JekyllRecker::Social.action(args, options)
21
+ rescue ::JekyllRecker::Error => e
22
+ logger.error e.message
23
+ exit 1
28
24
  end
29
25
  end
30
26
  end
@@ -1,39 +1,37 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module Jekyll
4
- module Recker
5
- # Configuration
6
- module Configuration
7
- def self.jekyll
8
- @jekyll ||= Jekyll.configuration
9
- end
3
+ module JekyllRecker
4
+ # Configuration
5
+ module Configuration
6
+ def self.jekyll
7
+ @jekyll ||= Jekyll.configuration
8
+ end
10
9
 
11
- def self.recker
12
- jekyll.fetch('recker', {})
13
- end
10
+ def self.recker
11
+ jekyll.fetch('recker', {})
12
+ end
14
13
 
15
- def self.facebook
16
- recker.fetch('facebook', {})
17
- end
14
+ def self.facebook
15
+ recker.fetch('facebook', {})
16
+ end
18
17
 
19
- def self.twitter
20
- recker.fetch('twitter', {})
21
- end
18
+ def self.twitter
19
+ recker.fetch('twitter', {})
20
+ end
22
21
 
23
- def self.slack
24
- recker.fetch('slack', {})
25
- end
22
+ def self.slack
23
+ recker.fetch('slack', {})
24
+ end
26
25
 
27
- def self.site
28
- @site = Jekyll::Site.new(jekyll)
29
- @site.reset
30
- @site.read
31
- @site
32
- end
26
+ def self.site
27
+ @site = Jekyll::Site.new(jekyll)
28
+ @site.reset
29
+ @site.read
30
+ @site
31
+ end
33
32
 
34
- def self.latest_post
35
- @latest_post ||= site.posts.docs.last
36
- end
33
+ def self.latest_post
34
+ @latest_post ||= site.posts.docs.last
37
35
  end
38
36
  end
39
37
  end
@@ -1,8 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module Jekyll
4
- module Recker
5
- # ReckerError
6
- class ReckerError < StandardError; end
7
- end
3
+ module JekyllRecker
4
+ # Error
5
+ class Error < StandardError; end
8
6
  end
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Integer extensions
4
+ class Integer
5
+ def pretty
6
+ JekyllRecker::Utils.prettify_number(self)
7
+ end
8
+ end
9
+
10
+ # String extensions
11
+ class String
12
+ def words
13
+ JekyllRecker::Utils.to_word_list(self)
14
+ end
15
+
16
+ def word_count
17
+ JekyllRecker::Utils.to_word_list(self).count
18
+ end
19
+
20
+ def pretty_path(home = nil)
21
+ JekyllRecker::Utils.prettify_path(self, home)
22
+ end
23
+
24
+ def to_and_array
25
+ JekyllRecker::Utils.and_list_to_array(self)
26
+ end
27
+ end
28
+
29
+ # Array extensions
30
+ class Array
31
+ def to_and_list
32
+ JekyllRecker::Utils.array_to_and_list(self)
33
+ end
34
+
35
+ def to_weighted_list
36
+ JekyllRecker::Utils.to_weighted_list(self)
37
+ end
38
+ end
@@ -1,15 +1,13 @@
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')
11
9
  end
12
10
  end
13
11
  end
14
12
 
15
- Liquid::Template.register_filter(Jekyll::Recker::Filters)
13
+ Liquid::Template.register_filter(JekyllRecker::Filters)
@@ -1,111 +1,109 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module Jekyll
4
- module Recker
5
- module Generators
6
- # Stats Module
3
+ module JekyllRecker
4
+ module Generators
5
+ # Stats Module
6
+ #
7
+ # Functions for stats generators.
8
+ # @abstract
9
+ module Stats
10
+ include Mixins::Logging
11
+ include Jekyll::Filters
12
+
13
+ def key
14
+ self.class.const_get(:KEY)
15
+ end
16
+
17
+ def generate(site)
18
+ @site = site
19
+ logger.info "crunching stats.#{key}"
20
+ @site.data['stats'] ||= {}
21
+ @site.data['stats'][key] = crunch
22
+ end
23
+
24
+ def crunch
25
+ raise NotImplementedError, '#crunch not implemented!'
26
+ end
27
+
28
+ # Calculates the average of a list of numbers.
7
29
  #
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)
16
- end
30
+ # @param [Array<Numeric>] numlist list of numbers to be averaged.
31
+ # @return [Numeric] rounded, calculated average of numlist.
32
+ def average(numlist)
33
+ calc = numlist.inject { |sum, el| sum + el }.to_f / numlist.size
34
+ calc.round
35
+ end
17
36
 
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
37
+ # Calculates the total of a list of numbers.
38
+ #
39
+ # @param [Array<Numeric>] numlist list of numbers to be totaled.
40
+ # @return [Numeric] calculated total of numlist.
41
+ def total(numlist)
42
+ numlist.inject(0) { |sum, x| sum + x }
43
+ end
24
44
 
25
- def crunch
26
- raise NotImplementedError, '#crunch not implemented!'
27
- end
45
+ def entries
46
+ @site.posts.docs.select(&:published?)
47
+ end
48
+ end
28
49
 
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
50
+ # Post Count Generator
51
+ class PostCount < Jekyll::Generator
52
+ include Stats
37
53
 
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 }
44
- end
54
+ KEY = 'posts'
45
55
 
46
- def entries
47
- @site.posts.docs.select(&:published?)
48
- end
56
+ def crunch
57
+ entries.count.pretty
49
58
  end
59
+ end
50
60
 
51
- # Post Count Generator
52
- class PostCount < Jekyll::Generator
53
- include Stats
61
+ # Word Count Generator
62
+ class Words < Jekyll::Generator
63
+ include Stats
54
64
 
55
- KEY = 'posts'
65
+ KEY = 'words'
56
66
 
57
- def crunch
58
- entries.count.pretty
59
- end
67
+ def crunch
68
+ total_counts = entries.collect(&:content).map { |c| number_of_words(c) }
69
+ {
70
+ 'average' => average(total_counts).pretty,
71
+ 'total' => total(total_counts).pretty
72
+ }
60
73
  end
74
+ end
61
75
 
62
- # Word Count Generator
63
- class Words < Jekyll::Generator
64
- include Stats
76
+ # Streak Count Generator
77
+ class Streaks < Jekyll::Generator
78
+ include Stats
65
79
 
66
- KEY = 'words'
80
+ KEY = 'days'
67
81
 
68
- def crunch
69
- total_counts = entries.collect(&:content).map { |c| number_of_words(c) }
82
+ def crunch
83
+ streaks.take(1).map do |count, dates|
70
84
  {
71
- 'average' => average(total_counts).pretty,
72
- 'total' => total(total_counts).pretty
85
+ 'days' => count.pretty,
86
+ 'start' => dates[0],
87
+ 'end' => dates[1]
73
88
  }
74
- end
89
+ end.first
75
90
  end
76
91
 
77
- # Streak Count Generator
78
- class Streaks < Jekyll::Generator
79
- include Stats
80
-
81
- KEY = 'days'
82
-
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
92
+ private
92
93
 
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
94
+ def streaks
95
+ _streaks = []
96
+ entry_dates.slice_when do |prev, curr|
97
+ curr != prev - 1
98
+ end.each do |dates|
99
+ first, last = dates.minmax
100
+ _streaks << [(last - first).to_i, [first, last]]
104
101
  end
102
+ _streaks
103
+ end
105
104
 
106
- def entry_dates
107
- entries.collect(&:date).map { |t| Date.new(t.year, t.month, t.day) }.sort.reverse
108
- end
105
+ def entry_dates
106
+ entries.collect(&:date).map { |t| Date.new(t.year, t.month, t.day) }.sort.reverse
109
107
  end
110
108
  end
111
109
  end
@@ -2,43 +2,41 @@
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
5
+ module JekyllRecker
6
+ module Mixins
7
+ # Descendants
8
+ module Descendants
9
+ def self.included(base)
10
+ base.extend(self)
11
+ end
13
12
 
14
- def descendants
15
- ObjectSpace.each_object(Class).select { |klass| klass < self }
16
- end
13
+ def descendants
14
+ ObjectSpace.each_object(Class).select { |klass| klass < self }
17
15
  end
16
+ end
18
17
 
19
- # Introspection
20
- module Introspection
21
- def self.included(base)
22
- base.extend(self)
23
- end
18
+ # Introspection
19
+ module Introspection
20
+ def self.included(base)
21
+ base.extend(self)
22
+ end
24
23
 
25
- def class_name
26
- self.class.name.split('::').last
27
- end
24
+ def class_name
25
+ self.class.name.split('::').last
28
26
  end
27
+ end
29
28
 
30
- # Logging
31
- module Logging
32
- def self.included(base)
33
- base.extend(self)
34
- end
29
+ # Logging
30
+ module Logging
31
+ def self.included(base)
32
+ base.extend(self)
33
+ end
35
34
 
36
- def logger
37
- @logger ||= Logger.new(
38
- STDOUT,
39
- formatter: proc { |_severity, _datetime, _progname, msg| "jekyll-recker: #{msg}\n" }
40
- )
41
- end
35
+ def logger
36
+ @logger ||= Logger.new(
37
+ STDOUT,
38
+ formatter: proc { |_severity, _datetime, _progname, msg| "jekyll-recker: #{msg}\n" }
39
+ )
42
40
  end
43
41
  end
44
42
  end
@@ -2,13 +2,13 @@
2
2
 
3
3
  require 'open3'
4
4
 
5
- module Jekyll
6
- # Recker
7
- module Recker
5
+ module JekyllRecker
6
+ # Shell
7
+ module Shell
8
8
  # ShellCommandFailed
9
- class ShellCommandFailed < ReckerError; end
9
+ class ShellCommandFailed < JekyllRecker::Error; end
10
10
 
11
- def self.shell(cmd)
11
+ def self.run(cmd)
12
12
  out, err, status = Open3.capture3(cmd)
13
13
  return out if status.success?
14
14
 
@@ -3,170 +3,172 @@
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(args, options)
9
+ args += %w[slack twitter] if args.empty?
10
+ Slack.share(dry: options['dry']) if args.include?('slack')
11
+ Twitter.share(dry: options['dry']) if args.include?('twitter')
12
+ end
13
+ # Backend
14
+ #
15
+ # Backend base class for social sharing backends.
16
+ # @abstract
17
+ class Share
18
+ include Mixins::Introspection
19
+ include Mixins::Logging
20
+
21
+ def self.share(dry: false)
22
+ backend = new(dry: dry)
23
+ logger.info "#{backend.name} - building configuration"
24
+ backend.configure!
25
+
26
+ logger.info "#{backend.name} - sharing \"#{backend.latest_title}\""
27
+ backend.post!
28
+ end
26
29
 
27
- def initialize(dry: false)
28
- @dry = dry
29
- end
30
+ def initialize(dry: false)
31
+ @dry = dry
32
+ end
30
33
 
31
- def dry?
32
- @dry
33
- end
34
+ def dry?
35
+ @dry
36
+ end
34
37
 
35
- def config
36
- @config ||= Jekyll::Recker::Configuration.recker.fetch(config_key)
37
- end
38
+ def config
39
+ @config ||= JekyllRecker::Configuration.recker.fetch(config_key)
40
+ end
38
41
 
39
- def config_key
40
- class_name.downcase
41
- end
42
- alias name config_key
42
+ def config_key
43
+ class_name.downcase
44
+ end
45
+ alias name config_key
43
46
 
44
- def post_body
45
- url = File.join Configuration.jekyll['url'], latest.url
46
- <<~BODY
47
+ def post_body
48
+ url = File.join Configuration.jekyll['url'], latest.url
49
+ <<~BODY
47
50
  #{latest.data['date'].strftime('%A, %B %-d %Y')}
48
51
  #{latest.data['title']}
49
52
  #{url}
50
53
  BODY
51
- end
52
-
53
- def latest
54
- @latest ||= Configuration.latest_post
55
- end
54
+ end
56
55
 
57
- def latest_title
58
- latest.data['title']
59
- end
56
+ def latest
57
+ @latest ||= Configuration.latest_post
58
+ end
60
59
 
61
- def configure!
62
- raise NotImplementedError
63
- end
60
+ def latest_title
61
+ latest.data['title']
62
+ end
64
63
 
65
- def post!
66
- raise NotImplementedError
67
- end
64
+ def configure!
65
+ raise NotImplementedError
68
66
  end
69
67
 
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
68
+ def post!
69
+ raise NotImplementedError
70
+ end
71
+ end
81
72
 
82
- @creds[key] = webhook
73
+ # Slack
74
+ #
75
+ # Slack social sharing backend
76
+ class Slack < Share
77
+ def configure!
78
+ @creds = {}
79
+ workspaces.each do |key, data|
80
+ webhook = ENV["SLACK_#{key.upcase}_WEBHOOK"] || extract_from_config(data)
81
+ if webhook.nil?
82
+ raise ReckerError, "cannot find slack webhook for #{key} workspace!"
83
83
  end
84
+
85
+ @creds[key] = webhook
84
86
  end
87
+ end
85
88
 
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
89
+ def post!
90
+ message_body = ::Slack::Notifier::Util::LinkFormatter.format(post_body)
91
+ workspaces.each do |key, config|
92
+ logger.info "posting to #{key} workspace"
93
+ if @dry
94
+ logger.info("BEGIN MESSAGE\n#{message_body.strip}\nEND MESSAGE")
95
+ else
96
+ ::Slack::Notifier.new(
97
+ @creds[key].strip,
98
+ channel: config.fetch('channel'),
99
+ username: config.fetch('username'),
100
+ icon_emoji: config.fetch('emoji')
101
+ ).post(text: message_body)
100
102
  end
101
103
  end
104
+ end
102
105
 
103
- private
106
+ private
104
107
 
105
- def extract_from_config(data)
106
- cmd = data['webhook_cmd']
107
- return nil if cmd.nil?
108
+ def extract_from_config(data)
109
+ cmd = data['webhook_cmd']
110
+ return nil if cmd.nil?
108
111
 
109
- Jekyll::Recker.shell(cmd)
110
- end
112
+ Shell.run(cmd)
113
+ end
111
114
 
112
- def workspaces
113
- config.each
114
- end
115
+ def workspaces
116
+ config.each
115
117
  end
118
+ end
116
119
 
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?
120
+ # Twitter
121
+ #
122
+ # Twitter social sharing backend
123
+ class Twitter < Share
124
+ def configure!
125
+ creds = extract_from_env || extract_from_config
126
+ raise ReckerError, 'cannot find twitter credentials!' if creds.nil?
124
127
 
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
128
+ @client = ::Twitter::REST::Client.new do |settings|
129
+ settings.consumer_key = creds['consumer_api_key']
130
+ settings.consumer_secret = creds['consumer_api_secret']
131
+ settings.access_token = creds['access_token']
132
+ settings.access_token_secret = creds['access_token_secret']
131
133
  end
134
+ end
132
135
 
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
136
+ def post!
137
+ if dry?
138
+ logger.info('tweeting in dry mode, printing message')
139
+ logger.info("BEGIN TWEET\n#{post_body}END TWEET")
140
+ else
141
+ @client.update(post_body)
140
142
  end
143
+ end
141
144
 
142
- private
145
+ private
143
146
 
144
- def extract_from_env
145
- values = cred_fieldnames.map { |k| ENV["TWITTER_#{k.upcase}"] }
147
+ def extract_from_env
148
+ values = cred_fieldnames.map { |k| ENV["TWITTER_#{k.upcase}"] }
146
149
 
147
- return nil if values.any? { |v| v.nil? || v.empty? }
150
+ return nil if values.any? { |v| v.nil? || v.empty? }
148
151
 
149
- Hash[cred_fieldnames.zip(values)]
150
- end
152
+ Hash[cred_fieldnames.zip(values)]
153
+ end
151
154
 
152
- def extract_from_config
153
- values = cred_fieldnames.map do |k|
154
- Recker.shell(Configuration.twitter["#{k}_cmd"]).strip
155
- end
155
+ def extract_from_config
156
+ values = cred_fieldnames.map do |k|
157
+ Shell.run(Configuration.twitter["#{k}_cmd"]).strip
158
+ end
156
159
 
157
- return nil if values.any? { |v| v.nil? || v.empty? }
160
+ return nil if values.any? { |v| v.nil? || v.empty? }
158
161
 
159
- Hash[cred_fieldnames.zip(values)]
160
- end
162
+ Hash[cred_fieldnames.zip(values)]
163
+ end
161
164
 
162
- def cred_fieldnames
163
- [
164
- 'access_token_secret',
165
- 'access_token',
166
- 'consumer_api_key',
167
- 'consumer_api_secret'
168
- ]
169
- end
165
+ def cred_fieldnames
166
+ [
167
+ 'access_token_secret',
168
+ 'access_token',
169
+ 'consumer_api_key',
170
+ 'consumer_api_secret'
171
+ ]
170
172
  end
171
173
  end
172
174
  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)
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ module JekyllRecker
4
+ # Utils
5
+ module Utils
6
+ def self.array_to_and_list(array)
7
+ case array.length
8
+ when 0
9
+ ''
10
+ when 1
11
+ array.first
12
+ when 2
13
+ "#{array.first} and #{array.last}"
14
+ else
15
+ array[0...-1].join(', ') + ", and #{array.last}"
16
+ end
17
+ end
18
+
19
+ def self.and_list_to_array(str)
20
+ str = str.gsub(' and ', ', ')
21
+ str.split(',').map(&:strip).reject(&:empty?)
22
+ end
23
+
24
+ def self.prettify_number(number)
25
+ number.to_s.reverse.gsub(/(\d{3})(?=\d)/, '\\1,').reverse
26
+ end
27
+
28
+ def self.prettify_path(path, home = nil)
29
+ home ||= File.expand_path('~/')
30
+ path.sub(home, '~')
31
+ end
32
+
33
+ def self.to_word_list(str)
34
+ str.split(' ')
35
+ end
36
+ end
37
+ end
@@ -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.8.0'
7
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
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.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alex Recker
@@ -158,14 +158,15 @@ files:
158
158
  - lib/jekyll_recker/commands.rb
159
159
  - lib/jekyll_recker/configuration.rb
160
160
  - lib/jekyll_recker/error.rb
161
+ - lib/jekyll_recker/extensions.rb
161
162
  - lib/jekyll_recker/filters.rb
162
163
  - lib/jekyll_recker/generators.rb
163
164
  - lib/jekyll_recker/mixins.rb
164
165
  - lib/jekyll_recker/shell.rb
165
166
  - lib/jekyll_recker/social.rb
166
167
  - lib/jekyll_recker/tags.rb
168
+ - lib/jekyll_recker/utils.rb
167
169
  - lib/jekyll_recker/version.rb
168
- - lib/jekyll_recker/words.rb
169
170
  homepage: https://www.github.com/arecker/jekyll-recker/
170
171
  licenses:
171
172
  - GPLv3
@@ -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