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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 1f66071a06238dc6aac14bf94b9c7308c744d87f
4
- data.tar.gz: 96dc74d10a6542551ed70c7e891d9932b4930ca2
2
+ SHA256:
3
+ metadata.gz: a986aa80d954fde7cd758f23b62fa4bc6c6ef564ab06a86b55f8b4980739812e
4
+ data.tar.gz: f2d878d8d1c57665677608e71e6d5f75dcfccf256ea4b625750695bab8740ca1
5
5
  SHA512:
6
- metadata.gz: 670b94bc7fdae7a68eed412e51ea0f8648eeab931ff8b6efafde8522694911959d77ae92c779d5e5d5ce77bf5985f3c70c8276fbf16eda1df97fdde6170de4bb
7
- data.tar.gz: c83c405927fd5b265f1a8cf7fe18cd1b7fffc013f4cdfad091e5aca505a8b758c56980cc476a4c5725b47341c67f12ac335677178efe2b1a5b8b5338beecda7b
6
+ metadata.gz: 00ad8369eb9559cb958b4fd2443c5e09d42a2c03d0ed1d4425ca7247f02d2abc90b66ecb4884a6d11faed122d74a812dbb87e36a273c2c0e8bad63f8dfbd1c87
7
+ data.tar.gz: 32798218b16280ca2cc0e7f58659d04f8b91853935a00646dade439b85e927305cc2a2f4d8e1bc8d5c0ff72cebfc22c29b45a1d18c753b70102ee13db6ec0d54
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ --color
data/CHANGELOG.md ADDED
@@ -0,0 +1,6 @@
1
+ ## Changelog
2
+
3
+ ### 1.1.0
4
+
5
+ - Added rubocop
6
+ - Replaced open-uri by net/http
data/Gemfile CHANGED
@@ -1,5 +1,12 @@
1
+ # frozen_string_literal: true
2
+
1
3
  source 'https://rubygems.org'
2
- ruby '2.3.3'
4
+ ruby ['>= 2.1.0', '<= 2.7.0']
3
5
 
4
6
  gem 'nokogiri'
5
- gem 'rspec'
7
+
8
+ group :development, :test do
9
+ gem 'pry'
10
+ gem 'rspec'
11
+ gem 'rubocop'
12
+ end
data/README.md CHANGED
@@ -1,16 +1,26 @@
1
1
  # MetaInformation
2
+
3
+ [![Gem Version](https://badge.fury.io/rb/meta_information.svg)](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
- # :content=> "https://www.awesome_site.com/assets/awesome_picture.jpg"}]}
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
- MIT License.
49
+
50
+ MIT License.
data/ROADMAP.md ADDED
@@ -0,0 +1,3 @@
1
+ ## ROADMAP
2
+
3
+ - Instead of returing hash, module `MetaInformation` should return struct object as a result. Each node should be a struct with methods to recognize a tag such as `.twitter?`, `.og?`, `.fb?`, '.vk?' (check it by property attr).
@@ -1,74 +1,101 @@
1
- require './lib/meta_information/version'
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'meta_information/version'
2
4
  require 'nokogiri'
3
- require 'open-uri'
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
- class << self
11
- def get_meta(input_url)
12
- return not_valid_url_error unless valid_url?(input_url)
11
+ extend self
13
12
 
14
- document = create_document(input_url)
15
- return nokogiri_error if document == false
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
- meta_hash = create_meta_array(document)
18
- success_hash.merge(all_meta: meta_hash)
19
- end
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
- private
22
-
23
- def create_meta_array(document)
24
- array = []
25
- document.css('meta').each do |node|
26
- if !node['name'].nil?
27
- array.push(
28
- type: 'name',
29
- name: node['name'],
30
- content: node['content']
31
- )
32
- elsif !node['property'].nil?
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
- array
41
- end
39
+ end
42
40
 
43
- def valid_url?(uri)
44
- !!uri.match(/^(https?:\/\/)?([\w\.]+)\.([a-z]{2,6}\.?)(\/[\w\.]*)*\/?$/)
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
- def create_document(input_url)
48
- Nokogiri::HTML(open(input_url))
49
- rescue
50
- false
51
- end
53
+ def valid_url?(uri)
54
+ !(uri =~ URI::DEFAULT_PARSER.make_regexp).nil?
55
+ end
52
56
 
53
- def not_valid_url_error
54
- {
55
- success: false,
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
- def nokogiri_error
61
- {
62
- success: false,
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
- def success_hash
68
- {
69
- succes: 'true',
70
- error: ''
71
- }
72
- end
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
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module MetaInformation
2
- VERSION = '1.0.0'
3
- end
4
+ VERSION = '1.1.0'
5
+ end
@@ -1,15 +1,25 @@
1
- $:.push File.expand_path("../lib", __FILE__)
2
- require "meta_information/version"
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 = '2017-02-26'
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 scan all meta-tags by name or property attributes.'
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("\n")
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
- end
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
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ RSpec.configure do |rspec|
4
+ rspec.shared_context_metadata_behavior = :apply_to_host_groups
5
+ rspec.include_context 'shared stuff', include_shared: true
6
+ end
@@ -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
- <html>
10
- <meta name="description" content="" />
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 'has empty array' do
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
- it 'must be valid' do
52
- expect(MetaInformation.send(:valid_url?, 'http://www.somesite.com')).to be_truthy
53
- expect(MetaInformation.send(:valid_url?, 'https://www.somesite.com')).to be_truthy
54
- expect(MetaInformation.send(:valid_url?, 'https://somesite.com')).to be_truthy
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
- it 'does not valid' do
62
- expect(MetaInformation.send(:valid_url?, 'some_site')).to be_falsey
63
- expect(MetaInformation.send(:valid_url?, 'http\\:wwwsome_site.ru')).to be_falsey
64
- expect(MetaInformation.send(:valid_url?, 'com.some_site')).to be_falsey
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
- success: false,
72
- error: 'url is not valid'
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
- success: false,
79
- error: 'error with parsing a document'
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
- succes: 'true',
86
- error: ''
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.0.0
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: 2017-02-26 00:00:00.000000000 Z
12
- dependencies: []
13
- description: Simple gem for parsing meta information from websites. It scan all meta-tags
14
- by name or property attributes.
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
- - ".ruby-version"
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: '0'
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
- rubyforge_project:
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