meta_information 1.0.0 → 1.1.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/.rspec +1 -0
- data/CHANGELOG.md +6 -0
- data/Gemfile +9 -2
- data/README.md +21 -6
- data/ROADMAP.md +3 -0
- data/lib/meta_information.rb +85 -58
- data/lib/meta_information/version.rb +4 -2
- data/meta_information.gemspec +16 -6
- data/spec/config.rb +6 -0
- data/spec/lib/meta_information_spec.rb +134 -51
- data/spec/shared_stuff.rb +90 -0
- metadata +68 -9
- data/.ruby-version +0 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: a986aa80d954fde7cd758f23b62fa4bc6c6ef564ab06a86b55f8b4980739812e
|
4
|
+
data.tar.gz: f2d878d8d1c57665677608e71e6d5f75dcfccf256ea4b625750695bab8740ca1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 00ad8369eb9559cb958b4fd2443c5e09d42a2c03d0ed1d4425ca7247f02d2abc90b66ecb4884a6d11faed122d74a812dbb87e36a273c2c0e8bad63f8dfbd1c87
|
7
|
+
data.tar.gz: 32798218b16280ca2cc0e7f58659d04f8b91853935a00646dade439b85e927305cc2a2f4d8e1bc8d5c0ff72cebfc22c29b45a1d18c753b70102ee13db6ec0d54
|
data/.rspec
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--color
|
data/CHANGELOG.md
ADDED
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -1,16 +1,26 @@
|
|
1
1
|
# MetaInformation
|
2
|
+
|
3
|
+
[](https://badge.fury.io/rb/meta_information)
|
4
|
+
|
2
5
|
Simple gem for parsing meta information from websites. It scan all meta-tags by name or property attributes.
|
6
|
+
|
3
7
|
## Instalation
|
8
|
+
|
4
9
|
Add this line to your application's Gemfile:
|
10
|
+
|
5
11
|
```ruby
|
6
12
|
gem 'meta_information'
|
7
13
|
```
|
14
|
+
|
8
15
|
Then run `bundle install`
|
9
16
|
Or install it yourself as:
|
17
|
+
|
10
18
|
```sh
|
11
19
|
gem install meta_information
|
12
20
|
```
|
21
|
+
|
13
22
|
## Usage
|
23
|
+
|
14
24
|
```ruby
|
15
25
|
require 'pp'
|
16
26
|
meta = MetaInformation.get_meta('https://www.awesome_site.com/awesome_page')
|
@@ -21,15 +31,20 @@ pp meta
|
|
21
31
|
# :all_meta=>
|
22
32
|
# [{:type=>"name",
|
23
33
|
# :name=>"viewport",
|
34
|
+
# :property=>nil,
|
24
35
|
# :content=>"width=device-width, initial-scale=1.0"},
|
25
|
-
# {:type=>"name", :name=>"description", :content=>"some description"},
|
26
|
-
# {:type=>"name", :name=>"title", :content=>"i am title"},
|
27
|
-
# {:type=>"name", :name=>"og:title", :content=>"some content"},
|
28
|
-
# {:type=>"name", :name=>"og:description", :content=>"some description"},
|
36
|
+
# {:type=>"name", :name=>"description", :property=>nil, :content=>"some description"},
|
37
|
+
# {:type=>"name", :name=>"title", :property=>nil, :content=>"i am title"},
|
38
|
+
# {:type=>"name", :name=>"og:title", :property=>nil, :content=>"some content"},
|
39
|
+
# {:type=>"name", :name=>"og:description", :property=>nil, :content=>"some description"},
|
29
40
|
# {:type=>"name",
|
30
41
|
# :name=>"og:image",
|
31
|
-
# :
|
42
|
+
# :property=>nil,
|
43
|
+
# :content=> "https://www.awesome_site.com/assets/awesome_picture.jpg"}]},
|
44
|
+
# {:type=>"property", :name=>nil, :property=>"fb:app_id", :content=>"1234567890"},
|
32
45
|
###
|
33
46
|
```
|
47
|
+
|
34
48
|
## License
|
35
|
-
|
49
|
+
|
50
|
+
MIT License.
|
data/ROADMAP.md
ADDED
data/lib/meta_information.rb
CHANGED
@@ -1,74 +1,101 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'meta_information/version'
|
2
4
|
require 'nokogiri'
|
3
|
-
require '
|
5
|
+
require 'uri'
|
6
|
+
require 'net/http'
|
4
7
|
|
5
|
-
# MetaInformation - module for scaning meta information
|
6
|
-
# form web page
|
7
|
-
# for usage
|
8
|
+
# MetaInformation - module for scaning meta information from web page
|
8
9
|
# MetaInformation.get_meta('https://some_site.com/some_page')
|
9
10
|
module MetaInformation
|
10
|
-
|
11
|
-
def get_meta(input_url)
|
12
|
-
return not_valid_url_error unless valid_url?(input_url)
|
11
|
+
extend self
|
13
12
|
|
14
|
-
|
15
|
-
|
13
|
+
def get_meta(input_url)
|
14
|
+
return not_valid_url_error unless valid_url?(input_url)
|
15
|
+
return not_valid_url_scheme unless valid_url_scheme?(input_url)
|
16
16
|
|
17
|
-
|
18
|
-
|
19
|
-
|
17
|
+
document = create_document(input_url)
|
18
|
+
return nokogiri_error if document == false
|
19
|
+
|
20
|
+
meta_hash = create_meta_array(document)
|
21
|
+
success_hash.merge(all_meta: meta_hash)
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
20
25
|
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
array.push(
|
34
|
-
type: 'property',
|
35
|
-
property: node['property'],
|
36
|
-
content: node['content']
|
37
|
-
)
|
38
|
-
end
|
26
|
+
# TODO: change to struct
|
27
|
+
def create_meta_array(document)
|
28
|
+
document
|
29
|
+
.css('meta').reject { |node| node_type(node).nil? }
|
30
|
+
.map do |node|
|
31
|
+
{
|
32
|
+
type: node_type(node),
|
33
|
+
name: node['name'],
|
34
|
+
property: node['property'],
|
35
|
+
content: node['content'],
|
36
|
+
itemprop: node['itemprop']
|
37
|
+
}
|
39
38
|
end
|
40
|
-
|
41
|
-
end
|
39
|
+
end
|
42
40
|
|
43
|
-
|
44
|
-
|
41
|
+
def node_type(node)
|
42
|
+
if !node['name'].nil?
|
43
|
+
'name'
|
44
|
+
elsif !node['property'].nil?
|
45
|
+
'property'
|
46
|
+
elsif !node['itemprop'].nil?
|
47
|
+
'itemprop'
|
48
|
+
else
|
49
|
+
nil
|
45
50
|
end
|
51
|
+
end
|
46
52
|
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
false
|
51
|
-
end
|
53
|
+
def valid_url?(uri)
|
54
|
+
!(uri =~ URI::DEFAULT_PARSER.make_regexp).nil?
|
55
|
+
end
|
52
56
|
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
error: 'url is not valid'
|
57
|
-
}
|
58
|
-
end
|
57
|
+
def valid_url_scheme?(input_url)
|
58
|
+
URI(input_url).is_a?(URI::HTTP)
|
59
|
+
end
|
59
60
|
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
error: 'error with parsing a document'
|
64
|
-
}
|
65
|
-
end
|
61
|
+
def create_document(input_url)
|
62
|
+
uri = URI(input_url)
|
63
|
+
res = Net::HTTP.get_response(uri)
|
66
64
|
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
65
|
+
raise 'Response code is not 2xx' if !(res.code.to_i >= 200 && res.code.to_i <= 299)
|
66
|
+
raise 'Response is without body' unless res.class.body_permitted?
|
67
|
+
|
68
|
+
Nokogiri::HTML(res.body)
|
69
|
+
rescue StandardError => e
|
70
|
+
puts e
|
71
|
+
false
|
72
|
+
end
|
73
|
+
|
74
|
+
def not_valid_url_error
|
75
|
+
{
|
76
|
+
success: false,
|
77
|
+
error: 'url is not valid'
|
78
|
+
}
|
79
|
+
end
|
80
|
+
|
81
|
+
def not_valid_url_scheme
|
82
|
+
{
|
83
|
+
success: false,
|
84
|
+
error: 'url must be http(s)'
|
85
|
+
}
|
86
|
+
end
|
87
|
+
|
88
|
+
def nokogiri_error
|
89
|
+
{
|
90
|
+
success: false,
|
91
|
+
error: 'error with parsing a document'
|
92
|
+
}
|
93
|
+
end
|
94
|
+
|
95
|
+
def success_hash
|
96
|
+
{
|
97
|
+
succes: 'true',
|
98
|
+
error: ''
|
99
|
+
}
|
73
100
|
end
|
74
101
|
end
|
data/meta_information.gemspec
CHANGED
@@ -1,15 +1,25 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
$LOAD_PATH.push File.expand_path('lib', __dir__)
|
4
|
+
require 'meta_information/version'
|
3
5
|
|
4
6
|
Gem::Specification.new do |s|
|
7
|
+
s.required_ruby_version = '>= 2.1.0'
|
5
8
|
s.name = 'meta_information'
|
6
9
|
s.version = MetaInformation::VERSION
|
7
|
-
s.date = '
|
10
|
+
s.date = '2021-02-12'
|
8
11
|
s.summary = 'MetaInformation - Simple gem for parsing meta information'
|
9
|
-
s.description = 'Simple gem for parsing meta information from websites. It
|
12
|
+
s.description = 'Simple gem for parsing meta information from websites. It scans all meta-tags by name, itemprop or property attributes.'
|
10
13
|
s.author = 'Vladislav Kopylov'
|
11
14
|
s.email = 'kopylov.vlad@gmail.com'
|
12
|
-
s.files = `git ls-files`.split("\
|
15
|
+
s.files = `git ls-files -z`.split("\x0").reject { |f| f =~ /^bin/ }
|
16
|
+
s.executables = []
|
13
17
|
s.homepage = 'https://github.com/kopylovvlad/meta_information'
|
14
18
|
s.license = 'MIT'
|
15
|
-
|
19
|
+
|
20
|
+
s.add_dependency('nokogiri')
|
21
|
+
|
22
|
+
s.add_development_dependency('pry')
|
23
|
+
s.add_development_dependency('rspec')
|
24
|
+
s.add_development_dependency('rubocop')
|
25
|
+
end
|
data/spec/config.rb
ADDED
@@ -1,38 +1,77 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require './lib/meta_information'
|
4
|
+
require './spec/shared_stuff'
|
5
|
+
require './spec/config'
|
2
6
|
|
3
7
|
RSpec.describe 'MetaInformation' do
|
4
|
-
|
8
|
+
include_context 'shared stuff'
|
9
|
+
|
10
|
+
describe 'get_meta' do
|
11
|
+
it 'should return not_valid_url_error' do
|
12
|
+
allow(MetaInformation).to receive(:valid_url?).and_return(false)
|
13
|
+
result = MetaInformation.get_meta('http://some_url.com')
|
14
|
+
expect(result).to(
|
15
|
+
eq(
|
16
|
+
success: false,
|
17
|
+
error: 'url is not valid'
|
18
|
+
)
|
19
|
+
)
|
20
|
+
end
|
21
|
+
|
22
|
+
it 'should return not_valid_url_scheme_error' do
|
23
|
+
result = MetaInformation.get_meta('ftp://some_url.com')
|
24
|
+
expect(result).to(
|
25
|
+
eq(success: false, error: 'url must be http(s)')
|
26
|
+
)
|
27
|
+
end
|
28
|
+
|
29
|
+
describe 'with mock for valid_url?' do
|
30
|
+
before do
|
31
|
+
allow(MetaInformation).to receive(:valid_url?).and_return(true)
|
32
|
+
end
|
33
|
+
it 'should return nokogiri_error' do
|
34
|
+
allow(MetaInformation).to receive(:create_document).and_return(false)
|
35
|
+
|
36
|
+
result = MetaInformation.get_meta('http://some_url.com')
|
37
|
+
expect(result).to(
|
38
|
+
eq(
|
39
|
+
success: false,
|
40
|
+
error: 'error with parsing a document'
|
41
|
+
)
|
42
|
+
)
|
43
|
+
end
|
44
|
+
|
45
|
+
it 'should return success_hash' do
|
46
|
+
allow(MetaInformation).to(
|
47
|
+
receive(:create_document).and_return(
|
48
|
+
Nokogiri::HTML(default_html)
|
49
|
+
)
|
50
|
+
)
|
51
|
+
|
52
|
+
result = MetaInformation.get_meta('http://some_url.com')
|
53
|
+
expect(result).to(
|
54
|
+
eq(
|
55
|
+
succes: 'true',
|
56
|
+
error: '',
|
57
|
+
all_meta: default_html_meta_array
|
58
|
+
)
|
59
|
+
)
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
5
64
|
describe 'create_meta_array' do
|
6
65
|
describe 'we have meta' do
|
7
66
|
it 'must create array' do
|
8
|
-
document = Nokogiri::HTML(
|
9
|
-
|
10
|
-
|
11
|
-
<meta name="title" content="some title" />
|
12
|
-
<meta property="author" content="Bob" />
|
13
|
-
<meta property="og:title" content="og_title" />
|
14
|
-
<meta property="twitter:image" content="http://some_host.com/some_path" />
|
15
|
-
<meta property="og:locale" content="ru_RU" />
|
16
|
-
<meta property="al:ios:app_store_id" content="12345678900" />
|
17
|
-
<body>
|
18
|
-
<h1>Mr. Belvedere Fan Club</h1>
|
19
|
-
</body>
|
20
|
-
</html>
|
21
|
-
')
|
22
|
-
expect(MetaInformation.send(:create_meta_array, document)).to eq([
|
23
|
-
{ type: 'name', name: 'description', content: '' },
|
24
|
-
{ type: 'name', name: 'title', content: 'some title' },
|
25
|
-
{ type: 'property', property: 'author', content: 'Bob' },
|
26
|
-
{ type: 'property', property: 'og:title', content: 'og_title' },
|
27
|
-
{ type: 'property', property: 'twitter:image', content: 'http://some_host.com/some_path' },
|
28
|
-
{ type: 'property', property: 'og:locale', content: 'ru_RU' },
|
29
|
-
{ type: 'property', property: 'al:ios:app_store_id', content: '12345678900' }
|
30
|
-
])
|
67
|
+
document = Nokogiri::HTML(default_html)
|
68
|
+
result = MetaInformation.send(:create_meta_array, document)
|
69
|
+
expect(result).to eq(default_html_meta_array)
|
31
70
|
end
|
32
71
|
end
|
33
|
-
|
34
|
-
describe 'without meta' do
|
35
|
-
it '
|
72
|
+
|
73
|
+
describe 'without meta has empty array' do
|
74
|
+
it 'if have not mate' do
|
36
75
|
first_document = Nokogiri::HTML('
|
37
76
|
<html>
|
38
77
|
<body>
|
@@ -40,51 +79,95 @@ RSpec.describe 'MetaInformation' do
|
|
40
79
|
</body>
|
41
80
|
</html>
|
42
81
|
')
|
43
|
-
second_document = Nokogiri::HTML('')
|
44
82
|
expect(MetaInformation.send(:create_meta_array, first_document)).to eq([])
|
83
|
+
end
|
84
|
+
|
85
|
+
it 'if html is empty' do
|
86
|
+
second_document = Nokogiri::HTML('')
|
45
87
|
expect(MetaInformation.send(:create_meta_array, second_document)).to eq([])
|
46
88
|
end
|
47
89
|
end
|
48
90
|
end
|
49
91
|
|
50
92
|
describe 'valid_url?' do
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
expect(MetaInformation.send(:valid_url?, 'wwwsome_site.ru')).to be_truthy
|
56
|
-
expect(MetaInformation.send(:valid_url?, 'https://somesite.com/some_page')).to be_truthy
|
57
|
-
expect(MetaInformation.send(:valid_url?, 'https://somesite.com/some_page/page')).to be_truthy
|
58
|
-
expect(MetaInformation.send(:valid_url?, 'https://somesite.com.uk/some_page')).to be_truthy
|
93
|
+
def self.validate_valid_url(url)
|
94
|
+
it "#{url} must be valid" do
|
95
|
+
expect(MetaInformation.send(:valid_url?, url)).to be_truthy
|
96
|
+
end
|
59
97
|
end
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
98
|
+
|
99
|
+
validate_valid_url('http://www.somesite.com')
|
100
|
+
validate_valid_url('https://www.somesite.com')
|
101
|
+
validate_valid_url('https://somesite.com')
|
102
|
+
validate_valid_url('http://www.siteforadmin.ru')
|
103
|
+
validate_valid_url('https://somesite.com/some_page')
|
104
|
+
validate_valid_url('https://somesite.com/some_page/page')
|
105
|
+
validate_valid_url('http://somesite.com/some_page/2012/12/page/another_page')
|
106
|
+
validate_valid_url('http://somesite.com/2012/12/page-page-page')
|
107
|
+
validate_valid_url('https://somesite.com.uk/some_page')
|
108
|
+
validate_valid_url('https://meduza.io/short/2017/03/25/v-londone-proshel-mnogotysyachnyy-marsh-protiv-brekzita-fotografiya')
|
109
|
+
|
110
|
+
def self.validate_invalid_url(url)
|
111
|
+
it "#{url} must be invalid" do
|
112
|
+
expect(MetaInformation.send(:valid_url?, url)).to be_falsey
|
113
|
+
end
|
65
114
|
end
|
115
|
+
|
116
|
+
validate_invalid_url('some_site')
|
117
|
+
validate_invalid_url('http\\:wwwsome_site.ru')
|
118
|
+
validate_invalid_url('com.some_site')
|
66
119
|
end
|
67
|
-
|
120
|
+
|
68
121
|
describe 'private hash equal' do
|
69
122
|
it 'not_valid_url_error hash' do
|
70
123
|
expect(MetaInformation.send(:not_valid_url_error)).to eq({
|
71
|
-
|
72
|
-
|
73
|
-
|
124
|
+
success: false,
|
125
|
+
error: 'url is not valid'
|
126
|
+
})
|
74
127
|
end
|
75
128
|
|
76
129
|
it 'nokogiri_error hash' do
|
77
130
|
expect(MetaInformation.send(:nokogiri_error)).to eq({
|
78
|
-
|
79
|
-
|
80
|
-
|
131
|
+
success: false,
|
132
|
+
error: 'error with parsing a document'
|
133
|
+
})
|
81
134
|
end
|
82
135
|
|
83
136
|
it 'success_hash hash' do
|
84
137
|
expect(MetaInformation.send(:success_hash)).to eq({
|
85
|
-
|
86
|
-
|
87
|
-
|
138
|
+
succes: 'true',
|
139
|
+
error: ''
|
140
|
+
})
|
141
|
+
end
|
142
|
+
end
|
143
|
+
|
144
|
+
describe 'node_type' do
|
145
|
+
it 'must return name' do
|
146
|
+
document = Nokogiri::HTML('<meta name="description" content="" />')
|
147
|
+
node = document.css('meta').first
|
148
|
+
expect(MetaInformation.send(:node_type, node)).to eq('name')
|
149
|
+
end
|
150
|
+
|
151
|
+
it 'must return property' do
|
152
|
+
document = Nokogiri::HTML(
|
153
|
+
'<meta property="og:title" content="og_title" />'
|
154
|
+
)
|
155
|
+
node = document.css('meta').first
|
156
|
+
expect(MetaInformation.send(:node_type, node)).to eq('property')
|
157
|
+
end
|
158
|
+
|
159
|
+
it 'must return property' do
|
160
|
+
document = Nokogiri::HTML(
|
161
|
+
'<meta itemprop="description" content="description" />'
|
162
|
+
)
|
163
|
+
node = document.css('meta').first
|
164
|
+
expect(MetaInformation.send(:node_type, node)).to eq('itemprop')
|
165
|
+
end
|
166
|
+
|
167
|
+
it 'must return nil' do
|
168
|
+
document = Nokogiri::HTML('<meta content="og_title" />')
|
169
|
+
node = document.css('meta').first
|
170
|
+
expect(MetaInformation.send(:node_type, node)).to eq(nil)
|
88
171
|
end
|
89
172
|
end
|
90
173
|
end
|
@@ -0,0 +1,90 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
RSpec.shared_context 'shared stuff', shared_context: :metadata do
|
4
|
+
let(:default_html) do
|
5
|
+
'
|
6
|
+
<html>
|
7
|
+
<meta name="description" content="" />
|
8
|
+
<meta name="title" content="some title" />
|
9
|
+
<meta property="author" content="Bob" />
|
10
|
+
<meta property="og:title" content="og_title" />
|
11
|
+
<meta property="twitter:image" content="http://some_host.com/some_path" />
|
12
|
+
<meta property="og:locale" content="ru_RU" />
|
13
|
+
<meta property="al:ios:app_store_id" content="12345678900" />
|
14
|
+
<meta itemprop="name" content="site name"/>
|
15
|
+
<meta itemprop="description" content="site description"/>
|
16
|
+
<body>
|
17
|
+
<h1>Mr. Belvedere Fan Club</h1>
|
18
|
+
</body>
|
19
|
+
</html>
|
20
|
+
'
|
21
|
+
end
|
22
|
+
|
23
|
+
let(:default_html_meta_array) do
|
24
|
+
[
|
25
|
+
{
|
26
|
+
type: 'name',
|
27
|
+
name: 'description',
|
28
|
+
property: nil,
|
29
|
+
itemprop: nil,
|
30
|
+
content: ''
|
31
|
+
},
|
32
|
+
{
|
33
|
+
type: 'name',
|
34
|
+
name: 'title',
|
35
|
+
property: nil,
|
36
|
+
itemprop: nil,
|
37
|
+
content: 'some title'
|
38
|
+
},
|
39
|
+
{
|
40
|
+
type: 'property',
|
41
|
+
name: nil,
|
42
|
+
property: 'author',
|
43
|
+
itemprop: nil,
|
44
|
+
content: 'Bob'
|
45
|
+
},
|
46
|
+
{
|
47
|
+
type: 'property',
|
48
|
+
name: nil,
|
49
|
+
property: 'og:title',
|
50
|
+
itemprop: nil,
|
51
|
+
content: 'og_title'
|
52
|
+
},
|
53
|
+
{
|
54
|
+
type: 'property',
|
55
|
+
name: nil,
|
56
|
+
property: 'twitter:image',
|
57
|
+
itemprop: nil,
|
58
|
+
content: 'http://some_host.com/some_path'
|
59
|
+
},
|
60
|
+
{
|
61
|
+
type: 'property',
|
62
|
+
name: nil,
|
63
|
+
property: 'og:locale',
|
64
|
+
itemprop: nil,
|
65
|
+
content: 'ru_RU'
|
66
|
+
},
|
67
|
+
{
|
68
|
+
type: 'property',
|
69
|
+
name: nil,
|
70
|
+
property: 'al:ios:app_store_id',
|
71
|
+
itemprop: nil,
|
72
|
+
content: '12345678900'
|
73
|
+
},
|
74
|
+
{
|
75
|
+
type: 'itemprop',
|
76
|
+
name: nil,
|
77
|
+
property: nil,
|
78
|
+
itemprop: 'name',
|
79
|
+
content: 'site name'
|
80
|
+
},
|
81
|
+
{
|
82
|
+
type: 'itemprop',
|
83
|
+
name: nil,
|
84
|
+
property: nil,
|
85
|
+
itemprop: 'description',
|
86
|
+
content: 'site description'
|
87
|
+
}
|
88
|
+
]
|
89
|
+
end
|
90
|
+
end
|
metadata
CHANGED
@@ -1,31 +1,91 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: meta_information
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Vladislav Kopylov
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
12
|
-
dependencies:
|
13
|
-
|
14
|
-
|
11
|
+
date: 2021-02-12 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: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: pry
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rspec
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rubocop
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
description: Simple gem for parsing meta information from websites. It scans all meta-tags
|
70
|
+
by name, itemprop or property attributes.
|
15
71
|
email: kopylov.vlad@gmail.com
|
16
72
|
executables: []
|
17
73
|
extensions: []
|
18
74
|
extra_rdoc_files: []
|
19
75
|
files:
|
20
76
|
- ".gitignore"
|
21
|
-
- ".
|
77
|
+
- ".rspec"
|
78
|
+
- CHANGELOG.md
|
22
79
|
- Gemfile
|
23
80
|
- LICENSE.txt
|
24
81
|
- README.md
|
82
|
+
- ROADMAP.md
|
25
83
|
- lib/meta_information.rb
|
26
84
|
- lib/meta_information/version.rb
|
27
85
|
- meta_information.gemspec
|
86
|
+
- spec/config.rb
|
28
87
|
- spec/lib/meta_information_spec.rb
|
88
|
+
- spec/shared_stuff.rb
|
29
89
|
homepage: https://github.com/kopylovvlad/meta_information
|
30
90
|
licenses:
|
31
91
|
- MIT
|
@@ -38,15 +98,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
38
98
|
requirements:
|
39
99
|
- - ">="
|
40
100
|
- !ruby/object:Gem::Version
|
41
|
-
version:
|
101
|
+
version: 2.1.0
|
42
102
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
43
103
|
requirements:
|
44
104
|
- - ">="
|
45
105
|
- !ruby/object:Gem::Version
|
46
106
|
version: '0'
|
47
107
|
requirements: []
|
48
|
-
|
49
|
-
rubygems_version: 2.6.10
|
108
|
+
rubygems_version: 3.1.2
|
50
109
|
signing_key:
|
51
110
|
specification_version: 4
|
52
111
|
summary: MetaInformation - Simple gem for parsing meta information
|
data/.ruby-version
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
ruby-2.3.3
|