mighty_grid 0.6.0 → 0.6.1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|