ruby-oembed 0.7.6 → 0.8.1
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.
- data/.gitignore +4 -1
- data/CHANGELOG.rdoc +49 -0
- data/Gemfile.lock +13 -8
- data/README.rdoc +79 -0
- data/Rakefile +21 -6
- data/lib/oembed/errors.rb +23 -4
- data/lib/oembed/formatter/json/backends/activesupportjson.rb +28 -0
- data/lib/oembed/formatter/json/backends/jsongem.rb +31 -0
- data/lib/oembed/formatter/json/backends/yaml.rb +85 -0
- data/lib/oembed/formatter/json.rb +69 -0
- data/lib/oembed/formatter/xml/backends/rexml.rb +44 -0
- data/lib/oembed/formatter/xml/backends/xmlsimple.rb +39 -0
- data/lib/oembed/formatter/xml.rb +76 -0
- data/lib/oembed/formatter.rb +97 -0
- data/lib/oembed/provider.rb +102 -38
- data/lib/oembed/provider_discovery.rb +19 -7
- data/lib/oembed/providers/embedly_urls.yml +487 -0
- data/lib/oembed/providers/oohembed_urls.yml +17 -0
- data/lib/oembed/providers.rb +68 -11
- data/lib/oembed/response/link.rb +14 -0
- data/lib/oembed/response/photo.rb +12 -0
- data/lib/oembed/response/rich.rb +11 -0
- data/lib/oembed/response/video.rb +10 -0
- data/lib/oembed/response.rb +58 -10
- data/lib/oembed/version.rb +18 -0
- data/lib/oembed.rb +2 -1
- data/lib/tasks/oembed.rake +45 -0
- data/lib/tasks/rspec.rake +5 -0
- data/ruby-oembed.gemspec +38 -17
- data/spec/formatter/json/.DS_Store +0 -0
- data/spec/formatter/json/jsongem_backend_spec.rb +34 -0
- data/spec/formatter/json/yaml_backend_spec.rb +30 -0
- data/spec/formatter/xml/rexml_backend_spec.rb +30 -0
- data/spec/formatter/xml/xmlsimple_backend_spec.rb +34 -0
- data/spec/formatter_spec.rb +35 -0
- data/spec/provider_spec.rb +189 -24
- data/spec/providers_spec.rb +20 -1
- data/spec/response_spec.rb +129 -48
- data/spec/spec_helper.rb +5 -6
- metadata +45 -38
- data/CHANGELOG.md +0 -29
- data/README.md +0 -50
- data/VERSION +0 -1
- data/lib/oembed/embedly_urls.json +0 -227
- data/lib/oembed/formatters.rb +0 -40
- data/rails/init.rb +0 -3
data/lib/oembed/providers.rb
CHANGED
@@ -1,16 +1,23 @@
|
|
1
1
|
require 'rubygems'
|
2
|
-
require '
|
2
|
+
require 'yaml'
|
3
3
|
|
4
4
|
module OEmbed
|
5
|
+
# Allows OEmbed to perform tasks across several, registered, Providers
|
6
|
+
# at once.
|
5
7
|
class Providers
|
6
8
|
class << self
|
7
9
|
@@urls = {}
|
8
10
|
@@fallback = []
|
9
11
|
|
12
|
+
# A Hash of all url schemes, where the keys represent schemes supported by
|
13
|
+
# all registered Provider instances and values are an Array of Providers
|
14
|
+
# that support that scheme.
|
10
15
|
def urls
|
11
16
|
@@urls
|
12
17
|
end
|
13
18
|
|
19
|
+
# Given one ore more Provider instances, register their url schemes for
|
20
|
+
# future get calls.
|
14
21
|
def register(*providers)
|
15
22
|
providers.each do |provider|
|
16
23
|
provider.urls.each do |url|
|
@@ -20,6 +27,8 @@ module OEmbed
|
|
20
27
|
end
|
21
28
|
end
|
22
29
|
|
30
|
+
# Given one ore more Provider instances, un-register their url schemes.
|
31
|
+
# Future get calls will not use these Providers.
|
23
32
|
def unregister(*providers)
|
24
33
|
providers.each do |provider|
|
25
34
|
provider.urls.each do |url|
|
@@ -31,11 +40,25 @@ module OEmbed
|
|
31
40
|
end
|
32
41
|
end
|
33
42
|
|
43
|
+
# Register a standard set of common Provider instances, including:
|
44
|
+
# * Flickr
|
45
|
+
# * Hulu
|
46
|
+
# * Qik
|
47
|
+
# * Revision3
|
48
|
+
# * Viddler
|
49
|
+
# * Vimeo
|
50
|
+
# * Youtube
|
34
51
|
def register_all
|
35
|
-
register(Youtube, Flickr, Viddler, Qik,
|
52
|
+
register(Youtube, Flickr, Viddler, Qik, Revision3, Hulu, Vimeo)
|
36
53
|
end
|
37
54
|
|
38
|
-
#
|
55
|
+
# Unregister all currently-registered Provider instances.
|
56
|
+
def unregister_all
|
57
|
+
@@urls = {}
|
58
|
+
@@fallback = []
|
59
|
+
end
|
60
|
+
|
61
|
+
# Takes an array of Provider instances or ProviderDiscovery
|
39
62
|
# Use this method to register fallback providers.
|
40
63
|
# When the raw or get methods are called, if the URL doesn't match
|
41
64
|
# any of the registerd url patters the fallback providers
|
@@ -47,16 +70,19 @@ module OEmbed
|
|
47
70
|
@@fallback += providers
|
48
71
|
end
|
49
72
|
|
50
|
-
# Returns an array of all registerd fallback
|
73
|
+
# Returns an array of all registerd fallback Provider instances.
|
51
74
|
def fallback
|
52
75
|
@@fallback
|
53
76
|
end
|
54
77
|
|
78
|
+
# Returns a Provider instance who's url scheme matches the given url.
|
55
79
|
def find(url)
|
56
80
|
providers = @@urls[@@urls.keys.detect { |u| u =~ url }]
|
57
81
|
Array(providers).first || nil
|
58
82
|
end
|
59
83
|
|
84
|
+
# Finds the appropriate Provider for this url and return the raw response.
|
85
|
+
# @deprecated *Note*: This method will be made private in the future.
|
60
86
|
def raw(url, options = {})
|
61
87
|
provider = find(url)
|
62
88
|
if provider
|
@@ -69,6 +95,8 @@ module OEmbed
|
|
69
95
|
end
|
70
96
|
end
|
71
97
|
|
98
|
+
# Finds the appropriate Provider for this url and returns an OEmbed::Response,
|
99
|
+
# using Provider#get.
|
72
100
|
def get(url, options = {})
|
73
101
|
provider = find(url)
|
74
102
|
if provider
|
@@ -83,38 +111,49 @@ module OEmbed
|
|
83
111
|
end
|
84
112
|
|
85
113
|
# Custom providers:
|
114
|
+
|
115
|
+
# Provider for youtube.com
|
86
116
|
Youtube = OEmbed::Provider.new("http://www.youtube.com/oembed")
|
87
117
|
Youtube << "http://*.youtube.com/*"
|
88
118
|
Youtube << "http://*.youtu.be/*"
|
89
119
|
|
120
|
+
# Provider for flickr.com
|
90
121
|
Flickr = OEmbed::Provider.new("http://www.flickr.com/services/oembed/")
|
91
122
|
Flickr << "http://*.flickr.com/*"
|
92
123
|
|
124
|
+
# Provider for viddler.com
|
93
125
|
Viddler = OEmbed::Provider.new("http://lab.viddler.com/services/oembed/")
|
94
126
|
Viddler << "http://*.viddler.com/*"
|
95
127
|
|
128
|
+
# Provider for qik.com
|
96
129
|
Qik = OEmbed::Provider.new("http://qik.com/api/oembed.{format}")
|
97
130
|
Qik << "http://qik.com/*"
|
98
131
|
Qik << "http://qik.com/video/*"
|
99
132
|
|
133
|
+
# Provider for revision3.com
|
100
134
|
Revision3 = OEmbed::Provider.new("http://revision3.com/api/oembed/")
|
101
135
|
Revision3 << "http://*.revision3.com/*"
|
102
136
|
|
137
|
+
# Provider for hulu.com
|
103
138
|
Hulu = OEmbed::Provider.new("http://www.hulu.com/api/oembed.{format}")
|
104
139
|
Hulu << "http://www.hulu.com/watch/*"
|
105
140
|
|
141
|
+
# Provider for vimeo.com
|
106
142
|
Vimeo = OEmbed::Provider.new("http://www.vimeo.com/api/oembed.{format}")
|
107
143
|
Vimeo << "http://*.vimeo.com/*"
|
108
144
|
Vimeo << "http://*.vimeo.com/groups/*/videos/*"
|
109
145
|
|
110
|
-
|
111
|
-
Pownce
|
146
|
+
# pownce.com closed in 2008
|
147
|
+
#Pownce = OEmbed::Provider.new("http://api.pownce.com/2.1/oembed.{format}")
|
148
|
+
#Pownce << "http://*.pownce.com/*"
|
112
149
|
|
113
|
-
#
|
150
|
+
# Provider for oohembed.com, which is a provider agregator. See
|
151
|
+
# OEmbed::Provders::OohEmbed.urls for a full list of supported url schemas.
|
114
152
|
OohEmbed = OEmbed::Provider.new("http://oohembed.com/oohembed/", :json)
|
115
153
|
OohEmbed << "http://*.5min.com/Video/*" # micro-video host
|
116
154
|
OohEmbed << %r{http://(.*?).amazon.(com|co.uk|de|ca|jp)/(.*?)/(gp/product|o/ASIN|obidos/ASIN|dp)/(.*?)} # Online product shopping
|
117
155
|
OohEmbed << "http://*.blip.tv/*"
|
156
|
+
OohEmbed << "http://*.clikthrough.com/theater/video/*"
|
118
157
|
OohEmbed << "http://*.collegehumor.com/video:*" # Comedic & original videos
|
119
158
|
OohEmbed << "http://*.thedailyshow.com/video/*" # Syndicated show
|
120
159
|
OohEmbed << "http://*.dailymotion.com/*"
|
@@ -123,9 +162,12 @@ module OEmbed
|
|
123
162
|
OohEmbed << "http://*.funnyordie.com/videos/*" # Comedy video host
|
124
163
|
OohEmbed << "http://video.google.com/videoplay?*" # Video hosting
|
125
164
|
OohEmbed << "http://www.hulu.com/watch/*"
|
165
|
+
OohEmbed << "http://*.kinomap.com/*"
|
126
166
|
OohEmbed << "http://*.livejournal.com/"
|
127
167
|
OohEmbed << "http://*.metacafe.com/watch/*" # Video host
|
128
168
|
OohEmbed << "http://*.nfb.ca/film/*"
|
169
|
+
OohEmbed << "http://*.photobucket.com/albums/*"
|
170
|
+
OohEmbed << "http://*.photobucket.com/groups/*"
|
129
171
|
OohEmbed << "http://*.phodroid.com/*/*/*" # Photo host
|
130
172
|
OohEmbed << "http://qik.com/*"
|
131
173
|
OohEmbed << "http://*.revision3.com/*"
|
@@ -142,35 +184,50 @@ module OEmbed
|
|
142
184
|
OohEmbed << %r{http://yfrog.(com|ru|com.tr|it|fr|co.il|co.uk|com.pl|pl|eu|us)/(.*?)} # image & video hosting
|
143
185
|
OohEmbed << "http://*.youtube.com/watch*"
|
144
186
|
|
145
|
-
#
|
187
|
+
# Provider for embedly.com, which is a provider agregator. See
|
188
|
+
# OEmbed::Provders::OohEmbed.urls for a full list of supported url schemas.
|
146
189
|
Embedly = OEmbed::Provider.new("http://api.embed.ly/v1/api/oembed")
|
147
|
-
#
|
148
|
-
|
190
|
+
# Add all known URL regexps for Embedly. To update this list run `rake oembed:update_embedly`
|
191
|
+
YAML.load_file(File.join(File.dirname(__FILE__), "/providers/embedly_urls.yml")).each do |url|
|
149
192
|
Embedly << url
|
150
193
|
end
|
151
194
|
|
195
|
+
# Provider for polleverywhere.com
|
152
196
|
PollEverywhere = OEmbed::Provider.new("http://www.polleverywhere.com/services/oembed/")
|
153
197
|
PollEverywhere << "http://www.polleverywhere.com/polls/*"
|
154
198
|
PollEverywhere << "http://www.polleverywhere.com/multiple_choice_polls/*"
|
155
199
|
PollEverywhere << "http://www.polleverywhere.com/free_text_polls/*"
|
156
200
|
|
201
|
+
# Provider for my.opera.com
|
157
202
|
MyOpera = OEmbed::Provider.new("http://my.opera.com/service/oembed", :json)
|
158
203
|
MyOpera << "http://my.opera.com/*"
|
159
204
|
|
205
|
+
# Provider for clearspring.com
|
160
206
|
ClearspringWidgets = OEmbed::Provider.new("http://widgets.clearspring.com/widget/v1/oembed/")
|
161
207
|
ClearspringWidgets << "http://www.clearspring.com/widgets/*"
|
162
208
|
|
209
|
+
# Provider for nfb.ca
|
163
210
|
NFBCanada = OEmbed::Provider.new("http://www.nfb.ca/remote/services/oembed/")
|
164
211
|
NFBCanada << "http://*.nfb.ca/film/*"
|
165
212
|
|
213
|
+
# Provider for scribd.com
|
166
214
|
Scribd = OEmbed::Provider.new("http://www.scribd.com/services/oembed")
|
167
215
|
Scribd << "http://*.scribd.com/*"
|
168
216
|
|
217
|
+
# Provider for movieclips.com
|
169
218
|
MovieClips = OEmbed::Provider.new("http://movieclips.com/services/oembed/")
|
170
219
|
MovieClips << "http://movieclips.com/watch/*/*/"
|
171
220
|
|
221
|
+
# Provider for 23hq.com
|
172
222
|
TwentyThree = OEmbed::Provider.new("http://www.23hq.com/23/oembed")
|
173
223
|
TwentyThree << "http://www.23hq.com/*"
|
174
|
-
|
224
|
+
|
225
|
+
# Provider for clikthrough.com
|
226
|
+
#Clickthrough = OEmbed::Provider.new("http://www.clikthrough.com/services/oembed/")
|
227
|
+
#Clickthrough << "http://*.clikthrough.com/theater/video/*"
|
228
|
+
#
|
229
|
+
## Provider for kinomap.com
|
230
|
+
#Kinomap = OEmbed::Provider.new("http://www.kinomap.com/oembed")
|
231
|
+
#Kinomap << "http://www.kinomap.com/*"
|
175
232
|
end
|
176
233
|
end
|
data/lib/oembed/response/link.rb
CHANGED
@@ -1,6 +1,20 @@
|
|
1
1
|
module OEmbed
|
2
2
|
class Response
|
3
|
+
# A fairly generic type of Response where the url of the resource is
|
4
|
+
# the original request_url.
|
3
5
|
class Link < self
|
6
|
+
|
7
|
+
# Returns the request_url
|
8
|
+
def url
|
9
|
+
request_url
|
10
|
+
end
|
11
|
+
|
12
|
+
private
|
13
|
+
|
14
|
+
# See {section 2.3.4.1 of the oEmbed spec}[http://oembed.com/#section2.3]
|
15
|
+
def must_override
|
16
|
+
super
|
17
|
+
end
|
4
18
|
end
|
5
19
|
end
|
6
20
|
end
|
@@ -1,9 +1,21 @@
|
|
1
1
|
module OEmbed
|
2
2
|
class Response
|
3
|
+
# A Response used for representing static photos.
|
3
4
|
class Photo < self
|
5
|
+
# Returns an <img> tag pointing at the appropraite URL.
|
4
6
|
def html
|
5
7
|
"<img src='" + self.url + "' />"
|
6
8
|
end
|
9
|
+
|
10
|
+
private
|
11
|
+
|
12
|
+
# See {section 2.3.4.1 of the oEmbed spec}[http://oembed.com/#section2.3]
|
13
|
+
def must_override
|
14
|
+
%w{
|
15
|
+
url width height
|
16
|
+
} + super
|
17
|
+
end
|
18
|
+
|
7
19
|
end
|
8
20
|
end
|
9
21
|
end
|
data/lib/oembed/response/rich.rb
CHANGED
@@ -1,6 +1,17 @@
|
|
1
1
|
module OEmbed
|
2
2
|
class Response
|
3
|
+
# A Response used for representing rich HTML content that does not fall under
|
4
|
+
# one of the other Response categories.
|
3
5
|
class Rich < self
|
6
|
+
|
7
|
+
private
|
8
|
+
|
9
|
+
# See {section 2.3.4.1 of the oEmbed spec}[http://oembed.com/#section2.3]
|
10
|
+
def must_override
|
11
|
+
%w{
|
12
|
+
html width height
|
13
|
+
} + super
|
14
|
+
end
|
4
15
|
end
|
5
16
|
end
|
6
17
|
end
|
@@ -1,6 +1,16 @@
|
|
1
1
|
module OEmbed
|
2
2
|
class Response
|
3
|
+
# A Response used for representing playable videos.
|
3
4
|
class Video < self
|
5
|
+
|
6
|
+
private
|
7
|
+
|
8
|
+
# See {section 2.3.4.1 of the oEmbed spec}[http://oembed.com/#section2.3]
|
9
|
+
def must_override
|
10
|
+
%w{
|
11
|
+
html width height
|
12
|
+
} + super
|
13
|
+
end
|
4
14
|
end
|
5
15
|
end
|
6
16
|
end
|
data/lib/oembed/response.rb
CHANGED
@@ -1,10 +1,30 @@
|
|
1
1
|
module OEmbed
|
2
|
+
# Contains oEmbed data about a URL, as returned by an OEmbed::Provider. The data
|
3
|
+
# stored in Response instances can be accessed by either using the field method
|
4
|
+
# _or_ by using the appropriate automatically-defined helper method.
|
5
|
+
#
|
6
|
+
# For example:
|
7
|
+
# @response.type #=> 'rich'
|
8
|
+
# @response.field('width') #=> '500'
|
9
|
+
# @response.width #=> '500'
|
2
10
|
class Response
|
3
|
-
|
4
|
-
attr_reader :fields
|
11
|
+
# An Hash of data (probably from a Provider) just as it was parsed.
|
12
|
+
attr_reader :fields
|
13
|
+
|
14
|
+
# The Provider instance that generated this Response
|
15
|
+
attr_reader :provider
|
16
|
+
|
17
|
+
# The URL that was sent to the provider, that this Response contains data about.
|
18
|
+
attr_reader :request_url
|
19
|
+
|
20
|
+
# The name of the format used get this data from the Provider (e.g. 'json').
|
21
|
+
attr_reader :format
|
5
22
|
|
6
|
-
|
7
|
-
|
23
|
+
# Create a new Response instance of the correct type given raw
|
24
|
+
# which is data from the provider, about the url, in the given
|
25
|
+
# format that needs to be decoded.
|
26
|
+
def self.create_for(raw, provider, url, format)
|
27
|
+
fields = OEmbed::Formatter.decode(format, raw)
|
8
28
|
|
9
29
|
resp_type = case fields['type']
|
10
30
|
when 'photo' then OEmbed::Response::Photo
|
@@ -14,44 +34,72 @@ module OEmbed
|
|
14
34
|
else self
|
15
35
|
end
|
16
36
|
|
17
|
-
resp_type.new(fields, provider, url)
|
37
|
+
resp_type.new(fields, provider, url, format)
|
18
38
|
end
|
19
39
|
|
20
|
-
def initialize(fields, provider, url =
|
40
|
+
def initialize(fields, provider, url=nil, format=nil)
|
21
41
|
@fields = fields
|
22
42
|
@provider = provider
|
43
|
+
@request_url = url
|
44
|
+
@format = format
|
23
45
|
define_methods!
|
24
46
|
end
|
25
47
|
|
26
|
-
|
27
|
-
|
48
|
+
# The String value associated with this key. While you can use helper methods
|
49
|
+
# like Response#version, the field method is helpful if the Provider returns
|
50
|
+
# non-standard values that conflict with Ruby methods.
|
51
|
+
#
|
52
|
+
# For example, if the Provider returns a "clone" value of "true":
|
53
|
+
# # The following calls the Object#clone method
|
54
|
+
# @response.clone #=> #<OEmbed::Response:...
|
55
|
+
#
|
56
|
+
# # The following returns the value given by the Provider
|
57
|
+
# @response.field(:clone) #=> 'true'
|
58
|
+
def field(key)
|
59
|
+
@fields[key.to_s].to_s
|
28
60
|
end
|
29
61
|
|
62
|
+
# Returns true if this is an oEmbed video response.
|
30
63
|
def video?
|
31
64
|
is_a?(OEmbed::Response::Video)
|
32
65
|
end
|
33
66
|
|
67
|
+
# Returns true if this is an oEmbed photo response.
|
34
68
|
def photo?
|
35
69
|
is_a?(OEmbed::Response::Photo)
|
36
70
|
end
|
37
71
|
|
72
|
+
# Returns true if this is an oEmbed link response.
|
38
73
|
def link?
|
39
74
|
is_a?(OEmbed::Response::Link)
|
40
75
|
end
|
41
76
|
|
77
|
+
# Returns true if this is an oEmbed rich response.
|
42
78
|
def rich?
|
43
79
|
is_a?(OEmbed::Response::Rich)
|
44
80
|
end
|
45
81
|
|
46
82
|
private
|
47
83
|
|
84
|
+
# An Array of helper methods names define_methods! must be able to override
|
85
|
+
# when is's called. In general, define_methods! tries its best _not_ to override
|
86
|
+
# existing methods, so this Array is important if some other library has
|
87
|
+
# defined a method that uses an oEmbed name. For example: Object#version
|
88
|
+
def must_override
|
89
|
+
%w{
|
90
|
+
type version
|
91
|
+
title author_name author_url provider_name provider_url
|
92
|
+
cache_age thumbnail_url thumbnail_width thumbnail_height
|
93
|
+
}
|
94
|
+
end
|
95
|
+
|
48
96
|
def define_methods!
|
49
97
|
@fields.keys.each do |key|
|
50
|
-
next if
|
98
|
+
next if self.respond_to?(key) && !must_override.include?(key.to_s)
|
51
99
|
class << self
|
52
100
|
self
|
53
101
|
end.send(:define_method, key) do
|
54
|
-
|
102
|
+
field(key)
|
55
103
|
end
|
56
104
|
end
|
57
105
|
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module OEmbed
|
2
|
+
class Version
|
3
|
+
MAJOR = 0
|
4
|
+
MINOR = 8
|
5
|
+
PATCH = 1
|
6
|
+
STRING = "#{MAJOR}.#{MINOR}.#{PATCH}"
|
7
|
+
|
8
|
+
class << self
|
9
|
+
# A String representing the current version of the OEmbed gem.
|
10
|
+
def inspect
|
11
|
+
STRING
|
12
|
+
end
|
13
|
+
alias_method :to_s, :inspect
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
VERSION = Version::STRING
|
18
|
+
end
|
data/lib/oembed.rb
CHANGED
@@ -2,8 +2,9 @@ $:.unshift File.dirname(__FILE__)
|
|
2
2
|
|
3
3
|
require 'net/http'
|
4
4
|
|
5
|
+
require 'oembed/version'
|
5
6
|
require 'oembed/errors'
|
6
|
-
require 'oembed/
|
7
|
+
require 'oembed/formatter'
|
7
8
|
require 'oembed/provider'
|
8
9
|
require 'oembed/provider_discovery'
|
9
10
|
require 'oembed/providers'
|
@@ -0,0 +1,45 @@
|
|
1
|
+
begin
|
2
|
+
require 'json'
|
3
|
+
require 'open-uri'
|
4
|
+
|
5
|
+
namespace :oembed do
|
6
|
+
desc "Update the embedly_urls.yml file using the services api."
|
7
|
+
task :update_embedly do
|
8
|
+
# Details at http://api.embed.ly/docs/service
|
9
|
+
json_uri = URI.parse("http://api.embed.ly/1/services")
|
10
|
+
yaml_path = File.join(File.dirname(__FILE__), "../oembed/providers/embedly_urls.yml")
|
11
|
+
|
12
|
+
services = JSON.parse(json_uri.read)
|
13
|
+
|
14
|
+
url_regexps = []
|
15
|
+
services.each do |service|
|
16
|
+
url_regexps += service['regex']
|
17
|
+
end
|
18
|
+
url_regexps.sort!
|
19
|
+
|
20
|
+
YAML.dump(url_regexps, File.open(yaml_path, 'w'))
|
21
|
+
end
|
22
|
+
|
23
|
+
# Note: At the moment the list of enpoints in the oohembed-provided JSON file
|
24
|
+
# do NOT match the full listing on their website. Until we sort that out, we'll
|
25
|
+
# continue to use the manually entered list of oohembed URLs
|
26
|
+
desc "Update the list of URLs supported by oohembed via their API"
|
27
|
+
task :update_oohembed do
|
28
|
+
# Details in the Q & A section of http://oohembed.com/
|
29
|
+
json_uri = URI.parse("http://oohembed.com/static/endpoints.json")
|
30
|
+
yaml_path = File.join(File.dirname(__FILE__), "../oembed/providers/oohembed_urls.yml")
|
31
|
+
|
32
|
+
services = JSON.parse(json_uri.read)
|
33
|
+
|
34
|
+
url_regexps = []
|
35
|
+
services.each do |service|
|
36
|
+
url_regexps << service['url']
|
37
|
+
end
|
38
|
+
url_regexps.sort!
|
39
|
+
|
40
|
+
YAML.dump(url_regexps, File.open(yaml_path, 'w'))
|
41
|
+
end
|
42
|
+
end
|
43
|
+
rescue LoadError
|
44
|
+
puts "The oembed rake tasks require JSON. Install it with: gem install json"
|
45
|
+
end
|
data/ruby-oembed.gemspec
CHANGED
@@ -5,55 +5,76 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{ruby-oembed}
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.8.1"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Magnus Holm", "Alex Kessinger", "Aris Bartee", "Marcos Wright Kuhns"]
|
12
|
-
s.date = %q{
|
13
|
-
s.description = %q{An oEmbed
|
12
|
+
s.date = %q{2011-02-27}
|
13
|
+
s.description = %q{An oEmbed consumer library written in Ruby, letting you easily get embeddable HTML representations of supported web pages, based on their URLs. See http://oembed.com for more information about the protocol.}
|
14
14
|
s.email = %q{arisbartee@gmail.com}
|
15
15
|
s.extra_rdoc_files = [
|
16
16
|
"LICENSE",
|
17
|
-
"README.
|
17
|
+
"README.rdoc"
|
18
18
|
]
|
19
19
|
s.files = [
|
20
20
|
".gitignore",
|
21
21
|
".rvmrc",
|
22
|
-
"CHANGELOG.
|
22
|
+
"CHANGELOG.rdoc",
|
23
23
|
"Gemfile",
|
24
24
|
"Gemfile.lock",
|
25
25
|
"LICENSE",
|
26
|
-
"README.
|
26
|
+
"README.rdoc",
|
27
27
|
"Rakefile",
|
28
|
-
"VERSION",
|
29
28
|
"integration_test/test.rb",
|
30
29
|
"integration_test/test_urls.csv",
|
31
30
|
"lib/oembed.rb",
|
32
|
-
"lib/oembed/embedly_urls.json",
|
33
31
|
"lib/oembed/errors.rb",
|
34
|
-
"lib/oembed/
|
32
|
+
"lib/oembed/formatter.rb",
|
33
|
+
"lib/oembed/formatter/json.rb",
|
34
|
+
"lib/oembed/formatter/json/backends/activesupportjson.rb",
|
35
|
+
"lib/oembed/formatter/json/backends/jsongem.rb",
|
36
|
+
"lib/oembed/formatter/json/backends/yaml.rb",
|
37
|
+
"lib/oembed/formatter/xml.rb",
|
38
|
+
"lib/oembed/formatter/xml/backends/rexml.rb",
|
39
|
+
"lib/oembed/formatter/xml/backends/xmlsimple.rb",
|
35
40
|
"lib/oembed/provider.rb",
|
36
41
|
"lib/oembed/provider_discovery.rb",
|
37
42
|
"lib/oembed/providers.rb",
|
43
|
+
"lib/oembed/providers/embedly_urls.yml",
|
44
|
+
"lib/oembed/providers/oohembed_urls.yml",
|
38
45
|
"lib/oembed/response.rb",
|
39
46
|
"lib/oembed/response/link.rb",
|
40
47
|
"lib/oembed/response/photo.rb",
|
41
48
|
"lib/oembed/response/rich.rb",
|
42
49
|
"lib/oembed/response/video.rb",
|
43
|
-
"
|
50
|
+
"lib/oembed/version.rb",
|
51
|
+
"lib/tasks/oembed.rake",
|
52
|
+
"lib/tasks/rspec.rake",
|
44
53
|
"ruby-oembed.gemspec",
|
54
|
+
"spec/formatter/json/.DS_Store",
|
55
|
+
"spec/formatter/json/jsongem_backend_spec.rb",
|
56
|
+
"spec/formatter/json/yaml_backend_spec.rb",
|
57
|
+
"spec/formatter/xml/rexml_backend_spec.rb",
|
58
|
+
"spec/formatter/xml/xmlsimple_backend_spec.rb",
|
59
|
+
"spec/formatter_spec.rb",
|
45
60
|
"spec/provider_spec.rb",
|
46
61
|
"spec/providers_spec.rb",
|
47
62
|
"spec/response_spec.rb",
|
48
63
|
"spec/spec_helper.rb"
|
49
64
|
]
|
50
65
|
s.homepage = %q{http://github.com/judofyr/ruby-oembed}
|
51
|
-
s.
|
66
|
+
s.licenses = ["MIT"]
|
67
|
+
s.rdoc_options = ["--main", "README.rdoc", "--title", "ruby-oembed-0.8.1", "--inline-source", "--exclude", "tasks", "CHANGELOG.rdoc"]
|
52
68
|
s.require_paths = ["lib"]
|
53
69
|
s.rubygems_version = %q{1.3.7}
|
54
70
|
s.summary = %q{oEmbed for Ruby}
|
55
71
|
s.test_files = [
|
56
|
-
"spec/
|
72
|
+
"spec/formatter/json/jsongem_backend_spec.rb",
|
73
|
+
"spec/formatter/json/yaml_backend_spec.rb",
|
74
|
+
"spec/formatter/xml/rexml_backend_spec.rb",
|
75
|
+
"spec/formatter/xml/xmlsimple_backend_spec.rb",
|
76
|
+
"spec/formatter_spec.rb",
|
77
|
+
"spec/provider_spec.rb",
|
57
78
|
"spec/providers_spec.rb",
|
58
79
|
"spec/response_spec.rb",
|
59
80
|
"spec/spec_helper.rb"
|
@@ -64,18 +85,18 @@ Gem::Specification.new do |s|
|
|
64
85
|
s.specification_version = 3
|
65
86
|
|
66
87
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
67
|
-
s.
|
68
|
-
s.
|
69
|
-
s.add_development_dependency(%q<rspec>, [">= 0"])
|
88
|
+
s.add_development_dependency(%q<json>, [">= 0"])
|
89
|
+
s.add_development_dependency(%q<xml-simple>, [">= 0"])
|
90
|
+
s.add_development_dependency(%q<rspec>, [">= 2.0"])
|
70
91
|
else
|
71
92
|
s.add_dependency(%q<json>, [">= 0"])
|
72
93
|
s.add_dependency(%q<xml-simple>, [">= 0"])
|
73
|
-
s.add_dependency(%q<rspec>, [">= 0"])
|
94
|
+
s.add_dependency(%q<rspec>, [">= 2.0"])
|
74
95
|
end
|
75
96
|
else
|
76
97
|
s.add_dependency(%q<json>, [">= 0"])
|
77
98
|
s.add_dependency(%q<xml-simple>, [">= 0"])
|
78
|
-
s.add_dependency(%q<rspec>, [">= 0"])
|
99
|
+
s.add_dependency(%q<rspec>, [">= 2.0"])
|
79
100
|
end
|
80
101
|
end
|
81
102
|
|
Binary file
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../../spec_helper'
|
2
|
+
|
3
|
+
describe "OEmbed::Formatter::JSON::Backends::JSONGem" do
|
4
|
+
include OEmbedSpecHelper
|
5
|
+
|
6
|
+
before(:all) do
|
7
|
+
lambda {
|
8
|
+
OEmbed::Formatter::JSON.backend = 'JSONGem'
|
9
|
+
}.should raise_error(LoadError)
|
10
|
+
|
11
|
+
require 'json'
|
12
|
+
|
13
|
+
lambda {
|
14
|
+
OEmbed::Formatter::JSON.backend = 'JSONGem'
|
15
|
+
}.should_not raise_error
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should support JSON" do
|
19
|
+
proc { OEmbed::Formatter.supported?(:json) }.
|
20
|
+
should_not raise_error(OEmbed::FormatNotSupported)
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should be using the JSONGem backend" do
|
24
|
+
OEmbed::Formatter::JSON.backend.should == OEmbed::Formatter::JSON::Backends::JSONGem
|
25
|
+
end
|
26
|
+
|
27
|
+
it "should decode a JSON String" do
|
28
|
+
decoded = OEmbed::Formatter.decode(:json, valid_response(:json))
|
29
|
+
# We need to compare keys & values separately because we don't expect all
|
30
|
+
# non-string values to be recognized correctly.
|
31
|
+
decoded.keys.should == valid_response(:object).keys
|
32
|
+
decoded.values.map{|v|v.to_s}.should == valid_response(:object).values.map{|v|v.to_s}
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../../spec_helper'
|
2
|
+
|
3
|
+
describe "OEmbed::Formatter::JSON::Backends::Yaml" do
|
4
|
+
include OEmbedSpecHelper
|
5
|
+
|
6
|
+
before(:all) do
|
7
|
+
lambda {
|
8
|
+
OEmbed::Formatter::JSON.backend = 'Yaml'
|
9
|
+
}.should_not raise_error
|
10
|
+
|
11
|
+
(!!defined?(YAML)).should == true
|
12
|
+
end
|
13
|
+
|
14
|
+
it "should support JSON" do
|
15
|
+
proc { OEmbed::Formatter.supported?(:json) }.
|
16
|
+
should_not raise_error(OEmbed::FormatNotSupported)
|
17
|
+
end
|
18
|
+
|
19
|
+
it "should be using the Yaml backend" do
|
20
|
+
OEmbed::Formatter::JSON.backend.should == OEmbed::Formatter::JSON::Backends::Yaml
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should decode a JSON String" do
|
24
|
+
decoded = OEmbed::Formatter.decode(:json, valid_response(:json))
|
25
|
+
# We need to compare keys & values separately because we don't expect all
|
26
|
+
# non-string values to be recognized correctly.
|
27
|
+
decoded.keys.should == valid_response(:object).keys
|
28
|
+
decoded.values.map{|v|v.to_s}.should == valid_response(:object).values.map{|v|v.to_s}
|
29
|
+
end
|
30
|
+
end
|