Sha256: ad96933961b4747fea28cf4e73c9a494c403c4126ac17b78e1a6e72e3778d44d

Contents?: true

Size: 1.26 KB

Versions: 3

Compression:

Stored size: 1.26 KB

Contents

require 'dply/helper'
module Dply
  class Linker

    include Helper

    attr_reader :src_dir, :dest_dir, :map

    def initialize(src_dir, dest_dir, map: {})
      verify_absolute src_dir, dest_dir
      @src_dir = src_dir
      @dest_dir = dest_dir
      @map = map
    end
    
    def create_symlinks
      mapped_files.each do |f|
        target = link_target(f)
        source = link_source(f)
        relative_source = link_relative_source(source, target)
        logger.debug "linking #{target} -> #{source}"
        symlink(relative_source, target)
      end
    end

    def link_target(relative_target)
      Pathname.new "#{dest_dir}/#{relative_target}"
    end

    def link_source(relative_target)
      relative_source = map[relative_target]
      Pathname.new "#{src_dir}/#{relative_source}"
    end

    def link_relative_source(source, target)
      source.relative_path_from target.parent
    end
    
    def mapped_files
      map.keys.collect do |k|
        path = Pathname.new k 
        raise "config map path cannot be absoulte" if path.absolute?
        k
      end
    end

    def verify_absolute(*paths)
      paths.each do |path|
        absolute = Pathname.new(path).absolute?
        raise "#{path} not absolute" if not absolute
      end
    end

  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
dply-0.0.8 lib/dply/linker.rb
dply-0.0.7 lib/dply/linker.rb
dply-0.0.5 lib/dply/linker.rb