cm-admin 1.3.5 → 1.3.6
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/lib/cm_admin/models/dsl_method.rb +1 -1
- data/lib/cm_admin/models/field.rb +1 -0
- data/lib/cm_admin/models/filter.rb +33 -37
- data/lib/cm_admin/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6181e94f36f08555c2209adfc3e17dbf1da4d551262522a3864acf5a07404e23
|
4
|
+
data.tar.gz: f1a409a00b8c1b91b70c1554243fdd52ea7c085658d52abd263cbd8a72e178ff
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6c06b41f043ac408e4c57cb71b0e939f425a39d2a1cd6e0368f2d5ed993f8c844aaa73df3d1ad67774cc4acde4956fc4f9bcee68401a6595f9f9ed00d441e40b
|
7
|
+
data.tar.gz: 71345aae21c3e87adb2ce4439c8526b2ac53d9227808168e530acec22b03388b79ae8b10ece5a33a1a096ce85299091acedb6b9cc2663478065611c8b47bc5cd
|
data/Gemfile.lock
CHANGED
@@ -142,7 +142,7 @@ module CmAdmin
|
|
142
142
|
@available_actions << bulk_action
|
143
143
|
end
|
144
144
|
|
145
|
-
def filter(db_column_name, filter_type, options
|
145
|
+
def filter(db_column_name, filter_type, options={})
|
146
146
|
@filters << CmAdmin::Models::Filter.new(db_column_name: db_column_name, filter_type: filter_type, options: options)
|
147
147
|
end
|
148
148
|
|
@@ -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
|
9
9
|
|
10
10
|
VALID_FILTER_TYPES = Set[:date, :multi_select, :range, :search, :single_select].freeze
|
11
11
|
|
@@ -14,7 +14,6 @@ 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
|
-
@scope_name = nil
|
18
17
|
set_default_values
|
19
18
|
options.each do |key, value|
|
20
19
|
send("#{key}=", value)
|
@@ -53,7 +52,7 @@ module CmAdmin
|
|
53
52
|
def filtered_data(filter_params, records, filters)
|
54
53
|
if filter_params
|
55
54
|
filter_params.each do |scope_type, scope_value|
|
56
|
-
|
55
|
+
scope_name = case scope_type
|
57
56
|
when 'date', 'range'
|
58
57
|
'date_and_range'
|
59
58
|
when 'single_select', 'multi_select'
|
@@ -61,7 +60,7 @@ module CmAdmin
|
|
61
60
|
else
|
62
61
|
scope_type
|
63
62
|
end
|
64
|
-
records = send("cm_#{
|
63
|
+
records = send("cm_#{scope_name}_filter", scope_value, records, filters) if scope_value.present?
|
65
64
|
end
|
66
65
|
end
|
67
66
|
records
|
@@ -72,44 +71,40 @@ module CmAdmin
|
|
72
71
|
|
73
72
|
table_name = records.table_name
|
74
73
|
filters.select { |x| x if x.filter_type.eql?(:search) }.each do |filter|
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
query_variables << "#{
|
83
|
-
when Hash
|
84
|
-
col.map do |key, value|
|
85
|
-
value.map { |val| query_variables << "#{key.to_s.pluralize}.#{val}" }
|
86
|
-
end
|
74
|
+
query_variables = []
|
75
|
+
filter.db_column_name.each do |col|
|
76
|
+
case col
|
77
|
+
when Symbol
|
78
|
+
query_variables << "#{table_name.pluralize}.#{col}"
|
79
|
+
when Hash
|
80
|
+
col.map do |key, value|
|
81
|
+
value.map { |val| query_variables << "#{key.to_s.pluralize}.#{val}" }
|
87
82
|
end
|
88
83
|
end
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
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
|
84
|
+
end
|
85
|
+
terms = scope_value.downcase.split(/\s+/)
|
86
|
+
terms = terms.map { |e|
|
87
|
+
(e.gsub('*', '%').prepend('%') + '%').gsub(/%+/, '%')
|
88
|
+
}
|
89
|
+
sql = ''
|
90
|
+
query_variables.each.with_index do |column, i|
|
91
|
+
sql.concat("#{column} ILIKE ?")
|
92
|
+
sql.concat(' OR ') unless query_variables.size.eql?(i + 1)
|
93
|
+
end
|
103
94
|
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
}.join(' AND '),
|
108
|
-
*terms.map { |e| [e] * query_variables.size }.flatten
|
109
|
-
)
|
110
|
-
return records
|
95
|
+
if filter.db_column_name.map { |x| x.is_a?(Hash) }.include?(true)
|
96
|
+
associations_hash = filter.db_column_name.select { |x| x if x.is_a?(Hash) }.last
|
97
|
+
records = records.left_joins(associations_hash.keys).distinct
|
111
98
|
end
|
99
|
+
|
100
|
+
records = records.where(
|
101
|
+
terms.map { |term|
|
102
|
+
sql
|
103
|
+
}.join(' AND '),
|
104
|
+
*terms.map { |e| [e] * query_variables.size }.flatten
|
105
|
+
)
|
112
106
|
end
|
107
|
+
records
|
113
108
|
end
|
114
109
|
|
115
110
|
def cm_date_and_range_filter(scope_value, records, filters)
|
@@ -128,6 +123,7 @@ module CmAdmin
|
|
128
123
|
|
129
124
|
def cm_dropdown_filter(scope_value, records, filters)
|
130
125
|
return nil if scope_value.nil?
|
126
|
+
|
131
127
|
scope_value.each do |key, value|
|
132
128
|
records = records.where(key => value) if value.present?
|
133
129
|
end
|
data/lib/cm_admin/version.rb
CHANGED