active_filter 0.0.3 → 0.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/active_filter/base.rb +16 -10
- data/lib/active_filter/field.rb +17 -6
- data/lib/active_filter/version.rb +1 -1
- metadata +4 -4
data/lib/active_filter/base.rb
CHANGED
@@ -5,14 +5,9 @@ module ActiveFilter
|
|
5
5
|
class Base
|
6
6
|
attr_reader :fields
|
7
7
|
|
8
|
-
def initialize(scope=nil
|
9
|
-
|
10
|
-
|
11
|
-
@data = scope
|
12
|
-
else
|
13
|
-
@scope = scope
|
14
|
-
@data = data
|
15
|
-
end
|
8
|
+
def initialize(data, scope=nil)
|
9
|
+
@data = data
|
10
|
+
@scope = scope
|
16
11
|
|
17
12
|
@fields = []
|
18
13
|
self.class._model.columns.each do |column|
|
@@ -109,16 +104,19 @@ module ActiveFilter
|
|
109
104
|
|
110
105
|
def to_scope
|
111
106
|
scope = _scoped
|
107
|
+
matched = false
|
112
108
|
|
113
109
|
@fields.each do |field|
|
114
110
|
# フィールド名でフィルタする
|
115
111
|
name = field.name
|
116
112
|
if @data.include?(name)
|
117
113
|
converted_value = field.convert_value(@data[name])
|
118
|
-
scope = field.filter(scope, converted_value, "
|
114
|
+
scope = field.filter(scope, converted_value, "exact")
|
115
|
+
matched = true
|
119
116
|
elsif @data.include?(name.to_sym)
|
120
117
|
converted_value = field.convert_value(@data[name.to_sym])
|
121
|
-
scope = field.filter(scope, converted_value, "
|
118
|
+
scope = field.filter(scope, converted_value, "exact")
|
119
|
+
matched = true
|
122
120
|
end
|
123
121
|
|
124
122
|
# lookup_type でフィルタする
|
@@ -128,13 +126,21 @@ module ActiveFilter
|
|
128
126
|
if @data.include?(lookup)
|
129
127
|
converted_value = field.convert_value(@data[lookup])
|
130
128
|
scope = field.filter(scope, converted_value, lookup_type)
|
129
|
+
matched = true
|
131
130
|
elsif @data.include?(lookup.to_sym)
|
132
131
|
converted_value = field.convert_value(@data[lookup.to_sym])
|
133
132
|
scope = field.filter(scope, converted_value, lookup_type)
|
133
|
+
matched = true
|
134
134
|
end
|
135
135
|
end
|
136
136
|
end
|
137
137
|
|
138
|
+
# ユーザーの入力がフィルタにかからなかった場合は
|
139
|
+
# 該当無しにする
|
140
|
+
unless matched
|
141
|
+
scope = scope.where("1 = 2")
|
142
|
+
end
|
143
|
+
|
138
144
|
scope
|
139
145
|
end
|
140
146
|
end
|
data/lib/active_filter/field.rb
CHANGED
@@ -14,29 +14,40 @@ module ActiveFilter
|
|
14
14
|
end
|
15
15
|
|
16
16
|
def lookup_type
|
17
|
-
"
|
17
|
+
"exact"
|
18
18
|
end
|
19
19
|
|
20
20
|
def filter(scope, value, lookup_type)
|
21
21
|
case lookup_type
|
22
|
-
when "
|
22
|
+
when "exact"
|
23
23
|
return scope.where("#{@name} = ?", value)
|
24
|
+
when "contains"
|
25
|
+
return scope.where("#{@name} LIKE ?", "%#{value}%")
|
24
26
|
when "gt"
|
25
27
|
return scope.where("#{@name} > ?", value)
|
26
28
|
when "lt"
|
27
29
|
return scope.where("#{@name} < ?", value)
|
30
|
+
when "gte"
|
31
|
+
return scope.where("#{@name} >= ?", value)
|
32
|
+
when "lte"
|
33
|
+
return scope.where("#{@name} <= ?", value)
|
28
34
|
else
|
29
35
|
raise ArgumentError.new("#{lookup_type} is not supported.")
|
30
36
|
end
|
31
37
|
end
|
32
38
|
end
|
33
39
|
|
34
|
-
class StringField < Field
|
35
|
-
|
40
|
+
class StringField < Field
|
41
|
+
def lookup_type
|
42
|
+
["exact", "contains"]
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
class TextField < StringField;end
|
36
47
|
|
37
48
|
class IntegerField < Field
|
38
49
|
def lookup_type
|
39
|
-
["
|
50
|
+
["exact", "gt", "lt", "gte", "lte"]
|
40
51
|
end
|
41
52
|
|
42
53
|
def convert_value(value)
|
@@ -54,7 +65,7 @@ module ActiveFilter
|
|
54
65
|
|
55
66
|
class DateTimeField < Field
|
56
67
|
def lookup_type
|
57
|
-
["
|
68
|
+
["exact", "gt", "lt", "gte", "lte"]
|
58
69
|
end
|
59
70
|
|
60
71
|
def convert_value(value)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: active_filter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-01-
|
12
|
+
date: 2013-01-16 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activesupport
|
@@ -124,7 +124,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
124
124
|
version: '0'
|
125
125
|
segments:
|
126
126
|
- 0
|
127
|
-
hash: -
|
127
|
+
hash: -52441896280290827
|
128
128
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
129
129
|
none: false
|
130
130
|
requirements:
|
@@ -133,7 +133,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
133
133
|
version: '0'
|
134
134
|
segments:
|
135
135
|
- 0
|
136
|
-
hash: -
|
136
|
+
hash: -52441896280290827
|
137
137
|
requirements: []
|
138
138
|
rubyforge_project:
|
139
139
|
rubygems_version: 1.8.24
|