Class: Treequel::Filter::SimpleItemComponent
- Inherits:
-
ItemComponent
- Object
- Component
- ItemComponent
- Treequel::Filter::SimpleItemComponent
- Includes:
- Constants::Patterns
- Defined in:
- lib/treequel/filter.rb
Overview
A simple (attribute=value) component
simple = attr filtertype value
filtertype = equal / approx / greater / less
equal = "="
approx = "~="
greater = ">="
less = "<="
Constant Summary collapse
- FILTERTYPE_OP =
The valid values for
filtertypeand the equivalent operator { :equal => '=', :approx => '~=', :greater => '>=', :less => '<=', }
- FILTEROP_NAMES =
Inverse of the FILTERTYPE_OP mapping (symbol -> name)
FILTERTYPE_OP.invert.freeze
- FILTER_SPLIT_REGEXP =
A regex that matches any of the ‘simple’ operators.
Regexp.new( '(' + FILTERTYPE_OP.values.join('|') + ')' )
Constants included from Constants::Patterns
Constants::Patterns::ALPHA, Constants::Patterns::AMPERSAND, Constants::Patterns::ASSERTIONVALUE, Constants::Patterns::ASTERISK, Constants::Patterns::ATTRIBUTE_TYPE, Constants::Patterns::ATTRIBUTE_TYPE_AND_VALUE, Constants::Patterns::ATTRIBUTE_VALUE, Constants::Patterns::BASE64_CHAR, Constants::Patterns::BASE64_STRING, Constants::Patterns::COLON, Constants::Patterns::COMMA, Constants::Patterns::DESCR, Constants::Patterns::DIGIT, Constants::Patterns::DISTINGUISHED_NAME, Constants::Patterns::DN_ESCAPED, Constants::Patterns::DOLLAR, Constants::Patterns::DOT, Constants::Patterns::DQUOTE, Constants::Patterns::DSTRING, Constants::Patterns::EQUALS, Constants::Patterns::ESC, Constants::Patterns::ESCAPED, Constants::Patterns::EXCLAMATION, Constants::Patterns::EXTENSIONS, Constants::Patterns::FILL, Constants::Patterns::FOLD, Constants::Patterns::HEX, Constants::Patterns::HEXPAIR, Constants::Patterns::HEXSTRING, Constants::Patterns::HYPHEN, Constants::Patterns::KEYCHAR, Constants::Patterns::KEYSTRING, Constants::Patterns::KIND, Constants::Patterns::LANGLE, Constants::Patterns::LCURLY, Constants::Patterns::LDAP_ATTRIBUTE_DESCRIPTION, Constants::Patterns::LDAP_ATTRIBUTE_TYPE_DESCRIPTION, Constants::Patterns::LDAP_MATCHING_RULE_DESCRIPTION, Constants::Patterns::LDAP_MATCHING_RULE_USE_DESCRIPTION, Constants::Patterns::LDAP_MISORDERED_DESC_OBJECTCLASS_DESCRIPTION, Constants::Patterns::LDAP_MISORDERED_KIND_OBJECTCLASS_DESCRIPTION, Constants::Patterns::LDAP_MISORDERED_SYNTAX_ATTRIBUTE_TYPE_DESCRIPTION, Constants::Patterns::LDAP_OBJECTCLASS_DESCRIPTION, Constants::Patterns::LDAP_SUBSTRING_FILTER, Constants::Patterns::LDAP_SUBSTRING_FILTER_VALUE, Constants::Patterns::LDAP_SYNTAX_DESCRIPTION, Constants::Patterns::LDAP_TRAILING_KIND_OBJECTCLASS_DESCRIPTION, Constants::Patterns::LDAP_UNESCAPE_SQUOTE_ATTRIBUTE_TYPE_DESCRIPTION, Constants::Patterns::LDIF_ATTRIBUTE_DESCRIPTION, Constants::Patterns::LDIF_ATTRIBUTE_TYPE, Constants::Patterns::LDIF_ATTRTYPE_OPTION, Constants::Patterns::LDIF_ATTRTYPE_OPTIONS, Constants::Patterns::LDIF_ATTRVAL_SPEC, Constants::Patterns::LDIF_ATTR_TYPE_CHARS, Constants::Patterns::LDIF_OPT_CHAR, Constants::Patterns::LDIF_SAFE_CHAR, Constants::Patterns::LDIF_SAFE_INIT_CHAR, Constants::Patterns::LDIF_SAFE_STRING, Constants::Patterns::LDIF_VALUE_SPEC, Constants::Patterns::LDIGIT, Constants::Patterns::LEADCHAR, Constants::Patterns::LEADKEYCHAR, Constants::Patterns::LEN, Constants::Patterns::LPAREN, Constants::Patterns::LUTF1, Constants::Patterns::MALFORMED_DSTRING, Constants::Patterns::MALFORMED_QDSTRING, Constants::Patterns::NOIDLEN, Constants::Patterns::NORMAL, Constants::Patterns::NUL, Constants::Patterns::NUMBER, Constants::Patterns::NUMERICOID, Constants::Patterns::OCTET, Constants::Patterns::OID, Constants::Patterns::OIDLIST, Constants::Patterns::OIDS, Constants::Patterns::PAIR, Constants::Patterns::PLUS, Constants::Patterns::QDESCR, Constants::Patterns::QDESCRLIST, Constants::Patterns::QDESCRS, Constants::Patterns::QDSTRING, Constants::Patterns::QDSTRINGLIST, Constants::Patterns::QDSTRINGS, Constants::Patterns::QQ, Constants::Patterns::QS, Constants::Patterns::QUOTED_DESCR, Constants::Patterns::QUOTED_NUMERICOID, Constants::Patterns::QUTF1, Constants::Patterns::QUTF8, Constants::Patterns::RANGLE, Constants::Patterns::RCURLY, Constants::Patterns::RELATIVE_DISTINGUISHED_NAME, Constants::Patterns::RPAREN, Constants::Patterns::SEMI, Constants::Patterns::SEP, Constants::Patterns::SHARP, Constants::Patterns::SP, Constants::Patterns::SPACE, Constants::Patterns::SPECIAL, Constants::Patterns::SQUOTE, Constants::Patterns::STRING, Constants::Patterns::STRINGCHAR, Constants::Patterns::SUTF1, Constants::Patterns::TILDE, Constants::Patterns::TRAILCHAR, Constants::Patterns::TUTF1, Constants::Patterns::UNESCAPED, Constants::Patterns::URI_REF, Constants::Patterns::USAGE, Constants::Patterns::USCORE, Constants::Patterns::UTF0, Constants::Patterns::UTF1, Constants::Patterns::UTF1SUBSET, Constants::Patterns::UTF2, Constants::Patterns::UTF3, Constants::Patterns::UTF4, Constants::Patterns::UTF8, Constants::Patterns::UTFMB, Constants::Patterns::VALUEENCODING, Constants::Patterns::VERTBAR, Constants::Patterns::WSP, Constants::Patterns::XSTRING
Instance Attribute Summary collapse
-
#attribute ⇒ Object
The name of the item’s attribute.
-
#filtertype ⇒ Object
The item’s filter type (one of FILTERTYPE_OP.keys).
-
#value ⇒ Object
The item’s value.
Class Method Summary collapse
-
.parse_from_string(literal) ⇒ Object
Parse a new SimpleItemComponent from the specified
literal.
Instance Method Summary collapse
-
#filtertype_op ⇒ Object
The operator that is associated with the item’s
filtertype. -
#initialize(attribute, value, filtertype = :equal) ⇒ SimpleItemComponent
constructor
Create a new ‘simple’ item filter component with the given
attribute,filtertype, andvalue. -
#to_s ⇒ Object
Stringify the component.
Methods inherited from Component
inherited, #inspect, #promiscuous?
Constructor Details
#initialize(attribute, value, filtertype = :equal) ⇒ SimpleItemComponent
Create a new ‘simple’ item filter component with the given attribute, filtertype, and value. The filtertype should be one of: :equal, :approx, :greater, :less
245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 |
# File 'lib/treequel/filter.rb', line 245 def initialize( attribute, value, filtertype=:equal ) self.log.debug "creating a new %s %s for %p and %p" % [ filtertype, self.class.name, attribute, value ] # Handle Sequel :attribute.identifier attribute = attribute.value if attribute.respond_to?( :value ) filtertype = filtertype.to_s.downcase.to_sym if FILTERTYPE_OP.key?( filtertype ) # no-op elsif FILTEROP_NAMES.key?( filtertype.to_s ) filtertype = FILTEROP_NAMES[ filtertype.to_s ] else raise Treequel::ExpressionError, "invalid simple item operator %p" % [ filtertype ] end @attribute = attribute @value = value @filtertype = filtertype end |
Instance Attribute Details
#attribute ⇒ Object
The name of the item’s attribute
273 274 275 |
# File 'lib/treequel/filter.rb', line 273 def attribute @attribute end |
#filtertype ⇒ Object
The item’s filter type (one of FILTERTYPE_OP.keys)
279 280 281 |
# File 'lib/treequel/filter.rb', line 279 def filtertype @filtertype end |
#value ⇒ Object
The item’s value
276 277 278 |
# File 'lib/treequel/filter.rb', line 276 def value @value end |
Class Method Details
.parse_from_string(literal) ⇒ Object
Parse a new SimpleItemComponent from the specified literal.
228 229 230 231 232 233 234 235 236 237 238 239 |
# File 'lib/treequel/filter.rb', line 228 def self::parse_from_string( literal ) parts = literal.split( FILTER_SPLIT_REGEXP, 3 ) unless parts.length == 3 raise Treequel::ExpressionError, "unable to parse %p as a string literal" % [ literal ] end attribute, operator, value = *parts filtertype = FILTEROP_NAMES[ operator ] return self.new( attribute, value, filtertype ) end |
Instance Method Details
#filtertype_op ⇒ Object
The operator that is associated with the item’s filtertype.
283 284 285 |
# File 'lib/treequel/filter.rb', line 283 def filtertype_op FILTERTYPE_OP[ self.filtertype.to_sym ] end |
#to_s ⇒ Object
Stringify the component
289 290 291 292 293 294 295 296 |
# File 'lib/treequel/filter.rb', line 289 def to_s # Escape all the filter metacharacters escaped_val = self.value.to_s.gsub( UNESCAPED ) do |char| '\\' + char.unpack('C*').first.to_s(16) end return [ self.attribute, self.filtertype_op, escaped_val ].join end |