Class: JSS::Criteriable::Criteria

Inherits:
Object
  • Object
show all
Defined in:
lib/jss/api_object/criteriable/criteria.rb,
lib/jss.rb

Overview

This class stores an array of Criterion instances and provides methods for working with them as a group.

APIObject subclasses that include JSS::Criteriable have a :criteria attribute which holds one Criteria object.

Objects that contain Criteria objects need to

  • call ‘#container = self’ on their Criteria object when its created.

  • implement #should_update, which the Criteria object calls when it changes.

Both of those tasks are handled by the JSS::Criteriable module and are mixed in when it’s included.

See JSS::Criteriable for examples

Constant Summary collapse

CRITERION_ATTRIBUTES =

Criterion instances we maintain need these attributes.s

[:priority, :and_or, :name, :search_type, :value]

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(new_criteria) ⇒ Criteria

Returns a new instance of Criteria.

Parameters:



79
80
81
82
# File 'lib/jss/api_object/criteriable/criteria.rb', line 79

def initialize(new_criteria)
  @criteria = []
  self.criteria = new_criteria
end

Instance Attribute Details

#containerJSS::APIObject subclass

Returns a reference to the object containing these Criteria.

Returns:

  • (JSS::APIObject subclass)

    a reference to the object containing these Criteria



74
75
76
# File 'lib/jss/api_object/criteriable/criteria.rb', line 74

def container
  @container
end

#criteriaArray

Returns the group of JSS::Criteriable::Criterion instances making up these Criteria.

Returns:

  • (Array)

    the group of JSS::Criteriable::Criterion instances making up these Criteria



71
72
73
# File 'lib/jss/api_object/criteriable/criteria.rb', line 71

def criteria
  @criteria
end

Instance Method Details

#append_criterion(criterion) ⇒ void

This method returns an undefined value.

Add a new criterion to the end of the criteria

Parameters:



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

def append_criterion(criterion)
  criterion_ok? criterion
  criterion.priority = @criteria.length
  @criteria << criterion
  @container.should_update if @container
end

#delete_criterion(priority) ⇒ void

This method returns an undefined value.

Remove a criterion from the criteria

Parameters:

  • priority (Integer)

    the priority/index of the criterion to delete



157
158
159
160
161
162
163
164
# File 'lib/jss/api_object/criteriable/criteria.rb', line 157

def delete_criterion(priority)
  if @criteria[priority]
    raise JSS::MissingDataError, "Criteria can't be empty" if @criteria.count == 1
    @criteria.delete_at priority
    set_priorities
  end
  @container.should_update if @container
end

#insert_criterion(priority, criterion) ⇒ void

This method returns an undefined value.

Add a new criterion to the middle of the criteria

Parameters:

  • priority (Integer)

    the priority/index before which to insert the new one.

  • criterion (JSS::Criteriable::Criterion)

    the new Criterion to store at that index



143
144
145
146
147
148
# File 'lib/jss/api_object/criteriable/criteria.rb', line 143

def insert_criterion(priority,criterion)
  criterion_ok? criterion
  @criteria.insert criterion[:priority], criterion
  set_priorities
  @container.should_update if @container
end

#prepend_criterion(criterion) ⇒ void

This method returns an undefined value.

Add a new criterion to the beginning of the criteria

Parameters:



127
128
129
130
131
132
# File 'lib/jss/api_object/criteriable/criteria.rb', line 127

def prepend_criterion(criterion)
  criterion_ok? criterion
  @criteria.unshift criterion
  set_priorities
  @container.should_update if @container
end

#rest_xmlREXML::Element

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.

Note:

This can’t be a private method for this class since container classes must call it

Returns the xml element for the criteria.

Returns:

  • (REXML::Element)

    the xml element for the criteria

Raises:



201
202
203
204
205
206
# File 'lib/jss/api_object/criteriable/criteria.rb', line 201

def rest_xml
   raise JSS::MissingDataError, "Criteria can't be empty" if @criteria.empty?
   cr = REXML::Element.new 'criteria'
   @criteria.each { |c| cr << c.rest_xml }
   return cr
end

#set_criterion(priority, criterion) ⇒ void

This method returns an undefined value.

Change the details of one specific criterion

Parameters:

  • priority (Integer)

    the priority/index of the criterion being changed. The index must already exist. Otherwise use #append_criterion, #prepend_criterion, or #insert_criterion

  • criterion (JSS::Criteriable::Criterion)

    the new Criterion to store at that index

Raises:



177
178
179
180
181
182
183
# File 'lib/jss/api_object/criteriable/criteria.rb', line 177

def set_criterion(priority, criterion)
  raise JSS::NoSuchItemError, "No current criterion with priority '#{priority}'" unless @criteria[priority]
  criterion_ok? criterion
  @criteria[priority] = criterion
  set_priorities
  @container.should_update if @container
end

#set_prioritiesvoid

This method returns an undefined value.

Set the priorities of the @criteria to match their array indices



190
191
192
# File 'lib/jss/api_object/criteriable/criteria.rb', line 190

def set_priorities
  @criteria.each_index{ |ci| @criteria[ci].priority = ci }
end