Module: Metasploit::Model::Search::Operator
- Extended by:
- ActiveSupport::Autoload
- Defined in:
- lib/metasploit/model/search/operator.rb
Overview
Declaring operator classes
Interface
Operators do not need to subclass any specific superclass, but they are expected to define certain methods.
class MyOperator
#
# Instance Methods
#
# @param klass [Class] The klass on which `search_with` was called.
def initialize(attributes={})
# ...
end
# Description of what this operator searches for.
#
# @return [String]
def help
# ...
end
# Name of this operator. The name of the operator is matched to the string before the ':' in a formatted
# operation.
#
# @return [Symbol]
def name
# ...
end
# Creates a one or more operations based on `formatted_value`.
#
# @return [#operator, Array<#operator>] Operation with this operator as the operation's `operator`.
def operate_on(formatted_value)
# ...
end
end
Help
Instead of having define your own #help method for your operator Class, you can include
Help.
This allows the help to be looked up using I18n, and for the
help to be customized based on the following criteria:
klass on which the operator is declared, including any Module#ancestors and the operator name
<span class='comment val'># config/locales/<lang>.yml</span>
<span class='lt op'><</span><span class='rubyid_lang identifier id'>lang</span><span class='gt op'>></span><span class='colon op'>:</span>
<span class='lt op'><</span><span class='rubyid_klass identifier id'>klass</span><span class='dot token'>.</span><span class='rubyid_i18n_scope identifier id'>i18n_scope</span><span class='gt op'>></span><span class='colon op'>:</span>
<span class='label val'>ancestors:</span>
<span class='lt op'><</span><span class='rubyid_klass_ancestor identifier id'>klass_ancestor</span><span class='dot token'>.</span><span class='rubyid_model_name identifier id'>model_name</span><span class='dot token'>.</span><span class='rubyid_i18n_key identifier id'>i18n_key</span><span class='gt op'>></span><span class='colon op'>:</span>
<span class='label val'>search:</span>
<span class='label val'>operator:</span>
<span class='label val'>names:</span>
<span class='lt op'><</span><span class='rubyid_name identifier id'>name</span><span class='gt op'>></span><span class='colon op'>:</span>
<span class='label val'>help:</span> <span class='string val'>"Help for searching <name> on <klass>"</span>
class of the operator, including any Module#ancestors and the operator name
<span class='comment val'># config/locales/<lang>.yml</span>
<span class='lt op'><</span><span class='rubyid_lang identifier id'>lang</span><span class='gt op'>></span><span class='colon op'>:</span>
<span class='lt op'><</span><span class='rubyid_operator identifier id'>operator</span><span class='dot token'>.</span><span class='rubyid_class identifier id'>class</span><span class='dot token'>.</span><span class='rubyid_i18n_scope identifier id'>i18n_scope</span><span class='gt op'>></span><span class='colon op'>:</span>
<span class='label val'>search:</span>
<span class='label val'>operator:</span>
<span class='label val'>ancestors:</span>
<span class='lt op'><</span><span class='rubyid_operator_class_ancestor identifier id'>operator_class_ancestor</span><span class='dot token'>.</span><span class='rubyid_model_name identifier id'>model_name</span><span class='dot token'>.</span><span class='rubyid_i18n_key identifier id'>i18n_key</span><span class='gt op'>></span><span class='colon op'>:</span>
<span class='lt op'><</span><span class='rubyid_name identifier id'>name</span><span class='gt op'>></span><span class='colon op'>:</span>
<span class='label val'>help:</span> <span class='string val'>"Help for searching <name> using <operator.class>"</span>
class of the operator, including any Module#ancestors without the operator name
<span class='comment val'># config/locales/<lang>.yml</span>
<span class='lt op'><</span><span class='rubyid_lang identifier id'>lang</span><span class='gt op'>></span><span class='colon op'>:</span>
<span class='lt op'><</span><span class='rubyid_operator identifier id'>operator</span><span class='dot token'>.</span><span class='rubyid_class identifier id'>class</span><span class='dot token'>.</span><span class='rubyid_i18n_scope identifier id'>i18n_scope</span><span class='gt op'>></span><span class='colon op'>:</span>
<span class='label val'>search:</span>
<span class='label val'>operator:</span>
<span class='label val'>ancestors:</span>
<span class='lt op'><</span><span class='rubyid_operator_class_ancestor identifier id'>operator_class_ancestor</span><span class='dot token'>.</span><span class='rubyid_model_name identifier id'>model_name</span><span class='dot token'>.</span><span class='rubyid_i18n_key identifier id'>i18n_key</span><span class='gt op'>></span><span class='colon op'>:</span>
<span class='label val'>help:</span> <span class='string val'>"Help for searching using <operator.class>"</span>
Base
Instead of writing an operator completely from scratch, you can subclass Base.
<span class='rubyid_class class kw'>class</span> <span class='rubyid_MyOperator constant id'>MyOperator</span> <span class='lt op'><</span> <span class='rubyid_Metasploit constant id'>Metasploit</span><span class='colon2 op'>::</span><span class='rubyid_Model constant id'>Model</span><span class='colon2 op'>::</span><span class='rubyid_Search constant id'>Search</span><span class='colon2 op'>::</span><span class='rubyid_Operator constant id'>Operator</span><span class='colon2 op'>::</span><span class='rubyid_Base constant id'>Base</span>
<span class='comment val'># Name of this operator. The name of the operator is matched to the string before the ':' in a formatted</span>
<span class='comment val'># operation.</span>
<span class='comment val'>#</span>
<span class='comment val'># @return [Symbol]</span>
<span class='rubyid_def def kw'>def</span> <span class='rubyid_name identifier id'>name</span>
<span class='comment val'># ...</span>
<span class='rubyid_end end kw'>end</span>
<span class='comment val'># Creates a one or more operations based on `formatted_value`.</span>
<span class='comment val'>#</span>
<span class='comment val'># @return [#operator, Array<#operator>] Operation with this operator as the operation's `operator`.</span>
<span class='rubyid_def def kw'>def</span> <span class='rubyid_operate_on identifier id'>operate_on</span><span class='lparen token'>(</span><span class='rubyid_formatted_value identifier id'>formatted_value</span><span class='rparen token'>)</span>
<span class='comment val'># ...</span>
<span class='rubyid_end end kw'>end</span>
<span class='rubyid_end end kw'>end</span>
Single
If all you want do is customize the name and operation Class that your custom operator class returns from
#operate_on, then you can subclass Single instead of
Base.
<span class='rubyid_class class kw'>class</span> <span class='rubyid_MyOperator constant id'>MyOperator</span> <span class='lt op'><</span> <span class='rubyid_Metasploit constant id'>Metasploit</span><span class='colon2 op'>::</span><span class='rubyid_Model constant id'>Model</span><span class='colon2 op'>::</span><span class='rubyid_Search constant id'>Search</span><span class='colon2 op'>::</span><span class='rubyid_Operator constant id'>Operator</span><span class='colon2 op'>::</span><span class='rubyid_Single constant id'>Single</span>
<span class='comment val'># Name of this operator. The name of the operator is matched to the string before the ':' in a formatted</span>
<span class='comment val'># operation.</span>
<span class='comment val'>#</span>
<span class='comment val'># @return [Symbol]</span>
<span class='rubyid_def def kw'>def</span> <span class='rubyid_name identifier id'>name</span>
<span class='comment val'># ...</span>
<span class='rubyid_end end kw'>end</span>
<span class='comment val'># `Class.name` of `Class` returned from {Metasploit::Model::Search::Operator::Single#operate_on}.</span>
<span class='comment val'>#</span>
<span class='comment val'># @return [String] a `Class.name`</span>
<span class='rubyid_def def kw'>def</span> <span class='rubyid_operation_class_name identifier id'>operation_class_name</span>
<span class='comment val'># ...</span>
<span class='rubyid_end end kw'>end</span>
<span class='rubyid_end end kw'>end</span>
Defined Under Namespace
Modules: Deprecated, Group, Help Classes: Association, Attribute, Base, Delegation, Null, Single