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
@@ -0,0 +1,30 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../../spec_helper'
|
2
|
+
|
3
|
+
describe "OEmbed::Formatter::XML::Backends::REXML" do
|
4
|
+
include OEmbedSpecHelper
|
5
|
+
|
6
|
+
before(:all) do
|
7
|
+
lambda {
|
8
|
+
OEmbed::Formatter::XML.backend = 'REXML'
|
9
|
+
}.should_not raise_error
|
10
|
+
|
11
|
+
(!!defined?(REXML)).should == true
|
12
|
+
end
|
13
|
+
|
14
|
+
it "should support XML" do
|
15
|
+
proc { OEmbed::Formatter.supported?(:xml) }.
|
16
|
+
should_not raise_error(OEmbed::FormatNotSupported)
|
17
|
+
end
|
18
|
+
|
19
|
+
it "should be using the XmlSimple backend" do
|
20
|
+
OEmbed::Formatter::XML.backend.should == OEmbed::Formatter::XML::Backends::REXML
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should decode an XML String" do
|
24
|
+
decoded = OEmbed::Formatter.decode(:xml, valid_response(:xml))
|
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
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../../spec_helper'
|
2
|
+
|
3
|
+
describe "OEmbed::Formatter::XML::Backends::XmlSimple" do
|
4
|
+
include OEmbedSpecHelper
|
5
|
+
|
6
|
+
before(:all) do
|
7
|
+
lambda {
|
8
|
+
OEmbed::Formatter::XML.backend = 'XmlSimple'
|
9
|
+
}.should raise_error(LoadError)
|
10
|
+
|
11
|
+
require 'xmlsimple'
|
12
|
+
|
13
|
+
lambda {
|
14
|
+
OEmbed::Formatter::XML.backend = 'XmlSimple'
|
15
|
+
}.should_not raise_error
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should support XML" do
|
19
|
+
proc { OEmbed::Formatter.supported?(:xml) }.
|
20
|
+
should_not raise_error(OEmbed::FormatNotSupported)
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should be using the XmlSimple backend" do
|
24
|
+
OEmbed::Formatter::XML.backend.should == OEmbed::Formatter::XML::Backends::XmlSimple
|
25
|
+
end
|
26
|
+
|
27
|
+
it "should decode an XML String" do
|
28
|
+
decoded = OEmbed::Formatter.decode(:xml, valid_response(:xml))
|
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,35 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/spec_helper'
|
2
|
+
|
3
|
+
describe OEmbed::Formatter do
|
4
|
+
include OEmbedSpecHelper
|
5
|
+
|
6
|
+
it "should support JSON" do
|
7
|
+
proc { OEmbed::Formatter.support?(:json) }.
|
8
|
+
should_not raise_error(OEmbed::FormatNotSupported)
|
9
|
+
end
|
10
|
+
|
11
|
+
it "should default to JSON" do
|
12
|
+
OEmbed::Formatter.default.should == 'json'
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should decode a JSON String" do
|
16
|
+
decoded = OEmbed::Formatter.decode(:json, valid_response(:json))
|
17
|
+
# We need to compare keys & values separately because we don't expect all
|
18
|
+
# non-string values to be recognized correctly.
|
19
|
+
decoded.keys.should == valid_response(:object).keys
|
20
|
+
decoded.values.map{|v|v.to_s}.should == valid_response(:object).values.map{|v|v.to_s}
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should support XML" do
|
24
|
+
proc { OEmbed::Formatter.support?(:xml) }.
|
25
|
+
should_not raise_error(OEmbed::FormatNotSupported)
|
26
|
+
end
|
27
|
+
|
28
|
+
it "should decode an XML String" do
|
29
|
+
decoded = OEmbed::Formatter.decode(:xml, valid_response(:xml))
|
30
|
+
# We need to compare keys & values separately because we don't expect all
|
31
|
+
# non-string values to be recognized correctly.
|
32
|
+
decoded.keys.should == valid_response(:object).keys
|
33
|
+
decoded.values.map{|v|v.to_s}.should == valid_response(:object).values.map{|v|v.to_s}
|
34
|
+
end
|
35
|
+
end
|
data/spec/provider_spec.rb
CHANGED
@@ -4,7 +4,7 @@ describe OEmbed::Provider do
|
|
4
4
|
include OEmbedSpecHelper
|
5
5
|
|
6
6
|
before(:all) do
|
7
|
-
@default = OEmbed::
|
7
|
+
@default = OEmbed::Formatter.default
|
8
8
|
@flickr = OEmbed::Provider.new("http://www.flickr.com/services/oembed/")
|
9
9
|
@qik = OEmbed::Provider.new("http://qik.com/api/oembed.{format}", :xml)
|
10
10
|
@viddler = OEmbed::Provider.new("http://lab.viddler.com/services/oembed/", :json)
|
@@ -15,7 +15,143 @@ describe OEmbed::Provider do
|
|
15
15
|
@viddler << "http://*.viddler.com/*"
|
16
16
|
end
|
17
17
|
|
18
|
-
it "should
|
18
|
+
it "should require a valid endpoint for a new instance" do
|
19
|
+
proc { OEmbed::Provider.new("http://foo.com/oembed/") }.
|
20
|
+
should_not raise_error(ArgumentError)
|
21
|
+
|
22
|
+
proc { OEmbed::Provider.new("https://foo.com/oembed/") }.
|
23
|
+
should_not raise_error(ArgumentError)
|
24
|
+
end
|
25
|
+
|
26
|
+
it "should allow a {format} string in the endpoint for a new instance" do
|
27
|
+
proc { OEmbed::Provider.new("http://foo.com/oembed.{format}/get") }.
|
28
|
+
should_not raise_error(ArgumentError)
|
29
|
+
end
|
30
|
+
|
31
|
+
it "should raise an ArgumentError given an invalid endpoint for a new instance" do
|
32
|
+
[
|
33
|
+
"httpx://foo.com/oembed/",
|
34
|
+
"ftp://foo.com/oembed/",
|
35
|
+
"foo.com/oembed/",
|
36
|
+
"http://not a uri",
|
37
|
+
nil, 1,
|
38
|
+
].each do |endpoint|
|
39
|
+
#puts "given a endpoint of #{endpoint.inspect}"
|
40
|
+
proc { OEmbed::Provider.new(endpoint) }.
|
41
|
+
should raise_error(ArgumentError)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
it "should allow no URI schema to be given" do
|
46
|
+
provier = OEmbed::Provider.new("http://foo.com/oembed")
|
47
|
+
|
48
|
+
provier.include?("http://foo.com/1").should be_true
|
49
|
+
provier.include?("http://bar.foo.com/1").should be_true
|
50
|
+
provier.include?("http://bar.foo.com/show/1").should be_true
|
51
|
+
provier.include?("https://bar.foo.com/1").should be_true
|
52
|
+
provier.include?("http://asdf.com/1").should be_true
|
53
|
+
provier.include?("asdf").should be_true
|
54
|
+
end
|
55
|
+
|
56
|
+
it "should allow a String as a URI schema" do
|
57
|
+
provier = OEmbed::Provider.new("http://foo.com/oembed")
|
58
|
+
provier << "http://bar.foo.com/*"
|
59
|
+
|
60
|
+
provier.include?("http://bar.foo.com/1").should be_true
|
61
|
+
provier.include?("http://bar.foo.com/show/1").should be_true
|
62
|
+
|
63
|
+
provier.include?("https://bar.foo.com/1").should be_false
|
64
|
+
provier.include?("http://foo.com/1").should be_false
|
65
|
+
end
|
66
|
+
|
67
|
+
it "should allow multiple path wildcards in a String URI schema" do
|
68
|
+
provier = OEmbed::Provider.new("http://foo.com/oembed")
|
69
|
+
provier << "http://bar.foo.com/*/show/*"
|
70
|
+
|
71
|
+
provier.include?("http://bar.foo.com/photo/show/1").should be_true
|
72
|
+
provier.include?("http://bar.foo.com/video/show/2").should be_true
|
73
|
+
provier.include?("http://bar.foo.com/help/video/show/2").should be_true
|
74
|
+
|
75
|
+
provier.include?("https://bar.foo.com/photo/show/1").should be_false
|
76
|
+
provier.include?("http://foo.com/video/show/2").should be_false
|
77
|
+
provier.include?("http://bar.foo.com/show/1").should be_false
|
78
|
+
provier.include?("http://bar.foo.com/1").should be_false
|
79
|
+
end
|
80
|
+
|
81
|
+
it "should NOT allow multiple domain wildcards in a String URI schema" do
|
82
|
+
provier = OEmbed::Provider.new("http://foo.com/oembed")
|
83
|
+
|
84
|
+
pending("We don't yet validate URL schema strings") do
|
85
|
+
proc { provier << "http://*.com/*" }.
|
86
|
+
should raise_error(ArgumentError)
|
87
|
+
end
|
88
|
+
|
89
|
+
provier.include?("http://foo.com/1").should be_false
|
90
|
+
end
|
91
|
+
|
92
|
+
it "should allow a sub-domain wildcard in String URI schema" do
|
93
|
+
provier = OEmbed::Provider.new("http://foo.com/oembed")
|
94
|
+
provier << "http://*.foo.com/*"
|
95
|
+
|
96
|
+
provier.include?("http://bar.foo.com/1").should be_true
|
97
|
+
provier.include?("http://foo.foo.com/2").should be_true
|
98
|
+
provier.include?("http://foo.com/3").should be_true
|
99
|
+
|
100
|
+
provier.include?("https://bar.foo.com/1").should be_false
|
101
|
+
provier.include?("http://my.bar.foo.com/1").should be_false
|
102
|
+
|
103
|
+
provier << "http://my.*.foo.com/*"
|
104
|
+
end
|
105
|
+
|
106
|
+
it "should allow multiple sub-domain wildcards in a String URI schema" do
|
107
|
+
provier = OEmbed::Provider.new("http://foo.com/oembed")
|
108
|
+
provier << "http://*.my.*.foo.com/*"
|
109
|
+
|
110
|
+
provier.include?("http://my.bar.foo.com/1").should be_true
|
111
|
+
provier.include?("http://my.foo.com/2").should be_true
|
112
|
+
provier.include?("http://bar.my.bar.foo.com/3").should be_true
|
113
|
+
|
114
|
+
provier.include?("http://bar.foo.com/1").should be_false
|
115
|
+
provier.include?("http://foo.bar.foo.com/1").should be_false
|
116
|
+
end
|
117
|
+
|
118
|
+
it "should NOT allow a scheme wildcard in a String URI schema" do
|
119
|
+
provier = OEmbed::Provider.new("http://foo.com/oembed")
|
120
|
+
|
121
|
+
pending("We don't yet validate URL schema strings") do
|
122
|
+
proc { provier << "*://foo.com/*" }.
|
123
|
+
should raise_error(ArgumentError)
|
124
|
+
end
|
125
|
+
|
126
|
+
provier.include?("http://foo.com/1").should be_false
|
127
|
+
end
|
128
|
+
|
129
|
+
it "should allow a scheme other than http in a String URI schema" do
|
130
|
+
provier = OEmbed::Provider.new("http://foo.com/oembed")
|
131
|
+
provier << "https://foo.com/*"
|
132
|
+
|
133
|
+
provier.include?("https://foo.com/1").should be_true
|
134
|
+
|
135
|
+
gopher_url = "gopher://foo.com/1"
|
136
|
+
provier.include?(gopher_url).should be_false
|
137
|
+
provier << "gopher://foo.com/*"
|
138
|
+
provier.include?(gopher_url).should be_true
|
139
|
+
end
|
140
|
+
|
141
|
+
it "should allow a Regexp as a URI schema" do
|
142
|
+
provier = OEmbed::Provider.new("http://foo.com/oembed")
|
143
|
+
provier << %r{^https?://([^\.]*\.)?foo.com/(show/)?\d+}
|
144
|
+
|
145
|
+
provier.include?("http://bar.foo.com/1").should be_true
|
146
|
+
provier.include?("http://bar.foo.com/show/1").should be_true
|
147
|
+
provier.include?("http://foo.com/1").should be_true
|
148
|
+
provier.include?("https://bar.foo.com/1").should be_true
|
149
|
+
|
150
|
+
provier.include?("http://bar.foo.com/video/1").should be_false
|
151
|
+
provier.include?("gopher://foo.com/1").should be_false
|
152
|
+
end
|
153
|
+
|
154
|
+
it "should by default use OEmbed::Formatter.default" do
|
19
155
|
@flickr.format.should == @default
|
20
156
|
end
|
21
157
|
|
@@ -27,8 +163,24 @@ describe OEmbed::Provider do
|
|
27
163
|
@viddler.format.should == :json
|
28
164
|
end
|
29
165
|
|
30
|
-
it "should
|
31
|
-
proc {
|
166
|
+
it "should allow random formats on initialization" do
|
167
|
+
proc {
|
168
|
+
yaml_provider = OEmbed::Provider.new("http://foo.com/api/oembed.{format}", :yml)
|
169
|
+
yaml_provider << "http://foo.com/*"
|
170
|
+
}.
|
171
|
+
should_not raise_error
|
172
|
+
end
|
173
|
+
|
174
|
+
it "should not allow random formats to be parsed" do
|
175
|
+
yaml_provider = OEmbed::Provider.new("http://foo.com/api/oembed.{format}", :yml)
|
176
|
+
yaml_provider << "http://foo.com/*"
|
177
|
+
yaml_url = "http://foo.com/video/1"
|
178
|
+
|
179
|
+
yaml_provider.should_receive(:raw).
|
180
|
+
with(yaml_url, {:format=>:yml}).
|
181
|
+
and_return(valid_response(:json))
|
182
|
+
|
183
|
+
proc { yaml_provider.get(yaml_url) }.
|
32
184
|
should raise_error(OEmbed::FormatNotSupported)
|
33
185
|
end
|
34
186
|
|
@@ -43,32 +195,28 @@ describe OEmbed::Provider do
|
|
43
195
|
@qik.include?(example_url(:qik)).should be_true
|
44
196
|
end
|
45
197
|
|
46
|
-
it "should detect if the format is in the URL" do
|
47
|
-
@flickr.format_in_url?.should be_false
|
48
|
-
@qik.format_in_url?.should be_true
|
49
|
-
end
|
50
|
-
|
51
198
|
it "should raise error if the URL is invalid" do
|
52
|
-
proc{ @flickr.build
|
53
|
-
proc{ @qik.build
|
199
|
+
proc{ @flickr.send(:build, example_url(:fake)) }.should raise_error(OEmbed::NotFound)
|
200
|
+
proc{ @qik.send(:build, example_url(:fake)) }.should raise_error(OEmbed::NotFound)
|
54
201
|
end
|
55
202
|
|
56
203
|
describe "#build" do
|
57
204
|
it "should return a proper URL" do
|
58
|
-
uri = @flickr.build
|
205
|
+
uri = @flickr.send(:build, example_url(:flickr))
|
59
206
|
uri.host.should == "www.flickr.com"
|
60
207
|
uri.path.should == "/services/oembed/"
|
61
208
|
uri.query.include?("format=#{@flickr.format}").should be_true
|
62
209
|
uri.query.include?("url=http://flickr.com/photos/bees/2362225867/").should be_true
|
63
210
|
|
64
|
-
uri = @qik.build
|
211
|
+
uri = @qik.send(:build, example_url(:qik))
|
65
212
|
uri.host.should == "qik.com"
|
66
213
|
uri.path.should == "/api/oembed.xml"
|
214
|
+
uri.query.include?("format=#{@qik.format}").should be_false
|
67
215
|
uri.query.should == "url=http://qik.com/video/49565"
|
68
216
|
end
|
69
217
|
|
70
218
|
it "should accept parameters" do
|
71
|
-
uri = @flickr.build
|
219
|
+
uri = @flickr.send(:build, example_url(:flickr),
|
72
220
|
:maxwidth => 600,
|
73
221
|
:maxheight => 200,
|
74
222
|
:format => :xml,
|
@@ -81,7 +229,7 @@ describe OEmbed::Provider do
|
|
81
229
|
end
|
82
230
|
|
83
231
|
it "should build correctly when format is in the endpoint URL" do
|
84
|
-
uri = @qik.build
|
232
|
+
uri = @qik.send(:build, example_url(:qik), :format => :json)
|
85
233
|
uri.path.should == "/api/oembed.json"
|
86
234
|
end
|
87
235
|
end
|
@@ -95,7 +243,7 @@ describe OEmbed::Provider do
|
|
95
243
|
end
|
96
244
|
Net::HTTP.stub!(:start).and_return(res)
|
97
245
|
|
98
|
-
@flickr.raw
|
246
|
+
@flickr.send(:raw, example_url(:flickr)).should == "raw content"
|
99
247
|
end
|
100
248
|
|
101
249
|
it "should raise error on 501" do
|
@@ -103,7 +251,7 @@ describe OEmbed::Provider do
|
|
103
251
|
Net::HTTP.stub!(:start).and_return(res)
|
104
252
|
|
105
253
|
proc do
|
106
|
-
@flickr.raw
|
254
|
+
@flickr.send(:raw, example_url(:flickr))
|
107
255
|
end.should raise_error(OEmbed::UnknownFormat)
|
108
256
|
end
|
109
257
|
|
@@ -112,7 +260,7 @@ describe OEmbed::Provider do
|
|
112
260
|
Net::HTTP.stub!(:start).and_return(res)
|
113
261
|
|
114
262
|
proc do
|
115
|
-
@flickr.raw
|
263
|
+
@flickr.send(:raw, example_url(:flickr))
|
116
264
|
end.should raise_error(OEmbed::NotFound)
|
117
265
|
end
|
118
266
|
|
@@ -124,7 +272,7 @@ describe OEmbed::Provider do
|
|
124
272
|
Net::HTTP.stub!(:start).and_return(r)
|
125
273
|
|
126
274
|
proc do
|
127
|
-
@flickr.raw
|
275
|
+
@flickr.send(:raw, example_url(:flickr))
|
128
276
|
end.should raise_error(OEmbed::UnknownResponse)
|
129
277
|
end
|
130
278
|
end
|
@@ -149,6 +297,28 @@ describe OEmbed::Provider do
|
|
149
297
|
@flickr.get(example_url(:flickr), :format=>:yml)
|
150
298
|
end.should raise_error(OEmbed::FormatNotSupported)
|
151
299
|
end
|
300
|
+
|
301
|
+
it "should return OEmbed::Response" do
|
302
|
+
@flickr.stub!(:raw).and_return(valid_response(@default))
|
303
|
+
@flickr.get(example_url(:flickr)).should be_a(OEmbed::Response)
|
304
|
+
end
|
305
|
+
|
306
|
+
it "should be calling OEmbed::Response#create_for internally" do
|
307
|
+
@flickr.stub!(:raw).and_return(valid_response(@default))
|
308
|
+
OEmbed::Response.should_receive(:create_for).
|
309
|
+
with(valid_response(@default), @flickr, example_url(:flickr), @default.to_s)
|
310
|
+
@flickr.get(example_url(:flickr))
|
311
|
+
|
312
|
+
@qik.stub!(:raw).and_return(valid_response(:xml))
|
313
|
+
OEmbed::Response.should_receive(:create_for).
|
314
|
+
with(valid_response(:xml), @qik, example_url(:qik), 'xml')
|
315
|
+
@qik.get(example_url(:qik))
|
316
|
+
|
317
|
+
@viddler.stub!(:raw).and_return(valid_response(:json))
|
318
|
+
OEmbed::Response.should_receive(:create_for).
|
319
|
+
with(valid_response(:json), @viddler, example_url(:viddler), 'json')
|
320
|
+
@viddler.get(example_url(:viddler))
|
321
|
+
end
|
152
322
|
|
153
323
|
it "should send the provider's format if none is specified" do
|
154
324
|
@flickr.should_receive(:raw).
|
@@ -166,10 +336,5 @@ describe OEmbed::Provider do
|
|
166
336
|
and_return(valid_response(:json))
|
167
337
|
@viddler.get(example_url(:viddler))
|
168
338
|
end
|
169
|
-
|
170
|
-
it "should return OEmbed::Response" do
|
171
|
-
@flickr.stub!(:raw).and_return(valid_response(@default))
|
172
|
-
@flickr.get(example_url(:flickr)).is_a?(OEmbed::Response).should be_true
|
173
|
-
end
|
174
339
|
end
|
175
340
|
end
|
data/spec/providers_spec.rb
CHANGED
@@ -12,7 +12,13 @@ describe OEmbed::Providers do
|
|
12
12
|
@qik << "http://qik.com/*"
|
13
13
|
end
|
14
14
|
|
15
|
+
after(:each) do
|
16
|
+
OEmbed::Providers.unregister_all
|
17
|
+
end
|
18
|
+
|
15
19
|
it "should register providers" do
|
20
|
+
OEmbed::Providers.urls.should be_empty
|
21
|
+
|
16
22
|
OEmbed::Providers.register(@flickr, @qik)
|
17
23
|
|
18
24
|
OEmbed::Providers.urls.keys.should == @flickr.urls + @qik.urls
|
@@ -29,11 +35,15 @@ describe OEmbed::Providers do
|
|
29
35
|
end
|
30
36
|
|
31
37
|
it "should find by URLs" do
|
38
|
+
OEmbed::Providers.register(@flickr, @qik) # tested in "should register providers"
|
39
|
+
|
32
40
|
OEmbed::Providers.find(example_url(:flickr)).should == @flickr
|
33
41
|
OEmbed::Providers.find(example_url(:qik)).should == @qik
|
34
42
|
end
|
35
43
|
|
36
44
|
it "should unregister providers" do
|
45
|
+
OEmbed::Providers.register(@flickr, @qik) # tested in "should register providers"
|
46
|
+
|
37
47
|
OEmbed::Providers.unregister(@flickr)
|
38
48
|
|
39
49
|
@flickr.urls.each do |regexp|
|
@@ -56,7 +66,7 @@ describe OEmbed::Providers do
|
|
56
66
|
@qik.urls.should include(regexp)
|
57
67
|
end
|
58
68
|
|
59
|
-
OEmbed::Providers.register(@qik_mirror)
|
69
|
+
OEmbed::Providers.register(@qik, @qik_mirror)
|
60
70
|
|
61
71
|
OEmbed::Providers.urls.keys.should == @qik.urls
|
62
72
|
|
@@ -122,6 +132,7 @@ describe OEmbed::Providers do
|
|
122
132
|
end
|
123
133
|
|
124
134
|
it "should raise an error if no embeddable content is found" do
|
135
|
+
OEmbed::Providers.register_all
|
125
136
|
["http://fake.com/", example_url(:google_video)].each do |url|
|
126
137
|
proc { OEmbed::Providers.get(url) }.should raise_error(OEmbed::NotFound)
|
127
138
|
proc { OEmbed::Providers.raw(url) }.should raise_error(OEmbed::NotFound)
|
@@ -136,6 +147,10 @@ describe OEmbed::Providers do
|
|
136
147
|
end
|
137
148
|
|
138
149
|
it "should fallback to the appropriate provider when URL isn't found" do
|
150
|
+
OEmbed::Providers.register_all
|
151
|
+
OEmbed::Providers.register_fallback(OEmbed::Providers::Hulu)
|
152
|
+
OEmbed::Providers.register_fallback(OEmbed::Providers::OohEmbed)
|
153
|
+
|
139
154
|
url = example_url(:google_video)
|
140
155
|
|
141
156
|
provider = OEmbed::Providers.fallback.last
|
@@ -157,6 +172,10 @@ describe OEmbed::Providers do
|
|
157
172
|
end
|
158
173
|
|
159
174
|
it "should still raise an error if no embeddable content is found" do
|
175
|
+
OEmbed::Providers.register_all
|
176
|
+
OEmbed::Providers.register_fallback(OEmbed::Providers::Hulu)
|
177
|
+
OEmbed::Providers.register_fallback(OEmbed::Providers::OohEmbed)
|
178
|
+
|
160
179
|
["http://fake.com/"].each do |url|
|
161
180
|
proc { OEmbed::Providers.get(url) }.should raise_error(OEmbed::NotFound)
|
162
181
|
proc { OEmbed::Providers.raw(url) }.should raise_error(OEmbed::NotFound)
|
data/spec/response_spec.rb
CHANGED
@@ -15,53 +15,95 @@ describe OEmbed::Response do
|
|
15
15
|
|
16
16
|
@new_res = OEmbed::Response.new(valid_response(:object), OEmbed::Providers::OohEmbed)
|
17
17
|
|
18
|
-
@default_res = OEmbed::Response.create_for(valid_response(:json), @flickr, example_url(:flickr))
|
18
|
+
@default_res = OEmbed::Response.create_for(valid_response(:json), @flickr, example_url(:flickr), :json)
|
19
19
|
@xml_res = OEmbed::Response.create_for(valid_response(:xml), @qik, example_url(:qik), :xml)
|
20
20
|
@json_res = OEmbed::Response.create_for(valid_response(:json), @viddler, example_url(:viddler), :json)
|
21
|
-
end
|
22
|
-
|
23
|
-
it "should set the provider" do
|
24
|
-
@new_res.provider.should == OEmbed::Providers::OohEmbed
|
25
|
-
|
26
|
-
@default_res.provider.should == @flickr
|
27
|
-
@xml_res.provider.should == @qik
|
28
|
-
@json_res.provider.should == @viddler
|
29
|
-
end
|
30
|
-
|
31
|
-
it "should parse the data into #fields" do
|
32
|
-
@new_res.fields.keys.should == valid_response(:object).keys
|
33
21
|
|
34
|
-
|
35
|
-
@
|
36
|
-
|
22
|
+
# These keys should be turned into helper methods
|
23
|
+
@expected_helpers = {
|
24
|
+
"type" => "random",
|
25
|
+
"version" => "1.0",
|
26
|
+
"html" => "<em>Hello world!</em>",
|
27
|
+
"url" => "http://foo.com/bar",
|
28
|
+
}
|
29
|
+
# These keys should already be defined
|
30
|
+
@expected_skipped = {
|
31
|
+
"fields" => "hello",
|
32
|
+
"__id__" => 1234,
|
33
|
+
"provider" => "oohEmbed",
|
34
|
+
"to_s" => "random string",
|
35
|
+
}
|
36
|
+
@all_expected = @expected_helpers.merge(@expected_skipped)
|
37
37
|
end
|
38
38
|
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
39
|
+
describe "#initialize" do
|
40
|
+
it "should parse the data into fields" do
|
41
|
+
# We need to compare keys & values separately because we don't expect all
|
42
|
+
# non-string values to be recognized correctly.
|
43
|
+
|
44
|
+
@new_res.fields.keys.should == valid_response(:object).keys
|
45
|
+
@new_res.fields.values.map{|v|v.to_s}.should == valid_response(:object).values.map{|v|v.to_s}
|
46
|
+
|
47
|
+
@default_res.fields.keys.should == valid_response(:object).keys
|
48
|
+
@default_res.fields.values.map{|v|v.to_s}.should == valid_response(:object).values.map{|v|v.to_s}
|
49
|
+
|
50
|
+
@xml_res.fields.keys.should == valid_response(:object).keys
|
51
|
+
@xml_res.fields.values.map{|v|v.to_s}.should == valid_response(:object).values.map{|v|v.to_s}
|
52
|
+
|
53
|
+
@json_res.fields.keys.should == valid_response(:object).keys
|
54
|
+
@json_res.fields.values.map{|v|v.to_s}.should == valid_response(:object).values.map{|v|v.to_s}
|
55
|
+
end
|
56
|
+
|
57
|
+
it "should set the provider" do
|
58
|
+
@new_res.provider.should == OEmbed::Providers::OohEmbed
|
59
|
+
@default_res.provider.should == @flickr
|
60
|
+
@xml_res.provider.should == @qik
|
61
|
+
@json_res.provider.should == @viddler
|
62
|
+
end
|
63
|
+
|
64
|
+
it "should set the format" do
|
65
|
+
@new_res.format.should be_nil
|
66
|
+
@default_res.format.to_s.should == 'json'
|
67
|
+
@xml_res.format.to_s.should == 'xml'
|
68
|
+
@json_res.format.to_s.should == 'json'
|
69
|
+
end
|
70
|
+
|
71
|
+
it "should set the request_url" do
|
72
|
+
@new_res.request_url.should be_nil
|
73
|
+
@default_res.request_url.to_s.should == example_url(:flickr)
|
74
|
+
@xml_res.request_url.to_s.should == example_url(:qik)
|
75
|
+
@json_res.request_url.to_s.should == example_url(:viddler)
|
76
|
+
end
|
51
77
|
end
|
52
78
|
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
79
|
+
describe "create_for" do
|
80
|
+
it "should only allow JSON or XML" do
|
81
|
+
lambda do
|
82
|
+
OEmbed::Response.create_for(valid_response(:json), @flickr, example_url(:flickr), :json)
|
83
|
+
end.should_not raise_error(OEmbed::FormatNotSupported)
|
84
|
+
|
85
|
+
lambda do
|
86
|
+
OEmbed::Response.create_for(valid_response(:xml), @flickr, example_url(:flickr), :xml)
|
87
|
+
end.should_not raise_error(OEmbed::FormatNotSupported)
|
88
|
+
|
89
|
+
lambda do
|
90
|
+
OEmbed::Response.create_for(valid_response(:yml), @flickr, example_url(:flickr), :yml)
|
91
|
+
end.should raise_error(OEmbed::FormatNotSupported)
|
92
|
+
end
|
93
|
+
|
94
|
+
it "should not parse the incorrect format" do
|
95
|
+
lambda do
|
96
|
+
OEmbed::Response.create_for(valid_response(:object), example_url(:flickr), @flickr, :json)
|
97
|
+
end.should raise_error(OEmbed::ParseError)
|
98
|
+
|
99
|
+
lambda do
|
100
|
+
OEmbed::Response.create_for(valid_response(:xml), example_url(:flickr), @viddler, :json)
|
101
|
+
end.should raise_error(OEmbed::ParseError)
|
102
|
+
|
103
|
+
lambda do
|
104
|
+
OEmbed::Response.create_for(valid_response(:json), example_url(:flickr), @viddler, :xml)
|
105
|
+
end.should raise_error(OEmbed::ParseError)
|
106
|
+
end
|
65
107
|
end
|
66
108
|
|
67
109
|
it "should access the XML data through #field" do
|
@@ -75,16 +117,55 @@ describe OEmbed::Response do
|
|
75
117
|
@json_res.field(:type).should == "photo"
|
76
118
|
@json_res.field(:version).should == "1.0"
|
77
119
|
@json_res.field(:fields).should == "hello"
|
78
|
-
@json_res.field(:__id__).should == 1234
|
120
|
+
@json_res.field(:__id__).should == "1234"
|
79
121
|
end
|
80
122
|
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
end
|
123
|
+
describe "#define_methods!" do
|
124
|
+
it "should automagically define helpers" do
|
125
|
+
local_res = OEmbed::Response.new(@all_expected, OEmbed::Providers::OohEmbed)
|
85
126
|
|
86
|
-
|
87
|
-
|
88
|
-
|
127
|
+
@all_expected.each do |method, value|
|
128
|
+
local_res.should respond_to(method)
|
129
|
+
end
|
130
|
+
@expected_helpers.each do |method, value|
|
131
|
+
local_res.send(method).should == value
|
132
|
+
end
|
133
|
+
@expected_skipped.each do |method, value|
|
134
|
+
local_res.send(method).should_not == value
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
138
|
+
it "should protect most already defined methods" do
|
139
|
+
Object.new.should respond_to('__id__')
|
140
|
+
Object.new.should respond_to('to_s')
|
141
|
+
|
142
|
+
@all_expected.keys.should include('__id__')
|
143
|
+
@all_expected.keys.should include('to_s')
|
144
|
+
|
145
|
+
local_res = OEmbed::Response.new(@all_expected, OEmbed::Providers::OohEmbed)
|
146
|
+
|
147
|
+
local_res.__id__.should_not == local_res.field('__id__')
|
148
|
+
local_res.to_s.should_not == local_res.field('to_s')
|
149
|
+
end
|
150
|
+
|
151
|
+
it "should not protect already defined methods that are specifically overridable" do
|
152
|
+
class Object
|
153
|
+
def version
|
154
|
+
"two point oh"
|
155
|
+
end
|
156
|
+
end
|
157
|
+
|
158
|
+
Object.new.should respond_to('version')
|
159
|
+
String.new.should respond_to('version')
|
160
|
+
|
161
|
+
@all_expected.keys.should include('version')
|
162
|
+
@all_expected['version'].should_not == String.new.version
|
163
|
+
|
164
|
+
local_res = OEmbed::Response.new(@all_expected, OEmbed::Providers::OohEmbed)
|
165
|
+
|
166
|
+
local_res.version.should == local_res.field('version')
|
167
|
+
local_res.version.should_not == String.new.version
|
168
|
+
end
|
89
169
|
end
|
170
|
+
|
90
171
|
end
|