ruby-oembed 0.8.3 → 0.8.5
Sign up to get free protection for your applications and to get access to all the features.
- data/.travis.yml +3 -0
- data/CHANGELOG.rdoc +11 -2
- data/Gemfile +3 -0
- data/Gemfile.lock +6 -0
- data/README.rdoc +2 -12
- data/lib/oembed/formatter/json/backends/yaml.rb +1 -1
- data/lib/oembed/formatter/xml/backends/nokogiri.rb +41 -0
- data/lib/oembed/formatter/xml/backends/xmlsimple.rb +1 -1
- data/lib/oembed/provider.rb +1 -1
- data/lib/oembed/provider_discovery.rb +8 -6
- data/lib/oembed/providers/embedly_urls.yml +49 -6
- data/lib/oembed/providers.rb +8 -1
- data/lib/oembed/version.rb +1 -1
- data/ruby-oembed.gemspec +23 -9
- data/spec/cassettes/OEmbed_ProviderDiscovery.yml +4058 -0
- data/spec/formatter/xml/nokogiri_backend_spec.rb +58 -0
- data/spec/provider_discovery_spec.rb +116 -0
- data/spec/provider_spec.rb +2 -1
- data/spec/spec_helper.rb +3 -2
- metadata +106 -100
@@ -0,0 +1,58 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../../spec_helper'
|
2
|
+
|
3
|
+
describe "OEmbed::Formatter::XML::Backends::Nokogiri" do
|
4
|
+
include OEmbedSpecHelper
|
5
|
+
|
6
|
+
before(:all) do
|
7
|
+
lambda {
|
8
|
+
OEmbed::Formatter::XML.backend = 'Nokogiri'
|
9
|
+
}.should raise_error(LoadError)
|
10
|
+
|
11
|
+
require 'nokogiri'
|
12
|
+
|
13
|
+
lambda {
|
14
|
+
OEmbed::Formatter::XML.backend = 'Nokogiri'
|
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 Nokogiri backend" do
|
24
|
+
OEmbed::Formatter::XML.backend.should == OEmbed::Formatter::XML::Backends::Nokogiri
|
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
|
+
|
35
|
+
it "should raise an OEmbed::ParseError when decoding an invalid XML String" do
|
36
|
+
lambda {
|
37
|
+
decode = OEmbed::Formatter.decode(:xml, invalid_response('unclosed_container', :xml))
|
38
|
+
}.should raise_error(OEmbed::ParseError)
|
39
|
+
lambda {
|
40
|
+
decode = OEmbed::Formatter.decode(:xml, invalid_response('unclosed_tag', :xml))
|
41
|
+
}.should raise_error(OEmbed::ParseError)
|
42
|
+
lambda {
|
43
|
+
decode = OEmbed::Formatter.decode(:xml, invalid_response('invalid_syntax', :xml))
|
44
|
+
}.should raise_error(OEmbed::ParseError)
|
45
|
+
end
|
46
|
+
|
47
|
+
it "should raise an OEmbed::ParseError when decoding fails with an unexpected error" do
|
48
|
+
error_to_raise = ArgumentError
|
49
|
+
OEmbed::Formatter::XML.backend.parse_error.should_not be_kind_of(error_to_raise)
|
50
|
+
|
51
|
+
::Nokogiri::XML::Document.should_receive(:parse).
|
52
|
+
and_raise(error_to_raise.new("unknown error"))
|
53
|
+
|
54
|
+
lambda {
|
55
|
+
decode = OEmbed::Formatter.decode(:xml, valid_response(:xml))
|
56
|
+
}.should raise_error(OEmbed::ParseError)
|
57
|
+
end
|
58
|
+
end
|
@@ -0,0 +1,116 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/spec_helper'
|
2
|
+
require 'vcr'
|
3
|
+
|
4
|
+
VCR.config do |c|
|
5
|
+
c.default_cassette_options = { :record => :new_episodes }
|
6
|
+
c.cassette_library_dir = 'spec/cassettes'
|
7
|
+
c.stub_with :fakeweb
|
8
|
+
end
|
9
|
+
|
10
|
+
describe OEmbed::ProviderDiscovery do
|
11
|
+
before(:all) do
|
12
|
+
VCR.insert_cassette('OEmbed_ProviderDiscovery')
|
13
|
+
end
|
14
|
+
after(:all) do
|
15
|
+
VCR.eject_cassette
|
16
|
+
end
|
17
|
+
|
18
|
+
include OEmbedSpecHelper
|
19
|
+
|
20
|
+
{
|
21
|
+
'youtube' => [
|
22
|
+
'http://www.youtube.com/watch?v=u6XAPnuFjJc',
|
23
|
+
'http://www.youtube.com/oembed',
|
24
|
+
:json,
|
25
|
+
],
|
26
|
+
'vimeo' => [
|
27
|
+
'http://vimeo.com/27953845',
|
28
|
+
{:json=>'http://vimeo.com/api/oembed.json',:xml=>'http://vimeo.com/api/oembed.xml'},
|
29
|
+
:json,
|
30
|
+
],
|
31
|
+
#'noteflight' => [
|
32
|
+
# 'http://www.noteflight.com/scores/view/09665392c94475f65dfaf5f30aadb6ed0921939d',
|
33
|
+
# 'http://www.noteflight.com/services/oembed',
|
34
|
+
# :json,
|
35
|
+
#],
|
36
|
+
#'wordpress' => [
|
37
|
+
# 'http://sweetandweak.wordpress.com/2011/09/23/nothing-starts-the-morning-like-a-good-dose-of-panic/',
|
38
|
+
# 'http://public-api.wordpress.com/oembed/1.0/',
|
39
|
+
# :json,
|
40
|
+
#],
|
41
|
+
}.each do |context, urls|
|
42
|
+
|
43
|
+
given_url, expected_endpoint, expected_format = urls
|
44
|
+
|
45
|
+
context "with #{context} url" do
|
46
|
+
|
47
|
+
describe "discover_provider" do
|
48
|
+
|
49
|
+
before(:all) do
|
50
|
+
@provider_default = OEmbed::ProviderDiscovery.discover_provider(given_url)
|
51
|
+
@provider_json = OEmbed::ProviderDiscovery.discover_provider(given_url, :format=>:json)
|
52
|
+
@provider_xml = OEmbed::ProviderDiscovery.discover_provider(given_url, :format=>:xml)
|
53
|
+
end
|
54
|
+
|
55
|
+
it "should return the correct Class" do
|
56
|
+
@provider_default.should be_instance_of(OEmbed::Provider)
|
57
|
+
@provider_json.should be_instance_of(OEmbed::Provider)
|
58
|
+
@provider_xml.should be_instance_of(OEmbed::Provider)
|
59
|
+
end
|
60
|
+
|
61
|
+
it "should detect the correct URL" do
|
62
|
+
if expected_endpoint.is_a?(Hash)
|
63
|
+
@provider_json.endpoint.should eq(expected_endpoint[expected_format])
|
64
|
+
@provider_json.endpoint.should eq(expected_endpoint[:json])
|
65
|
+
@provider_xml.endpoint.should eq(expected_endpoint[:xml])
|
66
|
+
else
|
67
|
+
@provider_default.endpoint.should eq(expected_endpoint)
|
68
|
+
@provider_json.endpoint.should eq(expected_endpoint)
|
69
|
+
@provider_xml.endpoint.should eq(expected_endpoint)
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
it "should return the correct format" do
|
74
|
+
@provider_default.format.should eq(expected_format)
|
75
|
+
@provider_json.format.should eq(:json)
|
76
|
+
@provider_xml.format.should eq(:xml)
|
77
|
+
end
|
78
|
+
end # discover_provider
|
79
|
+
|
80
|
+
describe "get" do
|
81
|
+
|
82
|
+
before(:all) do
|
83
|
+
@response_default = OEmbed::ProviderDiscovery.get(given_url)
|
84
|
+
@response_json = OEmbed::ProviderDiscovery.get(given_url, :format=>:json)
|
85
|
+
@response_xml = OEmbed::ProviderDiscovery.get(given_url, :format=>:xml)
|
86
|
+
end
|
87
|
+
|
88
|
+
it "should return the correct Class" do
|
89
|
+
@response_default.should be_kind_of(OEmbed::Response)
|
90
|
+
@response_json.should be_kind_of(OEmbed::Response)
|
91
|
+
@response_xml.should be_kind_of(OEmbed::Response)
|
92
|
+
end
|
93
|
+
|
94
|
+
it "should return the correct format" do
|
95
|
+
@response_default.format.should eq(expected_format.to_s)
|
96
|
+
@response_json.format.should eq('json')
|
97
|
+
@response_xml.format.should eq('xml')
|
98
|
+
end
|
99
|
+
|
100
|
+
it "should return the correct data" do
|
101
|
+
@response_default.type.should_not be_nil
|
102
|
+
@response_json.type.should_not be_nil
|
103
|
+
@response_xml.type.should_not be_nil
|
104
|
+
|
105
|
+
# Technically, the following values _could_ be blank, but for the
|
106
|
+
# examples urls we're using we expect them not to be.
|
107
|
+
@response_default.title.should_not be_nil
|
108
|
+
@response_json.title.should_not be_nil
|
109
|
+
@response_xml.title.should_not be_nil
|
110
|
+
end
|
111
|
+
end # get
|
112
|
+
end
|
113
|
+
|
114
|
+
end # each service
|
115
|
+
|
116
|
+
end
|
data/spec/provider_spec.rb
CHANGED
@@ -266,7 +266,8 @@ describe OEmbed::Provider do
|
|
266
266
|
|
267
267
|
it "should raise error on all other responses" do
|
268
268
|
Net::HTTPResponse::CODE_TO_OBJ.delete_if do |code, res|
|
269
|
-
|
269
|
+
("200".."299").include?(code) ||
|
270
|
+
["404", "501"].include?(code)
|
270
271
|
end.each do |code, res|
|
271
272
|
r = res.new("1.1", code, "Message")
|
272
273
|
Net::HTTP.stub!(:start).and_return(r)
|
data/spec/spec_helper.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'rubygems'
|
2
|
+
require 'vcr'
|
2
3
|
require File.dirname(__FILE__) + '/../lib/oembed'
|
3
4
|
|
4
5
|
module OEmbedSpecHelper
|
@@ -45,7 +46,7 @@ module OEmbedSpecHelper
|
|
45
46
|
"__id__" => 1234
|
46
47
|
}
|
47
48
|
when 'json'
|
48
|
-
<<-JSON
|
49
|
+
<<-JSON.strip
|
49
50
|
{
|
50
51
|
"type": "photo",
|
51
52
|
"version": "1.0",
|
@@ -54,7 +55,7 @@ module OEmbedSpecHelper
|
|
54
55
|
}
|
55
56
|
JSON
|
56
57
|
when 'xml'
|
57
|
-
<<-XML
|
58
|
+
<<-XML.strip
|
58
59
|
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
59
60
|
<oembed>
|
60
61
|
<type>photo</type>
|
metadata
CHANGED
@@ -1,15 +1,10 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby-oembed
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.8.5
|
5
5
|
prerelease:
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 8
|
9
|
-
- 3
|
10
|
-
version: 0.8.3
|
11
6
|
platform: ruby
|
12
|
-
authors:
|
7
|
+
authors:
|
13
8
|
- Magnus Holm
|
14
9
|
- Alex Kessinger
|
15
10
|
- Aris Bartee
|
@@ -17,92 +12,108 @@ authors:
|
|
17
12
|
autorequire:
|
18
13
|
bindir: bin
|
19
14
|
cert_chain: []
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
dependencies:
|
24
|
-
- !ruby/object:Gem::Dependency
|
25
|
-
version_requirements: &id001 !ruby/object:Gem::Requirement
|
26
|
-
none: false
|
27
|
-
requirements:
|
28
|
-
- - ">="
|
29
|
-
- !ruby/object:Gem::Version
|
30
|
-
hash: 3
|
31
|
-
segments:
|
32
|
-
- 0
|
33
|
-
version: "0"
|
15
|
+
date: 2011-11-15 00:00:00.000000000Z
|
16
|
+
dependencies:
|
17
|
+
- !ruby/object:Gem::Dependency
|
34
18
|
name: jeweler
|
35
|
-
|
36
|
-
type: :development
|
37
|
-
requirement: *id001
|
38
|
-
- !ruby/object:Gem::Dependency
|
39
|
-
version_requirements: &id002 !ruby/object:Gem::Requirement
|
19
|
+
requirement: &2170353860 !ruby/object:Gem::Requirement
|
40
20
|
none: false
|
41
|
-
requirements:
|
42
|
-
- -
|
43
|
-
- !ruby/object:Gem::Version
|
44
|
-
|
45
|
-
segments:
|
46
|
-
- 0
|
47
|
-
version: "0"
|
48
|
-
name: rake
|
49
|
-
prerelease: false
|
21
|
+
requirements:
|
22
|
+
- - ! '>='
|
23
|
+
- !ruby/object:Gem::Version
|
24
|
+
version: '0'
|
50
25
|
type: :development
|
51
|
-
|
52
|
-
|
53
|
-
|
26
|
+
prerelease: false
|
27
|
+
version_requirements: *2170353860
|
28
|
+
- !ruby/object:Gem::Dependency
|
29
|
+
name: rake
|
30
|
+
requirement: &2170353280 !ruby/object:Gem::Requirement
|
54
31
|
none: false
|
55
|
-
requirements:
|
56
|
-
- -
|
57
|
-
- !ruby/object:Gem::Version
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
32
|
+
requirements:
|
33
|
+
- - ! '>='
|
34
|
+
- !ruby/object:Gem::Version
|
35
|
+
version: '0'
|
36
|
+
type: :development
|
37
|
+
prerelease: false
|
38
|
+
version_requirements: *2170353280
|
39
|
+
- !ruby/object:Gem::Dependency
|
62
40
|
name: json
|
41
|
+
requirement: &2170352700 !ruby/object:Gem::Requirement
|
42
|
+
none: false
|
43
|
+
requirements:
|
44
|
+
- - ! '>='
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '0'
|
47
|
+
type: :development
|
63
48
|
prerelease: false
|
49
|
+
version_requirements: *2170352700
|
50
|
+
- !ruby/object:Gem::Dependency
|
51
|
+
name: xml-simple
|
52
|
+
requirement: &2170352120 !ruby/object:Gem::Requirement
|
53
|
+
none: false
|
54
|
+
requirements:
|
55
|
+
- - ! '>='
|
56
|
+
- !ruby/object:Gem::Version
|
57
|
+
version: '0'
|
64
58
|
type: :development
|
65
|
-
|
66
|
-
|
67
|
-
|
59
|
+
prerelease: false
|
60
|
+
version_requirements: *2170352120
|
61
|
+
- !ruby/object:Gem::Dependency
|
62
|
+
name: nokogiri
|
63
|
+
requirement: &2170351480 !ruby/object:Gem::Requirement
|
68
64
|
none: false
|
69
|
-
requirements:
|
70
|
-
- -
|
71
|
-
- !ruby/object:Gem::Version
|
72
|
-
|
73
|
-
|
74
|
-
- 0
|
75
|
-
version: "0"
|
76
|
-
name: xml-simple
|
65
|
+
requirements:
|
66
|
+
- - ! '>='
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
type: :development
|
77
70
|
prerelease: false
|
71
|
+
version_requirements: *2170351480
|
72
|
+
- !ruby/object:Gem::Dependency
|
73
|
+
name: rspec
|
74
|
+
requirement: &2170350980 !ruby/object:Gem::Requirement
|
75
|
+
none: false
|
76
|
+
requirements:
|
77
|
+
- - ! '>='
|
78
|
+
- !ruby/object:Gem::Version
|
79
|
+
version: '2.0'
|
78
80
|
type: :development
|
79
|
-
|
80
|
-
|
81
|
-
|
81
|
+
prerelease: false
|
82
|
+
version_requirements: *2170350980
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: vcr
|
85
|
+
requirement: &2170350500 !ruby/object:Gem::Requirement
|
82
86
|
none: false
|
83
|
-
requirements:
|
84
|
-
- -
|
85
|
-
- !ruby/object:Gem::Version
|
86
|
-
|
87
|
-
|
88
|
-
- 2
|
89
|
-
- 0
|
90
|
-
version: "2.0"
|
91
|
-
name: rspec
|
87
|
+
requirements:
|
88
|
+
- - ~>
|
89
|
+
- !ruby/object:Gem::Version
|
90
|
+
version: '1.0'
|
91
|
+
type: :development
|
92
92
|
prerelease: false
|
93
|
+
version_requirements: *2170350500
|
94
|
+
- !ruby/object:Gem::Dependency
|
95
|
+
name: fakeweb
|
96
|
+
requirement: &2170350020 !ruby/object:Gem::Requirement
|
97
|
+
none: false
|
98
|
+
requirements:
|
99
|
+
- - ! '>='
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: '0'
|
93
102
|
type: :development
|
94
|
-
|
95
|
-
|
103
|
+
prerelease: false
|
104
|
+
version_requirements: *2170350020
|
105
|
+
description: An oEmbed consumer library written in Ruby, letting you easily get embeddable
|
106
|
+
HTML representations of supported web pages, based on their URLs. See http://oembed.com
|
107
|
+
for more information about the protocol.
|
96
108
|
email: arisbartee@gmail.com
|
97
109
|
executables: []
|
98
|
-
|
99
110
|
extensions: []
|
100
|
-
|
101
|
-
extra_rdoc_files:
|
111
|
+
extra_rdoc_files:
|
102
112
|
- LICENSE
|
103
113
|
- README.rdoc
|
104
|
-
files:
|
114
|
+
files:
|
105
115
|
- .rvmrc
|
116
|
+
- .travis.yml
|
106
117
|
- .yardopts
|
107
118
|
- CHANGELOG.rdoc
|
108
119
|
- Gemfile
|
@@ -121,6 +132,7 @@ files:
|
|
121
132
|
- lib/oembed/formatter/json/backends/jsongem.rb
|
122
133
|
- lib/oembed/formatter/json/backends/yaml.rb
|
123
134
|
- lib/oembed/formatter/xml.rb
|
135
|
+
- lib/oembed/formatter/xml/backends/nokogiri.rb
|
124
136
|
- lib/oembed/formatter/xml/backends/rexml.rb
|
125
137
|
- lib/oembed/formatter/xml/backends/xmlsimple.rb
|
126
138
|
- lib/oembed/provider.rb
|
@@ -137,57 +149,51 @@ files:
|
|
137
149
|
- lib/tasks/oembed.rake
|
138
150
|
- lib/tasks/rspec.rake
|
139
151
|
- ruby-oembed.gemspec
|
152
|
+
- spec/cassettes/OEmbed_ProviderDiscovery.yml
|
140
153
|
- spec/formatter/ducktype_backend_spec.rb
|
141
154
|
- spec/formatter/json/.DS_Store
|
142
155
|
- spec/formatter/json/jsongem_backend_spec.rb
|
143
156
|
- spec/formatter/json/yaml_backend_spec.rb
|
157
|
+
- spec/formatter/xml/nokogiri_backend_spec.rb
|
144
158
|
- spec/formatter/xml/rexml_backend_spec.rb
|
145
159
|
- spec/formatter/xml/xmlsimple_backend_spec.rb
|
146
160
|
- spec/formatter_spec.rb
|
161
|
+
- spec/provider_discovery_spec.rb
|
147
162
|
- spec/provider_spec.rb
|
148
163
|
- spec/providers_spec.rb
|
149
164
|
- spec/response_spec.rb
|
150
165
|
- spec/spec_helper.rb
|
151
|
-
has_rdoc: true
|
152
166
|
homepage: http://github.com/judofyr/ruby-oembed
|
153
|
-
licenses:
|
167
|
+
licenses:
|
154
168
|
- MIT
|
155
169
|
post_install_message:
|
156
|
-
rdoc_options:
|
170
|
+
rdoc_options:
|
157
171
|
- --main
|
158
172
|
- README.rdoc
|
159
173
|
- --title
|
160
|
-
- ruby-oembed-0.8.
|
174
|
+
- ruby-oembed-0.8.5
|
161
175
|
- --inline-source
|
162
176
|
- --exclude
|
163
177
|
- tasks
|
164
178
|
- CHANGELOG.rdoc
|
165
|
-
require_paths:
|
179
|
+
require_paths:
|
166
180
|
- lib
|
167
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
181
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
168
182
|
none: false
|
169
|
-
requirements:
|
170
|
-
- -
|
171
|
-
- !ruby/object:Gem::Version
|
172
|
-
|
173
|
-
|
174
|
-
- 0
|
175
|
-
version: "0"
|
176
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
183
|
+
requirements:
|
184
|
+
- - ! '>='
|
185
|
+
- !ruby/object:Gem::Version
|
186
|
+
version: '0'
|
187
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
177
188
|
none: false
|
178
|
-
requirements:
|
179
|
-
- -
|
180
|
-
- !ruby/object:Gem::Version
|
181
|
-
|
182
|
-
segments:
|
183
|
-
- 0
|
184
|
-
version: "0"
|
189
|
+
requirements:
|
190
|
+
- - ! '>='
|
191
|
+
- !ruby/object:Gem::Version
|
192
|
+
version: '0'
|
185
193
|
requirements: []
|
186
|
-
|
187
194
|
rubyforge_project:
|
188
|
-
rubygems_version: 1.
|
195
|
+
rubygems_version: 1.8.10
|
189
196
|
signing_key:
|
190
197
|
specification_version: 3
|
191
198
|
summary: oEmbed for Ruby
|
192
199
|
test_files: []
|
193
|
-
|