Module: JSS::Updatable

Overview

A mix-in module that allows objects to be updated in the JSS via the API.

When a JSS::APIObject subclass includes this module, instances of that subclass can be modified in the JSS using the #update or APIObject#save methods.

Such classes should define setter methods for any values that they wish to modify, such as the #name= method defined here. Those setter methods must:

  • ensure the validity of the data they accept.

  • set @need_to_update to true, indicating that the local object no longer matches the JSS, and the changes should be pushed to the server with #update

Classes mixing this module must provide a #rest_xml instance method that returns the XML String to be submitted to the API for object updating.

Constant Summary collapse

UPDATABLE =

Constants

true

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#need_to_updateBoolean (readonly)

Returns do we have unsaved changes?.

Returns:

  • (Boolean)

    do we have unsaved changes?



65
66
67
# File 'lib/jss/api_object/updatable.rb', line 65

def need_to_update
  @need_to_update
end

Instance Method Details

#name=(newname) ⇒ void

This method returns an undefined value.

Change the name of this item Remember to #update to push changes to the server.

Parameters:

  • newname (String)

    the new name

Raises:



77
78
79
80
81
82
83
84
85
86
# File 'lib/jss/api_object/updatable.rb', line 77

def name=(newname)
  return nil if @name == newname
  raise JSS::UnsupportedError, "Editing #{self.class::RSRC_LIST_KEY} isn't yet supported. Please use other Casper workflows." unless updatable?
  raise JSS::InvalidDataError, "Names can't be empty!" if newname.to_s.empty?
  raise JSS::AlreadyExistsError, "A #{self.class::RSRC_OBJECT_KEY} named '#{newname}' already exsists in the JSS" \
    if self.class.all_names(:refresh, api: @api).include? newname
  @name = newname
  @rest_rsrc = "#{self.class::RSRC_BASE}/name/#{CGI.escape @name.to_s}" if @rest_rsrc.include? '/name/'
  @need_to_update = true
end

#updateBoolean

Save changes to the JSS

Returns:

  • (Boolean)

    success

Raises:



92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
# File 'lib/jss/api_object/updatable.rb', line 92

def update
  return nil unless @need_to_update
  raise JSS::UnsupportedError, "Editing #{self.class::RSRC_LIST_KEY} isn't yet supported. Please use other Casper workflows." unless updatable?
  raise JSS::NoSuchItemError, "Not In JSS! Use #create to create this #{self.class::RSRC_OBJECT_KEY} in the JSS before updating it." unless @in_jss

  @api.put_rsrc @rest_rsrc, rest_xml
  @need_to_update = false
  refresh_icon if self_servable?

  # clear any cached all-lists or id-maps for this class
  # so they'll re-cache as needed
  @api.flushcache self.class::RSRC_LIST_KEY

  @id
end