merged cont.
[opensuse:yast-rest-service.git] / webyast / app / models / data_cache.rb
1 #--
2 # Webyast Webservice framework
3 #
4 # Copyright (C) 2009, 2010 Novell, Inc. 
5 #   This library is free software; you can redistribute it and/or modify
6 # it only under the terms of version 2.1 of the GNU Lesser General Public
7 # License as published by the Free Software Foundation. 
8 #
9 #   This library is distributed in the hope that it will be useful, but WITHOUT
10 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
11 # FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more 
12 # details. 
13 #
14 #   You should have received a copy of the GNU Lesser General Public
15 # License along with this library; if not, write to the Free Software 
16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17 #++
18
19 #
20 # DataCache class
21 #
22
23 class DataCache < ActiveRecord::Base
24   acts_as_static_record
25
26   def DataCache.extract_path_args(path)
27     path_array = path.split(":")
28     ret_array = path_array[0,2]
29     if path_array.size >= 4 && path_array[3] == "all"
30       ret_array << ":all"
31     elsif path_array.size >= 3
32       ret_array << path_array[2]
33     end
34     ret_array.join(":")
35   end
36
37   def DataCache.find_by_path(path)
38     data_cache = DataCache.find(:all) || [] #only find:all is cached
39     data_cache.delete_if{ |item|
40       self.extract_path_args(item.path) != self.extract_path_args(path)
41     }
42   end
43
44   def DataCache.find_by_path_and_session(path,session)
45     data_cache = DataCache.find(:all) || [] #only find:all is cached
46     data_cache.delete_if{ |item|
47       self.extract_path_args(item.path) != self.extract_path_args(path) || item.session != session 
48     }
49   end
50
51   def self.updated?(model, id, session)
52     path = YastCache.find_key(model, id)
53     data_cache = DataCache.find_by_path_and_session(path,session)
54     data_cache.each { |cache|
55       return true if !cache.refreshed_md5.blank? && cache.picked_md5 != cache.refreshed_md5
56     } unless data_cache.blank?
57     return false
58   end
59 end