Sha256: 2663b446904162b21006aa8a570c66f1042171630855d3fd2f4c666889b19f6d

Contents?: true

Size: 1.75 KB

Versions: 5

Compression:

Stored size: 1.75 KB

Contents

module Spontaneous::Publishing::Steps
  class CopyStaticFiles < BaseStep

    def count
      facets.length
    end

    def call
      @progress.stage("copying files")
      ensure_public_dir
      facets.each do |facet|
        copy_facet(facet)
        @progress.step(1, "from #{facet.name.inspect}")
      end
    end

    def rollback
      FileUtils.rm_r(revision_public) if File.exists?(revision_public)
    end

    def ensure_public_dir
      dir = revision_public
    end

    def copy_facet(facet)
      sources(facet).each do |dir|
        copy_files(facet, dir)
      end
    end

    def copy_files(facet, dir)
      files(dir).each do |source, path|
        copy_file(facet, source, path)
      end
    end

    def copy_file(facet, source, path)
      dest = File.join([revision_public, facet.file_namespace, path].compact)
      dir = File.dirname(dest)
      FileUtils.mkdir_p(dir) unless File.exist?(dir)
      link_file(source, dest)
    end

    def link_file(source, dest)
      src_dev = File::stat(source).dev
      dst_dev = File::stat(File.dirname(dest)).dev
      if (src_dev == dst_dev)
        FileUtils.ln(source, dest, :force => true)
      else
        FileUtils.cp(source, dest)
      end
    end

    def files(dir)
      Dir["#{dir}/**/*"]
      .reject {|path| ::File.directory?(path) }
      .map { |path| [path, Pathname.new(path).relative_path_from(dir).to_s] }
    end

    def revision_public
      @public_dest ||= Pathname.new(Spontaneous.revision_dir(revision) / 'public').tap do |path|
        FileUtils.mkdir_p(path) unless File.exists?(path)
      end
    end

    def facets
      @site.facets
    end

    def sources(facet)
      facet.paths.expanded(:public).map { |dir| Pathname.new(dir) }.select(&:exist?).map(&:realpath)
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
spontaneous-0.2.0.beta10 lib/spontaneous/publishing/steps/copy_static_files.rb
spontaneous-0.2.0.beta9 lib/spontaneous/publishing/steps/copy_static_files.rb
spontaneous-0.2.0.beta8 lib/spontaneous/publishing/steps/copy_static_files.rb
spontaneous-0.2.0.beta7 lib/spontaneous/publishing/steps/copy_static_files.rb
spontaneous-0.2.0.beta6 lib/spontaneous/publishing/steps/copy_static_files.rb