raspar 0.0.1 → 0.0.2

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
2
  SHA1:
3
- metadata.gz: df5341823f5ad794338001c6a0bbf53de1ac4089
4
- data.tar.gz: 540306d13e95a15312ba517fbc470fa136270bf0
3
+ metadata.gz: 144d5399e4105ea847e8d5441d80e15f022d2a8d
4
+ data.tar.gz: f73462c4d5be73a4f189cc430a539b2d7cd37577
5
5
  SHA512:
6
- metadata.gz: d3966a090724b5435ba847c738b59f73d5fd23f59555db20b0317297759d0084032071bdf46cfba0171d84d7716080da09fbd58e8a56003bb4124ee3fa603cbc
7
- data.tar.gz: 9e169aff0a96dc1f6b7ccdf8e9e92fd8c8d4ae4d2543fbae983b5fa148a91c448577b2117cde2164758432abc5ddabd4e987ffc974936024b411faf686fb8cb6
6
+ metadata.gz: a9b42d385112c7da047ba39a4bb2202ad4ded4767a6c510b526ab61bbf30420cf3e8ce9f9af8e00e5bbb81066605456ea805d4385863936cfae29508792cd499
7
+ data.tar.gz: 9588cf43acef8472bb0a9493c1dc364a99721401c0c5e55a13ee9fe2035a76d2eb01e536a29879a29a3f0e85c112ea50b8b409bcb34456fd69ef1bde4774b18f
data/.gitignore CHANGED
@@ -6,3 +6,7 @@ pkg/*
6
6
  1.html
7
7
  test.rn
8
8
  *.DS_Store
9
+ /coverage
10
+ test.rb
11
+ x.rb
12
+ /tmp
data/README.md CHANGED
@@ -23,16 +23,17 @@ And then execute:
23
23
  result = Rapsar.parse(url, html) #This will return parsed result object array.
24
24
 
25
25
  #Result
26
- [
26
+ { :products => [
27
27
  #<Raspar::Result:0x007ffc91e4d640
28
28
  @attrs={:name=>"Test1", :price=>"10", :image=>"1", :desc=>"Description"},
29
29
  @domain="example.com",
30
- @name=:product>,
30
+ @name=:products>,
31
31
  #<Raspar::Result:0x007ffc91e57be0
32
32
  @attrs={:name=>"Test2", :price=>"20", :image=>"2", :desc=>"Description"},
33
33
  @domain="example.com",
34
- @name=:product>
35
- ]
34
+ @name=:products>
35
+ ]
36
+ }
36
37
 
37
38
  ```
38
39
 
@@ -1,5 +1,6 @@
1
- source :rubygems
1
+ source 'https://rubygems.org'
2
2
 
3
- gem 'raspar', :path => "../"
3
+ #gem 'raspar', :path => "../"
4
4
  #gem 'raspar', :git => 'git@github.com:lemig/raspar.git'
5
+ gem 'raspar'
5
6
  gem 'nokogiri'
@@ -0,0 +1,30 @@
1
+ require 'rubygems'
2
+ require 'rest_client'
3
+ require 'bundler/setup'
4
+ require 'raspar'
5
+ require 'pp'
6
+
7
+ class BestBuy
8
+ include Raspar
9
+
10
+ domain 'www.bestbuy.com'
11
+
12
+ collection :products, '.hproduct' do
13
+ attr :image, '.image-col img', prop: 'src'
14
+ attr :name, '.info-main .name'
15
+ attr :price, 'span[itemprop="price"]'
16
+ attr :sku, '.sku'
17
+ attr :description, '.product-short-description li', as: :array
18
+ attr :rating, 'span[itemprop="ratingValue"]', eval: ->(text, ele){ text.to_f }
19
+ end
20
+
21
+ end
22
+
23
+ url = ARGV[0] || "http://www.bestbuy.com/site/promo/htc-one-offer-118429"
24
+ p url
25
+ page = RestClient.get(url).to_str
26
+
27
+ Raspar.parse(url, page).each do |product|
28
+ pp product
29
+ p "*"*40
30
+ end
@@ -1,10 +1,10 @@
1
1
  require 'rubygems'
2
+ require 'rest_client'
2
3
  require 'bundler/setup'
3
- require 'open-uri'
4
4
  require 'raspar'
5
5
  require 'pp'
6
6
 
7
- class CCode
7
+ class CountryCode
8
8
  include Raspar
9
9
 
10
10
  domain 'http://www.exchange-rate.com'
@@ -17,6 +17,6 @@ class CCode
17
17
  end
18
18
 
19
19
  url = 'http://www.exchange-rate.com/currency-list.html'
20
- page = open(url).read
20
+ page = RestClient.get(url).to_str
21
21
 
22
22
  Raspar.parse(url, page).each {|i| pp i }
@@ -1,6 +1,6 @@
1
1
  require 'rubygems'
2
+ require 'rest_client'
2
3
  require 'bundler/setup'
3
- require 'open-uri'
4
4
  require 'raspar'
5
5
  require 'pp'
6
6
 
@@ -16,13 +16,12 @@ class Leguide
16
16
  attr :name, '.block_bpu_feature .p b'
17
17
  attr :specifications, '#page2', :eval => :build_specification
18
18
 
19
- collection :product, '.offers_list li' do
20
- attr :alt_name, '.gopt.offer.t'
21
- attr :image, '.lg_photo img', :prop => 'src'
22
- attr :price, '.price .euro.gopt'
23
- attr :orignal_price, '.price .barre'
19
+ collection :product, '.offers_item' do
20
+ attr :alt_name, '.gopt.l'
21
+ attr :image, '.lg_photo img, .img_container img', :prop => 'src'
22
+ attr :price, '.gopt .prices'
23
+ attr :orignal_price, '.gopt.old_price'
24
24
  attr :desc, '.gopt.description,.info .description'
25
- attr :vendor, '.name a'
26
25
  attr :availability, '.av', :prop => 'data-value', :eval => DATA_PROC
27
26
  attr :delivery_time, '.dv', :prop => 'data-value', :eval => DATA_PROC
28
27
  attr :shipping_price, '.delivery.gopt', :eval => SHIPPING_PROC
@@ -44,11 +43,11 @@ class Leguide
44
43
 
45
44
  end
46
45
 
47
- url = 'http://www.leguide.com/sb/bp/5010500/hotpoint_ariston/ECO9F_149_FRS/55743410.htm'
48
46
  url = 'http://www.leguide.com/electromenager.htm'
47
+ url = ARGV[0] || url
49
48
  p ARGV[0] || url
50
- #page = open(ARGV[0] || url).read().gsub(/[[:cntrl:]@]/, '')
51
- page = open(ARGV[0] || url).read()
49
+
50
+ page = RestClient.get(url).to_str
52
51
 
53
52
  Raspar.parse(url, page).each do |o|
54
53
  pp o
@@ -1,6 +1,6 @@
1
1
  require 'rubygems'
2
+ require 'rest_client'
2
3
  require 'bundler/setup'
3
- require 'open-uri'
4
4
  require 'raspar'
5
5
  require 'pp'
6
6
 
@@ -38,13 +38,9 @@ selector_map = {
38
38
  :select => '.offers_list li',
39
39
  :attrs => {
40
40
  :image => { :select => 'img', :prop => 'src'},
41
- :price => { :select => '.price .euro.gopt', :eval => :parse_price},
42
- :orignal_price => { :select => '.price .barre', :eval => :parse_price},
41
+ :price => { :select => '.gopt .prices', :eval => :parse_price},
43
42
  :desc => { :select => '.gopt.description,.info .description'},
44
43
  :vendor => { :select => '.name a' },
45
- :availability => { :select => '.av', :prop => 'data-value', :eval => :data_attr_parse},
46
- :delivery_time => { :select => '.dv', :prop => 'data-value', :eval => :data_attr_parse},
47
- :shipping_price => { :select => '.delivery.gopt'}
48
44
  }
49
45
  }
50
46
  }
@@ -52,8 +48,9 @@ selector_map = {
52
48
 
53
49
  Raspar.add(domain, selector_map, ParserHelper)
54
50
 
55
- url = 'http://www.leguide.com/sb/bp/5010500/hotpoint_ariston/ECO9F_149_FRS/55743410.htm'
56
- page = open(url).read()
51
+ url = 'http://www.leguide.com/electromenager.htm'
52
+ p url
53
+ page = RestClient.get(url).to_str
57
54
 
58
55
  Raspar.parse(url, page).each do |i|
59
56
  pp i
@@ -0,0 +1,116 @@
1
+ require 'rubygems'
2
+ require 'bundler/setup'
3
+ require 'raspar'
4
+ require 'pp'
5
+
6
+ FAKE_PAGE = %q{
7
+ <!DOCTYPE html>
8
+ <html>
9
+ <body>
10
+
11
+ <span class="desc">Description</span>
12
+ <ul class="specs">
13
+ <li>Spec 1</li>
14
+ <li>Spec 2</li>
15
+ <li>Spec 3</li>
16
+ </ul>
17
+
18
+ <div>
19
+ <img src="1">
20
+ <span>Test1</span>
21
+ <span class="price">10</span>
22
+ </div>
23
+
24
+ <div>
25
+ <img src="2">
26
+ <span>Test2</span>
27
+ <span class="price">20</span>
28
+ </div>
29
+
30
+ <span class="second">
31
+ <img src="3">
32
+ <span>Test3</span>
33
+ <span class="price">30</span>
34
+ </span>
35
+
36
+ <div class="offer">
37
+ <span class="name">First Offer</span>
38
+ <span class="percentage">10% off</span>
39
+ </div>
40
+
41
+ </body>
42
+ </html>
43
+ }
44
+
45
+ class SampleParser
46
+ include Raspar
47
+
48
+ domain 'http://sample.com'
49
+
50
+ attr :desc, '.desc', :eval => :full_desc
51
+ attr :specs, '.specs li', :as => :array, :eval => :format_specs
52
+
53
+ collection :product, 'div,span.second' do
54
+ attr :image, 'img', :attr => 'src'
55
+ attr :image_url, 'img', :attr => 'src', :eval => :make_image_url
56
+ attr :name, 'span:first, .name', :eval => :full_name
57
+ attr :price, '.price', :eval => Proc.new{|i| i.to_i}
58
+ attr :all_text
59
+ attr :price_map do |text, ele|
60
+ val = ele.search('span').collect{|s| s.content.strip}
61
+ {val[0] => val[1].to_f}
62
+ end
63
+ end
64
+
65
+ collection :offer, '.offer' do
66
+ attr :name, '.name'
67
+ attr :percentage, '.percentage'
68
+ end
69
+
70
+ def full_name(val, ele)
71
+ "Full Name: #{val}"
72
+ end
73
+
74
+ def name_price(val, ele)
75
+ val = ele.search('span').collect{|s| s.content.strip}
76
+ {val[0] => val[1].to_f}
77
+ end
78
+
79
+ def make_image_url(path, ele)
80
+ self.class.absolute_url(path)
81
+ end
82
+
83
+ def full_desc(text, ele)
84
+ "#{text} full desc"
85
+ end
86
+
87
+ def format_specs(text, ele)
88
+ text.downcase
89
+ end
90
+
91
+ end
92
+
93
+ ##pp SampleParser.attrs
94
+ pp Raspar.parse('http://sample.com', FAKE_PAGE)
95
+
96
+
97
+ selector_map = {
98
+ :common_attrs => {
99
+ :desc => {:select => '.desc'}
100
+ },
101
+ :collections =>{
102
+ :product => {
103
+ :select => 'div, span.second',
104
+ :attrs => {
105
+ :name => { :select => 'span:first'},
106
+ :price => { :select => 'span.price'},
107
+ :image => { :select => 'img', :attr => 'src'}
108
+ }
109
+ }
110
+ }
111
+ }
112
+
113
+ @site = 'http://dynmaicparser.com'
114
+ @dynmaic_parser = Raspar.add(@site, selector_map)
115
+ pp @dynmaic_parser.attrs
116
+ pp Raspar.parse(@site, FAKE_PAGE)
@@ -55,7 +55,7 @@ module Raspar
55
55
  def parse(url, html)
56
56
  host = URI(url).host
57
57
  if @parsers[host]
58
- @parsers[host].parse(html)
58
+ @parsers[host].parse(html).group_by(&:name)
59
59
  else
60
60
  puts "No parser define for #{host}"
61
61
  nil
@@ -83,8 +83,7 @@ module Raspar
83
83
  klass.domain(url)
84
84
  klass.class_exec(&block) if block_given?
85
85
 
86
- klass_name = 'R' + klass_name if Object.const_defined?(klass_name)
87
- Object.const_set(klass_name, klass)
86
+ Raspar.const_set(klass_name, klass)
88
87
  end
89
88
 
90
89
  end
@@ -50,7 +50,7 @@ module Raspar
50
50
  @collections[collection_name] = { :select => select, :attrs => {} }
51
51
 
52
52
  @_current_container_ = collection_name
53
- yield
53
+ yield if block_given?
54
54
  @_current_container_ = nil
55
55
  end
56
56
 
@@ -1,3 +1,3 @@
1
1
  module Raspar
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
@@ -19,5 +19,5 @@ Gem::Specification.new do |s|
19
19
  s.require_paths = ["lib"]
20
20
 
21
21
  s.add_development_dependency "rspec"
22
- s.add_dependency "nokogiri", "~> 1.5.5"
22
+ s.add_dependency "nokogiri", ">= 1.5.5"
23
23
  end
@@ -8,7 +8,7 @@ describe 'Add Parser' do
8
8
  Raspar.add(@site) do
9
9
  attr :desc, '.desc', :common => true
10
10
 
11
- collection :product, '.item,span.second' do
11
+ collection :products, '.item,span.second' do
12
12
  attr :name, 'span:first, .name', :eval => :full_name
13
13
  attr :price, '.price', :eval => Proc.new{|i| i.to_i}
14
14
  end
@@ -27,29 +27,26 @@ describe 'Add Parser' do
27
27
  end
28
28
 
29
29
  it 'should register parser and parse data' do
30
- Raspar.parsers.should include({@domain => @parser_class})
30
+ expect(Raspar.parsers).to include({@domain => @parser_class})
31
31
  end
32
32
 
33
33
  it "should have info" do
34
- @parser_class.info.should == {
34
+ expect(@parser_class.info).to eq({
35
35
  :domain => @domain,
36
- :collections => [:product],
36
+ :collections => [:products],
37
37
  :common_attrs => [:desc]
38
- }
38
+ })
39
39
  end
40
40
 
41
41
  it "should parse html and create object" do
42
42
  parsed_objs = Raspar.parse(@site, FAKE_PAGE)
43
43
 
44
- parsed_objs.length.should == 4
45
-
46
- parsed_objs.count{|o| o.name == :product}.should == 4
47
-
44
+ expect(parsed_objs[:products].length).to eq(4)
48
45
  count = 1
49
- parsed_objs.select{|o| o.name == :product}.each do |o|
50
- o[:name].should == "Full Name: Test#{count}"
51
- o[:price].should == (count * 10)
52
- o[:desc].should == "Description"
46
+ parsed_objs[:products].each do |o|
47
+ expect(o[:name]).to eq("Full Name: Test#{count}")
48
+ expect(o[:price]).to eq(count * 10)
49
+ expect(o[:desc]).to eq("Description")
53
50
 
54
51
  count = count + 1
55
52
  end
@@ -15,7 +15,7 @@ module Raspar
15
15
  :desc => {:select => '.desc'}
16
16
  },
17
17
  :collections =>{
18
- :product => {
18
+ :products => {
19
19
  :select => 'div.item, span.second',
20
20
  :attrs => {
21
21
  :name => { :select => 'span:first'},
@@ -33,9 +33,9 @@ module Raspar
33
33
  describe '#onload' do
34
34
 
35
35
  it "should register DynamicParser to Raspar parser list" do
36
- Raspar.parsers[@domain].class.should == Raspar::DynamicParser
36
+ expect(Raspar.parsers[@domain].class).to eq(Raspar::DynamicParser)
37
37
 
38
- @dynmaic_parser.domain.should == @domain
38
+ expect(@dynmaic_parser.domain).to eq(@domain)
39
39
  end
40
40
 
41
41
  end
@@ -44,28 +44,28 @@ module Raspar
44
44
 
45
45
  it "should parse html and create object" do
46
46
  parsed_objs = Raspar.parse(@site, FAKE_PAGE)
47
- parsed_objs.length.should == 4
47
+ parsed_objs[:products] == 4
48
48
 
49
49
  count = 1
50
- parsed_objs.each do |o|
51
- o.class.should == Raspar::Result
50
+ parsed_objs[:products].each do |o|
51
+ expect(o.class).to eq(Raspar::Result)
52
52
 
53
- o[:name].should == "Test#{count}"
54
- o[:image].should == count.to_s
53
+ expect(o[:name]).to eq("Test#{count}")
54
+ expect(o[:image]).to eq(count.to_s)
55
55
 
56
56
  #Price should eval using proc given in option which convert string value
57
57
  #to integer
58
- o[:price].should == (count * 10).to_s
58
+ expect(o[:price]).to eq((count * 10).to_s)
59
59
 
60
60
  #External Field check
61
- o[:desc].should == "Description"
61
+ expect(o[:desc]).to eq("Description")
62
62
  count = count + 1
63
63
  end
64
64
 
65
65
  end
66
66
 
67
67
  it 'should return absoulte url' do
68
- @dynmaic_parser.absolute_url('/test').should == @site + '/test'
68
+ expect(@dynmaic_parser.absolute_url('/test')).to eq(@site + '/test')
69
69
  end
70
70
 
71
71
  end
@@ -17,21 +17,21 @@ module Raspar
17
17
  describe 'onload' do
18
18
 
19
19
  it "should register SampleParser to Raspar parser list" do
20
- Raspar.parsers.should include({@domain => SampleParser})
20
+ expect(Raspar.parsers).to include({@domain => SampleParser})
21
21
 
22
- SampleParser.domain.should == @domain
22
+ expect(SampleParser.domain).to eq(@domain)
23
23
  end
24
24
 
25
25
  it 'should return absoulte url' do
26
- SampleParser.absolute_url('/test').should == @site + '/test'
26
+ expect(SampleParser.absolute_url('/test')).to eq(@site + '/test')
27
27
  end
28
28
 
29
29
  it "should have info" do
30
- SampleParser.info.should == {
30
+ expect(SampleParser.info).to eq({
31
31
  :domain => @domain,
32
- :collections => [:product, :offer],
32
+ :collections => [:products, :offers, :related_products],
33
33
  :common_attrs => [:desc, :specs]
34
- }
34
+ })
35
35
  end
36
36
 
37
37
  it "should not define accessor if options not contail :selector" do
@@ -46,36 +46,37 @@ module Raspar
46
46
  parsed_objs = Raspar.parse(@site, FAKE_PAGE)
47
47
 
48
48
  #Total parse objects
49
- parsed_objs.length.should == 5
49
+ expect(parsed_objs.keys.length).to eq(3)
50
50
 
51
- parsed_objs.count{|o| o.name == :product}.should == 4
52
- parsed_objs.count{|o| o.name == :offer}.should == 1
51
+ expect(parsed_objs[:products].length).to eq(4)
52
+ expect(parsed_objs[:offers].length).to eq(1)
53
+ expect(parsed_objs[:related_products].length).to eq(1)
53
54
 
54
55
  count = 1
55
- parsed_objs.select{|o| o.name == :product}.each do |o|
56
- o[:name].should == "Full Name: Test#{count}"
57
- o[:image].should == count.to_s
56
+ parsed_objs[:products].each do |o|
57
+ expect(o[:name]).to eq("Full Name: Test#{count}")
58
+ expect(o[:image]).to eq(count.to_s)
58
59
 
59
60
  #Price should eval using proc given in option which convert string value
60
61
  #to integer
61
- o[:price].should == (count * 10)
62
+ expect(o[:price]).to eq(count * 10)
62
63
 
63
64
  #External Field check
64
- o[:desc].should == "Description is full desc"
65
+ expect(o[:desc]).to eq("Description is full desc")
65
66
 
66
67
  #self selector
67
- o[:all_text].should == "Test#{count}\n #{count*10}"
68
+ expect(o[:all_text]).to eq("Test#{count}\n #{count*10}")
68
69
 
69
- o[:price_map].should == {"Test#{count}" => (count*10).to_f}
70
+ expect(o[:price_map]).to eq({"Test#{count}" => (count*10).to_f})
70
71
 
71
- o[:specs].should == ['spec 1', 'spec 2', 'spec 3']
72
+ expect(o[:specs]).to eq(['spec 1', 'spec 2', 'spec 3'])
72
73
 
73
74
  count = count + 1
74
75
  end
75
76
 
76
- parsed_objs.select{|o| o.name == :offer}.each do |o|
77
- o[:name].should == 'First Offer'
78
- o[:percentage].should == '10% off'
77
+ parsed_objs[:offers].each do |o|
78
+ expect(o[:name]).to eq('First Offer')
79
+ expect(o[:percentage]).to eq('10% off')
79
80
  end
80
81
 
81
82
  end
@@ -9,16 +9,16 @@ describe Raspar do
9
9
  end
10
10
 
11
11
  it "should add domain to register parser list" do
12
- Raspar.register(@site, TestParser).should == @host
13
- Raspar.parsers.should include({@host => TestParser})
14
- Raspar.parsers.size.should > 0
12
+ expect(Raspar.register(@site, TestParser)).to eq(@host)
13
+ expect(Raspar.parsers).to include({@host => TestParser})
14
+ expect(Raspar.parsers.size).to be > 0
15
15
  end
16
16
 
17
17
  it "should clear registered domains" do
18
18
  Raspar.register(@site, TestParser)
19
19
  Raspar.clear_parser_list
20
20
 
21
- Raspar.parsers.size.should == 0
21
+ expect(Raspar.parsers.size).to eq(0)
22
22
  end
23
23
 
24
24
  it "should able to remove parser from the registered list" do
@@ -27,7 +27,7 @@ describe Raspar do
27
27
 
28
28
  Raspar.remove(@site)
29
29
 
30
- Raspar.parsers.should_not include(@host)
30
+ expect(Raspar.parsers).not_to include(@host)
31
31
  end
32
32
  end
33
33
 
@@ -6,7 +6,7 @@ class SampleParser
6
6
  attr :desc, '.desc', :common => true, :eval => :full_desc
7
7
  attr :specs, '.specs li', :common => true, :as => :array, :eval => :format_specs
8
8
 
9
- collection :product, '.item,span.second' do
9
+ collection :products, '.item,span.second' do
10
10
  attr :image, 'img', :prop => 'src'
11
11
  attr :image_url, 'img', :prop => 'src', :eval => :make_image_url
12
12
  attr :name, 'span:first, .name', :eval => :full_name
@@ -18,11 +18,15 @@ class SampleParser
18
18
  end
19
19
  end
20
20
 
21
- collection :offer, '.offer' do
21
+ collection :offers, '.offer' do
22
22
  attr :name, '.name'
23
23
  attr :percentage, '.percentage'
24
24
  end
25
25
 
26
+ collection :related_products, 'ol.related_products' do
27
+ attr :name, 'li', as: :array
28
+ end
29
+
26
30
  def full_name(val, ele)
27
31
  "Full Name: #{val}"
28
32
  end
@@ -87,6 +91,12 @@ FAKE_PAGE = %q{
87
91
  <span class="percentage">10% off</span>
88
92
  </div>
89
93
 
94
+ <ol class="related_products">
95
+ <li> Product 1 </li>
96
+ <li> Product 2 </li>
97
+ <li> Product 3 </li>
98
+ </ol>
99
+
90
100
  </body>
91
101
  </html>
92
102
  }
@@ -14,7 +14,7 @@ require 'coveralls'
14
14
  Coveralls.wear!
15
15
 
16
16
  RSpec.configure do |config|
17
- config.color_enabled = true
17
+ #config.color_enabled = true
18
18
  #config.tty = true
19
19
  #config.formatter = :documentation
20
20
  end
metadata CHANGED
@@ -1,41 +1,41 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: raspar
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jiren Patel
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-08-01 00:00:00.000000000 Z
11
+ date: 2014-06-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - '>='
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: '0'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - '>='
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: nokogiri
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ~>
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: 1.5.5
34
34
  type: :runtime
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.5.5
41
41
  description: Raspar collects data from the html page and creates object from it.
@@ -45,17 +45,19 @@ executables: []
45
45
  extensions: []
46
46
  extra_rdoc_files: []
47
47
  files:
48
- - .gitignore
49
- - .travis.yml
48
+ - ".gitignore"
49
+ - ".travis.yml"
50
50
  - Gemfile
51
51
  - LICENSE
52
52
  - README.md
53
53
  - Rakefile
54
54
  - example/Gemfile
55
- - example/ccode.rb
55
+ - example/best_buy.rb
56
+ - example/country_code.rb
56
57
  - example/debug.rb
57
- - example/dynamic.rb
58
58
  - example/leguide.rb
59
+ - example/leguide_dynamic.rb
60
+ - example/sample_parser.rb
59
61
  - lib/raspar.rb
60
62
  - lib/raspar/dynamic_parser.rb
61
63
  - lib/raspar/parser.rb
@@ -77,17 +79,17 @@ require_paths:
77
79
  - lib
78
80
  required_ruby_version: !ruby/object:Gem::Requirement
79
81
  requirements:
80
- - - '>='
82
+ - - ">="
81
83
  - !ruby/object:Gem::Version
82
84
  version: '0'
83
85
  required_rubygems_version: !ruby/object:Gem::Requirement
84
86
  requirements:
85
- - - '>='
87
+ - - ">="
86
88
  - !ruby/object:Gem::Version
87
89
  version: '0'
88
90
  requirements: []
89
91
  rubyforge_project: raspar
90
- rubygems_version: 2.0.3
92
+ rubygems_version: 2.2.2
91
93
  signing_key:
92
94
  specification_version: 4
93
95
  summary: A generic html/xml parser