Class: JSS::Group

Inherits:
APIObject show all
Includes:
Creatable, Criteriable, Updatable
Defined in:
lib/jss/api_object/group.rb,
lib/jss.rb

Overview

This is the parent class of the smart/static group objects in the JSS namely, ComputerGroup, MobileDeviceGroup, and UserGroup

It provides methods for working with the membership of static groups and, by including Criteriable, the criteria for smart groups.

When changing the criteria of a smart group, use the #criteria attribute, which is a Criteria instance.

Subclasses must define the constant MEMBER_CLASS which indicates Ruby class to which the group members belong (e.g. JSS::MobileDevice)

Direct Known Subclasses

ComputerGroup, MobileDeviceGroup, UserGroup

Constant Summary collapse

GROUP_TYPES =

the types of groups allowed for creation

[:smart, :static]

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(args = {}) ⇒ Group

When creating a new group in the JSS, you must call .new with a :type key and a value of :smart or :static, as well as a :name and the :id => :new

See Also:



139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
# File 'lib/jss/api_object/group.rb', line 139

def initialize(args = {})

  if args[:id] == :new
    raise JSS::InvalidDataError, "New group creation must specify a :type of :smart or :static" unless GROUP_TYPES.include? args[:type]
  end

  super args

  @is_smart = @init_data[:is_smart] || (args[:type] == :smart)

  @members = if @init_data[self.class::MEMBER_CLASS::RSRC_LIST_KEY]
    @init_data[self.class::MEMBER_CLASS::RSRC_LIST_KEY]
  else
    []
  end

  @site = JSS::APIObject.get_name(@init_data[:site])

  parse_criteria

end

Instance Attribute Details

#criteriaJSS::Criteriable::Criteria Originally defined in module Criteriable

#is_smartBoolean (readonly) Also known as: smart?



119
120
121
# File 'lib/jss/api_object/group.rb', line 119

def is_smart
  @is_smart
end

#membersArray<Hash>

Each hash contains the identifiers for a member of the group, those being:

  • :id, :name, and possibly :udid, :serial_number, :mac_address, :alt_mac_address, and :wifi_mac_address



116
117
118
# File 'lib/jss/api_object/group.rb', line 116

def members
  @members
end

#need_to_updateBoolean (readonly) Originally defined in module Updatable

#notify_on_changeBoolean (readonly) Also known as: notify_on_change?, notify?



122
123
124
# File 'lib/jss/api_object/group.rb', line 122

def notify_on_change
  @notify_on_change
end

#siteString



126
127
128
# File 'lib/jss/api_object/group.rb', line 126

def site
  @site
end

Class Method Details

.all_smart(refresh = false) ⇒ Object

Returns an Array of all the smart groups.



90
91
92
# File 'lib/jss/api_object/group.rb', line 90

def self.all_smart(refresh = false)
  self.all(refresh).select{|g| g[:is_smart] }
end

.all_static(refresh = false) ⇒ Object

Returns an Array of all the static groups.



98
99
100
# File 'lib/jss/api_object/group.rb', line 98

def self.all_static(refresh = false)
  self.all(refresh).select{|g| not g[:is_smart] }
end

Instance Method Details

#add_member(m) ⇒ void

This method returns an undefined value.

Add a member, by name or id

Raises:



267
268
269
270
271
# File 'lib/jss/api_object/group.rb', line 267

def add_member(m)
  raise UnsupportedError, "Smart group members can't be changed." if @is_smart
  @members << check_member(m)
  @need_to_update = true
end

#clearvoid

This method returns an undefined value.

Remove all members

Raises:



295
296
297
298
299
300
# File 'lib/jss/api_object/group.rb', line 295

def clear
  raise InvalidDataError, "Smart group members can't be changed." if @is_smart
  return if @members.empty?
  @members.clear
  @need_to_update = true
end

#clone(new_name) ⇒ APIObject Originally defined in module Creatable

make a clone of this API object, with a new name. The class must be creatable

#createObject

See Also:



168
169
170
171
172
173
174
175
# File 'lib/jss/api_object/group.rb', line 168

def create
  if @is_smart
    raise JSS::MissingDataError, "No criteria specified for smart group" unless @criteria
  end
  super
  refresh_members
  return @id
end

#criteria=(new_criteria) ⇒ Object

Apply a new set of criteria to a smart group

Raises:



203
204
205
206
# File 'lib/jss/api_object/group.rb', line 203

def criteria= (new_criteria)
  raise InvalidDataError, "Only smart groups have criteria." unless @is_smart
  super
end

#deleteObject

See Also:



190
191
192
193
194
195
196
# File 'lib/jss/api_object/group.rb', line 190

def delete
  super
  @is_smart = nil
  @criteria = nil
  @site = nil
  @members = []
end

#member_idsArray<Integer>



228
229
230
# File 'lib/jss/api_object/group.rb', line 228

def member_ids
  @members.map{|m| m[:id]}
end

#member_namesArray<String>



221
222
223
# File 'lib/jss/api_object/group.rb', line 221

def member_names
  @members.map{|m| m[:name]}
end

#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_criteriavoid Originally defined in module Criteriable

This method returns an undefined value.

During initialization, convert the @init_data Hash into a JSS::Criteriable::Criteria instance stored in @criteria

Classes mixing in this module must call this in #initialize

#refresh_membersArray<Hash>

Refresh the membership from the API



307
308
309
# File 'lib/jss/api_object/group.rb', line 307

def refresh_members
  @members = JSS::API.get_rsrc(@rest_rsrc)[self.class::RSRC_OBJECT_KEY][self.class::MEMBER_CLASS::RSRC_LIST_KEY]
end

#remove_member(m) ⇒ void

This method returns an undefined value.

Remove a member by id, or name

Raises:



280
281
282
283
284
285
286
287
288
# File 'lib/jss/api_object/group.rb', line 280

def remove_member(m)
  raise InvalidDataError, "Smart group members can't be changed." if @is_smart

  if @members.reject!{ |mm|  [mm[:id], mm[:name]].include? m  }
    @need_to_update = true
  else
    raise JSS::NoSuchItemError, "No member matches '#{m}'"
  end
end

#should_updatevoid Originally defined in module Criteriable

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.

This method returns an undefined value.

Allow our Criteria to tell us when there’s been a change that needs to be updated.

#sizeInteger Also known as: count

How many members of the group?



213
214
215
# File 'lib/jss/api_object/group.rb', line 213

def size
  @members.count
end

#updateObject

See Also:



181
182
183
184
185
# File 'lib/jss/api_object/group.rb', line 181

def update
  super
  refresh_members
  true
end