Sha256: 3f1eb801fbd7809e2895b8bb1a7cc4317709bc4b7e6f196b266912e7a66231f6

Contents?: true

Size: 1.48 KB

Versions: 17

Compression:

Stored size: 1.48 KB

Contents

module Models  
  module Extensions    
    module Page      
      module Parts  

        extend ActiveSupport::Concern

        included do
                              
          before_create { |p| p.parts << PagePart.build_body_part if p.parts.empty? }
          
        end 
        
        module InstanceMethods
          
          def parts_attributes=(attributes)    
            self.update_parts(attributes.values.map { |attrs| PagePart.new(attrs) })
          end
          
          def joined_parts
            self.parts.enabled.map(&:template).join('')
          end
          
          protected
          
          def update_parts(parts)
            performed = []

            # add / update
            parts.each do |part|
              if (existing = self.parts.detect { |p| p.id == part.id || p.slug == part.slug })
                existing.attributes = part.attributes.delete_if { |k, v| %w{_id slug}.include?(k) }
              else
                self.parts << (existing = part)
              end
              performed << existing unless existing.disabled?
            end

            # disable missing parts
            (self.parts.map(&:slug) - performed.map(&:slug)).each do |slug|
              self.parts.detect { |p| p.slug == slug }.disabled = true
            end
          end

          def update_parts!(new_parts)
            self.update_parts(new_parts)
            self.save
          end
          
        end        
      end      
    end    
  end  
end

Version data entries

17 entries across 17 versions & 1 rubygems

Version Path
locomotive_cms-0.0.3.3 app/models/extensions/page/parts.rb
locomotive_cms-0.0.3.1 app/models/extensions/page/parts.rb
locomotive_cms-0.0.2.9 app/models/extensions/page/parts.rb
locomotive_cms-0.0.2.8 app/models/extensions/page/parts.rb
locomotive_cms-0.0.2.7 app/models/extensions/page/parts.rb
locomotive_cms-0.0.2.6 app/models/extensions/page/parts.rb
locomotive_cms-0.0.2.5 app/models/extensions/page/parts.rb
locomotive_cms-0.0.2.4 app/models/extensions/page/parts.rb
locomotive_cms-0.0.2.3 app/models/extensions/page/parts.rb
locomotive_cms-0.0.2.2 app/models/extensions/page/parts.rb
locomotive_cms-0.0.2.1 app/models/extensions/page/parts.rb
locomotive_cms-0.0.2 app/models/extensions/page/parts.rb
locomotive_cms-0.0.1.4 app/models/extensions/page/parts.rb
locomotive_cms-0.0.1.3 app/models/extensions/page/parts.rb
locomotive_cms-0.0.1.2 app/models/extensions/page/parts.rb
locomotive_cms-0.0.1.1 app/models/extensions/page/parts.rb
locomotive_cms-0.0.1 app/models/extensions/page/parts.rb