merged cont.
[opensuse:yast-rest-service.git] / webservice / app / models / resource.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 #
21 # Resource class
22 #
23
24 class Resource < BaseModel::Base
25   require 'resource_registration'
26   attr_accessor :policy, :interface, :href, :singular, :cache_enabled, :cache_priority, :cache_reload_after, :cache_arguments
27
28   def initialize (interface, impl_hash)
29     @interface = interface
30     @policy    = impl_hash[:policy] || ""
31     @singular  = impl_hash[:singular]
32     @href = "/#{impl_hash[:controller]}"
33     @cache_enabled = impl_hash[:cache_enabled]
34     @cache_priority = impl_hash[:cache_priority]
35     @cache_reload_after = impl_hash[:cache_reload_after]
36     @cache_arguments = impl_hash[:cache_arguments]
37   end
38
39   def self.find(what)
40     # There is no reload mechansim for the cache. So fetch it directly
41     return Rails.cache.fetch("resource:find:#{what.inspect}") {
42       case what
43         when :all then
44           resources = []
45           ResourceRegistration.resources.sort.each do |interface,implementations|
46             implementations.each do |impl|
47               resources << new(interface,impl)
48             end
49           end
50           resources
51         else
52           implementations = ResourceRegistration.resources[what]
53           implementations ? new(what, implementations.first) : nil
54       end
55     }
56   end
57 end