mighty_grid 2.0.0 → 2.1.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 +4 -4
- data/lib/mighty_grid/base.rb +40 -15
- data/lib/mighty_grid/filter_renderer.rb +14 -4
- data/lib/mighty_grid/filters/base.rb +1 -0
- data/lib/mighty_grid/filters/search_filter.rb +6 -0
- data/lib/mighty_grid/filters.rb +35 -7
- data/lib/mighty_grid/parameters.rb +5 -1
- data/lib/mighty_grid/version.rb +1 -1
- metadata +2 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c8d3b69949a5bd99efae0e4cdb2155b40c4f56e2
|
4
|
+
data.tar.gz: 4d619b1988d418b5d784bd518674af8c3f43be9b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6a887f14228bb0c6659cce9d4c1a043f722ebd4632a56ab1f1d7643c30efbe2be88c35c92712b5f8a5474fb85a5844b83949a5c1a92d6b013980333bb7e4a08f
|
7
|
+
data.tar.gz: 705d021a01263bfe8008168b5e65c047e3cdae352743c2b7e39189248d3aaf24390361f2847d9a25143b78788ba7f0bcc3ca0d5d4804b437a34b84951aa0754d
|
data/lib/mighty_grid/base.rb
CHANGED
@@ -3,8 +3,8 @@ module MightyGrid
|
|
3
3
|
include MightyGrid::Filters
|
4
4
|
include MightyGrid::Parameters
|
5
5
|
|
6
|
-
attr_reader :klass, :name, :relation, :options, :mg_params, :params, :controller
|
7
|
-
attr_accessor :output_buffer, :filters
|
6
|
+
attr_reader :klass, :name, :relation, :options, :mg_params, :params, :controller, :use_sphinx, :sphinx_options
|
7
|
+
attr_accessor :output_buffer, :filters, :query
|
8
8
|
|
9
9
|
def initialize(params, opts = {}) #:nodoc:
|
10
10
|
@controller_params = params
|
@@ -15,6 +15,9 @@ module MightyGrid
|
|
15
15
|
end
|
16
16
|
|
17
17
|
@filters = self.class.filters.dup
|
18
|
+
@query = self.class.try(:query).try(:dup)
|
19
|
+
@use_sphinx = self.class.use_sphinx || false
|
20
|
+
@sphinx_options = {}
|
18
21
|
|
19
22
|
@options = {
|
20
23
|
page: 1,
|
@@ -41,7 +44,7 @@ module MightyGrid
|
|
41
44
|
end
|
42
45
|
|
43
46
|
class << self
|
44
|
-
attr_reader :klass, :relation
|
47
|
+
attr_reader :klass, :relation, :use_sphinx, :sphinx_options
|
45
48
|
|
46
49
|
def scope(&block)
|
47
50
|
if block_given?
|
@@ -50,23 +53,45 @@ module MightyGrid
|
|
50
53
|
@klass = klass_or_relation.is_a?(ActiveRecord::Relation) ? klass_or_relation.klass : klass_or_relation
|
51
54
|
end
|
52
55
|
end
|
56
|
+
|
57
|
+
def use_thinking_sphinx(bool=false)
|
58
|
+
fail MightyGrid::Exceptions::ArgumentError.new('Parameter should have type Boolean: true or false') unless bool.in? [true, false]
|
59
|
+
@use_sphinx = bool
|
60
|
+
end
|
61
|
+
|
62
|
+
def sphinx_options(options = {})
|
63
|
+
@sphinx_options = options
|
64
|
+
end
|
53
65
|
end
|
54
66
|
|
55
67
|
def read
|
56
|
-
|
57
|
-
|
58
|
-
|
68
|
+
search_apply_filter if @use_sphinx
|
69
|
+
|
70
|
+
if @use_sphinx && @query
|
71
|
+
ts_apply_filters
|
72
|
+
if @mg_params[:order].present? && current_order_direction.present? && !@mg_params[:order].kind_of?(Hash)
|
73
|
+
@sphinx_options.merge!(order: "#{@mg_params[:order]} #{current_order_direction.to_sym}")
|
74
|
+
else
|
75
|
+
@sphinx_options.merge!(order: @mg_params[:order])
|
76
|
+
end
|
77
|
+
|
78
|
+
@relation = @klass.search(ThinkingSphinx::Query.escape(@query), @sphinx_options)
|
59
79
|
else
|
60
|
-
|
61
|
-
|
80
|
+
ar_apply_filters
|
81
|
+
if @mg_params[:order].present? && current_order_direction.present? && !@mg_params[:order].kind_of?(Hash)
|
82
|
+
@relation = @relation.order("#{@mg_params[:order]} #{current_order_direction.to_sym}")
|
83
|
+
else
|
84
|
+
@relation = @relation.order(@mg_params[:order])
|
85
|
+
end
|
62
86
|
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
87
|
+
@relation = @relation
|
88
|
+
.page(@mg_params[:page])
|
89
|
+
.per(@mg_params[:per_page])
|
90
|
+
.includes(@options[:include])
|
91
|
+
.joins(@options[:joins])
|
92
|
+
.where(@options[:conditions])
|
93
|
+
.group(@options[:group])
|
94
|
+
end
|
70
95
|
end
|
71
96
|
|
72
97
|
# Get controller parameters
|
@@ -1,6 +1,7 @@
|
|
1
1
|
module MightyGrid
|
2
2
|
class FilterRenderer
|
3
3
|
include ActionView::Helpers
|
4
|
+
include ActionView::Context
|
4
5
|
|
5
6
|
def initialize(grid, view)
|
6
7
|
@grid = grid
|
@@ -43,17 +44,26 @@ module MightyGrid
|
|
43
44
|
end
|
44
45
|
|
45
46
|
# Get button for Apply filter changes
|
46
|
-
def submit(content = nil, options = {})
|
47
|
+
def submit(content = nil, options = {}, &block)
|
47
48
|
content = I18n.t('mighty_grid.filters.submit', default: 'Apply changes') if content.blank?
|
48
49
|
options.merge!(type: :submit)
|
49
|
-
|
50
|
+
if block_given?
|
51
|
+
content_tag(:button, nil, options, &block)
|
52
|
+
else
|
53
|
+
content_tag(:button, content, options)
|
54
|
+
end
|
55
|
+
|
50
56
|
end
|
51
57
|
|
52
58
|
# Get button for Reset filter changes
|
53
|
-
def reset(content = nil, options = {})
|
59
|
+
def reset(content = nil, options = {}, &block)
|
54
60
|
content = I18n.t('mighty_grid.filters.reset', default: 'Reset changes') if content.blank?
|
55
61
|
options.merge!(type: :reset)
|
56
|
-
|
62
|
+
if block_given?
|
63
|
+
content_tag(:button, nil, options, &block)
|
64
|
+
else
|
65
|
+
content_tag(:button, content, options)
|
66
|
+
end
|
57
67
|
end
|
58
68
|
|
59
69
|
private
|
data/lib/mighty_grid/filters.rb
CHANGED
@@ -11,11 +11,16 @@ module MightyGrid
|
|
11
11
|
autoload :EnumFilter
|
12
12
|
autoload :BooleanFilter
|
13
13
|
autoload :CustomFilter
|
14
|
+
autoload :SearchFilter
|
14
15
|
|
15
16
|
def self.included(base)
|
16
17
|
base.class_eval do
|
17
18
|
class_attribute :filters
|
19
|
+
class_attribute :query
|
20
|
+
class_attribute :search_name
|
18
21
|
self.filters = {}
|
22
|
+
self.query = nil
|
23
|
+
self.search_name = nil
|
19
24
|
|
20
25
|
extend MapType
|
21
26
|
map_type :string, to: MightyGrid::Filters::StringFilter
|
@@ -23,6 +28,7 @@ module MightyGrid
|
|
23
28
|
map_type :enum, to: MightyGrid::Filters::EnumFilter
|
24
29
|
map_type :boolean, to: MightyGrid::Filters::BooleanFilter
|
25
30
|
map_type :custom, to: MightyGrid::Filters::CustomFilter
|
31
|
+
map_type :search, to: MightyGrid::Filters::SearchFilter
|
26
32
|
end
|
27
33
|
|
28
34
|
base.send :extend, ClassMethods
|
@@ -51,18 +57,25 @@ module MightyGrid
|
|
51
57
|
"#{name}[#{filter_param_name}][#{field_name}]"
|
52
58
|
end
|
53
59
|
|
60
|
+
def get_search_name
|
61
|
+
self.search_name
|
62
|
+
end
|
63
|
+
|
64
|
+
def get_filter_value(filter_name, filter)
|
65
|
+
if filter_params.present?
|
66
|
+
filter_params[filter_name.to_s]
|
67
|
+
else
|
68
|
+
filter.default.to_s
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
54
72
|
# Apply filters
|
55
|
-
def
|
73
|
+
def ar_apply_filters
|
56
74
|
@filters.each_pair do |filter_name, filter|
|
57
75
|
next if (filter_params.blank? && filter.default.blank? ||
|
58
76
|
filter_params.present? && filter_params[filter_name.to_s].blank?)
|
59
77
|
|
60
|
-
filter_value =
|
61
|
-
if filter_params.present?
|
62
|
-
filter_params[filter_name.to_s]
|
63
|
-
else
|
64
|
-
filter.default.to_s
|
65
|
-
end
|
78
|
+
filter_value = get_filter_value(filter_name, filter)
|
66
79
|
|
67
80
|
table_name = filter.model.table_name
|
68
81
|
|
@@ -83,6 +96,15 @@ module MightyGrid
|
|
83
96
|
end
|
84
97
|
end
|
85
98
|
end
|
99
|
+
|
100
|
+
# Thinking Sphinx apply filters
|
101
|
+
def ts_apply_filters
|
102
|
+
# TODO: Make filters for Thinking Sphinx
|
103
|
+
end
|
104
|
+
|
105
|
+
def search_apply_filter
|
106
|
+
self.query = get_filter_value(self.search_name, @filters[self.search_name])
|
107
|
+
end
|
86
108
|
end
|
87
109
|
|
88
110
|
module ClassMethods
|
@@ -102,11 +124,17 @@ module MightyGrid
|
|
102
124
|
end
|
103
125
|
end
|
104
126
|
|
127
|
+
def search(name)
|
128
|
+
filter(name, :search)
|
129
|
+
self.search_name = name
|
130
|
+
end
|
131
|
+
|
105
132
|
protected
|
106
133
|
|
107
134
|
def inherited(child_class)
|
108
135
|
super(child_class)
|
109
136
|
child_class.filters = self.filters.clone
|
137
|
+
child_class.query = self.query.try(:clone)
|
110
138
|
end
|
111
139
|
end
|
112
140
|
end
|
@@ -13,7 +13,11 @@ module MightyGrid
|
|
13
13
|
if current_grid_params
|
14
14
|
@mg_params.merge!(current_grid_params.symbolize_keys)
|
15
15
|
if @mg_params[:order].present? && !@mg_params[:order].to_s.include?('.') && !@mg_params[:order].kind_of?(Hash)
|
16
|
-
|
16
|
+
if @use_sphinx
|
17
|
+
@mg_params[:order] = @mg_params[:order].to_s
|
18
|
+
else
|
19
|
+
@mg_params[:order] = "#{klass.table_name}.#{@mg_params[:order]}"
|
20
|
+
end
|
17
21
|
end
|
18
22
|
end
|
19
23
|
end
|
data/lib/mighty_grid/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mighty_grid
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- jurrick
|
@@ -127,6 +127,7 @@ files:
|
|
127
127
|
- lib/mighty_grid/filters/boolean_filter.rb
|
128
128
|
- lib/mighty_grid/filters/custom_filter.rb
|
129
129
|
- lib/mighty_grid/filters/enum_filter.rb
|
130
|
+
- lib/mighty_grid/filters/search_filter.rb
|
130
131
|
- lib/mighty_grid/filters/string_filter.rb
|
131
132
|
- lib/mighty_grid/filters/text_filter.rb
|
132
133
|
- lib/mighty_grid/grid_renderer.rb
|