# 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
# File lib/dynect_rest/resource.rb, line 34 def [](rdata_key) @rdata[rdata_key] end
# File lib/dynect_rest/resource.rb, line 38 def []=(rdata_key, rdata_value) @rdata[rdata_key] = rdata_value end
# 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
# 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
# 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
# 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
# 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
# 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
# File lib/dynect_rest/resource.rb, line 127 def to_json { "rdata" => @rdata, "ttl" => @ttl }.to_json end