it-logica-application-backbone 0.1.37 → 0.2.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.
- data/VERSION +1 -1
- data/it-logica-application-backbone.gemspec +1 -1
- data/lib/model_mixins/table_builder_class_methods.rb +77 -11
- metadata +12 -12
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.2.0
|
@@ -6,6 +6,8 @@ module ModelMixins
|
|
6
6
|
params[:order_by_direction] = settings[:default][:order_by_direction] if params[:order_by_direction].blank?
|
7
7
|
params[:per_page] = per_page
|
8
8
|
|
9
|
+
check_non_existing_colum_order_by(settings, params)
|
10
|
+
|
9
11
|
not_selected_items = object.filter(settings, params, per_page)
|
10
12
|
items = not_selected_items.selection(settings)
|
11
13
|
if params[:page].to_i > items.total_pages && items.total_pages > 0
|
@@ -21,14 +23,16 @@ module ModelMixins
|
|
21
23
|
settings[:columns].each do |col|
|
22
24
|
unless col[:global_format_method].blank?
|
23
25
|
# ToDo dodelat moznost predani parametru do formatovaci metody
|
26
|
+
col[:name] = col[:name].blank? ? "non_existing_column___" + col[:global_format_method] : col[:name]
|
24
27
|
another_global_format = {:global_format_method => col[:global_format_method],
|
25
|
-
:name => col[:name]
|
28
|
+
:name => col[:name],
|
26
29
|
:table => col[:table]}
|
27
30
|
another_global_formats << another_global_format
|
28
31
|
end
|
29
32
|
unless col[:format_method].blank?
|
33
|
+
col[:name] = col[:name].blank? ? "non_existing_column___" + col[:format_method] : col[:name]
|
30
34
|
another_format = {:format_method => col[:format_method],
|
31
|
-
:name => col[:name]
|
35
|
+
:name => col[:name],
|
32
36
|
:table => col[:table]}
|
33
37
|
another_formats << another_format
|
34
38
|
end
|
@@ -48,9 +52,9 @@ module ModelMixins
|
|
48
52
|
# todo think about, but I dont need object, because it's making the same query twice, I just need class and with one outer join it return filtered data, and i include includes to it
|
49
53
|
#template_items = object.joins("RIGHT OUTER JOIN (" + not_selected_items.select(settings[:row][:id] + " AS row_id").to_sql + ") temp_template_query ON #{settings[:row][:id]} = temp_template_query.row_id")
|
50
54
|
if object.respond_to?(:klass)
|
51
|
-
template_items = object.klass.joins("RIGHT OUTER JOIN (" +
|
55
|
+
template_items = object.klass.joins("RIGHT OUTER JOIN (" + items.uniq.to_sql + ") temp_template_query ON #{settings[:row][:id]} = temp_template_query.row_id")
|
52
56
|
else
|
53
|
-
template_items = object.joins("RIGHT OUTER JOIN (" +
|
57
|
+
template_items = object.joins("RIGHT OUTER JOIN (" + items.uniq.to_sql + ") temp_template_query ON #{settings[:row][:id]} = temp_template_query.row_id")
|
54
58
|
end
|
55
59
|
|
56
60
|
template_items = template_items.includes(settings[:includes])
|
@@ -104,7 +108,7 @@ module ModelMixins
|
|
104
108
|
|
105
109
|
settings.merge!({:data => items_array})
|
106
110
|
else
|
107
|
-
template_items = object.joins("
|
111
|
+
template_items = object.joins("LEFT OUTER JOIN (" + not_selected_items.uniq.select(settings[:row][:id] + " AS row_id").to_sql + ") temp_template_query ON #{settings[:row][:id]} = temp_template_query.row_id")
|
108
112
|
settings.merge!({:data => template_items})
|
109
113
|
end
|
110
114
|
settings.merge!({:data_paginate => items})
|
@@ -120,6 +124,20 @@ module ModelMixins
|
|
120
124
|
select_string += ", " unless select_string.blank?
|
121
125
|
select_string += "#{col[:table]}.#{col[:name]} AS #{col[:table]}_#{col[:name]}"
|
122
126
|
end
|
127
|
+
|
128
|
+
# for select more data in combination with filter_method (etc full_name of user))
|
129
|
+
if !col[:table].blank? && !col[:select].blank? && !col[:select_as].blank?
|
130
|
+
col[:select_as] = col[:table] if col[:select_as].blank?
|
131
|
+
|
132
|
+
col[:select].split(",").each do |one_select|
|
133
|
+
one_select.gsub!(" ", "")
|
134
|
+
select_string += ", " unless select_string.blank?
|
135
|
+
select_string += "#{col[:select_as]}.#{one_select} AS #{col[:select_as]}_#{one_select}"
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
139
|
+
# for (agregated data)
|
140
|
+
#if (!col[:select_agregated].blank?
|
123
141
|
end
|
124
142
|
|
125
143
|
select_string += ", " unless select_string.blank?
|
@@ -131,16 +149,36 @@ module ModelMixins
|
|
131
149
|
def filter(settings, params, per_page = 10)
|
132
150
|
order_by = params[:order_by] +' '+ params[:order_by_direction]
|
133
151
|
|
134
|
-
|
135
152
|
cond_str = ""
|
136
153
|
cond_hash = {}
|
137
154
|
if !params.blank? && params['find']
|
138
155
|
params['find'].each_pair do |i, v|
|
139
156
|
unless v.blank?
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
157
|
+
if i.match(/^.*?non_existing_column___.*$/i)
|
158
|
+
identifier = i.split("non_existing_column___").second
|
159
|
+
settings[:columns].each do |col|
|
160
|
+
if !col[:select_as].blank? && !col[:format_method].blank? && col[:format_method] == identifier
|
161
|
+
cond_str += " AND " unless cond_str.blank?
|
162
|
+
cond_str += "( "
|
163
|
+
sub_cond = ""
|
164
|
+
col[:select].split(",").each do |sub_cond_col|
|
165
|
+
sub_cond += " OR " unless sub_cond.blank?
|
166
|
+
non_existing_column_i = col[:select_as] + "." + sub_cond_col.gsub(" ", "")
|
167
|
+
cond_id = "find_#{non_existing_column_i.gsub(/\./, '_')}"
|
168
|
+
sub_cond += "#{non_existing_column_i} LIKE :#{cond_id}" #OR guest_email LIKE :find"
|
169
|
+
cond_hash.merge!({cond_id.to_sym => "%#{v}%"})
|
170
|
+
end
|
171
|
+
cond_str += sub_cond + " )"
|
172
|
+
else
|
173
|
+
""
|
174
|
+
end
|
175
|
+
end
|
176
|
+
else
|
177
|
+
cond_str += " AND " unless cond_str.blank?
|
178
|
+
cond_id = "find_#{i.gsub(/\./, '_')}"
|
179
|
+
cond_str += "#{i} LIKE :#{cond_id}" #OR guest_email LIKE :find"
|
180
|
+
cond_hash.merge!({cond_id.to_sym => "%#{v}%"})
|
181
|
+
end
|
144
182
|
end
|
145
183
|
end
|
146
184
|
end
|
@@ -179,13 +217,41 @@ module ModelMixins
|
|
179
217
|
end
|
180
218
|
end
|
181
219
|
|
220
|
+
ret = where(cond_str, cond_hash).paginate(:page => params[:page], :per_page => per_page).order(order_by)
|
182
221
|
#items = self.joins("LEFT OUTER JOIN intranet_text_pages ON resource_id = intranet_text_pages.id").where(cond_str, cond_hash).paginate(:page => params[:page], :per_page => per_page).order(order_by).selection(settings)
|
183
222
|
#if params[:page].to_i > items.total_pages && items.total_pages > 0
|
184
223
|
# params[:page] = 1
|
185
224
|
# items = self.where(cond_str, cond_hash).paginate(:page => params[:page], :per_page => per_page).order(order_by).selection(settings)
|
186
225
|
#end
|
187
226
|
#items
|
188
|
-
|
227
|
+
|
228
|
+
# if there are additional joins i will add them
|
229
|
+
settings[:columns].each do |col|
|
230
|
+
col[:table_primary_key] = "id" if col[:table_primary_key].blank?
|
231
|
+
if !col[:join_on].blank?
|
232
|
+
col[:select] += ", #{col[:table_primary_key]}" # adding primary key so it can be used in on condition
|
233
|
+
ret= ret.joins("LEFT OUTER JOIN (SELECT #{col[:select]} FROM #{col[:table]}) #{col[:select_as]} ON #{col[:select_as]}.#{col[:table_primary_key]}=#{col[:join_on]}")
|
234
|
+
end
|
235
|
+
end
|
236
|
+
|
237
|
+
ret
|
238
|
+
end
|
239
|
+
|
240
|
+
|
241
|
+
def check_non_existing_colum_order_by(settings, params)
|
242
|
+
if params[:order_by].match(/^.*?non_existing_column___.*$/i)
|
243
|
+
identifier = params[:order_by].split("non_existing_column___").second
|
244
|
+
settings[:columns].each do |col|
|
245
|
+
if !col[:select_as].blank? && !col[:format_method].blank? && col[:format_method] == identifier
|
246
|
+
params[:order_by] = col[:order_by].gsub(",", " #{params[:order_by_direction]} ,")
|
247
|
+
else
|
248
|
+
""
|
249
|
+
end
|
250
|
+
end
|
251
|
+
else
|
252
|
+
|
253
|
+
end
|
254
|
+
|
189
255
|
end
|
190
256
|
end
|
191
257
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: it-logica-application-backbone
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -13,7 +13,7 @@ date: 2012-07-10 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: shoulda
|
16
|
-
requirement: &
|
16
|
+
requirement: &85771770 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *85771770
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: rdoc
|
27
|
-
requirement: &
|
27
|
+
requirement: &85786890 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ~>
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '3.12'
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *85786890
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: bundler
|
38
|
-
requirement: &
|
38
|
+
requirement: &85785710 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ~>
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: 1.1.0
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *85785710
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: jeweler
|
49
|
-
requirement: &
|
49
|
+
requirement: &85785430 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ~>
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: 1.8.4
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *85785430
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: simplecov
|
60
|
-
requirement: &
|
60
|
+
requirement: &85784920 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ! '>='
|
@@ -65,7 +65,7 @@ dependencies:
|
|
65
65
|
version: '0'
|
66
66
|
type: :development
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *85784920
|
69
69
|
description: longer description of your gem
|
70
70
|
email: ladislav.smola@it-logica.cz
|
71
71
|
executables: []
|
@@ -547,7 +547,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
547
547
|
version: '0'
|
548
548
|
segments:
|
549
549
|
- 0
|
550
|
-
hash:
|
550
|
+
hash: -785229037
|
551
551
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
552
552
|
none: false
|
553
553
|
requirements:
|