Class: JSS::User
- Includes:
- Creatable, Extendable, Updatable
- Defined in:
- lib/jss/api_object/user.rb,
lib/jss.rb
Overview
A User in the JSS.
Constant Summary collapse
- RSRC_BASE =
The base for REST resources of this class
"users"
- RSRC_LIST_KEY =
the hash key used for the JSON list output of all objects in the JSS
:users
- RSRC_OBJECT_KEY =
The hash key used for the JSON object output. It’s also used in various error messages
:user
- SEARCH_CLASS =
This class lets us seach for users
JSS::AdvancedUserSearch
- EXT_ATTRIB_CLASS =
This is the class for relevant Extension Attributes
JSS::UserExtensionAttribute
- OBJECT_HISTORY_OBJECT_TYPE =
the object type for this object in the object history table. See APIObject#add_object_history_entry
53
Instance Attribute Summary collapse
-
#computers ⇒ Array<Hash>
readonly
The computers associated with this user.
-
#email ⇒ String
The user’s email address.
-
#extension_attributes ⇒ Array<Hash>
included
from Extendable
readonly
The extension attribute values for the object.
-
#full_name ⇒ String
The user’s full name.
-
#ldap_server ⇒ String
The name of the user’s LDAP server.
-
#mobile_devices ⇒ Array<Hash>
readonly
The mobile devices associated with this user.
-
#need_to_update ⇒ Boolean
included
from Updatable
readonly
Do we have unsaved changes?.
-
#peripherals ⇒ Array<Hash>
readonly
The peripherals associated with this user.
-
#phone_number ⇒ String
The user’s phone number.
-
#position ⇒ String
The user’s position / job title.
-
#sites ⇒ Array<Hash>
readonly
Unlike every other Sitable object, Users can be in multiple sites, so we don’t use the Sitable mixin module.
-
#total_vpp_code_count ⇒ Integer
readonly
The total number of vpp codes assigned to this user.
-
#vpp_assignments ⇒ Array<Hash>
readonly
The vpp assignments associated with this user.
Instance Method Summary collapse
-
#add_site(site) ⇒ void
Add this user to a site.
-
#clone(new_name, api: nil) ⇒ APIObject
included
from Creatable
make a clone of this API object, with a new name.
-
#create ⇒ Integer
included
from Creatable
Create a new object in the JSS.
-
#ea_names ⇒ Array<String>
included
from Extendable
The names of all known EAs.
-
#ea_types ⇒ Hash{String => String}
included
from Extendable
EA names => data type (one of ‘String’, ‘Number’, or ‘Date’).
-
#ext_attr_xml ⇒ REXML::Element
included
from Extendable
private
TODO: make this (and all XML amending) method take the in-progress XML doc and add (or not) the EA xml to it.
-
#ext_attrs ⇒ Object
included
from Extendable
An easier-to-use hash of EA name to EA value.
-
#initialize(args = {}) ⇒ User
constructor
See JSS::APIObject#initialize.
-
#name=(newname) ⇒ void
included
from Updatable
Change the name of this item Remember to #update to push changes to the server.
-
#parse_ext_attrs ⇒ void
included
from Extendable
Populate @extension_attributes (the Array of Hashes that comes from the API) and @ext_attr_names, which is a Hash mapping the EA names to their values.
-
#remove_site(site) ⇒ void
Remove this user from a site.
-
#set_ext_attr(name, value, validate_popup_choice: true, refresh: false) ⇒ void
included
from Extendable
Set the value of an extension attribute.
-
#unsaved_eas? ⇒ Boolean
included
from Extendable
are there any changes in the EAs needing to be saved?.
-
#update ⇒ Boolean
included
from Updatable
Save changes to the JSS.
-
#validate_popup_value(name, value, refresh) ⇒ Object
included
from Extendable
Used by set_ext_attr.
Constructor Details
#initialize(args = {}) ⇒ User
See JSS::APIObject#initialize
163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 |
# File 'lib/jss/api_object/user.rb', line 163 def initialize (args = {}) super @full_name = @init_data[:full_name] @email = @init_data[:email] @phone_number = @init_data[:phone_number] @position = @init_data[:position] @ldap_server = JSS::APIObject.get_name @init_data[:ldap_server] @sites = @init_data[:sites] ? @init_data[:sites] : [] if @init_data[:links] @computers = @init_data[:links][:computers] @peripherals = @init_data[:links][:peripherals] @mobile_devices = @init_data[:links][:mobile_devices] @vpp_assignments = @init_data[:links][:vpp_assignments] @total_vpp_code_count = @init_data[:links][:total_vpp_code_count] end end |
Instance Attribute Details
#computers ⇒ Array<Hash> (readonly)
The computers associated with this user
Each Hash has then :id and :name for one computer
123 124 125 |
# File 'lib/jss/api_object/user.rb', line 123 def computers @computers end |
#email ⇒ String
Returns The user’s email address.
92 93 94 |
# File 'lib/jss/api_object/user.rb', line 92 def email @email end |
#extension_attributes ⇒ Array<Hash> (readonly) Originally defined in module Extendable
Returns The extension attribute values for the object.
#full_name ⇒ String
Returns The user’s full name.
89 90 91 |
# File 'lib/jss/api_object/user.rb', line 89 def full_name @full_name end |
#ldap_server ⇒ String
Returns The name of the user’s LDAP server.
101 102 103 |
# File 'lib/jss/api_object/user.rb', line 101 def ldap_server @ldap_server end |
#mobile_devices ⇒ Array<Hash> (readonly)
This data is currently broken - the JSON output of the API only
The mobile devices associated with this user
Each Hash has then :id and :name for one device
returns one mobile device, and it isn’t formatted in a standard way.
143 144 145 |
# File 'lib/jss/api_object/user.rb', line 143 def mobile_devices @mobile_devices end |
#need_to_update ⇒ Boolean (readonly) Originally defined in module Updatable
Returns do we have unsaved changes?.
#peripherals ⇒ Array<Hash> (readonly)
The peripherals associated with this user
Each Hash has then :id and :name for one peripheral
132 133 134 |
# File 'lib/jss/api_object/user.rb', line 132 def peripherals @peripherals end |
#phone_number ⇒ String
Returns The user’s phone number.
95 96 97 |
# File 'lib/jss/api_object/user.rb', line 95 def phone_number @phone_number end |
#position ⇒ String
Returns The user’s position / job title.
98 99 100 |
# File 'lib/jss/api_object/user.rb', line 98 def position @position end |
#sites ⇒ Array<Hash> (readonly)
Unlike every other Sitable object, Users can be in multiple sites, so we don’t use the Sitable mixin module. Instead we’ll we’ll store them in this Array, as they come from the API.
Each Hash has the :id and :name for one site
114 115 116 |
# File 'lib/jss/api_object/user.rb', line 114 def sites @sites end |
#total_vpp_code_count ⇒ Integer (readonly)
Returns the total number of vpp codes assigned to this user.
154 155 156 |
# File 'lib/jss/api_object/user.rb', line 154 def total_vpp_code_count @total_vpp_code_count end |
Instance Method Details
#add_site(site) ⇒ void
This method returns an undefined value.
Add this user to a site
230 231 232 233 234 235 |
# File 'lib/jss/api_object/user.rb', line 230 def add_site (site) return nil if @sites.map{|s| s[:name]}.include? site raise JSS::InvalidDataError, "No site in the JSS named #{site}" unless JSS::Site.all_names(api: @api).include? site @sites << {:name => site} @need_to_update = true end |
#clone(new_name, api: nil) ⇒ APIObject Originally defined in module Creatable
make a clone of this API object, with a new name. The class must be creatable
#create ⇒ Integer Originally defined in module Creatable
Create a new object in the JSS.
#ea_names ⇒ Array<String> Originally defined in module Extendable
Returns the names of all known EAs.
#ea_types ⇒ Hash{String => String} Originally defined in module Extendable
Returns EA names => data type (one of ‘String’, ‘Number’, or ‘Date’).
#ext_attr_xml ⇒ REXML::Element Originally defined in module Extendable
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
TODO: make this (and all XML amending) method take the in-progress XML doc and add (or not) the EA xml to it. See how Sitable#add_site_to_xml works, as called from Computer.rest_xml
#ext_attrs ⇒ Object Originally defined in module Extendable
An easier-to-use hash of EA name to EA value. This isn’t created until its needed, to speed up instantiation.
#name=(newname) ⇒ void Originally defined in module Updatable
This method returns an undefined value.
Change the name of this item Remember to #update to push changes to the server.
#parse_ext_attrs ⇒ void Originally defined in module Extendable
This method returns an undefined value.
Populate @extension_attributes (the Array of Hashes that comes from the API) and @ext_attr_names, which is a Hash mapping the EA names to their values. This is called during initialization for all objects that mix in this module
#remove_site(site) ⇒ void
This method returns an undefined value.
Remove this user from a site
244 245 246 247 248 |
# File 'lib/jss/api_object/user.rb', line 244 def remove_site (site) return nil unless @sites.map{|s| s[:name]}.include? site @sites.reject!{|s| s[:name] == site} @need_to_update = true end |
#set_ext_attr(name, value, validate_popup_choice: true, refresh: false) ⇒ void Originally defined in module Extendable
This method returns an undefined value.
Set the value of an extension attribute
The new value is validated based on the data type of the Ext. Attrib:
-
If the ext. attrib. is defined with a data type of Integer/Number, the value must be an Integer.
-
If defined with a data type of Date, the value will be parsed as a timestamp, and parsing may raise an exception. Dates can’t be blank.
-
If defined wth data type of String, ‘to_s` will be called on the value.
By default, the full EA definition object is fetched to see if the EA’s input type is ‘popup menu’, and if so, the new value must be one of the defined popup choices, or blank.
The EA definitions used for popup validation are cached, so we don’t have to reach out to the server every time. If you expect the definition to have changed since it was cached, provide a truthy value to the refresh: parameter
To bypass popup validation complepletely, provide a falsey value to the validate_popup_choice: parameter. WARNING: beware that your value is the correct type and format, or you might get errors when saving back to the API.
Note that while the Jamf Pro Web interface does not allow editing the values of Extension Attributes populated by Scripts or LDAP, the API does allow it. Bear in mind however that those values will be reset again at the next recon.
#unsaved_eas? ⇒ Boolean Originally defined in module Extendable
are there any changes in the EAs needing to be saved?
#update ⇒ Boolean Originally defined in module Updatable
Save changes to the JSS
#validate_popup_value(name, value, refresh) ⇒ Object Originally defined in module Extendable
Used by set_ext_attr