OSDN Git Service

classname rename to module_name
[pettanr/pettanr.git] / app / models / sheet.rb
1 class Sheet < Peta::Root
2   load_manifest
3   has_many :sheet_panels
4   has_many :story_sheets
5   belongs_to :author
6   
7   validates :caption, :presence => true, :length => {:maximum => 100}
8   validates :width, :presence => true, :numericality => true, :natural_number => true
9   validates :height, :presence => true, :numericality => true, :natural_number => true
10   validates :visible, :presence => true, :numericality => true, :inclusion => {:in => 0..1}
11   accepts_nested_attributes_for :sheet_panels, :allow_destroy => true
12   
13   def supply_default
14     self.visible = 0 if self.visible.blank?
15     self.author_id = nil
16   end
17   
18   def overwrite operators
19     return false unless operators.author
20     self.author_id = operators.author.id
21   end
22   
23   def visible? operators
24     case super
25     when nil # super return
26       return true
27     when false
28       return false
29     else
30       self.visible > 0
31     end
32   end
33   
34   def usable? operators
35     self.visible? operators
36   end
37   
38   def symbol_filename
39   end
40   
41   def self.public_list_where
42     'sheets.visible > 0'
43   end
44   
45   def self.show_opt
46     {:include => {:sheet_panels => {:panel => {}}, :author => {}}}
47   end
48   
49   def self.show_json_opt
50     {:include => {:sheet_panels => {:include => {:panel => {}}}, :author => {}}}
51   end
52   
53   def scenario
54     panels.map {|panel|
55       panel.scenario
56     }.join
57   end
58   
59   def plain_scenario
60     panels.map {|panel|
61       panel.plain_scenario
62     }.join
63   end
64   
65   def licensed_pictures
66     r = {}
67     self.scenario_elements.each do |elm|
68       r.merge!(elm.licensed_pictures)
69     end
70     r
71   end
72   
73   def copyable?
74     r = true
75     Sheet.each_element_class_names do |n|
76       self.elements_by_class_name(n).each do |elm|
77         next if elm.copyable?
78         r = false
79         break
80       end
81       break unless r
82     end
83     r
84   end
85   
86   def copy
87     attr = self.copy_attributes
88     Sheet.each_element_class_names do |n|
89       element_attr = Sheet.class_name_to_class(n).panelize(
90         self.elements_by_class_name(n).map {|elm|
91           elm.copy_attributes.merge elm.panel_attributes
92         }
93       )
94       attr.merge! element_attr
95     end
96     attr
97   end
98   
99 end