ransack_advanced_search 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c51993e4e8bc69edc001a8d24a1c0e8c82eecdc3
4
- data.tar.gz: 6767320ca04515f5b7c5c9e1e4c02662d1f3cb65
3
+ metadata.gz: 88442c12af23f8798db4d31ab864106694779952
4
+ data.tar.gz: d230a564262b94f69d58ba9b410d9ed53a1bf8c0
5
5
  SHA512:
6
- metadata.gz: 3cee07f0af786c944e8a60a82c7f7af15273ef28971f7257b21cdbfe98035c030b380a554307f6f7f816f34b37a51fbea66925e3d56176facc2e895c144afb3f
7
- data.tar.gz: 50ca9bb58d1b118a2456a40a3b97f0245955763b54ee7a6b17ae64449db155c046b29f485e17df7b8c1237a93aff2e768e8656893723ade27066e7faa9bb8e03
6
+ metadata.gz: 41868575d4ab5ab953642a5df1c54707f6596e6771735b7cdb709f1f4729a77de438617150e34e166ee884433219446ba34886600d57934086bfad13ec52abe3
7
+ data.tar.gz: 31ceeeabd6c1046ba58627bc6fb37fb23a16eb26229fd625a98a508ae705c125cdf4668adbf6f1714fcd56c9714f14622c9a0a41e7625e547b46353a487bb840
data/README.md CHANGED
@@ -30,8 +30,115 @@ Or install it yourself as:
30
30
 
31
31
  $ gem install ransack_advanced_search
32
32
 
33
+ Run the generator to install the gem initializer, this will create the file `config/initializers/ransack_advanced_search.rb`:
34
+
35
+ $ rails generate ransack_advanced_search:install
36
+
37
+ For while we don't need to change this file.
38
+
33
39
  ## Usage
34
40
 
41
+ First, in your controller action that you will use for search, include the following:
42
+
43
+ ```ruby
44
+ # GET /your_models
45
+ # GET /your_models.json
46
+ # POST /your_models/advanced_search
47
+ def index
48
+ # The ransack search must be in the @search instance variable, because the advanced search will use it to build the search form
49
+ @search = YourModel.search(params[:q])
50
+ @results = @search.result()
51
+ # or, if the above doesn't work
52
+ @search = YourModel.ransack(params[:q])
53
+ @results = @search.result()
54
+ end
55
+ ```
56
+
57
+ Now, we have to create a POST route to this action, in your `config/routes.rb` provide a POST route to this controller/action:
58
+
59
+ ```ruby
60
+ # For example
61
+ resources :your_models do
62
+ collection do
63
+ match :advanced_search, to: 'your_models#index', via: :post
64
+ end
65
+ end
66
+ ```
67
+
68
+ We have a ransack search well configured, from this step we will include the Advanced Search query mode in our views
69
+
70
+ In your application layout `app/views/layouts/application.erb`, include a yield in the head section to load ransack advanced search dependencies:
71
+ ```html
72
+ <html>
73
+ <head>
74
+ <!-- Your app resources -->
75
+ <%= yield(:ransack_advanced_search_setup) %>
76
+ </head>
77
+ <body>
78
+ </body>
79
+ </html>
80
+ ```
81
+ In the view that you want the advanced search views, insert the following:
82
+
83
+ ```ruby
84
+ <%= render partial: 'ransack_advanced_search/advanced_search',
85
+ locals: {
86
+ search_url: advanced_search_your_models_path, # POST route whe created above
87
+ redirect_path: your_models_path # GET redirect path, to return after some actions
88
+ }
89
+ %>
90
+ ```
91
+
92
+ All done! Enjoy the search!
93
+
94
+ ## Saving Searches
95
+
96
+ If you want to provide the feature to Save ransack searches, follow these steps.
97
+
98
+ Enable Saved Searches configuration in `config/initializers/ransack_advanced_search.rb`:
99
+
100
+ ```ruby
101
+ config.enable_saved_searches = true
102
+ ```
103
+
104
+ Run this command to generate the Saved Search Migration:
105
+
106
+ $ rails generate ransack_advanced_search:saved_search
107
+
108
+ Execute:
109
+
110
+ $ rake db:migrate
111
+
112
+ In each controller action with the Advanced Search:
113
+
114
+ * Include the Saved Search Utils methods:
115
+ ```ruby
116
+ include RansackAdvancedSearch::SavedSearchUtils
117
+ ```
118
+
119
+ * Insert this line before creating the search:
120
+ ```ruby
121
+ # GET /your_models
122
+ # GET /your_models.json
123
+ # POST /your_models/advanced_search
124
+ def index
125
+ # Call this methods passing a context(to scope the saved searches, can be any symbol) and the params variable
126
+ params[:q] = perform_saved_searches_actions(:your_models_index, params)
127
+ @search = YourModel.search(params[:q])
128
+ @results = @search.result()
129
+ end
130
+ ```
131
+ IMPORTANT: if you use custom inflections settings, you can receive this error:
132
+ ```
133
+ Table 'calendario_development.saved_searchs' doesn't exist
134
+ ```
135
+ To avoid this you will have to include an irregular inflection:
136
+ ```ruby
137
+ inlfect.irregular 'saved_search', 'saved_searches'
138
+ ```
139
+
140
+
141
+
35
142
  ## Contributing
36
143
 
37
144
  1. Fork it ( https://github.com/davidbrusius/ransack_advanced_search/fork )
@@ -1,36 +1,28 @@
1
1
  <div class="ransack-advanced-search">
2
2
 
3
3
  <div class="row">
4
- <div class="col-md-4">
5
- <div class="panel panel-primary">
6
- <div class="panel-heading"><%= t('ransack.saved_search.title') %></div>
7
- <div class="list-group lista-buscas">
8
- <% @saved_searches.each do |saved_search| %>
9
- <%= link_to url_for(saved_search: saved_search.id), method: :post, class: 'list-group-item' do %>
10
- <%= saved_search.description %>
11
- <% end %>
12
- <% end %>
13
- <% if @saved_searches.empty? %>
14
- <%= link_to '#', class: 'list-group-item' do %>
15
- <em><%= t('ransack.saved_search.empty_list') %></em>
16
- <% end %>
17
- <% end %>
18
- </div>
4
+ <% if RansackAdvancedSearch.enable_saved_searches %>
5
+ <div class="col-md-4">
6
+ <%= render 'ransack_advanced_search/saved_searches_list' %>
19
7
  </div>
20
- </div>
21
- <div class="col-md-8">
8
+ <div class="col-md-8">
9
+ <% else %>
10
+ <div class="col-md-12">
11
+ <% end %>
22
12
  <%= search_form_for(@search, url: search_url, html: { method: :post, class: 'form-vertical', role: 'form' }) do |f| %>
23
13
 
24
14
  <% setup_search_form f %>
25
15
 
26
- <div class="form-group">
27
- <%= label_tag 'Descrição da Busca (necessária para salvar a busca)' %>
28
- <%= text_field_tag :description, @saved_search.try(:description), class: 'form-control input-sm' %>
29
- <% if @saved_search %>
30
- <%= hidden_field_tag :saved_search, @saved_search.id %>
31
- <%= hidden_field_tag :use_search_params, true %>
32
- <% end %>
33
- </div>
16
+ <% if RansackAdvancedSearch.enable_saved_searches %>
17
+ <div class="form-group">
18
+ <%= label_tag 'Descrição da Busca (necessária para salvar a busca)' %>
19
+ <%= text_field_tag :description, @saved_search.try(:description), class: 'form-control input-sm' %>
20
+ <% if @saved_search %>
21
+ <%= hidden_field_tag :saved_search, @saved_search.id %>
22
+ <%= hidden_field_tag :use_search_params, true %>
23
+ <% end %>
24
+ </div>
25
+ <% end %>
34
26
 
35
27
  <h4><%= t('ransack.advanced_search.sort.title') %></h4>
36
28
  <div class="form-group">
@@ -53,8 +45,11 @@
53
45
  <!-- <%= check_box_tag :distinct, '1', params[:distinct].to_i == 1 %> -->
54
46
  <div class="form-group">
55
47
  <%= f.submit t('ransack.advanced_search.form.submit_text'), class: 'btn btn-primary' %>
56
- <%= f.submit t('ransack.advanced_search.form.save_submit_text'), name: 'save_search', class: 'btn btn-primary' %>
57
- <%= f.submit t('ransack.advanced_search.form.save_new_submit_text'), name: 'save_new_search', class: 'btn btn-primary' %>
48
+ <% if RansackAdvancedSearch.enable_saved_searches %>
49
+ <%= f.submit t('ransack.advanced_search.form.save_submit_text'), name: 'save_search', class: 'btn btn-primary' %>
50
+ <%= f.submit t('ransack.advanced_search.form.save_new_submit_text'), name: 'save_new_search', class: 'btn btn-primary' %>
51
+ <% end %>
52
+ <%= link_to t('ransack.advanced_search.form.clear_search_text'), redirect_path, class: 'btn btn-default' %>
58
53
  </div>
59
54
  <% end %>
60
55
  </div>
@@ -0,0 +1,15 @@
1
+ <div class="panel panel-primary">
2
+ <div class="panel-heading"><%= t('ransack.saved_search.title') %></div>
3
+ <div class="list-group lista-buscas">
4
+ <% @saved_searches.each do |saved_search| %>
5
+ <%= link_to url_for(saved_search: saved_search.id), method: :post, class: 'list-group-item' do %>
6
+ <%= saved_search.description %>
7
+ <% end %>
8
+ <% end %>
9
+ <% if @saved_searches.empty? %>
10
+ <%= link_to '#', class: 'list-group-item' do %>
11
+ <em><%= t('ransack.saved_search.empty_list') %></em>
12
+ <% end %>
13
+ <% end %>
14
+ </div>
15
+ </div>
@@ -5,6 +5,7 @@ en:
5
5
  submit_text: Search
6
6
  save_submit_text: Save and Search
7
7
  save_new_submit_text: Save as new and Search
8
+ clear_search_text: Reset
8
9
  sort:
9
10
  title: Sort
10
11
  label_title: Sort by
@@ -5,6 +5,7 @@ pt-BR:
5
5
  submit_text: Pesquisar
6
6
  save_submit_text: Salvar e Pesquisar
7
7
  save_new_submit_text: Salvar nova e Pesquisar
8
+ clear_search_text: Limpar
8
9
  sort:
9
10
  title: Ordenação
10
11
  add: Adicionar ordenação
@@ -0,0 +1,16 @@
1
+ require 'rails/generators/base'
2
+
3
+ module RansackAdvancedSearch
4
+ module Generators
5
+ class InstallGenerator < Rails::Generators::Base
6
+ source_root File.expand_path("../../templates", __FILE__)
7
+ include Rails::Generators::Migration
8
+ desc "Install Ransack Advanced Search"
9
+ class_option :orm
10
+
11
+ def copy_initializer
12
+ template "ransack_advanced_search.rb", "config/initializers/ransack_advanced_search.rb"
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,5 @@
1
+ RansackAdvancedSearch.configuration do |config|
2
+
3
+ # Enable feature for Saving Searches
4
+ config.enable_saved_searches = false
5
+ end
@@ -0,0 +1,26 @@
1
+ module Configuration
2
+
3
+ def configuration
4
+ yield self
5
+ end
6
+
7
+ def define_setting(name, default = nil)
8
+ class_variable_set("@@#{name}", default)
9
+
10
+ define_class_method "#{name}=" do |value|
11
+ class_variable_set("@@#{name}", value)
12
+ end
13
+
14
+ define_class_method name do
15
+ class_variable_get("@@#{name}")
16
+ end
17
+ end
18
+
19
+ private
20
+
21
+ def define_class_method(name, &block)
22
+ (class << self; self; end).instance_eval do
23
+ define_method name, &block
24
+ end
25
+ end
26
+ end
@@ -1,3 +1,3 @@
1
1
  module RansackAdvancedSearch
2
- VERSION = "0.1.1"
2
+ VERSION = "0.1.2"
3
3
  end
@@ -1,7 +1,12 @@
1
- require 'ransack_advanced_search/engine'
2
1
  require 'rails'
3
2
  require 'ransack'
4
3
 
4
+ require 'ransack_advanced_search/engine'
5
+ require 'ransack_advanced_search/version'
6
+ require 'ransack_advanced_search/helpers/configuration'
5
7
 
6
8
  module RansackAdvancedSearch
9
+ extend Configuration
10
+
11
+ define_setting :enable_saved_searches, false
7
12
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ransack_advanced_search
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Brusius
@@ -85,16 +85,20 @@ files:
85
85
  - app/views/ransack_advanced_search/_attribute_fields.erb
86
86
  - app/views/ransack_advanced_search/_condition_fields.erb
87
87
  - app/views/ransack_advanced_search/_grouping_fields.erb
88
+ - app/views/ransack_advanced_search/_saved_searches_list.erb
88
89
  - app/views/ransack_advanced_search/_sort_fields.erb
89
90
  - app/views/ransack_advanced_search/_value_fields.erb
90
- - config/initializers/ransack_advanced_search.rb
91
+ - config/initializers/ransack_advanced_search_setup.rb
91
92
  - config/locales/ransack.en.yml
92
93
  - config/locales/ransack.pt-BR.yml
93
94
  - config/routes.rb
95
+ - lib/generators/ransack_advanced_search/install_generator.rb
94
96
  - lib/generators/ransack_advanced_search/saved_search_generator.rb
95
97
  - lib/generators/templates/create_ransack_advanced_search_saved_search.rb
98
+ - lib/generators/templates/ransack_advanced_search.rb
96
99
  - lib/ransack_advanced_search.rb
97
100
  - lib/ransack_advanced_search/engine.rb
101
+ - lib/ransack_advanced_search/helpers/configuration.rb
98
102
  - lib/ransack_advanced_search/version.rb
99
103
  - lib/tasks/ransack_advanced_search_tasks.rake
100
104
  - test/dummy/README.rdoc