onebox 1.0.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.
- 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
|