beanieboi/ffprober

View on GitHub
lib/ffprober/parser.rb

Summary

Maintainability
A
0 mins
Test Coverage
# typed: strict
# frozen_string_literal: true

module Ffprober
  class Parser
    extend T::Sig

    sig { params(file_to_parse: String).returns(Ffprober::Wrapper) }
    def self.from_file(file_to_parse)
      check_version

      raise EmptyInput, file_to_parse if File.empty?(file_to_parse)

      file_parser = Parsers::FileParser.new(file_to_parse)
      json_parser = file_parser.load
      Ffprober::Wrapper.new(json_parser.json)
    end

    sig { params(url_to_parse: T.untyped).returns(Ffprober::Wrapper) }
    def self.from_url(url_to_parse)
      check_version

      url_parser = Parsers::UrlParser.new(url_to_parse)
      json_parser = url_parser.load
      Ffprober::Wrapper.new(json_parser.json)
    end

    sig { params(json_to_parse: T.untyped).returns(Ffprober::Wrapper) }
    def self.from_json(json_to_parse)
      json_parser = Parsers::JsonParser.new(json_to_parse)
      Ffprober::Wrapper.new(json_parser.json)
    end

    sig { returns(NilClass) }
    def self.check_version
      msg = "found version: #{FfprobeVersion.version}"
      raise UnsupportedVersion, msg if FfprobeVersion.invalid?
    end
  end
end