easy_filter 0.2.0 → 0.3.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,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 33a6ad9f7885ba310d7af29cfbcc4079bdfe873b
4
- data.tar.gz: aebb6dbfa96193f59ace2196b4cc53d4574f0baf
3
+ metadata.gz: 586866917848c0737f4cee36ad8651f512b4f12e
4
+ data.tar.gz: a27d5d81b98bceb88ea7be9bc6467a3a0d8fe58d
5
5
  SHA512:
6
- metadata.gz: c3185343808ee0ea0f6c2a717dad50b7e253f05ee959c6f3fe3441e7213d6c7c13830ceebcd8d5d572f7506353202d3470783a7e96b0a87f1d42122732a21c27
7
- data.tar.gz: bb892f3bfbceaf2a07a727e4cb91bd19905425a0a4660c28872b4bbd5e661cf5213a3c4cba4be04b1e79ff362dbe247bcf2a1a0c8fd3f6e2abfe1214afa9fd26
6
+ metadata.gz: fd796bf841dc16766a28db674a4353955b107ed79ba8ba2a7fed6314b00f0a5a9ee6c5456fe1898828e369834aa01fbde755b5ec95301e98e7e0fb37ed986dd8
7
+ data.tar.gz: c24cf86bbf1440c56b0affd17a36d47033b1b47c384044bb5fc9d30ca9eebf4249dc83fc166f9e47eaf17c02b16bdf6e935803265a667df2d99458a1a84cca4e
@@ -1,3 +1,9 @@
1
+ ## V0.3.0
2
+ * Correct XSS problem and add default config to view helper
3
+ * correct typeo in gemspec
4
+ * Define jquery-ui version numbers based on Hakiri warnings
5
+ * Update README.md
6
+
1
7
  ## V0.2.0
2
8
  * Correct Rubocop ABC errors with refactoring
3
9
  * RSpec tests for field with more underscores
data/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  By [Peter Kepes](https://github.com/kepes)
4
4
 
5
- [![Build Status](https://travis-ci.org/kepes/easy-filter.svg?branch=master)](https://travis-ci.org/kepes/easy-filter)
5
+ [![Build Status](https://travis-ci.org/kepes/easy-filter.svg?branch=master)](https://travis-ci.org/kepes/easy-filter) [![Gem Version](https://badge.fury.io/rb/easy_filter.svg)](http://badge.fury.io/rb/easy_filter) [![Code Climate](https://codeclimate.com/github/kepes/easy-filter/badges/gpa.svg)](https://codeclimate.com/github/kepes/easy-filter)
6
6
 
7
7
  Filter and sort `ActiveRecord` model for Rails app with [Bootstrap](http://getbootstrap.com/) view helpers.
8
8
 
@@ -92,18 +92,18 @@ Default view helper templates generates [Bootstrap](http://getbootstrap.com/) co
92
92
  app/views/easy_filter/_form_field_close.html.erb
93
93
  app/views/easy_filter/_form_open.html.erb
94
94
 
95
- #### Advanced parameters
96
-
97
- View helpers provide paramters to define HTML input field names.
98
-
99
- def easy_filter(model_class, filters, prefixes = { main: 'filter_', from: 'from_', to: 'to_', exact: 'exact_' })
100
-
101
- def easy_sort(column, title = nil, sort = 'sort', direction = 'direction')
102
-
103
- All default templates will use specified prefixes for input fields. If you have to use different names just use this parameters to redefine it.
95
+ #### Configuration
104
96
 
105
- If you change prefix parameters dont't forget to change it for model addition too!
97
+ You can configure input field names used by EasyFilter in environments
106
98
 
99
+ Rails.application.configure do
100
+ config.easy_filter_defaults = {
101
+ prefixes: { main: 'filter_', from: 'from_', to: 'to_', exact: 'exact_' },
102
+ allowed_params: %w(sort direction),
103
+ sort_params: { field: 'sort', direction: 'direction' }
104
+ }
105
+ end
106
+
107
107
  ## Contributing
108
108
 
109
109
  1. Fork it
@@ -1,2 +1,2 @@
1
1
  <%= button_tag(t(:filter), name: "#{filter_prefixes[:main]}button", value: :filter, class: 'btn btn-default') %>
2
- <%= link_to t(:clear_filter), request.parameters.select {|k,v| !k.to_s.starts_with?(filter_prefixes[:main])}, class: 'btn btn-default' %>
2
+ <%= link_to t(:clear_filter), cleaned_params.select { |k,v| !k.to_s.starts_with?(filter_prefixes[:main])}, class: 'btn btn-default' %>
@@ -1,2 +1,2 @@
1
1
  <% icon = "<span class=\"glyphicon glyphicon-chevron-#{direction == "asc" ? "up" : "down"}\"></span>" %>
2
- <%= link_to "#{title} #{column == params[sort_param_name] ? icon : ''}".html_safe, request.parameters.merge(sort_param_name => column, direction_param_name => direction) %>
2
+ <%= link_to "#{title} #{column == cleaned_params[sort_param_name] ? icon : ''}".html_safe, cleaned_params.merge(sort_param_name => column, direction_param_name => direction) %>
@@ -23,6 +23,6 @@ Gem::Specification.new do |spec|
23
23
  spec.add_development_dependency 'rubocop'
24
24
  spec.add_development_dependency 'activerecord', '~> 3.2'
25
25
  spec.add_development_dependency 'sqlite3'
26
- spec.add_runtime_dependency 'jquery-rails'
27
- spec.add_runtime_dependency 'jquery-ui-rails'
26
+ spec.add_runtime_dependency 'jquery-rails', '~> 3.1.4'
27
+ spec.add_runtime_dependency 'jquery-ui-rails', '~> 5.0.5'
28
28
  end
@@ -1,4 +1,4 @@
1
1
  # EasyFilter version number
2
2
  module EasyFilter
3
- VERSION = '0.2.0'
3
+ VERSION = '0.3.0'
4
4
  end
@@ -1,37 +1,58 @@
1
1
  module EasyFilter
2
2
  # View helpers for EasyFilter
3
3
  module ViewHelpers
4
- def easy_sort(column, title = nil, sort = 'sort', direction = 'direction')
4
+ def easy_sort(column, title = nil)
5
+ config = easy_filter_defaults
6
+ cleaned_params = clean_params params, config
5
7
  title ||= column.titleize
6
- dir = (column.to_s == params[sort] && params[direction] == 'asc') ? 'desc' : 'asc'
8
+ dir = sort_direction column, config
7
9
 
8
10
  render partial: 'easy_filter/sort_field',
9
- locals: { column: column.to_s,
10
- title: title,
11
- sort_param_name: sort,
12
- direction: dir,
13
- direction_param_name: direction }
11
+ locals:
12
+ { column: column.to_s,
13
+ title: title,
14
+ sort_param_name: config[:sort_params][:field],
15
+ direction: dir,
16
+ direction_param_name: config[:sort_params][:direction],
17
+ cleaned_params: cleaned_params
18
+ }
14
19
  end
15
20
 
16
- def easy_filter(model_class, filters, prefixes = { main: 'filter_', from: 'from_', to: 'to_', exact: 'exact_' })
17
- form = render_easy 'form_open', prefixes, model_class
21
+ def easy_filter(model_class, filters)
22
+ config = easy_filter_defaults
23
+ cleaned_params = clean_params params, config
24
+ form = render_easy 'form_open', config, cleaned_params
18
25
 
19
26
  filters.each do |filter|
20
27
  f = determine_column filter, model_class
21
- form += render_field f, prefixes
28
+ form += render_field f, config, cleaned_params
22
29
  end
23
30
 
24
- form += render_easy 'buttons', prefixes
25
- form += render_easy 'form_close', prefixes
31
+ form += render_easy 'buttons', config, cleaned_params
32
+ form += render_easy 'form_close', config, cleaned_params
26
33
  end
27
34
 
28
35
  private
29
36
 
30
- def render_field(filter, prefixes)
31
- form = render_easy 'form_field_open', prefixes
37
+ def easy_filter_defaults
38
+ rails_defaults = Rails.configuration.easy_filter_defaults if defined? Rails.configuration.easy_filter_defaults
39
+ rails_defaults ||= {}
40
+ {
41
+ prefixes: { main: 'filter_', from: 'from_', to: 'to_', exact: 'exact_' },
42
+ allowed_params: %w(sort direction),
43
+ sort_params: { field: 'sort', direction: 'direction' }
44
+ }.deep_merge rails_defaults
45
+ end
46
+
47
+ def sort_direction(column, config)
48
+ (column.to_s == params[config[:sort_params][:field]] && params[config[:sort_params][:direction]] == 'asc') ? 'desc' : 'asc'
49
+ end
50
+
51
+ def render_field(filter, config, cleaned_params)
52
+ form = render_easy 'form_field_open', config, cleaned_params
32
53
  view = column_view filter[:col_type]
33
- form += render_easy view, prefixes, filter
34
- form + render_easy('form_field_close', prefixes)
54
+ form += render_easy view, config, cleaned_params, filter
55
+ form + render_easy('form_field_close', config, cleaned_params)
35
56
  end
36
57
 
37
58
  def column_view(col_type)
@@ -78,10 +99,17 @@ module EasyFilter
78
99
  filter
79
100
  end
80
101
 
81
- def render_easy(name, prefixes, filter = nil)
102
+ def render_easy(name, config, cleaned_params, filter = nil)
82
103
  render partial: "easy_filter/#{name}",
83
- locals: { filter_prefixes: prefixes,
84
- filter: filter }
104
+ locals: {
105
+ filter_prefixes: config[:prefixes],
106
+ filter: filter,
107
+ cleaned_params: cleaned_params
108
+ }
109
+ end
110
+
111
+ def clean_params(params, config)
112
+ params.select { |k| k.to_s.starts_with?(config[:prefixes][:main]) || config[:allowed_params].include?(k) }
85
113
  end
86
114
 
87
115
  def boolean_array
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.2.0
4
+ version: 0.3.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: 2015-09-23 00:00:00.000000000 Z
11
+ date: 2015-09-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -98,30 +98,30 @@ dependencies:
98
98
  name: jquery-rails
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
- - - ">="
101
+ - - "~>"
102
102
  - !ruby/object:Gem::Version
103
- version: '0'
103
+ version: 3.1.4
104
104
  type: :runtime
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
- - - ">="
108
+ - - "~>"
109
109
  - !ruby/object:Gem::Version
110
- version: '0'
110
+ version: 3.1.4
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: jquery-ui-rails
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
- - - ">="
115
+ - - "~>"
116
116
  - !ruby/object:Gem::Version
117
- version: '0'
117
+ version: 5.0.5
118
118
  type: :runtime
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
- - - ">="
122
+ - - "~>"
123
123
  - !ruby/object:Gem::Version
124
- version: '0'
124
+ version: 5.0.5
125
125
  description: Filter and sort ActiveRecord model for Rails app with Bootstrap view
126
126
  helpers
127
127
  email: