Class: Jamf::Icon
Overview
An Icon in the JSS, used in Self Service.
At the moment, icons are not API objects, they are collections of data stored in the JSS that might be included in some API object’s Self Service data.
The data available for an icon are:
-
id: the icon’s id in the JSS
-
name: the icon’s non-unique name in the JSS
-
uri: the uri to download or preview the icon
-
data: the icon file itself, base-64 encoded.
Icon instances are read-only. To change the icon for a self-servable object, see SelfServable#icon=.
NOTE: Since icons are not APIObjects, there’s no way to see a list of them via the API. The Jamf::Icon class methods .all, .all_ids, and .all_names require MySQL database access. See DBConnection.
This also means, if you use multiple API connections, you’ll have to make sure to connect to the correct MySQL server for the APIConnection you care about.
Instance Attribute Summary collapse
-
#data ⇒ String
readonly
The raw icon file.
-
#id ⇒ Integer
readonly
The icon’s id in the JSS.
-
#name ⇒ String
(also: #filename)
readonly
The icon’s name in the JSS NOTE: these are not unique.
-
#uri ⇒ String
readonly
The URI for downloading or previewing the icon from the JSS.
Class Method Summary collapse
-
.all(refresh = false) ⇒ Array<Hash>
Return an Array of { id:, name: } Hashes for all icons known to the JSS Since Icon lists aren’t accessible via the API, this method must query the SQL database directly, and will raise an exception if you aren’t connected to the database.
-
.all_ids(refresh = false) ⇒ Array<Integer>
An Array of all icon ids known to the JSS.
-
.all_names(refresh = false) ⇒ Array<Integer>
An Array of all icon names known to the JSS.
Instance Method Summary collapse
-
#initialize(icon_data) ⇒ Jamf::Icon
constructor
Set up a new Jamf::Icon instance.
-
#pretty_print_instance_variables ⇒ Array
Remove the data object from the instance_variables used to create pretty-print (pp) output.
-
#save(path, overwrite = false) ⇒ void
Save the icon to a file.
-
#show_in_browser ⇒ void
Open the icon’s URL in the current user’s browser.
Constructor Details
#initialize(icon_data) ⇒ Jamf::Icon
Set up a new Jamf::Icon instance
128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 |
# File 'lib/jamf/api/classic/api_objects/icon.rb', line 128 def initialize(icon_data) return unless icon_data.is_a? Hash @id = icon_data[:id] @name = icon_data[:filename] @uri = icon_data[:uri] @data = icon_data[:data] # if no :filename, its called :name @name ||= icon_data[:name] # if there's no id, as with MobileDeviceConfigurationProfile # get it from the end of the uri if possible @id = Regexp.last_match(1).to_i if @uri && !@id && @uri =~ (/(\d+)$/) # decode the icon data, or grab from # the URI if needed @data = Base64.decode64(@data) if @data begin @data ||= URI.parse(@uri).read if @uri rescue @data = nil end end |
Instance Attribute Details
#data ⇒ String (readonly)
Returns The raw icon file.
116 117 118 |
# File 'lib/jamf/api/classic/api_objects/icon.rb', line 116 def data @data end |
#id ⇒ Integer (readonly)
Returns the icon’s id in the JSS.
105 106 107 |
# File 'lib/jamf/api/classic/api_objects/icon.rb', line 105 def id @id end |
#name ⇒ String (readonly) Also known as: filename
Returns the icon’s name in the JSS NOTE: these are not unique.
109 110 111 |
# File 'lib/jamf/api/classic/api_objects/icon.rb', line 109 def name @name end |
#uri ⇒ String (readonly)
Returns The URI for downloading or previewing the icon from the JSS.
113 114 115 |
# File 'lib/jamf/api/classic/api_objects/icon.rb', line 113 def uri @uri end |
Class Method Details
.all(refresh = false) ⇒ Array<Hash>
Return an Array of { id:, name: } Hashes for all icons known to the JSS Since Icon lists aren’t accessible via the API, this method must query the SQL database directly, and will raise an exception if you aren’t connected to the database.
67 68 69 70 71 72 73 74 75 76 |
# File 'lib/jamf/api/classic/api_objects/icon.rb', line 67 def self.all(refresh = false) @all_icons = nil if refresh return @all_icons if @all_icons @all_icons = [] qry = 'SELECT icon_id, filename FROM icons' res = Jamf::DB_CNX.db.query qry res.each_hash { |icon| @all_icons << { id: icon['icon_id'].to_i, name: icon['filename'] } } @all_icons end |
Instance Method Details
#pretty_print_instance_variables ⇒ Array
Remove the data object from the instance_variables used to create pretty-print (pp) output.
192 193 194 195 196 |
# File 'lib/jamf/api/classic/api_objects/icon.rb', line 192 def pretty_print_instance_variables vars = instance_variables.sort vars.delete :@data vars end |
#save(path, overwrite = false) ⇒ void
This method returns an undefined value.
Save the icon to a file.
If the path given is an existing directory, the icon’s current filename will be used, if known.
176 177 178 179 180 181 182 183 184 |
# File 'lib/jamf/api/classic/api_objects/icon.rb', line 176 def save(path, overwrite = false) path = Pathname.new path path += @name if path.directory? && @name raise Jamf::AlreadyExistsError, "The file #{path} already exists" if !overwrite && path.exist? path.delete if path.exist? path.jss_save @data end |
#show_in_browser ⇒ void
This method returns an undefined value.
Open the icon’s URL in the current user’s browser
160 161 162 163 164 |
# File 'lib/jamf/api/classic/api_objects/icon.rb', line 160 def show_in_browser return nil unless @uri system "/usr/bin/open '#{@uri}'" end |