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)
32 scope :find_play, -> (id) do
33 with_panels.find_index.where(id: id).references(:scroll_panels)
36 scope :find_private_play, -> (id, operators) do
37 with_panels.find_private(operators).where(self.arel_table[:id].eq id).references(:scroll_panels)
41 self.visible = 0 if self.visible.blank?
45 def overwrite operators
46 return false unless operators.author
47 self.author_id = operators.author.id
51 def visible? operators
53 when nil # super return
62 def self.public_list_where list
67 {:include => {:scroll_panels => {:panel => {}}, :author => {}}}