ogp 0.2.0 → 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.
- checksums.yaml +5 -5
- data/README.md +1 -3
- data/lib/ogp/open_graph.rb +6 -0
- data/lib/ogp/version.rb +1 -1
- data/ogp.gemspec +1 -1
- data/spec/fixtures/i18n_encoding.html +13 -0
- data/spec/fixtures/no_root_attributes.html +26 -0
- data/spec/ogp/open_graph_spec.rb +34 -0
- metadata +9 -6
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: ac04b68e554119d27453a1d23849c99eafa72199ecac95e34deded14824e9894
|
|
4
|
+
data.tar.gz: 16b167b85c8cffbf3df3292fe7f41a7b00a2f57f731806786a67679585b5ac5b
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: f27db8019f8e34d972c859e9bec5ddc8365e3ab5fe77c0aebeedbfa81c2d243627af0b5b3e85dd9b67de0a2f5d7cd159d95c7ea8bb0a78f7ed0a7e9efdbe9c31
|
|
7
|
+
data.tar.gz: d7b980adaa3d90df2409795e6e3e20474fc3f8b19956ebe73c340b11a79bf68813633ae341462c1264489f96bcf0d0a3e34c3aecb4838ccd6fe452cd2dbb55e8
|
data/README.md
CHANGED
|
@@ -1,13 +1,11 @@
|
|
|
1
1
|
<p align="center">
|
|
2
|
-
<a href="https://github.com/
|
|
2
|
+
<a href="https://github.com/jcouture/ogp">
|
|
3
3
|
<img src="https://i.imgur.com/qZrMsLq.png" alt="ogp" />
|
|
4
4
|
</a>
|
|
5
5
|
<br />
|
|
6
6
|
OGP is a minimalist Ruby library that does only one thing: parse Open Graph protocol information. For more information: <a href="http://ogp.me">http://ogp.me</a>.
|
|
7
7
|
<br /><br />
|
|
8
8
|
<a href="https://rubygems.org/gems/ogp"><img src="http://img.shields.io/gem/v/ogp.svg" /></a>
|
|
9
|
-
<a href="https://codeclimate.com/github/jcouture/ogp"><img src="http://img.shields.io/codeclimate/github/jcouture/ogp.svg" /></a>
|
|
10
|
-
<a href="https://gemnasium.com/jcouture/ogp"><img src="http://img.shields.io/gemnasium/jcouture/ogp.svg" /></a>
|
|
11
9
|
<a href="https://travis-ci.org/jcouture/ogp"><img src="http://img.shields.io/travis/jcouture/ogp.svg" /></a>
|
|
12
10
|
</p>
|
|
13
11
|
|
data/lib/ogp/open_graph.rb
CHANGED
|
@@ -22,6 +22,8 @@ module OGP
|
|
|
22
22
|
|
|
23
23
|
raise MalformedSourceError unless source.include?('</html>')
|
|
24
24
|
|
|
25
|
+
source.force_encoding('UTF-8') if source.encoding != 'UTF-8'
|
|
26
|
+
|
|
25
27
|
self.images = []
|
|
26
28
|
self.audios = []
|
|
27
29
|
self.locales = []
|
|
@@ -45,6 +47,7 @@ module OGP
|
|
|
45
47
|
end
|
|
46
48
|
end
|
|
47
49
|
|
|
50
|
+
# rubocop:disable Metrics/CyclomaticComplexity
|
|
48
51
|
def parse_attributes(document)
|
|
49
52
|
document.xpath('//head/meta[starts-with(@property, \'og:\')]').each do |attribute|
|
|
50
53
|
attribute_name = attribute.get('property').downcase.gsub('og:', '')
|
|
@@ -52,16 +55,19 @@ module OGP
|
|
|
52
55
|
when /^image$/i
|
|
53
56
|
images << OpenStruct.new(url: attribute.get('content').to_s)
|
|
54
57
|
when /^image:(.+)/i
|
|
58
|
+
images << OpenStruct.new unless images.last
|
|
55
59
|
images.last[Regexp.last_match[1].gsub('-', '_')] = attribute.get('content').to_s
|
|
56
60
|
when /^audio$/i
|
|
57
61
|
audios << OpenStruct.new(url: attribute.get('content').to_s)
|
|
58
62
|
when /^audio:(.+)/i
|
|
63
|
+
audios << OpenStruct.new unless audios.last
|
|
59
64
|
audios.last[Regexp.last_match[1].gsub('-', '_')] = attribute.get('content').to_s
|
|
60
65
|
when /^locale/i
|
|
61
66
|
locales << attribute.get('content').to_s
|
|
62
67
|
when /^video$/i
|
|
63
68
|
videos << OpenStruct.new(url: attribute.get('content').to_s)
|
|
64
69
|
when /^video:(.+)/i
|
|
70
|
+
videos << OpenStruct.new unless videos.last
|
|
65
71
|
videos.last[Regexp.last_match[1].gsub('-', '_')] = attribute.get('content').to_s
|
|
66
72
|
else
|
|
67
73
|
instance_variable_set("@#{attribute_name}", attribute.get('content'))
|
data/lib/ogp/version.rb
CHANGED
data/ogp.gemspec
CHANGED
|
@@ -20,7 +20,7 @@ Gem::Specification.new do |spec|
|
|
|
20
20
|
spec.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
|
21
21
|
spec.require_paths = ['lib']
|
|
22
22
|
|
|
23
|
-
spec.add_dependency 'oga', '~> 2.
|
|
23
|
+
spec.add_dependency 'oga', '~> 2.15'
|
|
24
24
|
|
|
25
25
|
spec.add_development_dependency 'bundler', '~> 1.13'
|
|
26
26
|
spec.add_development_dependency 'rake', '~> 10.0'
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html>
|
|
3
|
+
<head>
|
|
4
|
+
<meta content="Hello 世界" property="og:title">
|
|
5
|
+
<meta content="website" property="og:type">
|
|
6
|
+
<meta content="Быстрая коричневая лиса прыгает через ленивую собаку." property="og:description">
|
|
7
|
+
<meta content="https://www.example.com" property="og:url">
|
|
8
|
+
<meta content="https://www.example.com/image.jpg" property="og:image">
|
|
9
|
+
<title></title>
|
|
10
|
+
</head>
|
|
11
|
+
<body>
|
|
12
|
+
</body>
|
|
13
|
+
</html>
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html>
|
|
3
|
+
<head>
|
|
4
|
+
<meta content="The Rock" property="og:title">
|
|
5
|
+
<meta content="video.movie" property="og:type">
|
|
6
|
+
<meta content="http://www.imdb.com/title/tt0117500/" property="og:url">
|
|
7
|
+
<meta content="http://example.com/ogp.jpg" property="og:image:url">
|
|
8
|
+
<meta content="https://secure.example.com/ogp.jpg" property="og:image:secure_url">
|
|
9
|
+
<meta content="image/jpeg" property="og:image:type">
|
|
10
|
+
<meta content="400" property="og:image:width">
|
|
11
|
+
<meta content="300" property="og:image:height">
|
|
12
|
+
<meta content="A shiny red apple with a bite taken out" property="og:image:alt">
|
|
13
|
+
<meta content="http://example.com/ogp.jpg" property="og:image">
|
|
14
|
+
<meta content="http://example.com/movie.swf" property="og:video:url">
|
|
15
|
+
<meta content="https://secure.example.com/movie.swf" property="og:video:secure_url">
|
|
16
|
+
<meta content="application/x-shockwave-flash" property="og:video:type">
|
|
17
|
+
<meta content="400" property="og:video:width">
|
|
18
|
+
<meta content="300" property="og:video:height">
|
|
19
|
+
<meta content="http://example.com/sound.ogg" property="og:audio:url">
|
|
20
|
+
<meta content="https://secure.example.com/sound.ogg" property="og:audio:secure_url">
|
|
21
|
+
|
|
22
|
+
<title></title>
|
|
23
|
+
</head>
|
|
24
|
+
<body>
|
|
25
|
+
</body>
|
|
26
|
+
</html>
|
data/spec/ogp/open_graph_spec.rb
CHANGED
|
@@ -107,5 +107,39 @@ describe OGP::OpenGraph do
|
|
|
107
107
|
expect(open_graph.images[1].height).to eql('500')
|
|
108
108
|
end
|
|
109
109
|
end
|
|
110
|
+
|
|
111
|
+
context 'with no root video attributes' do
|
|
112
|
+
it 'should create a proper OpenGraph object' do
|
|
113
|
+
content = File.read("#{File.dirname(__FILE__)}/../fixtures/no_root_attributes.html")
|
|
114
|
+
open_graph = OGP::OpenGraph.new(content)
|
|
115
|
+
|
|
116
|
+
expect(open_graph.images[0].url).to eql('http://example.com/ogp.jpg')
|
|
117
|
+
expect(open_graph.images[0].secure_url).to eql('https://secure.example.com/ogp.jpg')
|
|
118
|
+
expect(open_graph.images[0].type).to eql('image/jpeg')
|
|
119
|
+
expect(open_graph.images[0].width).to eql('400')
|
|
120
|
+
expect(open_graph.images[0].height).to eql('300')
|
|
121
|
+
expect(open_graph.images[0].alt).to eql('A shiny red apple with a bite taken out')
|
|
122
|
+
expect(open_graph.videos[0].url).to eql('http://example.com/movie.swf')
|
|
123
|
+
expect(open_graph.videos[0].secure_url).to eql('https://secure.example.com/movie.swf')
|
|
124
|
+
expect(open_graph.videos[0].type).to eql('application/x-shockwave-flash')
|
|
125
|
+
expect(open_graph.videos[0].width).to eql('400')
|
|
126
|
+
expect(open_graph.videos[0].height).to eql('300')
|
|
127
|
+
expect(open_graph.audios[0].url).to eql('http://example.com/sound.ogg')
|
|
128
|
+
expect(open_graph.audios[0].secure_url).to eql('https://secure.example.com/sound.ogg')
|
|
129
|
+
end
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
context 'with internationalization and unexpected encoding' do
|
|
133
|
+
it 'should create a proper OpenGraph object' do
|
|
134
|
+
content = File.read("#{File.dirname(__FILE__)}/../fixtures/i18n_encoding.html", encoding: 'ASCII-8BIT')
|
|
135
|
+
open_graph = OGP::OpenGraph.new(content)
|
|
136
|
+
|
|
137
|
+
expect(open_graph.title).to eql('Hello 世界')
|
|
138
|
+
expect(open_graph.description).to eql('Быстрая коричневая лиса прыгает через ленивую собаку.')
|
|
139
|
+
expect(open_graph.type).to eql('website')
|
|
140
|
+
expect(open_graph.url).to eql('https://www.example.com')
|
|
141
|
+
expect(open_graph.image.url).to eql('https://www.example.com/image.jpg')
|
|
142
|
+
end
|
|
143
|
+
end
|
|
110
144
|
end
|
|
111
145
|
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: ogp
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.3.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Jean-Philippe Couture
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2019-04-06 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: oga
|
|
@@ -16,14 +16,14 @@ dependencies:
|
|
|
16
16
|
requirements:
|
|
17
17
|
- - "~>"
|
|
18
18
|
- !ruby/object:Gem::Version
|
|
19
|
-
version: '2.
|
|
19
|
+
version: '2.15'
|
|
20
20
|
type: :runtime
|
|
21
21
|
prerelease: false
|
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
|
23
23
|
requirements:
|
|
24
24
|
- - "~>"
|
|
25
25
|
- !ruby/object:Gem::Version
|
|
26
|
-
version: '2.
|
|
26
|
+
version: '2.15'
|
|
27
27
|
- !ruby/object:Gem::Dependency
|
|
28
28
|
name: bundler
|
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -102,9 +102,11 @@ files:
|
|
|
102
102
|
- lib/ogp/version.rb
|
|
103
103
|
- ogp.gemspec
|
|
104
104
|
- spec/fixtures/audio_structured_attributes.html
|
|
105
|
+
- spec/fixtures/i18n_encoding.html
|
|
105
106
|
- spec/fixtures/image_structured_attributes.html
|
|
106
107
|
- spec/fixtures/missing_required_attributes.html
|
|
107
108
|
- spec/fixtures/multiple_images_attributes.html
|
|
109
|
+
- spec/fixtures/no_root_attributes.html
|
|
108
110
|
- spec/fixtures/optional_attributes.html
|
|
109
111
|
- spec/fixtures/required_attributes.html
|
|
110
112
|
- spec/fixtures/video_structured_attributes.html
|
|
@@ -129,16 +131,17 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
129
131
|
- !ruby/object:Gem::Version
|
|
130
132
|
version: '0'
|
|
131
133
|
requirements: []
|
|
132
|
-
|
|
133
|
-
rubygems_version: 2.5.1
|
|
134
|
+
rubygems_version: 3.0.3
|
|
134
135
|
signing_key:
|
|
135
136
|
specification_version: 4
|
|
136
137
|
summary: Simple Ruby library for parsing Open Graph prototocol information.
|
|
137
138
|
test_files:
|
|
138
139
|
- spec/fixtures/audio_structured_attributes.html
|
|
140
|
+
- spec/fixtures/i18n_encoding.html
|
|
139
141
|
- spec/fixtures/image_structured_attributes.html
|
|
140
142
|
- spec/fixtures/missing_required_attributes.html
|
|
141
143
|
- spec/fixtures/multiple_images_attributes.html
|
|
144
|
+
- spec/fixtures/no_root_attributes.html
|
|
142
145
|
- spec/fixtures/optional_attributes.html
|
|
143
146
|
- spec/fixtures/required_attributes.html
|
|
144
147
|
- spec/fixtures/video_structured_attributes.html
|