class DynectRest::Resource

Attributes

dynect[RW]
fqdn[RW]
rdata[RW]
record_id[RW]
record_type[RW]
ttl[RW]
zone[RW]

Public Class Methods

new(dynect, record_type, zone, fqdn=nil, record_id=nil, ttl=nil, rdata={}) click to toggle source
# File lib/dynect_rest/resource.rb, line 24
def initialize(dynect, record_type, zone, fqdn=nil, record_id=nil, ttl=nil, rdata={})
  @dynect = dynect
  @record_type = record_type
  @fqdn = fqdn
  @record_id = record_id
  @ttl = ttl
  @zone = zone
  @rdata = rdata
end

Public Instance Methods

[](rdata_key) click to toggle source
# File lib/dynect_rest/resource.rb, line 34
def [](rdata_key)
  @rdata[rdata_key]
end
[]=(rdata_key, rdata_value) click to toggle source
# File lib/dynect_rest/resource.rb, line 38
def []=(rdata_key, rdata_value)
  @rdata[rdata_key] = rdata_value
end
delete() click to toggle source
# File lib/dynect_rest/resource.rb, line 118
def delete
  url = if record_id
          "#{resource_path}/#{fqdn}/#{record_id}"
        else
          "#{resource_path}/#{fqdn}"
        end
  @dynect.delete(url)
end
find(fqdn, query_hash) click to toggle source
# File lib/dynect_rest/resource.rb, line 95
def find(fqdn, query_hash)
  results = []
  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) click to toggle source
# File lib/dynect_rest/resource.rb, line 63
def get(fqdn = nil, record_id=nil)
  if record_id && fqdn
    raw_rr = @dynect.get("#{resource_path}/#{fqdn}/#{record_id}")
    DynectRest::Resource.new(dynect,
                             raw_rr["record_type"],
                             raw_rr["zone"],
                             raw_rr["fqdn"],
                             raw_rr["record_id"],
                             raw_rr["ttl"],
                             raw_rr["rdata"])
  elsif fqdn
    results = @dynect.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 DynectRest::Exceptions::RequestFailed, "Cannot find #{record_type} record for #{fqdn}"
    when 1
      raw_rr_list[0]
    else
      raw_rr_list
    end
  else
    @dynect.get(resource_path)
  end
end
method_missing(method_symbol, *args, &block) click to toggle source
# File lib/dynect_rest/resource.rb, line 134
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
resource_path(full=false) click to toggle source
# File lib/dynect_rest/resource.rb, line 54
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) click to toggle source
# File lib/dynect_rest/resource.rb, line 105
def save(replace=false)
  if record_id
    @dynect.put("#{resource_path}/#{@fqdn}/#{record_id}", self)
  else
    if replace == true || replace == :replace
      @dynect.put("#{resource_path}/#{@fqdn}", self)
    else
      @dynect.post("#{resource_path}/#{@fqdn}", self)
    end
  end
  self
end
to_json() click to toggle source
# File lib/dynect_rest/resource.rb, line 127
def to_json
  {
    "rdata" => @rdata,
    "ttl"   => @ttl
  }.to_json
end