it-logica-application-backbone 0.1.37 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
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: