/
resource.rb
82 lines (64 loc) · 1.99 KB
/
resource.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
require 'apipie_bindings'
module HammerCLI::Apipie
module Resource
def self.included(base)
base.extend(ClassMethods)
end
def resource
self.class.resource || parent_command_resource || nil
end
def action
self.class.action
end
def resource_config
self.class.resource_config
end
def connection_options
self.class.connection_options
end
def parent_command_resource
self.parent_command.class.respond_to?(:resource) && self.parent_command.class.resource
end
module ClassMethods
def resource_config
{}
end
def connection_name(resource_class)
:apipie
end
def class_resource
return @api_resource if @api_resource ||= nil
return superclass.class_resource if superclass.respond_to? :class_resource
end
def module_resource
return nil unless self.name
enclosing_module = self.name.split("::")[0..-2].inject(Object) { |mod, cls| mod.const_get cls }
if enclosing_module.respond_to? :resource
enclosing_module.resource
end
end
def resource(resource=nil, action=nil)
unless resource.nil?
api = HammerCLI.context[:api_connection].get(connection_name(resource))
if api.has_resource?(resource)
@api_resource = api.resource(resource)
else
logger.warn "Resource '#{resource}' does not exist in the API"
end
end
@api_action = action unless action.nil?
# if the resource definition is not available in this class
# try to look it up in it's enclosing module/class
return class_resource || module_resource
end
def action(action=nil)
@api_action = action unless action.nil?
return @api_action if @api_action ||= nil
return superclass.action if superclass.respond_to? :action
end
def resource_defined?
not (resource.nil? or action.nil?)
end
end
end
end