spbus 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a2ca7dae44b502aa40c4e71c960147be430435d7
4
- data.tar.gz: 643b83405b7deb7231f966b01853818c3239c222
3
+ metadata.gz: 223522ae47c316b251c39002868035c5a10f0894
4
+ data.tar.gz: 8316188c0e34cbe96f2f276ee1d3b13648527180
5
5
  SHA512:
6
- metadata.gz: f3553382bfaaf6635602253c3ae313adaab8bd32819e4ea89dbfa94f7b95396f61e13a94064f1c877f75617a26666b2da8dc872630577799d6a3d351944a1d79
7
- data.tar.gz: 042caf114ba9b096d978c29989ffac2f7907e16ba888535828892c40a8da170952a20b040cc450e343a3537b2ce3767a63955d40b81f7e3bdfae876f18fb2b52
6
+ metadata.gz: 1805270572c03a5ad144939f34bb61eb015aaafd6682161a126f22715bf55a509ac49e15b041f7686d78d24a84c89d8d6dd9d67d613295ef1d2da3fb5fed156a
7
+ data.tar.gz: dbf6f8f066d15f7166cd231b3253c2564631e8a4a1e9423be8c6c2a024cc9e37fb44c15510411a26214c3003570c806436d5264caf91459b48a94b6a6af2237f
data/lib/spbus/route.rb CHANGED
@@ -11,10 +11,6 @@ module SpBus
11
11
  def one_way?
12
12
  !!@one_way
13
13
  end
14
-
15
- def fetch_details
16
- Scrapers::RouteDetails.new(self).fetch
17
- end
18
14
  end
19
15
  end
20
16
 
@@ -15,6 +15,12 @@ module SpBus::Scrapers
15
15
  build_route
16
16
 
17
17
  true
18
+ rescue OpenURI::HTTPError => e
19
+ if e.io && e.io.status.first.to_i == 500
20
+ raise SpBus::InvalidRoute
21
+ else
22
+ raise e
23
+ end
18
24
  end
19
25
 
20
26
  private
data/lib/spbus/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module SpBus
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.4"
3
3
  end
data/lib/spbus.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  require "nokogiri"
2
2
  require "open-uri"
3
3
  require "json"
4
+ require "logger"
4
5
 
5
6
  require "spbus/route"
6
7
  require "spbus/bus"
@@ -14,18 +15,38 @@ require "spbus/version"
14
15
  module SpBus
15
16
 
16
17
  class UnknownResponse < StandardError ; end
18
+ class InvalidRoute < StandardError ; end
17
19
 
18
- def self.fetch_routes
19
- scraper = Scrapers::Routes.new
20
- scraper.fetch
21
- scraper.routes.each(&:fetch_details)
22
- scraper.routes
23
- end
20
+ class << self
21
+
22
+ attr_writer :logger
23
+
24
+ def logger
25
+ @logger ||= Logger.new(STDOUT)
26
+ end
27
+
28
+ def fetch_routes
29
+ scraper = Scrapers::Routes.new
30
+ scraper.fetch
31
+
32
+ scraper.routes.select do |route|
33
+ logger.info "Fetching details for route #{route.number}..."
34
+
35
+ begin
36
+ Scrapers::RouteDetails.new(route).fetch
37
+ true
38
+ rescue InvalidRoute
39
+ logger.warn "[INVALID ROUTE] #{route.number}"
40
+ false
41
+ end
42
+ end
43
+ end
24
44
 
25
- def self.fetch_buses(destination_id)
26
- scraper = Scrapers::Locations.new(destination_id)
27
- scraper.fetch
28
- scraper.buses
45
+ def fetch_buses(destination_id)
46
+ scraper = Scrapers::Locations.new(destination_id)
47
+ scraper.fetch
48
+ scraper.buses
49
+ end
29
50
  end
30
51
  end
31
52
 
@@ -13,7 +13,7 @@ describe SpBus::Scrapers::RouteDetails do
13
13
  it "raises an error" do
14
14
  expect {
15
15
  subject.fetch
16
- }.to raise_error
16
+ }.to raise_error(SpBus::InvalidRoute)
17
17
  end
18
18
  end
19
19
 
data/spec/spbus_spec.rb CHANGED
@@ -10,17 +10,33 @@ describe SpBus do
10
10
  let(:route2) { SpBus::Route.new("6450-10") }
11
11
  let(:scraper) { double.as_null_object }
12
12
 
13
- it "fetch route details for every route" do
13
+ before do
14
14
  allow_any_instance_of(SpBus::Scrapers::Routes).to receive(:fetch)
15
- allow_any_instance_of(SpBus::Scrapers::Routes).to receive(:routes).and_return([route1, route2])
15
+ allow_any_instance_of(SpBus::Scrapers::Routes).to receive(:routes)
16
+ .and_return([route1, route2])
17
+ end
18
+
19
+ it "fetch route details for every route" do
20
+ expect(SpBus::Scrapers::RouteDetails).to receive(:new).with(route1)
21
+ .and_return(scraper)
16
22
 
17
- expect(SpBus::Scrapers::RouteDetails).to receive(:new).with(route1).and_return(scraper)
18
- expect(SpBus::Scrapers::RouteDetails).to receive(:new).with(route2).and_return(scraper)
23
+ expect(SpBus::Scrapers::RouteDetails).to receive(:new).with(route2)
24
+ .and_return(scraper)
19
25
 
20
26
  expect(scraper).to receive(:fetch).twice
21
27
 
22
28
  expect(subject.fetch_routes).to eql([route1, route2])
23
29
  end
30
+
31
+ it "does not return an invalid route" do
32
+ allow(SpBus::Scrapers::RouteDetails).to receive(:new)
33
+ .with(anything).and_return(scraper)
34
+
35
+ expect(scraper).to receive(:fetch).ordered.and_raise(SpBus::InvalidRoute)
36
+ expect(scraper).to receive(:fetch).ordered
37
+
38
+ expect(subject.fetch_routes).to eql([route2])
39
+ end
24
40
  end
25
41
 
26
42
  describe ".fetch_buses" do
data/spec/spec_helper.rb CHANGED
@@ -1,6 +1,8 @@
1
1
  require "spbus"
2
2
  require "vcr"
3
3
 
4
+ SpBus.logger = Logger.new("/dev/null")
5
+
4
6
  VCR.configure do |c|
5
7
  c.cassette_library_dir = "spec/cassettes"
6
8
  c.hook_into :webmock
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spbus
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lenon Marcel
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-09-26 00:00:00.000000000 Z
11
+ date: 2013-10-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -167,7 +167,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
167
167
  version: '0'
168
168
  requirements: []
169
169
  rubyforge_project:
170
- rubygems_version: 2.0.6
170
+ rubygems_version: 2.0.3
171
171
  signing_key:
172
172
  specification_version: 4
173
173
  summary: A gem to easily retrieve information about São Paulo bus routes, numbers,