easy_filters 0.0.2 → 0.0.3
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.
- checksums.yaml +4 -4
- data/README.md +61 -35
- data/lib/easy_filters/version.rb +2 -2
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 19155d4317913a170eeae20a792f6cea6cdc2e61
|
4
|
+
data.tar.gz: 6a557001e6dc7581ae2e32755571e0970cf26940
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 194967011a03333cad0deed886d26a999fc8390fad6beb0505e7359738bba1963c1999a3719ea99ee8473fa2ebe3907f9f8dba312b42c5de20501a34949e5c55
|
7
|
+
data.tar.gz: d0c05ce2cbbe406f2b0d441718006666d075adbd27af2ee48ce2679d7f29f884f7572a93c2317c93c726d1bfdea8261e62e63680fc4f94af9fcafd607538fbf2
|
data/README.md
CHANGED
@@ -20,20 +20,23 @@ And then execute:
|
|
20
20
|
```
|
21
21
|
|
22
22
|
## Usage
|
23
|
-
|
23
|
+
Create a `articles_filter.rb` file in `app/models/easy_filters` folder
|
24
24
|
EasyFilters expects you to define the following methods:
|
25
25
|
|
26
26
|
```ruby
|
27
|
-
|
27
|
+
module EasyFilters
|
28
28
|
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
29
|
+
class ArticlesFilter < ModelFilter
|
30
|
+
|
31
|
+
# Default values for this filter.
|
32
|
+
def self.defaults
|
33
|
+
{ body: nil, date_from: nil, date_to: nil }
|
34
|
+
end
|
33
35
|
|
34
|
-
|
35
|
-
|
36
|
-
|
36
|
+
# Model class to be filtered.
|
37
|
+
def model
|
38
|
+
Article
|
39
|
+
end
|
37
40
|
end
|
38
41
|
end
|
39
42
|
|
@@ -55,37 +58,55 @@ Each `filter_by_*` method receives 2 params:
|
|
55
58
|
For example:
|
56
59
|
|
57
60
|
```ruby
|
58
|
-
|
61
|
+
|
62
|
+
module EasyFilters
|
63
|
+
|
64
|
+
class ArticlesFilter < ModelFilter
|
59
65
|
|
60
|
-
|
66
|
+
#(...) previously defined methods
|
61
67
|
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
68
|
+
# Custom filter method for :body field.
|
69
|
+
def filter_by_body(scope, value)
|
70
|
+
matcher = "%#{value}%"
|
71
|
+
scope.where('body like ? OR body like ?', matcher, matcher)
|
72
|
+
end
|
67
73
|
|
68
|
-
|
74
|
+
# The following 2 filter_by builds an from/to/between date filter:
|
69
75
|
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
76
|
+
# Custom filter method for :date_from field.
|
77
|
+
def filter_by_date_from(scope, value)
|
78
|
+
scope.joins(:editions).where('editions.date >= ?', Date.parse(value))
|
79
|
+
end
|
74
80
|
|
75
|
-
|
76
|
-
|
77
|
-
|
81
|
+
# Custom filter method for :date_to field.
|
82
|
+
def filter_by_date_to(scope, value)
|
83
|
+
scope.joins(:editions).where('editions.date <= ?', Date.parse(value))
|
84
|
+
end
|
78
85
|
end
|
79
86
|
end
|
80
87
|
|
81
88
|
```
|
89
|
+
|
82
90
|
### Usage in controllers
|
83
91
|
|
84
92
|
You can instance a filter in your controller, and define some
|
85
93
|
usefull methods
|
86
94
|
|
87
95
|
For example:
|
96
|
+
|
88
97
|
```ruby
|
98
|
+
|
99
|
+
#(...) previously defined controller
|
100
|
+
|
101
|
+
before_action :filter, only: [:filter_page]
|
102
|
+
before_action :clear_filter, only: [:filter_page]
|
103
|
+
|
104
|
+
def filter_page
|
105
|
+
@objects = @filter.all
|
106
|
+
end
|
107
|
+
|
108
|
+
private
|
109
|
+
|
89
110
|
def create_filter(filter_class, opts = {})
|
90
111
|
options = { store: session, persist: true }.merge opts
|
91
112
|
filter_class.new options
|
@@ -93,13 +114,13 @@ For example:
|
|
93
114
|
|
94
115
|
def filter_params
|
95
116
|
if params.has_key?(:filter)
|
96
|
-
params.require(:filter).permit(:
|
117
|
+
params.require(:filter).permit(:body, :date_from, :date_to).to_options
|
97
118
|
end
|
98
119
|
end
|
99
120
|
|
100
121
|
# Create the @filter object with the currently-set values for the filters
|
101
122
|
def filter
|
102
|
-
@filter = create_filter
|
123
|
+
@filter = create_filter EasyFilters::ArticlesFilter, values: filter_params
|
103
124
|
end
|
104
125
|
|
105
126
|
# Clear the currently-set filters, restoring them to the defaults
|
@@ -109,14 +130,19 @@ For example:
|
|
109
130
|
redirect_to request.path
|
110
131
|
end
|
111
132
|
end
|
133
|
+
|
112
134
|
```
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
<%=
|
135
|
+
|
136
|
+
### Usage in views
|
137
|
+
Define a input with the filter
|
138
|
+
|
139
|
+
```ruby
|
140
|
+
|
141
|
+
<% form_tag '', :method => :get do %>
|
142
|
+
<%= label :filter, :body %>
|
143
|
+
<%= text_field :filter, :body %>
|
144
|
+
<%= submit_tag t('common.filters.search') %>
|
145
|
+
<%= submit_tag t('common.filters.clear') %>
|
121
146
|
<% end %>
|
122
|
-
|
147
|
+
|
148
|
+
```
|
data/lib/easy_filters/version.rb
CHANGED
@@ -1,3 +1,3 @@
|
|
1
1
|
module EasyFilters
|
2
|
-
VERSION = "0.0.
|
3
|
-
end
|
2
|
+
VERSION = "0.0.3"
|
3
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: easy_filters
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- German Olle
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-04-
|
11
|
+
date: 2014-04-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|