lib/ffprober/ffmpeg/finder.rb in ffprober-0.5.5 vs lib/ffprober/ffmpeg/finder.rb in ffprober-1.0

- old
+ new

@@ -1,27 +1,48 @@ +# typed: strong # frozen_string_literal: true module Ffprober module Ffmpeg class Finder - SEARCH_PATHS = ENV['PATH'] + extend T::Sig + SEARCH_PATHS = T.let(ENV['PATH'], T.nilable(String)) - def self.path - raise Ffprober::NoFfprobeFound if executable_path.nil? - @path ||= File.expand_path(executable_name, executable_path) + sig { returns(String) } + attr_reader :executable_name + + sig { void } + def initialize + @executable_path = T.let(nil, T.nilable(String)) + @executable_name = T.let(executable_name_picker, String) + @path = T.let(nil, T.nilable(String)) end - def self.executable_name - @executable_name ||= windows? ? 'ffprobe.exe' : 'ffprobe' + sig { returns(String) } + def path + raise Ffprober::NoFfprobeFound, 'ffprobe executable not found' if executable_path.nil? + + @path ||= File.expand_path(executable_name, executable_path) end - def self.windows? + sig { returns(T::Boolean) } + def windows? !(RUBY_PLATFORM =~ /(mingw|mswin)/).nil? end - def self.executable_path + sig { returns(String) } + def executable_name_picker + if windows? + T.let('ffprobe.exe', String) + else + T.let('ffprobe', String) + end + end + + sig { returns(T.nilable(String)) } + def executable_path @executable_path ||= begin - SEARCH_PATHS.split(File::PATH_SEPARATOR).detect do |path_to_check| + T.must(SEARCH_PATHS).split(File::PATH_SEPARATOR).detect do |path_to_check| File.executable?(File.join(path_to_check, executable_name)) end end end end