spiderfw 0.6.16 → 0.6.17

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 (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