1 class Scroll < Peta::Binder
3 has_many :scroll_panels
6 has_many :panels, :through => :scroll_panels
8 validates :title, :presence => true, :length => {:maximum => 100}
9 validates :visible, :presence => true, :numericality => true, :inclusion => {:in => 0..1}
10 validates :author_id, :presence => true, :numericality => true, :existence => {:both => false}
12 scope :find_index, -> do
13 where(arel_table[:visible].gt 0)
16 scope :find_private, -> (operators) do
17 where(author_id: operators.author.id)
20 scope :find_by_author, -> (author_id) do
21 find_index.where(author_id: author_id)
24 scope :with_panels, -> do
25 includes(scroll_panels: :panel)
28 scope :find_by_panel, -> (panel_id) do
29 with_panels.find_index.where(Panel.arel_table[:id].eq panel_id).references(:panel)
33 def self.find_play(id)
34 ScrollPanel.find_play(id)
37 # scope of find_private_play
38 def self.find_private_play(id, operators)
39 ScrollPanel.find_private_play(id, operators)
43 self.visible = 0 if self.visible.blank?
47 def overwrite operators
48 return false unless operators.author
49 self.author_id = operators.author.id
53 def visible? operators
55 when nil # super return
64 def self.public_list_where list
69 {:include => {:scroll_panels => {:panel => {}}, :author => {}}}