Skip to content
This repository was archived by the owner on Dec 8, 2022. It is now read-only.

Commit 3422e0d

Browse files
committed
Add all actions and spec
1 parent 6d0ee55 commit 3422e0d

File tree

9 files changed

+132
-92
lines changed

9 files changed

+132
-92
lines changed

.rubocop.yml

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
Documentation:
2+
Enabled: false
3+
Metrics/LineLength:
4+
Enabled: false
5+
Metrics/MethodLength:
6+
Enabled: false
7+
Style/BlockComments:
8+
Enabled: false
9+
AllCops:
10+
RunRailsCops: true
11+
Include:
12+
- '**/Gemfile'
13+
- '**/Rakefile'
14+
Exclude:
15+
- 'bin/*'
16+
- 'db/seeds.rb'
17+
- 'db/schema.rb'
18+
- 'vendor/bundle/**/*'

Rakefile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
require "bundler/gem_tasks"
2-
require "rspec/core/rake_task"
1+
require 'bundler/gem_tasks'
2+
require 'rspec/core/rake_task'
33

44
RSpec::Core::RakeTask.new(:spec)
55

lib/ievkit.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
#require 'logger'
2-
#require 'rest-client'
1+
# require 'logger'
2+
# require 'rest-client'
33
require 'figaro'
44
require 'faraday_middleware'
55
require 'ievkit/version'

lib/ievkit/client.rb

Lines changed: 60 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,82 +1,103 @@
11
module Ievkit
22
class Client
3-
attr_reader :iev_url_prefix, :iev_url_suffix, :referential
3+
attr_reader :iev_url_prefix, :iev_url_suffix, :iev_url_jobs, :referential
44

55
def initialize(referential)
66
@payload = {}
7-
@iev_url_prefix = set_iev_url_prefix
87
@referential = referential
8+
@iev_url_prefix = init_iev_url_prefix
9+
@iev_url_jobs = init_iev_url_jobs
910
end
1011

11-
def parse_links_headers(links)
12-
links2 = {}
13-
links.each do |part|
14-
section = part.split(';')
15-
url = section[0][/<(.*)>/,1]
16-
name = section[1][/rel="(.*)"/,1].to_sym
17-
links2[name] = url
18-
end
19-
links2
20-
end
21-
22-
2312
def prepare_post_request(type, options)
24-
set_files(options)
25-
@iev_url_suffix = set_iev_url_suffix(type)
13+
init_files(options)
14+
@iev_url_suffix = init_iev_url_suffix(type)
2615
init_connection(iev_url_prefix)
27-
@connection.post(@iev_url_suffix, @payload)
16+
response = @connection.post(@iev_url_suffix, @payload)
17+
parse_response(response)
2818
end
2919

30-
def prepare_get_request(url)
20+
def prepare_request(url, http_method)
3121
init_connection(url)
32-
@connection.get
22+
response = @connection.send(http_method)
23+
parse_response(response)
3324
end
3425

3526
def init_connection(url)
3627
@connection = Faraday.new(url: url) do |conn|
37-
#conn.use Faraday::Response::RaiseError
3828
conn.request :multipart if @payload.any?
3929
conn.headers = headers
4030
conn.response :json, content_type: 'application/json'
4131
conn.adapter Faraday.default_adapter
4232
end
4333
end
4434

45-
def set_files(options)
46-
if options
47-
iev_file = options[:iev_file]
48-
@payload[:file[0]] = Faraday::UploadIO.new(options[:iev_params], 'application/json', 'parameters.json')
49-
if iev_file
50-
filename = File.basename(iev_file)
51-
@payload[:file[1]] = Faraday::UploadIO.new(iev_file, 'application/zip', filename)
35+
def init_files(options)
36+
return unless options
37+
iev_file = options[:iev_file]
38+
@payload[:file[0]] = Faraday::UploadIO.new(options[:iev_params], 'application/json', 'parameters.json')
39+
return unless iev_file
40+
filename = File.basename(iev_file)
41+
@payload[:file[1]] = Faraday::UploadIO.new(iev_file, 'application/zip', filename)
42+
end
43+
44+
protected
45+
46+
def headers
47+
{}.merge(init_iev_version)
48+
end
49+
50+
def parse_links_headers(response)
51+
return true unless response.headers['link'].present?
52+
{}.tap do |hash|
53+
response.headers['link'].split(',').each do |part|
54+
section = part.split(';')
55+
name = section[1][/rel="(.*)"/, 1].to_sym
56+
hash[name] = section[0][/<(.*)>/, 1]
5257
end
5358
end
5459
end
5560

61+
def parse_response(response)
62+
case response.status
63+
when 202
64+
response.headers['location']
65+
when 303
66+
response.headers['location']
67+
when 200
68+
parse_links_headers(response)
69+
else
70+
JSON.parse(response.body)['error_code']
71+
end
72+
rescue => e
73+
@logger.fatal("Unable to parse response: #{e}")
74+
end
75+
5676
private
5777

58-
def set_iev_url_prefix
78+
def init_iev_url_prefix
5979
[
60-
"#{ENV['IEV_HOST']}:#{ENV['IEV_PORT']}",
61-
ENV['IEV_PATH']
80+
"#{ENV['IEV_HOST']}:#{ENV['IEV_PORT']}",
81+
ENV['IEV_PATH'],
82+
'referentials',
83+
@referential,
84+
''
6285
].compact * '/'
6386
end
6487

65-
def set_iev_url_suffix(type=nil)
88+
def init_iev_url_suffix(type = nil)
6689
[
67-
'referentials',
68-
@referential,
69-
caller_locations(2,2)[0].label,
70-
type
90+
caller_locations(2, 2)[0].label,
91+
type
7192
].compact * '/'
7293
end
7394

74-
def set_iev_version
75-
{ :'Accept-Version' => ENV['IEV_VERSION'] }
95+
def init_iev_url_jobs
96+
[@iev_url_prefix, 'jobs'].join
7697
end
7798

78-
def headers
79-
{ }.merge(set_iev_version)
99+
def init_iev_version
100+
{ 'Accept-Version': ENV['IEV_VERSION'] }
80101
end
81102
end
82103
end

lib/ievkit/job.rb

Lines changed: 16 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -3,22 +3,31 @@ class Job
33
attr_reader :client, :response
44

55
def initialize(referential_id)
6-
#RestClient.log = @logger = Logger.new(STDERR)
76
@client = Ievkit::Client.new(referential_id)
87
end
98

10-
def execute(action, type=nil, options={})
11-
@response = send(action, type, options)
12-
parse_response
9+
def post_job(action, type = nil, options = {})
10+
send(action, type, options)
1311
end
1412

15-
def check_job(url)
16-
@response = @client.prepare_get_request(url)
17-
parse_response
13+
def get_job(url)
14+
do_job(url, :get)
15+
end
16+
17+
def delete_job(url)
18+
do_job(url, :delete)
19+
end
20+
21+
def delete_jobs
22+
do_job(@client.iev_url_jobs, :delete)
1823
end
1924

2025
protected
2126

27+
def do_job(url, http_method)
28+
@client.prepare_request(url, http_method)
29+
end
30+
2231
def importer(type, options)
2332
@client.prepare_post_request(type, options)
2433
end
@@ -30,19 +39,5 @@ def exporter(type, options)
3039
def validator(type, options)
3140
@client.prepare_post_request(type, options)
3241
end
33-
34-
def parse_response
35-
case @response.status
36-
when 202
37-
@response.headers['location']
38-
when 303
39-
@response.headers['location']
40-
when 200
41-
links = @response.headers['link'].split(',')
42-
@client.parse_links_headers(links)
43-
else
44-
@response.body
45-
end
46-
end
4742
end
4843
end

lib/ievkit/version.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
module Ievkit
2-
VERSION = "0.1.0"
2+
VERSION = '0.1.0'
33
end

spec/ievkit_export_spec.rb

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,20 @@
11
require 'spec_helper'
22

33
describe Ievkit do
4-
5-
before(:all) { @referential = 't04' }
4+
before(:all) { @referential = ENV['REFERENTIAL_TEST'] }
65
before(:all) { @job = Ievkit::Job.new(@referential) }
76

87
context '#export' do
9-
before(:all) { @export_forwarding_url = @job.execute(:exporter, :neptune, { iev_file: nil, iev_params: ENV['iev_export_params'] }) }
8+
before(:all) { @export_forwarding_url = @job.post_job(:exporter, :neptune, iev_file: nil, iev_params: ENV['IEV_EXPORT_PARAMS_TEST']) }
109
it 'return correct url suffix' do
11-
expect(@job.client.iev_url_suffix).to end_with("referentials/#{@referential}/exporter/neptune")
10+
expect("#{@job.client.iev_url_prefix}#{@job.client.iev_url_suffix}").to end_with("referentials/#{@referential}/exporter/neptune")
1211
end
1312
it 'return forwarding url' do
1413
expect(@export_forwarding_url).to match('/scheduled_jobs/')
1514
end
1615

1716
context 'when check forwarding url' do
18-
before(:all) { @links = @job.check_job(@export_forwarding_url) }
17+
before(:all) { @links = @job.get_job(@export_forwarding_url) }
1918
it 'return parameters link' do
2019
expect(@links[:parameters]).to end_with('/parameters.json')
2120
end
@@ -30,16 +29,16 @@
3029
end
3130
it 'forward to terminated_jobs' do
3231
terminated_job_url = nil
33-
until terminated_job_url =~ /terminated_jobs/ do
34-
terminated_job_url = @job.check_job(@export_forwarding_url)
32+
until terminated_job_url =~ /terminated_jobs/
33+
terminated_job_url = @job.get_job(@export_forwarding_url)
3534
sleep(2)
3635
end
3736
end
3837
end
3938

4039
context 'when check terminated job' do
41-
before(:all) { @terminated_job_url = @job.check_job(@export_forwarding_url) }
42-
before(:all) { @links = @job.check_job(@terminated_job_url) }
40+
before(:all) { @terminated_job_url = @job.get_job(@export_forwarding_url) }
41+
before(:all) { @links = @job.get_job(@terminated_job_url) }
4342
it 'return parameters link' do
4443
expect(@links[:parameters]).to end_with('/parameters.json')
4544
end

spec/ievkit_import_spec.rb

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,20 @@
11
require 'spec_helper'
22

33
describe Ievkit do
4-
5-
before(:all) { @referential = 't04' }
4+
before(:all) { @referential = ENV['REFERENTIAL_TEST'] }
65
before(:all) { @job = Ievkit::Job.new(@referential) }
76

87
context '#import' do
9-
before(:all) { @import_forwarding_url = @job.execute(:importer, :gtfs, { iev_file: ENV['iev_import_file'], iev_params: ENV['iev_import_params'] }) }
8+
before(:all) { @import_forwarding_url = @job.post_job(:importer, :gtfs, iev_file: ENV['IEV_IMPORT_FILE_TEST'], iev_params: ENV['IEV_IMPORT_PARAMS_TEST']) }
109
it 'return correct url suffix' do
11-
expect(@job.client.iev_url_suffix).to end_with("referentials/#{@referential}/importer/gtfs")
10+
expect("#{@job.client.iev_url_prefix}#{@job.client.iev_url_suffix}").to end_with("referentials/#{@referential}/importer/gtfs")
1211
end
1312
it 'return forwarding url' do
1413
expect(@import_forwarding_url).to match('/scheduled_jobs/')
1514
end
1615

1716
context 'when check forwarding url' do
18-
before(:all) { @links = @job.check_job(@import_forwarding_url) }
17+
before(:all) { @links = @job.get_job(@import_forwarding_url) }
1918
it 'return parameters link' do
2019
expect(@links[:parameters]).to end_with('/parameters.json')
2120
end
@@ -33,16 +32,16 @@
3332
end
3433
it 'forward to terminated_jobs' do
3534
terminated_job_url = nil
36-
until terminated_job_url =~ /terminated_jobs/ do
37-
terminated_job_url = @job.check_job(@import_forwarding_url)
35+
until terminated_job_url =~ /terminated_jobs/
36+
terminated_job_url = @job.get_job(@import_forwarding_url)
3837
sleep(2)
3938
end
4039
end
4140
end
4241

4342
context 'when check terminated job' do
44-
before(:all) { @terminated_job_url = @job.check_job(@import_forwarding_url) }
45-
before(:all) { @links = @job.check_job(@terminated_job_url) }
43+
before(:all) { @terminated_job_url = @job.get_job(@import_forwarding_url) }
44+
before(:all) { @links = @job.get_job(@terminated_job_url) }
4645
it 'return parameters link' do
4746
expect(@links[:parameters]).to end_with('/parameters.json')
4847
end
@@ -61,6 +60,15 @@
6160
it 'return validation_report link' do
6261
expect(@links[:validation_report]).to end_with('/validation_report.json')
6362
end
63+
it 'return true on delete' do
64+
expect(@job.delete_job(@links[:delete])).to be true
65+
end
66+
it 'raise an error on already deleted' do
67+
expect(@job.delete_job(@links[:delete])).to eq('UNKNOWN_JOB')
68+
end
69+
it 'return true on deleted all jobs' do
70+
expect(@job.delete_jobs).to be true
71+
end
6472
end
6573
end
6674
end

spec/ievkit_validator_spec.rb

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,20 @@
11
require 'spec_helper'
22

33
describe Ievkit do
4-
5-
before(:all) { @referential = 't04' }
4+
before(:all) { @referential = ENV['REFERENTIAL_TEST'] }
65
before(:all) { @job = Ievkit::Job.new(@referential) }
76

87
context '#validator' do
9-
before(:all) { @validator_forwarding_url = @job.execute(:validator, :gtfs, { iev_file: ENV['iev_import_file'], iev_params: ENV['iev_validate_params'] }) }
8+
before(:all) { @validator_forwarding_url = @job.post_job(:validator, :gtfs, iev_file: ENV['IEV_IMPORT_FILE_TEST'], iev_params: ENV['IEV_VALIDATE_PARAMS_TEST']) }
109
it 'return correct url suffix' do
11-
expect(@job.client.iev_url_suffix).to end_with("referentials/#{@referential}/validator/gtfs")
10+
expect("#{@job.client.iev_url_prefix}#{@job.client.iev_url_suffix}").to end_with("referentials/#{@referential}/validator/gtfs")
1211
end
1312
it 'return forwarding url' do
1413
expect(@validator_forwarding_url).to match('/scheduled_jobs/')
1514
end
1615

1716
context 'when check forwarding url' do
18-
before(:all) { @links = @job.check_job(@validator_forwarding_url) }
17+
before(:all) { @links = @job.get_job(@validator_forwarding_url) }
1918
it 'return parameters link' do
2019
expect(@links[:parameters]).to end_with('/parameters.json')
2120
end
@@ -30,16 +29,16 @@
3029
end
3130
it 'forward to terminated_jobs' do
3231
terminated_job_url = nil
33-
until terminated_job_url =~ /terminated_jobs/ do
34-
terminated_job_url = @job.check_job(@validator_forwarding_url)
32+
until terminated_job_url =~ /terminated_jobs/
33+
terminated_job_url = @job.get_job(@validator_forwarding_url)
3534
sleep(2)
3635
end
3736
end
3837
end
3938

4039
context 'when check terminated job' do
41-
before(:all) { @terminated_job_url = @job.check_job(@validator_forwarding_url) }
42-
before(:all) { @links = @job.check_job(@terminated_job_url) }
40+
before(:all) { @terminated_job_url = @job.get_job(@validator_forwarding_url) }
41+
before(:all) { @links = @job.get_job(@terminated_job_url) }
4342
it 'return parameters link' do
4443
expect(@links[:parameters]).to end_with('/parameters.json')
4544
end

0 commit comments

Comments
 (0)