aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorLuc Donnet2015-03-18 13:50:48 +0100
committerLuc Donnet2015-03-18 13:50:48 +0100
commit0740decc6a2c5117d1dc89e3665774460626f86b (patch)
tree38ce232fe7bdf791b6105a68055cb9d32f2b1dab /lib
parentbfab1e4947c66f4232efd604cb952b95e43ad623 (diff)
downloadchouette-core-0740decc6a2c5117d1dc89e3665774460626f86b.tar.bz2
Initialize migration to new api version
Diffstat (limited to 'lib')
-rw-r--r--lib/iev_api/client.rb56
-rw-r--r--lib/iev_api/configuration.rb1
-rw-r--r--lib/iev_api/middleware/custom_parser.rb37
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