Sha256: ebe4b316c71340611f1008ea0d236be4c60a9c7f9b1a4a1ba8f4e95bd4863337

Contents?: true

Size: 1.87 KB

Versions: 10

Compression:

Stored size: 1.87 KB

Contents

require 'nokogiri'

module Trackman
  module Scaffold
    module ContentSaver      
      def self.included(base)
        class << base; attr_accessor :nodes_to_remove, :nodes_to_edit, :mappings; end
        base.nodes_to_remove = {}
        base.nodes_to_edit = {}

        if defined?(Rails)
          base.mappings = { :maintenance => '503', :maintenance_error => '503-error' }
          base.mappings.merge!({:not_found => '404', :error => '500'}) if ::Rails::VERSION::STRING =~ /^2\./
        else
          base.mappings = {}
        end
        base.extend ClassMethods
      end

      
      module ClassMethods
        def edit selector, &block
          raise 'block parameter is mandatory' unless block_given?
          nodes_to_edit[selector] = block
        end
        def remove selector, &predicate
          nodes_to_remove[selector] = predicate
        end
      end

      protected
        def remove_nodes doc
          self.class.nodes_to_remove.each do |selector, predicate| 
            nodes = doc.search(selector)
            nodes = nodes.select(&predicate) unless predicate.nil?
            nodes.each{|n| n.remove }
          end
          doc
        end

        def edit_nodes doc
          self.class.nodes_to_edit.each do |selector, block|
            doc.search(selector).each { |n| block.call(n) }
          end
          doc
        end

        def save_content
          to_write = self.class.mappings[params[:action].to_sym]
          
          unless to_write.nil?
            path = "/public/#{to_write}.html"

            xsl = Nokogiri::XSLT(File.open("#{File.dirname(__FILE__)}/pretty-print.xslt"))
            html = Nokogiri::HTML(response.body)
          
            edit_nodes html
            remove_nodes html
          
            File.open(Rails.root.to_s + path, 'w') { |f| f.write(xsl.apply_to(html).to_s) } 
          end
        end
    end
  end
end

Version data entries

10 entries across 10 versions & 1 rubygems

Version Path
trackman-0.6.0 lib/trackman/scaffold/content_saver.rb
trackman-0.5.8 lib/trackman/scaffold/content_saver.rb
trackman-0.5.7 lib/trackman/scaffold/content_saver.rb
trackman-0.5.6 lib/trackman/scaffold/content_saver.rb
trackman-0.5.5 lib/trackman/scaffold/content_saver.rb
trackman-0.5.4 lib/trackman/scaffold/content_saver.rb
trackman-0.5.3 lib/trackman/scaffold/content_saver.rb
trackman-0.5.2 lib/trackman/scaffold/content_saver.rb
trackman-0.5.1 lib/trackman/scaffold/content_saver.rb
trackman-0.5.0 lib/trackman/scaffold/content_saver.rb