easy_filter 0.0.4 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- OTE3NjFkMzY5ZmYwMTIyNmUzMWUyZGYyNjkxZDhmMzE0NTNhMzdkMg==
4
+ M2NjMDMyOThkZmJlMjA1Nzk5ZmZjODJlZTdjZWE1M2EzZjhmM2M1NQ==
5
5
  data.tar.gz: !binary |-
6
- NTlkZjNmNWExMDE5OTVhZTE4YmI4MGIwMzM1MWM0MTFmZWQ3Y2ExMQ==
6
+ YTViNzNkYjQwZGQ2ZDlhOGFiOGNlOTNkZmViNTVlNjQ0OGMwOTc4NQ==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- NmVmZjYxMTg2MGFmYjc3ZTY0NjE4MTRmMzU1N2UxYWZjMzA4MTEzZjRiNDU3
10
- NTY3M2FiNTQ2YTJkNGFlMWY1NGU3OGExYmUxNzNiYThkMzQ4Zjg2ZTUxMWU4
11
- NDUyOTRkMThhZDFhZDc3ZjkyMjgyMGU4YTJiZDEwYzFhZmI5ZmY=
9
+ ODFmZGFjOTMxODNiNTk2OTRkYjYyYWMwOWMyZGM1Y2Q3ZTE2MDM2NDYwNDU4
10
+ ZWEwODM1YTYxMTY0Y2VjZGI4OTNhYjk3Y2M3YjE0NDIxZjY5ZDY3ZTFkYWNl
11
+ YzI4NTFmYjRkMjUxYTEwMzkxMmJlOThiYzZkZWFkNmE4ZDE4MTg=
12
12
  data.tar.gz: !binary |-
13
- OGYxYmNjYmUzYTZkMTg2NTE4MDU4MzNkOGRkMTUwNmJmMDM0MWM5N2ViYTA4
14
- ZTExNTMzOWUyZjYwY2ZlYzQ5ODYwZTUxNGMwNDdhN2Y1MmU4Yzk0OGMwOTM1
15
- ZjFjOTNhODBiOTA0Mzk4YTEyMDgyNmRjZGZmYzExZTBlMWYwZGI=
13
+ YzU5YjA2OTdlZjA0OTcxZmFhYWI4MWIyNjBkM2ZhNmFkN2FkMWMxOTM0YmE0
14
+ NjBkY2Q2OGU0OGZkMzc1MjdmOWVjMDJkOGRkNGIxMWY3MTJhNGFkM2E3Zjgy
15
+ NTBiZTE3NjAyMTI0Y2M1MThjMmM4ZDhhNDllY2QwN2I5OWI4NDg=
@@ -1,3 +1,9 @@
1
+ ## V0.0.4
2
+
3
+ * Added TravisCI
4
+ * Rubocop added to TravisCI
5
+ * Reorganize source code for Rubocop
6
+
1
7
  ## V0.0.3
2
8
 
3
9
  * Gem homepage URL 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 model or controller:
51
+ Code in helper:
52
52
 
53
53
  ```ruby
54
- def self.statuses
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, [:status, ModelClass.statuses]] %>
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]}#{filter_col_name}", request.params["#{filter_prefixes[:main]}#{filter_prefixes[:exact]}#{filter_col_name}"]) %>
3
- <% button_text = "<span>#{t("activerecord.attributes.#{filter_model_class.name.downcase}.#{filter_col_name}")}</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
- <% elements.each do |item|
6
- if request.params["#{filter_prefixes[:main]}#{filter_prefixes[:exact]}#{filter_col_name}"] == item[:code]
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-<%= filter_col_name %>" data-toggle="dropdown"><%= button_text.html_safe %>
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-<%= filter_col_name %>">
16
- <% elements.each do |item| %>
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]}#{filter_col_name}", request.params["#{filter_prefixes[:main]}#{filter_prefixes[:from]}#{filter_col_name}"], class: 'form-control datepicker', placeholder: t("activerecord.attributes.#{filter_model_class.name.downcase}.#{filter_col_name}")) %>
2
- <%= text_field_tag("#{filter_prefixes[:main]}#{filter_prefixes[:to]}#{filter_col_name}", request.params["#{filter_prefixes[:main]}#{filter_prefixes[:to]}#{filter_col_name}"], class: 'form-control datepicker', placeholder: t("activerecord.attributes.#{filter_model_class.name.downcase}.#{filter_col_name}")) %>
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]}#{filter_col_name}", request.params["#{filter_prefixes[:main]}#{filter_col_name}"], class: 'form-control', placeholder: t("activerecord.attributes.#{filter_model_class.name.downcase}.#{filter_col_name}")) %>
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 = column_names.include?(params[prefixes[:sort]]) ? params[prefixes[:sort]] : 'id'
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
@@ -1,4 +1,4 @@
1
1
  # EasyFilter version number
2
2
  module EasyFilter
3
- VERSION = '0.0.4'
3
+ VERSION = '0.1.0'
4
4
  end
@@ -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
- col_name, col_type = determine_column filter, model_class
21
- form += render_easy 'form_field_open', prefixes, model_class
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, model_class, col_name
25
+ form += render_easy 'field_datetime', prefixes, f
26
26
 
27
27
  when :array
28
- form += render_easy 'field_array', prefixes, model_class, col_name, filter[1]
28
+ form += render_easy 'field_array', prefixes, f
29
29
 
30
30
  else
31
- form += render_easy 'field_text', prefixes, model_class, col_name
31
+ form += render_easy 'field_text', prefixes, f
32
32
  end
33
33
 
34
- form += render_easy 'form_field_close', prefixes, model_class
34
+ form += render_easy 'form_field_close', prefixes
35
35
  end
36
36
 
37
- form += render_easy 'buttons', prefixes, model_class
38
- form += render_easy 'form_close', prefixes, model_class
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
- col_name = filter if filter.is_a?(Symbol) || filter.is_a?(String)
45
- col_name = filter[0] if filter.is_a? Array
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
- col_type = nil
48
- if filter.is_a? Array
49
- col_type = :array
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 == col_name.to_s
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
- [col_name, col_type]
61
+
62
+ filter
59
63
  end
60
64
 
61
- def render_easy(name, prefixes, model_class, col_name = nil, elements = nil)
65
+ def render_easy(name, prefixes, filter = nil)
62
66
  render partial: "easy_filter/#{name}",
63
67
  locals: { filter_prefixes: prefixes,
64
- filter_model_class: model_class,
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
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-09-09 00:00:00.000000000 Z
11
+ date: 2014-10-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler