active_filter 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -5,14 +5,9 @@ module ActiveFilter
5
5
  class Base
6
6
  attr_reader :fields
7
7
 
8
- def initialize(scope=nil, data={})
9
- if scope.is_a?(Hash)
10
- @scope = nil
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, "extract")
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, "extract")
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
@@ -14,29 +14,40 @@ module ActiveFilter
14
14
  end
15
15
 
16
16
  def lookup_type
17
- "extract"
17
+ "exact"
18
18
  end
19
19
 
20
20
  def filter(scope, value, lookup_type)
21
21
  case lookup_type
22
- when "extract"
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;end
35
- class TextField < Field;end
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
- ["extract", "gt", "lt"]
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
- ["extract", "gt", "lt"]
68
+ ["exact", "gt", "lt", "gte", "lte"]
58
69
  end
59
70
 
60
71
  def convert_value(value)
@@ -1,3 +1,3 @@
1
1
  module ActiveFilter
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.4"
3
3
  end
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.3
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-06 00:00:00.000000000 Z
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: -3354574353873881808
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: -3354574353873881808
136
+ hash: -52441896280290827
137
137
  requirements: []
138
138
  rubyforge_project:
139
139
  rubygems_version: 1.8.24