Module: ComfortableMexicanSofa::IsMirrored::InstanceMethods

Defined in:
lib/comfortable_mexican_sofa/extensions/is_mirrored.rb

Instance Method Summary collapse

Instance Method Details

#destroy_mirrorObject

Mirrors should be destroyed



74
75
76
77
78
79
80
# File 'lib/comfortable_mexican_sofa/extensions/is_mirrored.rb', line 74

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

#mirrorsObject

Mirrors of the object found on other sites



21
22
23
24
25
26
27
28
29
30
# File 'lib/comfortable_mexican_sofa/extensions/is_mirrored.rb', line 21

def mirrors
  return [] unless self.site.is_mirrored?
  (Cms::Site.mirrored - [self.site]).collect do |site|
    case self
      when Cms::Layout  then site.layouts.find_by_identifier(self.identifier)
      when Cms::Page    then site.pages.find_by_full_path(self.full_path)
      when Cms::Snippet then site.snippets.find_by_identifier(self.identifier)
    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.



35
36
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
70
71
# File 'lib/comfortable_mexican_sofa/extensions/is_mirrored.rb', line 35

def sync_mirror
  return if self.is_mirrored || !self.site.is_mirrored?
  
  (Cms::Site.mirrored - [self.site]).each do |site|
    mirror = case self
    when Cms::Layout
      m = site.layouts.find_by_identifier(self.identifier_was || self.identifier) || site.layouts.new
      m.attributes = {
        :identifier => self.identifier,
        :parent_id  => site.layouts.find_by_identifier(self.parent.try(:identifier)).try(:id)
      }
      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_id  => site.pages.find_by_full_path(self.parent.try(:full_path)).try(:id),
        :layout     => site.layouts.find_by_identifier(self.layout.try(:identifier))
      }
      m
    when Cms::Snippet
      m = site.snippets.find_by_identifier(self.identifier_was || self.identifier) || site.snippets.new
      m.attributes = {
        :identifier => self.identifier
      }
      m
    end
    
    mirror.is_mirrored = true
    begin
      mirror.save!
    rescue ActiveRecord::RecordInvalid
      logger.detailed_error($!)
    end
  end
end