spbus 0.0.2 → 0.0.3

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.
Files changed (37) hide show
  1. checksums.yaml +4 -4
  2. data/example.rb +14 -18
  3. data/lib/spbus/bus.rb +2 -3
  4. data/lib/spbus/request.rb +31 -0
  5. data/lib/spbus/route.rb +6 -40
  6. data/lib/spbus/scrapers/locations.rb +48 -0
  7. data/lib/spbus/scrapers/route_details.rb +56 -0
  8. data/lib/spbus/scrapers/routes.rb +74 -0
  9. data/lib/spbus/version.rb +1 -1
  10. data/lib/spbus.rb +23 -5
  11. data/spbus.gemspec +1 -1
  12. data/spec/bus_spec.rb +12 -0
  13. data/spec/cassettes/auth_request.yml +278 -0
  14. data/spec/cassettes/{SpBus_Crawler/_fetch_routes/returns_all_bus_routes.yml → bus_routes.yml} +26269 -26401
  15. data/spec/cassettes/buses_locations.yml +276 -0
  16. data/spec/cassettes/invalid_route_detail.yml +276 -0
  17. data/spec/cassettes/normal_request.yml +136 -0
  18. data/spec/cassettes/normal_route_detail.yml +278 -0
  19. data/spec/cassettes/one_way_route_detail.yml +278 -0
  20. data/spec/request_spec.rb +39 -0
  21. data/spec/route_spec.rb +23 -32
  22. data/spec/scrapers/locations_scraper_spec.rb +24 -0
  23. data/spec/scrapers/route_details_scraper_spec.rb +68 -0
  24. data/spec/scrapers/routes_scraper_spec.rb +30 -0
  25. data/spec/spbus_spec.rb +40 -0
  26. data/spec/spec_helper.rb +1 -1
  27. metadata +35 -25
  28. data/lib/spbus/crawler.rb +0 -52
  29. data/lib/spbus/locations.rb +0 -37
  30. data/spec/cassettes/SpBus_Crawler/_fetch_routes/returns_creates_a_Route_object_for_every_found_route.yml +0 -32809
  31. data/spec/cassettes/SpBus_Locations/_fetch_locations/retrieves_all_buses_locations.yml +0 -34
  32. data/spec/cassettes/SpBus_Route/_fetch_details/sets_destination_attribute.yml +0 -36
  33. data/spec/cassettes/SpBus_Route/_fetch_details/sets_origin_attribute.yml +0 -36
  34. data/spec/cassettes/SpBus_Route/_fetch_details/sets_route_position_codes.yml +0 -36
  35. data/spec/cassettes/SpBus_Route/_to_h/returns_a_hash.yml +0 -36
  36. data/spec/crawler_spec.rb +0 -20
  37. data/spec/locations_spec.rb +0 -18
data/lib/spbus/crawler.rb DELETED
@@ -1,52 +0,0 @@
1
- # encoding: utf-8
2
-
3
- module SpBus
4
- class Crawler
5
-
6
- BUS_ROUTES_URL = "http://200.99.150.170/PlanOperWeb/linhaselecionada.asp"
7
- RESPONSE_VALIDATOR = /Foram encontrados vários resultados para a sua busca/
8
- ROUTE_NUMBER_MATCHER = /Linha: (?<number>[a-z0-9]+[-][0-9a-z]+)/iu
9
- ROUTE_NUMBER_PATH = "#contentScroll ul li .linkLinha:first-child"
10
-
11
- attr_reader :routes
12
-
13
- def initialize
14
- @routes = []
15
- end
16
-
17
- def fetch_routes
18
- sptrans_request
19
-
20
- raise InconsistentResponse unless valid_response?
21
-
22
- @response.css(ROUTE_NUMBER_PATH).each do |el|
23
- create_route_from_raw(el.content)
24
- end
25
-
26
- true
27
- end
28
-
29
- private
30
-
31
- def sptrans_request
32
- @response = Nokogiri::HTML(RestClient.get(BUS_ROUTES_URL))
33
- end
34
-
35
- def valid_response?
36
- @response.text =~ RESPONSE_VALIDATOR
37
- end
38
-
39
- def clean_raw_route(raw)
40
- raw.strip.gsub("\u00A0", " ")
41
- end
42
-
43
- def create_route_from_raw(str)
44
- match = ROUTE_NUMBER_MATCHER.match(clean_raw_route(str))
45
-
46
- if match
47
- @routes << Route.new(match[:number])
48
- end
49
- end
50
- end
51
- end
52
-
@@ -1,37 +0,0 @@
1
- module SpBus
2
- class Locations
3
- BUSES_LOCATIONS = "http://200.189.189.54/InternetServices/PosicaoLinha"
4
-
5
- attr_reader :buses
6
-
7
- def initialize(route)
8
- @route = route
9
- end
10
-
11
- def fetch_locations
12
- sptrans_request
13
-
14
- raise InconsistentResponse unless valid_response?
15
-
16
- @buses = @response[:vs].collect do |hash|
17
- SpBus::Bus.new(lat: hash[:py], long: hash[:px])
18
- end
19
-
20
- true
21
- end
22
-
23
- private
24
-
25
- def sptrans_request
26
- @response = JSON.parse(
27
- RestClient.get(BUSES_LOCATIONS, params: { codigoLinha: @route }),
28
- symbolize_names: true
29
- )[:PosicaoLinhaResult]
30
- end
31
-
32
- def valid_response?
33
- !@response.nil? && !@response[:hr].nil? && !@response[:hr].empty?
34
- end
35
- end
36
- end
37
-