ogp 0.3.0 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +4 -0
- data/lib/ogp/open_graph.rb +28 -1
- data/lib/ogp/version.rb +1 -1
- data/ogp.gemspec +1 -1
- data/spec/fixtures/custom_attributes.html +21 -0
- data/spec/ogp/open_graph_spec.rb +12 -0
- metadata +6 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b67e536cdab955dfbff8f93724732c051a19df9337f8560c3e77033728f45ace
|
4
|
+
data.tar.gz: e661bc0cbe6c0466db428ad1feb3e33f9e27e28d22e60308aab191fc7cdb78f4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: eb53f0ea1c971692ae08c716ed8f2d5c4d11a9f1aa6baad942765babde03e53cd11803e0a3f89763c87a36461e8e4eb7894e28a38a918d36b2b299d7e85eeab7
|
7
|
+
data.tar.gz: 9d52e2948173d732604afd2ce22cca452ea880ddf030ded4ffdf52d1209c354d8e62547b6cdf508c4ef94542785e63b5a7c6edaea1a6e604085e143aa3d19c3d
|
data/README.md
CHANGED
@@ -41,6 +41,10 @@ open_graph.title # => "Open Graph protocol"
|
|
41
41
|
open_graph.type # => "website"
|
42
42
|
open_graph.image.url # => "http://ogp.me/logo.png"
|
43
43
|
open_graph.url # => "http://ogp.me/"
|
44
|
+
|
45
|
+
# All open graph tags are additionally stored in a `data` hash so that custom
|
46
|
+
# open graph tags can still be accessed.
|
47
|
+
open_graph.data["title"] # => "Open Graph protocol"
|
44
48
|
```
|
45
49
|
|
46
50
|
## Contributing
|
data/lib/ogp/open_graph.rb
CHANGED
@@ -5,6 +5,9 @@ REQUIRED_ATTRIBUTES = %w(title type image url).freeze
|
|
5
5
|
|
6
6
|
module OGP
|
7
7
|
class OpenGraph
|
8
|
+
# Accessor for storing all open graph data
|
9
|
+
attr_accessor :data
|
10
|
+
|
8
11
|
# Required Accessors
|
9
12
|
attr_accessor :title, :type, :url
|
10
13
|
attr_accessor :images
|
@@ -24,6 +27,7 @@ module OGP
|
|
24
27
|
|
25
28
|
source.force_encoding('UTF-8') if source.encoding != 'UTF-8'
|
26
29
|
|
30
|
+
self.data = {}
|
27
31
|
self.images = []
|
28
32
|
self.audios = []
|
29
33
|
self.locales = []
|
@@ -51,6 +55,21 @@ module OGP
|
|
51
55
|
def parse_attributes(document)
|
52
56
|
document.xpath('//head/meta[starts-with(@property, \'og:\')]').each do |attribute|
|
53
57
|
attribute_name = attribute.get('property').downcase.gsub('og:', '')
|
58
|
+
|
59
|
+
if data.has_key?(attribute_name)
|
60
|
+
# There can be multiple entries for the same og tag, see
|
61
|
+
# https://open.spotify.com/album/3NkIlQR6wZwPCQiP1vPjF8 for an example
|
62
|
+
# where there are multiple `restrictions:country:allowed` og tags.
|
63
|
+
#
|
64
|
+
# In this case store the content values as an array.
|
65
|
+
if !data[attribute_name].kind_of?(Array)
|
66
|
+
data[attribute_name] = [ data[attribute_name] ]
|
67
|
+
end
|
68
|
+
data[attribute_name] << attribute.get('content')
|
69
|
+
else
|
70
|
+
data[attribute_name] = attribute.get('content')
|
71
|
+
end
|
72
|
+
|
54
73
|
case attribute_name
|
55
74
|
when /^image$/i
|
56
75
|
images << OpenStruct.new(url: attribute.get('content').to_s)
|
@@ -70,7 +89,15 @@ module OGP
|
|
70
89
|
videos << OpenStruct.new unless videos.last
|
71
90
|
videos.last[Regexp.last_match[1].gsub('-', '_')] = attribute.get('content').to_s
|
72
91
|
else
|
73
|
-
|
92
|
+
begin
|
93
|
+
instance_variable_set("@#{attribute_name}", attribute.get('content'))
|
94
|
+
rescue NameError
|
95
|
+
warn("Some og tag names include colons `:`, such as Spotify song
|
96
|
+
pages (`restrictions:country:allowed`), which will result in a
|
97
|
+
NameError. Please rely on data[attribute_name] instead. Setting
|
98
|
+
top-level instance variables is deprecated and will be removed in
|
99
|
+
the next major version.")
|
100
|
+
end
|
74
101
|
end
|
75
102
|
end
|
76
103
|
end
|
data/lib/ogp/version.rb
CHANGED
data/ogp.gemspec
CHANGED
@@ -22,7 +22,7 @@ Gem::Specification.new do |spec|
|
|
22
22
|
|
23
23
|
spec.add_dependency 'oga', '~> 2.15'
|
24
24
|
|
25
|
-
spec.add_development_dependency 'bundler', '
|
25
|
+
spec.add_development_dependency 'bundler', '>= 1.13'
|
26
26
|
spec.add_development_dependency 'rake', '~> 10.0'
|
27
27
|
spec.add_development_dependency 'rspec', '~> 3.6'
|
28
28
|
spec.add_development_dependency 'rubocop', '~> 0.49.1'
|
@@ -0,0 +1,21 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<meta property="og:title" content="Way Out" />
|
5
|
+
<meta property="og:description" content="Way Out, an album by Waterstrider on Spotify" />
|
6
|
+
<meta property="og:url" content="https://open.spotify.com/album/3NkIlQR6wZwPCQiP1vPjF8" />
|
7
|
+
<meta property="og:image" content="https://i.scdn.co/image/ab67616d0000b273eab5104fe2284f59731dd3f7" />
|
8
|
+
<meta property="og:type" content="music.album" />
|
9
|
+
<meta property="music:musician" content="https://open.spotify.com/artist/731UNhwHMAcSsurgHJxPHC" />
|
10
|
+
<meta property="music:release_date" content="2019-05-10" />
|
11
|
+
<meta property="music:song" content="https://open.spotify.com/track/6bewGDfgcmCjbAE2XHbwCh" />
|
12
|
+
<meta property="music:song:disc" content="1" />
|
13
|
+
<meta property="music:song:track" content="1" />
|
14
|
+
<meta property="og:restrictions:country:allowed" content="AR" />
|
15
|
+
<meta property="og:restrictions:country:allowed" content="AT" />
|
16
|
+
<meta property="og:restrictions:country:allowed" content="BG" />
|
17
|
+
<title></title>
|
18
|
+
</head>
|
19
|
+
<body>
|
20
|
+
</body>
|
21
|
+
</html>
|
data/spec/ogp/open_graph_spec.rb
CHANGED
@@ -141,5 +141,17 @@ describe OGP::OpenGraph do
|
|
141
141
|
expect(open_graph.image.url).to eql('https://www.example.com/image.jpg')
|
142
142
|
end
|
143
143
|
end
|
144
|
+
|
145
|
+
context 'with custom attributes' do
|
146
|
+
it 'should include them to the data hash' do
|
147
|
+
content = File.read("#{File.dirname(__FILE__)}/../fixtures/custom_attributes.html", encoding: 'ASCII-8BIT')
|
148
|
+
open_graph = OGP::OpenGraph.new(content)
|
149
|
+
|
150
|
+
expect(open_graph.title).to eql('Way Out')
|
151
|
+
expect(open_graph.data['title']).to eql(open_graph.title)
|
152
|
+
expect(open_graph.data['restrictions:country:allowed'].size).to eql(3)
|
153
|
+
expect(open_graph.data['restrictions:country:allowed'][0]).to eql('AR')
|
154
|
+
end
|
155
|
+
end
|
144
156
|
end
|
145
157
|
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.4.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: 2019-
|
11
|
+
date: 2019-12-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: oga
|
@@ -28,14 +28,14 @@ dependencies:
|
|
28
28
|
name: bundler
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - "
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '1.13'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - "
|
38
|
+
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '1.13'
|
41
41
|
- !ruby/object:Gem::Dependency
|
@@ -102,6 +102,7 @@ files:
|
|
102
102
|
- lib/ogp/version.rb
|
103
103
|
- ogp.gemspec
|
104
104
|
- spec/fixtures/audio_structured_attributes.html
|
105
|
+
- spec/fixtures/custom_attributes.html
|
105
106
|
- spec/fixtures/i18n_encoding.html
|
106
107
|
- spec/fixtures/image_structured_attributes.html
|
107
108
|
- spec/fixtures/missing_required_attributes.html
|
@@ -137,6 +138,7 @@ specification_version: 4
|
|
137
138
|
summary: Simple Ruby library for parsing Open Graph prototocol information.
|
138
139
|
test_files:
|
139
140
|
- spec/fixtures/audio_structured_attributes.html
|
141
|
+
- spec/fixtures/custom_attributes.html
|
140
142
|
- spec/fixtures/i18n_encoding.html
|
141
143
|
- spec/fixtures/image_structured_attributes.html
|
142
144
|
- spec/fixtures/missing_required_attributes.html
|