spiderfw 0.6.32 → 0.6.33

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- data.tar.gz: ed9ddb5b4c1865b4c31b437e6bb1460d3f5f5392
4
- metadata.gz: bde80c29ac3242b2ece307d7d44c5ff87bc68c94
5
2
  SHA512:
6
- data.tar.gz: 1b78d54308ecddb3ed944e14b8b3e894b31ef34d7138b8e0027df687ee9b284d036030258c6190527d75096cd1097e11cd05b5e6e9d4e94e10672cac6f992131
7
- metadata.gz: dcc373c6206c502c4b402bf7c376fcd26d4c99b38d1ec10d4ee0a9afa803ef983f476115c476e7e1f8f4e54b2b1d9d02dddc9497e3748ad7ffec0d1bc0c9b6a4
3
+ metadata.gz: 4873d682965b148d70ade3af10f990ce93457765fda2938ee24581e26aed8610763b6bc9c6e07f5d945c53fdaf4fa60283d8d0ec98bd4e69f6532531f45eee38
4
+ data.tar.gz: 5fdaa46959c9faceae5a35c09dc82bbfb5f1c2de98225b040a4d22193280f7a58645f3f50de5a1443d760b256408f3d8e1c5a4a1f63c53decfffa5c17f2c3ab9
5
+ SHA1:
6
+ metadata.gz: 29e74e4cba2547d4454dafb8a774f87038a09c15
7
+ data.tar.gz: 04caf2f5945b4807d75f4c6843a25a05a2e50dea
data/CHANGELOG CHANGED
@@ -1,3 +1,15 @@
1
+ == 0.6.33
2
+ * Modifiche per problemi con accenti e chiamate json
3
+ * Encode aggiunto su funzione inspect
4
+ * Corretto problemi in search_table che mantiene il parametro per la ricerca
5
+ * Fatta conversione per invio delle mail con dati nella scene accentati
6
+ * Usato force_encoding per invio della mail su tutti i campi della scene
7
+ * Settato a true il single sign out del Cas
8
+ * Fatto metodo ricorsivo per convertire un oggetto ruby in utf8 e cambiato il messenger helper
9
+ * Aggiunto a livello di classe Object un metodo per convertire ricorsivamente in utf8 le stringhe nell'oggetto passato
10
+ * Implementato metodo logout_cas in cas_login_mixin
11
+ * Modifiche per CAS, cambiato lambda con Proc.new
12
+
1
13
  == 0.6.32
2
14
  * Correzioni per gestione transazioni e metodi per lista per mod cms
3
15
  * Aggiunto il force_encoding sui campi della mail per problemi con accenti
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.6.32
1
+ 0.6.33
@@ -6,6 +6,7 @@ module Spider
6
6
  config_option 'cas.proxy_granting_ticket_expiry', :type => Fixnum, :default => 48*60*60
7
7
  config_option 'cas.ticket_granting_ticket_expiry', :type => Fixnum, :default => 48*60*60
8
8
  config_option 'cas.saml1_1_compatible', :type => Spider::DataTypes::Bool, :default => false
9
+ config_option 'cas.enable_single_sign_out', :type => Spider::DataTypes::Bool, :default => true
9
10
  config_option 'cas.saml_compliant_tickets', :type => String, :choices => [false, '1', '2', '4'], :default => lambda{
10
11
  Spider.conf.get('cas.saml1_1_compatible') ? '1' : false
11
12
  }
@@ -185,19 +185,6 @@ module Spider; module CASServer
185
185
  $LOG.debug("Deleting #{tgt.class.name} '#{tgt}' for user '#{tgt.username}'")
186
186
  tgt.delete
187
187
 
188
- if Spider.conf.get('cas.enable_single_sign_out')
189
- $LOG.debug("Deleting Service/Proxy Tickets for '#{tgt}' for user '#{tgt.username}'")
190
- tgt.service_tickets.each do |st|
191
- send_logout_notification_for_service_ticket(st)
192
- # TODO: Maybe we should do some special handling if send_logout_notification_for_service_ticket fails?
193
- # (the above method returns false if the POST results in a non-200 HTTP response).
194
- $LOG.debug "Deleting #{st.class.name} #{st.ticket.inspect}."
195
- st.delete
196
- end
197
- end
198
-
199
- $LOG.debug("Deleting #{tgt.class.name} '#{tgt}' for user '#{tgt.username}'")
200
- tgt.delete
201
188
  end
202
189
 
203
190
  $LOG.info("User '#{tgt.username}' logged out.")
@@ -214,6 +201,54 @@ module Spider; module CASServer
214
201
  end
215
202
  end
216
203
 
204
+ #metodo chiamato dal logout del portale
205
+ def logout_cas(username)
206
+ tgt_qs = TicketGrantingTicket.where(:username => username)
207
+ if tgt_qs
208
+ tgt_qs.each{ |tgt|
209
+ #inizio la transazione
210
+ TicketGrantingTicket.storage.start_transaction
211
+ begin
212
+ # cancello i ServiceTicket
213
+ service_tickets = tgt.service_tickets
214
+ unless service_tickets.blank?
215
+ service_tickets.each { |st|
216
+ send_logout_notification_for_service_ticket(st)
217
+ $LOG.debug "Deleting #{st.class.name} #{st.ticket.inspect}."
218
+ st.delete
219
+ }
220
+ end
221
+ $LOG.info("User '#{tgt.username}' logged out.")
222
+ TicketGrantingTicket.storage.commit
223
+ rescue Exception => exc
224
+ TicketGrantingTicket.storage.rollback
225
+ Spider.logger.error "** Errore logout cas"
226
+
227
+ end
228
+
229
+ }
230
+ #cancello i TicketGrantingTicket
231
+ TicketGrantingTicket.storage.start_transaction
232
+ begin
233
+ tgt_qs.each{ |tgt|
234
+ tgt.delete
235
+ }
236
+ TicketGrantingTicket.storage.commit
237
+ rescue Exception => exc
238
+ TicketGrantingTicket.storage.rollback
239
+ Spider.logger.error "** Errore logout cas"
240
+ end
241
+ @request.cookies['tgt'] = nil
242
+
243
+ else
244
+ $LOG.warn("User tried to log out without a valid ticket-granting ticket")
245
+ end
246
+ end
247
+
248
+
249
+
250
+
251
+
217
252
  def validate
218
253
  @service = clean_service_url(@request.params['service'])
219
254
  @ticket = @request.params['ticket']
@@ -183,9 +183,14 @@
183
183
  * Select the first item of the new select
184
184
  */
185
185
  selectFirstItem: function() {
186
- setTimeout(function(){
187
- $('option:eq(0)', this.$select).attr('selected', 'selected');
188
- }, 1000);
186
+ $('option:eq(0)', this.$select).attr('selected', 'selected');
187
+ /* tolto la modifica del commit e3a8027037d4d02601d910f40794f103968088c2
188
+ per mettere selected su select dei permessi, rendeva lo stato bianco in modifica utente da admin */
189
+ /*
190
+ setTimeout(function(){
191
+ $('option:eq(0)', this.$select).attr('selected', 'selected');
192
+ }, 1000);
193
+ */
189
194
  },
190
195
 
191
196
  /**
@@ -525,7 +525,10 @@ Spider.Controller = Class.extend({
525
525
  params = null;
526
526
  }
527
527
  if (!callback) callback = function(){};
528
- var url = this.url+'/'+method+'.json';
528
+ var url = this.url+'/'+method;
529
+ if( options == null || options['dataType'] == null || options['dataType'] == 'json'){
530
+ url = url+'.json';
531
+ }
529
532
  var defaults = {
530
533
  url: url,
531
534
  type: 'POST',
@@ -16,6 +16,10 @@ module Spider; module Components
16
16
  end
17
17
  return qs
18
18
  end
19
+
20
+ def run
21
+ super
22
+ end
19
23
 
20
24
  end
21
25
 
@@ -32,20 +32,20 @@
32
32
  <div sp:if="!@pages.blank? && @pages > 1" class="pagination">
33
33
  <ul>
34
34
  <li sp:if="@page > 1">
35
- <a class="prev" href="{ @request[:path] }?_w{ @widget[:param] }[page]={ @page-1 }">&larr; _(Previous)</a>
35
+ <a class="prev" href="{ @request[:path] }?_w{ @widget[:param] }[page]={ @page-1 }{ ( @query.blank? ? nil : '&_w'+@widget[:param]+'[q]='+@query ) }">&larr; _(Previous)</a>
36
36
  </li>
37
37
  <li sp:if="@page == 1" class="disabled">
38
38
  <a class="prev disabled">&larr; _(Previous)</a>
39
39
  </li>
40
40
  <sp:pass sp:if="@paginate_first > 1">
41
41
  <li>
42
- <a href="{ @request[:path] }?_w{ @widget[:param] }[page]=1" class="page">1</a>
42
+ <a href="{ @request[:path] }?_w{ @widget[:param] }[page]=1{ ( @query.blank? ? nil : '&_w'+@widget[:param]+'[q]='+@query ) }" class="page">1</a>
43
43
  </li>
44
44
  <li class="disabled"><a>...</a></li>
45
45
  </sp:pass>
46
46
  <sp:pass sp:each="(@paginate_first..@paginate_last) |i|" >
47
47
  <li sp:if="i != @page">
48
- <a href="{ @request[:path] }?_w{ @widget[:param] }[page]={ i }" class="page">
48
+ <a href="{ @request[:path] }?_w{ @widget[:param] }[page]={ i }{ ( @query.blank? ? nil : '&_w'+@widget[:param]+'[q]='+@query ) }" class="page">
49
49
  { i }
50
50
  </a>
51
51
  </li>
@@ -58,11 +58,11 @@
58
58
  <a>...</a>
59
59
  </li>
60
60
  <li>
61
- <a href="{ @request[:path] }?_w{ @widget[:param] }[page]={ @pages }" class="page">{ @pages }</a>
61
+ <a href="{ @request[:path] }?_w{ @widget[:param] }[page]={ @pages }{ ( @query.blank? ? nil : '&_w'+@widget[:param]+'[q]='+@query ) }" class="page">{ @pages }</a>
62
62
  </li>
63
63
  </sp:pass>
64
64
  <li sp:if="@has_more">
65
- <a href="{ @request[:path] }?_w{ @widget[:param] }[page]={ @page+1 }">_(Next) &rarr;</a>
65
+ <a href="{ @request[:path] }?_w{ @widget[:param] }[page]={ @page+1 }{ ( @query.blank? ? nil : '&_w'+@widget[:param]+'[q]='+@query ) }">_(Next) &rarr;</a>
66
66
  </li>
67
67
  <li sp:if="!@has_more" class="disabled">
68
68
  <a class="next disabled">_(Next) &rarr;</a>
@@ -7,7 +7,7 @@ module Spider; module Forms
7
7
 
8
8
  class FileInput < Input
9
9
  tag 'file'
10
- is_attr_accessor :save_path, :type => String, :default => lambda{ Spider.paths[:var]+'/data/uploaded_files' }
10
+ is_attr_accessor :save_path, :type => String, :default => Proc.new{ Spider.paths[:var]+'/data/uploaded_files' }
11
11
 
12
12
  def needs_multipart?
13
13
  true
@@ -33,25 +33,33 @@ module Spider; module Messenger
33
33
  msg
34
34
  end
35
35
 
36
+
37
+
38
+
36
39
  def self.send_email(klass, template, scene, from, to, headers={}, attachments=[], params={})
37
40
  path_txt = klass.find_resource_path(:email, template+'.txt')
38
41
  path_txt = nil unless path_txt && File.exist?(path_txt)
39
42
  path_html = klass.find_resource_path(:email, template+'.html')
40
43
  path_html = nil unless path_html && File.exist?(path_html)
44
+
45
+ #converte l'intera scene con ricorsione in utf-8 per evitare problemi in invio mail
46
+ scene.convert_object
47
+
41
48
  scene_binding = scene.instance_eval{ binding }
42
49
  if (path_txt || path_html)
43
- text = ERB.new(IO.read(path_txt)).result(scene_binding) if path_txt
44
- html = ERB.new(IO.read(path_html)).result(scene_binding) if path_html
50
+ text = ERB.new( IO.read(path_txt) ).result(scene_binding) if path_txt
51
+ html = ERB.new( IO.read(path_html) ).result(scene_binding) if path_html
45
52
  else
46
53
  path = klass.find_resource_path(:email, template)
47
- text = ERB.new(IO.read(path)).result(scene_binding)
54
+ text = ERB.new( IO.read(path) ).result(scene_binding)
48
55
  end
56
+
49
57
  mail = Mail.new
50
- mail[:to] = (to.respond_to?(:force_encoding) ? to.force_encoding('UTF-8') : to)
51
- mail[:from] = (from.respond_to?(:force_encoding) ? from.force_encoding('UTF-8') : from)
58
+ mail[:to] = to.convert_object
59
+ mail[:from] = from.convert_object
52
60
  mail.charset = "UTF-8"
53
61
  headers.each do |key, value|
54
- mail[key] = (value.respond_to?(:force_encoding) ? value.force_encoding('UTF-8') : value)
62
+ mail[key] = value.convert_object
55
63
  end
56
64
 
57
65
  if html
@@ -32,8 +32,13 @@ module Spider; module HTTP
32
32
  def write(msg)
33
33
  send_headers unless @headers_sent
34
34
  #workaround per ruby 1.9.3, problemi su parte di admin, faccio force encoding a utf8
35
- msg_dup = msg.to_s.dup
36
- @w.write(msg_dup.respond_to?(:force_encoding) ? msg_dup.force_encoding('UTF-8') : msg_dup)
35
+ unless msg.to_s.blank?
36
+ msg_dup = msg.to_s.dup
37
+ @w.write(msg_dup.respond_to?(:force_encoding) ? msg_dup.force_encoding('UTF-8') : msg_dup)
38
+ else
39
+ @w.write(msg)
40
+ end
41
+
37
42
  end
38
43
 
39
44
  def send_headers
@@ -104,8 +109,8 @@ module Spider; module HTTP
104
109
 
105
110
  controller = nil
106
111
  controller_done = false
107
-
108
- run_block = lambda do
112
+
113
+ run_block = Proc.new do
109
114
  begin
110
115
  controller = ::Spider::HTTPController.new(controller_request, controller_response)
111
116
  controller.extend(Spider::FirstResponder)
@@ -127,8 +127,8 @@ module Spider; module HTTP
127
127
 
128
128
 
129
129
  controller_done = false
130
-
131
- run_block = lambda do
130
+
131
+ run_block = Proc.new do
132
132
  begin
133
133
  controller = ::Spider::HTTPController.new(controller_request, controller_response)
134
134
  controller.extend(Spider::FirstResponder)
@@ -114,14 +114,16 @@ module Spider; module HTTP
114
114
  ssl_server = ssl_rack.server if ssl_rack
115
115
  end
116
116
  end
117
- do_shutdown = lambda{
117
+ do_shutdown = Proc.new{
118
118
  Debugger.post_mortem = false if defined?(Debugger)
119
119
  server.shutdown if server
120
120
  ssl_server.shutdown if ssl_server
121
+
121
122
  pid_file = File.join(Spider.paths[:var], 'run/server.pid')
122
123
  begin
123
124
  File.unlink(pid_file)
124
125
  rescue Errno::ENOENT
126
+ Spider.logger.info "Unlink del pid file non riuscito"
125
127
  end
126
128
  }
127
129
  Spider.on_shutdown(&do_shutdown)
@@ -205,7 +207,7 @@ module Spider; module HTTP
205
207
 
206
208
  unless @already_forked
207
209
  Spider.main_process_startup
208
- exit_spawner = lambda{
210
+ exit_spawner = Proc.new{
209
211
  Spider.logger.debug "Spawner exiting"
210
212
  Process.kill 'KILL', @monitor_thread[:spawner_child_pid]
211
213
  }
@@ -1,3 +1,4 @@
1
+ # -*- encoding : utf-8 -*-
1
2
  require 'spiderfw/model/mixins/state_machine'
2
3
  require 'spiderfw/model/element'
3
4
  require 'spiderfw/model/integrated_element'
@@ -2382,9 +2383,24 @@ module Spider; module Model
2382
2383
  # A compact representation of the object.
2383
2384
  # Note: inspect will not autoload the object.
2384
2385
  def inspect
2386
+ ic = Iconv.new('UTF-8//IGNORE', 'UTF-8') if RUBY_VERSION =~ /1.8/
2387
+ enc = Spider.conf.get('storages')['default']['encoding']
2388
+ enc ||= 'UTF-8'
2389
+
2385
2390
  self.class.name+': {' +
2386
2391
  self.class.elements_array.select{ |el| (element_loaded?(el) || element_has_value?(el)) && !el.hidden? } \
2387
- .map{ |el| ":#{el.name} => #{get(el.name).to_s}"}.join(',') + '}'
2392
+ .map{ |el|
2393
+ val = get(el.name).to_s
2394
+ if RUBY_VERSION =~ /1.8/
2395
+ val = ic.iconv(val + ' ')[0..-2]
2396
+ else
2397
+ begin
2398
+ val = ((val+' ').encode('UTF-8', enc, :invalid => :replace, :undef => :replace))[0..-2] if val
2399
+ rescue EncodingError
2400
+ val = ''
2401
+ end
2402
+ end
2403
+ ":#{el.name} => #{val}"}.join(',') + '}'
2388
2404
  end
2389
2405
 
2390
2406
  # Returns a JSON representation of the object.
@@ -2427,11 +2443,18 @@ module Spider; module Model
2427
2443
  val ? "#{name.to_json}: #{val.to_json}" : nil
2428
2444
  else
2429
2445
  val = get(name)
2446
+ enc = Spider.conf.get('storages')['default']['encoding']
2447
+ enc ||= 'UTF-8'
2448
+
2430
2449
  if (el.type == String || el.type == Text)
2431
2450
  if RUBY_VERSION =~ /1.8/
2432
2451
  val = ic.iconv(val + ' ')[0..-2]
2433
2452
  else
2434
- val = (val + ' ').encode('UTF-8')[0..-2]
2453
+ begin
2454
+ val = ((val+' ').encode('UTF-8', enc, :invalid => :replace, :undef => :replace))[0..-2] if val
2455
+ rescue EncodingError
2456
+ val = ''
2457
+ end
2435
2458
  end
2436
2459
  end
2437
2460
  val = val.to_json
@@ -21,8 +21,22 @@ module Spider; module Model; module Storage; module Db
21
21
  super << Spider::DataTypes::Binary
22
22
  end
23
23
 
24
+ def self.parse_url(url)
25
+ # db:oracle://<username:password>:connect_role@<database>
26
+ # where database is
27
+ # the net8 connect descriptor (TNS) or
28
+ # for Oracle client 10g or later, hostname_or_ip:port_no/oracle_sid
29
+ if (url =~ /.+:\/\/(?:(.+):(.+)(?::(.+))?@)?(.+)/)
30
+ @user = $1
31
+ @pass = $2
32
+ @role = $3
33
+ @dbname = $4
34
+ else
35
+ raise ArgumentError, "Oracle url '#{url}' is invalid"
36
+ end
37
+ @connection_params = [@user, @pass, @dbname, @role]
38
+ end
24
39
 
25
-
26
40
  def parse_url(url)
27
41
  # db:oracle://<username:password>:connect_role@<database>
28
42
  # where database is
@@ -39,8 +53,6 @@ module Spider; module Model; module Storage; module Db
39
53
  @connection_params = [@user, @pass, @dbname, @role]
40
54
  end
41
55
 
42
-
43
-
44
56
  def value_for_condition(type, value)
45
57
  return value if value.nil?
46
58
  super
@@ -16,7 +16,7 @@ module Spider
16
16
  end
17
17
 
18
18
  def ask_error
19
- res = ask?(_("Do you want to change your settings?"), :default => true)
19
+ res = (ask? _("Do you want to change your settings?"), :default => true)
20
20
  !res
21
21
  end
22
22
 
@@ -69,7 +69,7 @@ module Spider
69
69
 
70
70
  print prompt
71
71
 
72
- res = $stdin.gets.strip.downcase
72
+ res = $stdin.gets.strip
73
73
 
74
74
  good = true
75
75
  if options[:type] == Spider::Bool
@@ -181,13 +181,14 @@ module Spider
181
181
 
182
182
  end
183
183
 
184
+
184
185
  class SpiderSetupWizard < Wizard
185
186
  attr_accessor :first_run
186
187
 
187
188
  def run
188
189
 
189
190
  if ask? _("Do you want to configure a database?"), :default => (@first_run ? true : nil)
190
- ask _("Which database do you want to configure?"), :db_label, :default => 'default'
191
+ ask _("Which database do you want to configure?"), :db_label, :choices => ['default', 'civiliaopen', 'tracciatointermedio'], :default => 'default'
191
192
  conf = Spider.conf.get("storages.#{@db_label}")
192
193
  url_db_type = nil
193
194
  if conf && conf["url"]
@@ -372,6 +373,108 @@ module Spider
372
373
  end
373
374
 
374
375
  class OracleSetupWizard < Wizard
376
+ def run
377
+
378
+ require 'rubygems'
379
+ require 'rubygems/command.rb'
380
+ require 'rubygems/dependency_installer.rb'
381
+ unless Spider.gem_available?('ruby-oci8')
382
+ if ask? _("Oracle gem is not available. Install?")
383
+ ok = false
384
+ while !ok
385
+ inst = Gem::DependencyInstaller.new
386
+ begin
387
+ inst.install 'ruby-oci8'
388
+ rescue
389
+ error _("Installation of oracle gem failed.")
390
+ puts _(
391
+ "The oracle gem failed to compile, so the pure-ruby version was installed.
392
+ You should install the compiled version manually for better performance.")
393
+ end
394
+ end
395
+ else
396
+ error _("Can't configure oracle without the ruby-oci8 gem.")
397
+ return
398
+ end
399
+ end
400
+ require 'oci8'
401
+
402
+ ok = false
403
+ while !ok
404
+ if (ask _("Do you want to connect via tns or direct connection?"),
405
+ :choices => ['tns', 'direct']) == 'tns'
406
+ ask! _("Tns:"), :tns, :default => 'ORCL'
407
+ ask _("Username"), :user
408
+ ask _("Password"), :pass
409
+ begin
410
+ m = ::OCI8.new(@user, @pass, @tns)
411
+ m.ping
412
+ m.logoff
413
+ connect_ok = true
414
+ ok = true
415
+ notify_partial("Ok.", true)
416
+ rescue => myerr
417
+ if myerr.exception.code == 1017
418
+ notify_partial("Connection failed.", true)
419
+ error _("Username or Password invalid.")
420
+ elsif myerr.exception.code == 12154
421
+ notify_partial("Connection failed.", true)
422
+ error _("Tns seems not responding.")
423
+ else
424
+ notify_partial("", true)
425
+ error _("Connection failed.")
426
+ end
427
+ ok = ask_error
428
+ end
429
+ else
430
+ ask _("Host:"), :host, :default => 'localhost'
431
+ ask _("Port:"), :port, :default => 1521
432
+ ask _("Tns:"), :tns, :default => 'ORCL'
433
+ ask _("Username"), :user
434
+ ask _("Password"), :pass
435
+ @db_name = "//#{@host}:#{@port}/#{@tns}"
436
+ begin
437
+ m = ::OCI8.new(@user, @pass, @db_name)
438
+ ok = true
439
+ m.logoff
440
+ rescue => myerr
441
+ if myerr.exception.code == 1017
442
+ notify_partial("Connection failed.", true)
443
+ error _("Username or Password invalid.")
444
+ elsif myerr.exception.code == 12154
445
+ notify_partial("Connection failed.", true)
446
+ error _("Server seems not responding.")
447
+ else
448
+ notify_partial("", true)
449
+ error _("Connection failed.")
450
+ end
451
+ ok = ask_error
452
+ end
453
+ end
454
+ end
455
+ end
456
+
457
+ def self.parse_db_name(db_name)
458
+ if (db_name =~ /(?:(.+):(.+))\/(?:(.+))/)
459
+ @host =$1
460
+ @port = $2
461
+ @tns = $3
462
+ else
463
+ @tns = db_name
464
+ end
465
+ end
466
+
467
+ def get_url
468
+ return "db:oracle://#{@user}:#{@pass}@#{@host}:#{@port}/#{@tns}" if @user && @pass && @host && @port && @tns
469
+ return "db:oracle://#{@user}:#{@pass}@#{@tns}" if @user && @pass && @tns
470
+ return nil
471
+ end
472
+
473
+ def parse_url(url)
474
+ @user, @pass, @db_name, @role = Spider::Model::Storage::Db::Oracle.parse_url(url)
475
+ self.class.parse_db_name(@db_name)
476
+ end
477
+
375
478
  end
376
479
 
377
480
  end
@@ -29,5 +29,37 @@ class Object
29
29
  def blank?
30
30
  respond_to?(:empty?) ? empty? : !self
31
31
  end
32
+
33
+ #metodo ricorsivo per convertire in utf-8 tutto un oggetto con array o hash all'interno
34
+ def convert_object(encoding='UTF-8')
35
+ if self.respond_to?(:each_pair)
36
+ self.each_pair{ |chiave, valore|
37
+ valore.convert_object
38
+ }
39
+ elsif self.respond_to?(:each) && !self.is_a?(String)
40
+ #controllo se sto ciclando su un modello
41
+ if self.class < Spider::Model::BaseModel
42
+ #ritorna le chiavi degli elementi
43
+
44
+ self.class.elements.each_pair{ |chiave_hash_modello, valore_hash_modello|
45
+ self[chiave_hash_modello].convert_object unless self[chiave_hash_modello].respond_to?(:model)
46
+ }
47
+ else
48
+ #converto i singoli valori
49
+ self.each{ |valore_array|
50
+ valore_array.convert_object
51
+ }
52
+ end
53
+ elsif self.is_a?(String)
54
+ if RUBY_VERSION =~ /1.8/
55
+ require 'iconv'
56
+ self.replace(Iconv.iconv(encoding, encoding, self).first)
57
+ elsif RUBY_VERSION =~ /1.9/
58
+ self.replace(self.force_encoding(encoding))
59
+ end
60
+ end
61
+ end
62
+
63
+
32
64
 
33
65
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spiderfw
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.32
4
+ version: 0.6.33
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ivan Pirlik
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2014-09-19 00:00:00 Z
12
+ date: 2014-11-19 00:00:00 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: cmdparse