Sha256: 9f7210f5f4f37aaf1133f23205291ba663c93834e6453139515c1e83e6e28278

Contents?: true

Size: 1.83 KB

Versions: 32

Compression:

Stored size: 1.83 KB

Contents

require "juicer/chainable"

# Merge several files into one single output file
module Juicer
  module Merger
    class Base
      include Chainable
      attr_accessor :dependency_resolver
      attr_reader :files

      def initialize(files = [], options = {})
        @files = []
        @root = nil
        @options = options
        @dependency_resolver ||= nil
        self.append files
      end

      #
      # Append contents to output. Resolves dependencies and adds
      # required files recursively
      # file = A file to add to merged content
      #
      def append(file)
        return file.each { |f| self << f } if file.class == Array
        return if @files.include?(file)

        if !@dependency_resolver.nil?
          path = File.expand_path(file)
          resolve_dependencies(path)
        elsif !@files.include?(file)
          @files << file
        end
      end

      alias_method :<<, :append

      #
      # Save the merged contents. If a filename is given the new file is
      # written. If a stream is provided, contents are written to it.
      #
      def save(file_or_stream)
        output = file_or_stream

        if output.is_a? String
          @root = Pathname.new(File.dirname(File.expand_path(output)))
          output = File.open(output, 'w')
        else
          @root = Pathname.new(File.expand_path("."))
        end

        @files.each do |f|
          output.puts(merge(f))
        end

        output.close if file_or_stream.is_a? String
      end

      chain_method :save

     private
      def resolve_dependencies(file)
        @files.concat @dependency_resolver.resolve(file)
        @files.uniq!
      end

      # Fetch contents of a single file. May be overridden in subclasses to provide
      # custom content filtering
      def merge(file)
        IO.read(file) + "\n"
      end
    end
  end
end

Version data entries

32 entries across 32 versions & 3 rubygems

Version Path
juicer-1.2.0 lib/juicer/merger/base.rb
juicer-1.1.2 lib/juicer/merger/base.rb
juicer-1.1.1 lib/juicer/merger/base.rb
juicer-1.1.0 lib/juicer/merger/base.rb
juicer-1.0.22 lib/juicer/merger/base.rb
juicer-1.0.21 lib/juicer/merger/base.rb
juicer-1.0.20 lib/juicer/merger/base.rb
juicer-1.0.19 lib/juicer/merger/base.rb
juicer-1.0.18 lib/juicer/merger/base.rb
juicer-1.0.17 lib/juicer/merger/base.rb
juicer-1.0.16 lib/juicer/merger/base.rb
juicer-1.0.15 lib/juicer/merger/base.rb
juicer-1.0.14 lib/juicer/merger/base.rb
juicer-1.0.13 lib/juicer/merger/base.rb
psyho_juicer-1.0.11 lib/juicer/merger/base.rb
juicer-1.0.12 lib/juicer/merger/base.rb
juicer-1.0.11 lib/juicer/merger/base.rb
juicer-1.0.10 lib/juicer/merger/base.rb
psyho_juicer-1.0.9 lib/juicer/merger/base.rb
juicer-1.0.9 lib/juicer/merger/base.rb