active_filter 0.0.5 → 0.0.6

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