Class: S2Netbox::ApiRequest

Inherits:
Object
  • Object
show all
Includes:
Helpers
Defined in:
lib/s2_netbox/api_request.rb

Class Method Summary collapse

Methods included from Helpers

#blank?, included

Class Method Details

.build_command(name, params = nil) ⇒ Object


75
76
77
# File 'lib/s2_netbox/api_request.rb', line 75

def self.build_command(name, params=nil)
  "<COMMAND name='#{name}' num='1'>#{params ? build_params(params) : ''}</COMMAND>"
end

.build_params(params = {}) ⇒ Object


53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
# File 'lib/s2_netbox/api_request.rb', line 53

def self.build_params(params={})
  res = '<PARAMS>'

  params.each do |k, v|
    if v.is_a?(Hash)
      res << "<#{k}>"

      singular = v[:singular_node_name]

      v[:values].each do |inner_value|
        res << "<#{singular}>#{inner_value}</#{singular}>"
      end

      res << "</#{k}>"
    else
      res << "<#{k}>#{v}</#{k}>"
    end
  end

  res << '</PARAMS>'
end

.command_for_method(method_name) ⇒ Object


45
46
47
48
49
50
51
# File 'lib/s2_netbox/api_request.rb', line 45

def self.command_for_method(method_name)
  if command_map && command_map[method_name]
    return command_map[method_name]
  else
    return "#{method_name.to_s.tr('_', ' ').titlecase.delete(' ')}#{name.split('::').last}"
  end
end

.command_mapObject


37
38
39
# File 'lib/s2_netbox/api_request.rb', line 37

def self.command_map
  nil
end

.map_attributes(attributes) ⇒ Object


79
80
81
82
83
# File 'lib/s2_netbox/api_request.rb', line 79

def self.map_attributes(attributes)
  return unless attributes

  attributes.map { |k, v| [k.to_s.delete('_').upcase, blank?(v) ? '' : v] }.to_h
end

.method_missing(method_name, *arguments, &block) ⇒ Object


16
17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/s2_netbox/api_request.rb', line 16

def self.method_missing(method_name, *arguments, &block)
  return super unless supported_operations.include?(method_name)

  attributes = arguments[0]
  session_id = arguments[1]

  if arguments.length == 1 && !arguments[0].is_a?(Hash)
    # there is only a single argument, and it isn't a hash - assume it is session_id
    attributes = nil
    session_id = arguments[0]
  end

  send_request(command_for_method(method_name), attributes, session_id)
end

.provides_command(*command_names) ⇒ Object


6
7
8
9
10
# File 'lib/s2_netbox/api_request.rb', line 6

def self.provides_command(*command_names)
  define_singleton_method(:supported_operations) do
    Array.wrap(command_names)
  end
end

.respond_to_missing?(method_name, include_private = false) ⇒ Boolean

Returns:

  • (Boolean)

31
32
33
34
35
# File 'lib/s2_netbox/api_request.rb', line 31

def self.respond_to_missing?(method_name, include_private = false)
  return true if supported_operations.include?(method_name.to_s)

  super
end

.send_request(command_name, attributes, session_id = nil) ⇒ Object


12
13
14
# File 'lib/s2_netbox/api_request.rb', line 12

def self.send_request(command_name, attributes, session_id=nil)
  S2Netbox.request(S2Netbox::BASIC_ENDPOINT, build_command(command_name, map_attributes(attributes)), session_id)
end

.supported_operationsObject


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

def self.supported_operations
  []
end