OSDN Git Service

fix anything
[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       self.parent_model 
17     end
18     
19     def self._owner_column
20       self.owner_type.to_s + '_id'
21     end
22     
23     def self.load_manifest
24       super
25       # Class Methods
26       f = self._content?
27       define_singleton_method("content?") do 
28         f
29       end
30       t = self._owner_type
31       define_singleton_method("owner_type") do 
32         t
33       end
34       m = self._owner_model
35       define_singleton_method("owner_model") do 
36         m
37       end
38       o = self._owner_column
39       define_singleton_method("owner_column") do 
40         o
41       end
42       # Instance Methods
43       define_method("elements") do |tree_name|
44         self.my_manifest.child_element_names(tree_name).map {|element_name|
45           self.__send__ element_name
46         }
47       end
48     end
49     
50     # Class Methods
51     
52     def self.operator operators
53       return nil unless self.owner_type
54       operators.__send__ self.owner_type
55     end
56     
57     def self.public_list_where
58       ''
59     end
60     
61     def self.edit content_id, operators
62       content = self.find content_id, self.show_opt
63       raise ActiveRecord::Forbidden unless content.own?(operators)
64       content
65     end
66     
67     # Instance Methods
68     
69     def owner_model
70       self.class.owner_model ? self.__send__(self.class.owner_model.item_name) : self
71     end
72     
73     # super return if my item
74     def visible? operators
75       super
76       return nil if owner_model.own?(operators)
77       true
78     end
79     
80     def own? operators
81       operator = self.class.operator operators
82       return false unless operator
83       owner_model.attributes[self.class.owner_column] == operator.id
84     end
85     
86   end
87 end
88