diff --git a/.github/workflows/ruby.yml b/.github/workflows/ruby.yml index a021189..a86cb9e 100644 --- a/.github/workflows/ruby.yml +++ b/.github/workflows/ruby.yml @@ -14,7 +14,7 @@ jobs: fail-fast: false matrix: os: [macos-latest, ubuntu-latest] - ruby-version: [2.7, 3.0, 3.1] + ruby-version: [3.1, 3.2, 3.3] runs-on: ${{ matrix.os }} continue-on-error: ${{ endsWith(matrix.ruby, 'head') }} steps: diff --git a/Gemfile b/Gemfile index 50756c6..da909ed 100644 --- a/Gemfile +++ b/Gemfile @@ -8,5 +8,14 @@ group :test do gem 'sorbet' end +group :development do + gem 'minitest', '~> 5' + gem 'rake', '~> 13.0' + gem 'rubocop', '~> 1' + gem 'rubocop-minitest' + gem 'rubocop-packaging' + gem 'rubocop-sorbet' +end + # Specify your gem's dependencies in ffprober.gemspec gemspec diff --git a/ffprober.gemspec b/ffprober.gemspec index 449bffb..7a6853d 100644 --- a/ffprober.gemspec +++ b/ffprober.gemspec @@ -34,13 +34,6 @@ Gem::Specification.new do |spec| spec.add_runtime_dependency 'sorbet-runtime' - spec.add_development_dependency 'minitest', '~> 5' - spec.add_development_dependency 'rake', '~> 13.0' - spec.add_development_dependency 'rubocop', '~> 1' - spec.add_development_dependency 'rubocop-minitest' - spec.add_development_dependency 'rubocop-packaging' - spec.add_development_dependency 'rubocop-sorbet' - spec.add_development_dependency 'simplecov', '~> 0.19' spec.metadata = { 'rubygems_mfa_required' => 'true' } diff --git a/lib/ffprober/ffmpeg/version.rb b/lib/ffprober/ffmpeg/version.rb index 6b046b6..3386d56 100644 --- a/lib/ffprober/ffmpeg/version.rb +++ b/lib/ffprober/ffmpeg/version.rb @@ -13,8 +13,8 @@ def initialize(ffprobe_exec = Ffprober::Ffmpeg::Exec.new) @parse_version = T.let(nil, T.nilable(T::Array[Integer])) end - VERSION_REGEX = T.let(/^(ffprobe|avprobe|ffmpeg) version (\d+)\.?(\d+)\.?(\d+)*/, Regexp) - NIGHTLY_REGEX = T.let(/^(ffprobe|avprobe|ffmpeg) version (N|git)-/, Regexp) + VERSION_REGEX = T.let(/^(ffprobe|avprobe|ffmpeg) version (\d+)\.?(\d+)\.?(\d+)*/.freeze, Regexp) + NIGHTLY_REGEX = T.let(/^(ffprobe|avprobe|ffmpeg) version (N|git)-/.freeze, Regexp) VERSION_FALLBACK = T.let([0, 0, 0].freeze, T::Array[Integer]) sig { returns(Gem::Version) } diff --git a/lib/ffprober/ffmpeg/version_validator.rb b/lib/ffprober/ffmpeg/version_validator.rb index 434659a..11236ef 100644 --- a/lib/ffprober/ffmpeg/version_validator.rb +++ b/lib/ffprober/ffmpeg/version_validator.rb @@ -22,7 +22,7 @@ def valid? sig { returns(T::Boolean) } def version_requirement_statisfied? - MIN_VERSION <= ffmpeg_version.version + ffmpeg_version.version >= MIN_VERSION end sig { returns(Ffprober::Ffmpeg::Version) } diff --git a/lib/ffprober/parser.rb b/lib/ffprober/parser.rb index e247d03..a35b6ed 100644 --- a/lib/ffprober/parser.rb +++ b/lib/ffprober/parser.rb @@ -9,7 +9,7 @@ class Parser def self.from_file(file_to_parse) check_version - raise EmptyInput, file_to_parse if File.zero?(file_to_parse) + raise EmptyInput, file_to_parse if File.empty?(file_to_parse) file_parser = Parsers::FileParser.new(file_to_parse) json_parser = file_parser.load diff --git a/lib/ffprober/parsers/url.rb b/lib/ffprober/parsers/url.rb index 830befa..b6c9d35 100644 --- a/lib/ffprober/parsers/url.rb +++ b/lib/ffprober/parsers/url.rb @@ -6,7 +6,7 @@ module Ffprober module Parsers class UrlParser - VALID_URI_REGEX = /\A#{URI::DEFAULT_PARSER.make_regexp}\z/ + VALID_URI_REGEX = /\A#{URI::DEFAULT_PARSER.make_regexp}\z/.freeze def initialize(url_to_parse, exec = Ffprober::Ffmpeg::Exec.new) raise ArgumentError, "#{url_to_parse} is not a valid URL" unless valid_url?(url_to_parse) diff --git a/test/ffmpeg/exec_test.rb b/test/ffmpeg/exec_test.rb index 0ae2d71..a837203 100644 --- a/test/ffmpeg/exec_test.rb +++ b/test/ffmpeg/exec_test.rb @@ -14,6 +14,7 @@ def test_output_without_ffmpeg finder = FakeFinder.new finder.path = nil exec = Ffprober::Ffmpeg::Exec.new(finder) + assert_equal '', exec.ffprobe_version_output end @@ -21,6 +22,7 @@ def test_output_with_ffmpeg finder = FakeFinder.new finder.path = fake_ffprobe_version_path exec = Ffprober::Ffmpeg::Exec.new(finder) + assert_equal "fake_version_output\n", exec.ffprobe_version_output end @@ -28,6 +30,7 @@ def test_json_output finder = FakeFinder.new finder.path = fake_ffprobe_output_path exec = Ffprober::Ffmpeg::Exec.new(finder) + assert_equal "fake_version_output\n", exec.json_output('') end end diff --git a/test/ffprober_test.rb b/test/ffprober_test.rb index cd3ff89..392bb3c 100644 --- a/test/ffprober_test.rb +++ b/test/ffprober_test.rb @@ -33,7 +33,7 @@ def test_json_input # rubocop:disable Minitest/MultipleAssertions def test_file_input - return unless Ffprober::FfprobeVersion.valid? + skip unless Ffprober::FfprobeVersion.valid? ffprobe = Ffprober::Parser.from_file( 'test/assets/301 extracting a ruby gem.m4v' @@ -60,7 +60,7 @@ def test_file_input # rubocop:disable Minitest/MultipleAssertions def test_url_input - return unless Ffprober::FfprobeVersion.valid? + skip unless Ffprober::FfprobeVersion.valid? path = File.join(assets_path, '301 extracting a ruby gem.m4v') url = "file://#{path}" @@ -84,7 +84,7 @@ def test_url_input # rubocop:enable Minitest/MultipleAssertions def test_error_response - return unless Ffprober::FfprobeVersion.valid? + skip unless Ffprober::FfprobeVersion.valid? err = assert_raises Ffprober::FfprobeError do Ffprober::Parser.from_url('http://localhost/notarealfile.mp4') diff --git a/test/parsers/url_test.rb b/test/parsers/url_test.rb index 9e3b6f4..8f48c93 100644 --- a/test/parsers/url_test.rb +++ b/test/parsers/url_test.rb @@ -38,6 +38,7 @@ def test_with_a_http_url fake_exec = FakeExec.new http_url = VALID_HTTP_URL url = UrlParser.new(http_url, fake_exec) + assert_instance_of JsonParser, url.load end @@ -45,6 +46,7 @@ def test_with_unescaped_url fake_exec = FakeExec.new http_url = UNESCAPED_URL url = UrlParser.new(http_url, fake_exec) + assert_instance_of JsonParser, url.load end @@ -52,6 +54,7 @@ def test_with_a_file_url fake_exec = FakeExec.new file_url = VALID_FILE_URL url = UrlParser.new(file_url, fake_exec) + assert_instance_of JsonParser, url.load end end