viaggiatreno 1.0.2 → 1.0.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (42) hide show
  1. checksums.yaml +7 -0
  2. data/.codeclimate.yml +25 -0
  3. data/.gitignore +5 -1
  4. data/.rubocop.yml +46 -0
  5. data/.travis.yml +17 -0
  6. data/Gemfile +10 -1
  7. data/Guardfile +12 -0
  8. data/LICENSE +21 -0
  9. data/README.md +8 -2
  10. data/Rakefile +2 -1
  11. data/lib/viaggia_treno.rb +1 -0
  12. data/lib/viaggiatreno.rb +2 -3
  13. data/lib/viaggiatreno/regex_match_info.rb +11 -0
  14. data/lib/viaggiatreno/scraper.rb +94 -0
  15. data/lib/viaggiatreno/string_utils.rb +6 -0
  16. data/lib/viaggiatreno/train.rb +93 -0
  17. data/lib/viaggiatreno/train_state.rb +6 -0
  18. data/lib/viaggiatreno/train_stop.rb +26 -0
  19. data/lib/viaggiatreno/train_stop_state.rb +5 -0
  20. data/lib/viaggiatreno/version.rb +1 -2
  21. data/lib/viaggiatreno/viaggiatreno_urls.rb +14 -0
  22. data/lib/viaggiatreno/xpath_match_info.rb +9 -0
  23. data/spec/spec_helper.rb +17 -0
  24. data/spec/vcr_cassettes/Arrived_train_delay_0_.yml +538 -0
  25. data/spec/vcr_cassettes/Arrived_train_delay_negative_.yml +621 -0
  26. data/spec/vcr_cassettes/Arrived_train_delay_positive_.yml +680 -0
  27. data/spec/vcr_cassettes/Not_departed_train.yml +438 -0
  28. data/spec/vcr_cassettes/Running_train_delay_positive_.yml +468 -0
  29. data/spec/viaggiatreno/train_spec.rb +190 -0
  30. data/spec/viaggiatreno_spec.rb +9 -0
  31. data/viaggiatreno.gemspec +9 -8
  32. metadata +57 -25
  33. data/LICENSE.txt +0 -22
  34. data/lib/viaggiatreno/RegExpMatchInfo.rb +0 -23
  35. data/lib/viaggiatreno/Scraper.rb +0 -87
  36. data/lib/viaggiatreno/StopState.rb +0 -8
  37. data/lib/viaggiatreno/StringUtils.rb +0 -7
  38. data/lib/viaggiatreno/Train.rb +0 -92
  39. data/lib/viaggiatreno/TrainState.rb +0 -11
  40. data/lib/viaggiatreno/TrainStop.rb +0 -24
  41. data/lib/viaggiatreno/ViaggiatrenoURLs.rb +0 -17
  42. data/lib/viaggiatreno/XPathMatchInfo.rb +0 -19
@@ -1,8 +0,0 @@
1
- class StopState
2
- # train station status: already done ("DONE") or to be done ("TODO")
3
- @@DONE = "DONE"
4
- @@TODO = "TODO"
5
-
6
- def self.DONE() @@DONE end
7
- def self.TODO() @@TODO end
8
- end
@@ -1,7 +0,0 @@
1
- class StringUtils
2
- # utility method
3
- def self.remove_newlines_tabs_and_spaces(str)
4
- return str.content.gsub(/\r/, "").gsub(/\n/, "")\
5
- .gsub(/\t/, " ").gsub(/ +/, " ").strip
6
- end
7
- end
@@ -1,92 +0,0 @@
1
- require_relative 'Scraper.rb'
2
- require_relative 'TrainState.rb'
3
- require_relative 'TrainStop.rb'
4
-
5
- class Train
6
- attr_accessor :trainNumber, :trainName, :delay, :status, :lastUpdate, :state
7
-
8
- def initialize(trainNumber)
9
- @trainNumber = trainNumber
10
- @scraper = Scraper.new(trainNumber.to_s, self)
11
- self.update()
12
- end
13
-
14
- def update()
15
- @scraper.updateTrain()
16
- end
17
-
18
- def updateDetails()
19
- @trainStops = Array.new
20
- @scraper.updateTrainDetails()
21
- end
22
-
23
- def to_s
24
- return "#{@trainNumber} #{@trainName}: #{@status} state: #{@state}, \
25
- delay: #{@delay}, lastUpdate: #{@lastUpdate} #{@trainStops}"
26
- end
27
-
28
- def addStop(trainStop)
29
- @trainStops << trainStop
30
- end
31
-
32
- def trainStops()
33
- if @trainStops == nil
34
- self.updateDetails()
35
- end
36
- @trainStops
37
- end
38
-
39
- def departingStation()
40
- self.trainStops.first.trainStation.to_s
41
- end
42
-
43
- def arrivingStation()
44
- self.trainStops.last.trainStation.to_s
45
- end
46
-
47
- def scheduledDepartingTime()
48
- self.trainStops.first.scheduledStopTime.to_s
49
- end
50
-
51
- def scheduledArrivingTime()
52
- self.trainStops.last.scheduledStopTime.to_s
53
- end
54
-
55
- def actualDepartingTime()
56
- self.trainStops.first.actualStopTime.to_s
57
- end
58
-
59
- def actualArrivingTime()
60
- self.trainStops.last.actualStopTime.to_s
61
- end
62
-
63
- def scheduledStopTime(stationName)
64
- self.trainStops.each do |trainStop|
65
- if trainStop.trainStation.to_s == stationName
66
- return trainStop.scheduledStopTime.to_s
67
- end
68
- end
69
- end
70
-
71
- def actualStopTime(stationName)
72
- self.trainStops.each do |trainStop|
73
- if trainStop.trainStation.to_s == stationName
74
- return trainStop.actualStopTime.to_s
75
- end
76
- end
77
- end
78
-
79
- def lastStop()
80
- if self.trainStops[0].status.to_s != StopState.DONE
81
- return @trainStops[0].to_s
82
- end
83
- (self.trainStops.length-1).times do |i|
84
- if self.trainStops[i].status.to_s == StopState.DONE && \
85
- self.trainStops[i+1].status.to_s != StopState.DONE
86
- return self.trainStops[i].to_s
87
- end
88
- end
89
- return self.trainStops[self.trainStops.length-1].to_s
90
- end
91
- end
92
-
@@ -1,11 +0,0 @@
1
- class TrainState
2
- # Train status
3
- @@RUNNING = "TRAVELING"
4
- @@FINISHED = "ARRIVED"
5
- @@NOT_STARTED = "NOT DEPARTED"
6
-
7
- def self.RUNNING() @@RUNNING end
8
- def self.FINISHED() @@FINISHED end
9
- def self.NOT_STARTED() @@NOT_STARTED end
10
- end
11
-
@@ -1,24 +0,0 @@
1
- require_relative 'StopState'
2
-
3
- class TrainStop
4
- attr_accessor :trainStation, :scheduledStopTime, :actualStopTime, :status
5
-
6
- def initialize(trainStation, scheduledStopTime, actualStopTime, status)
7
- @trainStation = trainStation
8
- @scheduledStopTime = scheduledStopTime
9
- @actualStopTime = actualStopTime
10
- @status = status
11
- end
12
-
13
- def to_s
14
- retstr = ""
15
- if @status == StopState.DONE
16
- retstr += "[X] "
17
- elsif @status == StopState.TODO
18
- retstr += "[ ] "
19
- end
20
- retstr += "#{trainStation} = SCHEDULED: #{scheduledStopTime} EXPECTED: #{actualStopTime}"
21
- return retstr
22
- end
23
- end
24
-
@@ -1,17 +0,0 @@
1
- require_relative 'RegExpMatchInfo'
2
-
3
- class ViaggiatrenoURLs
4
- @@SITE_INFO_MAIN =
5
- "http://mobile.viaggiatreno.it/vt_pax_internet/mobile/numero?numeroTreno=" + \
6
- RegExpMatchInfo.STR_TRAIN_NUMBER_URL_REPLACE + \
7
- "&tipoRicerca=numero&lang=IT"
8
- @@SITE_INFO_DETAILS =
9
- "http://mobile.viaggiatreno.it/vt_pax_internet/mobile/scheda?dettaglio=visualizza&numeroTreno=" + \
10
- RegExpMatchInfo.STR_TRAIN_NUMBER_URL_REPLACE + \
11
- "&tipoRicerca=numero&lang=IT"
12
-
13
- def self.SITE_INFO_MAIN() @@SITE_INFO_MAIN end
14
- def self.SITE_INFO_DETAILS() @@SITE_INFO_DETAILS end
15
-
16
- end
17
-
@@ -1,19 +0,0 @@
1
- class XPathMatchInfo
2
- # xpath expression to retrieve train info
3
- @@XPATH_STATUS = '//div[@class="evidenziato"]/strong'
4
- @@XPATH_TRAIN_NAME = '//h1/text()'
5
- @@XPATH_DETAILS_GENERIC =
6
- '//div[@class="giaeffettuate"] | //div[@class="corpocentrale"]'
7
- @@XPATH_DETAILS_STATION_NAME = 'h2/text()'
8
- @@XPATH_DETAILS_SCHEDULED_STOP_TIME = 'p[1]/strong[1]/text()'
9
- @@XPATH_DETAILS_ACTUAL_STOP_TIME = 'p[2]/strong[1]/text()'
10
-
11
- def self.XPATH_STATUS() @@XPATH_STATUS end
12
- def self.XPATH_TRAIN_NAME() @@XPATH_TRAIN_NAME end
13
- def self.XPATH_DETAILS_GENERIC() @@XPATH_DETAILS_GENERIC end
14
- def self.XPATH_DETAILS_STATION_NAME() @@XPATH_DETAILS_STATION_NAME end
15
- def self.XPATH_DETAILS_SCHEDULED_STOP_TIME()
16
- @@XPATH_DETAILS_SCHEDULED_STOP_TIME end
17
- def self.XPATH_DETAILS_ACTUAL_STOP_TIME() @@XPATH_DETAILS_ACTUAL_STOP_TIME end
18
- end
19
-