Class: JSS::Group

Inherits:
APIObject show all
Includes:
Creatable, Criteriable, Updatable
Defined in:
lib/jss-api/api_object/group.rb,
lib/jss-api.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]

Constants included from Criteriable

Criteriable::CRITERIABLE

Constants included from Updatable

Updatable::UPDATABLE

Constants included from Creatable

Creatable::CREATABLE

Constants inherited from APIObject

APIObject::DEFAULT_LOOKUP_KEYS, APIObject::REQUIRED_DATA_KEYS

Instance Attribute Summary collapse

Attributes included from Criteriable

#criteria

Attributes included from Updatable

#need_to_update

Attributes inherited from APIObject

#id, #in_jss, #name, #rest_rsrc

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Criteriable

#parse_criteria, #should_update

Methods included from Updatable

#name=

Methods inherited from APIObject

all, all_ids, all_names, get_name, map_all_ids_to, #save, xml_list

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/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

#is_smartBoolean (readonly) Also known as: smart?

Returns is this a smart group.

Returns:

  • (Boolean)

    is this a smart group



119
120
121
# File 'lib/jss-api/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

Returns:

See Also:



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

def members
  @members
end

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

Returns does this group send notifications when it changes?.

Returns:

  • (Boolean)

    does this group send notifications when it changes?



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

def notify_on_change
  @notify_on_change
end

#siteString

Returns the :name of the site for this group.

Returns:

  • (String)

    the :name of the site for this group



126
127
128
# File 'lib/jss-api/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/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/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

Parameters:

  • m (Integer, String)

    the id or name of the member to add

Raises:



267
268
269
270
271
# File 'lib/jss-api/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/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

#createObject

See Also:



168
169
170
171
172
173
174
175
# File 'lib/jss-api/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

Parameters:

  • new_criteria (JSS::Criteria)

    the new criteria for the smart group

Raises:



203
204
205
206
# File 'lib/jss-api/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/api_object/group.rb', line 190

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

#member_idsArray<Integer>

Returns the ids of the group members.

Returns:

  • (Array<Integer>)

    the ids of the group members



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

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

#member_namesArray<String>

Returns the names of the group members.

Returns:



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

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

#refresh_membersArray<Hash>

Refresh the membership from the API

Returns:



307
308
309
# File 'lib/jss-api/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

Parameters:

  • m (Integer, String)

    the id or name of the member to remove

Raises:



280
281
282
283
284
285
286
287
288
# File 'lib/jss-api/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

#sizeInteger Also known as: count

How many members of the group?

Returns:

  • (Integer)

    the number of members of the group



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

def size
  @members.count
end

#updateObject

See Also:



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

def update
  super
  refresh_members
  true
end