jekyll-recker 1.5.0 → 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.
- checksums.yaml +4 -4
- data/README.md +4 -4
- data/lib/jekyll-recker.rb +1 -0
- data/lib/jekyll_recker/commands.rb +9 -48
- data/lib/jekyll_recker/configuration.rb +4 -0
- data/lib/jekyll_recker/facebook.rb +97 -0
- data/lib/jekyll_recker/slack.rb +9 -0
- data/lib/jekyll_recker/twitter.rb +9 -1
- data/lib/jekyll_recker/version.rb +1 -1
- metadata +16 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3e0cc3d6cafa2518fb5819ad8cc4a6db7ecf88e214b0e998468f521d0ec19a37
|
4
|
+
data.tar.gz: e623e1c53b62d3ccf0a55ac572ef0fc4257e03cdf7faf543baa1f5ce7d0a40ed
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b45d3daae8d8af21c963a412d8430dce81bafaff270a35ca94444b01e74a7d4bd25e422a3ac9afb958bb3693cd7359d4bab70a07776d1da7c3637a38d633eed7
|
7
|
+
data.tar.gz: 4f6aadcd49f0b0d71232ab67c361d3aac1e5a91887272d39e826e3300afa8e0cf872b2154f6e5371dda74a5fd8ea9ac928bd7a2acc6b98357be2e87b75d25903
|
data/README.md
CHANGED
@@ -95,10 +95,10 @@ Configure the tweet share in `_config.yml`.
|
|
95
95
|
|
96
96
|
Alternatively, ensure these environment variables are set.
|
97
97
|
|
98
|
-
export
|
99
|
-
export
|
100
|
-
export
|
101
|
-
export
|
98
|
+
export TWITTER_ACCESS_TOKEN_SECRET="..."
|
99
|
+
export TWITTER_ACCESS_TOKEN="..."
|
100
|
+
export TWITTER_CONSUMER_API_KEY="..."
|
101
|
+
export TWITTER_CONSUMER_API_SECRET="..."
|
102
102
|
|
103
103
|
[example slack]: screenshots/example-slack.png
|
104
104
|
[example tweet]: screenshots/example-tweet.png
|
data/lib/jekyll-recker.rb
CHANGED
@@ -11,6 +11,7 @@ module Jekyll
|
|
11
11
|
require 'jekyll_recker/commands.rb'
|
12
12
|
require 'jekyll_recker/configuration.rb'
|
13
13
|
require 'jekyll_recker/error.rb'
|
14
|
+
require 'jekyll_recker/facebook.rb'
|
14
15
|
require 'jekyll_recker/filters.rb'
|
15
16
|
require 'jekyll_recker/generators.rb'
|
16
17
|
require 'jekyll_recker/shell.rb'
|
@@ -13,60 +13,21 @@ module Jekyll
|
|
13
13
|
c.syntax 'share'
|
14
14
|
c.description 'Share latest post with each configured backend'
|
15
15
|
c.option 'dry', '-d', '--dry', 'perform dry run'
|
16
|
-
c.action do |_args, _options|
|
17
|
-
logger.info 'normally I\'d share here'
|
18
|
-
rescue ReckerError => e
|
19
|
-
logger.abort_with e.message
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
# Slack
|
26
|
-
class Slack < Jekyll::Command
|
27
|
-
include Mixins::Logging
|
28
|
-
def self.init_with_program(prog)
|
29
|
-
prog.command(:slack) do |c|
|
30
|
-
c.syntax 'slack'
|
31
|
-
c.description 'slack latest post'
|
32
|
-
c.option 'dry', '-d', '--dry', 'print message instead of posting'
|
33
16
|
c.action { |args, opts| action(args, opts) }
|
34
17
|
end
|
35
18
|
end
|
36
19
|
|
37
|
-
def self.action(
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
20
|
+
def self.action(args, options)
|
21
|
+
if args.empty? || args.include?('slack')
|
22
|
+
Recker::Slack.share(dry: options['dry'])
|
23
|
+
elsif args.empty? || args.include?('twitter')
|
24
|
+
Recker::Twitter.share(dry: options['dry'])
|
25
|
+
# elsif args.empty? || args.include?('facebook')
|
26
|
+
# Recker::Facebook.share(dry: options['dry'])
|
43
27
|
end
|
44
28
|
rescue ReckerError => e
|
45
|
-
logger.
|
46
|
-
|
47
|
-
end
|
48
|
-
|
49
|
-
# Tweet
|
50
|
-
class Tweet < Jekyll::Command
|
51
|
-
include Mixins::Logging
|
52
|
-
|
53
|
-
def self.init_with_program(prog)
|
54
|
-
prog.command(:tweet) do |c|
|
55
|
-
c.syntax 'tweet'
|
56
|
-
c.description 'tweet latest post'
|
57
|
-
c.option 'dry', '-d', '--dry', 'print message instead of tweeting'
|
58
|
-
c.action { |args, opts| action(args, opts) }
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
|
-
def self.action(_args, options)
|
63
|
-
client = Jekyll::Recker::Twitter.new(dry: options['dry'])
|
64
|
-
logger.info 'discovering credentials'
|
65
|
-
client.discover_credentials!
|
66
|
-
logger.info "tweeting #{client.latest.data['title']}"
|
67
|
-
client.post_latest!
|
68
|
-
rescue ReckerError => e
|
69
|
-
logger.abort_with e.message
|
29
|
+
logger.error e.message
|
30
|
+
exit 1
|
70
31
|
end
|
71
32
|
end
|
72
33
|
end
|
@@ -0,0 +1,97 @@
|
|
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/slack.rb
CHANGED
@@ -9,6 +9,15 @@ module Jekyll
|
|
9
9
|
class Slack
|
10
10
|
include Jekyll::Recker::Mixins::Logging
|
11
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
|
+
|
12
21
|
def self.each_in_config(dry: false)
|
13
22
|
Configuration.slack.map do |key, body|
|
14
23
|
yield new(key, body, dry: dry)
|
@@ -8,6 +8,14 @@ module Jekyll
|
|
8
8
|
class Twitter
|
9
9
|
include Mixins::Logging
|
10
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
|
+
|
11
19
|
def initialize(dry: false)
|
12
20
|
@dry = dry
|
13
21
|
end
|
@@ -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
|
|
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.
|
4
|
+
version: 1.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alex Recker
|
@@ -108,6 +108,20 @@ 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'
|
111
125
|
- !ruby/object:Gem::Dependency
|
112
126
|
name: slack-notifier
|
113
127
|
requirement: !ruby/object:Gem::Requirement
|
@@ -158,6 +172,7 @@ files:
|
|
158
172
|
- lib/jekyll_recker/commands.rb
|
159
173
|
- lib/jekyll_recker/configuration.rb
|
160
174
|
- lib/jekyll_recker/error.rb
|
175
|
+
- lib/jekyll_recker/facebook.rb
|
161
176
|
- lib/jekyll_recker/filters.rb
|
162
177
|
- lib/jekyll_recker/generators.rb
|
163
178
|
- lib/jekyll_recker/logger.rb
|