spiderfw 0.6.26 → 0.6.27
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +4 -0
- data/VERSION +1 -1
- data/apps/core/forms/_init.rb +1 -0
- data/apps/core/forms/public/date_time.js +0 -1
- data/apps/core/forms/public/html_area.js +1 -1
- data/apps/core/forms/public/text_area.js +2 -2
- data/apps/core/forms/widgets/form/form.rb +40 -38
- data/apps/core/forms/widgets/inputs/checkbox_list/checkbox_list.rb +71 -0
- data/apps/core/forms/widgets/inputs/checkbox_list/checkbox_list.shtml +5 -0
- data/apps/core/forms/widgets/inputs/date_time/date_time.rb +1 -1
- data/apps/core/forms/widgets/inputs/search_select/search_select.shtml +2 -2
- data/apps/messenger/backends/sms/mobyt.rb +72 -0
- data/apps/messenger/config/options.rb +6 -1
- data/apps/messenger/controllers/mixins/messenger_helper.rb +6 -4
- data/apps/messenger/lib/backends/mobyt.rb +43 -4
- data/apps/messenger/test/features/mobyt.feature +29 -0
- data/apps/messenger/test/features/step_definitions/mobyt_steps.rb +59 -0
- data/lib/spiderfw/app.rb +0 -2
- data/lib/spiderfw/cmd/commands/model.rb +10 -6
- data/lib/spiderfw/config/configuration.rb +1 -4
- data/lib/spiderfw/config/options/spider.rb +4 -3
- data/lib/spiderfw/controller/http_controller.rb +5 -1
- data/lib/spiderfw/http/adapters/rack.rb +5 -1
- data/lib/spiderfw/model/base_model.rb +5 -5
- data/lib/spiderfw/model/identity_mapper.rb +4 -2
- data/lib/spiderfw/model/mappers/db_mapper.rb +5 -2
- data/lib/spiderfw/model/mappers/mapper.rb +15 -8
- data/lib/spiderfw/model/storage/db/adapters/mysql.rb +48 -44
- data/lib/spiderfw/model/storage/db/connectors/mysql.rb +16 -0
- data/lib/spiderfw/model/storage/db/connectors/mysql2.rb +9 -0
- data/lib/spiderfw/setup/app_manager.rb +0 -5
- data/lib/spiderfw/spider.rb +34 -5
- data/lib/spiderfw/templates/layout.rb +6 -6
- data/lib/spiderfw/templates/resources/sass.rb +1 -2
- data/lib/spiderfw/templates/template.rb +5 -1
- metadata +161 -248
- data/apps/core/components/public/js/jquery/plugins/jquery.ui.nestedSortable.js +0 -356
- data/apps/messenger/test/features/sms_mobyt.feature +0 -24
- data/apps/messenger/test/features/step_definitions/sms_mobyt.rb +0 -21
- data/blueprints/.DS_Store +0 -0
- data/blueprints/home/.DS_Store +0 -0
- data/blueprints/install/.DS_Store +0 -0
- data/data/keys/spider.rsa +0 -27
- data/data/keys/spider.rsa.pub +0 -1
@@ -441,14 +441,14 @@ module Spider; module Model
|
|
441
441
|
element = self.class.elements[name]
|
442
442
|
raise "Internal error! Element method #{name} exists, but element not found" unless element
|
443
443
|
return element.attributes[:fixed] if element.attributes[:fixed]
|
444
|
-
if
|
444
|
+
if element.integrated?
|
445
445
|
integrated = get(element.integrated_from.name)
|
446
446
|
return integrated.send(element.integrated_from_element) if integrated
|
447
447
|
return nil
|
448
448
|
end
|
449
449
|
if element_has_value?(name) || element_loaded?(name)
|
450
450
|
val = instance_variable_get(ivar)
|
451
|
-
val.set_parent(self, name) if val && element.model?
|
451
|
+
val.set_parent(self, name) if val && element.model?
|
452
452
|
return val
|
453
453
|
end
|
454
454
|
|
@@ -472,7 +472,7 @@ module Spider; module Model
|
|
472
472
|
end
|
473
473
|
val = element.model.new(val) if element.model? && !val.is_a?(BaseModel)
|
474
474
|
end
|
475
|
-
val.set_parent(self, name) if element.model? && val && val.respond_to?(:parent)
|
475
|
+
val.set_parent(self, name) if element.model? && val && val.respond_to?(:parent)
|
476
476
|
return val
|
477
477
|
end
|
478
478
|
|
@@ -1621,7 +1621,7 @@ module Spider; module Model
|
|
1621
1621
|
when 'String'
|
1622
1622
|
when 'Spider::DataTypes::Text'
|
1623
1623
|
value = value.to_s
|
1624
|
-
when 'Fixnum'
|
1624
|
+
when 'Fixnum', 'Spider::DataTypes::PK'
|
1625
1625
|
value = value.to_i
|
1626
1626
|
end
|
1627
1627
|
end
|
@@ -1968,7 +1968,7 @@ module Spider; module Model
|
|
1968
1968
|
|
1969
1969
|
# Returns true if no element has a value
|
1970
1970
|
def empty?
|
1971
|
-
return
|
1971
|
+
return !@_has_values
|
1972
1972
|
end
|
1973
1973
|
|
1974
1974
|
# Sets all values of obj on the current object
|
@@ -95,8 +95,10 @@ module Spider; module Model
|
|
95
95
|
pks.extend(HashComparison)
|
96
96
|
@objects[obj.class] ||= {}
|
97
97
|
if (check && (existent = @objects[obj.class][pks]) && existent.object_id != obj.object_id)
|
98
|
-
|
99
|
-
|
98
|
+
if fail_if_exists
|
99
|
+
#debugger
|
100
|
+
raise IdentityMapperException, "A different instance of the same object #{obj.class}(#{obj.primary_keys.inspect}) already exists in the identity mapper"
|
101
|
+
end
|
100
102
|
existent.merge!(obj)
|
101
103
|
return existent
|
102
104
|
else
|
@@ -464,7 +464,7 @@ module Spider; module Model; module Mappers
|
|
464
464
|
has_join = false
|
465
465
|
cur.each do |cur_join|
|
466
466
|
if (cur_join[:keys] == join[:keys] && cur_join[:conditions] == join[:conditions])
|
467
|
-
cur_join[:type] = :left if join[:type] == :left
|
467
|
+
cur_join[:type] = :left if join[:type] == :left && !join[:order]
|
468
468
|
has_join = true
|
469
469
|
break
|
470
470
|
end
|
@@ -880,6 +880,9 @@ module Spider; module Model; module Mappers
|
|
880
880
|
fields << [field, direction]
|
881
881
|
else
|
882
882
|
el_joins, el_model, el = get_deep_join(order_element, :left)
|
883
|
+
el_joins.each do |el_j|
|
884
|
+
el_j[:order] = true
|
885
|
+
end
|
883
886
|
if el.model?
|
884
887
|
if el_model.mapper.have_references?(el) || el.model.storage != storage
|
885
888
|
el.model.primary_keys.each do |pk|
|
@@ -1195,7 +1198,7 @@ module Spider; module Model; module Mappers
|
|
1195
1198
|
column_type = element.attributes[:db_column_type] || storage_column_type(key_storage_type, key_attributes)
|
1196
1199
|
unless column
|
1197
1200
|
column_name = element.attributes[:db_column_name] || @storage.column_name("#{element.name}_#{key.name}")
|
1198
|
-
column_attributes = @storage.column_attributes(key_type, key_attributes)
|
1201
|
+
column_attributes = @storage.column_attributes(base_type(key_type), key_attributes)
|
1199
1202
|
column = Field.new(schema.table, column_name, column_type, column_attributes)
|
1200
1203
|
end
|
1201
1204
|
column.type ||= column_type
|
@@ -168,10 +168,10 @@ module Spider; module Model
|
|
168
168
|
obj.set(el, set_data)
|
169
169
|
end
|
170
170
|
end
|
171
|
-
if
|
172
|
-
raise RequiredError.new(el)
|
171
|
+
if !el.integrated? && el.required? && (mode == :insert || obj.element_modified?(el)) && !obj.element_has_value?(el)
|
172
|
+
raise RequiredError.new(el)
|
173
173
|
end
|
174
|
-
if
|
174
|
+
if el.unique? && !el.integrated? && obj.element_modified?(el) && curr_val = obj.get(el)
|
175
175
|
existent = @model.where(el.name => curr_val)
|
176
176
|
if (mode == :insert && existent.length > 0) || (mode == :update && existent.length > 1)
|
177
177
|
raise NotUniqueError.new(el)
|
@@ -252,7 +252,6 @@ module Spider; module Model
|
|
252
252
|
def after_save(obj, mode)
|
253
253
|
obj.reset_modified_elements
|
254
254
|
save_associations(obj, mode)
|
255
|
-
|
256
255
|
end
|
257
256
|
|
258
257
|
# Hook called after a succesful save, when the object is not in save mode (see {BaseModel#save_mode}) anymore.
|
@@ -338,7 +337,7 @@ module Spider; module Model
|
|
338
337
|
# @return [void]
|
339
338
|
def save_associations(obj, mode)
|
340
339
|
association_elements.select{ |el| obj.element_has_value?(el) }.each do |el|
|
341
|
-
save_element_associations(obj, el, mode)
|
340
|
+
save_element_associations(obj, el, mode) # if obj.element_modified?(el)
|
342
341
|
end
|
343
342
|
end
|
344
343
|
|
@@ -729,7 +728,14 @@ module Spider; module Model
|
|
729
728
|
seen[obj] = true
|
730
729
|
end
|
731
730
|
res = path.empty? ? obj : obj.all_children(path)
|
732
|
-
|
731
|
+
if obj && !path.empty? && res.length < 1
|
732
|
+
if Spider.runmode == 'production'
|
733
|
+
Spider.logger.error("Internal error: broken object path")
|
734
|
+
res = [orig_obj]
|
735
|
+
else
|
736
|
+
raise RuntimeError, "Internal error: broken object path"
|
737
|
+
end
|
738
|
+
end
|
733
739
|
res = QuerySet.new(@model, res) unless res.is_a?(QuerySet)
|
734
740
|
res = res.select{ |obj| obj.primary_keys_set? }
|
735
741
|
return res
|
@@ -1335,7 +1341,7 @@ module Spider; module Model
|
|
1335
1341
|
# Makes the objects' mapper run the task
|
1336
1342
|
# @return [void]
|
1337
1343
|
def execute
|
1338
|
-
debug_str = "Executing #{@action} on #{@object.inspect}"
|
1344
|
+
debug_str = "Executing #{@action} on #{@object.class}(#{@object.primary_keys.inspect})"
|
1339
1345
|
debug_str += " (#{@params.inspect})" unless @params.empty?
|
1340
1346
|
Spider::Logger.debug debug_str
|
1341
1347
|
@object.mapper.execute_action(@action, @object, @params)
|
@@ -1415,7 +1421,8 @@ module Spider; module Model
|
|
1415
1421
|
end
|
1416
1422
|
def message
|
1417
1423
|
Spider::GetText.in_domain('spider') do
|
1418
|
-
|
1424
|
+
element = @element.is_a?(Element) ? @element.label : @element
|
1425
|
+
_(self.class.msg) % element
|
1419
1426
|
end
|
1420
1427
|
end
|
1421
1428
|
def to_s
|
@@ -74,7 +74,7 @@ module Spider; module Model; module Storage; module Db
|
|
74
74
|
class << self; attr_reader :reserved_kewords, :type_synonyms, :safe_conversions, :field_types, :field_flags end
|
75
75
|
|
76
76
|
def self.new_connection(host=nil, user=nil, passwd=nil, db=nil, port=nil, sock=nil, flag=nil)
|
77
|
-
conn = ::Mysql.new(host, user, passwd, db, port, sock, flag)
|
77
|
+
conn = ::Mysql.new(host, user, passwd, db, port.to_i, sock, flag)
|
78
78
|
conn.autocommit(true)
|
79
79
|
conn.query("SET NAMES 'utf8'")
|
80
80
|
return conn
|
@@ -222,56 +222,60 @@ module Spider; module Model; module Storage; module Db
|
|
222
222
|
query_finished
|
223
223
|
release if curr[:conn] && !in_transaction?
|
224
224
|
end
|
225
|
-
|
225
|
+
end
|
226
226
|
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
227
|
+
def prepare(sql)
|
228
|
+
debug("mysql preparing: #{sql}")
|
229
|
+
return curr[:stmt] = connection.prepare(sql)
|
230
|
+
end
|
231
231
|
|
232
|
-
|
233
|
-
|
234
|
-
|
232
|
+
def execute_statement(stmt, *bind_vars)
|
233
|
+
stmt.execute(*bind_vars)
|
234
|
+
end
|
235
235
|
|
236
|
-
|
237
|
-
|
238
|
-
|
236
|
+
def total_rows
|
237
|
+
return curr[:total_rows]
|
238
|
+
end
|
239
239
|
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
240
|
+
def prepare_value(type, value)
|
241
|
+
value = super(type, value)
|
242
|
+
return value unless value
|
243
|
+
case type.name
|
244
|
+
when 'String'
|
245
|
+
return value.to_s
|
246
|
+
when 'Date'
|
247
|
+
return value.strftime("%Y-%m-%d")
|
248
|
+
when 'DateTime'
|
249
|
+
return value.strftime("%Y-%m-%dT%H:%M:%S")
|
250
|
+
when 'Time'
|
251
|
+
return value.strftime("%H:%M:%S")
|
252
|
+
when 'Fixnum'
|
253
|
+
return value.to_i
|
254
|
+
end
|
255
|
+
return value
|
256
256
|
end
|
257
257
|
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
258
|
+
def value_to_mapper(type, value)
|
259
|
+
return unless value
|
260
|
+
begin
|
261
|
+
case type.name
|
262
|
+
when 'DateTime'
|
263
|
+
@@time_offset ||= DateTime.now.offset
|
264
|
+
return type.civil(value.year, value.month, value.day, value.hour, value.minute, value.second, @@time_offset)
|
265
|
+
when 'Date'
|
266
|
+
return type.civil(value.year, value.month, value.day)
|
267
|
+
when 'Time'
|
268
|
+
return type.local(2000, 1, 1, value.hour, value.minute, value.second)
|
269
|
+
end
|
270
|
+
return super(type, value)
|
271
|
+
rescue
|
272
|
+
return nil
|
273
|
+
end
|
274
|
+
end
|
271
275
|
|
272
|
-
|
273
|
-
|
274
|
-
|
276
|
+
def last_insert_id
|
277
|
+
curr[:last_insert_id]
|
278
|
+
end
|
275
279
|
|
276
280
|
##############################################################
|
277
281
|
# SQL methods #
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'mysql'
|
2
|
+
|
3
|
+
module Spider; module Model; module Storage; module Db; module Connectors
|
4
|
+
|
5
|
+
module Mysql
|
6
|
+
|
7
|
+
def self.new_connection(host=nil, user=nil, passwd=nil, db=nil, port=nil, sock=nil, flag=nil)
|
8
|
+
conn = ::Mysql2::Client.new(
|
9
|
+
:host => host, :username => user, :password => passwd, :database => db, :port => port, :socket => sock
|
10
|
+
)
|
11
|
+
return conn
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
15
|
+
|
16
|
+
end; end; end; end; end
|
@@ -496,11 +496,6 @@ module Spider
|
|
496
496
|
|
497
497
|
private
|
498
498
|
|
499
|
-
def git_command(command)
|
500
|
-
#`GIT_SSH='ssh -i #{File.join(Spider.paths[:data], 'keys', 'spider.rsa')}' git #{command}`
|
501
|
-
`git #{command}`
|
502
|
-
end
|
503
|
-
|
504
499
|
def reset_git_env
|
505
500
|
ENV['GIT_WORK_TREE'] = nil
|
506
501
|
ENV["GIT_INDEX_FILE"] = nil
|
data/lib/spiderfw/spider.rb
CHANGED
@@ -191,6 +191,7 @@ module Spider
|
|
191
191
|
if Spider.conf.get('template.cache.reload_on_restart')
|
192
192
|
FileUtils.touch("#{Spider.paths[:tmp]}/templates_reload.txt")
|
193
193
|
end
|
194
|
+
check_clear_caches
|
194
195
|
unless Spider.runmode == 'test'
|
195
196
|
if domain = Spider.conf.get('site.domain')
|
196
197
|
ssl_port = Spider.conf.get('site.ssl') ? Spider.conf.get('site.ssl_port') : nil
|
@@ -223,7 +224,6 @@ module Spider
|
|
223
224
|
monitor.path(Spider.paths[:tmp], 'restart.txt') do
|
224
225
|
create { |base, relative| Process.kill 'HUP', $$ }
|
225
226
|
update { |base, relative| Process.kill 'HUP', $$ }
|
226
|
-
|
227
227
|
end
|
228
228
|
|
229
229
|
if Spider.conf.get('template.cache.use_fssm')
|
@@ -373,13 +373,38 @@ module Spider
|
|
373
373
|
def current
|
374
374
|
Spider::Request.current
|
375
375
|
end
|
376
|
+
|
377
|
+
|
378
|
+
def check_clear_caches
|
379
|
+
if File.exists?(Spider.paths[:clear_file])
|
380
|
+
stat = File.stat(Spider.paths[:clear_file])
|
381
|
+
last_reset_file = File.join(Spider.paths[:var], 'cache_cleared')
|
382
|
+
last_stat = File.exists?(last_reset_file) ? File.stat(last_reset_file) : nil
|
383
|
+
if !last_stat || stat.mtime > last_stat.mtime
|
384
|
+
Spider.clear_caches!
|
385
|
+
end
|
386
|
+
end
|
387
|
+
end
|
388
|
+
|
389
|
+
def clear_caches!
|
390
|
+
Spider.logger.info("Clearing caches")
|
391
|
+
FileUtils.touch(File.join(Spider.paths[:var], 'cache_cleared'))
|
392
|
+
Dir.new(Spider::Layout.compiled_folder_path).each do |entry|
|
393
|
+
next if ['.', '..'].include?(entry)
|
394
|
+
::FileUtils.rm_rf(File.join(Spider::Layout.compiled_folder_path, entry))
|
395
|
+
end
|
396
|
+
FileUtils.rm_rf(Spider::Template.cache_path)
|
397
|
+
end
|
398
|
+
|
399
|
+
def multithread?
|
400
|
+
return false if $SPIDER_SINGLE_THREADED || Spider.current[:multithread] == false
|
401
|
+
return true
|
402
|
+
end
|
376
403
|
|
377
404
|
# Called when a new request is started.
|
378
405
|
# @return [void]
|
379
406
|
def request_started
|
380
407
|
@request_mutex.lock if (@request_mutex)
|
381
|
-
if File.file?(Spider.paths[:reset_file])
|
382
|
-
end
|
383
408
|
Spider::Request.current = {
|
384
409
|
:_start => Time.now
|
385
410
|
}
|
@@ -461,7 +486,7 @@ module Spider
|
|
461
486
|
@paths[:data] = File.join(root, 'data')
|
462
487
|
@paths[:log] = File.join(@paths[:var], 'log')
|
463
488
|
@paths[:restart_file] = File.join(@paths[:tmp], 'restart.txt')
|
464
|
-
@paths[:
|
489
|
+
@paths[:clear_file] = File.join(@paths[:tmp], 'clear.txt')
|
465
490
|
@paths.each do |k, path|
|
466
491
|
@paths[k] = File.expand_path(File.readlink(path)) if File.symlink?(path)
|
467
492
|
end
|
@@ -1084,9 +1109,13 @@ module Spider
|
|
1084
1109
|
# so use cached locale if Locale.current fails
|
1085
1110
|
l = @current_locale
|
1086
1111
|
l ||= Locale::Tag.parse(Spider.conf.get('locale')) if Spider.conf.get('locale')
|
1087
|
-
l ||= Locale::Tag.parse('
|
1112
|
+
l ||= Locale::Tag.parse(Spider.conf.get('i18n.default_locale'))
|
1088
1113
|
end
|
1089
1114
|
end
|
1115
|
+
|
1116
|
+
def locale=(val)
|
1117
|
+
Locale.current = Locale::Tag.parse(val)
|
1118
|
+
end
|
1090
1119
|
|
1091
1120
|
# @param [Locale::Tag]
|
1092
1121
|
# @return [Spider::I18n::Provider] A provider for the given locale
|
@@ -15,7 +15,7 @@ module Spider
|
|
15
15
|
end
|
16
16
|
|
17
17
|
def render(*args)
|
18
|
-
$PUB_URL = Spider
|
18
|
+
$PUB_URL = Spider.home.controller.pub_url
|
19
19
|
prepare_assets unless @assets_prepared
|
20
20
|
super
|
21
21
|
end
|
@@ -67,7 +67,7 @@ module Spider
|
|
67
67
|
assets[:js].each do |ass|
|
68
68
|
if ass[:cpr]
|
69
69
|
compressed = compress_javascript(ass)
|
70
|
-
@template_assets[:js] << Spider
|
70
|
+
@template_assets[:js] << Spider.home.controller.pub_url+'/'+COMPILED_FOLDER+'/'+compressed
|
71
71
|
else
|
72
72
|
ass[:src] = ass[:cdn] if ass[:cdn] && use_cdn
|
73
73
|
@template_assets[:js] << ass[:src]
|
@@ -76,7 +76,7 @@ module Spider
|
|
76
76
|
assets[:css].each do |ass|
|
77
77
|
if ass[:cpr]
|
78
78
|
compressed = compress_css(ass)
|
79
|
-
@template_assets[:css] << Spider
|
79
|
+
@template_assets[:css] << Spider.home.controller.pub_url+'/'+COMPILED_FOLDER+'/'+compressed
|
80
80
|
else
|
81
81
|
ass[:src] = ass[:cdn] if ass[:cdn] && use_cdn
|
82
82
|
is_dyn = ass[:if_ie_lte] || ass[:media] || ass[:rel]
|
@@ -151,7 +151,7 @@ module Spider
|
|
151
151
|
end
|
152
152
|
src = name
|
153
153
|
end
|
154
|
-
ass[:src] = Spider
|
154
|
+
ass[:src] = Spider.home.controller.pub_url+'/'+COMPILED_FOLDER+'/'+src
|
155
155
|
assets[type] << ass
|
156
156
|
else # needs compression
|
157
157
|
name = ass[:compress] || @cname
|
@@ -196,7 +196,7 @@ module Spider
|
|
196
196
|
|
197
197
|
def all_assets
|
198
198
|
tpl_assets = @template.is_a?(Layout) ? @template.all_assets : @template.assets
|
199
|
-
assets =
|
199
|
+
assets = self.assets + tpl_assets
|
200
200
|
if @only_asset_profiles
|
201
201
|
assets = assets.select{ |ass| ass[:profiles] && !(ass[:profiles] & @only_asset_profiles).empty? }
|
202
202
|
end
|
@@ -209,7 +209,7 @@ module Spider
|
|
209
209
|
COMPILED_FOLDER = '_c'
|
210
210
|
|
211
211
|
def self.compiled_folder_path
|
212
|
-
File.join(Spider
|
212
|
+
File.join(Spider.home.controller.pub_path, COMPILED_FOLDER)
|
213
213
|
end
|
214
214
|
|
215
215
|
def asset_gettext_messages_file(path)
|
@@ -90,8 +90,7 @@ module Spider
|
|
90
90
|
config = Compass::Configuration::Data.new(:spider, options)
|
91
91
|
Compass.add_project_configuration(config)
|
92
92
|
compiler = Compass::Compiler.new(work_dir, File.dirname(src), File.dirname(dest), options)
|
93
|
-
|
94
|
-
compiler.compile(src, dest) if compiler.out_of_date?
|
93
|
+
compiler.run
|
95
94
|
else
|
96
95
|
engine = Sass::Engine.for_file(src, {})
|
97
96
|
output = engine.render
|
@@ -45,9 +45,12 @@ module Spider
|
|
45
45
|
|
46
46
|
class << self
|
47
47
|
|
48
|
+
def cache_path
|
49
|
+
File.join(Spider.paths[:var], 'cache', 'templates')
|
50
|
+
end
|
48
51
|
# Returns the class TemplateCache instance
|
49
52
|
def cache
|
50
|
-
@@cache ||= TemplateCache.new(
|
53
|
+
@@cache ||= TemplateCache.new(self.cache_path)
|
51
54
|
end
|
52
55
|
|
53
56
|
# Sets allowed blocks
|
@@ -408,6 +411,7 @@ module Spider
|
|
408
411
|
raise "Asset type not given for #{src}" unless type
|
409
412
|
search_classes = [asset_owner]
|
410
413
|
search_classes << @definer_class if @definer_class
|
414
|
+
search_classes << Spider.home
|
411
415
|
dfnr = @definer_class.superclass if @definer_class && @definer_class.respond_to?(:superclass)
|
412
416
|
while dfnr && dfnr < Spider::Widget
|
413
417
|
search_classes << dfnr
|