Sha256: e2c8834a9fdfbde19f0af62cd1ee70a09ad276e4d8fcb471c731089c46e41976

Contents?: true

Size: 1.83 KB

Versions: 64

Compression:

Stored size: 1.83 KB

Contents

# frozen_string_literal: true

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

module Aranha
  module Parsers
    # Lists pairs of source/target files in a directory.
    class SourceTargetFixtures
      require_sub __FILE__

      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|
          ::Aranha::Parsers::SourceTargetFixtures::SourceTargetFile.new(self, basename)
        end
      end

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

      def target_files
        r = []
        source_target_files.each do |st|
          r << st.target if st.target
        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 %w[. ..].include?(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 %w[. ..].include?(item)

          b = self.class.source_target_basename(item)
          basenames << b if b.present?
        end
        basenames
      end
    end
  end
end

Version data entries

64 entries across 64 versions & 2 rubygems

Version Path
aranha-parsers-0.21.0 lib/aranha/parsers/source_target_fixtures.rb
aranha-parsers-0.20.0 lib/aranha/parsers/source_target_fixtures.rb
eac_tools-0.69.1 sub/aranha-parsers/lib/aranha/parsers/source_target_fixtures.rb
aranha-parsers-0.19.1 lib/aranha/parsers/source_target_fixtures.rb
eac_tools-0.69.0 sub/aranha-parsers/lib/aranha/parsers/source_target_fixtures.rb
eac_tools-0.68.0 sub/aranha-parsers/lib/aranha/parsers/source_target_fixtures.rb
aranha-parsers-0.19.0 lib/aranha/parsers/source_target_fixtures.rb
eac_tools-0.67.1 sub/aranha-parsers/lib/aranha/parsers/source_target_fixtures.rb
eac_tools-0.67.0 sub/aranha-parsers/lib/aranha/parsers/source_target_fixtures.rb
eac_tools-0.66.0 sub/aranha-parsers/lib/aranha/parsers/source_target_fixtures.rb
eac_tools-0.65.1 sub/aranha-parsers/lib/aranha/parsers/source_target_fixtures.rb
aranha-parsers-0.18.0 lib/aranha/parsers/source_target_fixtures.rb
eac_tools-0.65.0 sub/aranha-parsers/lib/aranha/parsers/source_target_fixtures.rb
eac_tools-0.64.0 sub/aranha-parsers/lib/aranha/parsers/source_target_fixtures.rb
eac_tools-0.63.0 sub/aranha-parsers/lib/aranha/parsers/source_target_fixtures.rb
eac_tools-0.62.1 sub/aranha-parsers/lib/aranha/parsers/source_target_fixtures.rb
eac_tools-0.62.0 sub/aranha-parsers/lib/aranha/parsers/source_target_fixtures.rb
eac_tools-0.61.1 sub/aranha-parsers/lib/aranha/parsers/source_target_fixtures.rb
eac_tools-0.61.0 sub/aranha-parsers/lib/aranha/parsers/source_target_fixtures.rb
eac_tools-0.60.3 sub/aranha-parsers/lib/aranha/parsers/source_target_fixtures.rb