cm-admin 1.3.6 → 1.3.8
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/Gemfile.lock +1 -1
- data/app/views/cm_admin/main/_top_navbar.html.slim +1 -1
- data/lib/cm_admin/models/filter.rb +56 -38
- data/lib/cm_admin/version.rb +1 -1
- data/lib/cm_admin/view_helpers/filter_helper.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: daef9070df3c1b70c91fb2c0457c5564eb6de2c182156e6d73f5366a090f0787
|
4
|
+
data.tar.gz: 803d75ad103de15770a1f9d7d97db77948ca0bc34260e139378a0484f502282b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: dfce493cbe0f87ed3290ab08799b3d286445fd260fe0faaa4e65383d09a3627e1d4df4627570847e3a6a03236ed3b7511fb1f47dee75b16c7c4a446ead34cfcd
|
7
|
+
data.tar.gz: 6d991b7f5ce9596ec6cdbfb91b49f62b66d638201fe8ba3a931d89e99495ec514fa251e67411aa9315ebc372d0bb0233590fc7522ca363846a3ccb1cf6b14e26
|
data/Gemfile.lock
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
.entity-header
|
2
2
|
.entity-header__info
|
3
|
-
- if cm_admin.method_defined?(:"#{@model.name.underscore}_index_path") && (@model.current_action.name == 'show' || @model.current_action.layout_type.present?)
|
3
|
+
- if cm_admin.method_defined?(:"#{@model.name.underscore}_index_path") && (@model.current_action.name == 'show'|| @model.current_action.name == 'history' || @model.current_action.layout_type.present?)
|
4
4
|
.breadcrumb
|
5
5
|
= link_to "#{@model.name.titleize.pluralize} /", cm_admin.send(:"#{@model.name.underscore}_index_path"), class: 'text-reset'
|
6
6
|
h4 = action_title
|
@@ -5,7 +5,7 @@ module CmAdmin
|
|
5
5
|
class Filter
|
6
6
|
include Utils::Helpers
|
7
7
|
|
8
|
-
attr_accessor :db_column_name, :filter_type, :placeholder, :collection
|
8
|
+
attr_accessor :db_column_name, :filter_type, :placeholder, :collection, :filter_with
|
9
9
|
|
10
10
|
VALID_FILTER_TYPES = Set[:date, :multi_select, :range, :search, :single_select].freeze
|
11
11
|
|
@@ -14,6 +14,7 @@ module CmAdmin
|
|
14
14
|
raise ArgumentError, "Kindly select a valid filter type like #{VALID_FILTER_TYPES.sort.to_sentence(last_word_connector: ', or ')} instead of #{filter_type} for column #{db_column_name}" unless VALID_FILTER_TYPES.include?(filter_type.to_sym)
|
15
15
|
|
16
16
|
@db_column_name, @filter_type = structure_data(db_column_name, filter_type)
|
17
|
+
@filter_with = nil
|
17
18
|
set_default_values
|
18
19
|
options.each do |key, value|
|
19
20
|
send("#{key}=", value)
|
@@ -52,7 +53,7 @@ module CmAdmin
|
|
52
53
|
def filtered_data(filter_params, records, filters)
|
53
54
|
if filter_params
|
54
55
|
filter_params.each do |scope_type, scope_value|
|
55
|
-
|
56
|
+
filter_method = case scope_type
|
56
57
|
when 'date', 'range'
|
57
58
|
'date_and_range'
|
58
59
|
when 'single_select', 'multi_select'
|
@@ -60,7 +61,7 @@ module CmAdmin
|
|
60
61
|
else
|
61
62
|
scope_type
|
62
63
|
end
|
63
|
-
records = send("cm_#{
|
64
|
+
records = send("cm_#{filter_method}_filter", scope_value, records, filters) if scope_value.present?
|
64
65
|
end
|
65
66
|
end
|
66
67
|
records
|
@@ -71,52 +72,63 @@ module CmAdmin
|
|
71
72
|
|
72
73
|
table_name = records.table_name
|
73
74
|
filters.select { |x| x if x.filter_type.eql?(:search) }.each do |filter|
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
75
|
+
if filter.filter_with.present?
|
76
|
+
return records.send(filter.filter_with, scope_value)
|
77
|
+
else
|
78
|
+
query_variables = []
|
79
|
+
filter.db_column_name.each do |col|
|
80
|
+
case col
|
81
|
+
when Symbol
|
82
|
+
query_variables << "#{table_name.pluralize}.#{col}"
|
83
|
+
when Hash
|
84
|
+
col.map do |key, value|
|
85
|
+
value.map { |val| query_variables << "#{key.to_s.pluralize}.#{val}" }
|
86
|
+
end
|
82
87
|
end
|
83
88
|
end
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
end
|
89
|
+
terms = scope_value.downcase.split(/\s+/)
|
90
|
+
terms = terms.map { |e|
|
91
|
+
(e.gsub('*', '%').prepend('%') + '%').gsub(/%+/, '%')
|
92
|
+
}
|
93
|
+
sql = ''
|
94
|
+
query_variables.each.with_index do |column, i|
|
95
|
+
sql.concat("#{column} ILIKE ?")
|
96
|
+
sql.concat(' OR ') unless query_variables.size.eql?(i + 1)
|
97
|
+
end
|
94
98
|
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
+
if filter.db_column_name.map { |x| x.is_a?(Hash) }.include?(true)
|
100
|
+
associations_hash = filter.db_column_name.select { |x| x if x.is_a?(Hash) }.last
|
101
|
+
records = records.left_joins(associations_hash.keys).distinct
|
102
|
+
end
|
99
103
|
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
104
|
+
records = records.where(
|
105
|
+
terms.map { |term|
|
106
|
+
sql
|
107
|
+
}.join(' AND '),
|
108
|
+
*terms.map { |e| [e] * query_variables.size }.flatten
|
109
|
+
)
|
110
|
+
return records
|
111
|
+
end
|
106
112
|
end
|
107
|
-
records
|
108
113
|
end
|
109
114
|
|
110
115
|
def cm_date_and_range_filter(scope_value, records, filters)
|
111
116
|
return nil if scope_value.nil?
|
112
117
|
|
113
118
|
scope_value.each do |key, value|
|
114
|
-
|
119
|
+
filters.select { |x| x if [:date, :range].include?(x.filter_type) && x.db_column_name.to_s == key.to_s }.each do |filter|
|
120
|
+
|
121
|
+
next unless value.present?
|
115
122
|
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
123
|
+
value = value.split(' to ')
|
124
|
+
from = value[0].presence
|
125
|
+
to = value[1].presence
|
126
|
+
if filter.filter_with.present?
|
127
|
+
records = records.send(filter.filter_with, from, to)
|
128
|
+
else
|
129
|
+
records = records.where(key => from..to)
|
130
|
+
end
|
131
|
+
end
|
120
132
|
end
|
121
133
|
records
|
122
134
|
end
|
@@ -125,7 +137,13 @@ module CmAdmin
|
|
125
137
|
return nil if scope_value.nil?
|
126
138
|
|
127
139
|
scope_value.each do |key, value|
|
128
|
-
|
140
|
+
filters.select { |x| x if [:single_select, :multi_select].include?(x.filter_type) && x.db_column_name.to_s == key.to_s }.each do |filter|
|
141
|
+
if filter.filter_with.present?
|
142
|
+
records = records.send(filter.filter_with, value) if value.present?
|
143
|
+
else
|
144
|
+
records = records.where(key => value) if value.present?
|
145
|
+
end
|
146
|
+
end
|
129
147
|
end
|
130
148
|
records
|
131
149
|
end
|
data/lib/cm_admin/version.rb
CHANGED
@@ -33,7 +33,7 @@ module CmAdmin
|
|
33
33
|
concat(content_tag(:div, class: 'list-area') do
|
34
34
|
filters.each do |filter|
|
35
35
|
concat(content_tag(:div, class: 'pointer list-item', data: {behaviour: 'filter-option', filter_type: "#{filter.filter_type}", db_column: "#{filter.db_column_name}"}) do
|
36
|
-
tag.span filter.
|
36
|
+
tag.span filter.placeholder.to_s.titleize
|
37
37
|
end)
|
38
38
|
end
|
39
39
|
end)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cm-admin
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.3.
|
4
|
+
version: 1.3.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- sajinmp
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: exe
|
12
12
|
cert_chain: []
|
13
|
-
date: 2023-11-
|
13
|
+
date: 2023-11-17 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rails
|