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.
[View source]
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
[View source]
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
[View source]
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
[View source]
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
[View source]
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
[View source]
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
[View source]
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
|
#display_name ⇒ Object
[View source]
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
[View source]
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
[View source]
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
[View source]
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
[View source]
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
[View source]
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
[View source]
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
[View source]
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
[View source]
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
[View source]
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
|