fletcher 0.4.1 → 0.4.2
Sign up to get free protection for your applications and to get access to all the features.
- 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.
|