Sha256: bf8e18a9c70372f04a59083fbf2dea404c21cfc3e84f0a86e0224b772da268a2
Contents?: true
Size: 1.75 KB
Versions: 5
Compression:
Stored size: 1.75 KB
Contents
module ForestAdminDatasourceToolkit module Components module Query module ConditionTree module Transforms class Pattern def self.likes(get_pattern, case_sensitive) operator = case_sensitive ? Operators::LIKE : Operators::I_LIKE { dependsOn: [operator], forTypes: ['String'], replacer: ->(leaf) { leaf.override(operator: operator, value: get_pattern.call(leaf.value)) } } end def self.match(case_sensitive) { dependsOn: [Operators::MATCH], forTypes: ['String'], replacer: lambda { |leaf| regex = leaf.value.gsub(/([\.\\\+\*\?\[\^\]\$\(\)\{\}\=\!\<\>\|\:\-])/, '\\\\\1') regex.gsub!('%', '.*') regex.tr!('_', '.') leaf.override(operator: Operators::MATCH, value: "/^#{regex}$/#{case_sensitive ? "" : "i"}") } } end def self.transforms { Operators::CONTAINS => [likes(->(value) { "%#{value}%" }, true)], Operators::STARTS_WITH => [likes(->(value) { "#{value}%" }, true)], Operators::ENDS_WITH => [likes(->(value) { "%#{value}" }, true)], Operators::I_CONTAINS => [likes(->(value) { "%#{value}%" }, false)], Operators::I_STARTS_WITH => [likes(->(value) { "#{value}%" }, false)], Operators::I_ENDS_WITH => [likes(->(value) { "%#{value}" }, false)], Operators::I_LIKE => [match(false)], Operators::LIKE => [match(true)] } end end end end end end end
Version data entries
5 entries across 5 versions & 1 rubygems