Module: StudioApi::StudioResource

Overview

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 ).

Examples:

Add new Studio Resource

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

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.extended(base) ⇒ Object

hooks when module extend and ActiveResource based class

Parameters:

  • extended (ActiveResource::Base)

    class



31
32
33
34
35
36
37
38
39
40
41
42
# 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

Instance Method Details

#collection_path(prefix_options = {}, query_options = nil) ⇒ Object

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



82
83
84
85
86
# 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) ⇒ Object

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



74
75
76
77
78
# 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

#studio_connectionStudioApi::Connection?

Gets studio connection. Mostly useful internally. yet set

Returns:



25
26
27
# File 'lib/studio_api/studio_resource.rb', line 25

def studio_connection
  @studio_connection
end

#studio_connection=(connection) ⇒ StudioApi::Connection

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 .

Parameters:

Returns:



50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# 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