jekyll-recker 1.6.0 → 1.7.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.
- checksums.yaml +4 -4
- data/lib/jekyll-recker.rb +1 -4
- data/lib/jekyll_recker/commands.rb +3 -7
- data/lib/jekyll_recker/mixins.rb +17 -1
- data/lib/jekyll_recker/social.rb +173 -0
- data/lib/jekyll_recker/version.rb +1 -1
- metadata +3 -20
- data/lib/jekyll_recker/facebook.rb +0 -97
- data/lib/jekyll_recker/logger.rb +0 -20
- data/lib/jekyll_recker/slack.rb +0 -79
- data/lib/jekyll_recker/twitter.rb +0 -91
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 853460ad6e8cc68998d94ec9b8370fcc8c91ac36e464c20bb503a430c0b61775
|
4
|
+
data.tar.gz: b41ff9a6f988de20e74265844092d6bda6a458f3720e9ac49c8276f07702c0e7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3e8981f6cfe48b770faca2e93836c4f85994237e981cb2b767d760cc23f9decfdc4f24f800daf1b759258efd9b9ff060444034cb3d91a4534a471f5ca19306e0
|
7
|
+
data.tar.gz: 3d9c4aaacc354e02570cf31c18761a02b529cd6b624a389e6e8effe50db599678850e1ec19ea32e0353e33905a97e72e1e40f9060b1324ce112357473e110a03
|
data/lib/jekyll-recker.rb
CHANGED
@@ -5,19 +5,16 @@ require 'jekyll'
|
|
5
5
|
module Jekyll
|
6
6
|
# Recker
|
7
7
|
module Recker
|
8
|
-
require 'jekyll_recker/logger.rb'
|
9
8
|
require 'jekyll_recker/mixins.rb'
|
10
9
|
|
11
10
|
require 'jekyll_recker/commands.rb'
|
12
11
|
require 'jekyll_recker/configuration.rb'
|
13
12
|
require 'jekyll_recker/error.rb'
|
14
|
-
require 'jekyll_recker/facebook.rb'
|
15
13
|
require 'jekyll_recker/filters.rb'
|
16
14
|
require 'jekyll_recker/generators.rb'
|
17
15
|
require 'jekyll_recker/shell.rb'
|
18
|
-
require 'jekyll_recker/
|
16
|
+
require 'jekyll_recker/social.rb'
|
19
17
|
require 'jekyll_recker/tags.rb'
|
20
|
-
require 'jekyll_recker/twitter.rb'
|
21
18
|
require 'jekyll_recker/version.rb'
|
22
19
|
require 'jekyll_recker/words.rb'
|
23
20
|
end
|
@@ -18,13 +18,9 @@ module Jekyll
|
|
18
18
|
end
|
19
19
|
|
20
20
|
def self.action(args, options)
|
21
|
-
if args.empty?
|
22
|
-
|
23
|
-
|
24
|
-
Recker::Twitter.share(dry: options['dry'])
|
25
|
-
# elsif args.empty? || args.include?('facebook')
|
26
|
-
# Recker::Facebook.share(dry: options['dry'])
|
27
|
-
end
|
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')
|
28
24
|
rescue ReckerError => e
|
29
25
|
logger.error e.message
|
30
26
|
exit 1
|
data/lib/jekyll_recker/mixins.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require 'logger'
|
4
|
+
|
3
5
|
module Jekyll
|
4
6
|
module Recker
|
5
7
|
module Mixins
|
@@ -14,6 +16,17 @@ module Jekyll
|
|
14
16
|
end
|
15
17
|
end
|
16
18
|
|
19
|
+
# Introspection
|
20
|
+
module Introspection
|
21
|
+
def self.included(base)
|
22
|
+
base.extend(self)
|
23
|
+
end
|
24
|
+
|
25
|
+
def class_name
|
26
|
+
self.class.name.split('::').last
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
17
30
|
# Logging
|
18
31
|
module Logging
|
19
32
|
def self.included(base)
|
@@ -21,7 +34,10 @@ module Jekyll
|
|
21
34
|
end
|
22
35
|
|
23
36
|
def logger
|
24
|
-
|
37
|
+
@logger ||= Logger.new(
|
38
|
+
STDOUT,
|
39
|
+
formatter: proc { |_severity, _datetime, _progname, msg| "jekyll-recker: #{msg}\n" }
|
40
|
+
)
|
25
41
|
end
|
26
42
|
end
|
27
43
|
end
|
@@ -0,0 +1,173 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'slack-notifier'
|
4
|
+
require 'twitter'
|
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
|
26
|
+
|
27
|
+
def initialize(dry: false)
|
28
|
+
@dry = dry
|
29
|
+
end
|
30
|
+
|
31
|
+
def dry?
|
32
|
+
@dry
|
33
|
+
end
|
34
|
+
|
35
|
+
def config
|
36
|
+
@config ||= Jekyll::Recker::Configuration.recker.fetch(config_key)
|
37
|
+
end
|
38
|
+
|
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
|
52
|
+
|
53
|
+
def latest
|
54
|
+
@latest ||= Configuration.latest_post
|
55
|
+
end
|
56
|
+
|
57
|
+
def latest_title
|
58
|
+
latest.data['title']
|
59
|
+
end
|
60
|
+
|
61
|
+
def configure!
|
62
|
+
raise NotImplementedError
|
63
|
+
end
|
64
|
+
|
65
|
+
def post!
|
66
|
+
raise NotImplementedError
|
67
|
+
end
|
68
|
+
end
|
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
|
81
|
+
|
82
|
+
@creds[key] = webhook
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
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
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
private
|
104
|
+
|
105
|
+
def extract_from_config(data)
|
106
|
+
cmd = data['webhook_cmd']
|
107
|
+
return nil if cmd.nil?
|
108
|
+
|
109
|
+
Jekyll::Recker.shell(cmd)
|
110
|
+
end
|
111
|
+
|
112
|
+
def workspaces
|
113
|
+
config.each
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
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?
|
124
|
+
|
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
|
131
|
+
end
|
132
|
+
|
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
|
140
|
+
end
|
141
|
+
|
142
|
+
private
|
143
|
+
|
144
|
+
def extract_from_env
|
145
|
+
values = cred_fieldnames.map { |k| ENV["TWITTER_#{k.upcase}"] }
|
146
|
+
|
147
|
+
return nil if values.any? { |v| v.nil? || v.empty? }
|
148
|
+
|
149
|
+
Hash[cred_fieldnames.zip(values)]
|
150
|
+
end
|
151
|
+
|
152
|
+
def extract_from_config
|
153
|
+
values = cred_fieldnames.map do |k|
|
154
|
+
Recker.shell(Configuration.twitter["#{k}_cmd"]).strip
|
155
|
+
end
|
156
|
+
|
157
|
+
return nil if values.any? { |v| v.nil? || v.empty? }
|
158
|
+
|
159
|
+
Hash[cred_fieldnames.zip(values)]
|
160
|
+
end
|
161
|
+
|
162
|
+
def cred_fieldnames
|
163
|
+
[
|
164
|
+
'access_token_secret',
|
165
|
+
'access_token',
|
166
|
+
'consumer_api_key',
|
167
|
+
'consumer_api_secret'
|
168
|
+
]
|
169
|
+
end
|
170
|
+
end
|
171
|
+
end
|
172
|
+
end
|
173
|
+
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.
|
4
|
+
version: 1.7.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-
|
11
|
+
date: 2020-07-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bump
|
@@ -108,20 +108,6 @@ dependencies:
|
|
108
108
|
- - "~>"
|
109
109
|
- !ruby/object:Gem::Version
|
110
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
111
|
- !ruby/object:Gem::Dependency
|
126
112
|
name: slack-notifier
|
127
113
|
requirement: !ruby/object:Gem::Requirement
|
@@ -172,15 +158,12 @@ files:
|
|
172
158
|
- lib/jekyll_recker/commands.rb
|
173
159
|
- lib/jekyll_recker/configuration.rb
|
174
160
|
- lib/jekyll_recker/error.rb
|
175
|
-
- lib/jekyll_recker/facebook.rb
|
176
161
|
- lib/jekyll_recker/filters.rb
|
177
162
|
- lib/jekyll_recker/generators.rb
|
178
|
-
- lib/jekyll_recker/logger.rb
|
179
163
|
- lib/jekyll_recker/mixins.rb
|
180
164
|
- lib/jekyll_recker/shell.rb
|
181
|
-
- lib/jekyll_recker/
|
165
|
+
- lib/jekyll_recker/social.rb
|
182
166
|
- lib/jekyll_recker/tags.rb
|
183
|
-
- lib/jekyll_recker/twitter.rb
|
184
167
|
- lib/jekyll_recker/version.rb
|
185
168
|
- lib/jekyll_recker/words.rb
|
186
169
|
homepage: https://www.github.com/arecker/jekyll-recker/
|
@@ -1,97 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'koala'
|
4
|
-
|
5
|
-
module Jekyll
|
6
|
-
module Recker
|
7
|
-
# Facebook Client
|
8
|
-
class Facebook
|
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 "sharing #{client.latest.data['title']}"
|
16
|
-
client.post_latest!
|
17
|
-
end
|
18
|
-
|
19
|
-
def initialize(dry: false)
|
20
|
-
@dry = dry
|
21
|
-
end
|
22
|
-
|
23
|
-
def discover_credentials!
|
24
|
-
@creds = extract_from_env || extract_from_config
|
25
|
-
raise ReckerError, 'cannot find facebook credentials!' if @creds.nil?
|
26
|
-
|
27
|
-
set_credentials!
|
28
|
-
end
|
29
|
-
|
30
|
-
def post_latest!
|
31
|
-
if @dry
|
32
|
-
logger.info('posting in dry mode, printing message')
|
33
|
-
logger.info("BEGIN POST\n#{post_body.strip}\nEND POST")
|
34
|
-
else
|
35
|
-
@graph.put_connections("me", "feed", message: "I am writing on my wall!")
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
def latest
|
40
|
-
Configuration.latest_post
|
41
|
-
end
|
42
|
-
|
43
|
-
private
|
44
|
-
|
45
|
-
def post_body
|
46
|
-
url = File.join Configuration.jekyll['url'], latest.url
|
47
|
-
<<~POST
|
48
|
-
#{latest.data['date'].strftime('%A, %B %-d %Y')}
|
49
|
-
#{latest.data['title']}
|
50
|
-
#{url}
|
51
|
-
POST
|
52
|
-
end
|
53
|
-
|
54
|
-
def set_credentials!
|
55
|
-
Koala.configure do |config|
|
56
|
-
config.access_token = @creds['access_token']
|
57
|
-
# config.app_access_token = @creds['app_access_token']
|
58
|
-
config.app_id = @creds['app_id']
|
59
|
-
config.app_secret = @creds['app_secret']
|
60
|
-
end
|
61
|
-
@client = Koala::Facebook::API.new(@creds['access_token'])
|
62
|
-
end
|
63
|
-
|
64
|
-
def extract_from_env
|
65
|
-
values = cred_fieldnames.map { |k| ENV["FACEBOOK_#{k.upcase}"] }
|
66
|
-
|
67
|
-
return nil if values.any? { |v| v.nil? || v.empty? }
|
68
|
-
|
69
|
-
Hash[cred_fieldnames.zip(values)]
|
70
|
-
end
|
71
|
-
|
72
|
-
def extract_from_config
|
73
|
-
values = cred_fieldnames.map do |k|
|
74
|
-
cmd = Configuration.facebook.fetch("#{k}_cmd", '').strip
|
75
|
-
if cmd.empty?
|
76
|
-
nil
|
77
|
-
else
|
78
|
-
Recker.shell(Configuration.facebook["#{k}_cmd"]).strip
|
79
|
-
end
|
80
|
-
end
|
81
|
-
|
82
|
-
return nil if values.any? { |v| v.nil? || v.empty? }
|
83
|
-
|
84
|
-
Hash[cred_fieldnames.zip(values)]
|
85
|
-
end
|
86
|
-
|
87
|
-
def cred_fieldnames
|
88
|
-
# app_access_token
|
89
|
-
%w[
|
90
|
-
access_token
|
91
|
-
app_id
|
92
|
-
app_secret
|
93
|
-
]
|
94
|
-
end
|
95
|
-
end
|
96
|
-
end
|
97
|
-
end
|
data/lib/jekyll_recker/logger.rb
DELETED
@@ -1,20 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'logger'
|
4
|
-
|
5
|
-
module Jekyll
|
6
|
-
# Recker
|
7
|
-
module Recker
|
8
|
-
def self.logger
|
9
|
-
@logger ||= make_logger
|
10
|
-
end
|
11
|
-
|
12
|
-
def self.make_logger
|
13
|
-
logger = Logger.new(STDOUT)
|
14
|
-
logger.formatter = proc do |_severity, _datetime, _progname, msg|
|
15
|
-
"jekyll-recker: #{msg}\n"
|
16
|
-
end
|
17
|
-
logger
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
data/lib/jekyll_recker/slack.rb
DELETED
@@ -1,79 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'slack-notifier'
|
4
|
-
|
5
|
-
module Jekyll
|
6
|
-
# Recker
|
7
|
-
module Recker
|
8
|
-
# Slack
|
9
|
-
class Slack
|
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
|
20
|
-
|
21
|
-
def self.each_in_config(dry: false)
|
22
|
-
Configuration.slack.map do |key, body|
|
23
|
-
yield new(key, body, dry: dry)
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
attr_reader :key
|
28
|
-
|
29
|
-
def initialize(config_key, config_body, dry: false)
|
30
|
-
@key = config_key
|
31
|
-
@data = config_body
|
32
|
-
@webhook = nil
|
33
|
-
@dry = dry
|
34
|
-
end
|
35
|
-
|
36
|
-
def discover_webhook!
|
37
|
-
@webhook = ENV["SLACK_#{@key.upcase}_WEBHOOK"] || extract_from_config
|
38
|
-
raise ReckerError, 'cannot find slack credentials!' if @webhook.nil?
|
39
|
-
end
|
40
|
-
|
41
|
-
def latest
|
42
|
-
@latest ||= Configuration.latest_post
|
43
|
-
end
|
44
|
-
|
45
|
-
def post_latest!
|
46
|
-
if @dry
|
47
|
-
logger.info('postign in dry mode, printing message')
|
48
|
-
logger.info("BEGIN MESSAGE\n#{message_body.strip}\nEND MESSAGE")
|
49
|
-
else
|
50
|
-
::Slack::Notifier.new(
|
51
|
-
@webhook.strip,
|
52
|
-
channel: @data.fetch('channel'),
|
53
|
-
username: @data.fetch('username'),
|
54
|
-
icon_emoji: @data.fetch('emoji')
|
55
|
-
).post(text: message_body)
|
56
|
-
end
|
57
|
-
end
|
58
|
-
|
59
|
-
private
|
60
|
-
|
61
|
-
def message_body
|
62
|
-
url = File.join Configuration.jekyll['url'], latest.url
|
63
|
-
body = <<~MSG
|
64
|
-
#{latest.data['date'].strftime('%A, %B %-d %Y')}
|
65
|
-
#{latest.data['title']}
|
66
|
-
#{url}
|
67
|
-
MSG
|
68
|
-
::Slack::Notifier::Util::LinkFormatter.format(body)
|
69
|
-
end
|
70
|
-
|
71
|
-
def extract_from_config
|
72
|
-
cmd = @data['webhook_cmd']
|
73
|
-
return nil if cmd.nil?
|
74
|
-
|
75
|
-
Recker.shell(cmd)
|
76
|
-
end
|
77
|
-
end
|
78
|
-
end
|
79
|
-
end
|
@@ -1,91 +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 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
|
18
|
-
|
19
|
-
def initialize(dry: false)
|
20
|
-
@dry = dry
|
21
|
-
end
|
22
|
-
|
23
|
-
def discover_credentials!
|
24
|
-
@creds = extract_from_env || extract_from_config
|
25
|
-
raise ReckerError, 'cannot find twitter credentials!' if @creds.nil?
|
26
|
-
|
27
|
-
set_credentials!
|
28
|
-
end
|
29
|
-
|
30
|
-
def post_latest!
|
31
|
-
if @dry
|
32
|
-
logger.info('tweeting in dry mode, printing message')
|
33
|
-
logger.info("BEGIN TWEET\n#{tweet_body.strip}\nEND TWEET")
|
34
|
-
else
|
35
|
-
@client.update(tweet_body)
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
def latest
|
40
|
-
Configuration.latest_post
|
41
|
-
end
|
42
|
-
|
43
|
-
private
|
44
|
-
|
45
|
-
def tweet_body
|
46
|
-
url = File.join Configuration.jekyll['url'], latest.url
|
47
|
-
<<~TWEET
|
48
|
-
#{latest.data['date'].strftime('%A, %B %-d %Y')}
|
49
|
-
#{latest.data['title']}
|
50
|
-
#{url}
|
51
|
-
TWEET
|
52
|
-
end
|
53
|
-
|
54
|
-
def set_credentials!
|
55
|
-
@client ||= ::Twitter::REST::Client.new do |settings|
|
56
|
-
settings.consumer_key = @creds['consumer_api_key']
|
57
|
-
settings.consumer_secret = @creds['consumer_api_secret']
|
58
|
-
settings.access_token = @creds['access_token']
|
59
|
-
settings.access_token_secret = @creds['access_token_secret']
|
60
|
-
end
|
61
|
-
end
|
62
|
-
|
63
|
-
def extract_from_env
|
64
|
-
values = cred_fieldnames.map { |k| ENV["TWITTER_#{k.upcase}"] }
|
65
|
-
|
66
|
-
return nil if values.any? { |v| v.nil? || v.empty? }
|
67
|
-
|
68
|
-
Hash[cred_fieldnames.zip(values)]
|
69
|
-
end
|
70
|
-
|
71
|
-
def extract_from_config
|
72
|
-
values = cred_fieldnames.map do |k|
|
73
|
-
Recker.shell(Configuration.twitter["#{k}_cmd"]).strip
|
74
|
-
end
|
75
|
-
|
76
|
-
return nil if values.any? { |v| v.nil? || v.empty? }
|
77
|
-
|
78
|
-
Hash[cred_fieldnames.zip(values)]
|
79
|
-
end
|
80
|
-
|
81
|
-
def cred_fieldnames
|
82
|
-
%w[
|
83
|
-
access_token_secret
|
84
|
-
access_token
|
85
|
-
consumer_api_key
|
86
|
-
consumer_api_secret
|
87
|
-
]
|
88
|
-
end
|
89
|
-
end
|
90
|
-
end
|
91
|
-
end
|