Class: Chef::ChefFS::FileSystem::ChefServer::RestListEntry
- Inherits:
-
BaseFSObject
- Object
- BaseFSObject
- Chef::ChefFS::FileSystem::ChefServer::RestListEntry
show all
- Defined in:
- lib/chef/chef_fs/file_system/chef_server/rest_list_entry.rb
Instance Attribute Summary
Attributes inherited from BaseFSObject
#name, #parent, #path
Instance Method Summary
collapse
#can_have_child?, #child, #children, #create_child, #dir?, #root
Constructor Details
#initialize(name, parent, exists = nil) ⇒ RestListEntry
Returns a new instance of RestListEntry.
30
31
32
33
34
|
# File 'lib/chef/chef_fs/file_system/chef_server/rest_list_entry.rb', line 30
def initialize(name, parent, exists = nil)
super(name, parent)
@exists = exists
@this_object_cache = nil
end
|
Instance Method Details
#api_child_name ⇒ Object
40
41
42
43
44
45
46
|
# File 'lib/chef/chef_fs/file_system/chef_server/rest_list_entry.rb', line 40
def api_child_name
if %w{ .rb .json }.include? File.extname(name)
File.basename(name, ".*")
else
name
end
end
|
#api_error_text(response) ⇒ Object
201
202
203
204
205
|
# File 'lib/chef/chef_fs/file_system/chef_server/rest_list_entry.rb', line 201
def api_error_text(response)
Chef::JSONCompat.parse(response.body)["error"].join("\n")
rescue
response.body
end
|
#api_path ⇒ Object
48
49
50
|
# File 'lib/chef/chef_fs/file_system/chef_server/rest_list_entry.rb', line 48
def api_path
"#{parent.api_path}/#{api_child_name}"
end
|
#chef_object ⇒ Object
119
120
121
122
|
# File 'lib/chef/chef_fs/file_system/chef_server/rest_list_entry.rb', line 119
def chef_object
data_handler.json_class.from_hash(read)
end
|
#compare_to(other) ⇒ Object
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
|
# File 'lib/chef/chef_fs/file_system/chef_server/rest_list_entry.rb', line 132
def compare_to(other)
begin
other_value_json = other.read
rescue Chef::ChefFS::FileSystem::NotFoundError
return [ nil, nil, :none ]
end
begin
value = _read_json
rescue Chef::ChefFS::FileSystem::NotFoundError
return [ false, :none, other_value_json ]
end
value = minimize_value(value)
value_json = Chef::JSONCompat.to_json_pretty(value)
begin
other_value = Chef::JSONCompat.parse(other_value_json)
rescue Chef::Exceptions::JSON::ParseError => e
Chef::Log.warn("Parse error reading #{other.path_for_printing} as JSON: #{e}")
return [ nil, value_json, other_value_json ]
end
other_value = minimize_value(other_value)
other_value_json = Chef::JSONCompat.to_json_pretty(other_value)
@this_object_cache = nil
[ value == other_value, value_json, other_value_json ]
end
|
#data_handler ⇒ Object
36
37
38
|
# File 'lib/chef/chef_fs/file_system/chef_server/rest_list_entry.rb', line 36
def data_handler
parent.data_handler
end
|
#delete(recurse) ⇒ Object
#display_name ⇒ Object
58
59
60
|
# File 'lib/chef/chef_fs/file_system/chef_server/rest_list_entry.rb', line 58
def display_name
File.basename(display_path)
end
|
#display_path ⇒ Object
Also known as:
path_for_printing
52
53
54
55
|
# File 'lib/chef/chef_fs/file_system/chef_server/rest_list_entry.rb', line 52
def display_path
pth = api_path.start_with?("/") ? api_path : "/#{api_path}"
File.extname(pth).empty? ? pth + ".json" : pth
end
|
#environment ⇒ Object
66
67
68
|
# File 'lib/chef/chef_fs/file_system/chef_server/rest_list_entry.rb', line 66
def environment
parent.environment
end
|
#exists? ⇒ Boolean
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
|
# File 'lib/chef/chef_fs/file_system/chef_server/rest_list_entry.rb', line 70
def exists?
if @exists.nil?
begin
@this_object_cache = rest.get(api_path)
@exists = true
rescue Net::HTTPClientException => e
if e.response.code == "404"
@exists = false
else
raise
end
rescue Chef::ChefFS::FileSystem::NotFoundError
@exists = false
end
end
@exists
end
|
#minimize_value(value) ⇒ Object
124
125
126
|
# File 'lib/chef/chef_fs/file_system/chef_server/rest_list_entry.rb', line 124
def minimize_value(value)
data_handler.minimize(normalize_value(value), self)
end
|
#normalize_value(value) ⇒ Object
128
129
130
|
# File 'lib/chef/chef_fs/file_system/chef_server/rest_list_entry.rb', line 128
def normalize_value(value)
data_handler.normalize(value, self)
end
|
#org ⇒ Object
62
63
64
|
# File 'lib/chef/chef_fs/file_system/chef_server/rest_list_entry.rb', line 62
def org
parent.org
end
|
#read ⇒ Object
102
103
104
105
|
# File 'lib/chef/chef_fs/file_system/chef_server/rest_list_entry.rb', line 102
def read
Chef::JSONCompat.to_json_pretty(normalize_value(_read_json))
end
|
#rest ⇒ Object
167
168
169
|
# File 'lib/chef/chef_fs/file_system/chef_server/rest_list_entry.rb', line 167
def rest
parent.rest
end
|
#write(file_contents) ⇒ Object
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
|
# File 'lib/chef/chef_fs/file_system/chef_server/rest_list_entry.rb', line 171
def write(file_contents)
@this_object_cache = nil
begin
object = Chef::JSONCompat.parse(file_contents)
rescue Chef::Exceptions::JSON::ParseError => e
raise Chef::ChefFS::FileSystem::OperationFailedError.new(:write, self, e, "Parse error reading JSON: #{e}")
end
if data_handler
object = data_handler.normalize_for_put(object, self)
data_handler.verify_integrity(object, self) do |error|
raise Chef::ChefFS::FileSystem::OperationFailedError.new(:write, self, nil, error.to_s)
end
end
begin
rest.put(api_path, object)
rescue Timeout::Error => e
raise Chef::ChefFS::FileSystem::OperationFailedError.new(:write, self, e, "Timeout writing: #{e}")
rescue Net::HTTPClientException => e
if e.response.code == "404"
raise Chef::ChefFS::FileSystem::NotFoundError.new(self, e)
else
raise Chef::ChefFS::FileSystem::OperationFailedError.new(:write, self, e, "HTTP error writing: #{e}")
end
end
end
|