spiderfw 0.6.26 → 0.6.27

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.
Files changed (44) hide show
  1. data/CHANGELOG +4 -0
  2. data/VERSION +1 -1
  3. data/apps/core/forms/_init.rb +1 -0
  4. data/apps/core/forms/public/date_time.js +0 -1
  5. data/apps/core/forms/public/html_area.js +1 -1
  6. data/apps/core/forms/public/text_area.js +2 -2
  7. data/apps/core/forms/widgets/form/form.rb +40 -38
  8. data/apps/core/forms/widgets/inputs/checkbox_list/checkbox_list.rb +71 -0
  9. data/apps/core/forms/widgets/inputs/checkbox_list/checkbox_list.shtml +5 -0
  10. data/apps/core/forms/widgets/inputs/date_time/date_time.rb +1 -1
  11. data/apps/core/forms/widgets/inputs/search_select/search_select.shtml +2 -2
  12. data/apps/messenger/backends/sms/mobyt.rb +72 -0
  13. data/apps/messenger/config/options.rb +6 -1
  14. data/apps/messenger/controllers/mixins/messenger_helper.rb +6 -4
  15. data/apps/messenger/lib/backends/mobyt.rb +43 -4
  16. data/apps/messenger/test/features/mobyt.feature +29 -0
  17. data/apps/messenger/test/features/step_definitions/mobyt_steps.rb +59 -0
  18. data/lib/spiderfw/app.rb +0 -2
  19. data/lib/spiderfw/cmd/commands/model.rb +10 -6
  20. data/lib/spiderfw/config/configuration.rb +1 -4
  21. data/lib/spiderfw/config/options/spider.rb +4 -3
  22. data/lib/spiderfw/controller/http_controller.rb +5 -1
  23. data/lib/spiderfw/http/adapters/rack.rb +5 -1
  24. data/lib/spiderfw/model/base_model.rb +5 -5
  25. data/lib/spiderfw/model/identity_mapper.rb +4 -2
  26. data/lib/spiderfw/model/mappers/db_mapper.rb +5 -2
  27. data/lib/spiderfw/model/mappers/mapper.rb +15 -8
  28. data/lib/spiderfw/model/storage/db/adapters/mysql.rb +48 -44
  29. data/lib/spiderfw/model/storage/db/connectors/mysql.rb +16 -0
  30. data/lib/spiderfw/model/storage/db/connectors/mysql2.rb +9 -0
  31. data/lib/spiderfw/setup/app_manager.rb +0 -5
  32. data/lib/spiderfw/spider.rb +34 -5
  33. data/lib/spiderfw/templates/layout.rb +6 -6
  34. data/lib/spiderfw/templates/resources/sass.rb +1 -2
  35. data/lib/spiderfw/templates/template.rb +5 -1
  36. metadata +161 -248
  37. data/apps/core/components/public/js/jquery/plugins/jquery.ui.nestedSortable.js +0 -356
  38. data/apps/messenger/test/features/sms_mobyt.feature +0 -24
  39. data/apps/messenger/test/features/step_definitions/sms_mobyt.rb +0 -21
  40. data/blueprints/.DS_Store +0 -0
  41. data/blueprints/home/.DS_Store +0 -0
  42. data/blueprints/install/.DS_Store +0 -0
  43. data/data/keys/spider.rsa +0 -27
  44. data/data/keys/spider.rsa.pub +0 -1
data/CHANGELOG CHANGED
@@ -1,3 +1,7 @@
1
+ == 0.6.27
2
+ * Clear caches when tmp/clear.txt touched
3
+ * Bugfixes
4
+
1
5
  == 0.6.26
2
6
  * Added --no-rollback option to app update
3
7
  * Routes by HTTP methods, as a main test or as :http_method option;
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.6.26
1
+ 0.6.27
@@ -20,6 +20,7 @@ require 'apps/core/forms/widgets/inputs/select/select'
20
20
  require 'apps/core/forms/widgets/inputs/search_select/search_select'
21
21
  require 'apps/core/forms/widgets/inputs/password/password'
22
22
  require 'apps/core/forms/widgets/inputs/checkbox/checkbox'
23
+ require 'apps/core/forms/widgets/inputs/checkbox_list/checkbox_list'
23
24
  require 'apps/core/forms/widgets/inputs/file_input/file_input'
24
25
  require 'apps/core/forms/widgets/inputs/time_span/time_span'
25
26
  require 'apps/core/forms/widgets/inputs/html_area/html_area'
@@ -13,7 +13,6 @@ Spider.defineWidget('Spider.Forms.DateTime', {
13
13
  if (cl.substr(0, 10) == 'year-range'){
14
14
  var range = cl.substr(11).split('-');
15
15
  conf.yearRange = range[0].replace("m", "-")+":"+range[1].replace('p', '+');
16
- a = 3;
17
16
  }
18
17
  }
19
18
  if (this.input.is('.date')) this.input.datepicker(conf);
@@ -22,7 +22,7 @@ Spider.defineWidget('Spider.Forms.HTMLArea', 'Spider.Forms.Input', {
22
22
  }
23
23
  options = $.parseJSON($('.options', this.el).text());
24
24
  var config = {
25
- extraPlugins : 'autogrow'
25
+ // extraPlugins : 'autogrow'
26
26
  };
27
27
  config.toolbar_simple =
28
28
  [
@@ -3,6 +3,6 @@ Spider.defineWidget('Spider.Forms.TextArea', 'Spider.Forms.Input', {
3
3
  autoInit: true,
4
4
 
5
5
  ready: function(){
6
- this.el.autogrow();
7
- }
6
+ // this.el.autogrow();
7
+ }
8
8
  });
@@ -97,6 +97,18 @@ module Spider; module Forms
97
97
  @model.each_element do |el|
98
98
  @labels[el.name] = el.label
99
99
  end
100
+ #passo nome_elemento: full_class nella stringa
101
+ #es tariffa: Spider::Forms::CheckboxList
102
+ wt_string = @widget_types
103
+ if @widget_types.is_a?(String)
104
+ @widget_types = {}
105
+ parts = wt_string.split(/\s*,\s*/)
106
+ parts.each do |part|
107
+ el_id, class_name = part.split(/\s*:\s+/)
108
+ @widget_types[el_id] = class_name
109
+ end
110
+ end
111
+
100
112
  wt = @widget_types || {}
101
113
  @widget_types = {}
102
114
  wt.each do |key, value|
@@ -152,41 +164,30 @@ module Spider; module Forms
152
164
 
153
165
  def load_widgets(template=@template)
154
166
  super
155
- if @action == :sub
156
- if @sub_element.multiple?
157
- @crud = Spider::Components::Crud.new(@request, @response)
158
- @crud.id = "crud_#{@sub_element.name.to_s}"
159
- @crud.model = @sub_element.model
160
- add_widget(@crud)
161
- @scene.crud = @crud
162
- @obj = load
163
- cond = {}
164
- if @sub_element.integrated?
165
- @sub_element.integrated_from.model.primary_keys.each do |key|
166
- cond[@sub_element.reverse.to_s+'.'+key.name.to_s] = @obj.get("#{@sub_element.integrated_from.name}.#{key.name}")
167
- end
168
- else
169
- @model.primary_keys.each do |key|
170
- cond[@sub_element.reverse.to_s+'.'+key.name.to_s] = @obj.get(key)
171
- end
167
+ if (@action == :sub)
168
+ @crud = Spider::Components::Crud.new(@request, @response)
169
+ @crud.id = "crud_#{@sub_element.name.to_s}"
170
+ @crud.model = @sub_element.model
171
+ add_widget(@crud)
172
+ @scene.crud = @crud
173
+ @obj = load
174
+ cond = {}
175
+ if @sub_element.integrated?
176
+ @sub_element.integrated_from.model.primary_keys.each do |key|
177
+ cond[@sub_element.reverse.to_s+'.'+key.name.to_s] = @obj.get("#{@sub_element.integrated_from.name}.#{key.name}")
172
178
  end
173
- @crud.fixed = cond
174
- sub_elements = []
175
- #sub_elements += @sub_element.model.primary_keys.map{ |k| k.name }
176
- @sub_element.model.elements_array.each do |el|
177
- sub_elements << el.name unless el.integrated? || el.model == @model
179
+ else
180
+ @model.primary_keys.each do |key|
181
+ cond[@sub_element.reverse.to_s+'.'+key.name.to_s] = @obj.get(key)
178
182
  end
179
- @crud.attributes[:table_elements] = sub_elements
180
- # else
181
- # @crud = Spider::Forms::Form.new(@request, @response)
182
- # @form.id = "crud_#{@sub_element.name.to_s}"
183
- # @form.model = @sub_element.model
184
- # add_widget(@crud)
185
- # @scene.crud = @crud
186
- # @obj.load
187
- # debugger
188
- # @form.pk = @obj.get(@sub_element).id
189
183
  end
184
+ @crud.fixed = cond
185
+ sub_elements = []
186
+ #sub_elements += @sub_element.model.primary_keys.map{ |k| k.name }
187
+ @sub_element.model.elements_array.each do |el|
188
+ sub_elements << el.name unless el.integrated? || el.model == @model
189
+ end
190
+ @crud.attributes[:table_elements] = sub_elements
190
191
  else
191
192
  create_inputs
192
193
  end
@@ -267,7 +268,7 @@ module Spider; module Forms
267
268
  if ([:choice, :multiple_choice, :state, :multiple_state].include?(el.association) && !el.extended?)
268
269
  widget_type = el.type.attributes[:estimated_size] && el.type.attributes[:estimated_size] > 30 ?
269
270
  SearchSelect : Select
270
- elsif @attributes[:show_related] && @pk
271
+ elsif @attributes[:show_related] && @pk && el.multiple?
271
272
  @sub_links[el.name] = sub_link(el)
272
273
  end
273
274
  end
@@ -300,8 +301,8 @@ module Spider; module Forms
300
301
  input = create_widget(type, el.name)
301
302
  input.css_classes << "el-#{el.name}"
302
303
  case type.name
303
- when 'Spider::Forms::Select', 'Spider::Forms::SearchSelect'
304
- input.multiple = true if el.multiple?
304
+ when 'Spider::Forms::Select', 'Spider::Forms::SearchSelect', 'Spider::Forms::CheckboxList'
305
+ input.multiple = true if el.multiple? and type.name != 'Spider::Forms::CheckboxList'
305
306
  input.model = el.type if input.respond_to?(:model)
306
307
  input.condition = el.attributes[:choice_condition] || el.condition
307
308
  end
@@ -379,8 +380,7 @@ module Spider; module Forms
379
380
  end
380
381
  end
381
382
  if inputs_done && !@error
382
- if (@free_keys)
383
- # FIXME: lock!
383
+ if @free_keys
384
384
  save_mode = obj.in_storage? ? :update : :insert
385
385
  else
386
386
  save_mode = obj.primary_keys_set? ? :update : :insert
@@ -388,6 +388,8 @@ module Spider; module Forms
388
388
  before_save(obj, save_mode)
389
389
  @before_save.call(obj, save_mode) if @before_save
390
390
  trigger(:before_save, obj)
391
+ end
392
+ if inputs_done && !@error
391
393
  begin
392
394
  save_mode == :update ? obj.update : obj.insert
393
395
  #debug("SAVED")
@@ -396,7 +398,7 @@ module Spider; module Forms
396
398
  rescue => exc
397
399
  if exc.is_a?(Spider::Model::MapperElementError)
398
400
  Spider::Logger.error(exc)
399
- exc_element = exc.element.name
401
+ exc_element = exc.element.is_a?(Spider::Model::Element) ? exc.element.name : exc_element
400
402
  add_error(exc.message, exc_element, exc)
401
403
  else
402
404
  raise
@@ -0,0 +1,71 @@
1
+ module Spider; module Forms
2
+
3
+ class CheckboxList < Input
4
+ tag 'checkbox_list'
5
+ i_attr_accessor :model
6
+ is_attr_accessor :condition
7
+ attr_accessor :data
8
+
9
+ def widget_init(action='')
10
+ super
11
+ @model = const_get_full(@model) if @model.is_a?(String)
12
+ end
13
+
14
+ def prepare_value(p)
15
+ return @value unless p['val']
16
+ qs = Spider::Model::QuerySet.static(@model)
17
+ p['val'].each do |key, value|
18
+ if value == '1'
19
+ obj = @model.new(str_to_pks(key))
20
+ qs << obj
21
+ end
22
+ end
23
+ @value = qs
24
+ @value
25
+ end
26
+
27
+ def prepare
28
+ super
29
+ end
30
+
31
+ def run
32
+ @scene.data = @data || @model.all
33
+ if @condition
34
+ @scene.data.condition = @condition
35
+ end
36
+ @scene.values = {}
37
+ @scene.selected = {}
38
+ if @value
39
+ val = @value
40
+ val.each do |v|
41
+ @scene.selected[@model.primary_keys.map{|k| v.get(k) }.join(',')] = true
42
+ end
43
+ end
44
+ @scene.data.each_index do |i|
45
+ @scene.values[i] = @model.primary_keys.map{|k| @scene.data[i][k] }.join(',')
46
+ end
47
+ super
48
+ end
49
+
50
+
51
+ def obj_to_key_str(obj)
52
+ @model.primary_keys.map{|k| obj.get(k) }.join(',')
53
+ end
54
+
55
+ def str_to_pks(val)
56
+ if (val.is_a?(String))
57
+ parts = val.split(',')
58
+ pk = {}
59
+ @model.primary_keys.each{ |k| pk[k.name] = parts.shift}
60
+ else
61
+ pk = val
62
+ end
63
+ return pk
64
+ end
65
+
66
+
67
+ end
68
+
69
+
70
+
71
+ end;end
@@ -0,0 +1,5 @@
1
+ <sp:template>
2
+ <input sp:each_index="@data |i|" type="checkbox" name="{ @name }[val][{ @values[i] }]" value="1"
3
+ sp:attr-if="@selected[@values[i]],checked"> { @data[i].to_s }
4
+ <br/>
5
+ </sp:template>
@@ -8,7 +8,7 @@ module Spider; module Forms
8
8
  i_attr_accessor :lformat, :type => Symbol, :default => :short
9
9
  attribute :"change-month", :type => Spider::Bool, :default => false
10
10
  attribute :"change-year", :type => Spider::Bool, :default => false
11
- attribute :"year-range", :type => String, :default => "150:10"
11
+ attribute :"year-range", :type => String, :default => "m150:p10"
12
12
 
13
13
  def prepare_value(val)
14
14
  return val if val.respond_to?(:strftime)
@@ -20,7 +20,7 @@
20
20
  </option>
21
21
  </select>
22
22
  <div sp:if="@value_desc" class="value-desc{ (@clear ? ' changing' : '') }">
23
- <tpl:pass sp:if="@clear">({ @value_desc })</tpl:pass>
23
+ <tpl:pass sp:if="@clear && !@value_desc.blank?">({ @value_desc })</tpl:pass>
24
24
  <tpl:pass sp:if="!@clear">{ @value_desc }</tpl:pass>
25
25
  <span sp:if="!@next_step">
26
26
  <span class="change_action">
@@ -39,4 +39,4 @@
39
39
  -->
40
40
  <input sp:if="@multiple" class="hidden-val" type="hidden" name="{ @value_param }" sp:each="@keys |key|" value="{ key }" />
41
41
  <input sp:if="!@multiple" class="hidden-val" type="hidden" name="{ @value_param }" value="{ @key }" />
42
- </div>
42
+ </div>
@@ -0,0 +1,72 @@
1
+ require 'apps/messenger/lib/sms_backend'
2
+ require 'apps/messenger/lib/backends/mobyt'
3
+
4
+
5
+
6
+
7
+ module Spider; module Messenger; module Backends; module SMS
8
+
9
+ module Mobyt
10
+ include Messenger::SMSBackend
11
+
12
+ def self.send_message(msg)
13
+ Spider.logger.debug("**Sending SMS with mobyt**")
14
+ username = Spider.conf.get('messenger.mobyt.username')
15
+ password = Spider.conf.get('messenger.mobyt.password')
16
+ from = Spider.conf.get('messenger.mobyt.from')
17
+ to = msg.to
18
+ text = msg.text
19
+ uri = URI('http://smsweb.mobyt.it/sms-gw/sendsmart')
20
+
21
+ testi = Hash.new
22
+ #se mando messaggio lungo spezzo in più messaggi
23
+ if text.size > 160
24
+ percorso_contatore = File.join(Spider.paths[:var], "contatore_mobyt")
25
+ sequence_index = ""
26
+ File.open(percorso_contatore, File::RDWR|File::CREAT) do |f|
27
+ f.flock(File::LOCK_EX)
28
+ sequence_index = f.read.to_i + 1
29
+ f.rewind
30
+ sequence_index = sequence_index % 99
31
+ f.write("#{sequence_index}")
32
+ f.flush
33
+ f.truncate(f.pos)
34
+ end
35
+ tot_response = true
36
+ operation="MULTI"
37
+ cnt = 0
38
+ index = 1
39
+ mes = ""
40
+ (text + " ").scan(/.{1,153}\s/).map{ |s|
41
+ testi[index] = s
42
+ index += 1
43
+ }
44
+ tot_testi = testi.size
45
+ #tolgo lo spazio che era stato aggiunto al testo nell'ultimo messaggio
46
+ testi[tot_testi] = testi[tot_testi].strip
47
+ #invio sms con testi in hash testi
48
+ testi.each{ |key,testo|
49
+ sequence_index = sequence_index.to_s.rjust(2, '0')
50
+ tot_testi = tot_testi.to_s.rjust(2, '0')
51
+ key = key.to_s.rjust(2, '0')
52
+ # udh=aabbcc: aa=id sequenza, bb=tot messaggi, cc=id del messaggio nella sequenza
53
+ udh = "#{sequence_index}#{tot_testi}#{key}"
54
+ uri_params = Spider::Messenger::Mobyt.parametri(username,password,to,from,testo,operation,udh)
55
+ response = Spider::Messenger::Mobyt.do_post_request(uri, uri_params)
56
+ Spider::Messenger::Mobyt.check_response_http(response)
57
+ }
58
+
59
+ else
60
+ uri_params = Spider::Messenger::Mobyt.parametri(username,password,to,from,text)
61
+ response = Spider::Messenger::Mobyt.do_post_request(uri, uri_params)
62
+ Spider::Messenger::Mobyt.check_response_http(response)
63
+ end
64
+
65
+ true
66
+ end
67
+
68
+ end
69
+
70
+
71
+
72
+ end; end; end; end
@@ -39,5 +39,10 @@ module Spider
39
39
  config_option 'messenger.smstools.log_path', _("Smsd logfile"), :default => '/var/log/smsd.log'
40
40
  config_option 'messenger.send_immediate', _("Send messages right after the controller action instead of waiting for worker"),
41
41
  :type => Spider::Bool, :default => true
42
-
42
+ config_option 'messenger.mobyt.username', _("Username for the Mobyt service"),
43
+ :type => String
44
+ config_option 'messenger.mobyt.password', _("Password for the Mobyt service"),
45
+ :type => String
46
+ config_option 'messenger.mobyt.from', _("From parameter for the Mobyt service"),
47
+ :type => String
43
48
  end
@@ -54,13 +54,15 @@ module Spider; module Messenger
54
54
  end
55
55
 
56
56
  if html
57
- mail.text_part do
58
- body text
59
- end
60
57
  mail.html_part do
61
58
  content_type 'text/html; charset=UTF-8'
62
59
  body html
63
- end
60
+ end
61
+ end
62
+ if attachments && !attachments.empty?
63
+ mail.text_part do
64
+ body text
65
+ end
64
66
  else
65
67
  mail.body = text
66
68
  end
@@ -1,11 +1,50 @@
1
+ require 'digest/md5'
2
+ require 'net/http'
3
+ require 'iconv'
4
+
1
5
  module Spider::Messenger
2
6
 
3
- class Mobyt
7
+ module Mobyt
8
+
9
+ def self.parametri(username,password,to,from,testo,operation="TEXT",udh="")
10
+ #cambio la codifica per gli accenti e caratteri particolari
11
+ testo_codificato = Iconv.conv('ISO-8859-15', 'UTF-8', testo)
12
+ string_digest = [username, operation, to, from, testo_codificato, password].map{ |val|
13
+ val.to_s
14
+ }.join("")
15
+ ticket = Digest::MD5.hexdigest(string_digest).downcase
16
+ hash_parametri = {
17
+ 'rcpt' => to,
18
+ 'operation' => operation,
19
+ 'from' => from,
20
+ 'data' => testo_codificato,
21
+ 'id' => username,
22
+ 'qty' => "h",
23
+ 'ticket' => ticket,
24
+ 'udh' => udh
25
+ }
26
+
27
+ end
28
+
29
+ def self.do_post_request(uri,data)
30
+ response = Net::HTTP.post_form(uri,data)
31
+ end
4
32
 
5
- def self.parametri(username, password, from, to, testo)
6
33
 
7
- end
34
+ def self.check_response_http(response)
35
+ case response
36
+ when Net::HTTPSuccess
37
+ if response.body !~ /^OK/
38
+ raise response.body
39
+ else
40
+ return true
41
+ end
42
+ else
43
+ #solleva un eccezione
44
+ raise response.class.to_s
45
+ end
46
+ end
8
47
 
9
- end
48
+ end
10
49
 
11
50
  end
@@ -0,0 +1,29 @@
1
+ # language: it
2
+
3
+ Funzionalità: Invio di sms con mobyt
4
+
5
+ Scenario: restituzione parametri semplice
6
+
7
+ Dato che lo username è "aaaa"
8
+ E che la password è "bbbb"
9
+ Quando invio un sms con i seguenti dati
10
+ | to | from | testo |
11
+ | +39123456789 | mittente-prova | Ciao |
12
+ Allora il backend deve restituire i seguenti dati
13
+ | operation | TEXT |
14
+ | from | mittente-prova |
15
+ | data | Ciao |
16
+ | id | aaaa |
17
+ | qty | a |
18
+ | password | |
19
+ | ticket | 3ad6bd5c1d3ea7b021b3f7ddad2398bd |
20
+
21
+ Scenario: invio messaggio con backend mobyt
22
+
23
+ Dato che il backend è solo di tipo "mobyt"
24
+ E che lo username è "aaaa"
25
+ E che la password è "bbbb"
26
+ E che il from è "mittente-prova"
27
+ Quando invio un messaggio con messenger
28
+ E faccio girare la coda dei messaggi
29
+ Allora deve essere fatta una chiamata in "POST" all'url "http://smsweb.mobyt.it/sms-gw/sendsmart"
@@ -0,0 +1,59 @@
1
+ require 'apps/messenger/lib/backends/mobyt'
2
+
3
+
4
+ Dato /^che lo username è "([^\"]*)"$/ do |username|
5
+ @username = username
6
+ Spider.conf.set('messenger.mobyt.username',username)
7
+ end
8
+
9
+ Dato /^che la password è "([^\"]*)"$/ do |password|
10
+ @password = password
11
+ Spider.conf.set('messenger.mobyt.password',password)
12
+ end
13
+
14
+ Quando /^invio un sms con i seguenti dati$/ do |table|
15
+ to = table.hashes.first["to"]
16
+ from = table.hashes.first["from"]
17
+ testo = table.hashes.first["testo"]
18
+ @risultato = Spider::Messenger::Mobyt.parametri(@username,@password,to,from,testo)
19
+ end
20
+
21
+ Allora /^il backend deve restituire i seguenti dati$/ do |table|
22
+ table.rows_hash.each do |key, value|
23
+ @risultato[key.to_sym].should eq value
24
+ end
25
+ end
26
+
27
+ Dato /^che il backend è solo di tipo "([^\"]*)"$/ do |backend|
28
+ require "apps/messenger/backends/sms/#{backend}"
29
+ Spider.conf.set('messenger.sms.backends', [backend])
30
+ end
31
+
32
+
33
+ Dato /^che il from è "([^\"]*)"$/ do |from|
34
+ Spider.conf.set('messenger.mobyt.from',from)
35
+ end
36
+
37
+ Quando /^invio un messaggio con messenger$/ do
38
+ Spider::Messenger.sms("+39123456789", "Ciao")
39
+ end
40
+
41
+ Quando /^faccio girare la coda dei messaggi$/ do
42
+ require "net/http"
43
+
44
+ module Net
45
+ class HTTP
46
+ def self.post_form(uri, data)
47
+ $uri_http = uri
48
+ $data_http = data
49
+ end
50
+
51
+ end
52
+
53
+ end
54
+ Spider::Messenger.process_queue(:sms)
55
+ end
56
+
57
+ Allora /^deve essere fatta una chiamata in "([^\"]*)" all.url "([^\"]*)"$/ do |post, url|
58
+ $uri_http.to_s.should eq url
59
+ end
data/lib/spiderfw/app.rb CHANGED
@@ -35,8 +35,6 @@ module Spider
35
35
  #
36
36
  module ClassMethods
37
37
 
38
- # @return [String] unique identifier for the app
39
- attr_reader :id
40
38
  # @return [String] filesystem path of the app
41
39
  attr_reader :path
42
40
  # @return [String] path of the 'public' folder
@@ -38,18 +38,22 @@ module Spider::CommandLine
38
38
  req_models.each do |model_or_app|
39
39
  models = []
40
40
  mod = model_or_app.is_a?(Module) ? model_or_app : const_get_full(model_or_app)
41
- if (mod.is_a?(Module) && mod.include?(Spider::App))
41
+
42
+ if mod.is_a?(Module) && mod.include?(Spider::App)
42
43
  mod.models.each do |m|
43
- unless @non_managed || m < Spider::Model::Managed
44
+ storage_instance = m.storage.respond_to?(:instance_name) ? m.storage.instance_name : nil
45
+ if @non_managed || m < Spider::Model::Managed #|| storage_instance == 'default'
46
+ models << m
47
+ else
44
48
  unless m < Spider::Model::InlineModel || m.attributes[:sub_model]
45
49
  Spider.logger.warn("Skipping #{m} because it's non managed (use -m to override)")
46
50
  end
47
51
  next
48
52
  end
49
- models << m
50
53
  end
51
- elsif (mod.subclass_of?(Spider::Model::BaseModel))
52
- if @non_managed || mod < Spider::Model::Managed
54
+ elsif mod.subclass_of?(Spider::Model::BaseModel)
55
+ storage_instance = mod.storage.respond_to?(:instance_name) ? mod.storage.instance_name : nil
56
+ if @non_managed || mod < Spider::Model::Managed #|| storage_instance == 'default'
53
57
  models << mod
54
58
  else
55
59
  Spider.logger.warn("Skipping #{mod} because it's non managed (use -m to override)")
@@ -136,4 +140,4 @@ module Spider::CommandLine
136
140
 
137
141
  end
138
142
 
139
- end
143
+ end
@@ -76,10 +76,7 @@ module Spider
76
76
  end
77
77
  return key.to_s
78
78
  end
79
-
80
- # Sets a configuration value
81
- # @param [String] key
82
- # @param [Object] val
79
+
83
80
  def set(key, val)
84
81
  first, rest = key.split('.', 2)
85
82
  if rest
@@ -85,9 +85,10 @@ module Spider
85
85
  config_option 'profiling.enable', _("Enable on-request profiling"), :type => Spider::DataTypes::Bool
86
86
  config_option 'request.mutex', _("Respond to requests sequentially"), :default => false
87
87
 
88
- config_option 'locale', _("The locale to use") do |val|
89
- Spider.locale = Locale.new(val)
90
- end
88
+ config_option 'locale', _("The locale to use"), :process => lambda{ |val|
89
+ Spider.locale = val
90
+ val
91
+ }
91
92
  config_option 'i18n.rails_path', _("Path where rails-style locales are found"), :default => lambda{ Spider.paths[:root]+'/locales' }
92
93
  config_option 'i18n.default_locale', _("Fallback locale"), :default => 'en'
93
94
 
@@ -97,7 +97,11 @@ module Spider
97
97
  end
98
98
  Locale.clear
99
99
  Locale.init(:driver => :cgi)
100
- Locale.set_request(@request.params['lang'], @request.cookies['lang'], @request.env['HTTP_ACCEPT_LANGUAGE'], @request.env['HTTP_ACCEPT_CHARSET'])
100
+ if Spider.conf.get('locale')
101
+ Spider.locale = Spider.conf.get('locale')
102
+ else
103
+ Locale.set_request(@request.params['lang'], @request.cookies['lang'], @request.env['HTTP_ACCEPT_LANGUAGE'], @request.env['HTTP_ACCEPT_CHARSET'])
104
+ end
101
105
  @request.locale = Locale.current[0]
102
106
  l = @request.locale.to_s
103
107
  l = $1 if l =~ /(\w\w)_+/
@@ -84,7 +84,11 @@ module Spider; module HTTP
84
84
 
85
85
  w = nil
86
86
  controller_response = Spider::Response.new
87
- multithread = env['rack.multithread'] || Spider.conf.get('webserver.force_threads')
87
+ if RUBY_PLATFORM =~ /mingw32/
88
+ multithread = false
89
+ else
90
+ multithread = env['rack.multithread'] || Spider.conf.get('webserver.force_threads')
91
+ end
88
92
  if multithread
89
93
  r, w = IO.pipe
90
94
  rack_response_hash = {:body => r}