mighty_grid 0.6.0 → 0.6.1
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 +4 -4
- data/.gitignore +7 -1
- data/.travis.yml +10 -3
- data/Appraisals +6 -3
- data/Gemfile +8 -3
- data/Rakefile +5 -6
- data/features/filtering.feature +14 -13
- data/features/step_definitions/steps.rb +4 -4
- data/features/support/capybara.rb +8 -0
- data/features/support/database_cleaner.rb +2 -2
- data/features/support/env.rb +4 -3
- data/features/support/paths.rb +4 -4
- data/gemfiles/rails_32.gemfile +9 -4
- data/gemfiles/rails_40.gemfile +7 -2
- data/gemfiles/rails_41.gemfile +7 -2
- data/lib/generators/mighty_grid/install_generator.rb +4 -2
- data/lib/generators/mighty_grid/templates/mighty_grid_config.rb +1 -1
- data/lib/mighty_grid/base.rb +30 -33
- data/lib/mighty_grid/column.rb +16 -18
- data/lib/mighty_grid/config.rb +1 -1
- data/lib/mighty_grid/engine.rb +1 -3
- data/lib/mighty_grid/filter_renderer.rb +24 -24
- data/lib/mighty_grid/grid_renderer.rb +8 -6
- data/lib/mighty_grid/helpers/mighty_grid_view_helpers.rb +71 -74
- data/lib/mighty_grid/kaminari_monkey_patching.rb +1 -1
- data/lib/mighty_grid/mighty_grid_controller.rb +4 -6
- data/lib/mighty_grid/mighty_grid_ext.rb +2 -2
- data/lib/mighty_grid/mighty_grid_misc.rb +2 -4
- data/lib/mighty_grid/version.rb +1 -1
- data/lib/mighty_grid.rb +1 -1
- data/mighty_grid.gemspec +11 -11
- data/spec/config_spec.rb +27 -27
- data/spec/dummy/Rakefile +6 -0
- data/spec/dummy/app/assets/images/.keep +0 -0
- data/spec/dummy/app/assets/javascripts/application.js +16 -0
- data/spec/dummy/app/assets/stylesheets/application.css +16 -0
- data/spec/dummy/app/controllers/application_controller.rb +5 -0
- data/spec/dummy/app/controllers/concerns/.keep +0 -0
- data/spec/dummy/app/controllers/users_controller.rb +5 -0
- data/spec/dummy/app/helpers/application_helper.rb +2 -0
- data/spec/dummy/app/mailers/.keep +0 -0
- data/spec/dummy/app/models/.keep +0 -0
- data/spec/dummy/app/models/company.rb +3 -0
- data/spec/dummy/app/models/concerns/.keep +0 -0
- data/spec/dummy/app/models/user.rb +3 -0
- data/spec/dummy/app/views/layouts/application.html.erb +14 -0
- data/spec/{fake_app/views/index.html.erb → dummy/app/views/users/index.html} +0 -6
- data/spec/dummy/bin/bundle +3 -0
- data/spec/dummy/bin/rails +4 -0
- data/spec/dummy/bin/rake +4 -0
- data/spec/dummy/config/application.rb +31 -0
- data/spec/dummy/config/boot.rb +5 -0
- data/spec/dummy/config/database.yml.travis +28 -0
- data/spec/dummy/config/environment.rb +9 -0
- data/spec/dummy/config/environments/development.rb +38 -0
- data/spec/dummy/config/environments/production.rb +83 -0
- data/spec/dummy/config/environments/test.rb +39 -0
- data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/spec/dummy/config/initializers/cookies_serializer.rb +3 -0
- data/spec/dummy/config/initializers/filter_parameter_logging.rb +4 -0
- data/spec/dummy/config/initializers/inflections.rb +16 -0
- data/spec/dummy/config/initializers/mime_types.rb +4 -0
- data/spec/dummy/config/initializers/secret_token.rb +16 -0
- data/spec/dummy/config/initializers/session_store.rb +3 -0
- data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/spec/dummy/config/locales/en.yml +23 -0
- data/spec/dummy/config/routes.rb +10 -0
- data/spec/dummy/config/secrets.yml +22 -0
- data/spec/dummy/config.ru +4 -0
- data/spec/dummy/db/migrate/20140727125647_create_users.rb +12 -0
- data/spec/dummy/db/migrate/20140727141742_create_companies.rb +9 -0
- data/spec/dummy/db/schema.rb +31 -0
- data/spec/dummy/lib/assets/.keep +0 -0
- data/spec/dummy/public/404.html +67 -0
- data/spec/dummy/public/422.html +67 -0
- data/spec/dummy/public/500.html +66 -0
- data/spec/dummy/public/favicon.ico +0 -0
- data/spec/lib/base_spec.rb +31 -54
- data/spec/lib/column_spec.rb +13 -13
- data/spec/lib/generators/install_generator_spec.rb +7 -7
- data/spec/spec_helper.rb +5 -3
- data/spec/support/capybara.rb +0 -4
- data/spec/support/database_cleaner.rb +1 -5
- metadata +94 -12
- data/spec/fake_app/config/database.yml.example +0 -14
- data/spec/fake_app/models/active_record.rb +0 -25
- data/spec/fake_app/models/config.rb +0 -5
- data/spec/fake_app/rails_app.rb +0 -39
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 74b8144f9e7e58cdc96ca3d0b807c64480fb1358
|
4
|
+
data.tar.gz: 3df768d2465fef24ef982f16b48c1f63c9835f39
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c198e16b636905e23ecdf31a2c9fc76c2275a4db88aee84df62ebf5e7532a78a1e25c925af505413c4886dafa1aff02562fb9f294a89815e2d16132765972717
|
7
|
+
data.tar.gz: c5425779bef23b7b99d6b7b61531cc26990c73a8e86ba9e95ed652af42433645ab2f75dd09a0db460b4dd89dc34a5cfa47d3cc29d3c21ad0d6725539d8d4c510
|
data/.gitignore
CHANGED
data/.travis.yml
CHANGED
@@ -2,11 +2,14 @@ language: ruby
|
|
2
2
|
rvm:
|
3
3
|
- 2.0.0
|
4
4
|
- 2.1.1
|
5
|
+
- ruby-head
|
5
6
|
|
6
|
-
script:
|
7
|
+
script:
|
8
|
+
- bundle exec rake -f spec/dummy/Rakefile db:migrate
|
9
|
+
- bundle exec rake spec cucumber
|
7
10
|
|
8
11
|
before_script:
|
9
|
-
- cp spec/
|
12
|
+
- cp spec/dummy/config/database.yml.travis spec/dummy/config/database.yml
|
10
13
|
- mysql -e 'create database mg_test'
|
11
14
|
- psql -c 'create database mg_test' -U postgres
|
12
15
|
|
@@ -23,4 +26,8 @@ gemfile:
|
|
23
26
|
addons:
|
24
27
|
code_climate:
|
25
28
|
repo_token: 47bc411a11ccfed015bf25395d8204600c899e530c1c4beed1b7197aa61c6fb6
|
26
|
-
postgresql: "9.3"
|
29
|
+
postgresql: "9.3"
|
30
|
+
|
31
|
+
matrix:
|
32
|
+
allow_failures:
|
33
|
+
- rvm: ruby-head
|
data/Appraisals
CHANGED
@@ -1,14 +1,17 @@
|
|
1
1
|
appraise "rails_32" do
|
2
|
-
gem "rails", "~> 3.2.
|
3
|
-
gem "activerecord", "~> 3.2.
|
2
|
+
gem "rails", "~> 3.2.19"
|
3
|
+
gem "activerecord", "~> 3.2.19", require: 'active_record'
|
4
|
+
gem 'coffee-rails', '~> 3.2.0'
|
4
5
|
end
|
5
6
|
|
6
7
|
appraise "rails_40" do
|
7
8
|
gem "rails", "~> 4.0.0"
|
8
9
|
gem "activerecord", "~> 4.0.0", require: 'active_record'
|
10
|
+
gem 'coffee-rails', '~> 4.0.0'
|
9
11
|
end
|
10
12
|
|
11
13
|
appraise "rails_41" do
|
12
14
|
gem "rails", "~> 4.1.0"
|
13
15
|
gem "activerecord", "~> 4.1.0", require: 'active_record'
|
14
|
-
|
16
|
+
gem 'coffee-rails', '~> 4.0.0'
|
17
|
+
end
|
data/Gemfile
CHANGED
@@ -2,16 +2,21 @@ source 'https://rubygems.org'
|
|
2
2
|
|
3
3
|
gemspec
|
4
4
|
|
5
|
+
gem 'uglifier', '>= 1.3.0' # Use Uglifier as compressor for JavaScript assets
|
6
|
+
gem 'jquery-rails' # Use jquery as the JavaScript library
|
7
|
+
|
5
8
|
group :test do
|
6
9
|
gem 'sqlite3'
|
7
10
|
gem "generator_spec"
|
8
|
-
gem 'capybara'
|
11
|
+
gem 'capybara', require: false
|
9
12
|
gem 'database_cleaner'
|
10
|
-
gem 'cucumber-rails'
|
13
|
+
gem 'cucumber-rails', require: false
|
11
14
|
gem 'spreewald'
|
15
|
+
gem 'poltergeist'
|
16
|
+
gem 'launchy'
|
12
17
|
|
13
18
|
gem 'coveralls', require: false
|
14
19
|
gem "codeclimate-test-reporter", require: nil
|
15
20
|
gem 'pg', require: false
|
16
21
|
gem 'mysql2', require: false
|
17
|
-
end
|
22
|
+
end
|
data/Rakefile
CHANGED
@@ -1,16 +1,15 @@
|
|
1
|
-
require "bundler/gem_tasks"
|
2
1
|
require 'appraisal'
|
3
2
|
require 'rspec/core/rake_task'
|
4
3
|
require 'cucumber/rake/task'
|
5
4
|
|
6
|
-
|
7
|
-
|
5
|
+
Bundler::GemHelper.install_tasks
|
6
|
+
|
7
|
+
if !ENV['APPRAISAL_INITIALIZED'] && !ENV['TRAVIS']
|
8
|
+
task default: :appraisal
|
8
9
|
end
|
9
10
|
|
10
11
|
desc 'Test the paperclip plugin.'
|
11
12
|
RSpec::Core::RakeTask.new(:spec)
|
12
13
|
|
13
14
|
desc 'Run integration test'
|
14
|
-
Cucumber::Rake::Task.new
|
15
|
-
t.cucumber_opts = %w{--format progress}
|
16
|
-
end
|
15
|
+
Cucumber::Rake::Task.new
|
data/features/filtering.feature
CHANGED
@@ -27,16 +27,17 @@ Feature: Filtering
|
|
27
27
|
And I should see "user101"
|
28
28
|
And I should see "1 of 1"
|
29
29
|
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
30
|
+
@javascript
|
31
|
+
Scenario: Reset filter
|
32
|
+
Given I am on the list of users page
|
33
|
+
When I fill in "Name" with "user001"
|
34
|
+
And I select "Admin" from "Role"
|
35
|
+
And I check "Banned"
|
36
|
+
And I press "Apply changes"
|
37
|
+
Then the "Name" field should contain "user001"
|
38
|
+
And "Admin" should be selected for "Role"
|
39
|
+
And the "Banned" checkbox should be checked
|
40
|
+
When I press "Reset changes"
|
41
|
+
Then the "Name" field should contain ""
|
42
|
+
And nothing should be selected for "Role"
|
43
|
+
And the "Banned" checkbox should not be checked
|
@@ -1,5 +1,5 @@
|
|
1
1
|
Given /^I generate (\d+) users$/ do |n|
|
2
|
-
1.upto(n.to_i) {|i| User.create! :
|
3
|
-
User.create! :
|
4
|
-
User.create! :
|
5
|
-
end
|
2
|
+
1.upto(n.to_i) { |i| User.create! name: "user#{format('%03d', i)}" }
|
3
|
+
User.create! name: "admin#{format('%03d', 1)}", role: :admin
|
4
|
+
User.create! name: "user#{format('%03d', (n.to_i + 1))}", is_banned: true
|
5
|
+
end
|
@@ -4,9 +4,9 @@ begin
|
|
4
4
|
|
5
5
|
DatabaseCleaner.strategy = :truncation
|
6
6
|
rescue NameError
|
7
|
-
raise
|
7
|
+
raise 'You need to add database_cleaner to your Gemfile (in the :test group) if you wish to use it.'
|
8
8
|
end
|
9
9
|
|
10
10
|
# Around do |scenario, block|
|
11
11
|
# DatabaseCleaner.cleaning(&block)
|
12
|
-
# end
|
12
|
+
# end
|
data/features/support/env.rb
CHANGED
@@ -4,14 +4,15 @@ begin
|
|
4
4
|
rescue LoadError
|
5
5
|
end
|
6
6
|
|
7
|
-
require 'capybara/cucumber'
|
8
7
|
require 'bundler/setup'
|
9
8
|
Bundler.require
|
10
9
|
|
10
|
+
require 'capybara/cucumber'
|
11
|
+
|
11
12
|
if defined? Rails
|
12
|
-
|
13
|
+
require File.expand_path("../../../spec/dummy/config/environment.rb", __FILE__)
|
13
14
|
end
|
14
15
|
|
15
16
|
require 'spreewald/web_steps'
|
16
17
|
require 'spreewald/table_steps'
|
17
|
-
require 'spreewald/development_steps'
|
18
|
+
require 'spreewald/development_steps'
|
data/features/support/paths.rb
CHANGED
@@ -15,13 +15,13 @@ module NavigationHelpers
|
|
15
15
|
begin
|
16
16
|
page_name =~ /^the (.*) page$/
|
17
17
|
path_components = $1.split(/\s+/)
|
18
|
-
|
18
|
+
send(path_components.push('path').join('_').to_sym)
|
19
19
|
rescue NoMethodError, ArgumentError
|
20
|
-
raise "Can't find mapping from \"#{page_name}\" to a path.\n"
|
21
|
-
|
20
|
+
raise "Can't find mapping from \"#{page_name}\" to a path.\n" \
|
21
|
+
"Now, go and add a mapping in #{__FILE__}"
|
22
22
|
end
|
23
23
|
end
|
24
24
|
end
|
25
25
|
end
|
26
26
|
|
27
|
-
World(NavigationHelpers)
|
27
|
+
World(NavigationHelpers)
|
data/gemfiles/rails_32.gemfile
CHANGED
@@ -2,16 +2,21 @@
|
|
2
2
|
|
3
3
|
source "https://rubygems.org"
|
4
4
|
|
5
|
-
gem "rails", "~> 3.2.
|
6
|
-
gem "activerecord", "~> 3.2.
|
5
|
+
gem "rails", "~> 3.2.19"
|
6
|
+
gem "activerecord", "~> 3.2.19", :require => "active_record"
|
7
|
+
gem "coffee-rails", "~> 3.2.0"
|
7
8
|
|
8
9
|
group :test do
|
9
10
|
gem "sqlite3"
|
10
11
|
gem "generator_spec"
|
11
|
-
gem "capybara"
|
12
|
+
gem "capybara", :require => false
|
12
13
|
gem "database_cleaner"
|
13
|
-
gem "cucumber-rails"
|
14
|
+
gem "cucumber-rails", :require => false
|
14
15
|
gem "spreewald"
|
16
|
+
gem "poltergeist"
|
17
|
+
gem "launchy"
|
18
|
+
gem "uglifier", ">= 1.3.0"
|
19
|
+
gem "jquery-rails"
|
15
20
|
gem "coveralls", :require => false
|
16
21
|
gem "codeclimate-test-reporter", :require => nil
|
17
22
|
gem "pg", :require => false
|
data/gemfiles/rails_40.gemfile
CHANGED
@@ -4,14 +4,19 @@ source "https://rubygems.org"
|
|
4
4
|
|
5
5
|
gem "rails", "~> 4.0.0"
|
6
6
|
gem "activerecord", "~> 4.0.0", :require => "active_record"
|
7
|
+
gem "coffee-rails", "~> 4.0.0"
|
7
8
|
|
8
9
|
group :test do
|
9
10
|
gem "sqlite3"
|
10
11
|
gem "generator_spec"
|
11
|
-
gem "capybara"
|
12
|
+
gem "capybara", :require => false
|
12
13
|
gem "database_cleaner"
|
13
|
-
gem "cucumber-rails"
|
14
|
+
gem "cucumber-rails", :require => false
|
14
15
|
gem "spreewald"
|
16
|
+
gem "poltergeist"
|
17
|
+
gem "launchy"
|
18
|
+
gem "uglifier", ">= 1.3.0"
|
19
|
+
gem "jquery-rails"
|
15
20
|
gem "coveralls", :require => false
|
16
21
|
gem "codeclimate-test-reporter", :require => nil
|
17
22
|
gem "pg", :require => false
|
data/gemfiles/rails_41.gemfile
CHANGED
@@ -4,14 +4,19 @@ source "https://rubygems.org"
|
|
4
4
|
|
5
5
|
gem "rails", "~> 4.1.0"
|
6
6
|
gem "activerecord", "~> 4.1.0", :require => "active_record"
|
7
|
+
gem "coffee-rails", "~> 4.0.0"
|
7
8
|
|
8
9
|
group :test do
|
9
10
|
gem "sqlite3"
|
10
11
|
gem "generator_spec"
|
11
|
-
gem "capybara"
|
12
|
+
gem "capybara", :require => false
|
12
13
|
gem "database_cleaner"
|
13
|
-
gem "cucumber-rails"
|
14
|
+
gem "cucumber-rails", :require => false
|
14
15
|
gem "spreewald"
|
16
|
+
gem "poltergeist"
|
17
|
+
gem "launchy"
|
18
|
+
gem "uglifier", ">= 1.3.0"
|
19
|
+
gem "jquery-rails"
|
15
20
|
gem "coveralls", :require => false
|
16
21
|
gem "codeclimate-test-reporter", :require => nil
|
17
22
|
gem "pg", :require => false
|
@@ -1,9 +1,11 @@
|
|
1
|
+
require 'rails/generators'
|
2
|
+
|
1
3
|
module MightyGrid
|
2
4
|
module Generators
|
3
5
|
class InstallGenerator < Rails::Generators::Base
|
4
6
|
source_root File.expand_path(File.join(File.dirname(__FILE__), 'templates'))
|
5
7
|
|
6
|
-
desc
|
8
|
+
desc 'Copies MightyGrid configuration and locale files to your application.'
|
7
9
|
|
8
10
|
def copy_config_file
|
9
11
|
template 'mighty_grid_config.rb', 'config/initializers/mighty_grid_config.rb'
|
@@ -14,4 +16,4 @@ module MightyGrid
|
|
14
16
|
end
|
15
17
|
end
|
16
18
|
end
|
17
|
-
end
|
19
|
+
end
|
data/lib/mighty_grid/base.rb
CHANGED
@@ -1,7 +1,5 @@
|
|
1
1
|
module MightyGrid
|
2
|
-
|
3
2
|
class Base
|
4
|
-
|
5
3
|
attr_reader :klass, :name, :relation, :options, :mg_params, :controller
|
6
4
|
attr_accessor :output_buffer, :filters
|
7
5
|
|
@@ -11,13 +9,13 @@ module MightyGrid
|
|
11
9
|
@filters = {}
|
12
10
|
|
13
11
|
@options = {
|
14
|
-
:
|
15
|
-
:
|
16
|
-
:
|
17
|
-
:
|
18
|
-
:
|
19
|
-
:
|
20
|
-
:
|
12
|
+
page: 1,
|
13
|
+
per_page: MightyGrid.config.per_page,
|
14
|
+
name: MightyGrid.config.grid_name,
|
15
|
+
include: nil,
|
16
|
+
joins: nil,
|
17
|
+
conditions: nil,
|
18
|
+
group: nil
|
21
19
|
}
|
22
20
|
|
23
21
|
opts.assert_valid_keys(@options.keys)
|
@@ -35,13 +33,13 @@ module MightyGrid
|
|
35
33
|
def read
|
36
34
|
apply_filters
|
37
35
|
@relation = @relation.order("#{@mg_params[:order]} #{current_order_direction.to_sym}") if @mg_params[:order].present? && current_order_direction.present?
|
38
|
-
@relation = @relation
|
39
|
-
page(@mg_params[:page])
|
40
|
-
per(@mg_params[:per_page])
|
41
|
-
includes(@options[:include])
|
42
|
-
joins(@options[:joins])
|
43
|
-
where(@options[:conditions])
|
44
|
-
group(@options[:group])
|
36
|
+
@relation = @relation
|
37
|
+
.page(@mg_params[:page])
|
38
|
+
.per(@mg_params[:per_page])
|
39
|
+
.includes(@options[:include])
|
40
|
+
.joins(@options[:joins])
|
41
|
+
.where(@options[:conditions])
|
42
|
+
.group(@options[:group])
|
45
43
|
end
|
46
44
|
|
47
45
|
# Apply filters
|
@@ -58,19 +56,17 @@ module MightyGrid
|
|
58
56
|
next if filter_value.blank? || !model.column_names.include?(name)
|
59
57
|
|
60
58
|
if model && model.superclass == ActiveRecord::Base
|
61
|
-
|
59
|
+
field_type = model.columns_hash[name].type
|
62
60
|
else
|
63
61
|
next
|
64
62
|
end
|
65
63
|
|
66
|
-
field_type ||= model.columns_hash[name].type
|
67
64
|
table_name = model.table_name
|
68
|
-
|
69
|
-
if @filters.has_key?(filter_name.to_sym) && @filters[filter_name.to_sym].is_a?(Array)
|
65
|
+
if @filters.key?(filter_name.to_sym) && @filters[filter_name.to_sym].is_a?(Array)
|
70
66
|
@relation = @relation.where(table_name => { filter_name => filter_value })
|
71
67
|
elsif field_type == :boolean
|
72
|
-
value =
|
73
|
-
@relation = @relation.where(table_name => {filter_name => value})
|
68
|
+
value = %w(true 1 t).include?(filter_value) ? true : false
|
69
|
+
@relation = @relation.where(table_name => { filter_name => value })
|
74
70
|
elsif [:string, :text].include?(field_type)
|
75
71
|
@relation = @relation.where("#{table_name}.#{name} #{like_operator} ?", "%#{filter_value}%")
|
76
72
|
end
|
@@ -89,14 +85,14 @@ module MightyGrid
|
|
89
85
|
if current_grid_params
|
90
86
|
@mg_params.merge!(current_grid_params.symbolize_keys)
|
91
87
|
if @mg_params[:order].present? && !@mg_params[:order].to_s.include?('.')
|
92
|
-
@mg_params[:order] = "#{klass.table_name}.#{@mg_params[:order]}"
|
88
|
+
@mg_params[:order] = "#{klass.table_name}.#{@mg_params[:order]}"
|
93
89
|
end
|
94
90
|
end
|
95
91
|
end
|
96
92
|
|
97
93
|
# Get current grid parameter by name
|
98
94
|
def get_current_grid_param(name)
|
99
|
-
current_grid_params.
|
95
|
+
current_grid_params.key?(name) ? current_grid_params[name] : nil
|
100
96
|
end
|
101
97
|
|
102
98
|
# Get filter parameters
|
@@ -105,7 +101,9 @@ module MightyGrid
|
|
105
101
|
end
|
106
102
|
|
107
103
|
# Get filter parameter name
|
108
|
-
def filter_param_name
|
104
|
+
def filter_param_name
|
105
|
+
'f'
|
106
|
+
end
|
109
107
|
|
110
108
|
# Get filter name by field
|
111
109
|
def get_filter_name(field, model = nil)
|
@@ -122,18 +120,18 @@ module MightyGrid
|
|
122
120
|
def order_params(attribute, model = nil, direction = nil)
|
123
121
|
order = model.present? ? "#{model.table_name}.#{attribute}" : attribute.to_s
|
124
122
|
direction ||= order == current_grid_params['order'] ? another_order_direction : 'asc'
|
125
|
-
{@name => {order: order, order_direction: direction}}
|
123
|
+
{ @name => { order: order, order_direction: direction } }
|
126
124
|
end
|
127
125
|
|
128
126
|
# Get current order direction if current order parameter coincides with the received parameter
|
129
127
|
def get_active_order_direction(parameters)
|
130
|
-
|
128
|
+
parameters[@name]['order'] == current_grid_params['order'] ? current_order_direction : nil
|
131
129
|
end
|
132
130
|
|
133
131
|
# Get current order direction
|
134
132
|
def current_order_direction
|
135
133
|
direction = nil
|
136
|
-
if current_grid_params.
|
134
|
+
if current_grid_params.key?('order_direction') && %w(asc desc).include?(current_grid_params['order_direction'].downcase)
|
137
135
|
direction = current_grid_params['order_direction'].downcase
|
138
136
|
end
|
139
137
|
direction
|
@@ -141,17 +139,16 @@ module MightyGrid
|
|
141
139
|
|
142
140
|
# Get another order direction
|
143
141
|
def another_order_direction
|
144
|
-
|
142
|
+
current_grid_params.key?('order_direction') ? (%w(asc desc) - [current_grid_params['order_direction'].to_s]).first : MightyGrid.config.order_direction
|
145
143
|
end
|
146
144
|
|
147
|
-
# Get <tt>like</tt> or <tt>ilike</tt> operator depending on the database adapter
|
145
|
+
# Get <tt>like</tt> or <tt>ilike</tt> operator depending on the database adapter
|
148
146
|
def like_operator
|
149
147
|
if ActiveRecord::ConnectionAdapters.const_defined?(:PostgreSQLAdapter) && ActiveRecord::Base.connection.is_a?(ActiveRecord::ConnectionAdapters::PostgreSQLAdapter)
|
150
148
|
'ILIKE'
|
151
149
|
else
|
152
|
-
'LIKE'
|
150
|
+
'LIKE'
|
153
151
|
end
|
154
152
|
end
|
155
|
-
|
156
153
|
end
|
157
|
-
end
|
154
|
+
end
|
data/lib/mighty_grid/column.rb
CHANGED
@@ -1,14 +1,13 @@
|
|
1
1
|
module MightyGrid
|
2
2
|
class Column
|
3
|
-
|
4
3
|
attr_reader :attribute, :attrs, :th_attrs, :options, :title, :model, :partial
|
5
4
|
attr_accessor :render_value
|
6
5
|
|
7
|
-
def initialize(options={}, &block)
|
6
|
+
def initialize(options = {}, &block)
|
8
7
|
@attrs = {}
|
9
8
|
@th_attrs = {}
|
10
9
|
|
11
|
-
@attribute = options.delete(:attribute) if options.
|
10
|
+
@attribute = options.delete(:attribute) if options.key?(:attribute)
|
12
11
|
|
13
12
|
@options ||= options
|
14
13
|
|
@@ -19,25 +18,24 @@ module MightyGrid
|
|
19
18
|
end
|
20
19
|
|
21
20
|
@model = @options[:model]
|
22
|
-
|
23
|
-
|
24
|
-
@attrs = @options[:html] if @options.
|
25
|
-
@th_attrs = @options[:th_html] if @options.
|
26
|
-
@title = @options.
|
21
|
+
fail MightyGridArgumentError.new('Model of field for filtering should have type ActiveRecord') if @model && @model.superclass != ActiveRecord::Base
|
22
|
+
|
23
|
+
@attrs = @options[:html] if @options.key?(:html)
|
24
|
+
@th_attrs = @options[:th_html] if @options.key?(:th_html)
|
25
|
+
@title = @options.key?(:title) && @options[:title] || ''
|
27
26
|
end
|
28
27
|
|
29
28
|
def render(record)
|
30
29
|
case @render_value
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
30
|
+
when String, Symbol
|
31
|
+
rec = @model ? record.send(@model.to_s.underscore) : record
|
32
|
+
return rec[@render_value]
|
33
|
+
when Proc
|
34
|
+
value = @render_value.call(record)
|
35
|
+
return ERB::Util.h(value).to_s.html_safe
|
36
|
+
else
|
37
|
+
# raise
|
39
38
|
end
|
40
39
|
end
|
41
|
-
|
42
40
|
end
|
43
|
-
end
|
41
|
+
end
|
data/lib/mighty_grid/config.rb
CHANGED
data/lib/mighty_grid/engine.rb
CHANGED
@@ -17,17 +17,17 @@ module MightyGrid
|
|
17
17
|
end
|
18
18
|
|
19
19
|
# Get <tt>input</tt> HTML tag
|
20
|
-
def text_field(name, options={})
|
20
|
+
def text_field(name, options = {})
|
21
21
|
f_options = filter_options(name, options)
|
22
22
|
text_field_tag(@grid.get_filter_name(name, f_options[:model]), get_filter_param(name, f_options[:model]), options)
|
23
23
|
end
|
24
24
|
|
25
25
|
# Get <tt>select</tt> HTML tag
|
26
|
-
def select(name, option_tags=nil, options={})
|
26
|
+
def select(name, option_tags = nil, options = {})
|
27
27
|
@grid.filters[name] = option_tags
|
28
28
|
selected = nil
|
29
|
-
selected = options.delete(:selected) if options.
|
30
|
-
|
29
|
+
selected = options.delete(:selected) if options.key?(:selected)
|
30
|
+
|
31
31
|
f_options = filter_options(name, options)
|
32
32
|
|
33
33
|
selected = get_filter_param(name, f_options[:model]) if get_filter_param(name, f_options[:model])
|
@@ -41,44 +41,44 @@ module MightyGrid
|
|
41
41
|
checked = true if get_filter_param(name)
|
42
42
|
|
43
43
|
f_options = filter_options(name, options)
|
44
|
-
|
44
|
+
|
45
45
|
check_box_tag(@grid.get_filter_name(name, f_options[:model]), value, checked, options)
|
46
46
|
end
|
47
47
|
|
48
48
|
# Get button for Apply filter changes
|
49
49
|
def submit(content = nil, options = {})
|
50
|
-
content = I18n.t(
|
50
|
+
content = I18n.t('mighty_grid.filters.submit', default: 'Apply changes') if content.blank?
|
51
51
|
options.merge!(type: :submit)
|
52
52
|
content_tag(:button, content, options)
|
53
53
|
end
|
54
54
|
|
55
55
|
# Get button for Reset filter changes
|
56
56
|
def reset(content = nil, options = {})
|
57
|
-
content = I18n.t(
|
57
|
+
content = I18n.t('mighty_grid.filters.reset', default: 'Reset changes') if content.blank?
|
58
58
|
options.merge!(type: :reset)
|
59
59
|
content_tag(:button, content, options)
|
60
60
|
end
|
61
61
|
|
62
62
|
private
|
63
63
|
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
64
|
+
def get_filter_param(name, model = nil)
|
65
|
+
filter_name = model ? "#{model.table_name}.#{name}" : name
|
66
|
+
@grid.filter_params.key?(filter_name) ? @grid.filter_params[filter_name] : nil
|
67
|
+
end
|
68
68
|
|
69
|
-
|
70
|
-
|
71
|
-
|
69
|
+
def get_filter_id(name: nil, model: nil)
|
70
|
+
@grid.get_filter_name(name, model).parameterize('_')
|
71
|
+
end
|
72
72
|
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
end
|
81
|
-
opts
|
73
|
+
def filter_options(name, options, with_id = true)
|
74
|
+
opts = { name: name }
|
75
|
+
if options.is_a?(Hash) && options.key?(:model)
|
76
|
+
model = options.delete(:model)
|
77
|
+
fail MightyGridArgumentError.new('Model of field for filtering should have type ActiveRecord') if model.present? && model.superclass != ActiveRecord::Base
|
78
|
+
opts.merge!(model: model)
|
79
|
+
options.merge!(id: get_filter_id(opts)) if with_id
|
82
80
|
end
|
81
|
+
opts
|
82
|
+
end
|
83
83
|
end
|
84
|
-
end
|
84
|
+
end
|