spiderfw 0.6.16 → 0.6.17

Sign up to get free protection for your applications and to get access to all the features.
Files changed (61) hide show
  1. data/CHANGELOG +9 -0
  2. data/Rakefile +8 -5
  3. data/VERSION +1 -1
  4. data/apps/core/auth/data/locale/it/LC_MESSAGES/spider_auth.mo +0 -0
  5. data/apps/core/auth/po/it/spider_auth.po +3 -3
  6. data/apps/core/auth/po/spider_auth.pot +3 -3
  7. data/apps/core/components/data/locale/it/LC_MESSAGES/spider_components.mo +0 -0
  8. data/apps/core/components/po/it/spider_components.po +7 -7
  9. data/apps/core/components/po/spider_components.pot +7 -7
  10. data/apps/core/components/public/js/spider.js +4 -2
  11. data/apps/core/forms/data/locale/it/LC_MESSAGES/spider_forms.mo +0 -0
  12. data/apps/core/forms/po/it/spider_forms.po +2 -2
  13. data/apps/core/forms/po/spider_forms.pot +2 -2
  14. data/apps/core/forms/widgets/form/form.rb +20 -6
  15. data/apps/master/_init.rb +0 -1
  16. data/apps/master/data/locale/it/LC_MESSAGES/master.mo +0 -0
  17. data/apps/master/master.rb +4 -0
  18. data/apps/master/po/it/master.po +62 -25
  19. data/apps/master/po/master.pot +45 -20
  20. data/apps/messenger/_init.rb +2 -21
  21. data/apps/messenger/backends/sms/test.rb +25 -0
  22. data/apps/messenger/config/test.config.yml +6 -1
  23. data/apps/messenger/controllers/mixins/messenger_helper.rb +30 -5
  24. data/apps/messenger/data/locale/it/LC_MESSAGES/spider_messenger.mo +0 -0
  25. data/apps/messenger/messenger.rb +40 -2
  26. data/apps/servant/lib/commands_processor.rb +1 -1
  27. data/apps/worker/worker.rb +15 -10
  28. data/data/locale/it/LC_MESSAGES/spider.mo +0 -0
  29. data/lib/spiderfw/app.rb +3 -3
  30. data/lib/spiderfw/cache/template_cache.rb +4 -0
  31. data/lib/spiderfw/cmd/cmd.rb +0 -2
  32. data/lib/spiderfw/cmd/commands/app.rb +89 -6
  33. data/lib/spiderfw/cmd/commands/setup.rb +13 -40
  34. data/lib/spiderfw/config/configuration.rb +1 -0
  35. data/lib/spiderfw/config/options/spider.rb +9 -8
  36. data/lib/spiderfw/controller/mixins/http_mixin.rb +9 -0
  37. data/lib/spiderfw/env.rb +3 -1
  38. data/lib/spiderfw/i18n/cldr.rb +39 -13
  39. data/lib/spiderfw/i18n/i18n.rb +9 -0
  40. data/lib/spiderfw/i18n/javascript_parser.rb +1 -1
  41. data/lib/spiderfw/i18n/shtml_parser.rb +1 -1
  42. data/lib/spiderfw/model/base_model.rb +1 -1
  43. data/lib/spiderfw/model/inline_model.rb +13 -1
  44. data/lib/spiderfw/model/mappers/db_mapper.rb +5 -0
  45. data/lib/spiderfw/model/mappers/mapper.rb +9 -4
  46. data/lib/spiderfw/model/migrations/drop_element.rb +26 -0
  47. data/lib/spiderfw/model/migrations/irreversible_migration.rb +9 -0
  48. data/lib/spiderfw/model/migrations/migration.rb +7 -0
  49. data/lib/spiderfw/model/migrations/replace.rb +32 -0
  50. data/lib/spiderfw/model/migrations.rb +21 -0
  51. data/lib/spiderfw/model/model.rb +4 -1
  52. data/lib/spiderfw/model/storage/db/db_storage.rb +1 -1
  53. data/lib/spiderfw/setup/app_manager.rb +281 -200
  54. data/lib/spiderfw/setup/setup_task.rb +80 -35
  55. data/lib/spiderfw/spider.rb +28 -13
  56. data/lib/spiderfw/templates/layout.rb +40 -8
  57. data/lib/spiderfw/templates/resources/sass.rb +21 -0
  58. data/lib/spiderfw/test.rb +1 -1
  59. data/lib/spiderfw/utils/events/event_source.rb +1 -2
  60. data/lib/spiderfw/utils/gems.rb +5 -1
  61. metadata +11 -4
@@ -0,0 +1,25 @@
1
+ require 'apps/messenger/lib/sms_backend'
2
+
3
+ module Spider; module Messenger; module Backends; module SMS
4
+
5
+ module Test
6
+ include Messenger::SMSBackend
7
+
8
+ def self.sent_sms
9
+ @sent_sms ||= []
10
+ end
11
+
12
+ def self.after_test
13
+ @sent_sms = []
14
+ end
15
+
16
+ def self.send_message(msg)
17
+ Spider.logger.debug("Sending SMS #{msg.ticket}")
18
+ self.sent_sms << msg
19
+ end
20
+
21
+
22
+
23
+ end
24
+
25
+ end; end; end; end
@@ -1,2 +1,7 @@
1
1
  set test:
2
- messenger.email.backend: test
2
+ messenger.email.backend: test
3
+
4
+
5
+ apps:
6
+ - portal
7
+ - demografici
@@ -22,9 +22,14 @@ module Spider; module Messenger
22
22
  klass ||= self.class.app if self.class.respond_to?(:app)
23
23
  klass ||= Spider.home
24
24
  msg = Spider::Messenger::MessengerHelper.send_email(klass, template, scene, from, to, headers, attachments, params)
25
- @messenger_sent ||= {}
26
- @messenger_sent[:email] ||= []
27
- @messenger_sent[:email] << msg.ticket
25
+ sent_email(msg.ticket)
26
+ msg.ticket
27
+ end
28
+
29
+ def send_sms(to, text, params={})
30
+ msg = Spider::Messenger.sms(to, text, params)
31
+ sent_sms(msg.ticket)
32
+ msg.ticket
28
33
  end
29
34
 
30
35
  def self.send_email(klass, template, scene, from, to, headers={}, attachments=[], params={})
@@ -75,10 +80,30 @@ module Spider; module Messenger
75
80
  Messenger.email(from, to, mail_headers, mail_body, params)
76
81
  end
77
82
 
83
+ def sent_email(ticket)
84
+ sent_message(ticket, :email)
85
+ end
86
+
87
+ def sent_sms(ticket)
88
+ sent_message(ticket, :sms)
89
+ end
90
+
91
+ def sent_message(ticket, type)
92
+ return unless ticket
93
+ type = type.to_sym
94
+ @messenger_sent = Spider::Request.current[:messenger_sent]
95
+ @messenger_sent ||= {}
96
+ @messenger_sent[type] ||= []
97
+ @messenger_sent[type] << ticket
98
+ Spider::Request.current[:messenger_sent] = @messenger_sent
99
+ end
100
+
78
101
  def after(action='', *params)
102
+ @messenger_sent = Spider::Request.current[:messenger_sent]
79
103
  return super unless Spider.conf.get('messenger.send_immediate') && @messenger_sent
80
- Spider::Messenger.process_queue(:email, @messenger_sent[:email]) if @messenger_sent[:email]
81
- Spider::Messenger.process_queue(:sms, @messenger_sent[:sms]) if @messenger_sent[:sms]
104
+ @messenger_sent.each do |type, msgs|
105
+ Spider::Messenger.process_queue(type, msgs)
106
+ end
82
107
  end
83
108
 
84
109
  end
@@ -3,11 +3,32 @@ require 'fileutils'
3
3
  module Spider
4
4
 
5
5
  module Messenger
6
+
7
+ def self.app_init
8
+ available_backends = {}
9
+ base = File.join(Spider::Messenger.path, 'backends')
10
+ Dir.new(base).each do |type|
11
+ next if type[0].chr == '.'
12
+ type_dir = File.join(base, type)
13
+ next unless File.directory?(type_dir)
14
+ available_backends[type.to_sym] = []
15
+ Dir.new(type_dir).each do |bcknd|
16
+ next if bcknd[0].chr == '.'
17
+ name = File.basename(bcknd, '.rb')
18
+ available_backends[type.to_sym] << name
19
+ end
20
+ end
21
+ available_backends.each do |type, backends|
22
+ Spider.config_option("messenger.#{type}.backends")[:params][:choices] = backends
23
+ Spider.config_option("messenger.#{type}.backend")[:params][:choices] = backends
24
+ end
25
+
26
+ end
6
27
 
7
28
  def self.queues
8
29
  {
9
- :email => { :label => _("Email"), :model => :Email }
10
- # :sms => { :label => _("SMS"), :model => :SMS }
30
+ :email => { :label => _("Email"), :model => :Email },
31
+ :sms => { :label => _("SMS"), :model => :SMS }
11
32
  }
12
33
  end
13
34
 
@@ -117,6 +138,23 @@ module Spider
117
138
  msg.save
118
139
  return msg
119
140
  end
141
+
142
+
143
+ def self.after_test
144
+ self.backends.each do |queue, mods|
145
+ mods.each do |mod|
146
+ mod.after_test if mod.respond_to?(:after_test)
147
+ end
148
+ end
149
+ end
150
+
151
+ def self.before_test
152
+ self.backends.each do |queue, mods|
153
+ mods.each do |mod|
154
+ mod.after_test if mod.respond_to?(:after_test)
155
+ end
156
+ end
157
+ end
120
158
 
121
159
 
122
160
  end
@@ -101,7 +101,7 @@ module Spider; module Servant
101
101
 
102
102
  def install_apps(apps)
103
103
  require 'spiderfw/setup/app_manager'
104
- Spider::AppManager.install_or_update(apps)
104
+ Spider::AppManager.get_apps(apps)
105
105
  end
106
106
 
107
107
  end
@@ -6,14 +6,19 @@ require 'apps/worker/models/job'
6
6
  module Spider
7
7
 
8
8
  module Worker
9
- @pid_file = Spider.paths[:var]+'/run/worker.pid'
10
- @script_file = Spider.paths[:config]+'/worker.rb'
11
- @scripts_dir = Spider.paths[:config]+'/worker'
12
- @mutex = Mutex.new
13
- @options = {
14
- :fork => Spider.conf.get('worker.fork'),
15
- :detach => Spider.conf.get('worker.detach')
16
- }
9
+ @options = {}
10
+
11
+ def self.app_init
12
+ @pid_file = Spider.paths[:var]+'/run/worker.pid'
13
+ @script_file = Spider.paths[:config]+'/worker.rb'
14
+ @scripts_dir = Spider.paths[:config]+'/worker'
15
+ @mutex = Mutex.new
16
+ @options = {
17
+ :fork => Spider.conf.get('worker.fork'),
18
+ :detach => Spider.conf.get('worker.detach')
19
+ }
20
+ end
21
+
17
22
 
18
23
  def self.pid_file
19
24
  @pid_file
@@ -146,10 +151,10 @@ module Spider
146
151
  return job.uuid
147
152
  end
148
153
 
149
- def self.cron(time, params, &proc)
154
+ def self.cron(time, params=nil, &proc)
150
155
  raise "The cron method must be used only in worker init scripts" unless @runner
151
156
  check_params(params) if params
152
- @runner.cron(time, params)
157
+ @runner.cron(time, params, &proc)
153
158
  end
154
159
 
155
160
  def self.every(time, params=nil, &proc)
Binary file
data/lib/spiderfw/app.rb CHANGED
@@ -58,7 +58,7 @@ module Spider
58
58
  if u = Spider.conf.get("#{@dotted_name}.http_url")
59
59
  if action
60
60
  u += '/' if u[-1].chr != '/'
61
- u += action
61
+ u += action.to_s
62
62
  end
63
63
  return u
64
64
  end
@@ -167,10 +167,10 @@ module Spider
167
167
  end
168
168
 
169
169
  def relative_path
170
- if (@path.index(Spider.paths[:apps]) == 0)
170
+ if Spider.paths[:apps] && @path.index(Spider.paths[:apps]) == 0
171
171
  return @path[Spider.paths[:apps].length+1..-1]
172
172
  else
173
- return @path[Spider.paths[:core_apps].length+1..-1]
173
+ return @path[$SPIDER_PATHS[:core_apps].length+1..-1]
174
174
  end
175
175
  end
176
176
 
@@ -136,6 +136,10 @@ module Spider
136
136
  end
137
137
  lock_file.flock(File::LOCK_UN)
138
138
  end
139
+
140
+ def clear!
141
+ FileUtils.rm_rf(Dir.glob(File.join(@path, '*')))
142
+ end
139
143
 
140
144
 
141
145
 
@@ -32,11 +32,9 @@ module Spider; module CommandLine
32
32
  }
33
33
  opt.on("--devel", _("Set runmode to devel"), "-d") do
34
34
  $SPIDER_RUNMODE = 'devel'
35
- Spider.runmode = 'devel' if Spider && Spider.respond_to?(:runmode=)
36
35
  end
37
36
  opt.on("--test", _("Set runmode to test")) do
38
37
  $SPIDER_RUNMODE = 'test'
39
- Spider.runmode = 'test' if Spider && Spider.respond_to?(:runmode=)
40
38
  end
41
39
  opt.on("--http-proxy [PROXY]", _("Proxy server to use for http operations (http://user:pass@host:port)")){ |p|
42
40
  ENV['http_proxy'] = p
@@ -119,23 +119,46 @@ class AppCommand < CmdParse::Command
119
119
  opt.on("--no-activate", _("Don't activate installed apps")){ |s| @no_activate = true }
120
120
  end
121
121
  install.set_execution_block do |args|
122
+ $SPIDER_INTERACTIVE = true
122
123
  unless File.exist?('init.rb') && File.directory?('apps')
123
124
  puts _("Please execute this command from the home folder")
124
125
  exit
125
126
  end
126
127
  require 'spiderfw/setup/app_manager'
127
128
  options = {
128
- :git => @git, :all => @all, :no_deps => @no_deps, :optional => @optional,
129
+ :use_git => @git, :all => @all, :no_deps => @no_deps, :optional => @optional,
129
130
  :no_gems => @no_gems, :no_optional_gems => @no_optional_gems, :no_activate => @no_activate
130
131
  }
131
132
  options[:url] = @server_url if @server_url
132
- Spider::AppManager.install_apps(args, options)
133
+ if @git && !Spider::AppManager.git_available?
134
+ puts _("git gem not available; install git gem for Git support")
135
+ exit
136
+ end
137
+ apps = args
138
+ installed = []
139
+ apps.each do |app|
140
+ installed << app if Spider::AppManager.installed?(app)
141
+ end
142
+ unless installed.empty?
143
+ puts _("%s already installed") % installed.join(', ')
144
+ end
145
+ specs = Spider::AppManager.resolve(apps, options)
146
+ iapps = specs[:install].map{ |spec| spec.app_id }
147
+ deps = iapps - apps
148
+ unless deps.empty?
149
+ puts _("The following apps will be installed as a dependency: %s") % deps.join(', ')
150
+ end
151
+ unless specs[:update].empty?
152
+ puts _("The following apps will be updated as a dependency: %s") % specs[:update].map{ |s| s.app_id }.join(', ')
153
+ end
154
+ Spider::AppManager.new.install(specs, options)
133
155
  end
134
156
  self.add_command(install)
135
157
 
136
158
  activate = CmdParse::Command.new('activate', false )
137
159
  activate.short_desc = _("Activate an app")
138
160
  activate.set_execution_block do |args|
161
+ $SPIDER_INTERACTIVE = true
139
162
  apps = args
140
163
  require 'spiderfw/spider'
141
164
  apps = Spider.get_app_deps(apps)
@@ -148,7 +171,7 @@ class AppCommand < CmdParse::Command
148
171
  update.options = CmdParse::OptionParserWrapper.new do |opt|
149
172
  opt.on("--all", _("Update all apps"), "-a"){ |a| @all = true }
150
173
  opt.on("--no-git", _("Don't use git for updating apps"), "-g"){ |r| @no_git = true }
151
- opt.on("--no-dependencies", _("Don't install other apps this one depends on"), "-d"){ |d|
174
+ opt.on("--no-dependencies", _("Don't install/update other apps this one depends on"), "-d"){ |d|
152
175
  @no_deps = true
153
176
  }
154
177
  opt.on("--no-gems", _("Don't install ruby gems this app depends on"), "-g"){ |g| @no_gems = true }
@@ -156,8 +179,13 @@ class AppCommand < CmdParse::Command
156
179
  opt.on("--no-optional-gems", _("Don't install optional gem dependencies"), "-G"){ |g|
157
180
  @no_optional_gems = true
158
181
  }
182
+ opt.on("--no-activate", _("Don't activate installed apps, if any")){ |s| @no_activate = true }
183
+ opt.on("--refresh", _("Update apps even if the version has not changed"), "-r"){ |r| @refresh = true }
184
+ opt.on("--no-clear-cache", _("Don't clear cache"), "-C"){ |c| @no_clear_cache = true }
185
+ opt.on("--no-restart", _("Don't restart the server after the udpate"), "-R"){ |r| @no_restart = true }
159
186
  end
160
187
  update.set_execution_block do |args|
188
+ $SPIDER_INTERACTIVE = true
161
189
  unless File.exist?('init.rb') && File.directory?('apps')
162
190
  puts _("Please execute this command from the home folder")
163
191
  exit
@@ -165,12 +193,67 @@ class AppCommand < CmdParse::Command
165
193
  require 'spiderfw/setup/app_manager'
166
194
  options = {
167
195
  :no_git => @no_git, :all => @all, :no_deps => @no_deps, :no_optional => @no_optional,
168
- :no_gems => @no_gems, :no_optional_gems => @no_optional_gems
196
+ :no_gems => @no_gems, :no_optional_gems => @no_optional_gems, :no_activate => @no_activate,
197
+ :clear_cache => !@no_clear_cache, :restart => !@no_restart
169
198
  }
170
199
  options[:url] = @server_url if @server_url
171
- Spider::AppManager.update_apps(args, options)
200
+ apps = args
201
+ options[:refresh] = apps if @refresh
202
+ apps.each do |app|
203
+ unless Spider::AppManager.installed?(app)
204
+ puts _("App %s is not installed") % app
205
+ exit
206
+ end
207
+ end
208
+ specs = Spider::AppManager.resolve(apps, options)
209
+ unless specs[:install].empty?
210
+ puts _("The following apps will be installed as a dependency: %s") % specs[:install].map{ |s| s.app_id }.join(', ')
211
+ end
212
+ uapps = specs[:update].map{ |spec| spec.app_id }
213
+ udeps = uapps - apps
214
+ unless udeps.empty?
215
+ puts _("The following apps will be updated as a dependency: %s") % udeps.join(', ')
216
+ end
217
+ noupdate = apps - uapps
218
+ unless noupdate.empty?
219
+ puts _("Already up-to-date: %s") % noupdate.join(', ')
220
+ end
221
+ Spider::AppManager.new.install(specs, options)
172
222
  end
173
223
  self.add_command(update)
174
224
 
225
+ setup = CmdParse::Command.new( 'setup', false )
226
+ setup.short_desc = _("Setup an app")
227
+ setup.options = CmdParse::OptionParserWrapper.new do |opt|
228
+ opt.on("--from [VERSION]", _("Assume a specific version is installed"), "-f"){ |from|
229
+ @from = Gem::Version.new(from)
230
+ }
231
+ opt.on("--to [VERSION]", _("Setup to a specific version"), "-t"){ |to|
232
+ @to = Gem::Version.new(to)
233
+ }
234
+ opt.on("--version [VERSION]", _("Only run the setup script for the given version"), "-v"){ |v|
235
+ @version = Gem::Version.new(v)
236
+ }
237
+ opt.on("--all", _("Setup all active apps")){ |all|
238
+ @all = true
239
+ }
240
+ opt.on("--no-cleanup", _("Don't cleanup"), "-C"){ |no_cleanup| @no_cleanup = true }
241
+ end
242
+
243
+ setup.set_execution_block do |args|
244
+ $SPIDER_INTERACTIVE = true
245
+ require 'spiderfw/setup/app_manager'
246
+ tasks = Spider::AppManager.new.setup(name)
247
+ unless @no_cleanup
248
+ tasks.each do |t|
249
+ begin
250
+ t.do_cleanup
251
+ rescue => exc
252
+ Spider.logger.error(exc)
253
+ end
254
+ end
255
+ end
256
+ end
257
+
175
258
  end
176
- end
259
+ end
@@ -1,5 +1,3 @@
1
- require 'spiderfw/setup/setup_task'
2
-
3
1
  class SetupCommand < CmdParse::Command
4
2
 
5
3
 
@@ -23,10 +21,13 @@ class SetupCommand < CmdParse::Command
23
21
  opt.on("--all", _("Setup all active apps")){ |all|
24
22
  @all = true
25
23
  }
24
+ opt.on("--no-cleanup", _("Don't cleanup"), "-C"){ |no_cleanup| @no_cleanup = true }
26
25
  end
27
26
 
28
27
  set_execution_block do |apps|
29
- require 'spiderfw'
28
+ $SPIDER_INTERACTIVE = true
29
+ require 'spiderfw/spider'
30
+ Spider.init_base
30
31
  apps = Spider.apps.keys if @all
31
32
  if (apps.length > 1) && (@to || @from || @version)
32
33
  raise "Can't use --from, --to or --version with multiple apps"
@@ -38,48 +39,20 @@ class SetupCommand < CmdParse::Command
38
39
  wizard.run
39
40
 
40
41
  end
42
+ tasks = []
41
43
  apps.each do |name|
42
- Spider.load_app(name) unless Spider.apps[name]
43
- app = Spider.apps[name]
44
- path = app.setup_path
45
- current = @from || app.installed_version
46
- new_version = @to || app.version
47
- next unless File.exist?(path)
48
- tasks = []
49
- if @version
50
- tasks = ["#{@version}.rb"]
51
- else
52
- tasks = Dir.entries(path).reject{ |p| p[0].chr == '.'}.sort{ |a, b|
53
- va = Gem::Version.new(File.basename(a, '.rb'))
54
- vb = Gem::Version.new(File.basename(b, '.rb'))
55
- va <=> vb
56
- }
57
- if @from || @to
58
- tasks.reject!{ |t|
59
- v = Gem::Version.new(File.basename(t, '.rb'))
60
- true if @from && v < @from
61
- true if @to && v > @to
62
- false
63
- }
64
- end
65
- end
66
- done_tasks = []
67
- Spider::Model::Managed.no_set_dates = true
68
- tasks.each do |task|
69
- Spider.logger.info("Running setup task #{path+'/'+task}")
70
- t = Spider::SetupTask.load("#{path}/#{task}")
71
- t.app = app
44
+ require 'spiderfw/setup/app_manager'
45
+ tasks += Spider::AppManager.new.setup(name)
46
+ end
47
+ unless @no_cleanup
48
+ tasks.each do |t|
72
49
  begin
73
- done_tasks << t
74
- t.do_up
50
+ t.do_cleanup
75
51
  rescue => exc
76
- done_tasks.each{ |dt| dt.do_down } # FIXME: rescue and log errors in down
77
- raise
52
+ Spider.logger.error(exc)
78
53
  end
79
54
  end
80
- Spider::Model::Managed.no_set_dates = false
81
- app.installed_version = app.version
82
- end
55
+ end
83
56
  end
84
57
 
85
58
 
@@ -292,6 +292,7 @@ module Spider
292
292
  def to_hash
293
293
  h = {}
294
294
  self.options.each do |k|
295
+ k = k.first
295
296
  v = self[k]
296
297
  if v.is_a?(self.class)
297
298
  v = v.to_hash
@@ -30,7 +30,7 @@ module Spider
30
30
  :default => Proc.new{ Spider.config.get('runmode') == 'devel' ? true : false }
31
31
  config_option 'webserver.port', _("Port to use for the http server"), :type => Fixnum, :default => 8080
32
32
  config_option 'webserver.force_threads', _("Force threading on non-threaded adapters"), :type => Spider::DataTypes::Bool,
33
- :default => Proc.new{ RUBY_VERSION_PARTS[1] == '8' && !Object.const_defined?(:PhusionPassenger) ? true : false }
33
+ :default => Proc.new{ Spider.runmode != 'test' && RUBY_VERSION_PARTS[1] == '8' && !Object.const_defined?(:PhusionPassenger) ? true : false }
34
34
  config_option 'webserver.timeout', _("Time allowed for each request (in seconds)"), :type=> Fixnum, :default => nil
35
35
  config_option 'webserver.respawn_on_change', _("Restart the webserver when application code changes"), :type => Spider::Bool,
36
36
  :default => Proc.new{ RUBY_PLATFORM !~ /win32|mingw32/ && Spider.config.get('runmode') == 'devel' ? true : false }
@@ -104,12 +104,12 @@ module Spider
104
104
  config_option 'http.charset', _("The charset to use for http requests"), :default => 'UTF-8'
105
105
 
106
106
  config_option 'log.console', _("Level of debug output to console"),
107
- :default => Proc.new{ Spider.config.get('runmode') == 'devel' ? :DEBUG : false },
107
+ :default => Proc.new{ Spider.runmode == 'devel' ? :DEBUG : false },
108
108
  :process => lambda{ |opt| opt && opt != 'false' ? opt.to_s.upcase.to_sym : false },
109
109
  :choices => [false, :DEBUG, :WARN, :INFO, :ERROR]
110
110
  config_option 'log.errors', _("Log errors to errors.log file"), :type => Spider::DataTypes::Bool, :default => true
111
111
  config_option 'log.level', _("Log level to use for main log file (false for no logging)"),
112
- :default => Proc.new{ Spider.config.get('runmode') == 'devel' ? :DEBUG : :INFO },
112
+ :default => Proc.new{ Spider.runmode == 'devel' ? :DEBUG : :INFO },
113
113
  :choices => [false, :DEBUG, :WARN, :INFO, :ERROR],
114
114
  :process => lambda{ |opt| opt && opt != 'false' ? opt.to_s.upcase.to_sym : false }
115
115
  config_option 'log.file_name', _("Name of the main log file"), :default => 'site.log'
@@ -159,7 +159,7 @@ module Spider
159
159
 
160
160
 
161
161
  config_option 'errors.send_email', _("Send an e-mail to the technical administrator when errors occur"), :type => Spider::DataTypes::Bool,
162
- :default => lambda{ Spider.config.get('runmode') == 'production' ? true : false }
162
+ :default => lambda{ Spider.runmode == 'production' ? true : false }
163
163
 
164
164
  config_option 'devel.trace.extended', _("Use ruby-debug to provide extended traces"), :default => lambda{
165
165
  RUBY_VERSION_PARTS[1] == '8'
@@ -168,19 +168,20 @@ module Spider
168
168
  config_option 'devel.trace.show_instance_variables', _("Show locals in debug traces"), :default => true
169
169
 
170
170
  config_option 'javascript.compress', _("Compress JavaScript files"),
171
- :default => lambda{ Spider.config.get('runmode') == 'production' ? true : false }, :type => Spider::DataTypes::Bool
171
+ :default => lambda{ Spider.runmode == 'production' ? true : false }, :type => Spider::DataTypes::Bool
172
172
  config_option 'css.compress', _("Combine CSS files"),
173
- :default => lambda{ Spider.config.get('runmode') == 'production' ? true : false }, :type => Spider::DataTypes::Bool
173
+ :default => lambda{ Spider.runmode == 'production' ? true : false }, :type => Spider::DataTypes::Bool
174
174
  config_option 'css.cachebuster', _("Use cache busters for CSS urls"), :type => Symbol,
175
175
  :default => :soft, :choices => [false, :soft, :hard, :hardcopy]
176
176
  config_option 'assets.use_cdn', _("Use a Content Delivery Network for assets if defined"), :type => Spider::Bool,
177
- :default => lambda{ Spider.config.get('runmode') == 'production' ? true : false }
177
+ :default => lambda{ Spider.runmode == 'production' ? true : false }
178
178
 
179
179
  config_option 'http_proxy', _("Proxy to use for http clients (http://user:pass@host:port)"), :type => String,
180
180
  :do => lambda{ |val| ENV['http_proxy'] = val }
181
181
 
182
182
  config_option 'resources.disable_custom', _("Disable resource overriding in home"), :type => Spider::Bool, :default => false
183
-
183
+
184
+ config_option 'migrations.window', _("Fetch window to use when migrating models"), :type => Fixnum, :default => 100
184
185
 
185
186
 
186
187
  end
@@ -211,6 +211,15 @@ module Spider; module ControllerMixins
211
211
  @http_auth_realm
212
212
  end
213
213
 
214
+
215
+ def http_url(action=nil)
216
+ return nil unless Spider.site
217
+ u = "http://#{Spider.site.domain}"
218
+ u += ":#{Spider.site.port}" unless Spider.site.port == 80
219
+ u += HTTPMixin.reverse_proxy_mapping(self.url(action))
220
+ u
221
+ end
222
+
214
223
  end
215
224
 
216
225
  class HTTPStatus < RuntimeError
data/lib/spiderfw/env.rb CHANGED
@@ -1,7 +1,9 @@
1
1
  RUBY_VERSION_PARTS = RUBY_VERSION.split('.')
2
2
  ENV['LC_CTYPE'] = 'en_US.UTF-8'
3
3
 
4
- $SPIDER_PATH = File.expand_path(File.dirname(__FILE__)+'/../..')
4
+ $SPIDER_PATH ||= File.expand_path(File.dirname(__FILE__)+'/../..')
5
+ $SPIDER_PATHS ||= {}
6
+ $SPIDER_PATHS[:core_apps] ||= File.join($SPIDER_PATH, 'apps')
5
7
  $SPIDER_LIB = $SPIDER_PATH+'/lib'
6
8
  $SPIDER_RUN_PATH ||= Dir.pwd
7
9
  ENV['GETTEXT_PATH'] += ',' if (ENV['GETTEXT_PATH'])
@@ -13,13 +13,10 @@ module Spider; module I18n
13
13
 
14
14
  end
15
15
 
16
- def localize_date_time(object, format = :default, options={})
16
+ def localize_date_time(object, format = 'medium', options={})
17
17
  options[:calendar] ||= 'gregorian'
18
-
19
- if (format == :default)
20
- format = @cldr.calendar.dateformat_defaults[options[:calendar]]
21
- end
22
-
18
+ format = 'medium' if format == :default
19
+
23
20
  time_format = nil
24
21
  date_format = nil
25
22
  format_string = nil
@@ -30,7 +27,7 @@ module Spider; module I18n
30
27
  date_format = @cldr.calendar.dateformats[options[:calendar].to_sym][format.to_s].dup
31
28
  end
32
29
  if (date_format && time_format)
33
- dt_f = @cldr.calendar.datetimeformats[options[:calendar].to_s]
30
+ dt_f = @cldr.calendar.datetimeformats[options[:calendar].to_sym][format.to_s]
34
31
  format_string = dt_f.sub('{1}', date_format).sub('{0}', time_format)
35
32
  else
36
33
  format_string = date_format ? date_format : time_format
@@ -59,22 +56,20 @@ module Spider; module I18n
59
56
  if (time_format)
60
57
  am = @cldr.calendar.am[options[:calendar].to_s]
61
58
  pm = @cldr.calendar.pm[options[:calendar].to_s]
62
- format_string.gsub!(/%p/, object.hour < 12 ? am : pm) if object.respond_to? :hour
59
+ format_string.gsub!(/%p/, object.hour < 12 ? 'am' : 'pm') if object.respond_to? :hour
63
60
  end
64
61
  object.strftime(format_string)
65
62
  end
66
63
 
67
64
  # FIXME: add extended format handling like in localize
68
- def parse_dt(string, format = :default, options = {})
65
+ def parse_dt(string, format = 'medium', options = {})
66
+ format = 'medium' if format == :default
69
67
  options[:calendar] ||= 'gregorian'
70
68
 
71
- if (format == :default)
72
- format = @cldr.calendar.dateformat_defaults[options[:calendar]]
73
- end
74
69
  time_format = @cldr.calendar.timeformats[options[:calendar].to_sym][format.to_s].dup
75
70
  date_format = @cldr.calendar.dateformats[options[:calendar].to_sym][format.to_s].dup
76
71
  if (options[:return] == :datetime)
77
- dt_f = @cldr.calendar.datetimeformats[options[:calendar].to_s]
72
+ dt_f = @cldr.calendar.datetimeformats[options[:calendar].to_s][format.to_s]
78
73
  format_string = dt_f.sub('{1}', date_format).sub('{0}', time_format)
79
74
  klass = DateTime
80
75
  elsif (options[:return] == :date)
@@ -166,6 +161,37 @@ module Spider; module I18n
166
161
  separator = @cldr.number.symbol_decimal
167
162
  Spider::I18n.do_parse_number(string, delimiter, separator, options)
168
163
  end
164
+
165
+ def list(enumerable)
166
+ return enumerable.join(', ') unless @cldr.core.respond_to?(:list_patterns) # old cldr version
167
+ patterns = @cldr.core.list_patterns
168
+ str = ""
169
+
170
+ def sub_pattern(pattern, items)
171
+ str = pattern.clone
172
+ items.each_index do |i|
173
+ str.sub!("{#{i}}", items[i])
174
+ end
175
+ str
176
+ end
177
+ if pattern = patterns[enumerable.length.to_s]
178
+ return sub_pattern(pattern, enumerable)
179
+ end
180
+ length = enumerable.length
181
+ str = enumerable.last.to_s
182
+ (length-2).downto(0) do |i|
183
+ pattern = nil
184
+ if i == length -2
185
+ pattern = patterns['end']
186
+ elsif i == 0
187
+ pattern = patterns['start']
188
+ end
189
+ pattern ||= patterns['middle']
190
+ str = sub_pattern(pattern, [enumerable[i].to_s, str])
191
+ end
192
+ return str
193
+
194
+ end
169
195
 
170
196
  end
171
197