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