open_graph_reader 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (68) hide show
  1. checksums.yaml +7 -0
  2. data/.gitmodules +3 -0
  3. data/.rspec +2 -0
  4. data/.yardopts +1 -0
  5. data/lib/open_graph_reader.rb +83 -0
  6. data/lib/open_graph_reader/base.rb +57 -0
  7. data/lib/open_graph_reader/builder.rb +100 -0
  8. data/lib/open_graph_reader/definitions.rb +333 -0
  9. data/lib/open_graph_reader/fetcher.rb +82 -0
  10. data/lib/open_graph_reader/object.rb +95 -0
  11. data/lib/open_graph_reader/object/dsl.rb +130 -0
  12. data/lib/open_graph_reader/object/dsl/types.rb +71 -0
  13. data/lib/open_graph_reader/object/registry.rb +54 -0
  14. data/lib/open_graph_reader/parser.rb +85 -0
  15. data/lib/open_graph_reader/parser/graph.rb +136 -0
  16. data/lib/open_graph_reader/version.rb +4 -0
  17. data/spec/fixtures/examples/apple-touch-icon-precomposed.png +0 -0
  18. data/spec/fixtures/examples/apple-touch-icon.png +0 -0
  19. data/spec/fixtures/examples/article-offset.html +25 -0
  20. data/spec/fixtures/examples/article-utc.html +25 -0
  21. data/spec/fixtures/examples/article.html +25 -0
  22. data/spec/fixtures/examples/audio-array.html +27 -0
  23. data/spec/fixtures/examples/audio-url.html +25 -0
  24. data/spec/fixtures/examples/audio.html +24 -0
  25. data/spec/fixtures/examples/book-isbn10.html +27 -0
  26. data/spec/fixtures/examples/book.html +27 -0
  27. data/spec/fixtures/examples/canadian.html +16 -0
  28. data/spec/fixtures/examples/error.html +17 -0
  29. data/spec/fixtures/examples/errors/article-date.html +25 -0
  30. data/spec/fixtures/examples/errors/book-author.html +27 -0
  31. data/spec/fixtures/examples/errors/book.html +27 -0
  32. data/spec/fixtures/examples/errors/gender.html +20 -0
  33. data/spec/fixtures/examples/errors/geo.html +23 -0
  34. data/spec/fixtures/examples/errors/type.html +16 -0
  35. data/spec/fixtures/examples/errors/video-duration.html +42 -0
  36. data/spec/fixtures/examples/favicon.ico +0 -0
  37. data/spec/fixtures/examples/filters/xss-image.html +15 -0
  38. data/spec/fixtures/examples/image-array.html +26 -0
  39. data/spec/fixtures/examples/image-toosmall.html +24 -0
  40. data/spec/fixtures/examples/image-url.html +22 -0
  41. data/spec/fixtures/examples/image.html +21 -0
  42. data/spec/fixtures/examples/index.html +67 -0
  43. data/spec/fixtures/examples/media/audio/1khz.mp3 +0 -0
  44. data/spec/fixtures/examples/media/audio/250hz.mp3 +0 -0
  45. data/spec/fixtures/examples/media/images/1.png +0 -0
  46. data/spec/fixtures/examples/media/images/50.png +0 -0
  47. data/spec/fixtures/examples/media/images/75.png +0 -0
  48. data/spec/fixtures/examples/media/images/icon.png +0 -0
  49. data/spec/fixtures/examples/media/images/logo.png +0 -0
  50. data/spec/fixtures/examples/media/images/train.jpg +0 -0
  51. data/spec/fixtures/examples/media/video/train.flv +0 -0
  52. data/spec/fixtures/examples/media/video/train.mp4 +0 -0
  53. data/spec/fixtures/examples/media/video/train.webm +0 -0
  54. data/spec/fixtures/examples/min.html +14 -0
  55. data/spec/fixtures/examples/nomedia.html +20 -0
  56. data/spec/fixtures/examples/plain.html +10 -0
  57. data/spec/fixtures/examples/profile.html +25 -0
  58. data/spec/fixtures/examples/required.html +20 -0
  59. data/spec/fixtures/examples/robots.txt +4 -0
  60. data/spec/fixtures/examples/sitemap.xml +23 -0
  61. data/spec/fixtures/examples/video-array.html +36 -0
  62. data/spec/fixtures/examples/video-movie.html +42 -0
  63. data/spec/fixtures/examples/video.html +26 -0
  64. data/spec/integration/invalid_examples_spec.rb +69 -0
  65. data/spec/integration/valid_examples_spec.rb +76 -0
  66. data/spec/open_graph_reader_spec.rb +94 -0
  67. data/spec/spec_helper.rb +35 -0
  68. metadata +247 -0
@@ -0,0 +1,4 @@
1
+ User-agent: *
2
+ Allow: /
3
+
4
+ Sitemap: http://examples.opengraphprotocol.us/sitemap.xml
@@ -0,0 +1,23 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
3
+ <url><loc>http://examples.opengraphprotocol.us/</loc><priority>1</priority></url>
4
+ <url><loc>http://examples.opengraphprotocol.us/article.html</loc></url>
5
+ <url><loc>http://examples.opengraphprotocol.us/article-offset.html</loc></url>
6
+ <url><loc>http://examples.opengraphprotocol.us/article-utc.html</loc></url>
7
+ <url><loc>http://examples.opengraphprotocol.us/audio-array.html</loc></url>
8
+ <url><loc>http://examples.opengraphprotocol.us/audio-url.html</loc></url>
9
+ <url><loc>http://examples.opengraphprotocol.us/book-isbn10.html</loc></url>
10
+ <url><loc>http://examples.opengraphprotocol.us/book.html</loc></url>
11
+ <url><loc>http://examples.opengraphprotocol.us/canadian.html</loc></url>
12
+ <url><loc>http://examples.opengraphprotocol.us/image-array.html</loc></url>
13
+ <url><loc>http://examples.opengraphprotocol.us/image-toosmall.html</loc></url>
14
+ <url><loc>http://examples.opengraphprotocol.us/image-url.html</loc></url>
15
+ <url><loc>http://examples.opengraphprotocol.us/image.html</loc></url>
16
+ <url><loc>http://examples.opengraphprotocol.us/min.html</loc></url>
17
+ <url><loc>http://examples.opengraphprotocol.us/nomedia.html</loc></url>
18
+ <url><loc>http://examples.opengraphprotocol.us/profile.html</loc></url>
19
+ <url><loc>http://examples.opengraphprotocol.us/required.html</loc></url>
20
+ <url><loc>http://examples.opengraphprotocol.us/video-array.html</loc></url>
21
+ <url><loc>http://examples.opengraphprotocol.us/video-movie.html</loc></url>
22
+ <url><loc>http://examples.opengraphprotocol.us/video.html</loc></url>
23
+ </urlset>
@@ -0,0 +1,36 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head prefix="og: http://ogp.me/ns#">
4
+ <meta charset="utf-8">
5
+ <title>Structured video array</title>
6
+ <meta property="og:title" content="Structured video array">
7
+ <meta property="og:site_name" content="Open Graph protocol examples">
8
+ <meta property="og:type" content="website">
9
+ <meta property="og:locale" content="en_US">
10
+ <link rel="canonical" href="http://examples.opengraphprotocol.us/video-array.html">
11
+ <meta property="og:url" content="http://examples.opengraphprotocol.us/video-array.html">
12
+ <meta property="og:image" content="http://examples.opengraphprotocol.us/media/images/50.png">
13
+ <meta property="og:image:secure_url" content="https://d72cgtgi6hvvl.cloudfront.net/media/images/50.png">
14
+ <meta property="og:image:width" content="50">
15
+ <meta property="og:image:height" content="50">
16
+ <meta property="og:image:type" content="image/png">
17
+ <meta property="og:video" content="http://fpdownload.adobe.com/strobe/FlashMediaPlayback.swf?src=http%3A%2F%2Fexamples.opengraphprotocol.us%2Fmedia%2Fvideo%2Ftrain.mp4">
18
+ <meta property="og:video:secure_url" content="https://fpdownload.adobe.com/strobe/FlashMediaPlayback.swf?src=https%3A%2F%2Fd72cgtgi6hvvl.cloudfront.net%2Fmedia%2Fvideo%2Ftrain.mp4">
19
+ <meta property="og:video:type" content="application/x-shockwave-flash">
20
+ <meta property="og:video:width" content="472">
21
+ <meta property="og:video:height" content="296">
22
+ <meta property="og:video" content="http://examples.opengraphprotocol.us/media/video/train.mp4">
23
+ <meta property="og:video:secure_url" content="https://d72cgtgi6hvvl.cloudfront.net/media/video/train.mp4">
24
+ <meta property="og:video:type" content="video/mp4">
25
+ <meta property="og:video:width" content="472">
26
+ <meta property="og:video:height" content="296">
27
+ <meta property="og:video" content="http://examples.opengraphprotocol.us/media/video/train.webm">
28
+ <meta property="og:video:secure_url" content="https://d72cgtgi6hvvl.cloudfront.net/media/video/train.webm">
29
+ <meta property="og:video:type" content="video/webm">
30
+ <meta property="og:video:width" content="480">
31
+ <meta property="og:video:height" content="320">
32
+ </head>
33
+ <body>
34
+ <p>Example of basic properties with <a href="http://ogp.me/#structured">structured</a> videos in a SWF wrapper, MP4, and WebM format.</p>
35
+ </body>
36
+ </html>
@@ -0,0 +1,42 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head prefix="og: http://ogp.me/ns# video: http://ogp.me/ns/video#">
4
+ <meta charset="utf-8">
5
+ <title>Arrival of a Train at La Ciotat</title>
6
+ <meta property="og:title" content="Arrival of a Train at La Ciotat">
7
+ <meta property="og:description" content="L'arrivée d'un train en gare de La Ciotat is an 1895 French short black-and-white silent documentary film directed and produced by Auguste and Louis Lumière. Its first public showing took place in January 1896.">
8
+ <meta property="og:site_name" content="Open Graph protocol examples">
9
+ <meta property="og:type" content="video.movie">
10
+ <meta property="og:locale" content="en_US">
11
+ <link rel="canonical" href="http://examples.opengraphprotocol.us/video-movie.html">
12
+ <meta property="og:url" content="http://examples.opengraphprotocol.us/video-movie.html">
13
+ <meta property="og:image" content="http://examples.opengraphprotocol.us/media/images/train.jpg">
14
+ <meta property="og:image:secure_url" content="https://d72cgtgi6hvvl.cloudfront.net/media/images/train.jpg">
15
+ <meta property="og:image:width" content="500">
16
+ <meta property="og:image:height" content="328">
17
+ <meta property="og:image:type" content="image/jpeg">
18
+ <meta property="og:video" content="http://fpdownload.adobe.com/strobe/FlashMediaPlayback.swf?src=http%3A%2F%2Fexamples.opengraphprotocol.us%2Fmedia%2Fvideo%2Ftrain.mp4">
19
+ <meta property="og:video:secure_url" content="https://fpdownload.adobe.com/strobe/FlashMediaPlayback.swf?src=https%3A%2F%2Fd72cgtgi6hvvl.cloudfront.net%2Fmedia%2Fvideo%2Ftrain.mp4">
20
+ <meta property="og:video:type" content="application/x-shockwave-flash">
21
+ <meta property="og:video:width" content="472">
22
+ <meta property="og:video:height" content="296">
23
+ <meta property="og:video" content="http://examples.opengraphprotocol.us/media/video/train.mp4">
24
+ <meta property="og:video:secure_url" content="https://d72cgtgi6hvvl.cloudfront.net/media/video/train.mp4">
25
+ <meta property="og:video:type" content="video/mp4">
26
+ <meta property="og:video:width" content="472">
27
+ <meta property="og:video:height" content="296">
28
+ <meta property="og:video" content="http://examples.opengraphprotocol.us/media/video/train.webm">
29
+ <meta property="og:video:secure_url" content="https://d72cgtgi6hvvl.cloudfront.net/media/video/train.webm">
30
+ <meta property="og:video:type" content="video/webm">
31
+ <meta property="og:video:width" content="480">
32
+ <meta property="og:video:height" content="320">
33
+ <meta property="video:release_date" content="1895-12-28">
34
+ <meta property="video:director" content="http://examples.opengraphprotocol.us/profile.html">
35
+ <meta property="video:duration" content="50">
36
+ <meta property="video:tag" content="La Ciotat">
37
+ <meta property="video:tag" content="train">
38
+ </head>
39
+ <body>
40
+ <p>A <a href="http://ogp.me/#type_video.movie">video.movie</a> object.</p>
41
+ </body>
42
+ </html>
@@ -0,0 +1,26 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head prefix="og: http://ogp.me/ns#">
4
+ <meta charset="utf-8">
5
+ <title>Structured video property</title>
6
+ <meta property="og:title" content="Structured video property">
7
+ <meta property="og:site_name" content="Open Graph protocol examples">
8
+ <meta property="og:type" content="website">
9
+ <meta property="og:locale" content="en_US">
10
+ <link rel="canonical" href="http://examples.opengraphprotocol.us/video.html">
11
+ <meta property="og:url" content="http://examples.opengraphprotocol.us/video.html">
12
+ <meta property="og:image" content="http://examples.opengraphprotocol.us/media/images/50.png">
13
+ <meta property="og:image:secure_url" content="https://d72cgtgi6hvvl.cloudfront.net/media/images/50.png">
14
+ <meta property="og:image:width" content="50">
15
+ <meta property="og:image:height" content="50">
16
+ <meta property="og:image:type" content="image/png">
17
+ <meta property="og:video" content="http://fpdownload.adobe.com/strobe/FlashMediaPlayback.swf?src=http%3A%2F%2Fexamples.opengraphprotocol.us%2Fmedia%2Fvideo%2Ftrain.mp4">
18
+ <meta property="og:video:secure_url" content="https://fpdownload.adobe.com/strobe/FlashMediaPlayback.swf?src=https%3A%2F%2Fd72cgtgi6hvvl.cloudfront.net%2Fmedia%2Fvideo%2Ftrain.mp4">
19
+ <meta property="og:video:type" content="application/x-shockwave-flash">
20
+ <meta property="og:video:width" content="472">
21
+ <meta property="og:video:height" content="296">
22
+ </head>
23
+ <body>
24
+ <p>Example of basic properties with <a href="http://ogp.me/#structured">structured</a> videos in a SWF wrapper.</p>
25
+ </body>
26
+ </html>
@@ -0,0 +1,69 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe "invalid examples" do
4
+ %w(plain error).each do |example|
5
+ describe example do
6
+ it "says there are no tags" do
7
+ expect {
8
+ OpenGraphReader.parse! example_html 'plain'
9
+ }.to raise_error OpenGraphReader::NoOpenGraphDataError, /OpenGraph tags/
10
+ end
11
+ end
12
+ end
13
+
14
+ describe "filters/xss-image" do
15
+ it "errors on the invaid URL" do
16
+ expect {
17
+ OpenGraphReader.parse! example_html 'filters/xss-image'
18
+ }.to raise_error OpenGraphReader::InvalidObjectError, /does not start with http/
19
+ end
20
+ end
21
+
22
+ describe "errors/article-date" do
23
+ it "has an incorrectly formatted date" do
24
+ expect {
25
+ OpenGraphReader.parse! example_html 'errors/article-date'
26
+ }.to raise_error OpenGraphReader::InvalidObjectError, /ISO8601 datetime expected/
27
+ end
28
+ end
29
+
30
+ describe "errors/book-author" do
31
+ it "doesn't have a profile object as author" do
32
+ expect {
33
+ OpenGraphReader.parse! example_html 'errors/book-author'
34
+ }.to raise_error OpenGraphReader::InvalidObjectError, /does not start with http/
35
+ end
36
+ end
37
+
38
+ describe "errors/gender" do
39
+ it "doesn't have a valid gender" do
40
+ expect {
41
+ OpenGraphReader.parse! example_html 'errors/gender'
42
+ }.to raise_error OpenGraphReader::InvalidObjectError, /Expected one of/
43
+ end
44
+ end
45
+
46
+ describe "errors/geo" do
47
+ it "doesn't recognize the old elements" do
48
+ expect {
49
+ OpenGraphReader.parse! example_html 'errors/geo'
50
+ }.to raise_error OpenGraphReader::InvalidObjectError, /Undefined property/
51
+ end
52
+ end
53
+
54
+ describe "errors/type" do
55
+ it "doesn't handle the unkown type" do
56
+ expect {
57
+ OpenGraphReader.parse! example_html 'errors/type'
58
+ }.to raise_error OpenGraphReader::InvalidObjectError, /Undefined type/
59
+ end
60
+ end
61
+
62
+ describe "errors/video-duration" do
63
+ it "only accepts integers" do
64
+ expect {
65
+ OpenGraphReader.parse! example_html 'errors/video-duration'
66
+ }.to raise_error OpenGraphReader::InvalidObjectError, /Integer expected/
67
+ end
68
+ end
69
+ end
@@ -0,0 +1,76 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe 'valid examples' do
4
+ %w(
5
+ article-offset
6
+ article-utc
7
+ audio-array
8
+ audio-url
9
+ audio
10
+ book-isbn10
11
+ book
12
+ canadian
13
+ image-array
14
+ image-toosmall
15
+ image-url
16
+ image
17
+ index
18
+ min
19
+ nomedia
20
+ profile
21
+ required
22
+ video-array
23
+ video-movie
24
+ video
25
+ ).each do |example|
26
+ describe example do
27
+ it "parses" do
28
+ expect {
29
+ OpenGraphReader.parse! example_html example
30
+ }.to_not raise_error
31
+ end
32
+ end
33
+ end
34
+
35
+ describe "article" do
36
+ let(:object) { OpenGraphReader.parse! example_html "article" }
37
+ it "parses" do
38
+ expect {
39
+ object
40
+ }.to_not raise_error
41
+ end
42
+
43
+ it "allows access to the first tag" do
44
+ expect(object.article.tag).to eq "Watergate"
45
+ end
46
+
47
+ it "assigns correctly" do
48
+ expect(object.og.title).to eq "5 Held in Plot to Bug Office"
49
+ expect(object.og.site_name).to eq "Open Graph protocol examples"
50
+ expect(object.og.type).to eq "article"
51
+ expect(object.og.locale.to_s).to eq "en_US"
52
+ expect(object.og.url).to eq "http://examples.opengraphprotocol.us/article.html"
53
+ expect(object.og.image.content).to eq "http://examples.opengraphprotocol.us/media/images/50.png"
54
+ expect(object.og.image.url).to eq "https://d72cgtgi6hvvl.cloudfront.net/media/images/50.png"
55
+ expect(object.og.image.secure_url).to eq "https://d72cgtgi6hvvl.cloudfront.net/media/images/50.png"
56
+ expect(object.og.image.width).to eq 50
57
+ expect(object.og.image.height).to eq 50
58
+ expect(object.og.image.type).to eq "image/png"
59
+ expect(object.article.published_time).to eq DateTime.new(1972, 6, 18)
60
+ expect(object.article.author.content).to eq "http://examples.opengraphprotocol.us/profile.html"
61
+ expect(object.article.section).to eq "Front page"
62
+ expect(object.article.tag).to eq "Watergate"
63
+ expect(object.article.tags).to eq ["Watergate"]
64
+ end
65
+ end
66
+
67
+ # Examples say this is invalid, but http://ogp.me defines isbn it as string,
68
+ # so anything goes
69
+ describe "errors/book" do
70
+ it "parses" do
71
+ expect {
72
+ OpenGraphReader.parse! example_html "errors/book"
73
+ }.to_not raise_error
74
+ end
75
+ end
76
+ end
@@ -0,0 +1,94 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe OpenGraphReader do
4
+ let (:invalid_object) { "<head><meta property='og:type' content='foobar' /></head>" }
5
+
6
+ describe "::fetch!" do
7
+ it "raises if there's no html" do
8
+ allow(OpenGraphReader::Fetcher).to receive(:new).and_return(double(html?: false))
9
+
10
+ expect {
11
+ OpenGraphReader.fetch! "http://example.org"
12
+ }.to raise_error OpenGraphReader::NoOpenGraphDataError
13
+ end
14
+
15
+ it "raises if there are no tags" do
16
+ fetcher = double(html?: true, url: "http://example.org", body: "")
17
+ allow(OpenGraphReader::Fetcher).to receive(:new).and_return(fetcher)
18
+ allow(OpenGraphReader::Parser).to receive(:new).and_return(double(has_tags?: false))
19
+ expect {
20
+ OpenGraphReader.fetch! "http://example.org"
21
+ }.to raise_error OpenGraphReader::NoOpenGraphDataError
22
+ end
23
+
24
+ it "raises if there's an invalid object" do
25
+ fetcher = double(html?: true, url: "http://example.org", body: invalid_object)
26
+ allow(OpenGraphReader::Fetcher).to receive(:new).and_return(fetcher)
27
+
28
+ expect {
29
+ OpenGraphReader.fetch! "http://example.org"
30
+ }.to raise_error OpenGraphReader::InvalidObjectError
31
+ end
32
+ end
33
+
34
+ describe "::fetch" do
35
+ it "does not raise if there's no html" do
36
+ allow(OpenGraphReader::Fetcher).to receive(:new).and_return(double(html?: false))
37
+
38
+ expect {
39
+ OpenGraphReader.fetch "http://example.org"
40
+ }.to_not raise_error
41
+ end
42
+
43
+ it "does not raise if there are no tags" do
44
+ fetcher = double(html?: true, url: "http://example.org", body: "")
45
+ allow(OpenGraphReader::Fetcher).to receive(:new).and_return(fetcher)
46
+ allow(OpenGraphReader::Parser).to receive(:new).and_return(double(has_tags?: false))
47
+
48
+ expect {
49
+ OpenGraphReader.fetch "http://example.org"
50
+ }.to_not raise_error
51
+ end
52
+
53
+ it "does not raise if there's an invalid object" do
54
+ fetcher = double(html?: true, url: "http://example.org", body: invalid_object)
55
+ allow(OpenGraphReader::Fetcher).to receive(:new).and_return(fetcher)
56
+
57
+ expect {
58
+ OpenGraphReader.fetch "http://example.org"
59
+ }.to_not raise_error
60
+ end
61
+ end
62
+
63
+ describe "::parse!" do
64
+ it "raises if there are no tags" do
65
+ allow(OpenGraphReader::Parser).to receive(:new).and_return(double(has_tags?: false))
66
+
67
+ expect {
68
+ OpenGraphReader.parse! ""
69
+ }.to raise_error OpenGraphReader::NoOpenGraphDataError
70
+ end
71
+
72
+ it "raises if there's an invalid object" do
73
+ expect {
74
+ OpenGraphReader.parse! invalid_object
75
+ }.to raise_error OpenGraphReader::InvalidObjectError
76
+ end
77
+ end
78
+
79
+ describe "::parse" do
80
+ it "does not raise if there are no tags" do
81
+ allow(OpenGraphReader::Parser).to receive(:new).and_return(double(has_tags?: false))
82
+
83
+ expect {
84
+ OpenGraphReader.parse ""
85
+ }.to_not raise_error
86
+ end
87
+
88
+ it "does not raise if there's an invalid object" do
89
+ expect {
90
+ OpenGraphReader.parse invalid_object
91
+ }.to_not raise_error
92
+ end
93
+ end
94
+ end
@@ -0,0 +1,35 @@
1
+ require 'bundler/setup'
2
+ require 'webmock/rspec'
3
+
4
+ require 'open_graph_reader'
5
+
6
+ RSpec.configure do |config|
7
+ config.expect_with :rspec do |expectations|
8
+ expectations.include_chain_clauses_in_custom_matcher_descriptions = true
9
+ end
10
+
11
+ config.mock_with :rspec do |mocks|
12
+ mocks.verify_partial_doubles = true
13
+ end
14
+
15
+ config.filter_run :focus
16
+ config.run_all_when_everything_filtered = true
17
+
18
+ config.disable_monkey_patching!
19
+
20
+ config.warnings = true if ENV['TRAVIS']
21
+
22
+ if config.files_to_run.one?
23
+ config.default_formatter = 'doc'
24
+ end
25
+
26
+ config.profile_examples = 10
27
+
28
+ config.order = :random
29
+ Kernel.srand config.seed
30
+ end
31
+
32
+
33
+ def example_html example
34
+ File.read File.expand_path("./fixtures/examples/#{example}.html", __dir__)
35
+ end
metadata ADDED
@@ -0,0 +1,247 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: open_graph_reader
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Jonne Haß
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-12-06 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: nokogiri
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.6'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.6'
27
+ - !ruby/object:Gem::Dependency
28
+ name: faraday
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 0.9.0
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 0.9.0
41
+ - !ruby/object:Gem::Dependency
42
+ name: bundler
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '1.7'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '1.7'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rake
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '10.0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '10.0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rspec
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '3.1'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '3.1'
83
+ - !ruby/object:Gem::Dependency
84
+ name: webmock
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '1.20'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '1.20'
97
+ description: A library to fetch and parse OpenGraph properties from an URL or a given
98
+ string.
99
+ email:
100
+ - me@jhass.eu
101
+ executables: []
102
+ extensions: []
103
+ extra_rdoc_files: []
104
+ files:
105
+ - ".gitmodules"
106
+ - ".rspec"
107
+ - ".yardopts"
108
+ - lib/open_graph_reader.rb
109
+ - lib/open_graph_reader/base.rb
110
+ - lib/open_graph_reader/builder.rb
111
+ - lib/open_graph_reader/definitions.rb
112
+ - lib/open_graph_reader/fetcher.rb
113
+ - lib/open_graph_reader/object.rb
114
+ - lib/open_graph_reader/object/dsl.rb
115
+ - lib/open_graph_reader/object/dsl/types.rb
116
+ - lib/open_graph_reader/object/registry.rb
117
+ - lib/open_graph_reader/parser.rb
118
+ - lib/open_graph_reader/parser/graph.rb
119
+ - lib/open_graph_reader/version.rb
120
+ - spec/fixtures/examples/apple-touch-icon-precomposed.png
121
+ - spec/fixtures/examples/apple-touch-icon.png
122
+ - spec/fixtures/examples/article-offset.html
123
+ - spec/fixtures/examples/article-utc.html
124
+ - spec/fixtures/examples/article.html
125
+ - spec/fixtures/examples/audio-array.html
126
+ - spec/fixtures/examples/audio-url.html
127
+ - spec/fixtures/examples/audio.html
128
+ - spec/fixtures/examples/book-isbn10.html
129
+ - spec/fixtures/examples/book.html
130
+ - spec/fixtures/examples/canadian.html
131
+ - spec/fixtures/examples/error.html
132
+ - spec/fixtures/examples/errors/article-date.html
133
+ - spec/fixtures/examples/errors/book-author.html
134
+ - spec/fixtures/examples/errors/book.html
135
+ - spec/fixtures/examples/errors/gender.html
136
+ - spec/fixtures/examples/errors/geo.html
137
+ - spec/fixtures/examples/errors/type.html
138
+ - spec/fixtures/examples/errors/video-duration.html
139
+ - spec/fixtures/examples/favicon.ico
140
+ - spec/fixtures/examples/filters/xss-image.html
141
+ - spec/fixtures/examples/image-array.html
142
+ - spec/fixtures/examples/image-toosmall.html
143
+ - spec/fixtures/examples/image-url.html
144
+ - spec/fixtures/examples/image.html
145
+ - spec/fixtures/examples/index.html
146
+ - spec/fixtures/examples/media/audio/1khz.mp3
147
+ - spec/fixtures/examples/media/audio/250hz.mp3
148
+ - spec/fixtures/examples/media/images/1.png
149
+ - spec/fixtures/examples/media/images/50.png
150
+ - spec/fixtures/examples/media/images/75.png
151
+ - spec/fixtures/examples/media/images/icon.png
152
+ - spec/fixtures/examples/media/images/logo.png
153
+ - spec/fixtures/examples/media/images/train.jpg
154
+ - spec/fixtures/examples/media/video/train.flv
155
+ - spec/fixtures/examples/media/video/train.mp4
156
+ - spec/fixtures/examples/media/video/train.webm
157
+ - spec/fixtures/examples/min.html
158
+ - spec/fixtures/examples/nomedia.html
159
+ - spec/fixtures/examples/plain.html
160
+ - spec/fixtures/examples/profile.html
161
+ - spec/fixtures/examples/required.html
162
+ - spec/fixtures/examples/robots.txt
163
+ - spec/fixtures/examples/sitemap.xml
164
+ - spec/fixtures/examples/video-array.html
165
+ - spec/fixtures/examples/video-movie.html
166
+ - spec/fixtures/examples/video.html
167
+ - spec/integration/invalid_examples_spec.rb
168
+ - spec/integration/valid_examples_spec.rb
169
+ - spec/open_graph_reader_spec.rb
170
+ - spec/spec_helper.rb
171
+ homepage: https://github.com/jhass/opengraph_reader
172
+ licenses:
173
+ - MIT
174
+ metadata: {}
175
+ post_install_message:
176
+ rdoc_options: []
177
+ require_paths:
178
+ - lib
179
+ required_ruby_version: !ruby/object:Gem::Requirement
180
+ requirements:
181
+ - - ">="
182
+ - !ruby/object:Gem::Version
183
+ version: '0'
184
+ required_rubygems_version: !ruby/object:Gem::Requirement
185
+ requirements:
186
+ - - ">="
187
+ - !ruby/object:Gem::Version
188
+ version: '0'
189
+ requirements: []
190
+ rubyforge_project:
191
+ rubygems_version: 2.4.1
192
+ signing_key:
193
+ specification_version: 4
194
+ summary: OpenGraph protocol parser
195
+ test_files:
196
+ - spec/fixtures/examples/apple-touch-icon-precomposed.png
197
+ - spec/fixtures/examples/apple-touch-icon.png
198
+ - spec/fixtures/examples/article-offset.html
199
+ - spec/fixtures/examples/article-utc.html
200
+ - spec/fixtures/examples/article.html
201
+ - spec/fixtures/examples/audio-array.html
202
+ - spec/fixtures/examples/audio-url.html
203
+ - spec/fixtures/examples/audio.html
204
+ - spec/fixtures/examples/book-isbn10.html
205
+ - spec/fixtures/examples/book.html
206
+ - spec/fixtures/examples/canadian.html
207
+ - spec/fixtures/examples/error.html
208
+ - spec/fixtures/examples/errors/article-date.html
209
+ - spec/fixtures/examples/errors/book-author.html
210
+ - spec/fixtures/examples/errors/book.html
211
+ - spec/fixtures/examples/errors/gender.html
212
+ - spec/fixtures/examples/errors/geo.html
213
+ - spec/fixtures/examples/errors/type.html
214
+ - spec/fixtures/examples/errors/video-duration.html
215
+ - spec/fixtures/examples/favicon.ico
216
+ - spec/fixtures/examples/filters/xss-image.html
217
+ - spec/fixtures/examples/image-array.html
218
+ - spec/fixtures/examples/image-toosmall.html
219
+ - spec/fixtures/examples/image-url.html
220
+ - spec/fixtures/examples/image.html
221
+ - spec/fixtures/examples/index.html
222
+ - spec/fixtures/examples/media/audio/1khz.mp3
223
+ - spec/fixtures/examples/media/audio/250hz.mp3
224
+ - spec/fixtures/examples/media/images/1.png
225
+ - spec/fixtures/examples/media/images/50.png
226
+ - spec/fixtures/examples/media/images/75.png
227
+ - spec/fixtures/examples/media/images/icon.png
228
+ - spec/fixtures/examples/media/images/logo.png
229
+ - spec/fixtures/examples/media/images/train.jpg
230
+ - spec/fixtures/examples/media/video/train.flv
231
+ - spec/fixtures/examples/media/video/train.mp4
232
+ - spec/fixtures/examples/media/video/train.webm
233
+ - spec/fixtures/examples/min.html
234
+ - spec/fixtures/examples/nomedia.html
235
+ - spec/fixtures/examples/plain.html
236
+ - spec/fixtures/examples/profile.html
237
+ - spec/fixtures/examples/required.html
238
+ - spec/fixtures/examples/robots.txt
239
+ - spec/fixtures/examples/sitemap.xml
240
+ - spec/fixtures/examples/video-array.html
241
+ - spec/fixtures/examples/video-movie.html
242
+ - spec/fixtures/examples/video.html
243
+ - spec/integration/invalid_examples_spec.rb
244
+ - spec/integration/valid_examples_spec.rb
245
+ - spec/open_graph_reader_spec.rb
246
+ - spec/spec_helper.rb
247
+ has_rdoc: