lib/qooxview/storage_handler.rb in qooxview-1.9.10 vs lib/qooxview/storage_handler.rb in qooxview-1.9.11
- old
+ new
@@ -109,11 +109,11 @@
end
# Searching of misuse in search_all - found and accepted misuses can take
# search_all_
def search_all
- log_msg :StorageHandler, "Search_all for #{self.name} in #{caller.inspect}"
+ # log_msg :StorageHandler, "Search_all for #{self.name} in #{caller.inspect}"
search_all_
end
# Similar to find_by, but searches multiple instances that are similar to the
# value, returns the instances
@@ -132,10 +132,39 @@
end
}
return result.uniq
end
+ # Similar to search_by, but searches multiple instances that contain all elements
+ # of 'values'
+ def search_by_all(field, values)
+ #dputs_func
+ result = []
+ field = field.to_sym
+ @data.each_key { |k|
+ #dputs( 5 ){ "Searching :#{value}: in #{field} of #{k} which is :#{@data[k][field.to_sym]}:" }
+ if @data[k]
+ found_data = true
+ values.each { |value|
+ found = false
+ [@data[k][field]].flatten.each { |d|
+ dputs(4) { "Searching for #{value.inspect} in #{k}: #{d.inspect}" }
+ if d.to_s =~ /#{value.to_s}/i
+ found = true
+ end
+ }
+ found_data &= found
+ }
+ if found_data
+ dputs(4) { "Found data-entry #{k}: #{@data[k].inspect}" }
+ result.push get_data_instance(k)
+ end
+ end
+ }
+ return result.uniq
+ end
+
# Like search_by, but only ONE EXACT match
def match_by(field, value)
field = field.to_sym
v = value.is_a?(Entity) ? value.id : value.to_s
@data.each_key { |k|
@@ -168,11 +197,13 @@
res = res.select { |r|
dputs(5) { "Searching results for #{[r, k, filter[k]].inspect}" }
r.has_key? k and r[k].to_s =~ /#{filter[k].to_s}/i
}
}
- res
+ res.map{|r|
+ get_data_instance(r[@data_field_id])
+ }
end
def new_id
# last_id = 1
# if @data.keys.length > 0
@@ -339,42 +370,46 @@
end
version = mv.version + 1
dputs(3) { "Checking for migration_#{version} of #{@name}" }
while self.respond_to?(vers_str = "migration_#{version}".to_sym) ||
self.respond_to?(vers_str = "migration_#{version}_raw".to_sym)
- log_msg :Migration, "Migrating #{@name} to version #{version}, calling #{vers_str}"
- dputs(4) { "Working on #{data.inspect}" }
- @data.each { |k, v|
- if vers_str.to_s =~ /_raw$/
- dputs(4) { "Sending raw data of #{v.inspect}" }
- send vers_str, v
- dputs(4) { "raw data is now #{v.inspect}" }
- #@data[k] = v
- else
- inst = get_data_instance(k)
- dputs(4) { "Sending #{inst.inspect}" }
- send vers_str, inst
- end
- }
- dputs(5) { "Data is now #{@data.inspect}" }
+ if @dont_migrate
+ log_msg :Migration, "Just counting migrations for #{name}: #{version}"
+ else
+ # log_msg :Migration, "Migrating #{@name} to version #{version}, calling #{vers_str}"
+ dputs(4) { "Working on #{data.inspect}" }
+ @data.each { |k, v|
+ if vers_str.to_s =~ /_raw$/
+ dputs(4) { "Sending raw data of #{v.inspect}" }
+ send vers_str, v
+ dputs(4) { "raw data is now #{v.inspect}" }
+ #@data[k] = v
+ else
+ inst = get_data_instance(k)
+ dputs(4) { "Sending #{inst.inspect}" }
+ send vers_str, inst
+ end
+ }
+ dputs(5) { "Data is now #{@data.inspect}" }
+ @changed = true
+ end
mv.version = version
version += 1
- @changed = true
end
@changed and save
end
def load(has_static = true)
#dputs_func
return if @is_loaded
dep = RPCQooxdooService.needs["Entities.#{self.class.name}"]
dputs(2) { "Loading #{self.class.name} - #{dep}" }
if dep
- dep.each{|pre|
+ dep.each { |pre|
pre_class = RPCQooxdooService.services[pre]
pre_class.is_loaded and next
- dputs(3){"Pre-loading #{pre}"}
+ dputs(3) { "Pre-loading #{pre}" }
pre_class.load
}
end
@data = {}
@data_instances = {}
@@ -382,10 +417,15 @@
@storage.each { |k, di|
dputs(5) { "Loading #{k} at #{di.name} with #{di.inspect}" }
@data.merge!(di.load) { |k, o, n| o.merge(n) }
dputs(5) { "Loaded #{@data.inspect} for #{self.name}" }
}
+ if @data.length == 0 && respond_to?(:init)
+ dputs(1) { "Calling init for #{self.name}" }
+ init
+ @dont_migrate = true
+ end
@last_id = @data.length > 0 ? @data.to_a.last[0] : 1
has_static and @static = Statics.get_hash("Entities.#{@name}")
@is_loaded = true
respond_to?(:loaded) and loaded
@@ -409,9 +449,10 @@
di.delete_all(local_only)
}
@static = Statics.get_hash("Entities.#{@name}")
@last_id = 1
@is_loaded = false
+ @dont_migrate = false
end
def create_key(name)
name = name.to_sym
if @keys.has_key? name