module NetboxClientRuby::Entity
Public Class Methods
included(other_klass)
click to toggle source
# File lib/netbox_client_ruby/entity.rb, line 8 def self.included(other_klass) other_klass.extend ClassMethods end
new(given_values = nil)
click to toggle source
# File lib/netbox_client_ruby/entity.rb, line 107 def initialize(given_values = nil) return self if given_values.nil? if id_fields.count == 1 && !given_values.is_a?(Hash) instance_variable_set("@#{id_fields.keys.first}", given_values) return self end given_values.each do |field, value| if id_fields.key? field.to_s instance_variable_set "@#{field}", value else # via method_missing, because it checks for readonly fields, etc. method_missing("#{field}=", value) end end self end
Public Instance Methods
[](name)
click to toggle source
# File lib/netbox_client_ruby/entity.rb, line 186 def [](name) s_name = name.to_s dirty_data[s_name] || data[s_name] end
[]=(name, value)
click to toggle source
# File lib/netbox_client_ruby/entity.rb, line 191 def []=(name, value) dirty_data[name.to_s] = value end
create(raw_data)
click to toggle source
# File lib/netbox_client_ruby/entity.rb, line 145 def create(raw_data) raise LocalError, "Can't 'create', this object already exists" if ids_set? @dirty_data = raw_data post end
data=(data)
click to toggle source
:internal: Used to pre-populate an entity
# File lib/netbox_client_ruby/entity.rb, line 231 def data=(data) @data = data end
delete()
click to toggle source
# File lib/netbox_client_ruby/entity.rb, line 152 def delete raise NetboxClientRuby::LocalError, "Can't delete unless deletable=true" unless deletable return self if @deleted @data = response connection.delete path @deleted = true revert self end
Also aliased as: remove
method_missing(name_as_symbol, *args, &block)
click to toggle source
Calls superclass method
# File lib/netbox_client_ruby/entity.rb, line 195 def method_missing(name_as_symbol, *args, &block) name = name_as_symbol.to_s if name.end_with?('=') is_readonly_field = readonly_fields.include?(name[0..-2]) is_instance_variable = instance_variables.include?("@#{name[0..-2]}".to_sym) not_this_classes_business = is_readonly_field || is_instance_variable return super if not_this_classes_business dirty_data[name[0..-2]] = args[0] return args[0] end return dirty_data[name] if dirty_data.key? name return objectify(data[name], object_fields[name]) if object_fields.key? name return data[name] if data.is_a?(Hash) && data.key?(name) super end
raw_data!()
click to toggle source
# File lib/netbox_client_ruby/entity.rb, line 182 def raw_data! data end
reload()
click to toggle source
# File lib/netbox_client_ruby/entity.rb, line 132 def reload raise LocalError, "Can't 'reload', this object has never been saved" unless ids_set? @data = get revert self end
Also aliased as: get!
respond_to_missing?(name_as_symbol, *args)
click to toggle source
Calls superclass method
# File lib/netbox_client_ruby/entity.rb, line 216 def respond_to_missing?(name_as_symbol, *args) name = name_as_symbol.to_s return false if name.end_with?('=') && readonly_fields.include?(name[0..-2]) return false if name.end_with?('=') && instance_variables.include?(name[0..-2]) return true if dirty_data.key? name return true if object_fields.key? name return true if data.is_a?(Hash) && data.key?(name) super end
revert()
click to toggle source
# File lib/netbox_client_ruby/entity.rb, line 127 def revert dirty_data.clear self end
save()
click to toggle source
# File lib/netbox_client_ruby/entity.rb, line 140 def save return post unless ids_set? patch end
update(new_values)
click to toggle source
# File lib/netbox_client_ruby/entity.rb, line 162 def update(new_values) new_values.each do |attribute, values| s_attribute = attribute.to_s next if readonly_fields.include? s_attribute sym_attr_writer = "#{attribute}=".to_sym if methods.include?(sym_attr_writer) public_send(sym_attr_writer, values) else dirty_data[s_attribute] = values end end patch end
url()
click to toggle source
# File lib/netbox_client_ruby/entity.rb, line 178 def url "#{connection.url_prefix}#{path}" end
Private Instance Methods
creation_path()
click to toggle source
# File lib/netbox_client_ruby/entity.rb, line 299 def creation_path @creation_path ||= replace_path_variables_in self.class.creation_path end
data()
click to toggle source
# File lib/netbox_client_ruby/entity.rb, line 259 def data @data ||= get end
data_to_obj(raw_data, klass_or_proc = nil)
click to toggle source
# File lib/netbox_client_ruby/entity.rb, line 279 def data_to_obj(raw_data, klass_or_proc = nil) if klass_or_proc.nil? hash_to_object raw_data elsif klass_or_proc.is_a? Proc klass_or_proc.call raw_data else klass_or_proc.new raw_data end end
deletable()
click to toggle source
# File lib/netbox_client_ruby/entity.rb, line 271 def deletable self.class.deletable end
dirty_data()
click to toggle source
# File lib/netbox_client_ruby/entity.rb, line 317 def dirty_data @dirty_data ||= {} end
extract_ids()
click to toggle source
# File lib/netbox_client_ruby/entity.rb, line 325 def extract_ids id_fields.each do |id_attr, id_field| unless data.key?(id_field) raise LocalError, "Can't find the id field '#{id_field}' in the received data." end instance_variable_set("@#{id_attr}", data[id_field]) end end
get()
click to toggle source
# File lib/netbox_client_ruby/entity.rb, line 263 def get response connection.get path unless @deleted or !ids_set? end
id_fields()
click to toggle source
# File lib/netbox_client_ruby/entity.rb, line 321 def id_fields self.class.id end
ids_set?()
click to toggle source
# File lib/netbox_client_ruby/entity.rb, line 335 def ids_set? id_fields.map { |id_attr, _| instance_variable_get("@#{id_attr}") }.all? end
object_fields()
click to toggle source
# File lib/netbox_client_ruby/entity.rb, line 275 def object_fields self.class.object_fields end
objectify(raw_data, klass_or_proc = nil)
click to toggle source
# File lib/netbox_client_ruby/entity.rb, line 289 def objectify(raw_data, klass_or_proc = nil) return nil if raw_data.nil? return data_to_obj(raw_data, klass_or_proc) unless raw_data.is_a? Array raw_data.map do |raw_data_entry| data_to_obj(raw_data_entry, klass_or_proc) end end
patch()
click to toggle source
# File lib/netbox_client_ruby/entity.rb, line 249 def patch return self if dirty_data.empty? @data ||= {} response_data = response connection.patch(path, dirty_data) @data.merge! response_data revert self end
path()
click to toggle source
# File lib/netbox_client_ruby/entity.rb, line 303 def path @path ||= replace_path_variables_in self.class.path end
post()
click to toggle source
# File lib/netbox_client_ruby/entity.rb, line 240 def post return self if dirty_data.empty? @data = response connection.post creation_path, dirty_data extract_ids revert self end
readonly_fields()
click to toggle source
# File lib/netbox_client_ruby/entity.rb, line 267 def readonly_fields self.class.readonly_fields end
replace_path_variables_in(path)
click to toggle source
# File lib/netbox_client_ruby/entity.rb, line 307 def replace_path_variables_in(path) interpreted_path = path.clone path.scan(/:([a-zA-Z_][a-zA-Z0-9_]+[!?=]?)/) do |match, *| path_variable_value = send(match) return interpreted_path.gsub! ":#{match}", path_variable_value.to_s unless path_variable_value.nil? raise LocalError, "Received 'nil' while replacing ':#{match}' in '#{path}' with a value." end interpreted_path end