rail_feeds 0.0.1 → 0.0.2

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 (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