Class: Dyn::Traffic::Resource

Inherits:
Object
  • Object
show all
Defined in:
lib/dyn/traffic/resource.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(dyn, zone, record_type, fqdn = nil, record_id = nil, ttl = nil, rdata = {}) ⇒ Resource

Returns a new instance of Resource.



26
27
28
29
30
31
32
33
34
# File 'lib/dyn/traffic/resource.rb', line 26

def initialize(dyn, zone, record_type, fqdn=nil, record_id=nil, ttl=nil, rdata={})
  @dyn = dyn
  @fqdn = fqdn
  @record_type = record_type
  @record_id = record_id
  @ttl = ttl
  @zone = zone
  @rdata = rdata
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(method_symbol, *args, &block) ⇒ Object



136
137
138
139
140
141
142
143
144
145
146
# File 'lib/dyn/traffic/resource.rb', line 136

def method_missing(method_symbol, *args, &block)
  method_string = method_symbol.to_s
  if (args.length > 0 && method_string !~ /=$/)
    @rdata[method_string] = args.length == 1 ? args[0] : args
    self
  elsif @rdata.has_key?(method_string)
    @rdata[method_string]
  else
    raise NoMethodError, "undefined method `#{method_symbol.to_s}' for #{self.class.to_s}"
  end
end

Instance Attribute Details

#fqdn(value = nil) ⇒ Object

Returns the value of attribute fqdn.



24
25
26
# File 'lib/dyn/traffic/resource.rb', line 24

def fqdn
  @fqdn
end

#rdataObject

Returns the value of attribute rdata.



24
25
26
# File 'lib/dyn/traffic/resource.rb', line 24

def rdata
  @rdata
end

#record_id(value = nil) ⇒ Object

Returns the value of attribute record_id.



24
25
26
# File 'lib/dyn/traffic/resource.rb', line 24

def record_id
  @record_id
end

#record_typeObject

Returns the value of attribute record_type.



24
25
26
# File 'lib/dyn/traffic/resource.rb', line 24

def record_type
  @record_type
end

#ttl(value = nil) ⇒ Object

Returns the value of attribute ttl.



24
25
26
# File 'lib/dyn/traffic/resource.rb', line 24

def ttl
  @ttl
end

#zoneObject

Returns the value of attribute zone.



24
25
26
# File 'lib/dyn/traffic/resource.rb', line 24

def zone
  @zone
end

Instance Method Details

#[](rdata_key) ⇒ Object



36
37
38
# File 'lib/dyn/traffic/resource.rb', line 36

def [](rdata_key)
  @rdata[rdata_key]
end

#[]=(rdata_key, rdata_value) ⇒ Object



40
41
42
# File 'lib/dyn/traffic/resource.rb', line 40

def []=(rdata_key, rdata_value)
  @rdata[rdata_key] = rdata_value
end

#deleteObject



120
121
122
123
124
125
126
127
# File 'lib/dyn/traffic/resource.rb', line 120

def delete
  url = if record_id
          "#{resource_path}/#{fqdn}/#{record_id}"
        else
          "#{resource_path}/#{fqdn}"
        end
  @dyn.delete(url)
end

#find(fqdn, query_hash) ⇒ Object



97
98
99
100
101
102
103
104
105
# File 'lib/dyn/traffic/resource.rb', line 97

def find(fqdn, query_hash)
  results = []
  @dyn.get(fqdn).each do |rr|
    query_hash.each do |key, value|
      results << rr if rr[key.to_s] == value
    end
  end
  results
end

#get(fqdn = nil, record_id = nil) ⇒ Object



65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
# File 'lib/dyn/traffic/resource.rb', line 65

def get(fqdn = nil, record_id=nil)
  if record_id && fqdn
    raw_rr = @dynect.get("#{resource_path}/#{fqdn}/#{record_id}")
    Dyn::Traffic::Resource.new(@dyn,
                             raw_rr["record_type"],
                             raw_rr["zone"],
                             raw_rr["fqdn"],
                             raw_rr["record_id"],
                             raw_rr["ttl"],
                             raw_rr["rdata"])
  elsif fqdn
    results = @dyn.get("#{resource_path}/#{fqdn}")
    raw_rr_list = results.map do |record|
      if (record =~ /^#{resource_path(:full)}\/#{Regexp.escape(fqdn)}\/(\d+)$/)
        self.get(fqdn, $1)
      else
        record
      end
    end
    case raw_rr_list.length
    when 0
      raise Dyn::Exceptions::RequestFailed, "Cannot find #{record_type} record for #{fqdn}"
    when 1
      raw_rr_list[0]
    else
      raw_rr_list
    end
  else
    @dyn.get(resource_path)
  end
end

#resource_path(full = false) ⇒ Object



56
57
58
59
60
61
62
63
# File 'lib/dyn/traffic/resource.rb', line 56

def resource_path(full=false)
  @record_type << "Record" unless @record_type[-6,6] == "Record"
  if (full == true || full == :full)
    "/REST/#{@record_type}/#{@zone}"
  else
    "#{@record_type}/#{@zone}"
  end
end

#save(replace = false) ⇒ Object



107
108
109
110
111
112
113
114
115
116
117
118
# File 'lib/dyn/traffic/resource.rb', line 107

def save(replace=false)
  if record_id
    @dyn.put("#{resource_path}/#{@fqdn}/#{record_id}", self)
  else
    if replace == true || replace == :replace
      @dyn.put("#{resource_path}/#{@fqdn}", self)
    else
      @dyn.post("#{resource_path}/#{@fqdn}", self)
    end
  end
  self
end

#to_jsonObject



129
130
131
132
133
134
# File 'lib/dyn/traffic/resource.rb', line 129

def to_json
  {
    "rdata" => @rdata,
    "ttl"   => @ttl
  }.to_json
end