Class: TestdroidAPI::CloudResource
- Inherits:
-
Object
- Object
- TestdroidAPI::CloudResource
show all
- Defined in:
- lib/testdroid_api/cloud_resource.rb
Direct Known Subclasses
Admin, AdminDevice, AdminDeviceModel, AdminDeviceProblem, AdminDeviceStatus, Device, DeviceGroup, DeviceSession, DeviceSessionConnection, File, Framework, Label, LabelGroup, Project, Property, Run, Service, User
Instance Method Summary
collapse
Constructor Details
#initialize(uri, client, resource_name = nil, params = {}) ⇒ CloudResource
Returns a new instance of CloudResource.
3
4
5
6
7
|
# File 'lib/testdroid_api/cloud_resource.rb', line 3
def initialize(uri, client, resource_name = nil, params = {})
@uri, @client, @resource_name = uri, client, resource_name
set_up_properties_from(params)
end
|
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(method, *args) ⇒ Object
24
25
26
27
28
|
# File 'lib/testdroid_api/cloud_resource.rb', line 24
def method_missing(method, *args)
super if @updated
set_up_properties_from(@client.get(@uri))
self.send method, *args
end
|
Instance Method Details
#camel_case_it(something) ⇒ Object
66
67
68
69
70
71
72
73
74
|
# File 'lib/testdroid_api/cloud_resource.rb', line 66
def camel_case_it(something)
if something.is_a? Hash
Hash[*something.to_a.map {|a| [camel_case_it(a[0]).to_sym, a[1]]}.flatten]
else
something.to_s.split('_').map do |s|
[s[0, 1].capitalize, s[1..-1]].join
end.join
end
end
|
#delete ⇒ Object
84
85
86
87
|
# File 'lib/testdroid_api/cloud_resource.rb', line 84
def delete
raise "Can't delete a resource without a REST Client" unless @client
@client.delete(@uri)
end
|
#download_file(file_resource_name, target_file_name = nil) ⇒ Object
60
61
62
63
64
|
# File 'lib/testdroid_api/cloud_resource.rb', line 60
def download_file(file_resource_name, target_file_name = nil)
raise "Can't refresh a resource without a REST Client" unless @client
target_file_name = file_resource_name unless target_file_name
@client.download("#{@uri}/#{file_resource_name}", target_file_name)
end
|
#inspect ⇒ Object
9
10
11
|
# File 'lib/testdroid_api/cloud_resource.rb', line 9
def inspect "<#{self.class} @uri=#{@uri}>"
end
|
#refresh ⇒ Object
Also known as:
load
51
52
53
54
55
56
|
# File 'lib/testdroid_api/cloud_resource.rb', line 51
def refresh
raise "Can't refresh a resource without a REST Client" unless @client
@updated = false
set_up_properties_from(@client.get(@uri))
self
end
|
#set_up_properties_from(hash) ⇒ Object
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
# File 'lib/testdroid_api/cloud_resource.rb', line 36
def set_up_properties_from(hash)
eigenclass = class << self;
self;
end
hash.each do |p, v|
property = snake_case_it p
unless ['uri', 'client', 'updated'].include? property
eigenclass.send :define_method, property.to_sym, &lambda {v}
end
end
@updated = !hash.keys.empty?
end
|
#snake_case_it(something) ⇒ Object
76
77
78
79
80
81
82
|
# File 'lib/testdroid_api/cloud_resource.rb', line 76
def snake_case_it(something)
if something.is_a? Hash
Hash[*something.to_a.map {|pair| [snake_case_it(pair[0]).to_sym, pair[1]]}.flatten]
else
something.to_s.gsub(/[A-Z][a-z]*/) {|s| "_#{s.downcase}"}.gsub(/^_/, '')
end
end
|
#sub_items(*items) ⇒ Object
13
14
15
16
17
18
19
20
21
22
|
# File 'lib/testdroid_api/cloud_resource.rb', line 13
def sub_items(*items)
items.each do |item|
resource = camel_case_it item
uri = "#{@uri}/#{item.to_s.gsub('_', '-') }"
resource_class = TestdroidAPI.const_get resource
new_class = resource_class.new(uri, @client)
instance_variable_set("@#{item}", new_class)
end
self.class.instance_eval {attr_reader *items}
end
|
#update(params = {}) ⇒ Object
30
31
32
33
34
|
# File 'lib/testdroid_api/cloud_resource.rb', line 30
def update(params = {})
raise "Can't update a resource without a REST Client" unless @client
set_up_properties_from(@client.post(@uri, params))
self
end
|