Module: JSS::Criteriable

Included in:
AdvancedSearch, Group
Defined in:
lib/jss.rb,
lib/jss/api_object/criteriable.rb,
lib/jss/api_object/criteriable/criteria.rb,
lib/jss/api_object/criteriable/criterion.rb

Overview

A mix-in module that allows objects to handle standardized search Criteria.

Some objects in the JSS, such as Advanced Searches and Smart Groups, include a set of Criteria. (i.e conditions which, when met, signify inclusion in some result set.)

A Criteria instance is a container for one or more Criterion instances and provides methods for dealing with them easily.

When a APIObject subclass includes this module, that subclass will have a :criteria attribute, which holds a Criteria object and can be used to manipulate the Criterion objects inside.

The including subclass also gains some instance methods:

  • #parse_critera - sets up the :criteria attribute during initialization

  • #criteria= - allows the wholesale replacement of the criteria

  • #need_to_update - allows the Criteria instance to inform the subclass instance that it has changed and needs an #update

Classes mixing in this module must

  • If they are Updatable or Creatable, they must insert self.criteria.rest_xml into their own xml output.

Examples:

Working with the criteria of an advanced search

# create a couple of Criterion instances
crtn_0 = JSS::Criteriable::Criterion.new :and_or => :or, :name => "Username", :search_type => "is", :value => "jeauxbleaux"
crtn_1 = JSS::Criteriable::Criterion.new :and_or => :and, :name => "Last Check-in", :search_type => "less than x days ago", :value => 3

# use them to create a Criteria instance
crta = JSS::Criteriable::Criteria.new [crtn_0, crtn_1]

# create a new Advanced Search
srch = JSS::AdvancedComputerSearch.new :id => :new, :name => "my computer search"
srch.display_fields = ["Computer Name"]

# add our Criteria to it
srch.criteria = crta

# create it in the JSS
srch.create # srch.search_results now contains the matching computers

# append a new criterion to the criteria, limiting the search results farther
srch.criteria.append_criterion JSS::Criteriable::Criterion.new(:and_or => :or, :name => "Computer Name", :search_type => "like", :value => "o")

# save the change to the JSS
srch.save  # srch.search_results  now contains the matching computers

# oops - that last one should have been :and, not :or
srch.criteria.criteria[2].and_or = :and

# the above can also be achieved like this, by replacing the last criterion altogether:
srch.criteria.set_criterion 2, JSS::Criteriable::Criterion.new(:and_or => :and, :name => "Computer Name", :search_type => "like", :value => "o")

# save the change to the JSS
srch.save  # srch.search_results  now contains the matching computers

See Also:

Defined Under Namespace

Classes: Criteria, Criterion

Constant Summary collapse

CRITERIABLE =

Constants

true

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#criteriaJSS::Criteriable::Criteria

Returns the criteria for the instance into which we’re mixed.

Returns:



129
130
131
# File 'lib/jss/api_object/criteriable.rb', line 129

def criteria
  @criteria
end

Instance Method Details

#parse_criteriavoid

This method returns an undefined value.

During initialization, convert the @init_data Hash into a JSS::Criteriable::Criteria instance stored in @criteria

Classes mixing in this module must call this in #initialize



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

def parse_criteria
  @criteria = if @init_data[:criteria]
    JSS::Criteriable::Criteria.new @init_data[:criteria].map{|c| JSS::Criteriable::Criterion.new c}
  else
    nil
  end
  @criteria.container = self if @criteria
end

#should_updatevoid

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 method returns an undefined value.

Allow our Criteria to tell us when there’s been a change that needs to be updated.



174
175
176
# File 'lib/jss/api_object/criteriable.rb', line 174

def should_update
  @need_to_update = true if @in_jss
end