class Seeuletter::Resources::ResourceBase
Attributes
config[R]
endpoint[R]
Public Class Methods
new(config)
click to toggle source
# File lib/seeuletter/resources/resource_base.rb, line 11 def initialize(config) @config = config end
Public Instance Methods
create(options={}, headers={})
click to toggle source
# File lib/seeuletter/resources/resource_base.rb, line 23 def create(options={}, headers={}) submit :post, endpoint_url, options, headers end
destroy(resource_id)
click to toggle source
# File lib/seeuletter/resources/resource_base.rb, line 27 def destroy(resource_id) submit :delete, resource_url(resource_id) end
find(resource_id)
click to toggle source
# File lib/seeuletter/resources/resource_base.rb, line 19 def find(resource_id) submit :get, resource_url(resource_id) end
list(options={})
click to toggle source
# File lib/seeuletter/resources/resource_base.rb, line 15 def list(options={}) submit :get, endpoint_url, options end
Private Instance Methods
base_url()
click to toggle source
# File lib/seeuletter/resources/resource_base.rb, line 95 def base_url "https://#{config[:api_key]}:@api.seeuletter.com" end
build_nested_query(value, prefix = nil)
click to toggle source
# File lib/seeuletter/resources/resource_base.rb, line 79 def build_nested_query(value, prefix = nil) case value when Array value.map { |v| build_nested_query(v, "#{prefix}[]") }.join("&") when Hash value.map { |k, v| build_nested_query(v, prefix ? "#{prefix}[#{URI.encode_www_form_component(k)}]" : URI.encode_www_form_component(k)) }.reject(&:empty?).join('&') else raise ArgumentError, "value must be an Array or Hash" if prefix.nil? "#{prefix}=#{URI.encode_www_form_component(value)}" end end
endpoint_url()
click to toggle source
# File lib/seeuletter/resources/resource_base.rb, line 99 def endpoint_url "#{base_url}/#{endpoint}" end
handle_api_error(error)
click to toggle source
# File lib/seeuletter/resources/resource_base.rb, line 67 def handle_api_error(error) begin response = JSON.parse(error.http_body.to_s) message = response.fetch("error").fetch("message") raise InvalidRequestError.new(message, error.http_code, error.http_body, error.response) rescue JSON::ParserError, KeyError # :nocov: raise SeeuletterError.new("Invalid response object:", error.http_code, error.http_body) # :nocov: end end
resource_url(resource_id)
click to toggle source
# File lib/seeuletter/resources/resource_base.rb, line 103 def resource_url(resource_id) "#{endpoint_url}/#{resource_id}" end
submit(method, url, parameters={}, headers={})
click to toggle source
# File lib/seeuletter/resources/resource_base.rb, line 33 def submit(method, url, parameters={}, headers={}) clientVersion = Seeuletter::VERSION begin if method == :get || method == :delete # Hack to URL encode nested objects like metadata. url = "#{url}?#{build_nested_query(parameters)}" response = RestClient.send(method, url, { user_agent: 'Seeuletter/v1 RubyBindings/' + clientVersion, "Seeuletter-Version" => config[:api_version] }) else headers = headers.merge({ user_agent: 'Seeuletter/v1 RubyBindings/' + clientVersion, "Seeuletter-Version" => config[:api_version] }) response = RestClient.send(method, url, parameters, headers) end body = JSON.parse(response) body.define_singleton_method(:_response) do response end return body rescue RestClient::ExceptionWithResponse => e handle_api_error(e) end end