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