Skip to content

Commit 10d93f5

Browse files
committed
Replace raw SQL by Arel
1 parent 4ad3492 commit 10d93f5

File tree

4 files changed

+30
-30
lines changed

4 files changed

+30
-30
lines changed

lib/type_scopes/boolean.rb

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,12 @@ def self.types
66
end
77

88
def self.create_scopes_for_column(model, name)
9-
append_scope(model, :"#{name}", lambda { where(table_name => { name => true }) })
10-
9+
append_scope(model, :"#{name}", lambda { where(name => true) })
1110
prefix, suffix = /\A(has|is|was)_(.+)\z/.match(name).to_a[1..2]
1211
if prefix && suffix
13-
append_scope(model, :"#{prefix}_not_#{suffix}", lambda { where(table_name => { name => false }) })
12+
append_scope(model, :"#{prefix}_not_#{suffix}", lambda { where(name => false) })
1413
else
15-
append_scope(model, :"not_#{name}", lambda { where(table_name => { name => false }) })
14+
append_scope(model, :"not_#{name}", lambda { where(name => false) })
1615
end
1716
end
1817
end

lib/type_scopes/numeric.rb

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,15 @@ def self.types
55
["integer", "double precision", "numeric", "bigint", "decimal"].freeze
66
end
77

8-
def self.create_scopes_for_column(model, column)
9-
full_name = "#{model.quoted_table_name}.#{column}"
10-
append_scope(model, :"#{column}_to", lambda { |value| where("#{full_name} <= ?", value) })
11-
append_scope(model, :"#{column}_from", lambda { |value| where("#{full_name} >= ?", value) })
12-
append_scope(model, :"#{column}_above", lambda { |value| where("#{full_name} > ?", value) })
13-
append_scope(model, :"#{column}_below", lambda { |value| where("#{full_name} < ?", value) })
14-
append_scope(model, :"#{column}_between", lambda { |from, to| where("#{full_name} BETWEEN ? AND ?", from, to) })
15-
append_scope(model, :"#{column}_not_between", lambda { |from, to| where("#{full_name} NOT BETWEEN ? AND ?", from, to) })
16-
append_scope(model, :"#{column}_within", lambda { |from, to| where("#{full_name} > ? AND #{full_name} < ?", from, to) })
17-
append_scope(model, :"#{column}_not_within", lambda { |from, to| where("#{full_name} <= ? OR #{full_name} >= ?", from, to) })
8+
def self.create_scopes_for_column(model, name)
9+
column = model.arel_table[name]
10+
append_scope(model, :"#{name}_to", lambda { |value| where(column.lteq(value)) })
11+
append_scope(model, :"#{name}_from", lambda { |value| where(column.gteq(value)) })
12+
append_scope(model, :"#{name}_above", lambda { |value| where(column.gt(value)) })
13+
append_scope(model, :"#{name}_below", lambda { |value| where(column.lt(value)) })
14+
append_scope(model, :"#{name}_between", lambda { |from, to| where(name => from..to) })
15+
append_scope(model, :"#{name}_not_between", lambda { |from, to| where.not(name => from..to) })
16+
append_scope(model, :"#{name}_within", lambda { |from, to| where(column.gt(from)).where(column.lt(to)) })
17+
append_scope(model, :"#{name}_not_within", lambda { |from, to| where(column.lteq(from).or(column.gteq(to))) })
1818
end
1919
end

lib/type_scopes/string.rb

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,10 @@ def self.escape(string)
1111
string
1212
end
1313

14-
def self.create_scopes_for_column(model, column)
15-
full_name = "#{model.quoted_table_name}.#{column}"
16-
append_scope(model, :"#{column}_contains", lambda { |str| where("#{full_name} LIKE ?", "%#{TypeScopes::String.escape(str)}%") })
17-
append_scope(model, :"#{column}_starts_with", lambda { |str| where("#{full_name} LIKE ?", "#{TypeScopes::String.escape(str)}%") })
18-
append_scope(model, :"#{column}_ends_with", lambda { |str| where("#{full_name} LIKE ?", "%#{TypeScopes::String.escape(str)}") })
14+
def self.create_scopes_for_column(model, name)
15+
column = model.arel_table[name]
16+
append_scope(model, :"#{name}_contains", lambda { |str| where(column.matches("%" + TypeScopes::String.escape(str) + "%")) })
17+
append_scope(model, :"#{name}_starts_with", lambda { |str| where(column.matches(TypeScopes::String.escape(str) + "%")) })
18+
append_scope(model, :"#{name}_ends_with", lambda { |str| where(column.matches("%" + TypeScopes::String.escape(str))) })
1919
end
2020
end

lib/type_scopes/time.rb

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,18 @@ def self.types
55
["timestamp", "datetime", "date"].freeze
66
end
77

8-
def self.create_scopes_for_column(model, column)
9-
full_name = "#{model.quoted_table_name}.#{column}"
10-
short_name = shorten_column_name(column)
11-
append_scope(model, :"#{short_name}_to", lambda { |date| where("#{full_name} <= ?", date) })
12-
append_scope(model, :"#{short_name}_from", lambda { |date| where("#{full_name} >= ?", date) })
13-
append_scope(model, :"#{short_name}_after", lambda { |date| where("#{full_name} > ?", date) })
14-
append_scope(model, :"#{short_name}_before", lambda { |date| where("#{full_name} < ?", date) })
15-
append_scope(model, :"#{short_name}_between", lambda { |from, to| where("#{full_name} BETWEEN ? AND ?", from, to) })
16-
append_scope(model, :"#{short_name}_not_between", lambda { |from, to| where("#{full_name} NOT BETWEEN ? AND ?", from, to) })
17-
append_scope(model, :"#{short_name}_within", lambda { |from, to| where("#{full_name} > ? AND #{full_name} < ?", from, to) })
18-
append_scope(model, :"#{short_name}_not_within", lambda { |from, to| where("#{full_name} <= ? OR #{full_name} >= ?", from, to) })
8+
def self.create_scopes_for_column(model, name)
9+
short_name = shorten_column_name(name)
10+
column = model.arel_table[name]
11+
12+
append_scope(model, :"#{short_name}_to", lambda { |date| where(column.lteq(date)) })
13+
append_scope(model, :"#{short_name}_from", lambda { |date| where(column.gteq(date)) })
14+
append_scope(model, :"#{short_name}_after", lambda { |date| where(column.gt(date)) })
15+
append_scope(model, :"#{short_name}_before", lambda { |date| where(column.lt(date)) })
16+
append_scope(model, :"#{short_name}_between", lambda { |from, to| where(name => from..to) })
17+
append_scope(model, :"#{short_name}_not_between", lambda { |from, to| where.not(name => from..to) })
18+
append_scope(model, :"#{short_name}_within", lambda { |from, to| where(column.gt(from)).where(column.lt(to)) })
19+
append_scope(model, :"#{short_name}_not_within", lambda { |from, to| where(column.lteq(from).or(column.gteq(to))) })
1920
end
2021

2122
def self.shorten_column_name(name)

0 commit comments

Comments
 (0)