Class: Resource

Inherits:
Object
  • Object
show all
Includes:
HTTParty
Defined in:
lib/resource.rb

Overview

The default template for an Onvo Resource

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(endpoint, api_key) ⇒ Resource

Returns a new instance of Resource.



13
14
15
16
17
18
19
20
21
# File 'lib/resource.rb', line 13

def initialize(endpoint, api_key)
  self.class.base_uri endpoint
  @options = {
    headers: {
      'x-api-key': api_key,
      'Content-Type': 'application/json'
    }
  }
end

Instance Attribute Details

#optionsObject

Returns the value of attribute options.



11
12
13
# File 'lib/resource.rb', line 11

def options
  @options
end

Instance Method Details

#base_delete(subdirectory, **extra_options) ⇒ Object



53
54
55
# File 'lib/resource.rb', line 53

def base_delete(subdirectory, **extra_options)
  base_request { self.class.delete(subdirectory, **merge_options(extra_options)) }
end

#base_get(subdirectory, **extra_options) ⇒ Object



41
42
43
# File 'lib/resource.rb', line 41

def base_get(subdirectory, **extra_options)
  base_request { self.class.get(subdirectory, **merge_options(extra_options)) }
end

#base_post(subdirectory, **extra_options) ⇒ Object



49
50
51
# File 'lib/resource.rb', line 49

def base_post(subdirectory, **extra_options)
  base_request { self.class.post(subdirectory, **merge_options(extra_options)) }
end

#base_put(subdirectory, **extra_options) ⇒ Object



45
46
47
# File 'lib/resource.rb', line 45

def base_put(subdirectory, **extra_options)
  base_request { self.class.put(subdirectory, **merge_options(extra_options)) }
end

#base_requestObject



23
24
25
26
27
28
29
30
31
32
# File 'lib/resource.rb', line 23

def base_request
  response = yield
  body = JSON.parse(response.body)
  # TODO: Replace Runtime w/ custom errors
  raise "#{response.code} Error : #{body['message']}" if response.code >= 400

  body
rescue JSON::ParserError, TypeError
  response.body
end

#merge_options(extra_options) ⇒ Object



34
35
36
37
38
39
# File 'lib/resource.rb', line 34

def merge_options(extra_options)
  filtered_extras = {}
  filtered_extras[:query] = extra_options[:query] if extra_options.key? :query
  filtered_extras[:body] = extra_options[:body].to_json if extra_options.key? :body
  options.merge(filtered_extras)
end