Module: YiffSpace::Extensions::ActiveRecord::WhereChain

Defined in:
lib/yiffspace/extensions/active_record/where_chain.rb

Constant Summary collapse

METHODS =
{
  lt:            ->(table_name, column, value) { Arel::Table.new(table_name)[column].lt(value) },
  lteq:          ->(table_name, column, value) { Arel::Table.new(table_name)[column].lteq(value) },
  gt:            ->(table_name, column, value) { Arel::Table.new(table_name)[column].gt(value) },
  gteq:          ->(table_name, column, value) { Arel::Table.new(table_name)[column].gteq(value) },
  between:       ->(table_name, column, value) { Arel::Table.new(table_name)[column].between(value) },
  not_between:   ->(table_name, column, value) { Arel::Table.new(table_name)[column].not_between(value) },
  in:            ->(table_name, column, value) { Arel::Table.new(table_name)[column].in(value) },
  not_in:        ->(table_name, column, value) { Arel::Table.new(table_name)[column].not_in(value) },
  like:          ->(table_name, column, value) { Arel::Table.new(table_name)[column].matches(value.to_escaped_for_sql_like, Arel.sql("E'\\\\'"), true) },
  ilike:         ->(table_name, column, value) { Arel::Table.new(table_name)[column].matches(value.to_escaped_for_sql_like, Arel.sql("E'\\\\'"), false) },
  not_like:      ->(table_name, column, value) { Arel::Table.new(table_name)[column].does_not_match(value.to_escaped_for_sql_like, Arel.sql("E'\\\\'"), true) },
  not_ilike:     ->(table_name, column, value) { Arel::Table.new(table_name)[column].does_not_match(value.to_escaped_for_sql_like, Arel.sql("E'\\\\'"), false) },
  like_all:      ->(table_name, column, value) { Arel::Table.new(table_name)[column].matches_all(value.map(&:to_escaped_for_sql_like), Arel.sql("E'\\\\'"), true) },
  ilike_all:     ->(table_name, column, value) { Arel::Table.new(table_name)[column].matches_all(value.map(&:to_escaped_for_sql_like), Arel.sql("E'\\\\'"), false) },
  not_like_all:  ->(table_name, column, value) { Arel::Table.new(table_name)[column].does_not_match_all(value.map(&:to_escaped_for_sql_like), Arel.sql("E'\\\\'"), true) },
  not_ilike_all: ->(table_name, column, value) { Arel::Table.new(table_name)[column].does_not_match_all(value.map(&:to_escaped_for_sql_like), Arel.sql("E'\\\\'"), false) },
  like_any:      ->(table_name, column, value) { Arel::Table.new(table_name)[column].matches_any(value.map(&:to_escaped_for_sql_like), Arel.sql("E'\\\\'"), true) },
  ilike_any:     ->(table_name, column, value) { Arel::Table.new(table_name)[column].matches_any(value.map(&:to_escaped_for_sql_like), Arel.sql("E'\\\\'"), false) },
  not_like_any:  ->(table_name, column, value) { Arel::Table.new(table_name)[column].does_not_match_any(value.map(&:to_escaped_for_sql_like), Arel.sql("E'\\\\'"), true) },
  not_ilike_any: ->(table_name, column, value) { Arel::Table.new(table_name)[column].does_not_match_any(value.map(&:to_escaped_for_sql_like), Arel.sql("E'\\\\'"), false) },
  regex:         ->(table_name, column, value, flags) { Arel::Table.new(table_name)[column].matches_regexp("(?#{flags})#{value.is_a?(Regexp) ? value.source : value}") },
  not_regex:     ->(table_name, column, value, flags) { Arel::Table.new(table_name)[column].does_not_match_regexp("(?#{flags})#{value.is_a?(Regexp) ? value.source : value}") },
  tsquery:       ->(table_name, column, value, ts_config) { Arel.sql("to_tsvector(:ts_config, :table) @@ plainto_tsquery(:ts_config, :value)", ts_config: ts_config, value: value, table: Arel.sql("#{table_name}.#{column}")) },
  has_bits:      ->(table_name, column, value) { Arel.sql("(#{table_name}.#{column} & #{Arel::Nodes.build_quoted(value).to_sql}) = #{Arel::Nodes.build_quoted(value).to_sql}") },
  not_has_bits:  ->(table_name, column, value) { Arel.sql("(#{table_name}.#{column} & #{Arel::Nodes.build_quoted(value).to_sql}) != #{Arel::Nodes.build_quoted(value).to_sql}") },
}.freeze

Instance Method Summary collapse

Instance Method Details

#not_regex(conditions = {}, flags: "e", **kwargs) ⇒ Object



30
31
32
33
# File 'lib/yiffspace/extensions/active_record/where_chain.rb', line 30

def not_regex(conditions = {}, flags: "e", **kwargs)
  conditions.merge!(kwargs) if conditions.is_a?(Hash)
  build(conditions, :not_regex, flags)
end

#regex(conditions = {}, flags: "e", **kwargs) ⇒ Object

www.postgresql.org/docs/current/static/functions-matching.html#FUNCTIONS-POSIX-REGEXP “(?e)” means force use of ERE syntax; see sections 9.7.3.1 and 9.7.3.4.



25
26
27
28
# File 'lib/yiffspace/extensions/active_record/where_chain.rb', line 25

def regex(conditions = {}, flags: "e", **kwargs)
  conditions.merge!(kwargs) if conditions.is_a?(Hash)
  build(conditions, :regex, flags)
end

#tsquery(conditions = {}, ts_config: "english", **kwargs) ⇒ Object



35
36
37
38
# File 'lib/yiffspace/extensions/active_record/where_chain.rb', line 35

def tsquery(conditions = {}, ts_config: "english", **kwargs)
  conditions.merge!(kwargs) if conditions.is_a?(Hash)
  build(conditions, :tsquery, ts_config)
end