Class: ForestAdminDatasourceToolkit::Components::Query::ConditionTree::Transforms::Pattern

Inherits:
Object
  • Object
show all
Defined in:
lib/forest_admin_datasource_toolkit/components/query/condition_tree/transforms/pattern.rb

Class Method Summary collapse

Class Method Details

.likes(get_pattern, case_sensitive) ⇒ Object



7
8
9
10
11
12
13
14
15
# File 'lib/forest_admin_datasource_toolkit/components/query/condition_tree/transforms/pattern.rb', line 7

def self.likes(get_pattern, case_sensitive)
  operator = case_sensitive ? Operators::LIKE : Operators::I_LIKE

  {
    depends_on: [operator],
    for_types: ['String'],
    replacer: proc { |leaf| leaf.override(operator: operator, value: get_pattern.call(leaf.value)) }
  }
end

.match(case_sensitive) ⇒ Object



17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/forest_admin_datasource_toolkit/components/query/condition_tree/transforms/pattern.rb', line 17

def self.match(case_sensitive)
  {
    depends_on: [Operators::MATCH],
    for_types: ['String'],
    replacer: proc { |leaf|
      regex = leaf.value.gsub(/([.\\+*?\[\^\]$(){}=!<>|:-])/, '\\\\\1')
      regex.gsub!('%', '.*')
      regex.tr!('_', '.')

      leaf.override(operator: Operators::MATCH, value: Regexp.new("^#{regex}$", case_sensitive ? nil : 'i'))
    }
  }
end

.transformsObject



31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/forest_admin_datasource_toolkit/components/query/condition_tree/transforms/pattern.rb', line 31

def self.transforms
  {
    Operators::CONTAINS => [likes(proc { |value| "%#{value}%" }, true)],
    Operators::STARTS_WITH => [likes(proc { |value| "#{value}%" }, true)],
    Operators::ENDS_WITH => [likes(proc { |value| "%#{value}" }, true)],
    Operators::I_CONTAINS => [likes(proc { |value| "%#{value}%" }, false)],
    Operators::I_STARTS_WITH => [likes(proc { |value| "#{value}%" }, false)],
    Operators::I_ENDS_WITH => [likes(proc { |value| "%#{value}" }, false)],
    Operators::I_LIKE => [match(false)],
    Operators::LIKE => [match(true)]
  }
end