class Plivo::Base::Resource

Attributes

id[R]

Public Class Methods

new(client, options = nil) click to toggle source
# File lib/plivo/base/resource.rb, line 7
def initialize(client, options = nil)
  configure_client(client)
  configure_options(options) if options
  configure_resource_uri
  @_is_voice_request = false
end

Private Instance Methods

configure_client(client) click to toggle source
# File lib/plivo/base/resource.rb, line 16
def configure_client(client)
  valid_param?(:client, client, [RestClient, Phlo], true)
  @_client = client
end
configure_options(options) click to toggle source
# File lib/plivo/base/resource.rb, line 21
def configure_options(options)
  valid_param?(:options, options, Hash, false)
  @id = options[:resource_id] if options.key?(:resource_id)
  parse_and_set(options[:resource_json]) if options.key?(:resource_json)
end
configure_resource_uri() click to toggle source
# File lib/plivo/base/resource.rb, line 27
def configure_resource_uri
  to_join = @id ? [@_client.auth_id, @_name, @id] : [@_client.auth_id, @_name]
  to_join = ['', 'v1', 'Account'] << to_join

  if @_name == 'Account'
    @id = @_client.auth_id
    to_join = ['', 'v1', 'Account', @id]
  end

  to_join << ''
  @_resource_uri = to_join.join('/')
end
parse_and_set(resource_json) click to toggle source
# File lib/plivo/base/resource.rb, line 40
def parse_and_set(resource_json)
  return unless resource_json

  valid_param?(:resource_json, resource_json, Hash, true)

  resource_json.each do |k, v|
    instance_variable_set("@#{k}", v)
    self.class.send(:attr_reader, k)
  end

  return unless @_identifier_string && (resource_json.key? @_identifier_string)
  @id = resource_json[@_identifier_string]
end
parse_and_set_response(resource_json) click to toggle source
# File lib/plivo/base/resource.rb, line 73
def parse_and_set_response(resource_json)
  return unless resource_json.is_a?(Hash)

  set_instance_variables(resource_json)

  if @_identifier_string && resource_json.key?(@_identifier_string)
    @id = resource_json[@_identifier_string]
  end
end
perform_action(action = nil, method = 'GET', params = nil, parse = false) click to toggle source
# File lib/plivo/base/resource.rb, line 108
def perform_action(action = nil, method = 'GET', params = nil, parse = false)
  resource_path = action ? @_resource_uri + action + '/' : @_resource_uri
  response = @_client.send_request(resource_path, method, params,nil,false,is_voice_request: @_is_voice_request)
  parse ? parse_and_set(response) : self
  method == 'POST' ? parse_and_set(params) : self
  self
end
perform_action_apiresponse(action = nil, method = 'GET', params = nil, parse = false) click to toggle source
# File lib/plivo/base/resource.rb, line 124
def perform_action_apiresponse(action = nil, method = 'GET', params = nil, parse = false)
  resource_path = action ? @_resource_uri + action + '/' : @_resource_uri
  response = @_client.send_request(resource_path, method, params,nil,false,is_voice_request: @_is_voice_request)
  parse ? parse_and_set(response) : self
  method == 'POST' ? parse_and_set(params) : self
  method == 'DELETE' ? parse_and_set(params) : self
  return response
end
perform_custom_action_apiresponse(action = nil, method = 'GET', params = nil, parse = false) click to toggle source
# File lib/plivo/base/resource.rb, line 133
def perform_custom_action_apiresponse(action = nil, method = 'GET', params = nil, parse = false)
  resource_path = action ? '/v1/Account/' + @_client.auth_id + '/'+ action + '/' : @_resource_uri
  response = @_client.send_request(resource_path, method, params,nil,false,is_voice_request: @_is_voice_request)
  parse ? parse_and_set(response) : self
  method == 'POST' ? parse_and_set(params) : self
  method == 'DELETE' ? parse_and_set(params) : self
  return response
end
perform_custome_action(action = nil, method = 'GET', params = nil, parse = false) click to toggle source
# File lib/plivo/base/resource.rb, line 116
def perform_custome_action(action = nil, method = 'GET', params = nil, parse = false)
  resource_path = action ? @_resource_uri + action + '/' : @_resource_uri
  response = @_client.send_request(resource_path, method, params,nil,false,is_voice_request: @_is_voice_request)
  parse ? parse_and_set(response) : self
  method == 'POST' ? parse_and_set(params) : self
  self
end
perform_delete(params=nil) click to toggle source
# File lib/plivo/base/resource.rb, line 142
def perform_delete(params=nil)
  unless @id
    raise_invalid_request("Cannot delete a #{@_name} resource "\
                            'without an identifier')
  end

  Response.new(@_client.send_request(@_resource_uri, 'DELETE', params, nil, false, is_voice_request: @_is_voice_request),
               @_identifier_string)
end
perform_masking_update(params, use_multipart_conn = false) click to toggle source
# File lib/plivo/base/resource.rb, line 96
def perform_masking_update(params, use_multipart_conn = false)
  unless @id
    raise_invalid_request("Cannot update a #{@_name} resource "\
                            'without an identifier')
  end

  response_json = @_client.send_request(@_resource_uri, 'POST', params, nil, use_multipart_conn, is_voice_request: @_is_voice_request)
  parse_and_set(params)
  parse_and_set_response(response_json)
  self
end
perform_run(params) click to toggle source
# File lib/plivo/base/resource.rb, line 152
def perform_run(params)
  response_json = @_client.send_request(@_resource_uri, 'POST', params, nil,false,is_voice_request: @_is_voice_request)
  parse_and_set(response_json)
  Response.new(response_json, @_identifier_string)
end
perform_update(params, use_multipart_conn = false) click to toggle source
# File lib/plivo/base/resource.rb, line 83
def perform_update(params, use_multipart_conn = false)
  unless @id
    raise_invalid_request("Cannot update a #{@_name} resource "\
                            'without an identifier')
  end

  response_json = @_client.send_request(@_resource_uri, 'POST', params, nil, use_multipart_conn, is_voice_request: @_is_voice_request)

  parse_and_set(params)
  parse_and_set(response_json)
  self
end
set_instance_variables(hash) click to toggle source
# File lib/plivo/base/resource.rb, line 54
def set_instance_variables(hash)
  hash.each do |k, v|
    instance_var_name = "@#{k}"

    if v.is_a?(Hash)
      instance_variable_set(instance_var_name, v)
      self.class.send(:attr_reader, k.to_sym)
      v.each do |nested_k, nested_v|
        instance_var_name = "@#{nested_k}"
        instance_variable_set(instance_var_name, nested_v)
        self.class.send(:attr_reader, nested_k.to_sym)
      end
    else
      instance_variable_set(instance_var_name, v)
      self.class.send(:attr_reader, k.to_sym)
    end
  end
end