Class: BitCore::Slideshow

Inherits:
ActiveRecord::Base
  • Object
show all
Defined in:
app/models/bit_core/slideshow.rb

Overview

A collection of ordered Slides.

Instance Method Summary collapse

Instance Method Details

#add(slide_params) ⇒ Object



34
35
36
37
38
39
# File 'app/models/bit_core/slideshow.rb', line 34

def add(slide_params)
  slide = slides.build(slide_params)
  slide.position = slides.count + 1

  slide
end

#pretty_titleObject



22
23
24
25
26
27
28
29
30
31
32
# File 'app/models/bit_core/slideshow.rb', line 22

def pretty_title
  return "" if title.nil?

  Redcarpet::Markdown.new(
    Redcarpet::Render::HTML.new(
      filter_html: true,
      safe_links_only: true
    ),
    space_after_headers: true
  ).render(title).html_safe
end

#remove(slide) ⇒ Object



41
42
43
44
45
46
47
48
49
# File 'app/models/bit_core/slideshow.rb', line 41

def remove(slide)
  return false unless slide.destroy

  (slide.position + 1..slides.last.position).each do |pos|
    slides.find_by_position(pos).update(position: pos - 1)
  end

  true
end

#sort(ordered_ids) ⇒ Object



51
52
53
54
55
56
57
58
59
# File 'app/models/bit_core/slideshow.rb', line 51

def sort(ordered_ids)
  self.class.transaction do
    self.class.connection.execute "SET CONSTRAINTS " \
                                  "bit_core_slide_position DEFERRED"
    ordered_ids.each_with_index do |id, idx|
      slides.find(id).update_attribute(:position, idx + 1)
    end
  end
end