ruby-oembed 0.8.3 → 0.8.5
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/.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
|
-
|