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].freeze
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.
80 81 82 83 |
# File 'lib/jss/api_object/criteriable/criteria.rb', line 80 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.
75 76 77 |
# File 'lib/jss/api_object/criteriable/criteria.rb', line 75 def container @container end |
#criteria ⇒ Array
Returns the group of JSS::Criteriable::Criterion instances making up these Criteria.
72 73 74 |
# File 'lib/jss/api_object/criteriable/criteria.rb', line 72 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
114 115 116 117 118 119 |
# File 'lib/jss/api_object/criteriable/criteria.rb', line 114 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
158 159 160 161 162 163 164 165 |
# File 'lib/jss/api_object/criteriable/criteria.rb', line 158 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
144 145 146 147 148 149 |
# File 'lib/jss/api_object/criteriable/criteria.rb', line 144 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
128 129 130 131 132 133 |
# File 'lib/jss/api_object/criteriable/criteria.rb', line 128 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.
202 203 204 205 206 207 |
# File 'lib/jss/api_object/criteriable/criteria.rb', line 202 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 } cr end |
#set_criterion(priority, criterion) ⇒ void
This method returns an undefined value.
Change the details of one specific criterion
178 179 180 181 182 183 184 |
# File 'lib/jss/api_object/criteriable/criteria.rb', line 178 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
191 192 193 |
# File 'lib/jss/api_object/criteriable/criteria.rb', line 191 def set_priorities @criteria.each_index { |ci| @criteria[ci].priority = ci } end |