Class: JSS::Criteriable::Criteria
- 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
-
#container ⇒ JSS::APIObject subclass
A reference to the object containing these Criteria.
-
#criteria ⇒ Array
The group of JSS::Criteriable::Criterion instances making up these Criteria.
Instance Method Summary collapse
-
#append_criterion(criterion) ⇒ void
Add a new criterion to the end of the criteria.
-
#delete_criterion(priority) ⇒ void
Remove a criterion from the criteria.
-
#initialize(new_criteria) ⇒ Criteria
constructor
A new instance of Criteria.
-
#insert_criterion(priority, criterion) ⇒ void
Add a new criterion to the middle of the criteria.
-
#prepend_criterion(criterion) ⇒ void
Add a new criterion to the beginning of the criteria.
-
#rest_xml ⇒ REXML::Element
private
The xml element for the criteria.
-
#set_criterion(priority, criterion) ⇒ void
Change the details of one specific criterion.
-
#set_priorities ⇒ void
Set the priorities of the @criteria to match their array indices.
Constructor Details
#initialize(new_criteria) ⇒ Criteria
Returns a new instance of Criteria.
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
#container ⇒ JSS::APIObject subclass
Returns 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 |
#criteria ⇒ Array
Returns 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
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
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
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
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_xml ⇒ REXML::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.
This can’t be a private method for this class since container classes must call it
Returns the xml element for the criteria.
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
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_priorities ⇒ void
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 |