pummel 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.
- data/.document +3 -0
- data/.gitignore +21 -0
- data/LICENSE +20 -0
- data/README.md +70 -0
- data/Rakefile +57 -0
- data/VERSION +1 -0
- data/config.ru +17 -0
- data/public/body.png +0 -0
- data/public/favicon.ico +0 -0
- data/public/style.css +34 -0
- data/pummel.gemspec +75 -0
- data/pummel.rb +50 -0
- data/templates/index.erb +22 -0
- data/vendor/ruby-oembed/idea.rb +37 -0
- data/vendor/ruby-oembed/lib/oembed.rb +14 -0
- data/vendor/ruby-oembed/lib/oembed/errors.rb +28 -0
- data/vendor/ruby-oembed/lib/oembed/formatters.rb +29 -0
- data/vendor/ruby-oembed/lib/oembed/provider.rb +80 -0
- data/vendor/ruby-oembed/lib/oembed/provider_discovery.rb +55 -0
- data/vendor/ruby-oembed/lib/oembed/providers.rb +146 -0
- data/vendor/ruby-oembed/lib/oembed/response.rb +59 -0
- data/vendor/ruby-oembed/lib/oembed/response/link.rb +6 -0
- data/vendor/ruby-oembed/lib/oembed/response/photo.rb +9 -0
- data/vendor/ruby-oembed/lib/oembed/response/rich.rb +6 -0
- data/vendor/ruby-oembed/lib/oembed/response/video.rb +6 -0
- data/vendor/ruby-oembed/spec/provider_spec.rb +175 -0
- data/vendor/ruby-oembed/spec/providers_spec.rb +125 -0
- data/vendor/ruby-oembed/spec/response_spec.rb +90 -0
- data/vendor/ruby-oembed/spec/spec_helper.rb +69 -0
- metadata +113 -0
@@ -0,0 +1,125 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/spec_helper'
|
2
|
+
|
3
|
+
describe OEmbed::Providers do
|
4
|
+
include OEmbedSpecHelper
|
5
|
+
|
6
|
+
before(:all) do
|
7
|
+
@flickr = OEmbed::Provider.new("http://www.flickr.com/services/oembed/")
|
8
|
+
@qik = OEmbed::Provider.new("http://qik.com/api/oembed.{format}")
|
9
|
+
|
10
|
+
@flickr << "http://*.flickr.com/*"
|
11
|
+
@qik << "http://qik.com/video/*"
|
12
|
+
@qik << "http://qik.com/*"
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should register providers" do
|
16
|
+
OEmbed::Providers.register(@flickr, @qik)
|
17
|
+
urls = OEmbed::Providers.urls.dup
|
18
|
+
|
19
|
+
@flickr.urls.each do |regexp|
|
20
|
+
urls.delete(regexp).should == @flickr
|
21
|
+
end
|
22
|
+
|
23
|
+
@qik.urls.each do |regexp|
|
24
|
+
urls.delete(regexp).should == @qik
|
25
|
+
end
|
26
|
+
|
27
|
+
urls.length.should == 0
|
28
|
+
end
|
29
|
+
|
30
|
+
it "should find by URLs" do
|
31
|
+
OEmbed::Providers.find(example_url(:flickr)).should == @flickr
|
32
|
+
OEmbed::Providers.find(example_url(:qik)).should == @qik
|
33
|
+
end
|
34
|
+
|
35
|
+
it "should unregister providers" do
|
36
|
+
OEmbed::Providers.unregister(@flickr)
|
37
|
+
urls = OEmbed::Providers.urls.dup
|
38
|
+
|
39
|
+
@qik.urls.each do |regexp|
|
40
|
+
urls.delete(regexp).should == @qik
|
41
|
+
end
|
42
|
+
|
43
|
+
urls.length.should == 0
|
44
|
+
end
|
45
|
+
|
46
|
+
it "should use the OEmbed::ProviderDiscovery fallback provider correctly" do
|
47
|
+
url = example_url(:vimeo)
|
48
|
+
|
49
|
+
# None of the registered providers should match
|
50
|
+
all_example_urls.each do |url|
|
51
|
+
provider = OEmbed::Providers.find(url)
|
52
|
+
provider.should_not_receive(:raw)
|
53
|
+
provider.should_not_receive(:get)
|
54
|
+
end
|
55
|
+
|
56
|
+
# Register the fallback
|
57
|
+
OEmbed::Providers.register_fallback(OEmbed::ProviderDiscovery)
|
58
|
+
|
59
|
+
provider = OEmbed::ProviderDiscovery
|
60
|
+
provider.should_receive(:raw).
|
61
|
+
with(url, {}).
|
62
|
+
and_return(valid_response(:raw))
|
63
|
+
provider.should_receive(:get).
|
64
|
+
with(url, {}).
|
65
|
+
and_return(valid_response(:object))
|
66
|
+
#asdf
|
67
|
+
|
68
|
+
|
69
|
+
end
|
70
|
+
|
71
|
+
it "should bridge #get and #raw to the right provider" do
|
72
|
+
OEmbed::Providers.register_all
|
73
|
+
all_example_urls.each do |url|
|
74
|
+
provider = OEmbed::Providers.find(url)
|
75
|
+
provider.should_receive(:raw).
|
76
|
+
with(url, {})
|
77
|
+
provider.should_receive(:get).
|
78
|
+
with(url, {})
|
79
|
+
OEmbed::Providers.raw(url)
|
80
|
+
OEmbed::Providers.get(url)
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
it "should raise an error if no embeddable content is found" do
|
85
|
+
["http://fake.com/", example_url(:google_video)].each do |url|
|
86
|
+
proc { OEmbed::Providers.get(url) }.should raise_error(OEmbed::NotFound)
|
87
|
+
proc { OEmbed::Providers.raw(url) }.should raise_error(OEmbed::NotFound)
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
it "should register fallback providers" do
|
92
|
+
OEmbed::Providers.register_fallback(OEmbed::Providers::Hulu)
|
93
|
+
OEmbed::Providers.register_fallback(OEmbed::Providers::OohEmbed)
|
94
|
+
|
95
|
+
OEmbed::Providers.fallback.should == [OEmbed::ProviderDiscovery, OEmbed::Providers::Hulu, OEmbed::Providers::OohEmbed]
|
96
|
+
end
|
97
|
+
|
98
|
+
it "should fallback to the appropriate provider when URL isn't found" do
|
99
|
+
url = example_url(:google_video)
|
100
|
+
|
101
|
+
provider = OEmbed::Providers.fallback.last
|
102
|
+
provider.should_receive(:raw).
|
103
|
+
with(url, {}).
|
104
|
+
and_return(valid_response(:raw))
|
105
|
+
provider.should_receive(:get).
|
106
|
+
with(url, {}).
|
107
|
+
and_return(valid_response(:object))
|
108
|
+
|
109
|
+
OEmbed::Providers.fallback.each do |p|
|
110
|
+
next if p == provider
|
111
|
+
p.should_receive(:raw).and_raise(OEmbed::NotFound)
|
112
|
+
p.should_receive(:get).and_raise(OEmbed::NotFound)
|
113
|
+
end
|
114
|
+
|
115
|
+
OEmbed::Providers.raw(url)
|
116
|
+
OEmbed::Providers.get(url)
|
117
|
+
end
|
118
|
+
|
119
|
+
it "should still raise an error if no embeddable content is found" do
|
120
|
+
["http://fake.com/"].each do |url|
|
121
|
+
proc { OEmbed::Providers.get(url) }.should raise_error(OEmbed::NotFound)
|
122
|
+
proc { OEmbed::Providers.raw(url) }.should raise_error(OEmbed::NotFound)
|
123
|
+
end
|
124
|
+
end
|
125
|
+
end
|
@@ -0,0 +1,90 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/spec_helper'
|
2
|
+
|
3
|
+
describe OEmbed::Response do
|
4
|
+
include OEmbedSpecHelper
|
5
|
+
|
6
|
+
before(:all) do
|
7
|
+
@flickr = OEmbed::Provider.new("http://www.flickr.com/services/oembed/")
|
8
|
+
@qik = OEmbed::Provider.new("http://qik.com/api/oembed.{format}", :xml)
|
9
|
+
@viddler = OEmbed::Provider.new("http://lab.viddler.com/services/oembed/", :json)
|
10
|
+
|
11
|
+
@flickr << "http://*.flickr.com/*"
|
12
|
+
@qik << "http://qik.com/video/*"
|
13
|
+
@qik << "http://qik.com/*"
|
14
|
+
@viddler << "http://*.viddler.com/*"
|
15
|
+
|
16
|
+
@new_res = OEmbed::Response.new(valid_response(:object), OEmbed::Providers::OohEmbed)
|
17
|
+
|
18
|
+
@default_res = OEmbed::Response.create_for(valid_response(:json), @flickr)
|
19
|
+
@xml_res = OEmbed::Response.create_for(valid_response(:xml), @qik, :xml)
|
20
|
+
@json_res = OEmbed::Response.create_for(valid_response(:json), @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
|
+
|
34
|
+
@default_res.fields.keys.should == valid_response(:object).keys
|
35
|
+
@xml_res.fields.keys.should == valid_response(:object).keys
|
36
|
+
@json_res.fields.keys.should == valid_response(:object).keys
|
37
|
+
end
|
38
|
+
|
39
|
+
it "should only allow JSON or XML" do
|
40
|
+
lambda do
|
41
|
+
OEmbed::Response.create_for(valid_response(:json), @flickr, :json)
|
42
|
+
end.should_not raise_error(OEmbed::FormatNotSupported)
|
43
|
+
|
44
|
+
lambda do
|
45
|
+
OEmbed::Response.create_for(valid_response(:xml), @flickr, :xml)
|
46
|
+
end.should_not raise_error(OEmbed::FormatNotSupported)
|
47
|
+
|
48
|
+
lambda do
|
49
|
+
OEmbed::Response.create_for(valid_response(:yml), @flickr, :yml)
|
50
|
+
end.should raise_error(OEmbed::FormatNotSupported)
|
51
|
+
end
|
52
|
+
|
53
|
+
it "should not parse the incorrect format" do
|
54
|
+
lambda do
|
55
|
+
OEmbed::Response.create_for(valid_response(:xml), @flickr)
|
56
|
+
end.should raise_error(JSON::ParserError)
|
57
|
+
|
58
|
+
lambda do
|
59
|
+
OEmbed::Response.create_for(valid_response(:xml), @viddler, :json)
|
60
|
+
end.should raise_error(JSON::ParserError)
|
61
|
+
|
62
|
+
lambda do
|
63
|
+
OEmbed::Response.create_for(valid_response(:json), @viddler, :xml)
|
64
|
+
end.should raise_error(ArgumentError)
|
65
|
+
end
|
66
|
+
|
67
|
+
it "should access the XML data through #field" do
|
68
|
+
@xml_res.field(:type).should == "photo"
|
69
|
+
@xml_res.field(:version).should == "1.0"
|
70
|
+
@xml_res.field(:fields).should == "hello"
|
71
|
+
@xml_res.field(:__id__).should == "1234"
|
72
|
+
end
|
73
|
+
|
74
|
+
it "should access the JSON data through #field" do
|
75
|
+
@json_res.field(:type).should == "photo"
|
76
|
+
@json_res.field(:version).should == "1.0"
|
77
|
+
@json_res.field(:fields).should == "hello"
|
78
|
+
@json_res.field(:__id__).should == 1234
|
79
|
+
end
|
80
|
+
|
81
|
+
it "should automagically define helpers" do
|
82
|
+
@default_res.type.should == "photo"
|
83
|
+
@default_res.version.should == "1.0"
|
84
|
+
end
|
85
|
+
|
86
|
+
it "should protect important methods" do
|
87
|
+
@default_res.fields.should_not == @default_res.field(:fields)
|
88
|
+
@default_res.__id__.should_not == @default_res.field(:__id__)
|
89
|
+
end
|
90
|
+
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require File.dirname(__FILE__) + '/../lib/oembed'
|
3
|
+
|
4
|
+
module OEmbedSpecHelper
|
5
|
+
EXAMPLE = {
|
6
|
+
:flickr => "http://flickr.com/photos/bees/2362225867/",
|
7
|
+
:viddler => "http://www.viddler.com/explore/cdevroe/videos/424/",
|
8
|
+
:qik => "http://qik.com/video/49565",
|
9
|
+
:vimeo => "http://vimeo.com/3100878",
|
10
|
+
:pownce => "http://pownce.com/mmalone/notes/1756545/",
|
11
|
+
:rev3 => "http://revision3.com/diggnation/2008-04-17xsanned/",
|
12
|
+
:hulu => "http://www.hulu.com/watch/4569/firefly-serenity#x-0,vepisode,1",
|
13
|
+
:google_video => "http://video.google.com/videoplay?docid=8372603330420559198",
|
14
|
+
}
|
15
|
+
|
16
|
+
def example_url(site)
|
17
|
+
return "http://fake.com/" if site == :fake
|
18
|
+
EXAMPLE[site]
|
19
|
+
end
|
20
|
+
|
21
|
+
def all_example_urls(*fallback)
|
22
|
+
results = EXAMPLE.values
|
23
|
+
|
24
|
+
# By default don't return example_urls that won't be recognized by
|
25
|
+
# the included default providers
|
26
|
+
results.delete(example_url(:google_video))
|
27
|
+
|
28
|
+
# If requested, return URLs that should work with various fallback providers
|
29
|
+
fallback.each do |f|
|
30
|
+
case f
|
31
|
+
when OEmbed::Providers::OohEmbed
|
32
|
+
results << example_url(:google_video)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
results
|
37
|
+
end
|
38
|
+
|
39
|
+
def valid_response(format)
|
40
|
+
case format
|
41
|
+
when :object
|
42
|
+
{
|
43
|
+
"type" => "photo",
|
44
|
+
"version" => "1.0",
|
45
|
+
"fields" => "hello",
|
46
|
+
"__id__" => 1234
|
47
|
+
}
|
48
|
+
when :json
|
49
|
+
<<-JSON
|
50
|
+
{
|
51
|
+
"type": "photo",
|
52
|
+
"version": "1.0",
|
53
|
+
"fields": "hello",
|
54
|
+
"__id__": 1234
|
55
|
+
}
|
56
|
+
JSON
|
57
|
+
when :xml
|
58
|
+
<<-XML
|
59
|
+
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
60
|
+
<oembed>
|
61
|
+
<type>photo</type>
|
62
|
+
<version>1.0</version>
|
63
|
+
<fields>hello</fields>
|
64
|
+
<__id__>1234</__id__>
|
65
|
+
</oembed>
|
66
|
+
XML
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
metadata
ADDED
@@ -0,0 +1,113 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: pummel
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.3.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Colin Shea
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2010-02-16 00:00:00 -05:00
|
13
|
+
default_executable:
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: sinatra
|
17
|
+
type: :runtime
|
18
|
+
version_requirement:
|
19
|
+
version_requirements: !ruby/object:Gem::Requirement
|
20
|
+
requirements:
|
21
|
+
- - ">="
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: "0"
|
24
|
+
version:
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: riot
|
27
|
+
type: :development
|
28
|
+
version_requirement:
|
29
|
+
version_requirements: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: "0"
|
34
|
+
version:
|
35
|
+
- !ruby/object:Gem::Dependency
|
36
|
+
name: yard
|
37
|
+
type: :development
|
38
|
+
version_requirement:
|
39
|
+
version_requirements: !ruby/object:Gem::Requirement
|
40
|
+
requirements:
|
41
|
+
- - ">="
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: "0"
|
44
|
+
version:
|
45
|
+
description: Given an RSS feed, make a tumblr-like site out of it. Uses Sinatra & Rack, inspired by Dumble.
|
46
|
+
email: colin@evaryont.me
|
47
|
+
executables: []
|
48
|
+
|
49
|
+
extensions: []
|
50
|
+
|
51
|
+
extra_rdoc_files:
|
52
|
+
- LICENSE
|
53
|
+
- README.md
|
54
|
+
files:
|
55
|
+
- .document
|
56
|
+
- .gitignore
|
57
|
+
- LICENSE
|
58
|
+
- README.md
|
59
|
+
- Rakefile
|
60
|
+
- VERSION
|
61
|
+
- config.ru
|
62
|
+
- public/body.png
|
63
|
+
- public/favicon.ico
|
64
|
+
- public/style.css
|
65
|
+
- pummel.gemspec
|
66
|
+
- pummel.rb
|
67
|
+
- templates/index.erb
|
68
|
+
- vendor/ruby-oembed/idea.rb
|
69
|
+
- vendor/ruby-oembed/lib/oembed.rb
|
70
|
+
- vendor/ruby-oembed/lib/oembed/errors.rb
|
71
|
+
- vendor/ruby-oembed/lib/oembed/formatters.rb
|
72
|
+
- vendor/ruby-oembed/lib/oembed/provider.rb
|
73
|
+
- vendor/ruby-oembed/lib/oembed/provider_discovery.rb
|
74
|
+
- vendor/ruby-oembed/lib/oembed/providers.rb
|
75
|
+
- vendor/ruby-oembed/lib/oembed/response.rb
|
76
|
+
- vendor/ruby-oembed/lib/oembed/response/link.rb
|
77
|
+
- vendor/ruby-oembed/lib/oembed/response/photo.rb
|
78
|
+
- vendor/ruby-oembed/lib/oembed/response/rich.rb
|
79
|
+
- vendor/ruby-oembed/lib/oembed/response/video.rb
|
80
|
+
- vendor/ruby-oembed/spec/provider_spec.rb
|
81
|
+
- vendor/ruby-oembed/spec/providers_spec.rb
|
82
|
+
- vendor/ruby-oembed/spec/response_spec.rb
|
83
|
+
- vendor/ruby-oembed/spec/spec_helper.rb
|
84
|
+
has_rdoc: true
|
85
|
+
homepage: http://github.com/evaryont/pummel
|
86
|
+
licenses: []
|
87
|
+
|
88
|
+
post_install_message:
|
89
|
+
rdoc_options:
|
90
|
+
- --charset=UTF-8
|
91
|
+
require_paths:
|
92
|
+
- lib
|
93
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
94
|
+
requirements:
|
95
|
+
- - ">="
|
96
|
+
- !ruby/object:Gem::Version
|
97
|
+
version: "0"
|
98
|
+
version:
|
99
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: "0"
|
104
|
+
version:
|
105
|
+
requirements: []
|
106
|
+
|
107
|
+
rubyforge_project:
|
108
|
+
rubygems_version: 1.3.5
|
109
|
+
signing_key:
|
110
|
+
specification_version: 3
|
111
|
+
summary: Auto-tumble your RSS feed!
|
112
|
+
test_files: []
|
113
|
+
|