diff options
| author | Luc Donnet | 2015-03-18 13:50:48 +0100 |
|---|---|---|
| committer | Luc Donnet | 2015-03-18 13:50:48 +0100 |
| commit | 0740decc6a2c5117d1dc89e3665774460626f86b (patch) | |
| tree | 38ce232fe7bdf791b6105a68055cb9d32f2b1dab /lib | |
| parent | bfab1e4947c66f4232efd604cb952b95e43ad623 (diff) | |
| download | chouette-core-0740decc6a2c5117d1dc89e3665774460626f86b.tar.bz2 | |
Initialize migration to new api version
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/iev_api/client.rb | 56 | ||||
| -rw-r--r-- | lib/iev_api/configuration.rb | 1 | ||||
| -rw-r--r-- | lib/iev_api/middleware/custom_parser.rb | 37 |
3 files changed, 61 insertions, 33 deletions
diff --git a/lib/iev_api/client.rb b/lib/iev_api/client.rb index f38d64624..1994b1027 100644 --- a/lib/iev_api/client.rb +++ b/lib/iev_api/client.rb @@ -19,8 +19,8 @@ module IevApi def url_for(endpoint, *args) path = case endpoint.to_s when 'jobs' then jobs_path(args) - when 'job' then job_path(args) - when 'report' then report_path(args) + when 'scheduled_job' then scheduled_job_path(args) + when 'terminated_job' then terminated_job_path(args) else raise ArgumentError.new("Unrecognized path: #{path}") end @@ -29,37 +29,28 @@ module IevApi def jobs(referential_id, options = {}) results = request(:get, jobs_path(referential_id), options) - results.respond_to?(:jobs) ? results.jobs : [] - end - - def job(referential_id, job_id, options = {}) - results = request(:get, job_path(referential_id, job_id), options) - if results.respond_to?(:job) - results.job - elsif results.respond_to?(:report) - results.report - else - [] - end - end - - def jobs_path(referential_id) - "/referentials/#{referential_id}/jobs" end - def job_path(referential_id, job_id) - "/referentials/#{referential_id}/jobs/#{job_id}" + def jobs_path(referential_id) + "referentials/#{referential_id}/jobs" end - def report(referential_id, report_id, options = {}) - results = request(:get, report_path(referential_id, report_id), options) - results.respond_to?(:report) ? results.report : [] + def scheduled_job(referential_id, job_id, options = {}) + results = request(:get, scheduled_job_path(referential_id, job_id), options) end - - def report_path(referential_id, report_id) - "/referentials/#{referential_id}/reports/#{report_id}" + + def scheduled_job_path(referential_id, job_id) + "referentials/#{referential_id}/scheduled_jobs/#{job_id}" end + def terminated_job(referential_id, job_id, options = {}) + results = request(:get, terminated_job_path(referential_id, job_id), options) + end + + def terminated_job_path(referential_id, job_id) + "referentials/#{referential_id}/terminated_jobs/#{job_id}" + end + def account_path "#{protocol}://#{Rails.application.config.iev_url}" end @@ -70,20 +61,17 @@ module IevApi # Perform an HTTP request def request(method, path, params = {}, options = {}) - - action_and_format = (params[:action].present? && params[:format].present?) ? "/#{params[:action]}/#{params[:format]}" : "" - build_path = connection.path_prefix + path + action_and_format response = connection(options).run_request(method, nil, nil, nil) do |request| case method when :delete, :get - request.url(build_path, params) + request.url(path, params) when :post, :put - request.url(build_path) + request.url(path) request.body = params unless params.empty? end end - + response.body end @@ -97,7 +85,7 @@ module IevApi :url => account_path, } - @connection ||= Faraday.new(default_options.deep_merge(connection_options)) do |builder| + @connection ||= Faraday.new(default_options.deep_merge(options)) do |builder| middleware.each { |mw| builder.use *mw } builder.adapter adapter @@ -109,6 +97,8 @@ module IevApi # ActiveSupport::Cache::FileStore.new cache_dir, :namespace => 'iev', # :expires_in => 3600 # one hour # end + + @connection end end diff --git a/lib/iev_api/configuration.rb b/lib/iev_api/configuration.rb index e01cbe102..b445da795 100644 --- a/lib/iev_api/configuration.rb +++ b/lib/iev_api/configuration.rb @@ -23,6 +23,7 @@ module IevApi FaradayMiddleware::FollowRedirects, FaradayMiddleware::ParseJson, IevApi::Middleware::RaiseServerError, + IevApi::Middleware::CustomParser ] def self.extended(base) diff --git a/lib/iev_api/middleware/custom_parser.rb b/lib/iev_api/middleware/custom_parser.rb new file mode 100644 index 000000000..82cf0d563 --- /dev/null +++ b/lib/iev_api/middleware/custom_parser.rb @@ -0,0 +1,37 @@ +# -*- coding: utf-8 -*- +# Expects responses like: +# +# { +# "result": { "id": 1, "name": "Tobias Fünke" }, +# "errors": [] +# } +# +require 'faraday' + +module IevApi + module Middleware + class CustomParser < Faraday::Response::Middleware + def on_complete(env) + body = env[:body] + env[:body] = { + datas: body, + headers: env[:response_headers], + links: process_links(env[:response_headers]) + } + end + + # Finds link relations from 'Link' response header + def process_links(headers) + puts headers.inspect + links = ( headers["Link"] || "" ).split(', ').map do |link| + href, name = link.match(/<(.*?)>; rel="(\w+)"/).captures + + [name.to_sym, href] + end + puts links.inspect + Hash[*links.flatten] + end + + end + end +end |
