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 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