jekyll-webmention_io 2.3.0 → 2.5.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
  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