easy_filter 0.0.4 → 0.1.0
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 +8 -8
- data/CHANGELOG.md +6 -0
- data/README.md +3 -3
- data/app/views/easy_filter/_field_array.html.erb +7 -7
- data/app/views/easy_filter/_field_datetime.html.erb +2 -2
- data/app/views/easy_filter/_field_text.html.erb +1 -1
- data/lib/easy_filter/model_additions.rb +17 -5
- data/lib/easy_filter/version.rb +1 -1
- data/lib/easy_filter/view_helpers.rb +23 -21
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
M2NjMDMyOThkZmJlMjA1Nzk5ZmZjODJlZTdjZWE1M2EzZjhmM2M1NQ==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
YTViNzNkYjQwZGQ2ZDlhOGFiOGNlOTNkZmViNTVlNjQ0OGMwOTc4NQ==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
ODFmZGFjOTMxODNiNTk2OTRkYjYyYWMwOWMyZGM1Y2Q3ZTE2MDM2NDYwNDU4
|
10
|
+
ZWEwODM1YTYxMTY0Y2VjZGI4OTNhYjk3Y2M3YjE0NDIxZjY5ZDY3ZTFkYWNl
|
11
|
+
YzI4NTFmYjRkMjUxYTEwMzkxMmJlOThiYzZkZWFkNmE4ZDE4MTg=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
YzU5YjA2OTdlZjA0OTcxZmFhYWI4MWIyNjBkM2ZhNmFkN2FkMWMxOTM0YmE0
|
14
|
+
NjBkY2Q2OGU0OGZkMzc1MjdmOWVjMDJkOGRkNGIxMWY3MTJhNGFkM2E3Zjgy
|
15
|
+
NTBiZTE3NjAyMTI0Y2M1MThjMmM4ZDhhNDllY2QwN2I5OWI4NDg=
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -48,10 +48,10 @@ EasyFilter works on ActiveRecord::Relation. You can chain with any other module
|
|
48
48
|
|
49
49
|
You can define an `Array` of `Hash` and EasyFilter will generate a dropdown automaticly.
|
50
50
|
|
51
|
-
Code in
|
51
|
+
Code in helper:
|
52
52
|
|
53
53
|
```ruby
|
54
|
-
def
|
54
|
+
def model_statuses
|
55
55
|
[
|
56
56
|
{ code: 'A', name: 'Status A', color: :default},
|
57
57
|
{ code: 'B', name: 'Status B', color: :info},
|
@@ -62,7 +62,7 @@ end
|
|
62
62
|
|
63
63
|
In view:
|
64
64
|
|
65
|
-
<%= easy_filter ModelClass, [:name, :expiry_date,
|
65
|
+
<%= easy_filter ModelClass, [:name, :expiry_date, {field: :status, items: model_statuses, label: t(:lable)}] %>
|
66
66
|
|
67
67
|
#### Advanced parameters
|
68
68
|
|
@@ -1,19 +1,19 @@
|
|
1
1
|
<div class="dropdown">
|
2
|
-
<%= hidden_field_tag("#{filter_prefixes[:main]}#{filter_prefixes[:exact]}#{
|
3
|
-
<% button_text = "<span>#{
|
2
|
+
<%= hidden_field_tag("#{filter_prefixes[:main]}#{filter_prefixes[:exact]}#{filter[:field]}", request.params["#{filter_prefixes[:main]}#{filter_prefixes[:exact]}#{filter[:field]}"]) %>
|
3
|
+
<% button_text = "<span>#{filter[:label]}</span>" %>
|
4
4
|
|
5
|
-
<%
|
6
|
-
if request.params["#{filter_prefixes[:main]}#{filter_prefixes[:exact]}#{
|
5
|
+
<% filter[:items].each do |item|
|
6
|
+
if request.params["#{filter_prefixes[:main]}#{filter_prefixes[:exact]}#{filter[:field]}"] == item[:code]
|
7
7
|
button_text = "<span class=\"label label-#{item[:color]}\">#{item[:name]}</span>"
|
8
8
|
break
|
9
9
|
end
|
10
10
|
end %>
|
11
11
|
|
12
|
-
<button class="btn btn-default dropdown-toggle" type="button" id="dropdownFilterButton-<%=
|
12
|
+
<button class="btn btn-default dropdown-toggle" type="button" id="dropdownFilterButton-<%= filter[:field] %>" data-toggle="dropdown"><%= button_text.html_safe %>
|
13
13
|
<span class="caret"></span></button>
|
14
14
|
|
15
|
-
<ul class="dropdown-menu dropdown-filter" aria-labelledby="dropdownFilterButton-<%=
|
16
|
-
<%
|
15
|
+
<ul class="dropdown-menu dropdown-filter" aria-labelledby="dropdownFilterButton-<%= filter[:field] %>">
|
16
|
+
<% filter[:items].each do |item| %>
|
17
17
|
<li role="presentation"><a role="menuitem" tabindex="-1" data-target="<%= item[:code] %>"><span class="label label-<%= item[:color]%>"><%= item[:name] %></span></a></li>
|
18
18
|
<% end %>
|
19
19
|
</ul>
|
@@ -1,2 +1,2 @@
|
|
1
|
-
<%= text_field_tag("#{filter_prefixes[:main]}#{filter_prefixes[:from]}#{
|
2
|
-
<%= text_field_tag("#{filter_prefixes[:main]}#{filter_prefixes[:to]}#{
|
1
|
+
<%= text_field_tag("#{filter_prefixes[:main]}#{filter_prefixes[:from]}#{filter[:field]}", request.params["#{filter_prefixes[:main]}#{filter_prefixes[:from]}#{filter[:field]}"], class: 'form-control datepicker', placeholder: filter[:label]) %>
|
2
|
+
<%= text_field_tag("#{filter_prefixes[:main]}#{filter_prefixes[:to]}#{filter[:field]}", request.params["#{filter_prefixes[:main]}#{filter_prefixes[:to]}#{filter[:field]}"], class: 'form-control datepicker', placeholder: filter[:label]) %>
|
@@ -1 +1 @@
|
|
1
|
-
<%= text_field_tag("#{filter_prefixes[:main]}#{
|
1
|
+
<%= text_field_tag("#{filter_prefixes[:main]}#{filter[:field]}", request.params["#{filter_prefixes[:main]}#{filter[:field]}"], class: 'form-control', placeholder: filter[:label]) %>
|
@@ -1,6 +1,11 @@
|
|
1
1
|
module EasyFilter
|
2
2
|
# Define methods for ActiveRecord
|
3
3
|
module ModelAdditions
|
4
|
+
# 'easy_filter' for ActiveRecor models to filter result based on a filter hash
|
5
|
+
# or HTTP parameters.
|
6
|
+
#
|
7
|
+
# @params [Hash] filter parameters hash
|
8
|
+
# @prefixes [Hash] filter parameter prefixes mainly for prefixing HTML input elements
|
4
9
|
def easy_filter(params, prefixes = { main: 'filter_',
|
5
10
|
from: 'from_',
|
6
11
|
to: 'to_',
|
@@ -18,7 +23,9 @@ module EasyFilter
|
|
18
23
|
params[prefixes[:sort]] ||= 'id'
|
19
24
|
params[prefixes[:direction]] ||= 'desc'
|
20
25
|
|
21
|
-
sort_column =
|
26
|
+
sort_column = add_model params[prefixes[:sort]]
|
27
|
+
# TODO included model fields not in 'column_names'. Somehow need to check if given column name valid
|
28
|
+
# sort_column = column_names.include?(params[prefixes[:sort]]) ? params[prefixes[:sort]] : add_model('id')
|
22
29
|
sort_direction = %w(asc desc).include?(params[prefixes[:direction]]) ? params[prefixes[:direction]] : 'desc'
|
23
30
|
|
24
31
|
filter.order("#{sort_column} #{sort_direction}")
|
@@ -28,16 +35,16 @@ module EasyFilter
|
|
28
35
|
|
29
36
|
def add_where(filter, field, value, prefixes)
|
30
37
|
if field.start_with?(prefixes[:from])
|
31
|
-
filter.where("#{del_prefix(field, prefixes[:from])} >= ?", value)
|
38
|
+
filter.where("#{add_model(del_prefix(field, prefixes[:from]))} >= ?", value)
|
32
39
|
|
33
40
|
elsif field.start_with?(prefixes[:to])
|
34
|
-
filter.where("#{del_prefix(field, prefixes[:to])} <= ?", value)
|
41
|
+
filter.where("#{add_model(del_prefix(field, prefixes[:to]))} <= ?", value)
|
35
42
|
|
36
43
|
elsif field.start_with?(prefixes[:exact])
|
37
|
-
filter.where("#{del_prefix(field, prefixes[:exact])} = ?", value)
|
44
|
+
filter.where("#{add_model(del_prefix(field, prefixes[:exact]))} = ?", value)
|
38
45
|
|
39
46
|
else
|
40
|
-
filter.where("#{field} like ?", "%#{value}%")
|
47
|
+
filter.where("#{add_model(field)} like ?", "%#{value}%")
|
41
48
|
end
|
42
49
|
end
|
43
50
|
|
@@ -45,5 +52,10 @@ module EasyFilter
|
|
45
52
|
return name.gsub(prefix, '').to_s if name.start_with?(prefix)
|
46
53
|
name
|
47
54
|
end
|
55
|
+
|
56
|
+
def add_model(field)
|
57
|
+
return self.quoted_table_name + '.' + field unless field.include? '.'
|
58
|
+
field
|
59
|
+
end
|
48
60
|
end
|
49
61
|
end
|
data/lib/easy_filter/version.rb
CHANGED
@@ -17,53 +17,55 @@ module EasyFilter
|
|
17
17
|
form = render_easy 'form_open', prefixes, model_class
|
18
18
|
|
19
19
|
filters.each do |filter|
|
20
|
-
|
21
|
-
form += render_easy 'form_field_open', prefixes
|
20
|
+
f = determine_column filter, model_class
|
21
|
+
form += render_easy 'form_field_open', prefixes
|
22
22
|
|
23
|
-
case col_type
|
23
|
+
case f[:col_type]
|
24
24
|
when :datetime
|
25
|
-
form += render_easy 'field_datetime', prefixes,
|
25
|
+
form += render_easy 'field_datetime', prefixes, f
|
26
26
|
|
27
27
|
when :array
|
28
|
-
form += render_easy 'field_array', prefixes,
|
28
|
+
form += render_easy 'field_array', prefixes, f
|
29
29
|
|
30
30
|
else
|
31
|
-
form += render_easy 'field_text', prefixes,
|
31
|
+
form += render_easy 'field_text', prefixes, f
|
32
32
|
end
|
33
33
|
|
34
|
-
form += render_easy 'form_field_close', prefixes
|
34
|
+
form += render_easy 'form_field_close', prefixes
|
35
35
|
end
|
36
36
|
|
37
|
-
form += render_easy 'buttons', prefixes
|
38
|
-
form += render_easy 'form_close', prefixes
|
37
|
+
form += render_easy 'buttons', prefixes
|
38
|
+
form += render_easy 'form_close', prefixes
|
39
39
|
end
|
40
40
|
|
41
41
|
private
|
42
42
|
|
43
43
|
def determine_column(filter, model_class)
|
44
|
-
|
45
|
-
|
44
|
+
filter = {field: filter.to_s} if filter.is_a?(Symbol) || filter.is_a?(String)
|
45
|
+
p "debug:"
|
46
|
+
p filter[:field]
|
47
|
+
filter[:field] = filter[:field].to_s
|
46
48
|
|
47
|
-
|
48
|
-
|
49
|
-
|
49
|
+
filter[:label] ||= t("activerecord.attributes.#{model_class.name.downcase}.#{filter[:field]}")
|
50
|
+
|
51
|
+
unless filter[:items].nil?
|
52
|
+
filter[:col_type] = :array
|
50
53
|
else
|
51
54
|
model_class.columns.each do |column|
|
52
|
-
if column.name ==
|
53
|
-
col_type = column.type
|
55
|
+
if column.name == filter[:field]
|
56
|
+
filter[:col_type] = column.type
|
54
57
|
break
|
55
58
|
end
|
56
59
|
end
|
57
60
|
end
|
58
|
-
|
61
|
+
|
62
|
+
filter
|
59
63
|
end
|
60
64
|
|
61
|
-
def render_easy(name, prefixes,
|
65
|
+
def render_easy(name, prefixes, filter = nil)
|
62
66
|
render partial: "easy_filter/#{name}",
|
63
67
|
locals: { filter_prefixes: prefixes,
|
64
|
-
|
65
|
-
filter_col_name: col_name,
|
66
|
-
elements: elements }
|
68
|
+
filter: filter }
|
67
69
|
end
|
68
70
|
end
|
69
71
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: easy_filter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Peter Kepes
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-10-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|