Class: Ldumbd::FilterConverter

Inherits:
Object
  • Object
show all
Defined in:
lib/ldumbd/filter_converter.rb

Class Method Summary collapse

Class Method Details

.filter_to_sequel(base_model, filter) ⇒ Object

Public: Converts a parsed LDAP filter to a Sequel dataset filter.

base_model: The dataset’s base model. filter: A parsed LDAP filter.

Examples

base_model = User
filter = [:and,
           [:eq, 'uid', nil, 'john'],
           [:ge, 'uidNumber', nil, '1000']]
base_model.where(Ldumbd::FilterConverter.filter_to_sequel(base_model,
                                                          filter)).sql
# => "SELECT * FROM \"users\" WHERE ((\"users\".\"name\" = 'john') AND (\"users\".\"id\" >= '1000'))"

Returns a Sequel dataset filter.



21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/ldumbd/filter_converter.rb', line 21

def self.filter_to_sequel(base_model, filter)
  filter = filter.dup
  op = filter.shift
  case op
  when :and, :or, :not
    nested_filter_to_sequel(base_model, filter, op)
  when :true, :false, :eq, :ge, :le, :present, :substrings
    simple_filter_to_sequel(base_model, filter, op)
  else
    raise 'not implemented yet'
  end
end