spiderfw 0.6.26 → 0.6.27

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