jekyll-embedly-plugin 0.3.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 +7 -0
- data/lib/jekyll-embedly-plugin.rb +154 -0
- metadata +100 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 37503478e64c99b4bd919a82d10f8e80a441e7e1
|
4
|
+
data.tar.gz: 4c377f7e19e30b0137bf3ac6724026c24ac8495f
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: a97687d92cfd774aade1ba8bd85411b923af020b47bd3c99f6903f5e6eae654404893e80d57470b5988b7dae084fe1ae6e7f728bc0aac22f48bc12d0f651aeb5
|
7
|
+
data.tar.gz: 04681e76338b6d77bbca11b274cdc73fd473021cc4c7e175ed5ca8924e47344084a515986be57d0970d3522267b7a27836ca8b2e853e829bbe42e955191d1f77
|
@@ -0,0 +1,154 @@
|
|
1
|
+
require "net/https"
|
2
|
+
require "uri"
|
3
|
+
require "json"
|
4
|
+
require "domainatrix"
|
5
|
+
require "compose_url"
|
6
|
+
|
7
|
+
module JekyllEmbedlyPlugin
|
8
|
+
|
9
|
+
class FileCache
|
10
|
+
def initialize
|
11
|
+
@cache_folder = File.expand_path(".embedly-cache")
|
12
|
+
FileUtils.mkdir_p @cache_folder
|
13
|
+
end
|
14
|
+
|
15
|
+
def read(key)
|
16
|
+
file_to_read = cache_file(cache_filename(key))
|
17
|
+
File.read(file_to_read) if File.exist?(file_to_read)
|
18
|
+
end
|
19
|
+
|
20
|
+
def write(key, response)
|
21
|
+
file_to_write = cache_file(cache_filename(key))
|
22
|
+
|
23
|
+
File.open(file_to_write, 'w') do |f|
|
24
|
+
f.write(response)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
def cache_file(filename)
|
31
|
+
File.join(@cache_folder, filename)
|
32
|
+
end
|
33
|
+
|
34
|
+
def cache_filename(cache_key)
|
35
|
+
"#{cache_key}.cache"
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
class NullCache
|
40
|
+
def read(_key); end
|
41
|
+
|
42
|
+
def write(_key, _data); end
|
43
|
+
end
|
44
|
+
|
45
|
+
module Cacheable
|
46
|
+
def cache_key(url)
|
47
|
+
Digest::MD5.hexdigest("#{url}")
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
class EmbedlyTag < Liquid::Tag
|
52
|
+
include JekyllEmbedlyPlugin::Cacheable
|
53
|
+
|
54
|
+
def initialize(tag_name, text, tokens)
|
55
|
+
super
|
56
|
+
|
57
|
+
tokens = text.split /\,\s/
|
58
|
+
@url = tokens[0]
|
59
|
+
@parameters = {}
|
60
|
+
@cache = FileCache.new
|
61
|
+
|
62
|
+
tokens[1..-1].each do |arg|
|
63
|
+
key, value = arg.split /:/
|
64
|
+
value ||= "1"
|
65
|
+
@parameters[key.strip] = value.strip
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
def render(context)
|
70
|
+
@config = context.registers[:site].config["embedly"]
|
71
|
+
@api_key = @config["api_key"]
|
72
|
+
|
73
|
+
if @api_key.nil?
|
74
|
+
raise EmbedlyTagError "You must provide embed.ly api key."
|
75
|
+
end
|
76
|
+
|
77
|
+
embed @url
|
78
|
+
end
|
79
|
+
|
80
|
+
private
|
81
|
+
|
82
|
+
def live_response(url)
|
83
|
+
domain = Domainatrix.parse(url).domain
|
84
|
+
params = (@config[domain] || {}).merge @parameters
|
85
|
+
|
86
|
+
embedly_url = ComposeURL.new("http://api.embed.ly/1/oembed")
|
87
|
+
|
88
|
+
if domain == "youtube" && params["rel"] == "0"
|
89
|
+
youtube_url = ComposeURL.new(url)
|
90
|
+
youtube_url.add_param("rel", "0")
|
91
|
+
url = youtube_url.to_s
|
92
|
+
params.delete "rel"
|
93
|
+
end
|
94
|
+
|
95
|
+
embedly_url.add_param("key", @api_key)
|
96
|
+
embedly_url.add_param("url", url)
|
97
|
+
params.each { |k, v| embedly_url.add_param(k, v) }
|
98
|
+
|
99
|
+
response = compose JSON.parse resolve embedly_url.to_s
|
100
|
+
@cache.write(cache_key(url), response)
|
101
|
+
response
|
102
|
+
end
|
103
|
+
|
104
|
+
def cached_response(url)
|
105
|
+
@cache.read(cache_key(url))
|
106
|
+
end
|
107
|
+
|
108
|
+
def embed(url)
|
109
|
+
cached_response(url) || live_response(url)
|
110
|
+
end
|
111
|
+
|
112
|
+
def compose(json_rep)
|
113
|
+
type = json_rep["type"]
|
114
|
+
provider = json_rep["provider_name"].downcase
|
115
|
+
|
116
|
+
if type == "photo"
|
117
|
+
url = json_rep["url"]
|
118
|
+
width = json_rep["width"]
|
119
|
+
height = json_rep["height"]
|
120
|
+
desc = CGI::escapeHTML json_rep["description"]
|
121
|
+
html = "<img src=\"#{url}\" alt=\"#{desc}\" width=\"#{width}\" height=\"#{height}\" />"
|
122
|
+
elsif type == "link"
|
123
|
+
url = json_rep["url"]
|
124
|
+
title = json_rep["title"]
|
125
|
+
html = "<a class=\"embedly-card\" href=\"#{url}\">#{title}</a><script async src=\"//cdn.embedly.com/widgets/platform.js\" charset=\"UTF-8\"></script>"
|
126
|
+
else
|
127
|
+
html = json_rep["html"]
|
128
|
+
end
|
129
|
+
|
130
|
+
"<div class=\"embed #{type} #{provider}\">#{html}</div>"
|
131
|
+
end
|
132
|
+
|
133
|
+
def resolve(url)
|
134
|
+
response = Net::HTTP.get_response(URI(url))
|
135
|
+
|
136
|
+
unless response["location"].nil? and response["location"].nil?
|
137
|
+
resolve URI.parse(response["location"]) or
|
138
|
+
URI.parse(response["location"])
|
139
|
+
else
|
140
|
+
response.body
|
141
|
+
end
|
142
|
+
end
|
143
|
+
|
144
|
+
end
|
145
|
+
|
146
|
+
class EmbedlyTagError < StandardError
|
147
|
+
def initialize(msg)
|
148
|
+
super(msg)
|
149
|
+
end
|
150
|
+
end
|
151
|
+
|
152
|
+
end
|
153
|
+
|
154
|
+
Liquid::Template.register_tag("embedly", JekyllEmbedlyPlugin::EmbedlyTag)
|
metadata
ADDED
@@ -0,0 +1,100 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: jekyll-embedly-plugin
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.3.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Ryan Burnette
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-01-08 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: addressable
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - '='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 2.3.6
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - '='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 2.3.6
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: compose_url
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - '='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 0.1.3
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - '='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 0.1.3
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: domainatrix
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - '='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 0.0.11
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - '='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 0.0.11
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: json
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - '='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 1.8.1
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - '='
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 1.8.1
|
69
|
+
description:
|
70
|
+
email: ryan.burnette@gmail.com
|
71
|
+
executables: []
|
72
|
+
extensions: []
|
73
|
+
extra_rdoc_files: []
|
74
|
+
files:
|
75
|
+
- lib/jekyll-embedly-plugin.rb
|
76
|
+
homepage: https://github.com/ryanburnette/jekyll-embedly-plugin
|
77
|
+
licenses:
|
78
|
+
- Apache2
|
79
|
+
metadata: {}
|
80
|
+
post_install_message:
|
81
|
+
rdoc_options: []
|
82
|
+
require_paths:
|
83
|
+
- lib
|
84
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
85
|
+
requirements:
|
86
|
+
- - ">="
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: '0'
|
89
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
90
|
+
requirements:
|
91
|
+
- - ">="
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '0'
|
94
|
+
requirements: []
|
95
|
+
rubyforge_project:
|
96
|
+
rubygems_version: 2.4.3
|
97
|
+
signing_key:
|
98
|
+
specification_version: 4
|
99
|
+
summary: An embed.ly Liquid tag for Jekyll.
|
100
|
+
test_files: []
|