Class: Dyn::Traffic::Resource
- Inherits:
-
Object
- Object
- Dyn::Traffic::Resource
show all
- Defined in:
- lib/dyn/traffic/resource.rb
Instance Attribute Summary collapse
Instance Method Summary
collapse
-
#[](rdata_key) ⇒ Object
-
#[]=(rdata_key, rdata_value) ⇒ Object
-
#delete ⇒ Object
-
#find(fqdn, query_hash) ⇒ Object
-
#get(fqdn = nil, record_id = nil) ⇒ Object
-
#initialize(dyn, zone, record_type, fqdn = nil, record_id = nil, ttl = nil, rdata = {}) ⇒ Resource
constructor
A new instance of Resource.
-
#method_missing(method_symbol, *args, &block) ⇒ Object
-
#resource_path(full = false) ⇒ Object
-
#save(replace = false) ⇒ Object
-
#to_json ⇒ Object
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
|
#rdata ⇒ Object
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_type ⇒ Object
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
|
#zone ⇒ Object
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
|
#delete ⇒ Object
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 = @dyn.get("#{resource_path}/#{fqdn}/#{record_id}")
Dyn::Traffic::Resource.new(@dyn,
raw_rr["zone"],
raw_rr["record_type"],
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_json ⇒ Object
129
130
131
132
133
134
|
# File 'lib/dyn/traffic/resource.rb', line 129
def to_json
{
"rdata" => @rdata,
"ttl" => @ttl
}.to_json
end
|