open_graph_reader 0.1.0 → 0.2.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.
@@ -11,8 +11,25 @@ RSpec.describe "invalid examples" do
11
11
  end
12
12
  end
13
13
 
14
+ # Most parsers synthesize missing required properties, however
15
+ # we do not (yet), making this example an invalid object
16
+ describe "min" do
17
+ it "has missing required properties" do
18
+ expect {
19
+ OpenGraphReader.parse! example_html 'min'
20
+ }.to raise_error OpenGraphReader::InvalidObjectError, /Missing required/
21
+ end
22
+
23
+ it "returns what's there if required property validation is disabled" do
24
+ OpenGraphReader.config.validate_required = false
25
+ object = OpenGraphReader.parse! example_html 'min'
26
+ expect(object.og.site_name).to eq "Open Graph protocol examples"
27
+ expect(object.og.description).to eq "Content not on page"
28
+ end
29
+ end
30
+
14
31
  describe "filters/xss-image" do
15
- it "errors on the invaid URL" do
32
+ it "errors on the invaid URL in strict mode" do
16
33
  expect {
17
34
  OpenGraphReader.parse! example_html 'filters/xss-image'
18
35
  }.to raise_error OpenGraphReader::InvalidObjectError, /does not start with http/
@@ -44,19 +61,41 @@ RSpec.describe "invalid examples" do
44
61
  end
45
62
 
46
63
  describe "errors/geo" do
47
- it "doesn't recognize the old elements" do
64
+ it "doesn't recognize the old elements in strict mode" do
65
+ OpenGraphReader.config.strict = true
66
+
48
67
  expect {
49
68
  OpenGraphReader.parse! example_html 'errors/geo'
50
69
  }.to raise_error OpenGraphReader::InvalidObjectError, /Undefined property/
51
70
  end
71
+
72
+ it "parses in default mode" do
73
+ object = OpenGraphReader.parse! example_html 'errors/geo'
74
+
75
+ expect(object.og.type).to eq "website"
76
+ expect(object.og.title).to eq "Open Graph protocol 1.0 location data"
77
+ expect(object.og.url).to eq "http://examples.opengraphprotocol.us/errors/geo.html"
78
+ expect(object.og.image.url).to eq "http://examples.opengraphprotocol.us/media/images/50.png"
79
+ end
52
80
  end
53
81
 
54
82
  describe "errors/type" do
55
- it "doesn't handle the unkown type" do
83
+ it "doesn't handle the unknown type in strict mode" do
84
+ OpenGraphReader.config.strict = true
85
+
56
86
  expect {
57
87
  OpenGraphReader.parse! example_html 'errors/type'
58
88
  }.to raise_error OpenGraphReader::InvalidObjectError, /Undefined type/
59
89
  end
90
+
91
+ it "parses the known properties" do
92
+ object = OpenGraphReader.parse! example_html 'errors/type'
93
+
94
+ expect(object.og.type).to eq "fubar"
95
+ expect(object.og.title).to eq "Undefined global type"
96
+ expect(object.og.url).to eq "http://examples.opengraphprotocol.us/errors/type.html"
97
+ expect(object.og.image.url).to eq "http://examples.opengraphprotocol.us/media/images/50.png"
98
+ end
60
99
  end
61
100
 
62
101
  describe "errors/video-duration" do
@@ -0,0 +1,121 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe "real world examples" do
4
+ describe "mixed_case_properties" do
5
+ it "parses" do
6
+ expect {
7
+ OpenGraphReader.parse! fixture_html 'real_world/mixed_case_properties'
8
+ }.to_not raise_error
9
+ end
10
+
11
+ it "assigns the right attributes" do
12
+ object = OpenGraphReader.parse fixture_html 'real_world/mixed_case_properties'
13
+
14
+ expect(object.og.title).to eq "Eine Million Unterschriften gegen TTIP"
15
+ expect(object.og.type).to eq "website"
16
+ expect(object.og.locale.to_s).to eq "de_DE"
17
+ expect(object.og.url).to eq "http://www.heise.de/tp/artikel/43/43516/"
18
+ expect(object.og.site_name).to eq "Telepolis"
19
+ expect(object.og.image.url).to eq "http://www.heise.de/tp/artikel/43/43516/43516_1.jpg"
20
+ expect(object.og.description).to eq "Ungenehmigte Bürgerinitiative will das Paket EU-Kommissionschef Juncker zum Geburtstag schenken"
21
+ end
22
+ end
23
+
24
+ describe "missing_image" do
25
+ it "does not parse" do
26
+ expect {
27
+ OpenGraphReader.parse! fixture_html 'real_world/missing_image'
28
+ }.to raise_error OpenGraphReader::InvalidObjectError, /Missing required/
29
+ end
30
+ end
31
+
32
+ describe "mixed_case_type" do
33
+ it "parses" do
34
+ expect {
35
+ OpenGraphReader.parse! fixture_html 'real_world/mixed_case_type'
36
+ }.to_not raise_error
37
+ end
38
+ end
39
+
40
+ describe "not_a_reference" do
41
+ it "does not parse" do
42
+ expect {
43
+ OpenGraphReader.parse! fixture_html 'real_world/not_a_reference'
44
+ }.to raise_error OpenGraphReader::InvalidObjectError, /does not start with/
45
+ end
46
+
47
+ it "parses with reference validation turned of" do
48
+ OpenGraphReader.config.validate_references = false
49
+ object = OpenGraphReader.parse! fixture_html 'real_world/not_a_reference'
50
+
51
+ expect(object.og.title).to eq "Emergency call system for all new cars by 2018"
52
+ expect(object.og.type).to eq "article"
53
+ expect(object.og.description).to eq "The European Parliament and EU member states have agreed that new cars must be fitted with an automated system to alert emergency services in event of a crash."
54
+ expect(object.og.site_name).to eq "BBC News"
55
+ expect(object.og.url).to eq "http://www.bbc.co.uk/news/technology-30337272"
56
+ expect(object.og.image.url).to eq "http://news.bbcimg.co.uk/media/images/79520000/jpg/_79520623_79519885.jpg"
57
+ expect(object.article.author.to_s).to eq "BBC News"
58
+ expect(object.article.section).to eq "Technology"
59
+ end
60
+ end
61
+
62
+ describe "unknown_type" do
63
+ it "parses" do
64
+ object = OpenGraphReader.parse! fixture_html 'real_world/unknown_type'
65
+
66
+ expect(object.og.url).to eq "http://www.instructables.com/id/Building-the-Open-Knit-machine/"
67
+ expect(object.og.title).to eq "Building the OpenKnit machine"
68
+ expect(object.og.image.url).to eq "http://cdn.instructables.com/FI2/D7XW/I2XTQWFE/FI2D7XWI2XTQWFE.RECTANGLE1.jpg"
69
+ expect(object.og.description).to eq "The OpenKnit machine is an open-source, low cost, digital fabrication tool developed by Gerard Rubio. The machine affords the user the opportunity to..."
70
+ end
71
+
72
+ it "does not parse in strict mode" do
73
+ OpenGraphReader.config.strict = true
74
+
75
+ expect {
76
+ OpenGraphReader.parse! fixture_html 'real_world/unknown_type'
77
+ }.to raise_error OpenGraphReader::InvalidObjectError, /Undefined type/
78
+ end
79
+ end
80
+
81
+ describe "undefined_property" do
82
+ it "parses" do
83
+ object = OpenGraphReader.parse! fixture_html 'real_world/undefined_property'
84
+
85
+ expect(object.og.locale.to_s).to eq "es_ES"
86
+ expect(object.og.type).to eq "article"
87
+ expect(object.og.title).to eq "Profesores y campesinos amarran a infiltrados en marcha"
88
+ expect(object.og.description).to eq "Regeneración, 6 de diciembre de 2014.-Durante la marcha que realizan profesores y organizaciones campesinas sobre avenida Paseo de la Reforma, maestros de la Coordinadora Estatal de Trabajadores de la Educación en Guerrero (CETEG) ubicaron a 12 jóvenes como “infiltrados”, a quienes amarraron de las manos en una cadena humana para evitar que marchen con ellos, informó El …"
89
+ expect(object.og.url).to eq "http://regeneracion.mx/sociedad/profesores-y-campesinos-amarran-a-infiltrados-en-marcha/"
90
+ expect(object.og.site_name).to eq "Regeneración"
91
+ expect(object.og.image.url).to eq "http://regeneracion.mx/wp-content/uploads/2014/12/Infiltrados.jpg"
92
+ end
93
+
94
+ it "does not parse in strict mode" do
95
+ OpenGraphReader.config.strict = true
96
+
97
+ expect {
98
+ OpenGraphReader.parse! fixture_html 'real_world/undefined_property'
99
+ }.to raise_error OpenGraphReader::InvalidObjectError, /Undefined property/
100
+ end
101
+ end
102
+
103
+ describe "unknown_namespace" do
104
+ it "parses" do
105
+ object = OpenGraphReader.parse! fixture_html 'real_world/unknown_namespace'
106
+
107
+ expect(object.og.url).to eq "http://www.instructables.com/id/Building-the-Open-Knit-machine/"
108
+ expect(object.og.title).to eq "Building the OpenKnit machine"
109
+ expect(object.og.image.url).to eq "http://cdn.instructables.com/FI2/D7XW/I2XTQWFE/FI2D7XWI2XTQWFE.RECTANGLE1.jpg"
110
+ expect(object.og.description).to eq "The OpenKnit machine is an open-source, low cost, digital fabrication tool developed by Gerard Rubio. The machine affords the user the opportunity to..."
111
+ end
112
+
113
+ it "does not parse in strict mode" do
114
+ OpenGraphReader.config.strict = true
115
+
116
+ expect {
117
+ OpenGraphReader.parse! fixture_html 'real_world/unknown_namespace'
118
+ }.to raise_error OpenGraphReader::InvalidObjectError, /is not a registered namespace/
119
+ end
120
+ end
121
+ end
@@ -15,7 +15,6 @@ RSpec.describe 'valid examples' do
15
15
  image-url
16
16
  image
17
17
  index
18
- min
19
18
  nomedia
20
19
  profile
21
20
  required
data/spec/spec_helper.rb CHANGED
@@ -27,9 +27,17 @@ RSpec.configure do |config|
27
27
 
28
28
  config.order = :random
29
29
  Kernel.srand config.seed
30
+
31
+ config.after(:each) do
32
+ OpenGraphReader.config.reset_to_defaults!
33
+ end
30
34
  end
31
35
 
32
36
 
33
37
  def example_html example
34
- File.read File.expand_path("./fixtures/examples/#{example}.html", __dir__)
38
+ fixture_html "examples/#{example}"
39
+ end
40
+
41
+ def fixture_html fixture
42
+ File.read File.expand_path("./fixtures/#{fixture}.html", __dir__)
35
43
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: open_graph_reader
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jonne Haß
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-12-06 00:00:00.000000000 Z
11
+ date: 2014-12-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: nokogiri
@@ -108,6 +108,7 @@ files:
108
108
  - lib/open_graph_reader.rb
109
109
  - lib/open_graph_reader/base.rb
110
110
  - lib/open_graph_reader/builder.rb
111
+ - lib/open_graph_reader/configuration.rb
111
112
  - lib/open_graph_reader/definitions.rb
112
113
  - lib/open_graph_reader/fetcher.rb
113
114
  - lib/open_graph_reader/object.rb
@@ -164,11 +165,19 @@ files:
164
165
  - spec/fixtures/examples/video-array.html
165
166
  - spec/fixtures/examples/video-movie.html
166
167
  - spec/fixtures/examples/video.html
168
+ - spec/fixtures/real_world/missing_image.html
169
+ - spec/fixtures/real_world/mixed_case_properties.html
170
+ - spec/fixtures/real_world/mixed_case_type.html
171
+ - spec/fixtures/real_world/not_a_reference.html
172
+ - spec/fixtures/real_world/undefined_property.html
173
+ - spec/fixtures/real_world/unknown_namespace.html
174
+ - spec/fixtures/real_world/unknown_type.html
167
175
  - spec/integration/invalid_examples_spec.rb
176
+ - spec/integration/real_world_spec.rb
168
177
  - spec/integration/valid_examples_spec.rb
169
178
  - spec/open_graph_reader_spec.rb
170
179
  - spec/spec_helper.rb
171
- homepage: https://github.com/jhass/opengraph_reader
180
+ homepage: https://github.com/jhass/open_graph_reader
172
181
  licenses:
173
182
  - MIT
174
183
  metadata: {}
@@ -240,7 +249,15 @@ test_files:
240
249
  - spec/fixtures/examples/video-array.html
241
250
  - spec/fixtures/examples/video-movie.html
242
251
  - spec/fixtures/examples/video.html
252
+ - spec/fixtures/real_world/missing_image.html
253
+ - spec/fixtures/real_world/mixed_case_properties.html
254
+ - spec/fixtures/real_world/mixed_case_type.html
255
+ - spec/fixtures/real_world/not_a_reference.html
256
+ - spec/fixtures/real_world/undefined_property.html
257
+ - spec/fixtures/real_world/unknown_namespace.html
258
+ - spec/fixtures/real_world/unknown_type.html
243
259
  - spec/integration/invalid_examples_spec.rb
260
+ - spec/integration/real_world_spec.rb
244
261
  - spec/integration/valid_examples_spec.rb
245
262
  - spec/open_graph_reader_spec.rb
246
263
  - spec/spec_helper.rb