Class: Squall::Base

Inherits:
Object
  • Object
show all
Defined in:
lib/squall/support/base.rb

Overview

All OnApp API classes subclass Base to get access to HTTP methods and other convenience methods.

Direct Known Subclasses

DataStoreZone, Disk, FirewallRule, Hypervisor, HypervisorZone, IpAddress, IpAddressJoin, Network, NetworkZone, Payment, Role, Statistic, Template, Transaction, User, UserGroup, VirtualMachine, Whitelist

Instance Attribute Summary (collapse)

Instance Method Summary (collapse)

Instance Attribute Details

- (Object) result (readonly)

Faraday response body



9
10
11
# File 'lib/squall/support/base.rb', line 9

def result
  @result
end

- (Object) success (readonly)

Returns true/false for successful/unsuccessful requests



6
7
8
# File 'lib/squall/support/base.rb', line 6

def success
  @success
end

Instance Method Details

- (void) check_config

This method returns an undefined value.

Ensures `Squall.config` is set.

Raises:

  • Squall::NoConfig if a request is made without first calling Squall.config.



66
67
68
# File 'lib/squall/support/base.rb', line 66

def check_config
  raise NoConfig, "Squall.config must be specified" if Squall.config.empty?
end

- (Object) default_params(*options)

Sets the default URL params for requests and merges `options`

*options - One or more options

Examples:

default_params(something: 1)

Returns:

  • a Hash.



20
21
22
# File 'lib/squall/support/base.rb', line 20

def default_params(*options)
  options.empty? ? {} : { query: { key_for_class => options.first } }
end

- (Object) key_for_class

Sets the default param container for request. It is derived from the class name. Given the class name `Sandwich` and a param `bread` the resulting params would be `bob=wheat`.

Returns:

  • a String



75
76
77
78
79
80
81
82
83
# File 'lib/squall/support/base.rb', line 75

def key_for_class
  word = self.class.name.split("::").last.to_s.dup
  word.gsub!(/::/, '/')
  word.gsub!(/([A-Z]+)([A-Z][a-z])/,'\1_\2')
  word.gsub!(/([a-z\d])([A-Z])/,'\1_\2')
  word.tr!("-", "_")
  word.downcase!
  word.to_sym
end

- (Object) request(request_method, path, options = {})

Performs an HTTP Request

Examples:

# GET /something.json
request :get, '/something.json'

# PUT /something.json?something=1
request :put, '/something.json', something: 1

Parameters:

  • request_method

    The HTTP verb for the request, one of :get/:post/:delete/:put, etc

  • path

    URL path

  • options (defaults to: {})

    HTTP query params

Returns:

  • the JSON response.



40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# File 'lib/squall/support/base.rb', line 40

def request(request_method, path, options = {})
  check_config

  conn = Faraday.new(url: Squall.config[:base_uri]) do |c|
    c.basic_auth Squall.config[:username], Squall.config[:password]
    c.params = (options[:query] || {})
    c.request :url_encoded
    c.response :json
    c.adapter :net_http
    if Squall.config[:debug]
     c.use Faraday::Response::Logger
    end
  end

  response = conn.send(request_method, path)

  @success = (200..207).include?(response.env[:status])
  @result  = response.body
end