Class: JSS::MobileDeviceExtensionAttribute

Inherits:
ExtensionAttribute show all
Defined in:
lib/jss/api_object/extension_attribute/mobile_device_extension_attribute.rb,
lib/jss.rb

Overview

An extension attribute as defined in the JSS

Constant Summary collapse

RSRC_BASE =

The base for REST resources of this class

'mobiledeviceextensionattributes'.freeze
RSRC_LIST_KEY =

the hash key used for the JSON list output of all objects in the JSS

:mobile_device_extension_attributes
RSRC_OBJECT_KEY =

The hash key used for the JSON object output. It’s also used in various error messages

:mobile_device_extension_attribute
TARGET_CLASS =

these ext attribs are related to these kinds of objects

JSS::MobileDevice
ALL_TARGETS_CRITERION =

A criterion that will return all members of the TARGET_CLASS

JSS::Criteriable::Criterion.new(and_or: 'and', name: 'Last Inventory Update', search_type: 'after (yyyy-mm-dd)', value: '2003-01-01')
OBJECT_HISTORY_OBJECT_TYPE =

the object type for this object in the object history table. See APIObject#add_object_history_entry

86

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(args = {}) ⇒ MobileDeviceExtensionAttribute

See JSS::APIObject.initialize



101
102
103
104
# File 'lib/jss/api_object/extension_attribute/mobile_device_extension_attribute.rb', line 101

def initialize(args = {})
  super args
  @attribute_mapping = @init_data[:input_type][:attribute_mapping] if @init_data[:input_type]
end

Instance Attribute Details

#attribute_mappingString

Returns the name of the LDAP attribute to use when the @input Type is “LDAP Attribute Mapping”.

Returns:

  • (String)

    the name of the LDAP attribute to use when the @input Type is “LDAP Attribute Mapping”



92
93
94
# File 'lib/jss/api_object/extension_attribute/mobile_device_extension_attribute.rb', line 92

def attribute_mapping
  @attribute_mapping
end

#need_to_updateBoolean (readonly) Originally defined in module Updatable

Returns do we have unsaved changes?.

Returns:

  • (Boolean)

    do we have unsaved changes?

Instance Method Details

#createObject

See Also:



113
114
115
116
117
118
# File 'lib/jss/api_object/extension_attribute/mobile_device_extension_attribute.rb', line 113

def create
  if @input_type == 'LDAP Attribute Mapping'
    raise MissingDataError, "No attribute_mapping defined for 'LDAP Attribute Mapping' input_type." unless @attribute_mapping
  end
  super
end

#history(mobiledevice) ⇒ Array<Hash{:timestamp=>Time,:value=>String,Integer,Time}>

Return an Array of Hashes showing the history of reported values for this EA on one MobileDevice.

Each hash contains these 2 keys:

  • :value - String, Integer, or Time, depending on @data_type

  • :timestamp - Time

This method requires a MySQL database connection established via JSS::DB_CNX.connect

Parameters:

  • mobiledevice (Integer, String)

    the id or name of the MobileDevice.

Returns:

Raises:

See Also:



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
200
201
202
203
204
205
# File 'lib/jss/api_object/extension_attribute/mobile_device_extension_attribute.rb', line 171

def history(mobiledevice)
  raise JSS::NoSuchItemError, "EA Not In JSS! Use #create to create this #{RSRC_OBJECT_KEY}." unless @in_jss
  raise JSS::InvalidConnectionError, "Database connection required for 'history' query." unless JSS::DB_CNX.connected?

  mobile_device_id = case mobiledevice
                     when *JSS::MobileDevice.all_ids(api: @api)
                       mobiledevice
                     when *JSS::MobileDevice.all_names(api: @api)
                       JSS::MobileDevice.map_all_ids_to(:name, api: @api).invert[mobiledevice]
                     end # case

  raise JSS::NoSuchItemError, "No MobileDevice found matching '#{mobiledevice}'" unless mobile_device_id

  the_query = <<-END_Q
  SELECT eav.value_on_client AS value, r.date_entered_epoch AS timestamp_epoch
  FROM mobile_device_extension_attribute_values eav JOIN reports r ON eav.report_id = r.report_id
  WHERE r.mobile_device_id = #{mobile_device_id}
    AND eav.mobile_device_extension_attribute_id = #{@id}
  ORDER BY timestamp_epoch
  END_Q

  qrez = JSS::DB_CNX.db.query the_query
  history = []
  qrez.each_hash do |entry|
    value = case @data_type
            when 'String' then entry['value']
            when 'Integer' then entry['value'].to_i
            when 'Date' then JSS.parse_datetime(entry['value'])
            end # case
    newhash = { value: value, timestamp: JSS.epoch_to_time(entry['timestamp_epoch']) }
    history << newhash
  end # each hash

  history
end

#input_type=(new_val) ⇒ Object



132
133
134
135
136
137
138
139
140
141
142
# File 'lib/jss/api_object/extension_attribute/mobile_device_extension_attribute.rb', line 132

def input_type= (new_val)
  raise JSS::InvalidDataError, "Mobile Device Extension Attribute input_type cannot be 'script'" if new_val == 'script'

  super

  if @input_type == 'LDAP Attribute Mapping'
    @popup_choices = nil
  else
    @attribute_mapping = nil
  end
end

#web_display=(new_val) ⇒ Object



123
124
125
126
# File 'lib/jss/api_object/extension_attribute/mobile_device_extension_attribute.rb', line 123

def web_display= (new_val)
  raise JSS::InvalidDataError, "web_display cannot be 'Operating System' for Mobile Device Extension Attributes." if new_val == 'Operating System'
  super
end