Sha256: dd713d5d297b7809d40777945231c48628e6ccea931806283312a82427d90da0

Contents?: true

Size: 1.73 KB

Versions: 4

Compression:

Stored size: 1.73 KB

Contents

# encoding: UTF-8
# frozen_string_literal: true

require 'active_support/core_ext/object'
require 'active_support/core_ext/string'
require 'yaml'

module Aranha
  module Parsers
    # Lists pairs of source/target files in a directory.
    class SourceTargetFixtures
      class << self
        def source_target_basename(file)
          m = /^(.+)\.(?:source|target)(?:\..+)?$/.match(File.basename(file))
          m ? m[1] : nil
        end
      end

      attr_reader :fixtures_directory

      def initialize(fixtures_directory)
        @fixtures_directory = fixtures_directory
      end

      def source_target_files
        sources_targets_basenames.map do |basename|
          OpenStruct.new(basename: basename, source: source_file(basename),
                         target: target_file(basename))
        end
      end

      def source_files
        r = []
        source_target_files.each do |st|
          r << st.source if st.source
        end
        r
      end

      def target_file(basename)
        fixture_file(basename, 'target')
      end

      def source_file(basename)
        fixture_file(basename, 'source')
      end

      private

      def fixture_file(basename, suffix)
        prefix = "#{basename}.#{suffix}"
        Dir.foreach(fixtures_directory) do |item|
          next if item == '.' || item == '..'
          return File.expand_path(item, fixtures_directory) if item.starts_with?(prefix)
        end
        nil
      end

      def sources_targets_basenames
        basenames = Set.new
        Dir.foreach(fixtures_directory) do |item|
          next if item == '.' || item == '..'
          b = self.class.source_target_basename(item)
          basenames << b if b.present?
        end
        basenames
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
aranha-parsers-0.2.2 lib/aranha/parsers/source_target_fixtures.rb
aranha-parsers-0.2.1 lib/aranha/parsers/source_target_fixtures.rb
aranha-parsers-0.2.0 lib/aranha/parsers/source_target_fixtures.rb
aranha-parsers-0.1.1 lib/aranha/parsers/source_target_fixtures.rb