jekyll-recker 1.5.0 → 1.6.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: efd3587e247f83a9294d79e67abe0edf58dfe64aa413a18ee591bc2b5225687e
4
- data.tar.gz: 28f7d50132af62ac1955dbc5657e54f1c4f67a996d34c79aded6add417a815c1
3
+ metadata.gz: 3e0cc3d6cafa2518fb5819ad8cc4a6db7ecf88e214b0e998468f521d0ec19a37
4
+ data.tar.gz: e623e1c53b62d3ccf0a55ac572ef0fc4257e03cdf7faf543baa1f5ce7d0a40ed
5
5
  SHA512:
6
- metadata.gz: df34b7690acd0abd08d79271e3c262e7367c184968bb6db587e681f0a5df3b62e7d1f54bd6f346c684e77541cf1f8acb979e55f9a460a4acac786d59ba48db3c
7
- data.tar.gz: 0f90b95a366cbffde52647320aca1152322f36eccc5f791dd393696f1414da630624bb2bdadf54f632f378b1d3cb55af61b0d59308c704952fc344914df8fa44
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 ACCESS_TOKEN_SECRET="..."
99
- export ACCESS_TOKEN="..."
100
- export CONSUMER_API_KEY="..."
101
- export CONSUMER_API_SECRET="..."
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
@@ -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(_args, options)
38
- Recker::Slack.each_in_config(dry: options['dry']) do |client|
39
- logger.info "#{client.key}: discovering webhook"
40
- client.discover_webhook!
41
- logger.info "#{client.key}: posting #{client.latest.data['title']}"
42
- client.post_latest!
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.abort_with e.message
46
- end
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
@@ -12,6 +12,10 @@ module Jekyll
12
12
  jekyll.fetch('recker', {})
13
13
  end
14
14
 
15
+ def self.facebook
16
+ recker.fetch('facebook', {})
17
+ end
18
+
15
19
  def self.twitter
16
20
  recker.fetch('twitter', {})
17
21
  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
@@ -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
 
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Jekyll
4
4
  module Recker
5
- VERSION = '1.5.0'
5
+ VERSION = '1.6.0'
6
6
  end
7
7
  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.5.0
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