jekyll-webmention_io 2.3.0 → 2.5.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
  SHA1:
3
- metadata.gz: c117bdfd999aabbbaf34a7baa34510806ec30250
4
- data.tar.gz: df0874f2a17993d0fc40fc8d826b1fe7f64c3cb6
3
+ metadata.gz: 02faf38bb1fff4fb2fdb3e3274bbef6a97374912
4
+ data.tar.gz: 4f15f2fc0a505a8cabed08d870dd03cfb434add7
5
5
  SHA512:
6
- metadata.gz: 90bac1c91f4c780eb9ad39ee4eec4dad12272797bd8d00ec3e7924c670449450281b0e6b2970877202ca8d9b9fc490ae4426f207aee29b552fb291817434d069
7
- data.tar.gz: 89524277af525e270403ed3f9e57cfa966e72348fbb61971d44f435ba362d4fedd8c711ce4b529f1636762d46f8c89d17d699e94b512a58f8f4972c49261dec6
6
+ metadata.gz: a99c35424a946da6fd8eaed7c00311bab66787f970c9f91d0c79c466bd4f6b3bc7a0816bb8288f3ef467fead2a8ae8613e2dde9a47c34b13d34133d6026e40c6
7
+ data.tar.gz: 4556763d36bea886bd93df5f6f8ba8516a83f5920ed2dad23a0add451bb8cce68120afd911d4b74e208b9677936e692d658f1cf8562718ff0fead673a1b3bc7b
@@ -1,3 +1,5 @@
1
+ require 'json'
2
+
1
3
  module Jekyll
2
4
  module Commands
3
5
  class WebmentionCommand < Command
@@ -11,21 +13,16 @@ module Jekyll
11
13
  end
12
14
 
13
15
  def self.process( args=[], options={} )
16
+ if File.exists? "#{Jekyll::WebmentionIO::cache_folder}/#{Jekyll::WebmentionIO::file_prefix}sent.yml"
17
+ Jekyll::WebmentionIO::log 'error', 'Your outgoing webmentions queue needs to be upgraded. Please re-build your project.'
18
+ end
19
+ count = 0
14
20
  cached_outgoing = Jekyll::WebmentionIO::get_cache_file_path 'outgoing'
15
- cached_sent = Jekyll::WebmentionIO::get_cache_file_path 'sent'
16
21
  if File.exists?(cached_outgoing)
17
- if File.exists?(cached_sent)
18
- sent = open(cached_sent) { |f| YAML.load(f) }
19
- else
20
- sent = {}
21
- end # file exists (sent)
22
22
  outgoing = open(cached_outgoing) { |f| YAML.load(f) }
23
- outgoing.each_pair do |source, targets|
24
- if ! sent[source] or ! sent[source].kind_of? Array
25
- sent[source] = Array.new
26
- end
27
- targets.each do |target|
28
- if target and ! sent[source].find_index( target )
23
+ outgoing.each do |source, targets|
24
+ targets.each do |target, response|
25
+ if response === false
29
26
  if target.index( "//" ) == 0
30
27
  target = "http:#{target}"
31
28
  end
@@ -33,13 +30,17 @@ module Jekyll
33
30
  if endpoint
34
31
  response = Jekyll::WebmentionIO::webmention( source, target, endpoint )
35
32
  if response
36
- sent[source].push( target )
33
+ outgoing[source][target] = JSON.parse response.body
34
+ count += 1
37
35
  end
38
36
  end
39
37
  end
40
38
  end
41
39
  end
42
- File.open(cached_sent, 'w') { |f| YAML.dump(sent, f) }
40
+ if count > 0
41
+ File.open(cached_outgoing, 'w') { |f| YAML.dump(outgoing, f) }
42
+ end
43
+ Jekyll::WebmentionIO::log 'info', "#{count} webmentions sent."
43
44
  end # file exists (outgoing)
44
45
  end # def process
45
46
  end # WebmentionCommand
@@ -24,11 +24,7 @@ module Jekyll
24
24
  Jekyll::WebmentionIO::set_api_suffix('&perPage=9999')
25
25
 
26
26
  cache_file = Jekyll::WebmentionIO::get_cache_file_path 'incoming'
27
- if File.exists?(cache_file)
28
- @cached_webmentions = open(cache_file) { |f| YAML.load(f) }
29
- else
30
- @cached_webmentions = {}
31
- end
27
+ @cached_webmentions = open(cache_file) { |f| YAML.load(f) }
32
28
 
33
29
  if Jekyll::VERSION >= "3.0.0"
34
30
  posts = site.posts.docs
@@ -48,11 +44,19 @@ module Jekyll
48
44
  posts.each do |post|
49
45
  # Gather the URLs
50
46
  targets = get_webmention_target_urls(site, post)
47
+
48
+ # Get the last id we have in the hash
49
+ since_id = false
50
+ if @cached_webmentions.has_key? post.url
51
+ past_webmentions = @cached_webmentions[post.url]
52
+ since_id = past_webmentions[past_webmentions.keys.last]['raw']['id']
53
+ end
51
54
 
52
55
  # execute the API
53
56
  api_params = targets.collect { |v| "target[]=#{v}" }.join('&')
57
+ api_params << "&since_id=#{since_id}" if since_id
54
58
  response = Jekyll::WebmentionIO::get_response(api_params)
55
- # @webmention_io.log 'info', response.inspect
59
+ # Jekyll::WebmentionIO::log 'info', response.inspect
56
60
 
57
61
  process_webmentions( post.url, response )
58
62
  end # posts loop
@@ -157,8 +161,8 @@ module Jekyll
157
161
  # webmentions[the_date] = {}
158
162
  # end
159
163
 
160
- # Make sure we have the webmention
161
- if ! webmentions.has_key? id
164
+ # Make sure we don’t have the webmention
165
+ unless webmentions.has_key? id
162
166
 
163
167
  # Scaffold the webmention
164
168
  webmention = {
@@ -237,7 +241,7 @@ module Jekyll
237
241
  # @webmention_io.log 'info', webmention.inspect
238
242
  webmentions[id] = webmention
239
243
 
240
- end # if ID does not exist
244
+ end # Make sure we don’t have the webmention
241
245
 
242
246
  end # each link
243
247
 
@@ -12,44 +12,82 @@ module Jekyll
12
12
  priority :low
13
13
 
14
14
  def generate(site)
15
- if site.config['webmentions']['pause_lookups'] == true
16
- Jekyll::WebmentionIO::log 'info', 'Webmention lookups are currently paused.'
17
- return
18
- end
15
+ if site.config['webmentions']['pause_lookups'] == true
16
+ Jekyll::WebmentionIO::log 'info', 'Webmention lookups are currently paused.'
17
+ return
18
+ end
19
19
 
20
- Jekyll::WebmentionIO::log 'info', 'Beginning to gather webmentions you’ve made. This may take a while.'
20
+ Jekyll::WebmentionIO::log 'info', 'Beginning to gather webmentions you’ve made. This may take a while.'
21
21
 
22
- webmentions = {}
22
+ upgrade_outgoing_webmention_cache()
23
+
24
+ cache_file = Jekyll::WebmentionIO::get_cache_file_path 'outgoing'
25
+ webmentions = open(cache_file) { |f| YAML.load(f) }
23
26
 
24
27
  if Jekyll::VERSION >= "3.0.0"
25
- posts = site.posts.docs
26
- else
27
- posts = site.posts
28
- end
29
-
28
+ posts = site.posts.docs
29
+ else
30
+ posts = site.posts
31
+ end
32
+
30
33
  posts.each do |post|
31
34
  uri = "#{site.config['url']}#{post.url}"
32
- webmentions[uri] = get_mentioned_uris(post)
35
+ mentions = get_mentioned_uris(post)
36
+ if webmentions.has_key? uri
37
+ mentions.each do |mentioned_uri, response|
38
+ unless webmentions[uri].has_key? mentioned_uri
39
+ webmentions[uri][mentioned_uri] = response
40
+ end
41
+ end
42
+ else
43
+ webmentions[uri] = mentions
44
+ end
33
45
  end
34
46
 
35
- cache_file = Jekyll::WebmentionIO::get_cache_file_path 'outgoing'
47
+ cache_file = Jekyll::WebmentionIO::get_cache_file_path 'outgoing'
36
48
  File.open(cache_file, 'w') { |f| YAML.dump(webmentions, f) }
37
49
 
38
- Jekyll::WebmentionIO::log 'info', 'Webmentions have been gathered and cached.'
50
+ Jekyll::WebmentionIO::log 'info', 'Webmentions have been gathered and cached.'
39
51
  end
40
52
 
53
+ def upgrade_outgoing_webmention_cache
54
+ old_sent_file = "#{Jekyll::WebmentionIO::cache_folder}/#{Jekyll::WebmentionIO::file_prefix}sent.yml"
55
+ old_outgoing_file = "#{Jekyll::WebmentionIO::cache_folder}/#{Jekyll::WebmentionIO::file_prefix}queued.yml"
56
+ unless File.exists? old_sent_file
57
+ return
58
+ end
59
+ sent_webmentions = open(old_sent_file) { |f| YAML.load(f) }
60
+ outgoing_webmentions = open(old_outgoing_file) { |f| YAML.load(f) }
61
+ merged = {}
62
+ outgoing_webmentions.each do |source_url, webmentions|
63
+ collection = {}
64
+ webmentions.each do |target_url|
65
+ if sent_webmentions.has_key? source_url and sent_webmentions[source_url].include? target_url
66
+ collection[target_url] = ""
67
+ else
68
+ collection[target_url] = false
69
+ end
70
+ end
71
+ merged[source_url] = collection
72
+ end
73
+ cached_outgoing = Jekyll::WebmentionIO::get_cache_file_path 'outgoing'
74
+ File.open(cached_outgoing, 'w') { |f| YAML.dump(merged, f) }
75
+ File.delete old_sent_file, old_outgoing_file
76
+ Jekyll::WebmentionIO::log 'info', 'Upgraded your sent webmentions cache.'
77
+ end
78
+
41
79
  def get_mentioned_uris(post)
42
- uris = []
43
- if post.data['in_reply_to']
44
- uris.push(post.data['in_reply_to'])
45
- end
46
- post.content.scan(/(?:https?:)?\/\/[^\s)#"]+/) do |match|
47
- if ! uris.find_index( match )
48
- uris.push(match)
49
- end
50
- end
51
- return uris
52
- end
80
+ uris = {}
81
+ if post.data['in_reply_to']
82
+ uris[post.data['in_reply_to']] = false
83
+ end
84
+ post.content.scan(/(?:https?:)?\/\/[^\s)#"]+/) do |match|
85
+ unless uris.has_key? match
86
+ uris[match] = false
87
+ end
88
+ end
89
+ return uris
90
+ end
53
91
 
54
92
  end
55
93
  end
@@ -1,5 +1,5 @@
1
1
  module Jekyll
2
2
  module WebmentionIO
3
- VERSION = "2.3.0"
3
+ VERSION = "2.5.0"
4
4
  end
5
5
  end
@@ -31,17 +31,16 @@ module Jekyll
31
31
  @config = @jekyll_config['webmentions'] || {}
32
32
 
33
33
  # Set up the cache folder & files
34
- cache_folder = @config['cache_folder'] || '.jekyll-cache'
35
- Dir.mkdir(cache_folder) unless File.exists?(cache_folder)
36
- file_prefix = ''
37
- if ! cache_folder.include? 'webmention'
38
- file_prefix = 'webmention_io_'
34
+ @cache_folder = @config['cache_folder'] || '.jekyll-cache'
35
+ Dir.mkdir(@cache_folder) unless File.exists?(@cache_folder)
36
+ @file_prefix = ''
37
+ if ! @cache_folder.include? 'webmention'
38
+ @file_prefix = 'webmention_io_'
39
39
  end
40
40
  @cache_files = {
41
- 'incoming' => "#{cache_folder}/#{file_prefix}received.yml",
42
- 'outgoing' => "#{cache_folder}/#{file_prefix}queued.yml",
43
- 'sent' => "#{cache_folder}/#{file_prefix}sent.yml",
44
- 'bad_uris' => "#{cache_folder}/#{file_prefix}bad_uris.yml"
41
+ 'incoming' => "#{@cache_folder}/#{@file_prefix}received.yml",
42
+ 'outgoing' => "#{@cache_folder}/#{@file_prefix}outgoing.yml",
43
+ 'bad_uris' => "#{@cache_folder}/#{@file_prefix}bad_uris.yml"
45
44
  }
46
45
  @cache_files.each do |key, file|
47
46
  if ! File.exists?(file)
@@ -60,6 +59,12 @@ module Jekyll
60
59
  def self.cache_files
61
60
  @cache_files
62
61
  end
62
+ def self.cache_folder
63
+ @cache_folder
64
+ end
65
+ def self.file_prefix
66
+ @file_prefix
67
+ end
63
68
  def self.types
64
69
  @types
65
70
  end
@@ -98,18 +103,24 @@ module Jekyll
98
103
  end
99
104
 
100
105
  def self.get_webmention_endpoint( uri )
101
- log 'info', "Looking for webmention endpoint at #{uri}"
106
+ # log 'info', "Looking for webmention endpoint at #{uri}"
102
107
  endpoint = Webmention::Client.supports_webmention?( uri )
103
- if ! endpoint
104
- log 'info', "No webmention endpoint at #{uri}"
105
- end
108
+ # if ! endpoint
109
+ # log 'info', "No webmention endpoint at #{uri}"
110
+ # end
106
111
  endpoint
107
112
  end
108
113
 
109
114
  def self.webmention( source, target, endpoint )
110
- log 'info', "Sending webmention of #{target} in #{source} to #{endpoint}"
115
+ log 'info', "Sending webmention of #{target} in #{source}"
111
116
  #return `curl -s -i -d \"source=#{source}&target=#{target}\" -o /dev/null #{endpoint}`
112
- return Webmention::Client.send_mention( endpoint, source, target, true )
117
+ response = Webmention::Client.send_mention( endpoint, source, target, true )
118
+ if response
119
+ log 'info', "Webmention successful!"
120
+ else
121
+ log 'info', "Webmention failed, but will remain queued for next time"
122
+ end
123
+ response
113
124
  end
114
125
 
115
126
  # Utilities
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jekyll-webmention_io
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.3.0
4
+ version: 2.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aaron Gustafson
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-07-05 00:00:00.000000000 Z
11
+ date: 2017-07-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: jekyll