OSDN Git Service

element
[pettanr/pettanr.git] / lib / peta / content.rb
1 module Peta
2   class Content < Item
3     self.abstract_class = true
4     
5     # Dynamic Methods
6     
7     def self._content?
8       self.my_manifest.content_model
9     end
10     
11     def self._owner_type
12       self.my_manifest.owner_type
13     end
14     
15     def self._owner_model
16       t = self.my_manifest.tree['owner']
17       return nil unless t
18       t.parent_model 
19     end
20     
21     def self._owner_column
22       self.owner_type.to_s + '_id'
23     end
24     
25     def self.load_manifest
26       super
27       # Class Methods
28       f = self._content?
29       define_singleton_method("content?") do 
30         f
31       end
32       t = self._owner_type
33       define_singleton_method("owner_type") do 
34         t
35       end
36       m = self._owner_model
37       define_singleton_method("owner_model") do 
38         m
39       end
40       define_singleton_method("parent_model") do |tree_name|
41         self.my_manifest.tree[tree_name].parent_model
42       end
43       o = self._owner_column
44       define_singleton_method("owner_column") do 
45         o
46       end
47       define_singleton_method("child_models") do  |tree_name|
48         self.my_manifest.child_models tree_name
49       end
50       # Instance Methods
51       define_method("parent_model") do |tree_name|
52         self.__send__ self.class.parent_model(tree_name).item_name
53       end
54       define_method("elements") do |tree_name|
55         self.my_manifest.child_element_names(tree_name).map {|element_name|
56           self.__send__ element_name
57         }
58       end
59     end
60     
61     # Class Methods
62     
63     def self.operator operators
64       return nil unless self.owner_type
65       operators.__send__ self.owner_type
66     end
67     
68     def self.public_list_where
69       ''
70     end
71     
72     def self.edit content_id, operators
73       content = self.find content_id, self.show_opt
74       raise ActiveRecord::Forbidden unless content.own?(operators)
75       content
76     end
77     # Instance Methods
78     
79     def owner_model
80       self.class.owner_model ? self.__send__(self.class.owner_model.item_name) : self
81     end
82     
83     def visible? operators
84       super
85       return true if owner_model.own?(operators)
86       true
87     end
88     
89     def own? operators
90       operator = self.class.operator operators
91       return false unless operator
92       owner_model.attributes[self.class.owner_column] == operator.id
93     end
94     
95   end
96 end
97