OSDN Git Service

fix: heroku
[pettanr/pettanr.git] / lib / manifest / system_resource.rb
1 require_dependency "manifest/system_resource/template"
2 module Manifest
3   class SystemResource
4     include SystemResourceModule
5     def self.set_default system_resource_manifest
6       system_resource_manifest['templates'] ||= {}
7       system_resource_manifest['select_items'] ||= {}
8       #oh my ...
9       #JSON.stringify couldn't print 1.0 
10       # 1 == 1.0 ?
11       #change class
12       system_resource_manifest['select_items']['speech_font_size_items'] ||= {}
13       system_resource_manifest['select_items']['speech_font_size_items'].each {|conf|
14         conf[1] = conf[1].to_f 
15       }
16       system_resource_manifest
17     end
18     
19     attr :templates, :select_items
20     def initialize manifest, system_resource_manifest
21       @manifest = manifest
22       @system_resource_manifest = system_resource_manifest
23       @templates = Template.manager(self, @system_resource_manifest['templates'])
24       @select_items = system_resource_manifest['select_items']
25     end
26     
27     # call after load app
28     def init
29       self.select_items_loader
30     end
31     
32     def select_items_loader
33       @manifest.models.each {|model_name, model_manifest|
34         model_manifest.attributes.each {|attribute_name, attribute_manifest|
35           source_manifest = attribute_manifest.source
36           next unless source_manifest
37           next unless source_manifest.type == 'model'
38           resource_item_name = source_manifest.resource_item_name
39           resource_action_name = source_manifest.resource_action_name
40           caption = source_manifest.caption_name
41           resource_controller_name = ::Manifest.manifest.pluralize(resource_item_name)
42           my_controller = Manifest.manifest.controllers[resource_controller_name]
43           my_action = my_controller.actions[resource_action_name]
44           list = my_action.find page_size: -1
45           @select_items[source_manifest.select_item_name] = 
46             list.map {|item| [item.attributes[caption], item.id]}
47         }
48       }
49     end
50     
51   end
52 end
53