Sha256: 659fe0ba4a6d2a7aa7b7f94507fbbb0f410fa2f0d0d37d8dd0d08c0b9d50386e

Contents?: true

Size: 1.61 KB

Versions: 1

Compression:

Stored size: 1.61 KB

Contents

# This class is responsible for parsing plist
# from zip file or folder

require "plist"

module GoldenRose
  class Parser
    attr_accessor :folder_path
    attr_reader :parsed_test_summaries_plist, :parsed_info_plist, :parsed_build_logs

    def initialize(folder_path)
      @folder_path = folder_path
    end

    def parse!
      read_plists
      parse_plists
      parse_build_logs
      delete_extracted_files
      self
    end

    def source_type
      archive? ? :zip : :dir
    end

    private

    def read_plists
      @test_summaries_resource = FileResource.new(:test_summaries_plist, source_type, folder_path)
      @info_resource = FileResource.new(:info_plist, source_type, folder_path)
    end

    def parse_plists
      @parsed_test_summaries_plist = @test_summaries_resource.path ? Plist.parse_xml(@test_summaries_resource.path) : nil
      puts("Could not parse test_summaries.plist correctly") unless @parsed_test_summaries_plist
      @parsed_info_plist = Plist.parse_xml(@info_resource.path)
      fail GeneratingError, 'Could not parse Info.plist correctly.' unless @parsed_info_plist
    end

    def parse_build_logs
      build_log_path = Info.new(@parsed_info_plist).build_log_path
      @build_log_resource = FileResource.new(:build_log, source_type, folder_path, build_log_path)
      @parsed_build_logs = GoldenRose::BuildLog::Parser.new(@build_log_resource.path).parse!
    end

    def delete_extracted_files
      [@test_summaries_resource, @info_resource, @build_log_resource]
        .map(&:delete_extracted_file)
    end

    def archive?
      !(folder_path =~ /\.(?:rar|zip|tar.gz)$/).nil?
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
golden_rose-1.0.0.pre lib/golden_rose/parser.rb