lib/dato/repo.rb in dato-0.8.0 vs lib/dato/repo.rb in dato-0.8.1

- old
+ new

@@ -1,20 +1,20 @@ # frozen_string_literal: true -require 'dato/json_api_serializer' -require 'dato/json_api_deserializer' -require 'dato/paginator' +require "dato/json_api_serializer" +require "dato/json_api_deserializer" +require "dato/paginator" module Dato class Repo attr_reader :client, :type, :schema - IDENTITY_REGEXP = /\{\(.*?definitions%2F(.*?)%2Fdefinitions%2Fidentity\)}/ + IDENTITY_REGEXP = /\{\(.*?definitions%2F(.*?)%2Fdefinitions%2Fidentity\)}/.freeze METHOD_NAMES = { - 'instances' => :all, - 'self' => :find + "instances" => :all, + "self" => :find, }.freeze def initialize(client, type, schema) @client = client @type = type @@ -30,27 +30,27 @@ end private def method_missing(method, *args, &block) - link = schema.links.find do |link| - METHOD_NAMES.fetch(link.rel, link.rel).to_sym == method.to_sym + link = schema.links.find do |ilink| + METHOD_NAMES.fetch(ilink.rel, ilink.rel).to_sym == method.to_sym end - return super if !link + return super unless link min_arguments_count = [ link.href.scan(IDENTITY_REGEXP).size, - link.schema && link.method != :get ? 1 : 0 + link.schema && link.method != :get ? 1 : 0, ].reduce(0, :+) - (args.size >= min_arguments_count) or - raise ArgumentError, "wrong number of arguments (given #{args.size}, expected #{min_arguments_count})" + (args.size >= min_arguments_count) || + raise(ArgumentError, "wrong number of arguments (given #{args.size}, expected #{min_arguments_count})") placeholders = [] - url = link['href'].gsub(IDENTITY_REGEXP) do |_stuff| + url = link["href"].gsub(IDENTITY_REGEXP) do |_stuff| placeholder = args.shift.to_s placeholders << placeholder placeholder end @@ -59,23 +59,20 @@ if %i[post put].include?(link.method) body = link.schema ? args.shift : {} query_string = args.shift || {} - elsif link.method == :delete + elsif %i[get delete].include?(link.method) query_string = args.shift || {} - - elsif link.method == :get - query_string = args.shift || {} end options = args.any? ? args.shift.symbolize_keys : {} if link.schema && %i[post put].include?(link.method) && options.fetch(:serialize_response, true) - body = JsonApiSerializer.new(type, link).serialize( + body = JsonApiSerializer.new(link: link).serialize( body, - link.method == :post ? nil : placeholders.last + link.method == :post ? nil : placeholders.last, ) end response = if %i[post put].include?(link.method) client.send(link.method, url, body, query_string) @@ -90,25 +87,23 @@ end if response && response[:data] && response[:data].is_a?(Hash) && response[:data][:type] == "job" job_result = nil - while !job_result do + until job_result begin sleep(1) job_result = client.job_result.find(response[:data][:id]) - rescue ApiError => error - if error.response[:status] != 404 - raise error - end + rescue ApiError => e + raise e if e.response[:status] != 404 end end if job_result[:status] < 200 || job_result[:status] >= 300 error = ApiError.new( status: job_result[:status], - body: JSON.dump(job_result[:payload]) + body: JSON.dump(job_result[:payload]), ) puts "====" puts error.message puts "====" @@ -119,15 +114,13 @@ if options.fetch(:deserialize_response, true) JsonApiDeserializer.new(link.job_schema).deserialize(job_result[:payload]) else job_result.payload end + elsif options.fetch(:deserialize_response, true) + JsonApiDeserializer.new(link.target_schema).deserialize(response) else - if options.fetch(:deserialize_response, true) - JsonApiDeserializer.new(link.target_schema).deserialize(response) - else - response - end + response end end end end