rail_feeds 0.0.1

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 (87) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +23 -0
  3. data/.rspec +3 -0
  4. data/.rubocop.yml +31 -0
  5. data/.travis.yml +26 -0
  6. data/CHANGELOG.md +3 -0
  7. data/Gemfile +6 -0
  8. data/Guardfile +25 -0
  9. data/LICENSE.md +32 -0
  10. data/README.md +77 -0
  11. data/Rakefile +3 -0
  12. data/doc/guides/Logging.md +13 -0
  13. data/doc/guides/Network Rail/CORPUS.md +34 -0
  14. data/doc/guides/Network Rail/SMART.md +39 -0
  15. data/doc/guides/Network Rail/Schedule.md +138 -0
  16. data/file +0 -0
  17. data/lib/rail_feeds/credentials.rb +45 -0
  18. data/lib/rail_feeds/logging.rb +51 -0
  19. data/lib/rail_feeds/network_rail/corpus.rb +77 -0
  20. data/lib/rail_feeds/network_rail/credentials.rb +22 -0
  21. data/lib/rail_feeds/network_rail/http_client.rb +57 -0
  22. data/lib/rail_feeds/network_rail/schedule/association.rb +208 -0
  23. data/lib/rail_feeds/network_rail/schedule/data.rb +215 -0
  24. data/lib/rail_feeds/network_rail/schedule/days.rb +95 -0
  25. data/lib/rail_feeds/network_rail/schedule/fetcher.rb +193 -0
  26. data/lib/rail_feeds/network_rail/schedule/header/cif.rb +102 -0
  27. data/lib/rail_feeds/network_rail/schedule/header/json.rb +79 -0
  28. data/lib/rail_feeds/network_rail/schedule/header.rb +22 -0
  29. data/lib/rail_feeds/network_rail/schedule/parser/cif.rb +141 -0
  30. data/lib/rail_feeds/network_rail/schedule/parser/json.rb +87 -0
  31. data/lib/rail_feeds/network_rail/schedule/parser.rb +108 -0
  32. data/lib/rail_feeds/network_rail/schedule/stp_indicator.rb +72 -0
  33. data/lib/rail_feeds/network_rail/schedule/tiploc.rb +100 -0
  34. data/lib/rail_feeds/network_rail/schedule/train_schedule/change_en_route.rb +158 -0
  35. data/lib/rail_feeds/network_rail/schedule/train_schedule/location/intermediate.rb +119 -0
  36. data/lib/rail_feeds/network_rail/schedule/train_schedule/location/origin.rb +91 -0
  37. data/lib/rail_feeds/network_rail/schedule/train_schedule/location/terminating.rb +72 -0
  38. data/lib/rail_feeds/network_rail/schedule/train_schedule/location.rb +76 -0
  39. data/lib/rail_feeds/network_rail/schedule/train_schedule.rb +392 -0
  40. data/lib/rail_feeds/network_rail/schedule.rb +33 -0
  41. data/lib/rail_feeds/network_rail/smart.rb +186 -0
  42. data/lib/rail_feeds/network_rail/stomp_client.rb +77 -0
  43. data/lib/rail_feeds/network_rail.rb +16 -0
  44. data/lib/rail_feeds/version.rb +14 -0
  45. data/lib/rail_feeds.rb +10 -0
  46. data/rail_feeds.gemspec +32 -0
  47. data/spec/fixtures/network_rail/schedule/data/full.yaml +60 -0
  48. data/spec/fixtures/network_rail/schedule/data/starting.yaml +131 -0
  49. data/spec/fixtures/network_rail/schedule/data/update-gap.yaml +10 -0
  50. data/spec/fixtures/network_rail/schedule/data/update-next.yaml +13 -0
  51. data/spec/fixtures/network_rail/schedule/data/update-old.yaml +10 -0
  52. data/spec/fixtures/network_rail/schedule/data/update.yaml +112 -0
  53. data/spec/fixtures/network_rail/schedule/parser/train_create.json +1 -0
  54. data/spec/fixtures/network_rail/schedule/parser/train_delete.json +1 -0
  55. data/spec/fixtures/network_rail/schedule/train_schedule/json-data.yaml +67 -0
  56. data/spec/rail_feeds/credentials_spec.rb +46 -0
  57. data/spec/rail_feeds/logging_spec.rb +81 -0
  58. data/spec/rail_feeds/network_rail/corpus_spec.rb +92 -0
  59. data/spec/rail_feeds/network_rail/credentials_spec.rb +22 -0
  60. data/spec/rail_feeds/network_rail/http_client_spec.rb +88 -0
  61. data/spec/rail_feeds/network_rail/schedule/association_spec.rb +205 -0
  62. data/spec/rail_feeds/network_rail/schedule/data_spec.rb +219 -0
  63. data/spec/rail_feeds/network_rail/schedule/days_shared.rb +99 -0
  64. data/spec/rail_feeds/network_rail/schedule/days_spec.rb +4 -0
  65. data/spec/rail_feeds/network_rail/schedule/fetcher_spec.rb +228 -0
  66. data/spec/rail_feeds/network_rail/schedule/header/cif_spec.rb +72 -0
  67. data/spec/rail_feeds/network_rail/schedule/header/json_spec.rb +51 -0
  68. data/spec/rail_feeds/network_rail/schedule/header_spec.rb +19 -0
  69. data/spec/rail_feeds/network_rail/schedule/parser/cif_spec.rb +197 -0
  70. data/spec/rail_feeds/network_rail/schedule/parser/json_spec.rb +172 -0
  71. data/spec/rail_feeds/network_rail/schedule/parser_spec.rb +34 -0
  72. data/spec/rail_feeds/network_rail/schedule/stp_indicator_shared.rb +49 -0
  73. data/spec/rail_feeds/network_rail/schedule/stp_indicator_spec.rb +4 -0
  74. data/spec/rail_feeds/network_rail/schedule/tiploc_spec.rb +77 -0
  75. data/spec/rail_feeds/network_rail/schedule/train_schedule/change_en_route_spec.rb +121 -0
  76. data/spec/rail_feeds/network_rail/schedule/train_schedule/location/intermediate_spec.rb +95 -0
  77. data/spec/rail_feeds/network_rail/schedule/train_schedule/location/origin_spec.rb +87 -0
  78. data/spec/rail_feeds/network_rail/schedule/train_schedule/location/terminating_spec.rb +81 -0
  79. data/spec/rail_feeds/network_rail/schedule/train_schedule/location_spec.rb +35 -0
  80. data/spec/rail_feeds/network_rail/schedule/train_schedule_spec.rb +284 -0
  81. data/spec/rail_feeds/network_rail/schedule_spec.rb +41 -0
  82. data/spec/rail_feeds/network_rail/smart_spec.rb +194 -0
  83. data/spec/rail_feeds/network_rail/stomp_client_spec.rb +151 -0
  84. data/spec/rail_feeds/network_rail_spec.rb +7 -0
  85. data/spec/rail_feeds_spec.rb +11 -0
  86. data/spec/spec_helper.rb +47 -0
  87. metadata +282 -0
@@ -0,0 +1,194 @@
1
+ # frozen_string_literal: true
2
+
3
+ describe RailFeeds::NetworkRail::SMART do
4
+ let :json do
5
+ '{"BERTHDATA":[{"ROUTE":"2","STANME":"NEWBRGH","BERTHOFFSET":"0","EVENT":"B","COMM' \
6
+ 'ENT":"17/02/2008","PLATFORM":"5","TD":"EA","FROMBERTH":"B674","TOBERTH":"B672","S' \
7
+ 'TANOX":"03211","STEPTYPE":"B","TOLINE":"F","FROMLINE":"S"},{"ROUTE":"","STANME":"' \
8
+ 'DMOORCTRL","BERTHOFFSET":"+60","EVENT":"C","COMMENT":"Migrated on 8/6/2005","PLAT' \
9
+ 'FORM":"","TD":"A2","FROMBERTH":"0759","TOBERTH":"0808","STANOX":"89748","STEPTYPE' \
10
+ '":"","TOLINE":"","FROMLINE":""},{"ROUTE":"","STANME":"","BERTHOFFSET":"","EVENT":' \
11
+ '"","COMMENT":"","PLATFORM":"","TD":"","FROMBERTH":"","TOBERTH":"","STANOX":"","ST' \
12
+ 'EPTYPE":"","TOLINE":"","FROMLINE":""}]}'
13
+ end
14
+ let(:http_client) { double RailFeeds::NetworkRail::HTTPClient }
15
+ let(:reader) { double Zlib::GzipReader }
16
+
17
+ describe '::download' do
18
+ let(:http_client) { double RailFeeds::NetworkRail::HTTPClient }
19
+ let(:temp_file) { double Tempfile }
20
+
21
+ it 'Using default credentials' do
22
+ expect(RailFeeds::NetworkRail::HTTPClient).to receive(:new)
23
+ .with(credentials: RailFeeds::NetworkRail::Credentials).and_return(http_client)
24
+ expect(http_client).to receive(:download)
25
+ .with('ntrod/SupportingFileAuthenticate?type=SMART', 'file')
26
+ described_class.download 'file'
27
+ end
28
+
29
+ it 'Using passed credentials' do
30
+ credentials = double RailFeeds::NetworkRail::Credentials
31
+ expect(RailFeeds::NetworkRail::HTTPClient).to receive(:new)
32
+ .with(credentials: credentials).and_return(http_client)
33
+ expect(http_client).to receive(:download)
34
+ described_class.download 'file', credentials: credentials
35
+ end
36
+ end
37
+
38
+ describe '::fetch' do
39
+ let(:http_client) { double RailFeeds::NetworkRail::HTTPClient }
40
+ let(:temp_file) { double Tempfile }
41
+
42
+ it 'Using default credentials' do
43
+ expect(RailFeeds::NetworkRail::HTTPClient).to receive(:new)
44
+ .with(credentials: RailFeeds::NetworkRail::Credentials).and_return(http_client)
45
+ expect(http_client).to receive(:fetch)
46
+ .with('ntrod/SupportingFileAuthenticate?type=SMART').and_return(temp_file)
47
+ expect(described_class.fetch).to eq temp_file
48
+ end
49
+
50
+ it 'Using passed credentials' do
51
+ credentials = double RailFeeds::NetworkRail::Credentials
52
+ expect(RailFeeds::NetworkRail::HTTPClient).to receive(:new)
53
+ .with(credentials: credentials).and_return(http_client)
54
+ expect(http_client).to receive(:fetch).and_return(temp_file)
55
+ expect(described_class.fetch(credentials: credentials)).to eq temp_file
56
+ end
57
+ end
58
+
59
+ describe '::load_file' do
60
+ it 'json file' do
61
+ expect(Zlib::GzipReader).to receive(:open).with('filename') { fail Zlib::GzipFile::Error }
62
+ expect(File).to receive(:read).with('filename').and_return(json)
63
+ data = described_class.load_file('filename')
64
+ expect(data[0].td_area).to eq 'EA'
65
+ expect(data[0].from_berth).to eq 'B674'
66
+ expect(data[0].to_berth).to eq 'B672'
67
+ expect(data[0].from_line).to eq 'S'
68
+ expect(data[0].to_line).to eq 'F'
69
+ expect(data[0].trust_offset).to eq 0
70
+ expect(data[0].platform).to eq '5'
71
+ expect(data[0].event_type).to eq :depart
72
+ expect(data[0].event_direction).to eq :up
73
+ expect(data[0].route).to eq '2'
74
+ expect(data[0].stanox).to eq 3211
75
+ expect(data[0].stanox_name).to eq 'NEWBRGH'
76
+ expect(data[0].step_type).to eq :between
77
+ expect(data[0].comment).to eq '17/02/2008'
78
+ expect(data[1].trust_offset).to eq 60
79
+ expect(data[2].td_area).to be_nil
80
+ expect(data[2].from_berth).to be_nil
81
+ expect(data[2].to_berth).to be_nil
82
+ expect(data[2].from_line).to be_nil
83
+ expect(data[2].to_line).to be_nil
84
+ expect(data[2].trust_offset).to eq 0
85
+ expect(data[2].platform).to be_nil
86
+ expect(data[2].event_type).to be_nil
87
+ expect(data[2].event_direction).to be_nil
88
+ expect(data[2].route).to be_nil
89
+ expect(data[2].stanox).to be_nil
90
+ expect(data[2].stanox_name).to be_nil
91
+ expect(data[2].step_type).to be_nil
92
+ expect(data[2].comment).to be_nil
93
+ end
94
+
95
+ it 'json.gz file' do
96
+ expect(Zlib::GzipReader).to receive(:open).with('filename')
97
+ .and_yield(StringIO.new(json))
98
+ expect(described_class.load_file('filename').count).to eq 3
99
+ end
100
+ end
101
+
102
+ it '::build_berths' do
103
+ # For the trackplan:
104
+ # Down ---> Up
105
+ # --A----B----C--
106
+ # \--D-->-E--
107
+ # \-F-<-/
108
+ # And therefore the steps:
109
+ steps = [
110
+ RailFeeds::NetworkRail::SMART::Step.new('area', 'A', 'B', :between, :up), # 0
111
+ RailFeeds::NetworkRail::SMART::Step.new('area', 'A', 'D', :between, :up), # 1
112
+ RailFeeds::NetworkRail::SMART::Step.new('area', 'A', 'F', :between, :up), # 2
113
+ RailFeeds::NetworkRail::SMART::Step.new('area', 'B', 'C', :between, :up), # 3
114
+ RailFeeds::NetworkRail::SMART::Step.new('area', 'D', 'E', :between, :up), # 4
115
+ RailFeeds::NetworkRail::SMART::Step.new('area', 'B', 'A', :between, :down), # 5
116
+ RailFeeds::NetworkRail::SMART::Step.new('area', 'D', 'A', :between, :down), # 6
117
+ RailFeeds::NetworkRail::SMART::Step.new('area', 'F', 'A', :between, :down), # 7
118
+ RailFeeds::NetworkRail::SMART::Step.new('area', 'C', 'B', :between, :down), # 8
119
+ RailFeeds::NetworkRail::SMART::Step.new('area', 'E', 'F', :between, :down) # 9
120
+ ]
121
+
122
+ berths = described_class.build_berths(steps)['area']
123
+ expect(berths['A'].id).to eq 'A'
124
+ expect(berths['A'].up_steps).to match_array steps.values_at(0, 1, 2, 5, 6, 7)
125
+ expect(berths['A'].down_steps).to match_array []
126
+ expect(berths['A'].up_berths).to match_array ['B', 'D', 'F']
127
+ expect(berths['A'].down_berths).to match_array []
128
+ expect(berths['B'].id).to eq 'B'
129
+ expect(berths['B'].up_steps).to match_array steps.values_at(3, 8)
130
+ expect(berths['B'].down_steps).to match_array steps.values_at(5, 0)
131
+ expect(berths['B'].up_berths).to match_array ['C']
132
+ expect(berths['B'].down_berths).to match_array ['A']
133
+ expect(berths['C'].id).to eq 'C'
134
+ expect(berths['C'].up_steps).to match_array []
135
+ expect(berths['C'].down_steps).to match_array steps.values_at(8, 3)
136
+ expect(berths['C'].up_berths).to match_array []
137
+ expect(berths['C'].down_berths).to match_array ['B']
138
+ expect(berths['D'].id).to eq 'D'
139
+ expect(berths['D'].up_steps).to match_array steps.values_at(4)
140
+ expect(berths['D'].down_steps).to match_array steps.values_at(6, 1)
141
+ expect(berths['D'].up_berths).to match_array ['E']
142
+ expect(berths['D'].down_berths).to match_array ['A']
143
+ expect(berths['E'].id).to eq 'E'
144
+ expect(berths['E'].up_steps).to match_array []
145
+ expect(berths['E'].down_steps).to match_array steps.values_at(4, 9)
146
+ expect(berths['E'].up_berths).to match_array []
147
+ expect(berths['E'].down_berths).to match_array ['F']
148
+ expect(berths['F'].id).to eq 'F'
149
+ expect(berths['F'].up_steps).to match_array steps.values_at(9)
150
+ expect(berths['F'].down_steps).to match_array steps.values_at(2, 7)
151
+ expect(berths['F'].up_berths).to match_array []
152
+ expect(berths['F'].down_berths).to match_array ['A']
153
+ end
154
+
155
+ it '::fetch_data' do
156
+ expect(RailFeeds::NetworkRail::HTTPClient)
157
+ .to receive(:new).with(credentials: RailFeeds::NetworkRail::Credentials)
158
+ .and_return(http_client)
159
+ expect(http_client).to receive(:fetch_unzipped)
160
+ .with('ntrod/SupportingFileAuthenticate?type=SMART')
161
+ .and_yield(reader)
162
+ expect(reader).to receive(:read).and_return(json)
163
+ expect(described_class.fetch_data.count).to eq 3
164
+ end
165
+
166
+ describe 'Helping methods' do
167
+ it '::event_type' do
168
+ expect(described_class.send(:event_type, 'A')).to eq :arrive
169
+ expect(described_class.send(:event_type, 'B')).to eq :depart
170
+ expect(described_class.send(:event_type, 'C')).to eq :arrive
171
+ expect(described_class.send(:event_type, 'D')).to eq :depart
172
+ expect(described_class.send(:event_type, 'Z')).to be_nil
173
+ end
174
+
175
+ it '::event_direction' do
176
+ expect(described_class.send(:event_direction, 'A')).to eq :up
177
+ expect(described_class.send(:event_direction, 'B')).to eq :up
178
+ expect(described_class.send(:event_direction, 'C')).to eq :down
179
+ expect(described_class.send(:event_direction, 'D')).to eq :down
180
+ expect(described_class.send(:event_direction, 'Z')).to be_nil
181
+ end
182
+
183
+ it '::step_type' do
184
+ expect(described_class.send(:step_type, 'B')).to eq :between
185
+ expect(described_class.send(:step_type, 'F')).to eq :from
186
+ expect(described_class.send(:step_type, 'T')).to eq :to
187
+ expect(described_class.send(:step_type, 'D')).to eq :intermediate_first
188
+ expect(described_class.send(:step_type, 'C')).to eq :clearout
189
+ expect(described_class.send(:step_type, 'I')).to eq :interpose
190
+ expect(described_class.send(:step_type, 'E')).to eq :intermediate
191
+ expect(described_class.send(:step_type, 'Z')).to be_nil
192
+ end
193
+ end
194
+ end
@@ -0,0 +1,151 @@
1
+ # frozen_string_literal: true
2
+
3
+ describe RailFeeds::NetworkRail::StompClient do
4
+ before :each do
5
+ RailFeeds::NetworkRail::Credentials.configure(
6
+ username: 'a',
7
+ password: 'b'
8
+ )
9
+ end
10
+
11
+ describe 'Sets correct options when delegating #connect' do
12
+ let(:logger) { double Logger }
13
+
14
+ it 'With no credentials passed' do
15
+ stomp_client = double Stomp::Client
16
+ options = {
17
+ hosts: [{
18
+ host: 'datafeeds.networkrail.co.uk',
19
+ port: '61618',
20
+ login: 'a',
21
+ password: 'b'
22
+ }],
23
+ connect_headers: {
24
+ 'host' => 'datafeeds.networkrail.co.uk',
25
+ 'client-id' => 'a',
26
+ 'accept-version' => '1.1',
27
+ 'heart-beat' => '5000,10000'
28
+ },
29
+ logger: logger
30
+ }
31
+ subject = described_class.new logger: logger
32
+ expect(Stomp::Client).to receive(:new).with(options).and_return(stomp_client)
33
+ subject.connect
34
+ end
35
+
36
+ it 'With credentials passed' do
37
+ credentials = RailFeeds::NetworkRail::Credentials.new(
38
+ username: 'A',
39
+ password: 'B'
40
+ )
41
+ stomp_client = double Stomp::Client
42
+ options = {
43
+ hosts: [{
44
+ host: 'datafeeds.networkrail.co.uk',
45
+ port: '61618',
46
+ login: 'A',
47
+ password: 'B'
48
+ }],
49
+ connect_headers: {
50
+ 'host' => 'datafeeds.networkrail.co.uk',
51
+ 'client-id' => 'A',
52
+ 'accept-version' => '1.1',
53
+ 'heart-beat' => '5000,10000'
54
+ },
55
+ logger: logger
56
+ }
57
+ subject = described_class.new credentials: credentials, logger: logger
58
+ expect(Stomp::Client).to receive(:new).with(options).and_return(stomp_client)
59
+ subject.connect
60
+ end
61
+ end
62
+
63
+ describe 'Sets correct options when delegating #subscribe' do
64
+ let(:stomp_client) { double Stomp::Client }
65
+
66
+ before :each do
67
+ allow(Socket).to receive(:gethostname).and_return('hostname')
68
+ allow(stomp_client).to receive(:uuid).and_return('uuid')
69
+ expect(Stomp::Client).to receive(:new).and_return(stomp_client)
70
+ end
71
+
72
+ describe 'When connected' do
73
+ before :each do
74
+ subject.connect
75
+ allow(stomp_client).to receive(:closed?).and_return(false)
76
+ end
77
+
78
+ it 'No headers passes' do
79
+ headers = {
80
+ 'activemq.subscriptionName' => 'hostname+topic',
81
+ 'id' => 'uuid',
82
+ 'ack' => 'client'
83
+ }
84
+ expect(stomp_client).to receive(:subscribe).with('/topic/topic', headers)
85
+ subject.subscribe('topic') { |m| puts m }
86
+ end
87
+
88
+ it 'Appends to added headers' do
89
+ headers = {
90
+ 'activemq.subscriptionName' => 'hostname+topic',
91
+ 'id' => 'uuid',
92
+ 'ack' => 'client',
93
+ 'test' => 'TEST'
94
+ }
95
+ expect(stomp_client).to receive(:subscribe).with('/topic/topic', headers)
96
+ subject.subscribe('topic', 'test' => 'TEST') { |m| puts m }
97
+ end
98
+
99
+ it "Doesn't overwrite passed headers" do
100
+ headers = {
101
+ 'activemq.subscriptionName' => 'a',
102
+ 'id' => 'b',
103
+ 'ack' => 'c'
104
+ }
105
+ expect(stomp_client).to receive(:subscribe).with('/topic/topic', headers)
106
+ subject.subscribe('topic', headers) { |m| puts m }
107
+ end
108
+ end
109
+
110
+ it 'When not connected' do
111
+ headers = {
112
+ 'activemq.subscriptionName' => 'hostname+topic',
113
+ 'id' => 'uuid',
114
+ 'ack' => 'client'
115
+ }
116
+ expect(stomp_client).to receive(:subscribe).with('/topic/topic', headers)
117
+ expect { subject.subscribe('topic') { |m| puts m } }.to_not raise_error
118
+ end
119
+ end
120
+
121
+ describe '#disconnect delegates #close' do
122
+ it 'When connected' do
123
+ stomp_client = double Stomp::Client
124
+ expect(Stomp::Client).to receive(:new).and_return(stomp_client)
125
+ subject.connect
126
+ expect(stomp_client).to receive(:close)
127
+ subject.disconnect
128
+ end
129
+
130
+ it 'When not connected' do
131
+ expect { subject.disconnect }.to_not raise_error
132
+ end
133
+ end
134
+
135
+ describe 'Delegates methods to Stomp::Client' do
136
+ delegates = %i[
137
+ ack acknowledge nack unreceive create_error_handler open? closed? join
138
+ running? begin abort commit unsubscribe uuid poll hbsend_interval
139
+ hbrecv_interval hbsend_count hbrecv_count
140
+ ]
141
+ delegates.each do |method|
142
+ it method do
143
+ stomp_client = double Stomp::Client
144
+ expect(Stomp::Client).to receive(:new).and_return(stomp_client)
145
+ expect(stomp_client).to receive(method)
146
+ subject.connect
147
+ subject.send method
148
+ end
149
+ end
150
+ end
151
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ describe RailFeeds::NetworkRail do
4
+ it 'Has NetRailFeeds as an alias' do
5
+ expect(::NetRailFeeds).to be RailFeeds::NetworkRail
6
+ end
7
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ describe RailFeeds do
4
+ it 'Has a version' do
5
+ expect(RailFeeds::Version).to_not be_nil
6
+ expect(RailFeeds::Version::MAJOR).to_not be_nil
7
+ expect(RailFeeds::Version::MINOR).to_not be_nil
8
+ expect(RailFeeds::Version::PATCH).to_not be_nil
9
+ expect(RailFeeds::Version.to_s).to_not be_empty
10
+ end
11
+ end
@@ -0,0 +1,47 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'timecop'
4
+ require 'yaml'
5
+
6
+ require 'simplecov'
7
+ SimpleCov.coverage_dir(File.join('tmp', 'coverage'))
8
+ SimpleCov.start do
9
+ add_filter 'spec/'
10
+ end
11
+
12
+ require 'coveralls'
13
+ Coveralls.wear! if ENV['TRAVIS']
14
+
15
+ RSPEC_ROOT = File.dirname __FILE__
16
+ RSPEC_FIXTURES = File.join RSPEC_ROOT, 'fixtures'
17
+ Dir[File.join(RSPEC_ROOT, '**', '*_shared.rb')].each { |f| require f }
18
+
19
+ RSpec.configure do |config|
20
+ # == Mock Framework
21
+ #
22
+ # If you prefer to use mocha, flexmock or RR, uncomment the appropriate line:
23
+ #
24
+ # config.mock_with :mocha
25
+ # config.mock_with :flexmock
26
+ # config.mock_with :rr
27
+ config.mock_with :rspec do |configuration|
28
+ # Using the expect syntax is preferable to the should syntax in some cases.
29
+ # The problem here is that the :should syntax that RSpec uses can fail in
30
+ # the case of proxy objects, and objects that include the delegate module.
31
+ # Essentially it requires that we define methods on every object in the
32
+ # system. Not owning every object means that we cannot ensure this works in
33
+ # a consistent manner. The expect syntax gets around this problem by not
34
+ # relying on RSpec specific methods being defined on every object in the
35
+ # system.
36
+ # configuration.syntax = [:expect, :should]
37
+ configuration.syntax = :expect
38
+ end
39
+
40
+ config.before(:example) do
41
+ RailFeeds::Logging.logger = Logger.new(IO::NULL)
42
+ end
43
+
44
+ config.after(:each) { Timecop.return }
45
+ end
46
+
47
+ require 'rail_feeds'