Class: VNetAPIClient::ApiResource

Inherits:
Object
  • Object
show all
Defined in:
lib/vnet_api_client/api_resource.rb

Class Attribute Summary collapse

Class Method Summary collapse

Class Attribute Details

.api_formatObject

Returns the value of attribute api_format.



8
9
10
# File 'lib/vnet_api_client/api_resource.rb', line 8

def api_format
  @api_format
end

.api_uriObject

Returns the value of attribute api_uri.



7
8
9
# File 'lib/vnet_api_client/api_resource.rb', line 7

def api_uri
  @api_uri
end

Class Method Details

.api_full_uri(suffix) ⇒ Object



10
11
12
13
14
15
16
17
18
19
# File 'lib/vnet_api_client/api_resource.rb', line 10

def api_full_uri(suffix)
  u = ApiResource.api_uri
  f = ApiResource.api_format

  uri = "#{u}/api/1.0"
  uri += "/#{suffix}" if suffix
  uri += ".#{f}"

  URI(uri)
end

.api_suffix(suffix) ⇒ Object

Metaprogramming to define common methods



38
39
40
# File 'lib/vnet_api_client/api_resource.rb', line 38

def api_suffix(suffix)
  @api_suffix = suffix
end

.define_add_relation(relation_name) ⇒ Object



78
79
80
81
82
83
84
85
86
87
# File 'lib/vnet_api_client/api_resource.rb', line 78

def define_add_relation(relation_name)
  metaclass.instance_eval do
    singular_name = relation_name.to_s.chomp('s')

    define_method("add_#{singular_name}") do |uuid, relation_uuid, params = nil|
      suffix = "#{@api_suffix}/#{uuid}/#{relation_name}/#{relation_uuid}"
      send_request(Net::HTTP::Post, suffix, params)
    end
  end
end

.define_relation_methods(relation_name) ⇒ Object



72
73
74
75
76
# File 'lib/vnet_api_client/api_resource.rb', line 72

def define_relation_methods(relation_name)
  define_add_relation(relation_name)
  define_show_relation(relation_name)
  define_remove_relation(relation_name)
end

.define_remove_relation(relation_name) ⇒ Object



97
98
99
100
101
102
103
104
105
106
# File 'lib/vnet_api_client/api_resource.rb', line 97

def define_remove_relation(relation_name)
  metaclass.instance_eval do
    singular_name = relation_name.to_s.chomp('s')

    define_method("remove_#{singular_name}") do |uuid, relation_uuid|
      suffix = "#{@api_suffix}/#{uuid}/#{relation_name}/#{relation_uuid}"
      send_request(Net::HTTP::Delete, suffix)
    end
  end
end

.define_show_relation(relation_name) ⇒ Object



89
90
91
92
93
94
95
# File 'lib/vnet_api_client/api_resource.rb', line 89

def define_show_relation(relation_name)
  metaclass.instance_eval do
    define_method("show_#{relation_name}") do |uuid|
      send_request(Net::HTTP::Get, "#{@api_suffix}/#{uuid}/#{relation_name}")
    end
  end
end

.define_standard_crud_methodsObject



48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# File 'lib/vnet_api_client/api_resource.rb', line 48

def define_standard_crud_methods
  metaclass.instance_eval do
    define_method(:create) do |params = nil|
      send_request(Net::HTTP::Post, @api_suffix, params)
    end

    define_method(:update) do |uuid, params = nil|
      send_request(Net::HTTP::Put, "#{@api_suffix}/#{uuid}", params)
    end

    define_method(:delete) do |uuid|
      send_request(Net::HTTP::Delete, "#{@api_suffix}/#{uuid}")
    end

    define_method(:show) do |uuid|
      send_request(Net::HTTP::Get, "#{@api_suffix}/#{uuid}")
    end

    define_method(:index) do
      send_request(Net::HTTP::Get, @api_suffix)
    end
  end
end

.metaclassObject



42
43
44
45
46
# File 'lib/vnet_api_client/api_resource.rb', line 42

def metaclass
  class << self
    self
  end
end

.send_request(verb, suffix, params = nil) ⇒ Object



21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/vnet_api_client/api_resource.rb', line 21

def send_request(verb, suffix, params = nil)
  uri = api_full_uri(suffix)
  uri.query = URI.encode_www_form(params) if params

  response = Net::HTTP.start(uri.host, uri.port) do |http|
    request = verb.new(uri.request_uri)
    http.request(request)
  end

  response_format = ApiResource.api_format.to_sym

  ResponseFormats[response_format].parse(response)
end