fletcher 0.6.4 → 0.6.5

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/VERSION CHANGED
@@ -1 +1 @@
1
- 0.6.4
1
+ 0.6.5
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "fletcher"
8
- s.version = "0.6.4"
8
+ s.version = "0.6.5"
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 = "2013-11-22"
12
+ s.date = "2013-11-28"
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.executables = ["fletcher"]
@@ -8,6 +8,12 @@ require File.expand_path("fletcher/string", File.dirname(__FILE__))
8
8
  require File.expand_path("fletcher/nokogiri", File.dirname(__FILE__))
9
9
 
10
10
  module Fletcher
11
+ LIBRARY_PATH = File.join(File.dirname(__FILE__), 'fletcher')
12
+ CLI_PATH = File.join(LIBRARY_PATH, 'cli')
13
+ MODEL_PATH = File.join(LIBRARY_PATH, 'models')
14
+ # User Agent (Chrome)
15
+ USER_AGENT = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.57 Safari/537.36"
16
+
11
17
  # Module Methods
12
18
  class << self
13
19
  # Fetch information based on url
@@ -61,9 +67,7 @@ module Fletcher
61
67
  end
62
68
  end
63
69
 
64
- LIBRARY_PATH = File.join(File.dirname(__FILE__), 'fletcher')
65
- CLI_PATH = File.join(LIBRARY_PATH, 'cli')
66
- MODEL_PATH = File.join(LIBRARY_PATH, 'models')
70
+
67
71
 
68
72
  # Autoload CLI
69
73
  module CLI
@@ -6,17 +6,13 @@ module Fletcher
6
6
  class Data
7
7
  # Get read url and get data object
8
8
  def self.read(url, options = {})
9
- # Set User Agent
10
- options[:user_agent] ||= "Ruby/#{RUBY_VERSION}"
11
-
12
- response = open(url, "User-Agent" => options[:user_agent])
9
+ response = open(url, "User-Agent" => Fletcher::USER_AGENT)
13
10
  doc = ::Nokogiri::HTML(response.read)
14
11
 
15
12
  # Save contents of URL/Remote File for debugging
16
13
  # response.rewind
17
14
  # last_response_file = File.expand_path(File.join("..", "..", "last_response"), File.dirname(__FILE__))
18
15
  # File.new(last_response_file, "w+").write(response.read)
19
-
20
16
  return doc
21
17
  end
22
18
  end
@@ -13,21 +13,24 @@ module Fletcher
13
13
  case doc
14
14
  when Nokogiri::HTML::Document
15
15
  # Get Name
16
- self.name = doc.css("h1#title").first_string
16
+ self.name = doc.css("h1#title").first_string
17
+ self.name = doc.xpath("string(//title)").split(" - ").first unless self.name
17
18
 
18
19
  # Get Description
19
- self.description = doc.css("div#productDescriptionWrapper").first_string
20
+ self.description = doc.css(".productDescriptionWrapper").first_string
20
21
 
21
22
  # Get description from meta title if not found
22
23
  self.description = doc.xpath("//meta[@name='description']/@content").first_string if description.nil?
23
24
 
24
25
  # Get Price
25
- parse_price(doc.css("#priceblock_ourprice").first_string)
26
-
26
+ parse_price(doc.css("#actualPriceValue").first_string)
27
+ parse_price(doc.css("#priceblock_ourprice").first_string) unless self.price
27
28
  parse_price(doc.css("#priceblock_saleprice").first_string) unless self.price
29
+ parse_price(doc.xpath("//span[contains(@id, 'price')]").first_string) unless self.price
28
30
 
29
31
  # Get Images
30
32
  self.images = doc.xpath("//*[@data-action='main-image-click']//img").attribute_array
33
+ self.images = doc.xpath("//*[@id='imageBlock']//img").attribute_array unless self.images
31
34
  self.image = images.first
32
35
  end
33
36
  end
@@ -30,6 +30,11 @@ FactoryGirl.define do
30
30
  url "http://www.amazon.com/gp/product/B0093162RM/"
31
31
  end
32
32
 
33
+ # Create multiple amazon models, since markup varies greatly between products
34
+ factory :amazon2, :parent => :base do
35
+ url "http://www.amazon.com/gp/product/B000P4W3LU/"
36
+ end
37
+
33
38
  # This may need to be updated if the item is expired/deleted
34
39
  factory :ebay, :parent => :base do
35
40
  url "http://www.ebay.com/itm/Unicycle-20-Silver-Chrome-Unicycles-Wheel-Cycling-Outdoor-Sports-Fitness-New-/310729787186?pt=LH_DefaultDomain_0&hash=item4858f04732"
@@ -23,8 +23,10 @@ end
23
23
  describe Fletcher::Model::Amazon do
24
24
  describe "parse", :vcr do
25
25
  context "with valid data" do
26
- it "should return correct model info for a product" do
27
- amazon_check(FactoryGirl.build(:amazon).url)
26
+ %w{amazon amazon2}.each do |name|
27
+ it "should fetch valid info for #{name}" do
28
+ amazon_check(FactoryGirl.build(name.to_sym).url)
29
+ end
28
30
  end
29
31
  end
30
32
  end
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.6.4
4
+ version: 0.6.5
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2013-11-22 00:00:00.000000000 Z
13
+ date: 2013-11-28 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: hashie
@@ -280,7 +280,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
280
280
  version: '0'
281
281
  segments:
282
282
  - 0
283
- hash: 1067783841
283
+ hash: 454072605
284
284
  required_rubygems_version: !ruby/object:Gem::Requirement
285
285
  none: false
286
286
  requirements: