OSDN Git Service

fix: finder
[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   scope :find_index, -> do
14     where(arel_table[:visible].gt 0)
15   end
16   
17   scope :find_private, -> (operators) do 
18     where(author_id: operators.author.id)
19   end
20   
21   scope :find_by_author, -> (author_id) do 
22     find_index.where(author_id: author_id)
23   end
24   
25   scope :with_panels, -> do
26     includes(sheet_panels: :panel)
27   end
28   
29   scope :find_by_panel, -> (panel_id) do 
30     with_panels.find_index.where(Panel.arel_table[:id].eq panel_id).references(:panel)
31   end
32   
33   scope :with_stories, -> do
34     includes(story_sheets: :story)
35   end
36   
37   scope :find_by_story, -> (story_id) do 
38     with_stories.find_index.where(Story.arel_table[:id].eq story_id).references(:story)
39   end
40   
41   # scope of find_play
42   def self.find_play(id)
43     SheetPanel.find_play(id)
44   end
45   
46   # scope of find_private_play
47   def self.find_private_play(id, operators)
48     SheetPanel.find_private_play(id, operators)
49   end
50   
51   def supply_default
52     self.visible = 0 if self.visible.blank?
53     self.author_id = nil
54   end
55   
56   def overwrite operators
57     return false unless operators.author
58     self.author_id = operators.author.id
59   end
60   
61   def visible? operators
62     case super
63     when nil # super return
64       return true
65     when false
66       return false
67     else
68       self.visible > 0
69     end
70   end
71   
72   def usable? operators
73     self.visible? operators
74   end
75   
76   def symbol_filename
77   end
78   
79   def self.public_list_where list
80     'sheets.visible > 0'
81   end
82   
83   def self.show_opt
84     {:include => {:sheet_panels => {:panel => {}}, :author => {}}}
85   end
86   
87   def self.show_json_opt
88     {:include => {:sheet_panels => {:include => {:panel => {}}}, :author => {}}}
89   end
90   
91   def scenario
92     panels.map {|panel|
93       panel.scenario
94     }.join
95   end
96   
97   def plain_scenario
98     panels.map {|panel|
99       panel.plain_scenario
100     }.join
101   end
102   
103   def licensed_pictures
104     r = {}
105     self.scenario_elements.each do |elm|
106       r.merge!(elm.licensed_pictures)
107     end
108     r
109   end
110   
111   def copyable?
112     r = true
113     self.elements_items.each do |elm|
114       next if elm.copyable?
115       r = false
116       break
117     end
118     r
119   end
120   
121 end