module StudioApi::StudioResource

Adds ability to ActiveResource::Base (short as ARes) to easy set connection to studio in dynamic way, which is not so easy as ARes is designed for static values. Also modify a few expectation of ActiveResource to fit studio API ( like missing xml suffix in calls ).

@example Add new Studio Resource

# enclose it in module allows to automatic settings with Util
module StudioApi
  class NewCoolResource < ActiveResource::Base
    extend StudioResource
  end
end

Public Class Methods

extended(base) click to toggle source

hooks when module extend and ActiveResource based class @param (ActiveResource::Base) extended class

# File lib/studio_api/studio_resource.rb, line 31
def self.extended(base)
  base.format = :xml #fix ARes 3.1 default ( json )
  # ensure that dasherize is not called as studio use in some keys '-'
  # need to extend it after inclusion
  base.class_eval do
    alias_method :original_encode, :encode
    def encode(options={})
      options[:dasherize] = false
      original_encode options
    end
  end
end

Public Instance Methods

collection_path(prefix_options = {}, query_options = nil) click to toggle source

We need to overwrite the paths methods because susestudio doesn’t use the standard .xml filename extension which is expected by ActiveResource.

# File lib/studio_api/studio_resource.rb, line 82
def collection_path(prefix_options = {}, query_options = nil)
  inspect_connection
  prefix_options, query_options = split_options(prefix_options) if query_options.nil?
  "#{prefix(prefix_options)}#{collection_name}#{query_string(query_options)}"
end
element_path(id, prefix_options = {}, query_options = nil) click to toggle source

We need to overwrite the paths methods because susestudio doesn’t use the standard .xml filename extension which is expected by ActiveResource.

# File lib/studio_api/studio_resource.rb, line 74
def element_path(id, prefix_options = {}, query_options = nil)
  inspect_connection
  prefix_options, query_options = split_options(prefix_options) if query_options.nil?
  "#{prefix(prefix_options)}#{collection_name}/#{id}#{query_string(query_options)}"
end
encode(options={}) click to toggle source
# File lib/studio_api/studio_resource.rb, line 37
def encode(options={})
  options[:dasherize] = false
  original_encode options
end
studio_connection() click to toggle source

Gets studio connection. Mostly useful internally. @return (StudioApi::Connection,nil) object of studio connection or nil if not yet set

# File lib/studio_api/studio_resource.rb, line 25
def studio_connection
  @studio_connection
end
studio_connection=(connection) click to toggle source

Takes information from connection and sets it to ActiveResource::Base. Also take care properly of prefix as it need to join path from site with api prefix like appliance/:appliance_id . @param (StudioApi::Connection) connection source for connection in

activeResource

@return (StudioApi::Connection) unmodified parameter

# File lib/studio_api/studio_resource.rb, line 50
def studio_connection= connection
  self.site = connection.uri.to_s
  # there is general problem, that when specified prefix in model, it doesn't
  # contain uri.path as it is not know and uri is set during runtime, so we
  # must add here manually adapt prefix otherwise site.path is ommitted in
  # models which has own prefix in API
  unless @original_prefix
    if self.prefix_source == Util.join_relative_url(connection.uri.path,'/')
      @original_prefix = "/"
    else
      @original_prefix = self.prefix_source
    end
  end
  self.prefix = Util.join_relative_url connection.uri.path, @original_prefix
  self.user = connection.user
  self.password = connection.password
  self.timeout = connection.timeout
  self.proxy = connection.proxy.to_s if connection.proxy
  self.ssl_options = connection.ssl
  @studio_connection = connection
end