rail_feeds 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (53) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +8 -1
  3. data/.travis.yml +17 -4
  4. data/CHANGELOG.md +12 -0
  5. data/README.md +11 -7
  6. data/doc/guides/National Rail/Knowledge Base/National Service Indicator.md +21 -0
  7. data/doc/guides/Network Rail/CORPUS.md +7 -3
  8. data/doc/guides/Network Rail/SMART.md +6 -2
  9. data/doc/guides/Network Rail/Schedule.md +4 -4
  10. data/lib/rail_feeds/credentials.rb +30 -0
  11. data/lib/rail_feeds/http_client.rb +56 -0
  12. data/lib/rail_feeds/logging.rb +0 -2
  13. data/lib/rail_feeds/national_rail/credentials.rb +11 -0
  14. data/lib/rail_feeds/national_rail/http_client.rb +45 -0
  15. data/lib/rail_feeds/national_rail/knowledge_base/national_service_indicator.rb +100 -0
  16. data/lib/rail_feeds/national_rail/knowledge_base.rb +8 -0
  17. data/lib/rail_feeds/national_rail.rb +9 -0
  18. data/lib/rail_feeds/network_rail/corpus.rb +5 -6
  19. data/lib/rail_feeds/network_rail/credentials.rb +0 -11
  20. data/lib/rail_feeds/network_rail/http_client.rb +8 -44
  21. data/lib/rail_feeds/network_rail/schedule/association.rb +2 -2
  22. data/lib/rail_feeds/network_rail/schedule/data.rb +3 -2
  23. data/lib/rail_feeds/network_rail/schedule/days.rb +1 -0
  24. data/lib/rail_feeds/network_rail/schedule/fetcher.rb +1 -2
  25. data/lib/rail_feeds/network_rail/schedule/header/json.rb +2 -2
  26. data/lib/rail_feeds/network_rail/schedule/header.rb +0 -3
  27. data/lib/rail_feeds/network_rail/schedule/parser/json.rb +0 -2
  28. data/lib/rail_feeds/network_rail/schedule/parser.rb +1 -4
  29. data/lib/rail_feeds/network_rail/schedule/tiploc.rb +2 -2
  30. data/lib/rail_feeds/network_rail/schedule/train_schedule/location.rb +1 -4
  31. data/lib/rail_feeds/network_rail/schedule/train_schedule.rb +8 -12
  32. data/lib/rail_feeds/network_rail/schedule.rb +3 -10
  33. data/lib/rail_feeds/network_rail/smart.rb +17 -17
  34. data/lib/rail_feeds/network_rail/stomp_client.rb +2 -3
  35. data/lib/rail_feeds/network_rail.rb +0 -7
  36. data/lib/rail_feeds/version.rb +1 -1
  37. data/lib/rail_feeds.rb +40 -4
  38. data/rail_feeds.gemspec +28 -23
  39. data/spec/rail_feeds/credentials_spec.rb +28 -1
  40. data/spec/rail_feeds/http_client_spec.rb +75 -0
  41. data/spec/rail_feeds/national_rail/credentials_spec.rb +13 -0
  42. data/spec/rail_feeds/national_rail/http_client_spec.rb +57 -0
  43. data/spec/rail_feeds/national_rail/knowledge_base/national_service_indicator_spec.rb +122 -0
  44. data/spec/rail_feeds/national_rail/knowledge_base_spec.rb +4 -0
  45. data/spec/rail_feeds/national_rail_spec.rb +7 -0
  46. data/spec/rail_feeds/network_rail/corpus_spec.rb +2 -2
  47. data/spec/rail_feeds/network_rail/credentials_spec.rb +3 -12
  48. data/spec/rail_feeds/network_rail/http_client_spec.rb +7 -75
  49. data/spec/rail_feeds/network_rail/schedule/data_spec.rb +1 -1
  50. data/spec/rail_feeds/network_rail/smart_spec.rb +2 -2
  51. data/spec/rail_feeds/network_rail/stomp_client_spec.rb +1 -1
  52. metadata +48 -9
  53. data/file +0 -0
@@ -0,0 +1,122 @@
1
+ # frozen_string_literal: true
2
+
3
+ describe RailFeeds::NationalRail::KnowledgeBase::NationalServiceIndicator do
4
+ let :xml do
5
+ <<~HEREDOC
6
+ <?xml version="1.0" encoding="utf-8"?>
7
+ <NSI xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://internal.nationalrail.co.uk/xml/XsdSchemas/External/Version4.0/nre-service-indicator-v4-0.xsd" xmlns="http://nationalrail.co.uk/xml/serviceindicator">
8
+ <TOC>
9
+ <TocCode>AW</TocCode>
10
+ <TocName>Arriva Trains Wales</TocName>
11
+ <Status>Good service</Status>
12
+ <StatusImage>icon-tick2.png</StatusImage>
13
+ <TwitterAccount>ArrivaTW</TwitterAccount>
14
+ <AdditionalInfo><![CDATA[Follow us on Twitter]]></AdditionalInfo>
15
+ </TOC>
16
+ <TOC>
17
+ <TocCode>WM</TocCode>
18
+ <TocName>West Midlands Railway</TocName>
19
+ <Status>Major delays on some routes</Status>
20
+ <StatusImage>icon-disruption.png</StatusImage>
21
+ <StatusDescription><![CDATA[An amended service is in operation]]></StatusDescription>
22
+ <ServiceGroup>
23
+ <GroupName>Aston</GroupName>
24
+ <CurrentDisruption>36DB32F7EB7F40ACACFF1D5CF7572D4C</CurrentDisruption>
25
+ <CustomDetail><![CDATA[Read about this disruption]]></CustomDetail>
26
+ <CustomURL>http://www.nationalrail.co.uk/</CustomURL>
27
+ </ServiceGroup>
28
+ <TwitterAccount>WestMidRailway</TwitterAccount>
29
+ <AdditionalInfo><![CDATA[Latest travel news]]></AdditionalInfo>
30
+ </TOC>
31
+ </NSI>
32
+ HEREDOC
33
+ end
34
+ let(:http_client) { double RailFeeds::NationalRail::HTTPClient }
35
+ let(:temp_file) { double Tempfile }
36
+
37
+
38
+ describe '::download' do
39
+ it 'Using default credentials' do
40
+ expect(RailFeeds::NationalRail::HTTPClient).to receive(:new)
41
+ .with(credentials: RailFeeds::NationalRail::Credentials).and_return(http_client)
42
+ expect(http_client).to receive(:download)
43
+ .with('darwin/api/staticfeeds/4.0/serviceIndicators', 'file')
44
+ described_class.download 'file'
45
+ end
46
+
47
+ it 'Using passed credentials' do
48
+ credentials = double RailFeeds::NationalRail::Credentials
49
+ expect(RailFeeds::NationalRail::HTTPClient).to receive(:new)
50
+ .with(credentials: credentials).and_return(http_client)
51
+ expect(http_client).to receive(:download)
52
+ described_class.download 'file', credentials
53
+ end
54
+ end
55
+
56
+ describe '::fetch' do
57
+ it 'Using default credentials' do
58
+ expect(RailFeeds::NationalRail::HTTPClient).to receive(:new)
59
+ .with(credentials: RailFeeds::NationalRail::Credentials).and_return(http_client)
60
+ expect(http_client).to receive(:fetch)
61
+ .with('darwin/api/staticfeeds/4.0/serviceIndicators').and_return(temp_file)
62
+ expect(described_class.fetch).to eq temp_file
63
+ end
64
+
65
+ it 'Using passed credentials' do
66
+ credentials = double RailFeeds::NationalRail::Credentials
67
+ expect(RailFeeds::NationalRail::HTTPClient).to receive(:new)
68
+ .with(credentials: credentials).and_return(http_client)
69
+ expect(http_client).to receive(:fetch).and_return(temp_file)
70
+ expect(described_class.fetch(credentials)).to eq temp_file
71
+ end
72
+ end
73
+
74
+ it '::load_data' do
75
+ expect(File).to receive(:read).with('filename').and_return(xml)
76
+ data = described_class.load_file('filename')
77
+
78
+ expect(data[0].code).to eq 'AW'
79
+ expect(data[0].name).to eq 'Arriva Trains Wales'
80
+ expect(data[0].twitter_account).to eq 'ArrivaTW'
81
+ expect(data[0].additional_info).to eq 'Follow us on Twitter'
82
+ expect(data[0].status.title).to eq 'Good service'
83
+ expect(data[0].status.description).to eq nil
84
+ expect(data[0].status.image).to eq 'icon-tick2.png'
85
+ expect(data[0].service_groups).to eq []
86
+
87
+ expect(data[1].code).to eq 'WM'
88
+ expect(data[1].name).to eq 'West Midlands Railway'
89
+ expect(data[1].twitter_account).to eq 'WestMidRailway'
90
+ expect(data[1].additional_info).to eq 'Latest travel news'
91
+ expect(data[1].status.title).to eq 'Major delays on some routes'
92
+ expect(data[1].status.description).to eq 'An amended service is in operation'
93
+ expect(data[1].status.image).to eq 'icon-disruption.png'
94
+ expect(data[1].service_groups[0].disruption_id).to eq '36DB32F7EB7F40ACACFF1D5CF7572D4C'
95
+ expect(data[1].service_groups[0].name).to eq 'Aston'
96
+ expect(data[1].service_groups[0].detail).to eq 'Read about this disruption'
97
+ expect(data[1].service_groups[0].url).to eq 'http://www.nationalrail.co.uk/'
98
+ end
99
+
100
+ it '::fetch_data' do
101
+ expect(described_class).to receive(:fetch)
102
+ .with(credentials: RailFeeds::NationalRail::Credentials)
103
+ .and_yield(temp_file)
104
+
105
+ expect(temp_file).to receive(:read).and_return(xml)
106
+ expect(described_class).to receive(:parse_xml).with(xml)
107
+ described_class.fetch_data
108
+ end
109
+
110
+ it 'Converts to string' do
111
+ expect(File).to receive(:read).with('filename').and_return(xml)
112
+ data = described_class.load_file('filename')
113
+ expect(data[0].to_s).to eq "AW - Arriva Trains Wales\n" \
114
+ "Good service - - icon-tick2.png\n\n" \
115
+ '@ArrivaTW - Follow us on Twitter'
116
+ expect(data[1].to_s).to eq "WM - West Midlands Railway\n" \
117
+ "Major delays on some routes - An amended service is in operation - icon-disruption.png\n" \
118
+ "Aston - Read about this disruption\n" \
119
+ "36DB32F7EB7F40ACACFF1D5CF7572D4C http://www.nationalrail.co.uk/\n" \
120
+ '@WestMidRailway - Latest travel news'
121
+ end
122
+ end
@@ -0,0 +1,4 @@
1
+ # frozen_string_literal: true
2
+
3
+ describe RailFeeds::NationalRail::KnowledgeBase do
4
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ describe RailFeeds::NationalRail do
4
+ it 'Has NatRailFeeds as an alias' do
5
+ expect(::NatRailFeeds).to be RailFeeds::NationalRail
6
+ end
7
+ end
@@ -26,7 +26,7 @@ describe RailFeeds::NetworkRail::CORPUS do
26
26
  expect(RailFeeds::NetworkRail::HTTPClient).to receive(:new)
27
27
  .with(credentials: credentials).and_return(http_client)
28
28
  expect(http_client).to receive(:download)
29
- described_class.download 'file', credentials: credentials
29
+ described_class.download 'file', credentials
30
30
  end
31
31
  end
32
32
 
@@ -47,7 +47,7 @@ describe RailFeeds::NetworkRail::CORPUS do
47
47
  expect(RailFeeds::NetworkRail::HTTPClient).to receive(:new)
48
48
  .with(credentials: credentials).and_return(http_client)
49
49
  expect(http_client).to receive(:fetch).and_return(temp_file)
50
- expect(described_class.fetch(credentials: credentials)).to eq temp_file
50
+ expect(described_class.fetch(credentials)).to eq temp_file
51
51
  end
52
52
  end
53
53
 
@@ -1,22 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  describe RailFeeds::NetworkRail::Credentials do
4
- subject { described_class.new username: 'user-i', password: 'pass-i' }
4
+ it 'Is a RailFeeds::Credentials' do
5
+ expect(described_class).to be < RailFeeds::Credentials
6
+ end
5
7
 
6
8
  it 'Has seperate values to RailFeeds::Credentials' do
7
9
  described_class.configure username: 'a', password: 'b'
8
10
  expect(described_class.username).to_not eq RailFeeds::Credentials.username
9
11
  expect(described_class.password).to_not eq RailFeeds::Credentials.password
10
12
  end
11
-
12
- describe 'Outputs an array' do
13
- it '::to_a' do
14
- described_class.configure username: 'user', password: 'pass'
15
- expect(described_class.to_a).to eq ['user', 'pass']
16
- end
17
-
18
- it '#to_a' do
19
- expect(subject.to_a).to eq ['user-i', 'pass-i']
20
- end
21
- end
22
13
  end
@@ -1,88 +1,20 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  describe RailFeeds::NetworkRail::HTTPClient do
4
- let(:temp_file) { double Tempfile }
5
- let(:uri) { double URI }
6
-
7
- describe '#download' do
8
- let(:file) { double File }
9
-
10
- it 'Saves the file' do
11
- expect(URI).to receive(:parse).with('https://datafeeds.networkrail.co.uk/path').and_return(uri)
12
- expect(uri).to receive(:open).and_return(temp_file)
13
- expect(File).to receive(:open).with('file', 'w').and_yield(file)
14
- expect(IO).to receive(:copy_stream).with(temp_file, file)
15
- subject.download('path', 'file')
16
- end
17
-
18
- it 'Adds credentials when getting path' do
19
- credentials = RailFeeds::NetworkRail::Credentials.new(
20
- username: 'user',
21
- password: 'pass'
22
- )
23
- expect(URI).to receive(:parse).and_return(uri)
24
- expect(uri).to receive(:open)
25
- .with(http_basic_authentication: ['user', 'pass'])
26
- .and_return(temp_file)
27
- expect(File).to receive(:open).and_yield(file)
28
- expect(IO).to receive(:copy_stream).with(temp_file, file)
29
- subject = described_class.new credentials: credentials
30
- subject.download('path', 'file')
31
- end
4
+ it 'Is a RailFeeds::HTTPClient' do
5
+ expect(described_class).to be < RailFeeds::HTTPClient
6
+ end
32
7
 
33
- it 'Handles special characters in credentials' do
34
- credentials = RailFeeds::NetworkRail::Credentials.new(
35
- username: 'a@example.com',
36
- password: '!:@'
37
- )
38
- expect(URI).to receive(:parse).and_return(uri)
39
- expect(uri).to receive(:open).and_return(temp_file)
40
- expect(File).to receive(:open).and_yield(file)
41
- expect(IO).to receive(:copy_stream).with(temp_file, file)
42
- subject = described_class.new credentials: credentials
43
- expect { subject.download('path', 'file') }.to_not raise_error
44
- end
8
+ it 'has correct default credentials' do
9
+ expect(subject.send(:credentials)).to eq RailFeeds::NetworkRail::Credentials
45
10
  end
46
11
 
47
12
  describe '#fetch' do
48
- it 'Yields what uri.open does' do
13
+ it 'Adds server to path then delegates to super' do
14
+ uri = double URI
49
15
  expect(URI).to receive(:parse).with('https://datafeeds.networkrail.co.uk/path').and_return(uri)
50
- expect(uri).to receive(:open).and_return(temp_file)
51
- expect { |a| subject.fetch('path', &a) }.to yield_with_args(temp_file)
52
- end
53
-
54
- it 'Adds credentials when getting path' do
55
- credentials = RailFeeds::NetworkRail::Credentials.new(
56
- username: 'user',
57
- password: 'pass'
58
- )
59
- expect(URI).to receive(:parse).and_return(uri)
60
16
  expect(uri).to receive(:open)
61
- .with(http_basic_authentication: ['user', 'pass'])
62
- .and_return(temp_file)
63
- subject = described_class.new credentials: credentials
64
17
  subject.fetch('path') {}
65
18
  end
66
-
67
- it 'Handles special characters in credentials' do
68
- credentials = RailFeeds::NetworkRail::Credentials.new(
69
- username: 'a@example.com',
70
- password: '!:@'
71
- )
72
- expect(URI).to receive(:parse).and_return(uri)
73
- expect(uri).to receive(:open).and_return(temp_file)
74
- subject = described_class.new credentials: credentials
75
- expect { subject.fetch('path') {} }.to_not raise_error
76
- end
77
- end
78
-
79
- describe '#fetch_unzipped' do
80
- it 'Returns what Zlib::GzipReader.open does' do
81
- reader = double Zlib::GzipReader
82
- expect(subject).to receive(:fetch).with('path').and_yield(temp_file)
83
- expect(temp_file).to receive(:path).and_return('gz_file_path')
84
- expect(Zlib::GzipReader).to receive(:open).with('gz_file_path').and_return(reader)
85
- expect { |a| subject.fetch_unzipped('path', &a) }.to yield_with_args(reader)
86
- end
87
19
  end
88
20
  end
@@ -7,7 +7,7 @@ class DummyParserForDataTests
7
7
  @events = {}
8
8
  end
9
9
 
10
- def parse_cif_file(file)
10
+ def parse_file(file)
11
11
  filename = File.join RSPEC_FIXTURES, 'network_rail', 'schedule', 'data', "#{file}.yaml"
12
12
  YAML.load(File.read(filename)).each do |event, data|
13
13
  if data.nil?
@@ -31,7 +31,7 @@ describe RailFeeds::NetworkRail::SMART do
31
31
  expect(RailFeeds::NetworkRail::HTTPClient).to receive(:new)
32
32
  .with(credentials: credentials).and_return(http_client)
33
33
  expect(http_client).to receive(:download)
34
- described_class.download 'file', credentials: credentials
34
+ described_class.download 'file', credentials
35
35
  end
36
36
  end
37
37
 
@@ -52,7 +52,7 @@ describe RailFeeds::NetworkRail::SMART do
52
52
  expect(RailFeeds::NetworkRail::HTTPClient).to receive(:new)
53
53
  .with(credentials: credentials).and_return(http_client)
54
54
  expect(http_client).to receive(:fetch).and_return(temp_file)
55
- expect(described_class.fetch(credentials: credentials)).to eq temp_file
55
+ expect(described_class.fetch(credentials)).to eq temp_file
56
56
  end
57
57
  end
58
58
 
@@ -132,7 +132,7 @@ describe RailFeeds::NetworkRail::StompClient do
132
132
  end
133
133
  end
134
134
 
135
- describe 'Delegates methods to Stomp::Client' do
135
+ describe 'Delegates methods to ::Stomp::Client' do
136
136
  delegates = %i[
137
137
  ack acknowledge nack unreceive create_error_handler open? closed? join
138
138
  running? begin abort commit unsubscribe uuid poll hbsend_interval
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rail_feeds
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Robert Gauld
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-07-12 00:00:00.000000000 Z
11
+ date: 2019-04-22 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: nokogiri
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.8'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.8'
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: stomp
15
29
  requirement: !ruby/object:Gem::Requirement
@@ -126,14 +140,28 @@ dependencies:
126
140
  requirements:
127
141
  - - "~>"
128
142
  - !ruby/object:Gem::Version
129
- version: 0.57.1
143
+ version: '0.67'
144
+ type: :development
145
+ prerelease: false
146
+ version_requirements: !ruby/object:Gem::Requirement
147
+ requirements:
148
+ - - "~>"
149
+ - !ruby/object:Gem::Version
150
+ version: '0.67'
151
+ - !ruby/object:Gem::Dependency
152
+ name: rubocop-performance
153
+ requirement: !ruby/object:Gem::Requirement
154
+ requirements:
155
+ - - "~>"
156
+ - !ruby/object:Gem::Version
157
+ version: '1.1'
130
158
  type: :development
131
159
  prerelease: false
132
160
  version_requirements: !ruby/object:Gem::Requirement
133
161
  requirements:
134
162
  - - "~>"
135
163
  - !ruby/object:Gem::Version
136
- version: 0.57.1
164
+ version: '1.1'
137
165
  - !ruby/object:Gem::Dependency
138
166
  name: simplecov
139
167
  requirement: !ruby/object:Gem::Requirement
@@ -181,13 +209,19 @@ files:
181
209
  - README.md
182
210
  - Rakefile
183
211
  - doc/guides/Logging.md
212
+ - doc/guides/National Rail/Knowledge Base/National Service Indicator.md
184
213
  - doc/guides/Network Rail/CORPUS.md
185
214
  - doc/guides/Network Rail/SMART.md
186
215
  - doc/guides/Network Rail/Schedule.md
187
- - file
188
216
  - lib/rail_feeds.rb
189
217
  - lib/rail_feeds/credentials.rb
218
+ - lib/rail_feeds/http_client.rb
190
219
  - lib/rail_feeds/logging.rb
220
+ - lib/rail_feeds/national_rail.rb
221
+ - lib/rail_feeds/national_rail/credentials.rb
222
+ - lib/rail_feeds/national_rail/http_client.rb
223
+ - lib/rail_feeds/national_rail/knowledge_base.rb
224
+ - lib/rail_feeds/national_rail/knowledge_base/national_service_indicator.rb
191
225
  - lib/rail_feeds/network_rail.rb
192
226
  - lib/rail_feeds/network_rail/corpus.rb
193
227
  - lib/rail_feeds/network_rail/credentials.rb
@@ -225,7 +259,13 @@ files:
225
259
  - spec/fixtures/network_rail/schedule/parser/train_delete.json
226
260
  - spec/fixtures/network_rail/schedule/train_schedule/json-data.yaml
227
261
  - spec/rail_feeds/credentials_spec.rb
262
+ - spec/rail_feeds/http_client_spec.rb
228
263
  - spec/rail_feeds/logging_spec.rb
264
+ - spec/rail_feeds/national_rail/credentials_spec.rb
265
+ - spec/rail_feeds/national_rail/http_client_spec.rb
266
+ - spec/rail_feeds/national_rail/knowledge_base/national_service_indicator_spec.rb
267
+ - spec/rail_feeds/national_rail/knowledge_base_spec.rb
268
+ - spec/rail_feeds/national_rail_spec.rb
229
269
  - spec/rail_feeds/network_rail/corpus_spec.rb
230
270
  - spec/rail_feeds/network_rail/credentials_spec.rb
231
271
  - spec/rail_feeds/network_rail/http_client_spec.rb
@@ -267,15 +307,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
267
307
  requirements:
268
308
  - - ">="
269
309
  - !ruby/object:Gem::Version
270
- version: '0'
310
+ version: '2.4'
271
311
  required_rubygems_version: !ruby/object:Gem::Requirement
272
312
  requirements:
273
313
  - - ">="
274
314
  - !ruby/object:Gem::Version
275
- version: '0'
315
+ version: 2.6.14
276
316
  requirements: []
277
- rubyforge_project:
278
- rubygems_version: 2.7.6
317
+ rubygems_version: 3.0.3
279
318
  signing_key:
280
319
  specification_version: 4
281
320
  summary: Make use of the various open data rails feeds in the UK.
data/file DELETED
File without changes