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.
@@ -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