persistent_params 1.0.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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 7de7241a8c44ae180ef25cd9e27932de5f8ef90c
4
+ data.tar.gz: 245612b25916d768e8f4b2a03b14c3d83b3dfa5b
5
+ SHA512:
6
+ metadata.gz: 8b8e7c7a50995bae22779d1faacbc3d1f60b03efa1c39ada92c337d81fd72a92687bc25755581342116c4d40ccabd5dd043fdcf7b54d4eeb8ae2d2acaabd09e9
7
+ data.tar.gz: ae37d4bb7719c602350d54973d774346f78b2fb8bcff01e9d1db371fd38ca44ecf5e32bbd8f933dd1ce897968ed16beac90ebc1606075a871ffd61dee16a5cae
@@ -0,0 +1,5 @@
1
+ lib/**/*.rb
2
+ bin/*
3
+ -
4
+ features/**/*.feature
5
+ LICENSE.txt
@@ -0,0 +1 @@
1
+ 2.2.3
data/Gemfile ADDED
@@ -0,0 +1,9 @@
1
+ source 'http://rubygems.org'
2
+
3
+ group :development do
4
+ gem 'rdoc', '~> 3.12'
5
+ gem 'bundler', '~> 1.0'
6
+ gem 'jeweler', '~> 2.0.1'
7
+ end
8
+
9
+ gem 'actionpack', '~> 4.2.0'
@@ -0,0 +1,95 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ actionpack (4.2.5)
5
+ actionview (= 4.2.5)
6
+ activesupport (= 4.2.5)
7
+ rack (~> 1.6)
8
+ rack-test (~> 0.6.2)
9
+ rails-dom-testing (~> 1.0, >= 1.0.5)
10
+ rails-html-sanitizer (~> 1.0, >= 1.0.2)
11
+ actionview (4.2.5)
12
+ activesupport (= 4.2.5)
13
+ builder (~> 3.1)
14
+ erubis (~> 2.7.0)
15
+ rails-dom-testing (~> 1.0, >= 1.0.5)
16
+ rails-html-sanitizer (~> 1.0, >= 1.0.2)
17
+ activesupport (4.2.5)
18
+ i18n (~> 0.7)
19
+ json (~> 1.7, >= 1.7.7)
20
+ minitest (~> 5.1)
21
+ thread_safe (~> 0.3, >= 0.3.4)
22
+ tzinfo (~> 1.1)
23
+ addressable (2.4.0)
24
+ builder (3.2.2)
25
+ descendants_tracker (0.0.4)
26
+ thread_safe (~> 0.3, >= 0.3.1)
27
+ erubis (2.7.0)
28
+ faraday (0.9.2)
29
+ multipart-post (>= 1.2, < 3)
30
+ git (1.2.9.1)
31
+ github_api (0.13.1)
32
+ addressable (~> 2.4.0)
33
+ descendants_tracker (~> 0.0.4)
34
+ faraday (~> 0.8, < 0.10)
35
+ hashie (>= 3.4)
36
+ multi_json (>= 1.7.5, < 2.0)
37
+ oauth2
38
+ hashie (3.4.3)
39
+ highline (1.7.8)
40
+ i18n (0.7.0)
41
+ jeweler (2.0.1)
42
+ builder
43
+ bundler (>= 1.0)
44
+ git (>= 1.2.5)
45
+ github_api
46
+ highline (>= 1.6.15)
47
+ nokogiri (>= 1.5.10)
48
+ rake
49
+ rdoc
50
+ json (1.8.3)
51
+ jwt (1.5.2)
52
+ loofah (2.0.3)
53
+ nokogiri (>= 1.5.9)
54
+ mini_portile2 (2.0.0)
55
+ minitest (5.8.3)
56
+ multi_json (1.11.2)
57
+ multi_xml (0.5.5)
58
+ multipart-post (2.0.0)
59
+ nokogiri (1.6.7.1)
60
+ mini_portile2 (~> 2.0.0.rc2)
61
+ oauth2 (1.0.0)
62
+ faraday (>= 0.8, < 0.10)
63
+ jwt (~> 1.0)
64
+ multi_json (~> 1.3)
65
+ multi_xml (~> 0.5)
66
+ rack (~> 1.2)
67
+ rack (1.6.4)
68
+ rack-test (0.6.3)
69
+ rack (>= 1.0)
70
+ rails-deprecated_sanitizer (1.0.3)
71
+ activesupport (>= 4.2.0.alpha)
72
+ rails-dom-testing (1.0.7)
73
+ activesupport (>= 4.2.0.beta, < 5.0)
74
+ nokogiri (~> 1.6.0)
75
+ rails-deprecated_sanitizer (>= 1.0.1)
76
+ rails-html-sanitizer (1.0.2)
77
+ loofah (~> 2.0)
78
+ rake (10.4.2)
79
+ rdoc (3.12.2)
80
+ json (~> 1.4)
81
+ thread_safe (0.3.5)
82
+ tzinfo (1.2.2)
83
+ thread_safe (~> 0.1)
84
+
85
+ PLATFORMS
86
+ ruby
87
+
88
+ DEPENDENCIES
89
+ actionpack (~> 4.2.0)
90
+ bundler (~> 1.0)
91
+ jeweler (~> 2.0.1)
92
+ rdoc (~> 3.12)
93
+
94
+ BUNDLED WITH
95
+ 1.10.6
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2015 Diego Aguir Selzlein
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,74 @@
1
+ # persistent_params
2
+
3
+ Save params in session to use them again when the user goes to another page and
4
+ comes back. This gem adds a method to Rails controllers called `persists_params`
5
+ that adds this feature to that controller.
6
+
7
+ ## What?
8
+
9
+ I have to deal with not-so-simple search forms in my `index` templates. It's
10
+ awful when I combine several filters, search for records, choose one of them
11
+ to see details and then go back to the `index` page just to see all my filters
12
+ gone and I have to set them all over.
13
+
14
+ With this gem, the controller will save the params in session and, when the
15
+ same action is invoked again with no params, the request is redirected to the
16
+ same path, but with the previous used params set.
17
+
18
+ It also offers a handy method to integrate with the `HasScope` gem, so `scopes`
19
+ are persisted between requests.
20
+
21
+ ## Installation
22
+
23
+ In your Gemfile:
24
+
25
+ ```ruby
26
+ gem 'persistent_params'
27
+ ```
28
+
29
+ In your controller:
30
+
31
+ ```ruby
32
+ class UsersController < ApplicationController
33
+ persists_params
34
+ end
35
+ ```
36
+
37
+ That's it. All the parameters except `controller` and `action` will be stored
38
+ and used between requests to the `index` action. If you want to apply to other
39
+ actions, use the `only` key when calling `persists_params`.
40
+
41
+ ## HasScope Integration
42
+
43
+ In my case, I use the gem to save scopes defined by
44
+ [HasScope](https://github.com/plataformatec/has_scope). Not all parameters
45
+ are scopes, so I created a handy method that configures PersistentParams to
46
+ save only scopes:
47
+
48
+ ```ruby
49
+ class UsersController < ApplicationController
50
+ persists_scopes
51
+ end
52
+ ```
53
+
54
+ ## Clearing Params
55
+
56
+ To actually clear the previous params and prevent the redirecting, you need to
57
+ parameterize a `?clear=true`. I usually do this with a `link_to` in my `index`:
58
+
59
+ ```erb
60
+ <%= link_to 'Clear Filters', users_path(clear: true) %>
61
+ ```
62
+
63
+ ## Contributing
64
+
65
+ * Fork
66
+ * Clone
67
+ * Create your branch
68
+ * Make your changes
69
+ * Push
70
+ * Create a Pull Request
71
+
72
+ ## Copyright
73
+
74
+ Copyright (c) 2015 Diego Aguir Selzlein. See LICENSE.txt for further details.
@@ -0,0 +1,51 @@
1
+ # encoding: utf-8
2
+
3
+ require 'rubygems'
4
+ require 'bundler'
5
+ begin
6
+ Bundler.setup(:default, :development)
7
+ rescue Bundler::BundlerError => e
8
+ $stderr.puts e.message
9
+ $stderr.puts "Run `bundle install` to install missing gems"
10
+ exit e.status_code
11
+ end
12
+ require 'rake'
13
+
14
+ require 'jeweler'
15
+ Jeweler::Tasks.new do |gem|
16
+ # gem is a Gem::Specification... see http://guides.rubygems.org/specification-reference/ for more options
17
+ gem.name = "persistent_params"
18
+ gem.homepage = "http://github.com/nerde/persistent_params"
19
+ gem.license = "MIT"
20
+ gem.summary = %Q{Persist params by controller/action}
21
+ gem.description = %Q{Persist your params in session so they are used the next time you call the same controller/action. Works with HasScope.}
22
+ gem.email = "diego.selzlein@unila.edu.br"
23
+ gem.authors = ["Diego Aguir Selzlein"]
24
+ # dependencies defined in Gemfile
25
+ end
26
+ Jeweler::RubygemsDotOrgTasks.new
27
+
28
+ require 'rake/testtask'
29
+ Rake::TestTask.new(:test) do |test|
30
+ test.libs << 'lib' << 'test'
31
+ test.pattern = 'test/**/*_test.rb'
32
+ test.verbose = true
33
+ end
34
+
35
+ desc "Code coverage detail"
36
+ task :simplecov do
37
+ ENV['COVERAGE'] = "true"
38
+ Rake::Task['test'].execute
39
+ end
40
+
41
+ task :default => :test
42
+
43
+ require 'rdoc/task'
44
+ Rake::RDocTask.new do |rdoc|
45
+ version = File.exist?('VERSION') ? File.read('VERSION') : ''
46
+
47
+ rdoc.rdoc_dir = 'rdoc'
48
+ rdoc.title = "persistent_params #{version}"
49
+ rdoc.rdoc_files.include('README*')
50
+ rdoc.rdoc_files.include('lib/**/*.rb')
51
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 1.0.0
@@ -0,0 +1,84 @@
1
+ require 'ostruct'
2
+
3
+ module PersistentParams
4
+ module ClassMethods
5
+ def persistent_params_config(hash = {})
6
+ @persistent_params_config ||= OpenStruct.new(hash)
7
+ end
8
+ end
9
+
10
+ def self.included(controller)
11
+ controller.before_filter :check_last_params
12
+ controller.extend ClassMethods
13
+ end
14
+
15
+ private
16
+
17
+ def check_last_params
18
+ return if skip_this_action?
19
+ return clear_last_params if clear_last_params?
20
+ return redirect_to_last_params if current_params.empty?
21
+ self.last_params = current_params
22
+ end
23
+
24
+ def skip_this_action?
25
+ !actions_to_persist_params.include?(params[:action])
26
+ end
27
+
28
+ def actions_to_persist_params
29
+ Array(persistent_params_config.only || 'index').map(&:to_s)
30
+ end
31
+
32
+ def clear_last_params?
33
+ params[:clear].present?
34
+ end
35
+
36
+ def clear_last_params
37
+ self.last_params = nil
38
+ end
39
+
40
+ def redirect_to_last_params
41
+ return if last_params.empty?
42
+ redirect_to **last_params.symbolize_keys
43
+ end
44
+
45
+ def current_params
46
+ send(params_method).except(*ignored_keys)
47
+ end
48
+
49
+ def params_method
50
+ persistent_params_config.params_method || :params
51
+ end
52
+
53
+ def ignored_keys
54
+ %w(controller action)
55
+ end
56
+
57
+ def persistent_params_config
58
+ self.class.persistent_params_config
59
+ end
60
+
61
+ def last_params
62
+ session[last_params_key] || {}
63
+ end
64
+
65
+ def last_params=(scopes)
66
+ session[last_params_key] = scopes
67
+ end
68
+
69
+ def last_params_key
70
+ "#{params[:controller]}__#{params[:action]}"
71
+ end
72
+ end
73
+
74
+ class ActionController::Base
75
+ def self.persists_params(**options)
76
+ include PersistentParams
77
+ persistent_params_config(options)
78
+ yield persistent_params_config if block_given?
79
+ end
80
+
81
+ def self.persists_scopes(**options, &block)
82
+ persists_params(params_method: :current_scopes, **options, &block)
83
+ end
84
+ end
@@ -0,0 +1,62 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
+ # -*- encoding: utf-8 -*-
5
+ # stub: persistent_params 1.0.0 ruby lib
6
+
7
+ Gem::Specification.new do |s|
8
+ s.name = "persistent_params"
9
+ s.version = "1.0.0"
10
+
11
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
12
+ s.require_paths = ["lib"]
13
+ s.authors = ["Diego Aguir Selzlein"]
14
+ s.date = "2015-12-29"
15
+ s.description = "Persist your params in session so they are used the next time you call the same controller/action. Works with HasScope."
16
+ s.email = "diego.selzlein@unila.edu.br"
17
+ s.extra_rdoc_files = [
18
+ "LICENSE.txt",
19
+ "README.md"
20
+ ]
21
+ s.files = [
22
+ ".document",
23
+ ".ruby-version",
24
+ "Gemfile",
25
+ "Gemfile.lock",
26
+ "LICENSE.txt",
27
+ "README.md",
28
+ "Rakefile",
29
+ "VERSION",
30
+ "lib/persistent_params.rb",
31
+ "persistent_params.gemspec",
32
+ "test/persistent_params_test.rb",
33
+ "test/persistent_scopes_test.rb",
34
+ "test/test_helper.rb"
35
+ ]
36
+ s.homepage = "http://github.com/nerde/persistent_params"
37
+ s.licenses = ["MIT"]
38
+ s.rubygems_version = "2.4.5.1"
39
+ s.summary = "Persist params by controller/action"
40
+
41
+ if s.respond_to? :specification_version then
42
+ s.specification_version = 4
43
+
44
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
45
+ s.add_runtime_dependency(%q<actionpack>, ["~> 4.2.0"])
46
+ s.add_development_dependency(%q<rdoc>, ["~> 3.12"])
47
+ s.add_development_dependency(%q<bundler>, ["~> 1.0"])
48
+ s.add_development_dependency(%q<jeweler>, ["~> 2.0.1"])
49
+ else
50
+ s.add_dependency(%q<actionpack>, ["~> 4.2.0"])
51
+ s.add_dependency(%q<rdoc>, ["~> 3.12"])
52
+ s.add_dependency(%q<bundler>, ["~> 1.0"])
53
+ s.add_dependency(%q<jeweler>, ["~> 2.0.1"])
54
+ end
55
+ else
56
+ s.add_dependency(%q<actionpack>, ["~> 4.2.0"])
57
+ s.add_dependency(%q<rdoc>, ["~> 3.12"])
58
+ s.add_dependency(%q<bundler>, ["~> 1.0"])
59
+ s.add_dependency(%q<jeweler>, ["~> 2.0.1"])
60
+ end
61
+ end
62
+
@@ -0,0 +1,76 @@
1
+ require 'test_helper'
2
+
3
+ class MyController < ApplicationController
4
+ persists_params only: %i(index show)
5
+
6
+ def index
7
+ render nothing: true
8
+ end
9
+
10
+ def show
11
+ render nothing: true
12
+ end
13
+
14
+ def create
15
+ render nothing: true
16
+ end
17
+ end
18
+
19
+ class PersistentParamsTest < ActionController::TestCase
20
+ tests MyController
21
+
22
+ def test_redirects_to_last_used_params
23
+ get :index, something: 123
24
+
25
+ assert_response :ok
26
+
27
+ get :index
28
+
29
+ assert_response :found
30
+ assert_redirected_to(controller: :my, action: :index, something: 123)
31
+ end
32
+
33
+ def test_does_not_redirect_empty_params
34
+ get :index
35
+
36
+ assert_response :ok
37
+
38
+ get :index
39
+
40
+ assert_response :ok
41
+ end
42
+
43
+ def test_clears_params
44
+ get :index, something: 123
45
+
46
+ assert_response :ok
47
+
48
+ get :index, clear: true
49
+
50
+ assert_response :ok
51
+
52
+ get :index
53
+
54
+ assert_response :ok
55
+ end
56
+
57
+ def test_isolate_actions
58
+ get :index, something: 123
59
+
60
+ assert_response :ok
61
+
62
+ get :show
63
+
64
+ assert_response :ok
65
+ end
66
+
67
+ def test_only_actions
68
+ get :create, something: 123
69
+
70
+ assert_response :ok
71
+
72
+ get :create
73
+
74
+ assert_response :ok
75
+ end
76
+ end
@@ -0,0 +1,44 @@
1
+ require 'test_helper'
2
+
3
+ class HasScopesController < ApplicationController
4
+ persists_scopes
5
+
6
+ def index
7
+ render nothing: true
8
+ end
9
+
10
+ private
11
+
12
+ def current_scopes
13
+ fake_scopes
14
+ end
15
+
16
+ def fake_scopes
17
+ params.select{ |key, _| key == 'a_scope' } || {}
18
+ end
19
+ end
20
+
21
+ class PersistentScopesTest < ActionController::TestCase
22
+ tests HasScopesController
23
+
24
+ def test_saves_scopes
25
+ get :index, a_scope: 123
26
+
27
+ assert_response :ok
28
+
29
+ get :index
30
+
31
+ assert_response :found
32
+ assert_redirected_to(controller: :has_scopes, action: :index, a_scope: 123)
33
+ end
34
+
35
+ def test_ignores_another_arguments
36
+ get :index, not_a_scope: 123
37
+
38
+ assert_response :ok
39
+
40
+ get :index
41
+
42
+ assert_response :ok
43
+ end
44
+ end
@@ -0,0 +1,35 @@
1
+ require 'rubygems'
2
+ require 'bundler'
3
+ begin
4
+ Bundler.setup(:default, :development)
5
+ rescue Bundler::BundlerError => e
6
+ $stderr.puts e.message
7
+ $stderr.puts 'Run `bundle install` to install missing gems'
8
+ exit e.status_code
9
+ end
10
+ require 'minitest/autorun'
11
+
12
+ # Configure Rails
13
+ ENV['RAILS_ENV'] = 'test'
14
+
15
+ require 'action_controller'
16
+
17
+ $:.unshift File.expand_path('../../lib', __FILE__)
18
+ require 'persistent_params'
19
+
20
+ PersistentParams::Routes = ActionDispatch::Routing::RouteSet.new
21
+ PersistentParams::Routes.draw do
22
+ get '/:controller(/:action(/:id))'
23
+ end
24
+
25
+ class ApplicationController < ActionController::Base
26
+ include PersistentParams::Routes.url_helpers
27
+ end
28
+
29
+ class ActiveSupport::TestCase
30
+ self.test_order = :random if respond_to?(:test_order=)
31
+
32
+ setup do
33
+ @routes = PersistentParams::Routes
34
+ end
35
+ end
metadata ADDED
@@ -0,0 +1,115 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: persistent_params
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Diego Aguir Selzlein
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-12-29 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: actionpack
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 4.2.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 4.2.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: rdoc
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '3.12'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '3.12'
41
+ - !ruby/object:Gem::Dependency
42
+ name: bundler
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '1.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '1.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: jeweler
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: 2.0.1
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: 2.0.1
69
+ description: Persist your params in session so they are used the next time you call
70
+ the same controller/action. Works with HasScope.
71
+ email: diego.selzlein@unila.edu.br
72
+ executables: []
73
+ extensions: []
74
+ extra_rdoc_files:
75
+ - LICENSE.txt
76
+ - README.md
77
+ files:
78
+ - ".document"
79
+ - ".ruby-version"
80
+ - Gemfile
81
+ - Gemfile.lock
82
+ - LICENSE.txt
83
+ - README.md
84
+ - Rakefile
85
+ - VERSION
86
+ - lib/persistent_params.rb
87
+ - persistent_params.gemspec
88
+ - test/persistent_params_test.rb
89
+ - test/persistent_scopes_test.rb
90
+ - test/test_helper.rb
91
+ homepage: http://github.com/nerde/persistent_params
92
+ licenses:
93
+ - MIT
94
+ metadata: {}
95
+ post_install_message:
96
+ rdoc_options: []
97
+ require_paths:
98
+ - lib
99
+ required_ruby_version: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ required_rubygems_version: !ruby/object:Gem::Requirement
105
+ requirements:
106
+ - - ">="
107
+ - !ruby/object:Gem::Version
108
+ version: '0'
109
+ requirements: []
110
+ rubyforge_project:
111
+ rubygems_version: 2.4.5.1
112
+ signing_key:
113
+ specification_version: 4
114
+ summary: Persist params by controller/action
115
+ test_files: []