Class: JSS::Group
- 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
Constant Summary collapse
- GROUP_TYPES =
the types of groups allowed for creation
[:smart, :static]
Constants included from Criteriable
Constants included from Updatable
Constants included from Creatable
Constants inherited from APIObject
APIObject::DEFAULT_LOOKUP_KEYS, APIObject::REQUIRED_DATA_KEYS
Instance Attribute Summary collapse
-
#is_smart ⇒ Boolean
(also: #smart?)
readonly
Is this a smart group.
-
#members ⇒ Array<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.
-
#notify_on_change ⇒ Boolean
(also: #notify_on_change?, #notify?)
readonly
Does this group send notifications when it changes?.
-
#site ⇒ String
The :name of the site for this group.
Attributes included from Criteriable
Attributes included from Updatable
Attributes inherited from APIObject
#id, #in_jss, #name, #rest_rsrc
Class Method Summary collapse
-
.all_smart(refresh = false) ⇒ Object
Returns an Array of all the smart groups.
-
.all_static(refresh = false) ⇒ Object
Returns an Array of all the static groups.
Instance Method Summary collapse
-
#add_member(m) ⇒ void
Add a member, by name or id.
-
#clear ⇒ void
Remove all members.
- #create ⇒ Object
-
#criteria=(new_criteria) ⇒ Object
Apply a new set of criteria to a smart group.
- #delete ⇒ Object
-
#initialize(args = {}) ⇒ Group
constructor
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.
-
#member_ids ⇒ Array<Integer>
The ids of the group members.
-
#member_names ⇒ Array<String>
The names of the group members.
-
#refresh_members ⇒ Array<Hash>
Refresh the membership from the API.
-
#remove_member(m) ⇒ void
Remove a member by id, or name.
-
#size ⇒ Integer
(also: #count)
How many members of the group?.
- #update ⇒ Object
Methods included from Criteriable
#parse_criteria, #should_update
Methods included from Updatable
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
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_smart ⇒ Boolean (readonly) Also known as: smart?
Returns is this a smart group.
119 120 121 |
# File 'lib/jss-api/api_object/group.rb', line 119 def is_smart @is_smart end |
#members ⇒ Array<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/api_object/group.rb', line 116 def members @members end |
#notify_on_change ⇒ Boolean (readonly) Also known as: notify_on_change?, notify?
Returns 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 |
#site ⇒ String
Returns 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
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 |
#clear ⇒ void
This method returns an undefined value.
Remove all members
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 |
#create ⇒ Object
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
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 |
#delete ⇒ Object
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_ids ⇒ Array<Integer>
Returns 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_names ⇒ Array<String>
Returns the names of the group members.
221 222 223 |
# File 'lib/jss-api/api_object/group.rb', line 221 def member_names @members.map{|m| m[:name]} end |
#refresh_members ⇒ Array<Hash>
Refresh the membership from the API
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
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 |
#size ⇒ Integer Also known as: count
How many members of the group?
213 214 215 |
# File 'lib/jss-api/api_object/group.rb', line 213 def size @members.count end |
#update ⇒ Object
181 182 183 184 185 |
# File 'lib/jss-api/api_object/group.rb', line 181 def update super refresh_members true end |