Sha256: d69935e074b30db63ea624f44ad6455a8c01efa61d09dc264115934bb5829f30

Contents?: true

Size: 1.5 KB

Versions: 2

Compression:

Stored size: 1.5 KB

Contents

module FilterRename

  class FilterPipe
    attr_reader :source, :dest

    def initialize(fname, filters, cfg)
      # Filter params have to be reset for each file
      @cfg = cfg.filter.clone
      @source = FilenameFactory.create(fname, cfg.global)
      @dest = Marshal.load(Marshal.dump(@source))
      @filters = (filters.class == Array) ? filters : filters.filters
      @words = cfg.words
    end

    def changed?
      ! unchanged?
    end

    def unchanged?
      @source == @dest
    end
    alias_method :identical?, :unchanged?

    def diff
      @source.diff(@dest)
    end

    def apply

      @filters.each_with_index do |f, i|

        filter = f.keys.pop
        params = f.values.pop

        if [FilterRename::Filters::Config, FilterRename::Filters::Select].include? filter
          filter.new(@dest, cfg: @cfg, words: @words).filter(params)
        else
          filter.new(@dest, cfg: @cfg, words: @words).filter(params) unless skip?
        end

      end

      self
    end

    def rename!
      @source.rename!(@dest)
    end

    private

    def skip?
      if [:full_filename, :full_path, :filename].include? @cfg.grep_target.to_sym
        unmatched = instance_variable_get('@' + @cfg.grep_on.to_s).send(@cfg.grep_target.to_sym).match(Regexp.new(@cfg.grep)).nil?
      else
        unmatched = instance_variable_get('@' + @cfg.grep_on.to_s).get_string(@cfg.grep_target).match(Regexp.new(@cfg.grep)).nil?
      end

      @cfg.grep_exclude.to_s.to_boolean ? !unmatched : unmatched
    end

  end

end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
filter_rename-1.1.0 lib/filter_rename/filter_pipe.rb
filter_rename-1.0.0 lib/filter_rename/filter_pipe.rb