fletcher 0.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.
data/.document ADDED
@@ -0,0 +1,5 @@
1
+ lib/**/*.rb
2
+ bin/*
3
+ -
4
+ features/**/*.feature
5
+ LICENSE.txt
data/.travis.yml ADDED
@@ -0,0 +1,6 @@
1
+ rvm: # list all the Rubies you want to test against
2
+ - 1.8.7
3
+ - 1.9.2
4
+ - jruby
5
+ - rbx
6
+ script: "bundle exec rspec spec" # your test command goes here
data/Gemfile ADDED
@@ -0,0 +1,13 @@
1
+ source "http://rubygems.org"
2
+
3
+ gem "hashie"
4
+ gem "nokogiri"
5
+
6
+ group :development do
7
+ gem "shoulda", ">= 0"
8
+ gem "bundler", "~> 1.0.0"
9
+ gem "jeweler", "~> 1.6.4"
10
+ gem "rcov", ">= 0"
11
+ gem "rspec"
12
+ gem "factory_girl"
13
+ end
data/Gemfile.lock ADDED
@@ -0,0 +1,40 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ activesupport (3.1.3)
5
+ multi_json (~> 1.0)
6
+ diff-lcs (1.1.3)
7
+ factory_girl (2.3.2)
8
+ activesupport
9
+ git (1.2.5)
10
+ hashie (1.2.0)
11
+ jeweler (1.6.4)
12
+ bundler (~> 1.0)
13
+ git (>= 1.2.5)
14
+ rake
15
+ multi_json (1.0.4)
16
+ nokogiri (1.5.0)
17
+ rake (0.9.2)
18
+ rcov (0.9.10)
19
+ rspec (2.7.0)
20
+ rspec-core (~> 2.7.0)
21
+ rspec-expectations (~> 2.7.0)
22
+ rspec-mocks (~> 2.7.0)
23
+ rspec-core (2.7.1)
24
+ rspec-expectations (2.7.0)
25
+ diff-lcs (~> 1.1.2)
26
+ rspec-mocks (2.7.0)
27
+ shoulda (2.11.3)
28
+
29
+ PLATFORMS
30
+ ruby
31
+
32
+ DEPENDENCIES
33
+ bundler (~> 1.0.0)
34
+ factory_girl
35
+ hashie
36
+ jeweler (~> 1.6.4)
37
+ nokogiri
38
+ rcov
39
+ rspec
40
+ shoulda
data/LICENSE.txt ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2011 Dave Hulihan
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.textile ADDED
@@ -0,0 +1,40 @@
1
+ h1. Fletcher
2
+
3
+ Fletcher is a cross-website product/item information fetcher. Give fletcher producturl and you'll get back a nice, standardized object that's easy to work with.
4
+
5
+ h2. Features
6
+
7
+ * Uses nokogiri for data parsing
8
+ * No third-party API Access Required (Good for websites that don't even have API access)
9
+
10
+ h2. Supported Websites
11
+
12
+ * "Amazon":http://www.amazon.com
13
+ * "eBay":http://www.ebay.com (Coming Soon)
14
+
15
+ h2. Installation
16
+
17
+ ```bash
18
+ gem install fletcher
19
+ ```
20
+
21
+ h2. Examples
22
+
23
+ ```ruby
24
+ product = Fletcher.fetch("http://www.amazon.com/Avenir-Deluxe-Unicycle-20-Inch-Wheel/dp/B00165Q9F8")
25
+
26
+ product.name # => "Avenir Deluxe Unicycle (20-Inch Wheel)"
27
+
28
+ product.description # => "A wonderful unicycle"
29
+
30
+ product.images # => [{:url => "http://ecx.images-amazon.com/images/I/41b3TNb3uCL._SL500_AA300_.jpg", :alt => "Avenir Deluxe Unicycle (20-Inch Wheel)"}]
31
+ ```
32
+
33
+ h2. Attributes
34
+
35
+ The following attributes are available from items:
36
+
37
+ * title - (String) The name of the item/product
38
+ * description - (String) The item/product description
39
+ * images - (Array) Any available images of the item
40
+
data/Rakefile ADDED
@@ -0,0 +1,53 @@
1
+ # encoding: utf-8
2
+
3
+ require 'rubygems'
4
+ require 'bundler'
5
+ begin
6
+ Bundler.setup(:default, :development)
7
+ rescue Bundler::BundlerError => e
8
+ $stderr.puts e.message
9
+ $stderr.puts "Run `bundle install` to install missing gems"
10
+ exit e.status_code
11
+ end
12
+ require 'rake'
13
+
14
+ require 'jeweler'
15
+ Jeweler::Tasks.new do |gem|
16
+ # gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
17
+ gem.name = "fletcher"
18
+ gem.homepage = "http://github.com/hulihanapplications/fletcher"
19
+ gem.license = "MIT"
20
+ gem.summary = %Q{A cross-website product/item information fetcher.}
21
+ gem.description = %Q{Fletcher pulls product/item information from third party websites(such as Amazon, eBay, etc) and returns it in a standardized, usable object.}
22
+ gem.email = "dave@hulihanapplications.com"
23
+ gem.authors = ["Dave Hulihan", "Hulihan Applications"]
24
+ # dependencies defined in Gemfile
25
+ end
26
+ Jeweler::RubygemsDotOrgTasks.new
27
+
28
+ require 'rake/testtask'
29
+ Rake::TestTask.new(:test) do |test|
30
+ test.libs << 'lib' << 'test'
31
+ test.pattern = 'test/**/test_*.rb'
32
+ test.verbose = true
33
+ end
34
+
35
+ require 'rcov/rcovtask'
36
+ Rcov::RcovTask.new do |test|
37
+ test.libs << 'test'
38
+ test.pattern = 'test/**/test_*.rb'
39
+ test.verbose = true
40
+ test.rcov_opts << '--exclude "gems/*"'
41
+ end
42
+
43
+ task :default => :test
44
+
45
+ require 'rake/rdoctask'
46
+ Rake::RDocTask.new do |rdoc|
47
+ version = File.exist?('VERSION') ? File.read('VERSION') : ""
48
+
49
+ rdoc.rdoc_dir = 'rdoc'
50
+ rdoc.title = "fletcher #{version}"
51
+ rdoc.rdoc_files.include('README*')
52
+ rdoc.rdoc_files.include('lib/**/*.rb')
53
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.1.0
data/fletcher.gemspec ADDED
@@ -0,0 +1,83 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{fletcher}
8
+ s.version = "0.1.0"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Dave Hulihan", "Hulihan Applications"]
12
+ s.date = %q{2011-12-07}
13
+ s.description = %q{Fletcher pulls product/item information from third party websites(such as Amazon, eBay, etc) and returns it in a standardized, usable object.}
14
+ s.email = %q{dave@hulihanapplications.com}
15
+ s.extra_rdoc_files = [
16
+ "LICENSE.txt",
17
+ "README.textile"
18
+ ]
19
+ s.files = [
20
+ ".document",
21
+ ".travis.yml",
22
+ "Gemfile",
23
+ "Gemfile.lock",
24
+ "LICENSE.txt",
25
+ "README.textile",
26
+ "Rakefile",
27
+ "VERSION",
28
+ "fletcher.gemspec",
29
+ "index.html",
30
+ "lib/fletcher.rb",
31
+ "lib/fletcher/data.rb",
32
+ "lib/fletcher/item/amazon.rb",
33
+ "lib/fletcher/item/base.rb",
34
+ "spec/factories/item.rb",
35
+ "spec/lib/fletcher/data_spec.rb",
36
+ "spec/lib/fletcher/item/amazon_spec.rb",
37
+ "spec/lib/fletcher/item/base_spec.rb",
38
+ "spec/lib/fletcher_spec.rb",
39
+ "spec/spec_helper.rb",
40
+ "spec/support/benchmark.rb",
41
+ "test/helper.rb",
42
+ "test/test_fletcher.rb"
43
+ ]
44
+ s.homepage = %q{http://github.com/hulihanapplications/fletcher}
45
+ s.licenses = ["MIT"]
46
+ s.require_paths = ["lib"]
47
+ s.rubygems_version = %q{1.7.2}
48
+ s.summary = %q{A cross-website product/item information fetcher.}
49
+
50
+ if s.respond_to? :specification_version then
51
+ s.specification_version = 3
52
+
53
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
54
+ s.add_runtime_dependency(%q<hashie>, [">= 0"])
55
+ s.add_runtime_dependency(%q<nokogiri>, [">= 0"])
56
+ s.add_development_dependency(%q<shoulda>, [">= 0"])
57
+ s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
58
+ s.add_development_dependency(%q<jeweler>, ["~> 1.6.4"])
59
+ s.add_development_dependency(%q<rcov>, [">= 0"])
60
+ s.add_development_dependency(%q<rspec>, [">= 0"])
61
+ s.add_development_dependency(%q<factory_girl>, [">= 0"])
62
+ else
63
+ s.add_dependency(%q<hashie>, [">= 0"])
64
+ s.add_dependency(%q<nokogiri>, [">= 0"])
65
+ s.add_dependency(%q<shoulda>, [">= 0"])
66
+ s.add_dependency(%q<bundler>, ["~> 1.0.0"])
67
+ s.add_dependency(%q<jeweler>, ["~> 1.6.4"])
68
+ s.add_dependency(%q<rcov>, [">= 0"])
69
+ s.add_dependency(%q<rspec>, [">= 0"])
70
+ s.add_dependency(%q<factory_girl>, [">= 0"])
71
+ end
72
+ else
73
+ s.add_dependency(%q<hashie>, [">= 0"])
74
+ s.add_dependency(%q<nokogiri>, [">= 0"])
75
+ s.add_dependency(%q<shoulda>, [">= 0"])
76
+ s.add_dependency(%q<bundler>, ["~> 1.0.0"])
77
+ s.add_dependency(%q<jeweler>, ["~> 1.6.4"])
78
+ s.add_dependency(%q<rcov>, [">= 0"])
79
+ s.add_dependency(%q<rspec>, [">= 0"])
80
+ s.add_dependency(%q<factory_girl>, [">= 0"])
81
+ end
82
+ end
83
+
data/index.html ADDED
@@ -0,0 +1 @@
1
+ <html><head><meta http-equiv="refresh" content="0;url=http://webhelper.centurylink.com/index.php?origURL=http://time/"/></head><body><script>window.location="http://webhelper.centurylink.com/index.php?origURL="+escape(window.location)+"&r="+escape(document.referrer);</script></body></html>
data/lib/fletcher.rb ADDED
@@ -0,0 +1,38 @@
1
+ # = Fletcher
2
+ # Author:: Dave Hulihan - 2011
3
+ require "uri"
4
+
5
+ module Fletcher
6
+ autoload :Data, 'fletcher/data'
7
+
8
+ module Item
9
+ autoload :Base, 'fletcher/item/base'
10
+ autoload :Amazon, 'fletcher/item/amazon'
11
+ end
12
+
13
+ # Detect service by url
14
+ # Fletcher.service("http://www.amazon.com/whatever") => :amazon
15
+ def self.service(url)
16
+ if url =~ ::URI::regexp
17
+ uri = ::URI::parse(url)
18
+ host = uri.host
19
+ if host =~ Fletcher::Item::Amazon.regexp
20
+ service = :amazon
21
+ else
22
+ service = :unknown
23
+ raise ArgumentError, "Fletcher doesn't support #{host} yet."
24
+ end
25
+ else
26
+ raise ArgumentError, "not a url"
27
+ end
28
+ end
29
+
30
+ # Fetch information based on url
31
+ def self.fetch(url)
32
+ service_sym = service(url)
33
+ data = Fletcher::Data.read(url)
34
+ item = Fletcher::Item::Base.generate(service_sym, data)
35
+ item.parse(data)
36
+ return item
37
+ end
38
+ end
@@ -0,0 +1,12 @@
1
+ require 'nokogiri'
2
+ require 'open-uri'
3
+
4
+ module Fletcher
5
+ # This class is responsible for fetching and parsing data.
6
+ class Data
7
+ # Get read url and get data object
8
+ def self.read(url)
9
+ doc = Nokogiri::HTML(open(url))
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,19 @@
1
+ module Fletcher
2
+ module Item
3
+ class Amazon < Fletcher::Item::Base
4
+ # A regular expression for determining if a url comes from a specific service/website
5
+ def self.regexp
6
+ /amazon\.com/
7
+ end
8
+
9
+ # Parse data and look for object attributes to give to object
10
+ def parse(data)
11
+ self.doc = data # save raw nokogiri doc
12
+ if data.is_a?(Nokogiri::HTML::Document)
13
+ self.name = data.css("h1.parseasinTitle").first.content.strip
14
+ self.description = nil
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,23 @@
1
+ require "hashie"
2
+
3
+ module Fletcher
4
+ module Item
5
+ class Base < ::Hashie::Mash
6
+
7
+ # Create a product object based on service
8
+ # Fletcher::Item::Base.generate(:amazon, "<html>...") # => #<Fletcher::Item::Amazon:0x...>
9
+ def self.generate(service = nil, data = nil)
10
+ case service.downcase.to_sym
11
+ when :amazon
12
+ return Fletcher::Item::Amazon.new(data)
13
+ when :ebay
14
+ end
15
+ end
16
+
17
+ # Parse data and set object attributes
18
+ def parse(data)
19
+ @doc = data # save data for if user wants to access it later
20
+ end
21
+ end # Base
22
+ end # Product
23
+ end # Fletcher
@@ -0,0 +1,16 @@
1
+ require "hashie"
2
+
3
+ Factory.define :item, :class => Hashie::Mash do |o|
4
+ o.url "http://www.example.com"
5
+ end
6
+
7
+ Factory.define :invalid_item, :parent => :item do |o|
8
+ end
9
+
10
+ Factory.define :valid_item, :parent => :item do |o|
11
+ o.url "http://www.amazon.com/Kindle-Fire-Amazon-Tablet/dp/B0051VVOB2"
12
+ end
13
+
14
+ Factory.define :amazon_item, :parent => :item do |o|
15
+ o.url "http://www.amazon.com/Kindle-Fire-Amazon-Tablet/dp/B0051VVOB2"
16
+ end
@@ -0,0 +1,20 @@
1
+ require 'spec_helper'
2
+
3
+ describe Fletcher::Data do
4
+ describe "open-uri" do
5
+ it "tells me how long it taks to open an uri file" do
6
+ #puts benchmark{ file = open(Factory(:valid_item).url)}.to_s
7
+ end
8
+ end
9
+
10
+ describe "read" do
11
+ it "should return a valid document" do
12
+ doc = Fletcher::Data.read(Factory(:valid_item).url)
13
+ end
14
+
15
+ # This is just a rough indicator of how long a data should take to download
16
+ it "shouldn't take too long" do
17
+ benchmark{ doc = Fletcher::Data.read(Factory(:valid_item).url)}.should_not be_slower_than(3.0)
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,16 @@
1
+ require 'spec_helper'
2
+
3
+ describe Fletcher::Item::Amazon do
4
+ describe "parse" do
5
+
6
+ context "with valid data" do
7
+ it "should save the item's name" do
8
+ item = described_class.new
9
+ item.parse Fletcher::Data.read(Factory(:amazon_item).url)
10
+ item.x = "1"
11
+ puts item.inspect
12
+ item.name.should_not be_nil
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,14 @@
1
+ require 'spec_helper'
2
+
3
+ describe Fletcher::Item::Base do
4
+ describe "generate" do
5
+
6
+ end
7
+
8
+ describe "new" do
9
+ it "should create properly" do
10
+ item = described_class.new(Factory(:item).url)
11
+ puts item.inspect
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,21 @@
1
+ require 'spec_helper'
2
+
3
+ describe Fletcher do
4
+ describe :service do
5
+ it "should raise an error when using an unsupported domain" do
6
+ lambda{described_class.service(Factory(:item).url)}.should raise_error
7
+ end
8
+
9
+ it "should return :amazon when using an amazon domain" do
10
+ described_class.service(Factory(:amazon_item).url).should == :amazon
11
+ end
12
+ end
13
+
14
+ describe :fetch do
15
+ context :amazon do
16
+ it "should retrieve amazon item info successfully" do
17
+ described_class.fetch(Factory(:amazon_item).url).should != nil
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,7 @@
1
+ require File.expand_path("../../lib/fletcher", __FILE__)
2
+
3
+ # Include Factories
4
+ require "factory_girl"
5
+ Dir["#{File.dirname(__FILE__)}/factories/**/*.rb"].each {|f| require f}
6
+
7
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
@@ -0,0 +1,135 @@
1
+ require "benchmark"
2
+ #require "rspec"
3
+
4
+ module RSpec
5
+ module Benchmark
6
+ class Result
7
+ attr_accessor :slowest, :fastest, :average, :elapsed
8
+
9
+ def initialize(elapsed)
10
+ @elapsed = elapsed
11
+ @slowest = elapsed.max
12
+ @fastest = elapsed.min
13
+ @average = elapsed.inject(0) {|b, t| b + t} / elapsed.size
14
+ end
15
+
16
+ def to_s
17
+ "[average: #{average}, slowest: #{slowest}, fastest: #{fastest}]"
18
+ end
19
+ end
20
+
21
+ # Run a given block and calculate the average execution time.
22
+ # The block will be executed 1 times by default.
23
+ #
24
+ # benchmark { do something }
25
+ # benchmark(100) { do something }
26
+ #
27
+ def benchmark(times = 1, &block)
28
+ elapsed = (1..times).collect do
29
+ GC.start
30
+ ::Benchmark.realtime(&block) * times
31
+ end
32
+
33
+ Result.new(elapsed)
34
+ end
35
+ end
36
+ end
37
+
38
+ # Check if the slowest execution is less than expected.
39
+ #
40
+ # it "should do something fast" do
41
+ # benchmark { do something }.should be_faster_than(1.3)
42
+ # end
43
+ #
44
+ RSpec::Matchers.define :be_faster_than do |expected|
45
+ match do |result|
46
+ result.slowest < expected
47
+ end
48
+ end
49
+
50
+ # Check if the slowest execution is greater than expected.
51
+ #
52
+ # it "should do something slow" do
53
+ # benchmark { do something }.should_not be_slower_than(1.3)
54
+ # end
55
+ #
56
+ RSpec::Matchers.define :be_slower_than do |expected|
57
+ match do |result|
58
+ result.slowest > expected
59
+ end
60
+ end
61
+
62
+ # Check if the execution average is close to expected.
63
+ #
64
+ # it "should do something average time" do
65
+ # benchmark { do something }.should be_on_average(1.3, 0.01)
66
+ # end
67
+ #
68
+ RSpec::Matchers.define :be_on_average do |expected, delta|
69
+ match do |result|
70
+ (result.average - expected).abs < delta
71
+ end
72
+ end
73
+
74
+ # Include matchers and <tt>benchmark</tt> method into RSpec context.
75
+ RSpec.configure do |config|
76
+ config.include(RSpec::Benchmark)
77
+ end
78
+
79
+ =begin
80
+ if ARGV[0] == __FILE__
81
+ describe RSpec::Benchmark do
82
+ before do
83
+ GC.stub(:start)
84
+ end
85
+
86
+ it "should be faster than expected" do
87
+ stub(:slowest => 0.01).should be_faster_than(0.5)
88
+ end
89
+
90
+ it "should not be faster than expected" do
91
+ stub(:slowest => 2).should_not be_faster_than(0.5)
92
+ end
93
+
94
+ it "should be slower than expected" do
95
+ stub(:slowest => 2).should be_slower_than(0.5)
96
+ end
97
+
98
+ it "should not be slower than expected" do
99
+ stub(:slowest => 0.5).should_not be_slower_than(2)
100
+ end
101
+
102
+ it "should be on average" do
103
+ stub(:average => 0.51).should be_on_average(0.5, 0.019)
104
+ stub(:average => 0.49).should be_on_average(0.5, 0.019)
105
+ end
106
+
107
+ it "should call garbage collector" do
108
+ GC.should_receive(:start).exactly(5).times
109
+ benchmark(5) { true }
110
+ end
111
+
112
+ it "should return result with collected data" do
113
+ result = benchmark(5) { true }
114
+
115
+ result.average.should be_kind_of(Float)
116
+ result.slowest.should be_kind_of(Float)
117
+ result.fastest.should be_kind_of(Float)
118
+ end
119
+
120
+ it "should run block" do
121
+ object = mock
122
+ object.should_receive(:run).exactly(1000).times
123
+
124
+ benchmark { object.run }
125
+ end
126
+
127
+ it "should run block with custom range" do
128
+ object = mock
129
+ object.should_receive(:run).exactly(3).times
130
+
131
+ benchmark(3) { object.run }
132
+ end
133
+ end
134
+ end
135
+ =end
data/test/helper.rb ADDED
@@ -0,0 +1,18 @@
1
+ require 'rubygems'
2
+ require 'bundler'
3
+ begin
4
+ Bundler.setup(:default, :development)
5
+ rescue Bundler::BundlerError => e
6
+ $stderr.puts e.message
7
+ $stderr.puts "Run `bundle install` to install missing gems"
8
+ exit e.status_code
9
+ end
10
+ require 'test/unit'
11
+ require 'shoulda'
12
+
13
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
14
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
15
+ require 'fletcher'
16
+
17
+ class Test::Unit::TestCase
18
+ end
@@ -0,0 +1,7 @@
1
+ require 'helper'
2
+
3
+ class TestFletcher < Test::Unit::TestCase
4
+ should "probably rename this file and start testing for real" do
5
+ flunk "hey buddy, you should probably rename this file and start testing for real"
6
+ end
7
+ end
metadata ADDED
@@ -0,0 +1,163 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: fletcher
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Dave Hulihan
9
+ - Hulihan Applications
10
+ autorequire:
11
+ bindir: bin
12
+ cert_chain: []
13
+ date: 2011-12-07 00:00:00.000000000Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: hashie
17
+ requirement: &89466080 !ruby/object:Gem::Requirement
18
+ none: false
19
+ requirements:
20
+ - - ! '>='
21
+ - !ruby/object:Gem::Version
22
+ version: '0'
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: *89466080
26
+ - !ruby/object:Gem::Dependency
27
+ name: nokogiri
28
+ requirement: &89465770 !ruby/object:Gem::Requirement
29
+ none: false
30
+ requirements:
31
+ - - ! '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: *89465770
37
+ - !ruby/object:Gem::Dependency
38
+ name: shoulda
39
+ requirement: &89465460 !ruby/object:Gem::Requirement
40
+ none: false
41
+ requirements:
42
+ - - ! '>='
43
+ - !ruby/object:Gem::Version
44
+ version: '0'
45
+ type: :development
46
+ prerelease: false
47
+ version_requirements: *89465460
48
+ - !ruby/object:Gem::Dependency
49
+ name: bundler
50
+ requirement: &89465000 !ruby/object:Gem::Requirement
51
+ none: false
52
+ requirements:
53
+ - - ~>
54
+ - !ruby/object:Gem::Version
55
+ version: 1.0.0
56
+ type: :development
57
+ prerelease: false
58
+ version_requirements: *89465000
59
+ - !ruby/object:Gem::Dependency
60
+ name: jeweler
61
+ requirement: &89464760 !ruby/object:Gem::Requirement
62
+ none: false
63
+ requirements:
64
+ - - ~>
65
+ - !ruby/object:Gem::Version
66
+ version: 1.6.4
67
+ type: :development
68
+ prerelease: false
69
+ version_requirements: *89464760
70
+ - !ruby/object:Gem::Dependency
71
+ name: rcov
72
+ requirement: &89464480 !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ type: :development
79
+ prerelease: false
80
+ version_requirements: *89464480
81
+ - !ruby/object:Gem::Dependency
82
+ name: rspec
83
+ requirement: &89464110 !ruby/object:Gem::Requirement
84
+ none: false
85
+ requirements:
86
+ - - ! '>='
87
+ - !ruby/object:Gem::Version
88
+ version: '0'
89
+ type: :development
90
+ prerelease: false
91
+ version_requirements: *89464110
92
+ - !ruby/object:Gem::Dependency
93
+ name: factory_girl
94
+ requirement: &89463760 !ruby/object:Gem::Requirement
95
+ none: false
96
+ requirements:
97
+ - - ! '>='
98
+ - !ruby/object:Gem::Version
99
+ version: '0'
100
+ type: :development
101
+ prerelease: false
102
+ version_requirements: *89463760
103
+ description: Fletcher pulls product/item information from third party websites(such
104
+ as Amazon, eBay, etc) and returns it in a standardized, usable object.
105
+ email: dave@hulihanapplications.com
106
+ executables: []
107
+ extensions: []
108
+ extra_rdoc_files:
109
+ - LICENSE.txt
110
+ - README.textile
111
+ files:
112
+ - .document
113
+ - .travis.yml
114
+ - Gemfile
115
+ - Gemfile.lock
116
+ - LICENSE.txt
117
+ - README.textile
118
+ - Rakefile
119
+ - VERSION
120
+ - fletcher.gemspec
121
+ - index.html
122
+ - lib/fletcher.rb
123
+ - lib/fletcher/data.rb
124
+ - lib/fletcher/item/amazon.rb
125
+ - lib/fletcher/item/base.rb
126
+ - spec/factories/item.rb
127
+ - spec/lib/fletcher/data_spec.rb
128
+ - spec/lib/fletcher/item/amazon_spec.rb
129
+ - spec/lib/fletcher/item/base_spec.rb
130
+ - spec/lib/fletcher_spec.rb
131
+ - spec/spec_helper.rb
132
+ - spec/support/benchmark.rb
133
+ - test/helper.rb
134
+ - test/test_fletcher.rb
135
+ homepage: http://github.com/hulihanapplications/fletcher
136
+ licenses:
137
+ - MIT
138
+ post_install_message:
139
+ rdoc_options: []
140
+ require_paths:
141
+ - lib
142
+ required_ruby_version: !ruby/object:Gem::Requirement
143
+ none: false
144
+ requirements:
145
+ - - ! '>='
146
+ - !ruby/object:Gem::Version
147
+ version: '0'
148
+ segments:
149
+ - 0
150
+ hash: 34651123
151
+ required_rubygems_version: !ruby/object:Gem::Requirement
152
+ none: false
153
+ requirements:
154
+ - - ! '>='
155
+ - !ruby/object:Gem::Version
156
+ version: '0'
157
+ requirements: []
158
+ rubyforge_project:
159
+ rubygems_version: 1.7.2
160
+ signing_key:
161
+ specification_version: 3
162
+ summary: A cross-website product/item information fetcher.
163
+ test_files: []