rightresource 0.3.2 → 0.3.3
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/right_resource/base.rb +77 -55
- data/lib/right_resource/ec2_elastic_ip.rb +3 -0
- data/lib/right_resource/multi_cloud_image.rb +1 -1
- data/lib/right_resource/right_script.rb +1 -1
- data/lib/right_resource/s3_bucket.rb +3 -0
- data/lib/right_resource/server_template.rb +1 -0
- data/lib/right_resource/status.rb +1 -1
- data/lib/right_resource/tag.rb +5 -4
- data/lib/right_resource.rb +1 -1
- metadata +4 -4
data/lib/right_resource/base.rb
CHANGED
@@ -87,6 +87,7 @@ module RightResource
|
|
87
87
|
|
88
88
|
# RestFul Method
|
89
89
|
def action(method, path, params={})
|
90
|
+
connection.clear
|
90
91
|
case method
|
91
92
|
when :get
|
92
93
|
connection.get(path, params)
|
@@ -96,6 +97,8 @@ module RightResource
|
|
96
97
|
connection.put(path, params)
|
97
98
|
when :delete
|
98
99
|
connection.delete(path, params)
|
100
|
+
else
|
101
|
+
raise ArgumentError, "Unsupported HTTP method!!"
|
99
102
|
end
|
100
103
|
rescue => e
|
101
104
|
logger.error("#{e.class}: #{e.pretty_inspect}")
|
@@ -138,7 +141,6 @@ module RightResource
|
|
138
141
|
connection.clear
|
139
142
|
result = format.decode(connection.get(path || [])).map do |resource|
|
140
143
|
correct_attributes(resource)
|
141
|
-
resource
|
142
144
|
end
|
143
145
|
instantiate_collection(result)
|
144
146
|
rescue => e
|
@@ -166,8 +168,6 @@ module RightResource
|
|
166
168
|
connection.clear
|
167
169
|
result = format.decode(connection.get(path)).tap do |resource|
|
168
170
|
correct_attributes(resource)
|
169
|
-
resource[:id] = resource[:href].match(/[0-9]+$/).to_s.to_i
|
170
|
-
resource
|
171
171
|
end
|
172
172
|
instantiate_record(result)
|
173
173
|
rescue => e
|
@@ -210,11 +210,13 @@ module RightResource
|
|
210
210
|
end
|
211
211
|
|
212
212
|
# Update resource
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
213
|
+
def update(id, params={})
|
214
|
+
resource = self.show(id)
|
215
|
+
return nil if resource.nil?
|
216
|
+
|
217
|
+
resource.update_attributes(params)
|
218
|
+
resource.save
|
219
|
+
end
|
218
220
|
|
219
221
|
# Delete resource
|
220
222
|
# Example:
|
@@ -224,6 +226,7 @@ module RightResource
|
|
224
226
|
# Server.destory(server.id)
|
225
227
|
def destory(id)
|
226
228
|
path = element_path(id)
|
229
|
+
connection.clear
|
227
230
|
connection.delete(path)
|
228
231
|
end
|
229
232
|
|
@@ -254,27 +257,28 @@ module RightResource
|
|
254
257
|
# '-'(dash) is included but not '_'(under score) in AWS Parameter keys.
|
255
258
|
# On the other hand '_'(under score) is included in RightScale Parameter keys
|
256
259
|
# e.g. Hash["ip-address"] -> Hash[:ip_address], Hash["deployment_href"] -> Hash[:deployment_href]
|
257
|
-
def correct_attributes(
|
258
|
-
return unless
|
260
|
+
def correct_attributes(attrs)
|
261
|
+
return unless attrs.is_a?(Hash)
|
259
262
|
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
+
attrs.alter_keys
|
264
|
+
attrs.each do |key,value| # recursive
|
265
|
+
attrs[key] =
|
263
266
|
case value
|
264
267
|
when Array
|
265
|
-
value.map do |
|
266
|
-
if
|
267
|
-
|
268
|
+
value.map do |a|
|
269
|
+
if a.is_a?(Hash)
|
270
|
+
a.dup.alter_keys rescue a.alter_keys
|
268
271
|
else
|
269
|
-
|
272
|
+
a.dup rescue a
|
270
273
|
end
|
271
274
|
end
|
272
275
|
when Hash
|
273
|
-
|
276
|
+
value.dup.alter_keys rescue value.alter_keys
|
274
277
|
else
|
275
278
|
value.dup rescue value
|
276
279
|
end
|
277
280
|
end
|
281
|
+
attrs
|
278
282
|
end
|
279
283
|
|
280
284
|
protected
|
@@ -330,52 +334,68 @@ module RightResource
|
|
330
334
|
# self.class.known_attributes + self.attributes.keys.map(&:to_s)
|
331
335
|
end
|
332
336
|
|
333
|
-
# Duplicate resource
|
337
|
+
# Duplicate resource without save
|
334
338
|
def dup
|
335
339
|
self.class.new.tap do |resource|
|
336
340
|
resource.attributes = @attributes.reject {|key,value| key == :href}
|
337
|
-
resource.load_accessor(resource.attributes)
|
338
341
|
end
|
339
342
|
end
|
340
343
|
|
341
|
-
|
342
|
-
|
343
|
-
|
344
|
-
|
345
|
-
|
346
|
-
|
347
|
-
|
348
|
-
|
349
|
-
|
350
|
-
|
351
|
-
|
344
|
+
# Duplicate resource with save
|
345
|
+
def clone
|
346
|
+
resource = dup
|
347
|
+
resource.save
|
348
|
+
end
|
349
|
+
|
350
|
+
def initialize(attrs={})
|
351
|
+
if self.class.resource_id && self.class.status_code == 201
|
352
|
+
@id = self.class.resource_id
|
353
|
+
else
|
354
|
+
@id = attrs[:href].match(/\d+$/).to_s if attrs[:href]
|
352
355
|
end
|
356
|
+
|
357
|
+
@attributes = {}
|
358
|
+
# sub-resource4json's key name contains '-'
|
359
|
+
loads(attrs)
|
353
360
|
yield self if block_given?
|
354
361
|
end
|
355
362
|
|
356
|
-
def
|
357
|
-
raise ArgumentError, "expected an attributes Hash, got #{
|
358
|
-
|
363
|
+
def loads(attrs)
|
364
|
+
raise ArgumentError, "expected an attributes Hash, got #{attrs.pretty_inspect}" unless attrs.is_a?(Hash)
|
365
|
+
|
366
|
+
attrs.each do |key,value| # recursive
|
367
|
+
@attributes[key] =
|
368
|
+
case value
|
369
|
+
when Array
|
370
|
+
value.map do |a|
|
371
|
+
if a.is_a?(Hash)
|
372
|
+
a.dup.alter_keys rescue a.alter_keys
|
373
|
+
else
|
374
|
+
a.dup rescue a
|
375
|
+
end
|
376
|
+
end
|
377
|
+
when Hash
|
378
|
+
value.dup.alter_keys rescue value.alter_keys
|
379
|
+
else
|
380
|
+
value.dup rescue value
|
381
|
+
end
|
382
|
+
end
|
359
383
|
self
|
360
384
|
end
|
361
385
|
|
362
|
-
|
363
|
-
|
386
|
+
# reload attributes of resource from the rightscale web api(discard local modified)
|
387
|
+
def reload
|
388
|
+
self.loads(self.class.show(self.id).attributes)
|
364
389
|
end
|
365
390
|
|
366
|
-
|
367
|
-
|
368
|
-
|
369
|
-
|
370
|
-
|
371
|
-
|
372
|
-
|
373
|
-
|
374
|
-
define_method(key) do
|
375
|
-
instance_variable_get("@#{key}")
|
376
|
-
end
|
377
|
-
end
|
378
|
-
end
|
391
|
+
# Updates a single attribute and then saves the object.
|
392
|
+
def update_attribute(name, value)
|
393
|
+
self.send("#{name}=".to_sym, value)
|
394
|
+
self.save
|
395
|
+
end
|
396
|
+
|
397
|
+
def update_attributes(attrs)
|
398
|
+
loads(attrs) && save
|
379
399
|
end
|
380
400
|
|
381
401
|
def new?
|
@@ -388,15 +408,13 @@ module RightResource
|
|
388
408
|
end
|
389
409
|
|
390
410
|
def destory
|
411
|
+
connection.clear
|
391
412
|
connection.delete(element_path)
|
392
413
|
end
|
393
414
|
|
394
415
|
# For checking <tt>respond_to?</tt> without searching the attributes (which is faster).
|
395
416
|
alias_method :respond_to_without_attributes?, :respond_to?
|
396
417
|
|
397
|
-
# A method to determine if an object responds to a message (e.g., a method call). In Active Resource, a Person object with a
|
398
|
-
# +name+ attribute can answer <tt>true</tt> to <tt>my_person.respond_to?(:name)</tt>, <tt>my_person.respond_to?(:name=)</tt>, and
|
399
|
-
# <tt>my_person.respond_to?(:name?)</tt>.
|
400
418
|
def respond_to?(method, include_priv = false)
|
401
419
|
method_name = method.to_s
|
402
420
|
if attributes.nil?
|
@@ -422,7 +440,9 @@ module RightResource
|
|
422
440
|
pair = URI.decode({resource_name.to_sym => attrs}.to_params).split('&').map {|l| l.split('=')}
|
423
441
|
h = Hash[*pair.flatten]
|
424
442
|
@@non_rs_params.each {|key| h[key.to_s] = self.attributes[key] if self.attributes.has_key?(key) && self.attributes[key]}
|
443
|
+
connection.clear
|
425
444
|
connection.put(element_path, h)
|
445
|
+
self
|
426
446
|
end
|
427
447
|
|
428
448
|
def create
|
@@ -430,9 +450,11 @@ module RightResource
|
|
430
450
|
pair = URI.decode({resource_name.to_sym => attrs}.to_params).split('&').map {|l| l.split('=')}
|
431
451
|
h= Hash[*pair.flatten]
|
432
452
|
@@non_rs_params.each {|key| h[key.to_s] = self.attributes[key] if self.attributes.has_key?(key) && self.attributes[key]}
|
453
|
+
connection.clear
|
433
454
|
connection.post(collection_path, h)
|
434
455
|
self.id = self.class.resource_id
|
435
456
|
self.href = self.class.headers[:location]
|
457
|
+
self
|
436
458
|
end
|
437
459
|
|
438
460
|
def resource_name
|
@@ -454,12 +476,12 @@ module RightResource
|
|
454
476
|
if method_name =~ /(=|\?)$/
|
455
477
|
case $1
|
456
478
|
when "="
|
457
|
-
attributes[$`.to_sym] = arguments.first
|
479
|
+
self.attributes[$`.to_sym] = arguments.first
|
458
480
|
when "?"
|
459
|
-
attributes[$`.to_sym]
|
481
|
+
self.attributes[$`.to_sym]
|
460
482
|
end
|
461
483
|
else
|
462
|
-
return attributes[method_symbol] if attributes.include?(method_symbol)
|
484
|
+
return self.attributes[method_symbol] if self.attributes.include?(method_symbol)
|
463
485
|
# not set right now but we know about it
|
464
486
|
# return nil if known_attributes.include?(method_name)
|
465
487
|
super
|
@@ -1,5 +1,6 @@
|
|
1
1
|
class ServerTemplate < RightResource::Base
|
2
2
|
class << self
|
3
|
+
# Get scripts added to the ServerTemplate every phases
|
3
4
|
# === Parameters
|
4
5
|
# * _id_ - ServerTemplate id
|
5
6
|
# * _params_ - Hash (keys = [:phase]) ex. 'boot', 'operational', 'decommission' if not defined, all phases
|
data/lib/right_resource/tag.rb
CHANGED
@@ -14,7 +14,7 @@
|
|
14
14
|
# p Tag.search(:resource_href => ec2_href)
|
15
15
|
class Tag < RightResource::Base
|
16
16
|
class << self
|
17
|
-
undef :index, :show, :create, :destory
|
17
|
+
undef :index, :show, :create, :update, :destory
|
18
18
|
|
19
19
|
[:set, :unset].each do |act_method|
|
20
20
|
define_method(act_method) do |params|
|
@@ -54,10 +54,10 @@ class Tag < RightResource::Base
|
|
54
54
|
if params[:resource_type] == "ec2_instance"
|
55
55
|
resource_name = "Server"
|
56
56
|
else
|
57
|
-
resource_name = params[:resource_type].split(/-/).map {|r| r.capitalize}.join
|
57
|
+
resource_name = params[:resource_type].split(/-/).map {|r| r.capitalize}.join # underscore2pascal
|
58
58
|
end
|
59
|
-
klass = const_get(resource_name)
|
60
|
-
klass.instantiate_collection(result)
|
59
|
+
klass = const_get(resource_name) # Get class name
|
60
|
+
klass.instantiate_collection(result) # Get every class instance
|
61
61
|
end
|
62
62
|
rescue => e
|
63
63
|
logger.error("#{e.class}: #{e.pretty_inspect}")
|
@@ -67,6 +67,7 @@ class Tag < RightResource::Base
|
|
67
67
|
logger.debug {"#{__FILE__} #{__LINE__}: #{self.class}\n#{self.pretty_inspect}\n"}
|
68
68
|
end
|
69
69
|
|
70
|
+
# Get all taggable resources name (server, server_array, server_template, etc.)
|
70
71
|
# === Examples
|
71
72
|
# Tag.taggable_resources
|
72
73
|
def taggable_resources
|
data/lib/right_resource.rb
CHANGED
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rightresource
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 21
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 3
|
9
|
-
-
|
10
|
-
version: 0.3.
|
9
|
+
- 3
|
10
|
+
version: 0.3.3
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Satoshi Ohki
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-11-
|
18
|
+
date: 2010-11-29 00:00:00 +09:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|