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 CHANGED
@@ -1 +1 @@
1
- 0.1.37
1
+ 0.2.0
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "it-logica-application-backbone"
8
- s.version = "0.1.37"
8
+ s.version = "0.2.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Ladas"]
@@ -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].blank? ? col[:global_format_method] : 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].blank? ? col[:format_method] : 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 (" + 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")
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 (" + 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")
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("RIGHT 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")
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
- cond_str += " AND " unless cond_str.blank?
141
- cond_id = "find_#{i.gsub(/\./, '_')}"
142
- cond_str += "#{i} LIKE :#{cond_id}" #OR guest_email LIKE :find"
143
- cond_hash.merge!({cond_id.to_sym => "%#{v}%"})
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
- where(cond_str, cond_hash).paginate(:page => params[:page], :per_page => per_page).order(order_by)
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.1.37
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: &72526130 !ruby/object:Gem::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: *72526130
24
+ version_requirements: *85771770
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: rdoc
27
- requirement: &72584820 !ruby/object:Gem::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: *72584820
35
+ version_requirements: *85786890
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: bundler
38
- requirement: &72583780 !ruby/object:Gem::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: *72583780
46
+ version_requirements: *85785710
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: jeweler
49
- requirement: &72583500 !ruby/object:Gem::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: *72583500
57
+ version_requirements: *85785430
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: simplecov
60
- requirement: &72582970 !ruby/object:Gem::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: *72582970
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: 945085391
550
+ hash: -785229037
551
551
  required_rubygems_version: !ruby/object:Gem::Requirement
552
552
  none: false
553
553
  requirements: