active_filter 0.0.5 → 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,20 +1,20 @@
1
- Copyright 2012 tnakamura
2
-
3
- Permission is hereby granted, free of charge, to any person obtaining
4
- a copy of this software and associated documentation files (the
5
- "Software"), to deal in the Software without restriction, including
6
- without limitation the rights to use, copy, modify, merge, publish,
7
- distribute, sublicense, and/or sell copies of the Software, and to
8
- permit persons to whom the Software is furnished to do so, subject to
9
- the following conditions:
10
-
11
- The above copyright notice and this permission notice shall be
12
- included in all copies or substantial portions of the Software.
13
-
14
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
1
+ Copyright 2012 tnakamura
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/Rakefile CHANGED
@@ -1,27 +1,27 @@
1
- #!/usr/bin/env rake
2
- begin
3
- require 'bundler/setup'
4
- rescue LoadError
5
- puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
6
- end
7
- begin
8
- require 'rdoc/task'
9
- rescue LoadError
10
- require 'rdoc/rdoc'
11
- require 'rake/rdoctask'
12
- RDoc::Task = Rake::RDocTask
13
- end
14
-
15
- RDoc::Task.new(:rdoc) do |rdoc|
16
- rdoc.rdoc_dir = 'rdoc'
17
- rdoc.title = 'ActiveFilter'
18
- rdoc.options << '--line-numbers'
19
- rdoc.rdoc_files.include('README.rdoc')
20
- rdoc.rdoc_files.include('lib/**/*.rb')
21
- end
22
-
23
-
24
-
25
-
26
- Bundler::GemHelper.install_tasks
27
-
1
+ #!/usr/bin/env rake
2
+ begin
3
+ require 'bundler/setup'
4
+ rescue LoadError
5
+ puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
6
+ end
7
+ begin
8
+ require 'rdoc/task'
9
+ rescue LoadError
10
+ require 'rdoc/rdoc'
11
+ require 'rake/rdoctask'
12
+ RDoc::Task = Rake::RDocTask
13
+ end
14
+
15
+ RDoc::Task.new(:rdoc) do |rdoc|
16
+ rdoc.rdoc_dir = 'rdoc'
17
+ rdoc.title = 'ActiveFilter'
18
+ rdoc.options << '--line-numbers'
19
+ rdoc.rdoc_files.include('README.rdoc')
20
+ rdoc.rdoc_files.include('lib/**/*.rb')
21
+ end
22
+
23
+
24
+
25
+
26
+ Bundler::GemHelper.install_tasks
27
+
@@ -1,8 +1,7 @@
1
- # coding: utf-8
2
- require "active_filter/version"
3
- require "active_filter/filter"
4
- require "active_filter/base"
5
-
6
- module ActiveFilter
7
- # Your code goes here...
8
- end
1
+ # coding: utf-8
2
+ require "active_filter/version"
3
+ require "active_filter/base"
4
+
5
+ module ActiveFilter
6
+ # Your code goes here...
7
+ end
@@ -1,5 +1,14 @@
1
1
  # coding: utf-8
2
2
  require "active_filter/filter"
3
+ require "active_filter/filter/string_filter"
4
+ require "active_filter/filter/text_filter"
5
+ require "active_filter/filter/integer_filter"
6
+ require "active_filter/filter/float_filter"
7
+ require "active_filter/filter/decimal_filter"
8
+ require "active_filter/filter/boolean_filter"
9
+ require "active_filter/filter/date_time_filter"
10
+ require "active_filter/filter/date_filter"
11
+ require "active_filter/filter/time_filter"
3
12
 
4
13
  module ActiveFilter
5
14
  class Base
@@ -11,19 +20,19 @@ module ActiveFilter
11
20
  @data = data
12
21
  @scope = scope
13
22
 
14
- columns = self.class._model.columns
15
-
23
+ columns = self.model.columns
24
+
16
25
  # fields で指定した列だけをフィルタ可能にする
17
- fields = self.class._fields
26
+ fields = self.class.__send__(:_fields)
18
27
  unless fields.empty?
19
28
  columns = columns.select { |column|
20
29
  fields.include?(column.name) ||
21
30
  fields.include?(column.name.to_sym)
22
31
  }
23
32
  end
24
-
33
+
25
34
  # exclude で指定した列を除外する
26
- excludes = self.class._exclude
35
+ excludes = self.class.__send__(:_exclude)
27
36
  unless excludes.empty?
28
37
  columns = columns.reject { |column|
29
38
  fields.include?(column.name) ||
@@ -36,91 +45,52 @@ module ActiveFilter
36
45
  }
37
46
  end
38
47
 
39
- def self._fields #:nodoc:
40
- @fields ||= []
41
- end
42
-
43
- def self._model #:nodoc:
44
- @model
45
- end
46
-
47
- def self._exclude #:nodoc:
48
- @excludes ||= []
49
- end
48
+ module ClassMethods
49
+ # フィルタを作成する対象のモデルを指定します。
50
+ def model(klass)
51
+ # Class クラスのインスタンスである ActiveFilter::Base オブジェクトの
52
+ # インスタンス変数にモデルの型を格納
53
+ unless klass.ancestors.include?(ActiveRecord::Base)
54
+ raise ArgumentError.new("klass required inherit ActiveRecord::Base")
55
+ end
56
+ @model = klass
57
+ end
50
58
 
51
- def self._orders #:nodoc:
52
- @orders ||= []
53
- end
59
+ def fields(*names)
60
+ # Class クラスのインスタンスである ActiveFilter::Base オブジェクトの
61
+ # インスタンス変数にフィールド名を格納
62
+ @fields = names
63
+ end
54
64
 
55
- def _create_filter_from_column(column)
56
- case column.type
57
- when :primary_key
58
- return Filter.new(column.name)
59
- when :string
60
- return StringFilter.new(column.name)
61
- when :text
62
- return TextFilter.new(column.name)
63
- when :integer
64
- return IntegerFilter.new(column.name)
65
- when :float
66
- return FloatFilter.new(column.name)
67
- when :decimal
68
- return DecimalFilter.new(column.name)
69
- when :datetime
70
- return DateTimeFilter.new(column.name)
71
- when :timestamp
72
- return Filter.new(column.name)
73
- when :time
74
- return TimeFilter.new(column.name)
75
- when :date
76
- return DateFilter.new(column.name)
77
- when :binary
78
- return Filter.new(column.name)
79
- when :boolean
80
- return BooleanFilter.new(column.name)
81
- else
82
- raise ArgumentError.new("#{column.type} is not supported.")
65
+ def exclude(*names)
66
+ @excludes = names
83
67
  end
84
- end
85
- private :_create_filter_from_column
86
68
 
87
- # コンストラクタで受け取ったスコープまたは
88
- # model.scoped を返す
89
- def _scoped
90
- if @scope.nil?
91
- self.class._model.scoped
92
- else
93
- @scope
69
+ def order(*names)
70
+ @orders = names
94
71
  end
95
- end
96
- private :_scoped
97
72
 
98
- # フィルタを作成する対象のモデルを指定します。
99
- def self.model(klass)
100
- # Class クラスのインスタンスである ActiveFilter::Base オブジェクトの
101
- # インスタンス変数にモデルの型を格納
102
- unless klass.ancestors.include?(ActiveRecord::Base)
103
- raise ArgumentError.new("klass required inherit ActiveRecord::Base")
73
+ private
74
+ def _model
75
+ @model
104
76
  end
105
- @model = klass
106
- end
107
77
 
108
- def self.fields(*names)
109
- # Class クラスのインスタンスである ActiveFilter::Base オブジェクトの
110
- # インスタンス変数にフィールド名を格納
111
- @fields = names
112
- end
78
+ def _fields
79
+ @fields ||= []
80
+ end
113
81
 
114
- def self.exclude(*names)
115
- @excludes = names
116
- end
82
+ def _exclude
83
+ @excludes ||= []
84
+ end
117
85
 
118
- def self.order(*names)
119
- @orders = names
86
+ def _orders
87
+ @orders ||= []
88
+ end
120
89
  end
90
+ extend ClassMethods
121
91
 
122
92
  def model
123
- self.class._model
93
+ self.class.__send__(:_model)
124
94
  end
125
95
 
126
96
  def each(&block)
@@ -135,19 +105,6 @@ module ActiveFilter
135
105
  self
136
106
  end
137
107
 
138
- def _lookups_from_filter(filter)
139
- lookups = { filter.name => "exact" }
140
-
141
- lookup_types = [filter.lookup_type].flatten
142
- lookup_types.each do |lookup_type|
143
- lookup = "#{filter.name}__#{lookup_type}"
144
- lookups[lookup] = lookup_type
145
- end
146
-
147
- lookups
148
- end
149
- private :_lookups_from_filter
150
-
151
108
  def to_scope
152
109
  scope = _scoped
153
110
  matched = false
@@ -173,12 +130,71 @@ module ActiveFilter
173
130
  scope = scope.where("1 = 2")
174
131
  end
175
132
 
176
- self.class._orders.each do |order|
133
+ self.class.__send__(:_orders).each do |order|
177
134
  scope = scope.order(order.to_s)
178
135
  end
179
136
 
180
137
  scope
181
138
  end
139
+
140
+ private
141
+ # コンストラクタで受け取ったスコープまたは
142
+ # model.scoped を返す
143
+ def _scoped
144
+ if @scope.nil?
145
+ if ActiveRecord::VERSION::STRING < '4.0'
146
+ self.model.scoped
147
+ else
148
+ # Rails 4 以上のとき
149
+ self.model.all
150
+ end
151
+ else
152
+ @scope
153
+ end
154
+ end
155
+
156
+ def _lookups_from_filter(filter)
157
+ lookups = { filter.name => "exact" }
158
+
159
+ lookup_types = [filter.lookup_type].flatten
160
+ lookup_types.each do |lookup_type|
161
+ lookup = "#{filter.name}__#{lookup_type}"
162
+ lookups[lookup] = lookup_type
163
+ end
164
+
165
+ lookups
166
+ end
167
+
168
+ def _create_filter_from_column(column)
169
+ case column.type
170
+ when :primary_key
171
+ return Filter.new(column.name)
172
+ when :string
173
+ return StringFilter.new(column.name)
174
+ when :text
175
+ return TextFilter.new(column.name)
176
+ when :integer
177
+ return IntegerFilter.new(column.name)
178
+ when :float
179
+ return FloatFilter.new(column.name)
180
+ when :decimal
181
+ return DecimalFilter.new(column.name)
182
+ when :datetime
183
+ return DateTimeFilter.new(column.name)
184
+ when :timestamp
185
+ return Filter.new(column.name)
186
+ when :time
187
+ return TimeFilter.new(column.name)
188
+ when :date
189
+ return DateFilter.new(column.name)
190
+ when :binary
191
+ return Filter.new(column.name)
192
+ when :boolean
193
+ return BooleanFilter.new(column.name)
194
+ else
195
+ raise ArgumentError.new("#{column.type} is not supported.")
196
+ end
197
+ end
182
198
  end
183
199
  end
184
200
 
@@ -36,69 +36,5 @@ module ActiveFilter
36
36
  end
37
37
  end
38
38
  end
39
-
40
- class StringFilter < Filter
41
- def lookup_type
42
- ["exact", "contains"]
43
- end
44
- end
45
-
46
- class TextFilter < StringFilter;end
47
-
48
- class IntegerFilter < Filter
49
- def lookup_type
50
- ["exact", "gt", "lt", "gte", "lte"]
51
- end
52
-
53
- def convert_value(value)
54
- value.to_i
55
- end
56
- end
57
-
58
- class FloatFilter < IntegerFilter
59
- def convert_value(value)
60
- value.to_f
61
- end
62
- end
63
-
64
- class DecimalFilter < IntegerFilter;end
65
-
66
- class DateTimeFilter < Filter
67
- def lookup_type
68
- ["exact", "gt", "lt", "gte", "lte"]
69
- end
70
-
71
- def convert_value(value)
72
- value.to_datetime
73
- end
74
- end
75
-
76
- class DateFilter < DateTimeFilter
77
- def convert_value(value)
78
- value.to_date
79
- end
80
- end
81
-
82
- class TimeFilter < DateTimeFilter
83
- def convert_value(value)
84
- value.to_time
85
- end
86
- end
87
-
88
- class BooleanFilter < Filter
89
- def convert_value(value)
90
- compare_value = value.is_a?(String) ? value.downcase : value
91
- case compare_value
92
- when "no", "false", false, "0", 0
93
- false
94
- when "yes", "true", true, "1", 1
95
- true
96
- when nil
97
- false
98
- else
99
- !!compare_value
100
- end
101
- end
102
- end
103
39
  end
104
40
 
@@ -0,0 +1,21 @@
1
+ # coding: utf-8
2
+ require "active_filter/filter"
3
+
4
+ module ActiveFilter
5
+ class BooleanFilter < Filter
6
+ def convert_value(value)
7
+ compare_value = value.is_a?(String) ? value.downcase : value
8
+ case compare_value
9
+ when "no", "false", false, "0", 0
10
+ false
11
+ when "yes", "true", true, "1", 1
12
+ true
13
+ when nil
14
+ false
15
+ else
16
+ !!compare_value
17
+ end
18
+ end
19
+ end
20
+ end
21
+
@@ -0,0 +1,12 @@
1
+ # coding: utf-8
2
+ require "active_support"
3
+ require "active_filter/filter/date_time_filter"
4
+
5
+ module ActiveFilter
6
+ class DateFilter < DateTimeFilter
7
+ def convert_value(value)
8
+ value.to_date
9
+ end
10
+ end
11
+ end
12
+
@@ -0,0 +1,16 @@
1
+ # coding: utf-8
2
+ require "active_support"
3
+ require "active_filter/filter"
4
+
5
+ module ActiveFilter
6
+ class DateTimeFilter < Filter
7
+ def lookup_type
8
+ ["exact", "gt", "lt", "gte", "lte"]
9
+ end
10
+
11
+ def convert_value(value)
12
+ value.to_datetime
13
+ end
14
+ end
15
+ end
16
+
@@ -0,0 +1,8 @@
1
+ # coding: utf-8
2
+ require "active_support"
3
+ require "active_filter/filter/integer_filter"
4
+
5
+ module ActiveFilter
6
+ class DecimalFilter < IntegerFilter;end
7
+ end
8
+
@@ -0,0 +1,11 @@
1
+ # coding: utf-8
2
+ require "active_filter/filter/integer_filter"
3
+
4
+ module ActiveFilter
5
+ class FloatFilter < IntegerFilter
6
+ def convert_value(value)
7
+ value.to_f
8
+ end
9
+ end
10
+ end
11
+
@@ -0,0 +1,15 @@
1
+ # coding: utf-8
2
+ require "active_filter/filter"
3
+
4
+ module ActiveFilter
5
+ class IntegerFilter < Filter
6
+ def lookup_type
7
+ ["exact", "gt", "lt", "gte", "lte"]
8
+ end
9
+
10
+ def convert_value(value)
11
+ value.to_i
12
+ end
13
+ end
14
+ end
15
+
@@ -0,0 +1,11 @@
1
+ # coding: utf-8
2
+ require "active_filter/filter"
3
+
4
+ module ActiveFilter
5
+ class StringFilter < Filter
6
+ def lookup_type
7
+ ["exact", "contains"]
8
+ end
9
+ end
10
+ end
11
+
@@ -0,0 +1,7 @@
1
+ # coding: utf-8
2
+ require "active_filter/filter/string_filter"
3
+
4
+ module ActiveFilter
5
+ class TextFilter < StringFilter;end
6
+ end
7
+
@@ -0,0 +1,12 @@
1
+ # coding: utf-8
2
+ require "active_support"
3
+ require "active_filter/filter/date_time_filter"
4
+
5
+ module ActiveFilter
6
+ class TimeFilter < DateTimeFilter
7
+ def convert_value(value)
8
+ value.to_time
9
+ end
10
+ end
11
+ end
12
+
@@ -1,3 +1,3 @@
1
- module ActiveFilter
2
- VERSION = "0.0.5"
3
- end
1
+ module ActiveFilter
2
+ VERSION = "0.0.6"
3
+ end
@@ -1,15 +1,15 @@
1
- # coding: utf-8
2
- module ActiveFilter
3
- module Generators
4
- class FilterGenerator < ::Rails::Generators::NamedBase
5
- source_root File.expand_path("../templates", __FILE__)
6
-
7
- argument :attributes, :type => :array, :default => [], :banner => "field field"
8
-
9
- def create_filter_file
10
- template "filter.rb", "app/filters/#{file_name}_filter.rb"
11
- end
12
- end
13
- end
14
- end
15
-
1
+ # coding: utf-8
2
+ module ActiveFilter
3
+ module Generators
4
+ class FilterGenerator < ::Rails::Generators::NamedBase
5
+ source_root File.expand_path("../templates", __FILE__)
6
+
7
+ argument :attributes, :type => :array, :default => [], :banner => "field field"
8
+
9
+ def create_filter_file
10
+ template "filter.rb", "app/filters/#{file_name}_filter.rb"
11
+ end
12
+ end
13
+ end
14
+ end
15
+
@@ -1,4 +1,4 @@
1
- # desc "Explaining what the task does"
2
- # task :active_filter do
3
- # # Task goes here
4
- # end
1
+ # desc "Explaining what the task does"
2
+ # task :active_filter do
3
+ # # Task goes here
4
+ # 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.5
4
+ version: 0.0.6
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-02-16 00:00:00.000000000 Z
12
+ date: 2013-04-14 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport
@@ -100,6 +100,15 @@ extra_rdoc_files: []
100
100
  files:
101
101
  - lib/active_filter/base.rb
102
102
  - lib/active_filter/engine.rb
103
+ - lib/active_filter/filter/boolean_filter.rb
104
+ - lib/active_filter/filter/date_filter.rb
105
+ - lib/active_filter/filter/date_time_filter.rb
106
+ - lib/active_filter/filter/decimal_filter.rb
107
+ - lib/active_filter/filter/float_filter.rb
108
+ - lib/active_filter/filter/integer_filter.rb
109
+ - lib/active_filter/filter/string_filter.rb
110
+ - lib/active_filter/filter/text_filter.rb
111
+ - lib/active_filter/filter/time_filter.rb
103
112
  - lib/active_filter/filter.rb
104
113
  - lib/active_filter/railtie.rb
105
114
  - lib/active_filter/version.rb
@@ -124,7 +133,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
124
133
  version: '0'
125
134
  segments:
126
135
  - 0
127
- hash: 3669060738230829906
136
+ hash: -272579427
128
137
  required_rubygems_version: !ruby/object:Gem::Requirement
129
138
  none: false
130
139
  requirements:
@@ -133,10 +142,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
133
142
  version: '0'
134
143
  segments:
135
144
  - 0
136
- hash: 3669060738230829906
145
+ hash: -272579427
137
146
  requirements: []
138
147
  rubyforge_project:
139
- rubygems_version: 1.8.23
148
+ rubygems_version: 1.8.24
140
149
  signing_key:
141
150
  specification_version: 3
142
151
  summary: A rails engine for filtering scope based on user selections.