Module: ComfortableMexicanSofa::IsMirrored::InstanceMethods

Defined in:
lib/comfortable_mexican_sofa/is_mirrored.rb

Instance Method Summary collapse

Instance Method Details

#destroy_mirrorObject

Mirrors should be destroyed



72
73
74
75
76
77
78
# File 'lib/comfortable_mexican_sofa/is_mirrored.rb', line 72

def destroy_mirror
  return if self.is_mirrored
  mirrors.each do |mirror|
    mirror.is_mirrored = true
    mirror.destroy
  end
end

#mirrorsObject

Mirrors of the object found on other sites



24
25
26
27
28
29
30
31
32
# File 'lib/comfortable_mexican_sofa/is_mirrored.rb', line 24

def mirrors
  (Cms::Site.all - [self.site]).collect do |site|
    case self
      when Cms::Layout  then site.layouts.find_by_slug(self.slug)
      when Cms::Page    then site.pages.find_by_full_path(self.full_path)
      when Cms::Snippet then site.snippets.find_by_slug(self.slug)
    end
  end.compact
end

#sync_mirrorObject

Creating or updating a mirror object. Relationships are mirrored but content is unique. When updating need to grab mirrors based on self.slug_was, new objects will use self.slug.



37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# File 'lib/comfortable_mexican_sofa/is_mirrored.rb', line 37

def sync_mirror
  return if self.is_mirrored
  
  (Cms::Site.all - [self.site]).each do |site|
    mirror = case self
    when Cms::Layout
      m = site.layouts.find_by_slug(self.slug_was || self.slug) || site.layouts.new
      m.attributes = {
        :slug   => self.slug,
        :parent => site.layouts.find_by_slug(self.parent.try(:slug))
      }
      m
    when Cms::Page
      m = site.pages.find_by_full_path(self.full_path_was || self.full_path) || site.pages.new
      m.attributes = {
        :slug   => self.slug,
        :label  => self.slug.blank?? self.label : m.label,
        :parent => site.pages.find_by_full_path(self.parent.try(:full_path)),
        :layout => site.layouts.find_by_slug(self.layout.slug)
      }
      m
    when Cms::Snippet
      m = site.snippets.find_by_slug(self.slug_was || self.slug) || site.snippets.new
      m.attributes = {
        :slug => self.slug
      }
      m
    end
    
    mirror.is_mirrored = true
    mirror.save!
  end
end