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



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

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?
  (Comfy::Cms::Site.mirrored - [self.site]).collect do |site|
    case self
      when Comfy::Cms::Layout  then site.layouts.find_by_identifier(self.identifier)
      when Comfy::Cms::Page    then site.pages.find_by_full_path(self.full_path)
      when Comfy::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
72
# File 'lib/comfortable_mexican_sofa/extensions/is_mirrored.rb', line 35

def sync_mirror
  return if self.is_mirrored || !self.site.is_mirrored?
  
  (Comfy::Cms::Site.mirrored - [self.site]).each do |site|
    mirror = case self
    when Comfy::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 Comfy::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      => m.label.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 Comfy::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 => e
      logger.error(e.message)
      logger.error(e.backtrace.each{|line| error line })
    end
  end
end