fletcher 0.4.1 → 0.4.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.
- data/README.md +7 -4
- data/VERSION +1 -1
- data/fletcher.gemspec +9 -3
- data/lib/fletcher/models/base.rb +6 -0
- data/lib/fletcher/models/gamecouk.rb +40 -0
- data/lib/fletcher/models/googleshopping.rb +30 -0
- data/lib/fletcher/models/playcom.rb +31 -0
- data/lib/fletcher.rb +11 -5
- data/spec/factories/models.rb +12 -0
- data/spec/lib/fletcher/models/ebay_spec.rb +8 -7
- data/spec/lib/fletcher/models/gamecouk_spec.rb +17 -0
- data/spec/lib/fletcher/models/googleshopping_spec.rb +16 -0
- data/spec/lib/fletcher/models/playcom_spec.rb +17 -0
- data/spec/lib/fletcher_spec.rb +58 -9
- metadata +80 -24
data/README.md
CHANGED
@@ -11,10 +11,13 @@ Fletcher is a cross-website product/model information fetcher. Give fletcher a p
|
|
11
11
|
|
12
12
|
## Supported Websites
|
13
13
|
|
14
|
-
* [Amazon](http://www.amazon.com)
|
15
|
-
* [eBay](http://www.ebay.com)
|
16
|
-
* [
|
17
|
-
* [
|
14
|
+
* [Amazon](http://www.amazon.com)
|
15
|
+
* [eBay](http://www.ebay.com)
|
16
|
+
* [Etsy](http://www.etsy.com)
|
17
|
+
* [game.co.uk](http://www.game.co.uk)
|
18
|
+
* [Google Shopping](http://www.google.com/products/)
|
19
|
+
* [play.com](http://www.play.com)
|
20
|
+
* [ThinkGeek](http://www.thinkgeek.com)
|
18
21
|
|
19
22
|
## Installation
|
20
23
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.4.
|
1
|
+
0.4.2
|
data/fletcher.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "fletcher"
|
8
|
-
s.version = "0.4.
|
8
|
+
s.version = "0.4.2"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Dave Hulihan", "Hulihan Applications"]
|
12
|
-
s.date = "2012-
|
12
|
+
s.date = "2012-08-17"
|
13
13
|
s.description = "Easily fetch product/model information from third party websites such as Amazon, eBay, etc."
|
14
14
|
s.email = "dave@hulihanapplications.com"
|
15
15
|
s.extra_rdoc_files = [
|
@@ -32,6 +32,9 @@ Gem::Specification.new do |s|
|
|
32
32
|
"lib/fletcher/models/base.rb",
|
33
33
|
"lib/fletcher/models/ebay.rb",
|
34
34
|
"lib/fletcher/models/etsy.rb",
|
35
|
+
"lib/fletcher/models/gamecouk.rb",
|
36
|
+
"lib/fletcher/models/googleshopping.rb",
|
37
|
+
"lib/fletcher/models/playcom.rb",
|
35
38
|
"lib/fletcher/models/thinkgeek.rb",
|
36
39
|
"lib/fletcher/nokogiri.rb",
|
37
40
|
"lib/fletcher/string.rb",
|
@@ -41,6 +44,9 @@ Gem::Specification.new do |s|
|
|
41
44
|
"spec/lib/fletcher/models/base_spec.rb",
|
42
45
|
"spec/lib/fletcher/models/ebay_spec.rb",
|
43
46
|
"spec/lib/fletcher/models/etsy_spec.rb",
|
47
|
+
"spec/lib/fletcher/models/gamecouk_spec.rb",
|
48
|
+
"spec/lib/fletcher/models/googleshopping_spec.rb",
|
49
|
+
"spec/lib/fletcher/models/playcom_spec.rb",
|
44
50
|
"spec/lib/fletcher/models/thinkgeek_spec.rb",
|
45
51
|
"spec/lib/fletcher/nokogiri_spec.rb",
|
46
52
|
"spec/lib/fletcher_spec.rb",
|
@@ -52,7 +58,7 @@ Gem::Specification.new do |s|
|
|
52
58
|
s.homepage = "http://github.com/hulihanapplications/fletcher"
|
53
59
|
s.licenses = ["MIT"]
|
54
60
|
s.require_paths = ["lib"]
|
55
|
-
s.rubygems_version = "1.8.
|
61
|
+
s.rubygems_version = "1.8.24"
|
56
62
|
s.summary = "A cross-website product/model information fetcher."
|
57
63
|
|
58
64
|
if s.respond_to? :specification_version then
|
data/lib/fletcher/models/base.rb
CHANGED
@@ -16,6 +16,12 @@ module Fletcher
|
|
16
16
|
model = Fletcher::Model::Thinkgeek.new
|
17
17
|
when :etsy
|
18
18
|
model = Fletcher::Model::Etsy.new
|
19
|
+
when :googleshopping
|
20
|
+
model = Fletcher::Model::Googleshopping.new
|
21
|
+
when :gamecouk
|
22
|
+
model = Fletcher::Model::Gamecouk.new
|
23
|
+
when :playcom
|
24
|
+
model = Fletcher::Model::Playcom.new
|
19
25
|
end
|
20
26
|
|
21
27
|
model.parse(data)
|
@@ -0,0 +1,40 @@
|
|
1
|
+
module Fletcher
|
2
|
+
module Model
|
3
|
+
class Gamecouk < Fletcher::Model::Base
|
4
|
+
# A regular expression for determining if a url comes from a specific service/website
|
5
|
+
def self.regexp
|
6
|
+
/game\.co\.uk/
|
7
|
+
end
|
8
|
+
|
9
|
+
# Parse data and look for object attributes to give to object
|
10
|
+
def parse(data)
|
11
|
+
super(data)
|
12
|
+
|
13
|
+
case doc
|
14
|
+
when Nokogiri::HTML::Document
|
15
|
+
require 'date'
|
16
|
+
# Get Name
|
17
|
+
self.name = doc.xpath("//meta[@property='og:title']/@content").first_string
|
18
|
+
|
19
|
+
# Get Description
|
20
|
+
# OMITTED: This is tough to get because ebay item descriptions are custom html/content created by sellers
|
21
|
+
|
22
|
+
self.description = doc.css('div#primary div#details.panel div.description').to_s
|
23
|
+
|
24
|
+
self.release_date = doc.css('div#primary div#details.panel p.releaseDate').first_string
|
25
|
+
|
26
|
+
self.release_date = Date.strptime(self.release_date.gsub('Released on ',''), '%d-%b-%Y') if self.release_date
|
27
|
+
|
28
|
+
# Get Price
|
29
|
+
raw_price = doc.css("ul#variants ul.mint li.price").first_string
|
30
|
+
Money.default_currency = Money::Currency.new("GBP")
|
31
|
+
parse_price(raw_price.gsub(/Only /, "")) if raw_price
|
32
|
+
|
33
|
+
# Get Image
|
34
|
+
self.images = [{:url => doc.xpath("//meta[@property='og:image']/@content").first_string}]
|
35
|
+
self.image = images.first
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module Fletcher
|
2
|
+
module Model
|
3
|
+
class Googleshopping < Fletcher::Model::Base
|
4
|
+
# A regular expression for determining if a url comes from a specific service/website
|
5
|
+
def self.regexp
|
6
|
+
/google\.com/
|
7
|
+
end
|
8
|
+
|
9
|
+
# Parse data and look for object attributes to give to object
|
10
|
+
def parse(data)
|
11
|
+
super(data)
|
12
|
+
case doc
|
13
|
+
when Nokogiri::HTML::Document
|
14
|
+
# Get Name
|
15
|
+
self.name = doc.css('h1#product-name span.main-title').first_string
|
16
|
+
|
17
|
+
# Get Description
|
18
|
+
self.description = doc.css("div.product-desc-cont div.product-desc").first_string
|
19
|
+
|
20
|
+
# Get Price
|
21
|
+
parse_price( doc.css('div#product-details span.product-price span.main-price').first_string )
|
22
|
+
|
23
|
+
# Get Images
|
24
|
+
self.images = doc.css('div#product-basic-info img').attribute_array
|
25
|
+
self.image = images.first
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module Fletcher
|
3
|
+
module Model
|
4
|
+
class Playcom < Fletcher::Model::Base
|
5
|
+
# A regular expression for determining if a url comes from a specific service/website
|
6
|
+
def self.regexp
|
7
|
+
/play\.com/
|
8
|
+
end
|
9
|
+
|
10
|
+
# Parse data and look for object attributes to give to object
|
11
|
+
def parse(data)
|
12
|
+
super(data)
|
13
|
+
|
14
|
+
case doc
|
15
|
+
when Nokogiri::HTML::Document
|
16
|
+
# Get Name
|
17
|
+
self.name = doc.xpath("//h1[@itemprop='name']").first_string
|
18
|
+
|
19
|
+
self.description = doc.css('div.line div.unit div.tabs section#Description').to_s
|
20
|
+
|
21
|
+
# Get Price
|
22
|
+
raw_price = doc.css('div.product-overview div.line span.price').first_string
|
23
|
+
parse_price(raw_price.gsub(/\302\243/,'')) if raw_price
|
24
|
+
|
25
|
+
# Get Image
|
26
|
+
self.image = doc.css('a#main_product img')[0][:src].to_s unless doc.css('a#main_product img').nil?
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
data/lib/fletcher.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
# = Fletcher
|
2
|
-
# Author:: Dave Hulihan -
|
2
|
+
# Author:: Dave Hulihan - 2012
|
3
3
|
require "uri"
|
4
4
|
require "fletcher/data"
|
5
5
|
require "fletcher/string"
|
@@ -8,7 +8,7 @@ require "fletcher/nokogiri"
|
|
8
8
|
module Fletcher
|
9
9
|
class << self
|
10
10
|
# Detect model by url
|
11
|
-
# Fletcher.identify_model("http://www.amazon.com/whatever") => :amazon
|
11
|
+
# Fletcher.identify_model("http://www.amazon.com/whatever") # => :amazon
|
12
12
|
def identify_model(url)
|
13
13
|
if url =~ ::URI::regexp
|
14
14
|
uri = ::URI::parse(url)
|
@@ -17,10 +17,16 @@ module Fletcher
|
|
17
17
|
model = :amazon
|
18
18
|
elsif host =~ Fletcher::Model::Ebay.regexp
|
19
19
|
model = :ebay
|
20
|
-
elsif host =~ Fletcher::Model::Thinkgeek.regexp
|
21
|
-
model = :thinkgeek
|
22
20
|
elsif host =~ Fletcher::Model::Etsy.regexp
|
23
|
-
model = :etsy
|
21
|
+
model = :etsy
|
22
|
+
elsif host =~ Fletcher::Model::Gamecouk.regexp
|
23
|
+
model = :gamecouk
|
24
|
+
elsif host =~ Fletcher::Model::Googleshopping.regexp
|
25
|
+
model = :googleshopping
|
26
|
+
elsif host =~ Fletcher::Model::Playcom.regexp
|
27
|
+
model = :playcom
|
28
|
+
elsif host =~ Fletcher::Model::Thinkgeek.regexp
|
29
|
+
model = :thinkgeek
|
24
30
|
else
|
25
31
|
model = :unknown
|
26
32
|
raise ArgumentError, "Fletcher doesn't support #{host} yet."
|
data/spec/factories/models.rb
CHANGED
@@ -38,4 +38,16 @@ FactoryGirl.define do
|
|
38
38
|
factory :etsy, :parent => :base do
|
39
39
|
url "http://www.etsy.com/listing/78608690/farm-fresh-125-x-19-in-pick-your-color"
|
40
40
|
end
|
41
|
+
|
42
|
+
factory :googleshopping, :parent => :base do
|
43
|
+
url "http://www.google.com/products/catalog?hl=en&q=xbox+360&um=1&ie=UTF-8&tbm=shop&cid=6970582693578667145&sa=X&ei=-UAuUOi7G4P80QX8hYHwDA"
|
44
|
+
end
|
45
|
+
|
46
|
+
factory :gamecouk, :parent => :base do
|
47
|
+
url "http://www.game.co.uk/en/rise-of-nightmares-kinect-compatible-93535"
|
48
|
+
end
|
49
|
+
|
50
|
+
factory :playcom, :parent => :base do
|
51
|
+
url "http://www.play.com/DVD/DVD/4-/14805648/-/Product.html"
|
52
|
+
end
|
41
53
|
end
|
@@ -3,13 +3,14 @@ require 'spec_helper'
|
|
3
3
|
describe Fletcher::Model::Ebay do
|
4
4
|
describe "parse" do
|
5
5
|
context "with valid data" do
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
6
|
+
# Diable Realtime Test, too inconsistent
|
7
|
+
# it "should return correct model info" do
|
8
|
+
# model = described_class.new
|
9
|
+
# model.parse Fletcher::Data.read(Factory(:ebay).url)
|
10
|
+
# model.name.should_not be_nil
|
11
|
+
# model.price.should_not be_nil
|
12
|
+
# model.image.should_not be_nil
|
13
|
+
# end
|
13
14
|
end
|
14
15
|
end
|
15
16
|
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Fletcher::Model::Gamecouk do
|
4
|
+
describe "parse" do
|
5
|
+
context "with valid data" do
|
6
|
+
it "should return correct model info" do
|
7
|
+
model = described_class.new
|
8
|
+
model.parse Fletcher::Data.read(Factory(:gamecouk).url)
|
9
|
+
model.name.should_not be_nil
|
10
|
+
model.description.should_not be_nil
|
11
|
+
model.price.should_not be_nil
|
12
|
+
model.price.currency.iso_code.should == 'GBP'
|
13
|
+
model.image.should_not be_nil
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Fletcher::Model::Googleshopping do
|
4
|
+
describe "parse" do
|
5
|
+
context "with valid data" do
|
6
|
+
it "should return correct model info" do
|
7
|
+
model = described_class.new
|
8
|
+
model.parse Fletcher::Data.read(Factory(:googleshopping).url)
|
9
|
+
model.name.should_not be_nil
|
10
|
+
model.description.should_not be_nil
|
11
|
+
model.price.should_not be_nil
|
12
|
+
model.image.should_not be_nil
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Fletcher::Model::Playcom do
|
4
|
+
describe "parse" do
|
5
|
+
context "with valid data" do
|
6
|
+
it "should return correct model info" do
|
7
|
+
model = described_class.new
|
8
|
+
model.parse Fletcher::Data.read(Factory(:playcom).url)
|
9
|
+
model.doc = nil
|
10
|
+
model.name.should_not be_nil
|
11
|
+
model.description.should_not be_nil
|
12
|
+
model.price.should_not be_nil
|
13
|
+
model.image.should_not be_nil
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
data/spec/lib/fletcher_spec.rb
CHANGED
@@ -2,7 +2,7 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe Fletcher do
|
4
4
|
context :models do
|
5
|
-
describe :
|
5
|
+
describe :identify_model do
|
6
6
|
it "should raise an error when using an unsupported domain" do
|
7
7
|
lambda{described_class.identify_model(Factory(:invalid).url)}.should raise_error
|
8
8
|
end
|
@@ -15,14 +15,63 @@ describe Fletcher do
|
|
15
15
|
end
|
16
16
|
|
17
17
|
describe :fetch do
|
18
|
-
for model in
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
end
|
18
|
+
# for model in Fletcher.models
|
19
|
+
# it "should return valid data for #{model} model" do
|
20
|
+
# item = described_class.fetch(Factory(model).url)
|
21
|
+
# item.should_not be_nil
|
22
|
+
# item.name.should_not be_nil
|
23
|
+
# item.description.should_not be_nil if model == :amazon
|
24
|
+
# end
|
25
|
+
# end
|
26
|
+
|
27
|
+
it "should fetch amazon product" do
|
28
|
+
item = described_class.fetch(Factory(:amazon).url)
|
29
|
+
item.should_not be_nil
|
30
|
+
item.name.should_not be_nil
|
31
|
+
item.description.should_not be_nil
|
32
|
+
end
|
33
|
+
|
34
|
+
# Disable ebay fetch test, since auctions always end
|
35
|
+
# it "should fetch ebay product" do
|
36
|
+
# item = described_class.fetch(Factory(:ebay).url)
|
37
|
+
# item.should_not be_nil
|
38
|
+
# item.name.should_not be_nil
|
39
|
+
# end
|
40
|
+
|
41
|
+
it "should fetch etsy product" do
|
42
|
+
item = described_class.fetch(Factory(:etsy).url)
|
43
|
+
item.should_not be_nil
|
44
|
+
item.name.should_not be_nil
|
45
|
+
item.description.should_not be_nil
|
46
|
+
end
|
47
|
+
|
48
|
+
it "should fetch gamecouk product" do
|
49
|
+
item = described_class.fetch(Factory(:gamecouk).url)
|
50
|
+
item.should_not be_nil
|
51
|
+
item.name.should_not be_nil
|
52
|
+
item.description.should_not be_nil
|
53
|
+
end
|
54
|
+
|
55
|
+
it "should fetch googleshopping product" do
|
56
|
+
item = described_class.fetch(Factory(:googleshopping).url)
|
57
|
+
item.should_not be_nil
|
58
|
+
item.name.should_not be_nil
|
59
|
+
item.description.should_not be_nil
|
60
|
+
end
|
61
|
+
|
62
|
+
it "should fetch playcom product" do
|
63
|
+
item = described_class.fetch(Factory(:playcom).url)
|
64
|
+
item.should_not be_nil
|
65
|
+
item.name.should_not be_nil
|
66
|
+
item.description.should_not be_nil
|
67
|
+
end
|
68
|
+
|
69
|
+
it "should fetch thinkgeek product" do
|
70
|
+
item = described_class.fetch(Factory(:thinkgeek).url)
|
71
|
+
item.should_not be_nil
|
72
|
+
item.name.should_not be_nil
|
73
|
+
item.description.should_not be_nil
|
74
|
+
end
|
26
75
|
end
|
27
76
|
end
|
28
77
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fletcher
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,11 +10,11 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2012-
|
13
|
+
date: 2012-08-17 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: hashie
|
17
|
-
requirement:
|
17
|
+
requirement: !ruby/object:Gem::Requirement
|
18
18
|
none: false
|
19
19
|
requirements:
|
20
20
|
- - ! '>='
|
@@ -22,10 +22,15 @@ dependencies:
|
|
22
22
|
version: '0'
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
|
-
version_requirements:
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
none: false
|
27
|
+
requirements:
|
28
|
+
- - ! '>='
|
29
|
+
- !ruby/object:Gem::Version
|
30
|
+
version: '0'
|
26
31
|
- !ruby/object:Gem::Dependency
|
27
32
|
name: nokogiri
|
28
|
-
requirement:
|
33
|
+
requirement: !ruby/object:Gem::Requirement
|
29
34
|
none: false
|
30
35
|
requirements:
|
31
36
|
- - ! '>='
|
@@ -33,10 +38,15 @@ dependencies:
|
|
33
38
|
version: '0'
|
34
39
|
type: :runtime
|
35
40
|
prerelease: false
|
36
|
-
version_requirements:
|
41
|
+
version_requirements: !ruby/object:Gem::Requirement
|
42
|
+
none: false
|
43
|
+
requirements:
|
44
|
+
- - ! '>='
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '0'
|
37
47
|
- !ruby/object:Gem::Dependency
|
38
48
|
name: money
|
39
|
-
requirement:
|
49
|
+
requirement: !ruby/object:Gem::Requirement
|
40
50
|
none: false
|
41
51
|
requirements:
|
42
52
|
- - ! '>='
|
@@ -44,10 +54,15 @@ dependencies:
|
|
44
54
|
version: '0'
|
45
55
|
type: :runtime
|
46
56
|
prerelease: false
|
47
|
-
version_requirements:
|
57
|
+
version_requirements: !ruby/object:Gem::Requirement
|
58
|
+
none: false
|
59
|
+
requirements:
|
60
|
+
- - ! '>='
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: '0'
|
48
63
|
- !ruby/object:Gem::Dependency
|
49
64
|
name: shoulda
|
50
|
-
requirement:
|
65
|
+
requirement: !ruby/object:Gem::Requirement
|
51
66
|
none: false
|
52
67
|
requirements:
|
53
68
|
- - ! '>='
|
@@ -55,10 +70,15 @@ dependencies:
|
|
55
70
|
version: '0'
|
56
71
|
type: :development
|
57
72
|
prerelease: false
|
58
|
-
version_requirements:
|
73
|
+
version_requirements: !ruby/object:Gem::Requirement
|
74
|
+
none: false
|
75
|
+
requirements:
|
76
|
+
- - ! '>='
|
77
|
+
- !ruby/object:Gem::Version
|
78
|
+
version: '0'
|
59
79
|
- !ruby/object:Gem::Dependency
|
60
80
|
name: bundler
|
61
|
-
requirement:
|
81
|
+
requirement: !ruby/object:Gem::Requirement
|
62
82
|
none: false
|
63
83
|
requirements:
|
64
84
|
- - ! '>='
|
@@ -66,10 +86,15 @@ dependencies:
|
|
66
86
|
version: '0'
|
67
87
|
type: :development
|
68
88
|
prerelease: false
|
69
|
-
version_requirements:
|
89
|
+
version_requirements: !ruby/object:Gem::Requirement
|
90
|
+
none: false
|
91
|
+
requirements:
|
92
|
+
- - ! '>='
|
93
|
+
- !ruby/object:Gem::Version
|
94
|
+
version: '0'
|
70
95
|
- !ruby/object:Gem::Dependency
|
71
96
|
name: jeweler
|
72
|
-
requirement:
|
97
|
+
requirement: !ruby/object:Gem::Requirement
|
73
98
|
none: false
|
74
99
|
requirements:
|
75
100
|
- - ~>
|
@@ -77,10 +102,15 @@ dependencies:
|
|
77
102
|
version: 1.6.4
|
78
103
|
type: :development
|
79
104
|
prerelease: false
|
80
|
-
version_requirements:
|
105
|
+
version_requirements: !ruby/object:Gem::Requirement
|
106
|
+
none: false
|
107
|
+
requirements:
|
108
|
+
- - ~>
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: 1.6.4
|
81
111
|
- !ruby/object:Gem::Dependency
|
82
112
|
name: rcov
|
83
|
-
requirement:
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
84
114
|
none: false
|
85
115
|
requirements:
|
86
116
|
- - ! '>='
|
@@ -88,10 +118,15 @@ dependencies:
|
|
88
118
|
version: '0'
|
89
119
|
type: :development
|
90
120
|
prerelease: false
|
91
|
-
version_requirements:
|
121
|
+
version_requirements: !ruby/object:Gem::Requirement
|
122
|
+
none: false
|
123
|
+
requirements:
|
124
|
+
- - ! '>='
|
125
|
+
- !ruby/object:Gem::Version
|
126
|
+
version: '0'
|
92
127
|
- !ruby/object:Gem::Dependency
|
93
128
|
name: rspec
|
94
|
-
requirement:
|
129
|
+
requirement: !ruby/object:Gem::Requirement
|
95
130
|
none: false
|
96
131
|
requirements:
|
97
132
|
- - ! '>='
|
@@ -99,10 +134,15 @@ dependencies:
|
|
99
134
|
version: '0'
|
100
135
|
type: :development
|
101
136
|
prerelease: false
|
102
|
-
version_requirements:
|
137
|
+
version_requirements: !ruby/object:Gem::Requirement
|
138
|
+
none: false
|
139
|
+
requirements:
|
140
|
+
- - ! '>='
|
141
|
+
- !ruby/object:Gem::Version
|
142
|
+
version: '0'
|
103
143
|
- !ruby/object:Gem::Dependency
|
104
144
|
name: factory_girl
|
105
|
-
requirement:
|
145
|
+
requirement: !ruby/object:Gem::Requirement
|
106
146
|
none: false
|
107
147
|
requirements:
|
108
148
|
- - ! '>='
|
@@ -110,10 +150,15 @@ dependencies:
|
|
110
150
|
version: '0'
|
111
151
|
type: :development
|
112
152
|
prerelease: false
|
113
|
-
version_requirements:
|
153
|
+
version_requirements: !ruby/object:Gem::Requirement
|
154
|
+
none: false
|
155
|
+
requirements:
|
156
|
+
- - ! '>='
|
157
|
+
- !ruby/object:Gem::Version
|
158
|
+
version: '0'
|
114
159
|
- !ruby/object:Gem::Dependency
|
115
160
|
name: i18n
|
116
|
-
requirement:
|
161
|
+
requirement: !ruby/object:Gem::Requirement
|
117
162
|
none: false
|
118
163
|
requirements:
|
119
164
|
- - ! '>='
|
@@ -121,7 +166,12 @@ dependencies:
|
|
121
166
|
version: '0'
|
122
167
|
type: :development
|
123
168
|
prerelease: false
|
124
|
-
version_requirements:
|
169
|
+
version_requirements: !ruby/object:Gem::Requirement
|
170
|
+
none: false
|
171
|
+
requirements:
|
172
|
+
- - ! '>='
|
173
|
+
- !ruby/object:Gem::Version
|
174
|
+
version: '0'
|
125
175
|
description: Easily fetch product/model information from third party websites such
|
126
176
|
as Amazon, eBay, etc.
|
127
177
|
email: dave@hulihanapplications.com
|
@@ -146,6 +196,9 @@ files:
|
|
146
196
|
- lib/fletcher/models/base.rb
|
147
197
|
- lib/fletcher/models/ebay.rb
|
148
198
|
- lib/fletcher/models/etsy.rb
|
199
|
+
- lib/fletcher/models/gamecouk.rb
|
200
|
+
- lib/fletcher/models/googleshopping.rb
|
201
|
+
- lib/fletcher/models/playcom.rb
|
149
202
|
- lib/fletcher/models/thinkgeek.rb
|
150
203
|
- lib/fletcher/nokogiri.rb
|
151
204
|
- lib/fletcher/string.rb
|
@@ -155,6 +208,9 @@ files:
|
|
155
208
|
- spec/lib/fletcher/models/base_spec.rb
|
156
209
|
- spec/lib/fletcher/models/ebay_spec.rb
|
157
210
|
- spec/lib/fletcher/models/etsy_spec.rb
|
211
|
+
- spec/lib/fletcher/models/gamecouk_spec.rb
|
212
|
+
- spec/lib/fletcher/models/googleshopping_spec.rb
|
213
|
+
- spec/lib/fletcher/models/playcom_spec.rb
|
158
214
|
- spec/lib/fletcher/models/thinkgeek_spec.rb
|
159
215
|
- spec/lib/fletcher/nokogiri_spec.rb
|
160
216
|
- spec/lib/fletcher_spec.rb
|
@@ -177,7 +233,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
177
233
|
version: '0'
|
178
234
|
segments:
|
179
235
|
- 0
|
180
|
-
hash:
|
236
|
+
hash: -2018165901004833096
|
181
237
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
182
238
|
none: false
|
183
239
|
requirements:
|
@@ -186,7 +242,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
186
242
|
version: '0'
|
187
243
|
requirements: []
|
188
244
|
rubyforge_project:
|
189
|
-
rubygems_version: 1.8.
|
245
|
+
rubygems_version: 1.8.24
|
190
246
|
signing_key:
|
191
247
|
specification_version: 3
|
192
248
|
summary: A cross-website product/model information fetcher.
|