onebox 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +17 -0
- data/.rspec +1 -0
- data/.rubocop.yml +476 -0
- data/.ruby-gemset +1 -0
- data/.ruby-version +1 -0
- data/.travis.yml +3 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +92 -0
- data/Rakefile +22 -0
- data/lib/onebox.rb +33 -0
- data/lib/onebox/engine.rb +93 -0
- data/lib/onebox/engine/amazon_onebox.rb +25 -0
- data/lib/onebox/engine/bliptv_onebox.rb +26 -0
- data/lib/onebox/engine/clikthrough_onebox.rb +23 -0
- data/lib/onebox/engine/college_humor_onebox.rb +26 -0
- data/lib/onebox/engine/dailymotion_onebox.rb +26 -0
- data/lib/onebox/engine/dotsub_onebox.rb +25 -0
- data/lib/onebox/engine/example_onebox.rb +25 -0
- data/lib/onebox/engine/flickr_onebox.rb +25 -0
- data/lib/onebox/engine/funny_or_die_onebox.rb +26 -0
- data/lib/onebox/engine/html.rb +11 -0
- data/lib/onebox/engine/hulu_onebox.rb +26 -0
- data/lib/onebox/engine/nfb_onebox.rb +25 -0
- data/lib/onebox/engine/open_graph.rb +11 -0
- data/lib/onebox/engine/qik_onebox.rb +23 -0
- data/lib/onebox/engine/revision3_onebox.rb +26 -0
- data/lib/onebox/engine/slideshare_onebox.rb +25 -0
- data/lib/onebox/engine/sound_cloud_onebox.rb +25 -0
- data/lib/onebox/engine/stack_exchange_onebox.rb +23 -0
- data/lib/onebox/engine/ted_onebox.rb +25 -0
- data/lib/onebox/engine/viddler_onebox.rb +26 -0
- data/lib/onebox/engine/vimeo_onebox.rb +26 -0
- data/lib/onebox/engine/wikipedia_onebox.rb +24 -0
- data/lib/onebox/engine/yfrog_onebox.rb +25 -0
- data/lib/onebox/matcher.rb +13 -0
- data/lib/onebox/preview.rb +31 -0
- data/lib/onebox/version.rb +3 -0
- data/onebox.gemspec +36 -0
- data/spec/fixtures/amazon.response +3098 -0
- data/spec/fixtures/android.response +138 -0
- data/spec/fixtures/apple.response +391 -0
- data/spec/fixtures/bliptv.response +724 -0
- data/spec/fixtures/clickthrough.response +1472 -0
- data/spec/fixtures/clikthrough.response +1472 -0
- data/spec/fixtures/collegehumor.response +1272 -0
- data/spec/fixtures/dailymotion.response +575 -0
- data/spec/fixtures/dotsub.response +1257 -0
- data/spec/fixtures/example.response +50 -0
- data/spec/fixtures/flickr.response +1292 -0
- data/spec/fixtures/funnyordie.response +2010 -0
- data/spec/fixtures/gist.response +282 -0
- data/spec/fixtures/github_blob.response +706 -0
- data/spec/fixtures/github_commit.response +881 -0
- data/spec/fixtures/github_pullrequest.response +1619 -0
- data/spec/fixtures/hulu.response +339 -0
- data/spec/fixtures/image.response +0 -0
- data/spec/fixtures/imgur.response +892 -0
- data/spec/fixtures/kinomap.response +299 -0
- data/spec/fixtures/nfb.response +810 -0
- data/spec/fixtures/opengraph.response +27 -0
- data/spec/fixtures/qik.response +371 -0
- data/spec/fixtures/revision3.response +985 -0
- data/spec/fixtures/rottentomatoes_fresh.response +3275 -0
- data/spec/fixtures/rottentomatoes_incomplete.response +2313 -0
- data/spec/fixtures/rottentomatoes_rotten.response +3549 -0
- data/spec/fixtures/slideshare.response +1745 -0
- data/spec/fixtures/soundcloud.response +1409 -0
- data/spec/fixtures/stackexchange.response +1889 -0
- data/spec/fixtures/ted.response +1341 -0
- data/spec/fixtures/twitter.response +1712 -0
- data/spec/fixtures/viddler.response +442 -0
- data/spec/fixtures/video.response +0 -0
- data/spec/fixtures/vimeo.response +571 -0
- data/spec/fixtures/wikipedia.response +1236 -0
- data/spec/fixtures/wikipedia_redirected.response +899 -0
- data/spec/fixtures/yfrog.response +464 -0
- data/spec/lib/onebox/engine/amazon_spec.rb +34 -0
- data/spec/lib/onebox/engine/bliptv_spec.rb +34 -0
- data/spec/lib/onebox/engine/clikthrough_spec.rb +26 -0
- data/spec/lib/onebox/engine/college_humor_spec.rb +34 -0
- data/spec/lib/onebox/engine/dailymotion_spec.rb +36 -0
- data/spec/lib/onebox/engine/dotsub_spec.rb +36 -0
- data/spec/lib/onebox/engine/example_spec.rb +18 -0
- data/spec/lib/onebox/engine/flickr_spec.rb +30 -0
- data/spec/lib/onebox/engine/funny_or_die_spec.rb +34 -0
- data/spec/lib/onebox/engine/hulu_spec.rb +34 -0
- data/spec/lib/onebox/engine/nfb_spec.rb +35 -0
- data/spec/lib/onebox/engine/qik_spec.rb +35 -0
- data/spec/lib/onebox/engine/revision3_spec.rb +36 -0
- data/spec/lib/onebox/engine/slideshare_spec.rb +30 -0
- data/spec/lib/onebox/engine/sound_cloud_spec.rb +36 -0
- data/spec/lib/onebox/engine/stack_exchange_spec.rb +27 -0
- data/spec/lib/onebox/engine/ted_spec.rb +30 -0
- data/spec/lib/onebox/engine/viddler_spec.rb +36 -0
- data/spec/lib/onebox/engine/vimeo_spec.rb +34 -0
- data/spec/lib/onebox/engine/wikipedia_spec.rb +30 -0
- data/spec/lib/onebox/engine/yfrog_spec.rb +30 -0
- data/spec/lib/onebox/engine_spec.rb +78 -0
- data/spec/lib/onebox/matcher_spec.rb +20 -0
- data/spec/lib/onebox/preview_spec.rb +21 -0
- data/spec/lib/onebox_spec.rb +49 -0
- data/spec/spec_helper.rb +26 -0
- data/spec/support/html_spec_helper.rb +17 -0
- data/templates/amazon.handlebars +9 -0
- data/templates/bliptv.handlebars +10 -0
- data/templates/clickthrough.handlebars +8 -0
- data/templates/clikthrough.handlebars +8 -0
- data/templates/collegehumor.handlebars +9 -0
- data/templates/dailymotion.handlebars +9 -0
- data/templates/dotsub.handlebars +9 -0
- data/templates/flickr.handlebars +8 -0
- data/templates/funnyordie.handlebars +9 -0
- data/templates/hulu.handlebars +9 -0
- data/templates/nfb.handlebars +8 -0
- data/templates/qik.handlebars +7 -0
- data/templates/revision3.handlebars +9 -0
- data/templates/slideshare.handlebars +8 -0
- data/templates/soundcloud.handlebars +9 -0
- data/templates/stackexchange.handlebars +7 -0
- data/templates/ted.handlebars +8 -0
- data/templates/viddler.handlebars +9 -0
- data/templates/vimeo.handlebars +9 -0
- data/templates/wikipedia.handlebars +8 -0
- data/templates/yfrog.handlebars +8 -0
- metadata +447 -0
@@ -0,0 +1,36 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Onebox::Engine::SoundCloudOnebox do
|
4
|
+
let(:link) { "http://soundcloud.com" }
|
5
|
+
before do
|
6
|
+
fake(link, response("soundcloud.response"))
|
7
|
+
end
|
8
|
+
|
9
|
+
it_behaves_like "engines"
|
10
|
+
|
11
|
+
describe "#to_html" do
|
12
|
+
let(:html) { described_class.new(link).to_html }
|
13
|
+
|
14
|
+
it "returns video title" do
|
15
|
+
expect(html).to include("Penguin Prison - Worse It Gets (RAC Mix)")
|
16
|
+
end
|
17
|
+
|
18
|
+
it "returns video image" do
|
19
|
+
expect(html).to include("artworks-000033643332-vpuznu-t500x500.jpg")
|
20
|
+
end
|
21
|
+
|
22
|
+
it "returns video description" do
|
23
|
+
expect(html).to include("Remix by André Allen Anjos.")
|
24
|
+
end
|
25
|
+
|
26
|
+
it "returns video URL" do
|
27
|
+
expect(html).to include("Remix by André Allen Anjos.")
|
28
|
+
end
|
29
|
+
|
30
|
+
it "returns video embed code"
|
31
|
+
|
32
|
+
it "returns URL" do
|
33
|
+
expect(html).to include(link)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Onebox::Engine::StackExchangeOnebox do
|
4
|
+
let(:link) { "http://stackexchange.com" }
|
5
|
+
before do
|
6
|
+
fake(link, response("stackexchange.response"))
|
7
|
+
end
|
8
|
+
|
9
|
+
it_behaves_like "engines"
|
10
|
+
|
11
|
+
describe "#to_html" do
|
12
|
+
let(:html) { described_class.new(link).to_html }
|
13
|
+
|
14
|
+
it "returns the question title" do
|
15
|
+
expect(html).to include("Concept behind these 4 lines of tricky C++ code")
|
16
|
+
end
|
17
|
+
|
18
|
+
it "returns the question" do
|
19
|
+
expect(html).to include("Why does this code gives output C++Sucks? Can anyone explain the concept behind it?")
|
20
|
+
end
|
21
|
+
|
22
|
+
it "returns the question URL" do
|
23
|
+
expect(html).to include(link)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Onebox::Engine::TedOnebox do
|
4
|
+
let(:link) { "http://ted.com" }
|
5
|
+
before do
|
6
|
+
fake(link, response("ted.response"))
|
7
|
+
end
|
8
|
+
|
9
|
+
it_behaves_like "engines"
|
10
|
+
|
11
|
+
describe "#to_html" do
|
12
|
+
let(:html) { described_class.new(link).to_html }
|
13
|
+
|
14
|
+
it "returns video title" do
|
15
|
+
expect(html).to include("Eli Beer: The fastest ambulance? A motorcycle")
|
16
|
+
end
|
17
|
+
|
18
|
+
it "returns video photo" do
|
19
|
+
expect(html).to include("aa8d0403aec3466d031e3e1c1605637d84d6a07d_389x292.jpg")
|
20
|
+
end
|
21
|
+
|
22
|
+
it "returns video description" do
|
23
|
+
expect(html).to include("As a young EMT on a Jerusalem ambulance")
|
24
|
+
end
|
25
|
+
|
26
|
+
it "returns URL" do
|
27
|
+
expect(html).to include(link)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Onebox::Engine::ViddlerOnebox do
|
4
|
+
let(:link) { "http://viddler.com" }
|
5
|
+
before do
|
6
|
+
fake(link, response("viddler.response"))
|
7
|
+
end
|
8
|
+
|
9
|
+
it_behaves_like "engines"
|
10
|
+
|
11
|
+
describe "#to_html" do
|
12
|
+
let(:html) { described_class.new(link).to_html }
|
13
|
+
|
14
|
+
it "returns video title" do
|
15
|
+
expect(html).to include("Viddler Demo")
|
16
|
+
end
|
17
|
+
|
18
|
+
it "returns video image" do
|
19
|
+
expect(html).to include("thumbnail_2_7164f749_v2.jpg")
|
20
|
+
end
|
21
|
+
|
22
|
+
it "returns video description" do
|
23
|
+
expect(html).to include("Get familiar with your Viddler account.")
|
24
|
+
end
|
25
|
+
|
26
|
+
it "returns video URL" do
|
27
|
+
expect(html).to include("http://www.viddler.com/player/7164f749")
|
28
|
+
end
|
29
|
+
|
30
|
+
it "returns video embed code"
|
31
|
+
|
32
|
+
it "returns URL" do
|
33
|
+
expect(html).to include(link)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Onebox::Engine::VimeoOnebox do
|
4
|
+
let(:link) { "http://vimeo.com" }
|
5
|
+
before do
|
6
|
+
fake(link, response("vimeo.response"))
|
7
|
+
end
|
8
|
+
|
9
|
+
it_behaves_like "engines"
|
10
|
+
|
11
|
+
describe "#to_html" do
|
12
|
+
let(:html) { described_class.new(link).to_html }
|
13
|
+
|
14
|
+
it "returns video title" do
|
15
|
+
expect(html).to include("108 years of Herman Miller in 108 seconds")
|
16
|
+
end
|
17
|
+
|
18
|
+
it "returns video photo" do
|
19
|
+
expect(html).to include("443673159_1280.jpg")
|
20
|
+
end
|
21
|
+
|
22
|
+
it "returns video description" do
|
23
|
+
expect(html).to include("To mark the launch of a new website for Hermann Miller furniture")
|
24
|
+
end
|
25
|
+
|
26
|
+
it "returns video URL" do
|
27
|
+
expect(html).to include("http://vimeo.com/moogaloop.swf?clip_id=70437049")
|
28
|
+
end
|
29
|
+
|
30
|
+
it "returns URL" do
|
31
|
+
expect(html).to include(link)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Onebox::Engine::WikipediaOnebox do
|
4
|
+
let(:link) { "http://wikipedia.com" }
|
5
|
+
before do
|
6
|
+
fake(link, response("wikipedia.response"))
|
7
|
+
end
|
8
|
+
|
9
|
+
it_behaves_like "engines"
|
10
|
+
|
11
|
+
describe "#to_html" do
|
12
|
+
let(:html) { described_class.new(link).to_html }
|
13
|
+
|
14
|
+
it "returns the product URL" do
|
15
|
+
expect(html).to include(link)
|
16
|
+
end
|
17
|
+
|
18
|
+
it "returns the article title" do
|
19
|
+
expect(html).to include("Kevin Bacon")
|
20
|
+
end
|
21
|
+
|
22
|
+
it "returns the article img src" do
|
23
|
+
expect(html).to include("225px-Kevin_Bacon_Comic-Con_2012.jpg")
|
24
|
+
end
|
25
|
+
|
26
|
+
it "returns the article summary" do
|
27
|
+
expect(html).to include("Kevin Norwood Bacon[1] (born July 8, 1958)")
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Onebox::Engine::YfrogOnebox do
|
4
|
+
let(:link) { "http://yfrog.com" }
|
5
|
+
before do
|
6
|
+
fake(link, response("yfrog.response"))
|
7
|
+
end
|
8
|
+
|
9
|
+
it_behaves_like "engines"
|
10
|
+
|
11
|
+
describe "#to_html" do
|
12
|
+
let(:html) { described_class.new(link).to_html }
|
13
|
+
|
14
|
+
it "returns photo title" do
|
15
|
+
expect(html).to include("Celebrating @questlove Cook4Quest w/WyattCenac")
|
16
|
+
end
|
17
|
+
|
18
|
+
it "returns photo" do
|
19
|
+
expect(html).to include("jjdob.jpg")
|
20
|
+
end
|
21
|
+
|
22
|
+
it "returns photo description" do
|
23
|
+
expect(html).to include("Click on the photo to comment, share or view other great photos")
|
24
|
+
end
|
25
|
+
|
26
|
+
it "returns URL" do
|
27
|
+
expect(html).to include(link)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,78 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
class OneboxEngineExample
|
4
|
+
include Onebox::Engine
|
5
|
+
|
6
|
+
def data
|
7
|
+
{ foo: raw[:key], url: @url }
|
8
|
+
end
|
9
|
+
|
10
|
+
def raw
|
11
|
+
{ key: "value" }
|
12
|
+
end
|
13
|
+
|
14
|
+
def template
|
15
|
+
%|<div class="onebox"><a href="{{url}}"></a></div>|
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
describe Onebox::Engine do
|
20
|
+
describe "#to_html" do
|
21
|
+
it "returns the onebox wrapper" do
|
22
|
+
html = OneboxEngineExample.new("foo").to_html
|
23
|
+
expect(html).to include(%|class="onebox"|)
|
24
|
+
end
|
25
|
+
|
26
|
+
it "doesn't allow XSS injection" do
|
27
|
+
html = OneboxEngineExample.new(%|http://foo.com" onscript="alert('foo')|).to_html
|
28
|
+
expect(html).not_to include(%|onscript="alert('foo')|)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
describe "#record" do
|
33
|
+
class OneboxEngineBar
|
34
|
+
include Onebox::Engine
|
35
|
+
|
36
|
+
def data
|
37
|
+
"new content"
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
it "returns cached value for given url if its url is already in cache" do
|
42
|
+
cache = { "http://example.com" => "old content" }
|
43
|
+
result = OneboxEngineBar.new("http://example.com", cache).send(:record)
|
44
|
+
expect(result).to eq("old content")
|
45
|
+
end
|
46
|
+
|
47
|
+
it "stores cache value for given url if cache key doesn't exist" do
|
48
|
+
cache = { "http://example.com1" => "old content" }
|
49
|
+
result = OneboxEngineBar.new("http://example.com", cache).send(:record)
|
50
|
+
expect(result).to eq("new content")
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
describe ".===" do
|
55
|
+
it "returns true if argument matches the matcher" do
|
56
|
+
class OneboxEngineFoo
|
57
|
+
include Onebox::Engine
|
58
|
+
@@matcher = /example/
|
59
|
+
end
|
60
|
+
result = OneboxEngineFoo === "http://www.example.com/product/5?var=foo&bar=5"
|
61
|
+
expect(result).to eq(true)
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
describe ".matches" do
|
66
|
+
it "sets @@matcher to a regular expression" do
|
67
|
+
class OneboxEngineFar
|
68
|
+
include Onebox::Engine
|
69
|
+
|
70
|
+
matches do
|
71
|
+
find "foo.com"
|
72
|
+
end
|
73
|
+
end
|
74
|
+
regex = OneboxEngineFar.class_variable_get(:@@matcher)
|
75
|
+
expect(regex).to eq(/(?:foo\.com)/i)
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Onebox::Matcher do
|
4
|
+
describe "#oneboxed" do
|
5
|
+
it "returns Example onebox when given example url" do
|
6
|
+
matcher = described_class.new("http://example.com")
|
7
|
+
expect(matcher.oneboxed).to be(Onebox::Engine::ExampleOnebox)
|
8
|
+
end
|
9
|
+
|
10
|
+
it "returns Amazon onebox when given amazon url" do
|
11
|
+
matcher = described_class.new("http://amazon.com")
|
12
|
+
expect(matcher.oneboxed).to be(Onebox::Engine::AmazonOnebox)
|
13
|
+
end
|
14
|
+
|
15
|
+
it "returns Flickr onebox when given flickr url" do
|
16
|
+
matcher = described_class.new("http://flickr.com")
|
17
|
+
expect(matcher.oneboxed).to be(Onebox::Engine::FlickrOnebox)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Onebox::Preview do
|
4
|
+
describe "#to_s" do
|
5
|
+
it "returns some html if given a valid url" do
|
6
|
+
fake("http://www.example.com", response("example.response"))
|
7
|
+
preview = described_class.new("http://www.example.com")
|
8
|
+
expect(preview.to_s).to include("Example Domain 1")
|
9
|
+
end
|
10
|
+
it "returns an empty string if the resource is not found"
|
11
|
+
it "returns an empty string if the resource fails to load"
|
12
|
+
it "returns an empty string if the url is not valid"
|
13
|
+
end
|
14
|
+
|
15
|
+
describe "#engine" do
|
16
|
+
it "returns an engine" do
|
17
|
+
preview = described_class.new("http://www.example.com")
|
18
|
+
expect(preview.send(:engine)).to be_a(Onebox::Engine)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Onebox do
|
4
|
+
describe ".preview" do
|
5
|
+
it "creates a cache that responds as expected" do
|
6
|
+
url = "http://www.example.com"
|
7
|
+
preview = Onebox.preview(url)
|
8
|
+
cache = preview.cache
|
9
|
+
expect(cache).to respond_to(:key?, :store, :fetch)
|
10
|
+
end
|
11
|
+
|
12
|
+
it "stores the value in cache if it doesn't exist" do
|
13
|
+
url = "http://www.example.com"
|
14
|
+
preview = Onebox.preview(url)
|
15
|
+
preview.to_s
|
16
|
+
cache = preview.cache
|
17
|
+
expect(cache.key?(url)).to eq(true)
|
18
|
+
end
|
19
|
+
|
20
|
+
it "replaces the cache if the cache is expired" do
|
21
|
+
url = "http://www.example.com"
|
22
|
+
preview = Onebox.preview(url, cache: Moneta.new(:Memory, expires: 100000, serializer: :json))
|
23
|
+
cache = preview.cache
|
24
|
+
expect(cache.fetch(url)).to be(nil)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
describe "templates" do
|
29
|
+
let(:templates) { Dir["templates/*.handlebars"] }
|
30
|
+
|
31
|
+
def expect_templates_to_not_match(text)
|
32
|
+
templates.each do |template|
|
33
|
+
expect(File.read(template)).not_to match(text)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
it "should not contain any triple braces" do
|
38
|
+
expect_templates_to_not_match(/\{\{\{/)
|
39
|
+
end
|
40
|
+
|
41
|
+
it "should not contain any script tags" do
|
42
|
+
expect_templates_to_not_match(/<script/)
|
43
|
+
end
|
44
|
+
|
45
|
+
it "should not contain any on*" do
|
46
|
+
expect_templates_to_not_match(/\s*on.+\s*=/)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
require "coveralls"
|
2
|
+
Coveralls.wear! do
|
3
|
+
add_filter "/spec/"
|
4
|
+
end
|
5
|
+
|
6
|
+
require "rspec"
|
7
|
+
require "pry"
|
8
|
+
require "fakeweb"
|
9
|
+
require "onebox"
|
10
|
+
require 'mocha/api'
|
11
|
+
|
12
|
+
require_relative "support/html_spec_helper"
|
13
|
+
|
14
|
+
RSpec.configure do |config|
|
15
|
+
config.include HTMLSpecHelper
|
16
|
+
end
|
17
|
+
|
18
|
+
shared_examples_for "engines" do
|
19
|
+
it "should behave like an engine" do
|
20
|
+
expect(described_class.private_instance_methods).to include(:data, :record, :raw)
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should have implemented a data method" do
|
24
|
+
expect { described_class.new(link).send(:data) }.not_to raise_error
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module HTMLSpecHelper
|
2
|
+
def fake(uri, response, verb = :get)
|
3
|
+
FakeWeb.register_uri(verb, uri, response: header(response))
|
4
|
+
end
|
5
|
+
|
6
|
+
def header(html)
|
7
|
+
"HTTP/1.1 200 OK\n\n#{html}"
|
8
|
+
end
|
9
|
+
|
10
|
+
def onebox_view(html)
|
11
|
+
%|<div class="onebox">#{html}</div>|
|
12
|
+
end
|
13
|
+
|
14
|
+
def response(file)
|
15
|
+
Nokogiri::HTML(File.read(File.join("spec", "fixtures", file)))
|
16
|
+
end
|
17
|
+
end
|