From 894e2548645c8dba37d924c6c7921036b667786d Mon Sep 17 00:00:00 2001 From: Maxwell Weru Date: Mon, 19 Feb 2024 11:17:41 +0300 Subject: [PATCH] Update files imported from dependabot-updater as of 0.244.0 (#997) --- .rubocop.yml | 10 + Rakefile | 1 + update-files.ps1 | 72 +- updater/Gemfile | 12 +- updater/Gemfile.lock | 49 +- updater/lib/dependabot/api_client.rb | 4 +- updater/lib/dependabot/dependency_change.rb | 62 +- .../dependabot/dependency_change_builder.rb | 63 +- .../lib/dependabot/dependency_group_engine.rb | 50 +- updater/lib/dependabot/dependency_snapshot.rb | 116 +- updater/lib/dependabot/job.rb | 239 +- updater/lib/dependabot/sentry.rb | 21 + .../sentry/exception_sanitizer_processor.rb | 1 + updater/lib/dependabot/sentry/processor.rb | 9 - .../sentry/sentry_context_processor.rb | 13 +- updater/lib/dependabot/service.rb | 4 +- updater/lib/dependabot/setup.rb | 11 +- updater/lib/dependabot/sorbet/runtime.rb | 23 + .../updater/dependency_group_change_batch.rb | 5 + .../updater/group_update_creation.rb | 41 +- updater/lib/dependabot/updater/operations.rb | 8 +- ...eate_group_security_update_pull_request.rb | 101 - .../create_group_update_pull_request.rb | 2 +- .../operations/group_update_all_versions.rb | 30 +- ...resh_group_security_update_pull_request.rb | 100 - .../refresh_group_update_pull_request.rb | 7 +- .../refresh_version_update_pull_request.rb | 4 + .../updater/operations/update_all_versions.rb | 4 + .../updater/security_update_helpers.rb | 9 - updater/spec/dependabot/api_client_spec.rb | 10 +- .../spec/dependabot/dependency_change_spec.rb | 13 +- .../dependency_group_engine_spec.rb | 82 +- .../dependabot/file_fetcher_command_spec.rb | 359 +++ updater/spec/dependabot/job_spec.rb | 33 +- .../exception_sanitizer_processor_spec.rb | 2 + .../sentry/sentry_context_processor_spec.rb | 42 + updater/spec/dependabot/service_spec.rb | 37 +- .../dependabot/updater/operations_spec.rb | 30 +- .../spec/fixtures/bundler/original/sub_dep | 5 + .../fixtures/bundler/original/sub_dep.lock | 16 + .../spec/fixtures/bundler2/original/Gemfile | 6 + .../fixtures/bundler2/original/Gemfile.lock | 16 + .../spec/fixtures/bundler2/updated/Gemfile | 6 + .../fixtures/bundler2/updated/Gemfile.lock | 16 + .../fixtures/bundler_gemspec/updated/Gemfile | 3 + .../bundler_gemspec/updated/Gemfile.lock | 46 + .../bundler_gemspec/updated/library.gemspec | 12 + .../bundler_git/original/Gemfile.lock | 21 - .../fixtures/bundler_grouped/original/Gemfile | 7 + .../bundler_grouped/original/Gemfile.lock | 18 + .../bundler_grouped_by_types/original/Gemfile | 10 - .../original/Gemfile.lock | 35 - .../vendor/cache/dummy-pkg-a-2.0.0.gem | Bin 0 -> 4096 bytes .../vendor/cache/dummy-pkg-b-1.1.0.gem | Bin 0 -> 4096 bytes .../.bundlecache | 0 .../dummy-git-dependency.gemspec | 19 + .../bundler_vendored/updated/.bundle/config | 2 + .../updated}/Gemfile | 4 +- .../bundler_vendored/updated/Gemfile.lock | 26 + .../vendor/cache/dummy-pkg-a-2.0.0.gem | Bin 0 -> 4096 bytes .../vendor/cache/dummy-pkg-b-1.2.0.gem | Bin 0 -> 4096 bytes .../.bundlecache | 0 .../dummy-git-dependency.gemspec | 19 + .../fixtures/composer/original/composer.json | 7 + .../fixtures/composer/original/composer.lock | 65 + .../fixtures/composer/updated/composer.json | 7 + .../fixtures/composer/updated/composer.lock | 74 + updater/spec/fixtures/dummy/original/a.dummy | 1 + updater/spec/fixtures/dummy/original/b.dummy | 1 + .../fixtures/file_fetcher_output/output.json | 70 + .../file_fetcher_output/vendoring_output.json | 70 + updater/spec/fixtures/handle_error.json | 5 + .../group_update_multi_dir.yaml | 68 + .../group_update_all_by_dependency_type.yaml | 45 - .../group_update_all_overlapping_groups.yaml | 42 - .../group_update_all_semver_grouping.yaml | 40 - ...l_semver_grouping_with_global_ignores.yaml | 41 - .../group_update_all_with_ungrouped.yaml | 38 - .../group_update_peer_manifests.yaml} | 17 +- .../spec/fixtures/jobs/job_with_dummy.json | 41 + .../jobs/job_with_vendor_dependencies.json | 58 + .../jobs/job_without_credentials.json | 45 + .../_perform_job/does_not_clone_the_repo.yml | 302 ++ ...rites_the_fetched_files_to_output_json.yml | 294 ++ ...successful_and_does_not_raise_an_error.yml | 382 +++ ...ity_failed_and_does_not_raise_an_error.yml | 306 ++ ...pendencies_cannot_be_grouped_as_semver.yml | 505 ++++ ...odified_files_without_reporting_errors.yml | 2557 +++++++++++++++++ ...includes_changes_to_the_vendored_files.yml | 254 ++ updater/spec/spec_helper.rb | 3 + 90 files changed, 6586 insertions(+), 718 deletions(-) create mode 100644 updater/lib/dependabot/sentry.rb create mode 100644 updater/lib/dependabot/sorbet/runtime.rb delete mode 100644 updater/lib/dependabot/updater/operations/create_group_security_update_pull_request.rb delete mode 100644 updater/lib/dependabot/updater/operations/refresh_group_security_update_pull_request.rb create mode 100644 updater/spec/dependabot/file_fetcher_command_spec.rb create mode 100644 updater/spec/dependabot/sentry/sentry_context_processor_spec.rb create mode 100644 updater/spec/fixtures/bundler/original/sub_dep create mode 100644 updater/spec/fixtures/bundler/original/sub_dep.lock create mode 100644 updater/spec/fixtures/bundler2/original/Gemfile create mode 100644 updater/spec/fixtures/bundler2/original/Gemfile.lock create mode 100644 updater/spec/fixtures/bundler2/updated/Gemfile create mode 100644 updater/spec/fixtures/bundler2/updated/Gemfile.lock create mode 100644 updater/spec/fixtures/bundler_gemspec/updated/Gemfile create mode 100644 updater/spec/fixtures/bundler_gemspec/updated/Gemfile.lock create mode 100644 updater/spec/fixtures/bundler_gemspec/updated/library.gemspec delete mode 100644 updater/spec/fixtures/bundler_git/original/Gemfile.lock create mode 100644 updater/spec/fixtures/bundler_grouped/original/Gemfile create mode 100644 updater/spec/fixtures/bundler_grouped/original/Gemfile.lock delete mode 100644 updater/spec/fixtures/bundler_grouped_by_types/original/Gemfile delete mode 100644 updater/spec/fixtures/bundler_grouped_by_types/original/Gemfile.lock create mode 100644 updater/spec/fixtures/bundler_vendored/original/vendor/cache/dummy-pkg-a-2.0.0.gem create mode 100644 updater/spec/fixtures/bundler_vendored/original/vendor/cache/dummy-pkg-b-1.1.0.gem create mode 100644 updater/spec/fixtures/bundler_vendored/original/vendor/cache/ruby-dummy-git-dependency-20151f9b67c8/.bundlecache create mode 100644 updater/spec/fixtures/bundler_vendored/original/vendor/cache/ruby-dummy-git-dependency-20151f9b67c8/dummy-git-dependency.gemspec create mode 100644 updater/spec/fixtures/bundler_vendored/updated/.bundle/config rename updater/spec/fixtures/{bundler_git/original => bundler_vendored/updated}/Gemfile (53%) create mode 100644 updater/spec/fixtures/bundler_vendored/updated/Gemfile.lock create mode 100644 updater/spec/fixtures/bundler_vendored/updated/vendor/cache/dummy-pkg-a-2.0.0.gem create mode 100644 updater/spec/fixtures/bundler_vendored/updated/vendor/cache/dummy-pkg-b-1.2.0.gem create mode 100644 updater/spec/fixtures/bundler_vendored/updated/vendor/cache/ruby-dummy-git-dependency-c0e25c2eb332/.bundlecache create mode 100644 updater/spec/fixtures/bundler_vendored/updated/vendor/cache/ruby-dummy-git-dependency-c0e25c2eb332/dummy-git-dependency.gemspec create mode 100644 updater/spec/fixtures/composer/original/composer.json create mode 100644 updater/spec/fixtures/composer/original/composer.lock create mode 100644 updater/spec/fixtures/composer/updated/composer.json create mode 100644 updater/spec/fixtures/composer/updated/composer.lock create mode 100644 updater/spec/fixtures/dummy/original/a.dummy create mode 100644 updater/spec/fixtures/dummy/original/b.dummy create mode 100644 updater/spec/fixtures/file_fetcher_output/output.json create mode 100644 updater/spec/fixtures/file_fetcher_output/vendoring_output.json create mode 100644 updater/spec/fixtures/handle_error.json create mode 100644 updater/spec/fixtures/job_definitions/bundler/security_updates/group_update_multi_dir.yaml delete mode 100644 updater/spec/fixtures/job_definitions/bundler/version_updates/group_update_all_by_dependency_type.yaml delete mode 100644 updater/spec/fixtures/job_definitions/bundler/version_updates/group_update_all_overlapping_groups.yaml delete mode 100644 updater/spec/fixtures/job_definitions/bundler/version_updates/group_update_all_semver_grouping.yaml delete mode 100644 updater/spec/fixtures/job_definitions/bundler/version_updates/group_update_all_semver_grouping_with_global_ignores.yaml delete mode 100644 updater/spec/fixtures/job_definitions/bundler/version_updates/group_update_all_with_ungrouped.yaml rename updater/spec/fixtures/job_definitions/{bundler/version_updates/group_update_all_empty_group.yaml => dummy/version_updates/group_update_peer_manifests.yaml} (79%) create mode 100644 updater/spec/fixtures/jobs/job_with_dummy.json create mode 100644 updater/spec/fixtures/jobs/job_with_vendor_dependencies.json create mode 100644 updater/spec/fixtures/jobs/job_without_credentials.json create mode 100644 updater/spec/fixtures/vcr_cassettes/Dependabot_FileFetcherCommand/_perform_job/does_not_clone_the_repo.yml create mode 100644 updater/spec/fixtures/vcr_cassettes/Dependabot_FileFetcherCommand/_perform_job/fetches_the_files_and_writes_the_fetched_files_to_output_json.yml create mode 100644 updater/spec/fixtures/vcr_cassettes/Dependabot_FileFetcherCommand/_perform_job/when_the_connectivity_check_is_enabled/logs_connectivity_is_successful_and_does_not_raise_an_error.yml create mode 100644 updater/spec/fixtures/vcr_cassettes/Dependabot_FileFetcherCommand/_perform_job/when_the_connectivity_check_is_enabled/when_connectivity_is_broken/logs_connectivity_failed_and_does_not_raise_an_error.yml create mode 100644 updater/spec/fixtures/vcr_cassettes/Dependabot_Updater_Operations_GroupUpdateAllVersions/when_the_snapshot_contains_a_git_dependency/creates_individual_PRs_since_git_dependencies_cannot_be_grouped_as_semver.yml create mode 100644 updater/spec/fixtures/vcr_cassettes/Dependabot_Updater_Operations_GroupUpdateAllVersions/when_the_snapshot_is_updating_a_gemspec/creates_a_DependencyChange_for_just_the_modified_files_without_reporting_errors.yml create mode 100644 updater/spec/fixtures/vcr_cassettes/Dependabot_Updater_Operations_GroupUpdateAllVersions/when_the_snapshot_is_updating_vendored_dependencies/creates_a_pull_request_that_includes_changes_to_the_vendored_files.yml diff --git a/.rubocop.yml b/.rubocop.yml index 1c595291..af8a1386 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -1,6 +1,7 @@ --- require: - rubocop-performance + - rubocop-sorbet AllCops: DisplayCopNames: true @@ -331,6 +332,15 @@ Style/SpecialGlobalVars: Enabled: false Style/SelectByRegexp: Enabled: false +Sorbet/TrueSigil: + Exclude: + - "**/spec/**/*" +Sorbet/StrictSigil: + Exclude: + - "**/spec/**/*" +Sorbet/StrongSigil: + Exclude: + - "**/spec/**/*" # TODO these were temporarily disabled during the Ruby 2.7 -> 3.1 upgrade # in order to keep the upgrade diff small, they will be enabled/fixed in diff --git a/Rakefile b/Rakefile index 85ddb34f..43dc8855 100644 --- a/Rakefile +++ b/Rakefile @@ -31,6 +31,7 @@ require "yaml" # python/dependabot-python.gemspec # pub/dependabot-pub.gemspec # omnibus/dependabot-omnibus.gemspec +# silent/dependabot-silent.gemspec # swift/dependabot-swift.gemspec # devcontainers/dependabot-devcontainers.gemspec # ).freeze diff --git a/update-files.ps1 b/update-files.ps1 index dfc51b53..2b3295ae 100644 --- a/update-files.ps1 +++ b/update-files.ps1 @@ -12,7 +12,7 @@ Write-Output "Found dependabot-omnibus version: $version" # Prepare the list of files to be downloaded $files = @( ".ruby-version" - # ".rubocop.yml" + ".rubocop.yml" # "Rakefile" "updater/.rubocop.yml" @@ -26,11 +26,10 @@ $files = @( "updater/lib/dependabot/sentry/exception_sanitizer_processor.rb" "updater/lib/dependabot/sentry/processor.rb" "updater/lib/dependabot/sentry/sentry_context_processor.rb" - "updater/lib/dependabot/updater/operations/create_group_security_update_pull_request.rb" + "updater/lib/dependabot/sorbet/runtime.rb" "updater/lib/dependabot/updater/operations/create_group_update_pull_request.rb" "updater/lib/dependabot/updater/operations/create_security_update_pull_request.rb" "updater/lib/dependabot/updater/operations/group_update_all_versions.rb" - "updater/lib/dependabot/updater/operations/refresh_group_security_update_pull_request.rb" "updater/lib/dependabot/updater/operations/refresh_group_update_pull_request.rb" "updater/lib/dependabot/updater/operations/refresh_security_update_pull_request.rb" "updater/lib/dependabot/updater/operations/refresh_version_update_pull_request.rb" @@ -52,15 +51,16 @@ $files = @( "updater/lib/dependabot/file_fetcher_command.rb" "updater/lib/dependabot/job.rb" "updater/lib/dependabot/opentelemetry.rb" + "updater/lib/dependabot/sentry.rb" "updater/lib/dependabot/service.rb" "updater/lib/dependabot/setup.rb" "updater/lib/dependabot/update_files_command.rb" "updater/lib/dependabot/updater.rb" "updater/spec/dependabot/sentry/exception_sanitizer_processor_spec.rb" + "updater/spec/dependabot/sentry/sentry_context_processor_spec.rb" # "updater/spec/dependabot/updater/operations/group_update_all_versions_spec.rb" # "updater/spec/dependabot/updater/operations/refresh_group_update_pull_request_spec.rb" - # "updater/spec/dependabot/updater/operations/update_all_versions_spec.rb" "updater/spec/dependabot/updater/dependency_group_change_batch_spec.rb" "updater/spec/dependabot/updater/error_handler_spec.rb" "updater/spec/dependabot/updater/operations_spec.rb" @@ -70,49 +70,81 @@ $files = @( "updater/spec/dependabot/dependency_group_engine_spec.rb" # "updater/spec/dependabot/dependency_snapshot_spec.rb" "updater/spec/dependabot/environment_spec.rb" - # "updater/spec/dependabot/file_fetcher_command_spec.rb" - # "updater/spec/dependabot/integration_spec.rb" + "updater/spec/dependabot/file_fetcher_command_spec.rb" "updater/spec/dependabot/job_spec.rb" "updater/spec/dependabot/service_spec.rb" # "updater/spec/dependabot/update_files_command_spec.rb" # "updater/spec/dependabot/updater_spec.rb" + "updater/spec/fixtures/handle_error.json" "updater/spec/fixtures/rubygems-index" "updater/spec/fixtures/rubygems-info-a" - "updater/spec/fixtures/rubygems-versions-a.json" "updater/spec/fixtures/rubygems-info-b" + "updater/spec/fixtures/rubygems-versions-a.json" "updater/spec/fixtures/rubygems-versions-b.json" "updater/spec/fixtures/bundler/original/Gemfile" "updater/spec/fixtures/bundler/original/Gemfile.lock" + "updater/spec/fixtures/bundler/original/sub_dep" + "updater/spec/fixtures/bundler/original/sub_dep.lock" "updater/spec/fixtures/bundler/updated/Gemfile" "updater/spec/fixtures/bundler/updated/Gemfile.lock" + "updater/spec/fixtures/bundler2/original/Gemfile" + "updater/spec/fixtures/bundler2/original/Gemfile.lock" + "updater/spec/fixtures/bundler2/updated/Gemfile" + "updater/spec/fixtures/bundler2/updated/Gemfile.lock" "updater/spec/fixtures/bundler_gemspec/original/Gemfile" "updater/spec/fixtures/bundler_gemspec/original/Gemfile.lock" "updater/spec/fixtures/bundler_gemspec/original/library.gemspec" - "updater/spec/fixtures/bundler_git/original/Gemfile" - "updater/spec/fixtures/bundler_git/original/Gemfile.lock" - "updater/spec/fixtures/bundler_grouped_by_types/original/Gemfile" - "updater/spec/fixtures/bundler_grouped_by_types/original/Gemfile.lock" + "updater/spec/fixtures/bundler_gemspec/updated/Gemfile" + "updater/spec/fixtures/bundler_gemspec/updated/Gemfile.lock" + "updater/spec/fixtures/bundler_gemspec/updated/library.gemspec" + "updater/spec/fixtures/bundler_grouped/original/Gemfile" + "updater/spec/fixtures/bundler_grouped/original/Gemfile.lock" "updater/spec/fixtures/bundler_vendored/original/Gemfile" "updater/spec/fixtures/bundler_vendored/original/Gemfile.lock" + "updater/spec/fixtures/bundler_vendored/original/vendor/cache/dummy-pkg-a-2.0.0.gem" + "updater/spec/fixtures/bundler_vendored/original/vendor/cache/dummy-pkg-b-1.1.0.gem" + "updater/spec/fixtures/bundler_vendored/original/vendor/cache/ruby-dummy-git-dependency-20151f9b67c8/.bundlecache" + "updater/spec/fixtures/bundler_vendored/original/vendor/cache/ruby-dummy-git-dependency-20151f9b67c8/dummy-git-dependency.gemspec" + "updater/spec/fixtures/bundler_vendored/updated/Gemfile" + "updater/spec/fixtures/bundler_vendored/updated/Gemfile.lock" + "updater/spec/fixtures/bundler_vendored/updated/.bundle/config" + "updater/spec/fixtures/bundler_vendored/updated/vendor/cache/ruby-dummy-git-dependency-c0e25c2eb332/.bundlecache" + "updater/spec/fixtures/bundler_vendored/updated/vendor/cache/ruby-dummy-git-dependency-c0e25c2eb332/dummy-git-dependency.gemspec" + "updater/spec/fixtures/bundler_vendored/updated/vendor/cache/dummy-pkg-a-2.0.0.gem" + "updater/spec/fixtures/bundler_vendored/updated/vendor/cache/dummy-pkg-b-1.2.0.gem" + "updater/spec/fixtures/composer/original/composer.json" + "updater/spec/fixtures/composer/original/composer.lock" + "updater/spec/fixtures/composer/updated/composer.json" + "updater/spec/fixtures/composer/updated/composer.lock" + "updater/spec/fixtures/dummy/original/a.dummy" + "updater/spec/fixtures/dummy/original/b.dummy" + "updater/spec/fixtures/file_fetcher_output/output.json" + "updater/spec/fixtures/file_fetcher_output/vendoring_output.json" "updater/spec/fixtures/jobs/job_with_credentials.json" + "updater/spec/fixtures/jobs/job_with_dummy.json" + "updater/spec/fixtures/jobs/job_with_vendor_dependencies.json" + "updater/spec/fixtures/jobs/job_without_credentials.json" + "updater/spec/fixtures/job_definitions/bundler/security_updates/group_update_multi_dir.yaml" "updater/spec/fixtures/job_definitions/bundler/version_updates/group_update_all.yaml" - "updater/spec/fixtures/job_definitions/bundler/version_updates/group_update_all_by_dependency_type.yaml" - "updater/spec/fixtures/job_definitions/bundler/version_updates/group_update_all_empty_group.yaml" - "updater/spec/fixtures/job_definitions/bundler/version_updates/group_update_all_overlapping_groups.yaml" "updater/spec/fixtures/job_definitions/bundler/version_updates/group_update_all_with_existing_pr.yaml" - "updater/spec/fixtures/job_definitions/bundler/version_updates/group_update_all_with_ungrouped.yaml" "updater/spec/fixtures/job_definitions/bundler/version_updates/group_update_all_with_vendoring.yaml" - "updater/spec/fixtures/job_definitions/bundler/version_updates/group_update_all_semver_grouping_with_global_ignores.yaml" - "updater/spec/fixtures/job_definitions/bundler/version_updates/group_update_all_semver_grouping.yaml" "updater/spec/fixtures/job_definitions/bundler/version_updates/group_update_refresh.yaml" "updater/spec/fixtures/job_definitions/bundler/version_updates/group_update_refresh_dependencies_changed.yaml" "updater/spec/fixtures/job_definitions/bundler/version_updates/group_update_refresh_empty_group.yaml" "updater/spec/fixtures/job_definitions/bundler/version_updates/group_update_refresh_missing_group.yaml" - "updater/spec/fixtures/job_definitions/bundler/version_updates/group_update_refresh_versions_changed.yaml" "updater/spec/fixtures/job_definitions/bundler/version_updates/group_update_refresh_similar_pr.yaml" + "updater/spec/fixtures/job_definitions/bundler/version_updates/group_update_refresh_versions_changed.yaml" "updater/spec/fixtures/job_definitions/bundler/version_updates/update_all_simple.yaml" + "updater/spec/fixtures/job_definitions/dummy/version_updates/group_update_peer_manifests.yaml" "updater/spec/fixtures/job_definitions/README.md" + "updater/spec/fixtures/vcr_cassettes/Dependabot_FileFetcherCommand/_perform_job/when_the_connectivity_check_is_enabled/when_connectivity_is_broken/logs_connectivity_failed_and_does_not_raise_an_error.yml" + "updater/spec/fixtures/vcr_cassettes/Dependabot_FileFetcherCommand/_perform_job/when_the_connectivity_check_is_enabled/logs_connectivity_is_successful_and_does_not_raise_an_error.yml" + "updater/spec/fixtures/vcr_cassettes/Dependabot_FileFetcherCommand/_perform_job/does_not_clone_the_repo.yml" + "updater/spec/fixtures/vcr_cassettes/Dependabot_FileFetcherCommand/_perform_job/fetches_the_files_and_writes_the_fetched_files_to_output_json.yml" + "updater/spec/fixtures/vcr_cassettes/Dependabot_Updater_Operations_GroupUpdateAllVersions/when_the_snapshot_contains_a_git_dependency/creates_individual_PRs_since_git_dependencies_cannot_be_grouped_as_semver.yml" + "updater/spec/fixtures/vcr_cassettes/Dependabot_Updater_Operations_GroupUpdateAllVersions/when_the_snapshot_is_updating_a_gemspec/creates_a_DependencyChange_for_just_the_modified_files_without_reporting_errors.yml" + "updater/spec/fixtures/vcr_cassettes/Dependabot_Updater_Operations_GroupUpdateAllVersions/when_the_snapshot_is_updating_vendored_dependencies/creates_a_pull_request_that_includes_changes_to_the_vendored_files.yml" "updater/spec/support/dummy_package_manager/dummy.rb" "updater/spec/support/dummy_package_manager/file_fetcher.rb" @@ -133,11 +165,11 @@ foreach ($name in $files) { $sourceUrl = "$baseUrl/v$version/$($name)" $destinationPath = Join-Path -Path '.' -ChildPath "$name" - # Write-Host "`Downloading $name ..." + Write-Host "`Downloading $name ..." + # [System.IO.Directory]::CreateDirectory("$(Split-Path -Path "$destinationPath")") | Out-Null # Invoke-WebRequest -Uri $sourceUrl -OutFile $destinationPath - echo "Downloading $($name) ..." mkdir -p "$(dirname "$destinationPath")" curl -sL "$sourceUrl" -o "$destinationPath" } diff --git a/updater/Gemfile b/updater/Gemfile index 5a400a81..acc56276 100644 --- a/updater/Gemfile +++ b/updater/Gemfile @@ -21,13 +21,23 @@ gem "opentelemetry-instrumentation-faraday", "~> 0.23" gem "opentelemetry-instrumentation-http", "~> 0.23" gem "opentelemetry-instrumentation-net_http", "~> 0.22" gem "opentelemetry-sdk", "~> 1.4" -gem "sentry-ruby", "~> 5.1" +gem "sentry-opentelemetry", "~> 5.16" +gem "sentry-ruby", "~> 5.16" gem "terminal-table", "~> 3.0.2" group :test do + gem "debug" + gem "gpgme" + gem "rake" gem "rspec" + gem "rspec-its" + gem "rspec-sorbet" gem "rubocop" gem "rubocop-performance" + gem "rubocop-sorbet" + gem "stackprof" + gem "turbo_tests" gem "vcr" gem "webmock" + gem "webrick" end diff --git a/updater/Gemfile.lock b/updater/Gemfile.lock index fee8d560..e724a10b 100644 --- a/updater/Gemfile.lock +++ b/updater/Gemfile.lock @@ -28,6 +28,9 @@ GEM crack (1.0.0) bigdecimal rexml + debug (1.9.1) + irb (~> 1.10) + reline (>= 0.3.8) dependabot-bundler (0.244.0) dependabot-common (= 0.244.0) dependabot-cargo (0.244.0) @@ -124,11 +127,13 @@ GEM gitlab (4.19.0) httparty (~> 0.20) terminal-table (>= 1.5.1) - google-protobuf (3.25.2-aarch64-linux) - google-protobuf (3.25.2-arm64-darwin) - google-protobuf (3.25.2-x86_64-linux) + google-protobuf (3.25.3-aarch64-linux) + google-protobuf (3.25.3-arm64-darwin) + google-protobuf (3.25.3-x86_64-linux) googleapis-common-protos-types (1.11.0) google-protobuf (~> 3.18) + gpgme (2.0.24) + mini_portile2 (~> 2.7) hashdiff (1.1.0) http (5.2.0) addressable (~> 2.8) @@ -143,6 +148,10 @@ GEM httparty (0.21.0) mini_mime (>= 1.0.0) multi_xml (>= 0.5.2) + io-console (0.7.2) + irb (1.11.2) + rdoc + reline (>= 0.4.2) jmespath (1.6.2) json (2.6.3) language_server-protocol (3.17.0.3) @@ -153,6 +162,7 @@ GEM mime-types-data (~> 3.2015) mime-types-data (3.2024.0206) mini_mime (1.1.5) + mini_portile2 (2.8.5) multi_xml (0.6.0) netrc (0.11.0) nokogiri (1.16.2-aarch64-linux) @@ -202,6 +212,8 @@ GEM opentelemetry-semantic_conventions (1.10.0) opentelemetry-api (~> 1.0) parallel (1.24.0) + parallel_tests (4.5.1) + parallel parseconfig (1.0.8) parser (3.3.0.5) ast (~> 2.4.1) @@ -212,7 +224,11 @@ GEM racc (1.7.3) rainbow (3.1.1) rake (13.1.0) + rdoc (6.6.2) + psych (>= 4.0.0) regexp_parser (2.9.0) + reline (0.4.2) + io-console (~> 0.5) rest-client (2.1.0) http-accept (>= 1.7.0, < 2.0) http-cookie (>= 1.0.2, < 2.0) @@ -228,9 +244,14 @@ GEM rspec-expectations (3.13.0) diff-lcs (>= 1.2.0, < 2.0) rspec-support (~> 3.13.0) + rspec-its (1.3.0) + rspec-core (>= 3.0.0) + rspec-expectations (>= 3.0.0) rspec-mocks (3.13.0) diff-lcs (>= 1.2.0, < 2.0) rspec-support (~> 3.13.0) + rspec-sorbet (1.9.2) + sorbet-runtime rspec-support (3.13.0) rubocop (1.60.2) json (~> 2.3) @@ -248,26 +269,36 @@ GEM rubocop-performance (1.20.2) rubocop (>= 1.48.1, < 2.0) rubocop-ast (>= 1.30.0, < 2.0) + rubocop-sorbet (0.7.7) + rubocop (>= 0.90.0) ruby-progressbar (1.13.0) ruby2_keywords (0.0.5) rubyzip (2.3.2) sawyer (0.9.2) addressable (>= 2.3.5) faraday (>= 0.17.3, < 3) + sentry-opentelemetry (5.16.1) + opentelemetry-sdk (~> 1.0) + sentry-ruby (~> 5.16.1) sentry-ruby (5.16.1) concurrent-ruby (~> 1.0, >= 1.0.2) sorbet-runtime (0.5.11262) + stackprof (0.2.26) stringio (3.1.0) terminal-table (3.0.2) unicode-display_width (>= 1.1.1, < 3) toml-rb (2.2.0) citrus (~> 3.0, > 3.0) + turbo_tests (2.2.0) + parallel_tests (>= 3.3.0, < 5) + rspec (>= 3.10) unicode-display_width (2.5.0) vcr (6.2.0) webmock (3.20.0) addressable (>= 2.8.0) crack (>= 0.3.2) hashdiff (>= 0.4.0, < 2.0.0) + webrick (1.8.1) PLATFORMS aarch64-linux @@ -276,7 +307,9 @@ PLATFORMS x86_64-linux DEPENDENCIES + debug dependabot-omnibus (~> 0.244.0) + gpgme http (~> 5.2) octokit (= 6.1.1) opentelemetry-exporter-otlp (~> 0.26) @@ -285,13 +318,21 @@ DEPENDENCIES opentelemetry-instrumentation-http (~> 0.23) opentelemetry-instrumentation-net_http (~> 0.22) opentelemetry-sdk (~> 1.4) + rake rspec + rspec-its + rspec-sorbet rubocop rubocop-performance - sentry-ruby (~> 5.1) + rubocop-sorbet + sentry-opentelemetry (~> 5.16) + sentry-ruby (~> 5.16) + stackprof terminal-table (~> 3.0.2) + turbo_tests vcr webmock + webrick BUNDLED WITH 2.3.26 diff --git a/updater/lib/dependabot/api_client.rb b/updater/lib/dependabot/api_client.rb index 959d7f75..3e68699c 100644 --- a/updater/lib/dependabot/api_client.rb +++ b/updater/lib/dependabot/api_client.rb @@ -170,7 +170,7 @@ def mark_job_as_processed(base_commit_sha) span&.finish end - sig { params(dependencies: T::Array[T::Hash[Symbol, T.untyped]], dependency_files: T::Array[DependencyFile]).void } + sig { params(dependencies: T::Array[T::Hash[Symbol, T.untyped]], dependency_files: T::Array[String]).void } def update_dependency_list(dependencies, dependency_files) span = ::Dependabot::OpenTelemetry.tracer&.start_span("update_dependency_list", kind: :internal) span&.set_attribute(::Dependabot::OpenTelemetry::Attributes::JOB_ID, job_id) @@ -290,8 +290,6 @@ def create_pull_request_data(dependency_change, base_commit_sha) "base-commit-sha": base_commit_sha }.merge(dependency_group_hash(dependency_change)) - return data unless dependency_change.pr_message - data["commit-message"] = dependency_change.pr_message.commit_message data["pr-title"] = dependency_change.pr_message.pr_name data["pr-body"] = dependency_change.pr_message.pr_message diff --git a/updater/lib/dependabot/dependency_change.rb b/updater/lib/dependabot/dependency_change.rb index bba8ffba..529e83e8 100644 --- a/updater/lib/dependabot/dependency_change.rb +++ b/updater/lib/dependabot/dependency_change.rb @@ -1,6 +1,8 @@ -# typed: true +# typed: strict # frozen_string_literal: true +require "sorbet-runtime" + # This class describes a change to the project's Dependencies which has been # determined by a Dependabot operation. # @@ -12,19 +14,42 @@ # by adapters to create a Pull Request, apply the changes on disk, etc. module Dependabot class DependencyChange - attr_reader :job, :updated_dependencies, :updated_dependency_files, :dependency_group + extend T::Sig + + sig { returns(Dependabot::Job) } + attr_reader :job + + sig { returns(T::Array[Dependabot::Dependency]) } + attr_reader :updated_dependencies + + sig { returns(T::Array[Dependabot::DependencyFile]) } + attr_reader :updated_dependency_files + sig { returns(T.nilable(Dependabot::DependencyGroup)) } + attr_reader :dependency_group + + sig do + params( + job: Dependabot::Job, + updated_dependencies: T::Array[Dependabot::Dependency], + updated_dependency_files: T::Array[Dependabot::DependencyFile], + dependency_group: T.nilable(Dependabot::DependencyGroup) + ).void + end def initialize(job:, updated_dependencies:, updated_dependency_files:, dependency_group: nil) @job = job @updated_dependencies = updated_dependencies @updated_dependency_files = updated_dependency_files @dependency_group = dependency_group + + @pr_message = T.let(nil, T.nilable(Dependabot::PullRequestCreator::Message)) end + sig { returns(Dependabot::PullRequestCreator::Message) } def pr_message - return @pr_message if defined?(@pr_message) + return @pr_message unless @pr_message.nil? - case job.source&.provider + case job.source.provider when "github" pr_message_max_length = Dependabot::PullRequestCreator::Github::PR_DESCRIPTION_MAX_LENGTH when "azure" @@ -38,7 +63,7 @@ def pr_message pr_message_max_length = Dependabot::PullRequestCreator::Github::PR_DESCRIPTION_MAX_LENGTH end - @pr_message = Dependabot::PullRequestCreator::MessageBuilder.new( + message = Dependabot::PullRequestCreator::MessageBuilder.new( source: job.source, dependencies: updated_dependencies, files: updated_dependency_files, @@ -49,18 +74,23 @@ def pr_message pr_message_encoding: pr_message_encoding, ignore_conditions: job.ignore_conditions ).message + + @pr_message = message end + sig { returns(String) } def humanized updated_dependencies.map do |dependency| "#{dependency.name} ( from #{dependency.humanized_previous_version} to #{dependency.humanized_version} )" end.join(", ") end + sig { returns(T::Array[T::Hash[String, T.untyped]]) } def updated_dependency_files_hash updated_dependency_files.map(&:to_h) end + sig { returns(T::Boolean) } def grouped_update? !!dependency_group end @@ -72,19 +102,17 @@ def grouped_update? # rather than supersede it as the new changes don't necessarily follow # from the previous ones; dependencies could have been removed from the # project, or pinned by other changes. + sig { returns(T::Boolean) } def should_replace_existing_pr? return false unless job.updating_a_pull_request? # NOTE: Gradle, Maven and Nuget dependency names can be case-insensitive # and the dependency name injected from a security advisory often doesn't # match what users have specified in their manifest. - updated_dependencies.map { |x| x.name.downcase }.uniq.sort != job.dependencies.map(&:downcase).uniq.sort - end - - def matches_existing_pr? - !!existing_pull_request + updated_dependencies.map { |x| x.name.downcase }.uniq.sort != T.must(job.dependencies).map(&:downcase).uniq.sort end + sig { params(dependency_changes: T::Array[DependencyChange]).void } def merge_changes!(dependency_changes) dependency_changes.each do |dependency_change| updated_dependencies.concat(dependency_change.updated_dependencies) @@ -94,20 +122,22 @@ def merge_changes!(dependency_changes) updated_dependency_files.compact! end - private - - def existing_pull_request + sig { returns(T::Boolean) } + def matches_existing_pr? if grouped_update? # We only want PRs for the same group that have the same versions - job.existing_group_pull_requests.find do |pr| - pr["dependency-group-name"] == dependency_group.name && + job.existing_group_pull_requests.any? do |pr| + pr["dependency-group-name"] == dependency_group&.name && Set.new(pr["dependencies"]) == updated_dependencies_set end else - job.existing_pull_requests.find { |pr| Set.new(pr) == updated_dependencies_set } + job.existing_pull_requests.any? { |pr| Set.new(pr) == updated_dependencies_set } end end + private + + sig { returns(T::Set[T::Hash[String, T.any(String, T::Boolean)]]) } def updated_dependencies_set Set.new( updated_dependencies.map do |dep| diff --git a/updater/lib/dependabot/dependency_change_builder.rb b/updater/lib/dependabot/dependency_change_builder.rb index fadf2233..6e09dcf2 100644 --- a/updater/lib/dependabot/dependency_change_builder.rb +++ b/updater/lib/dependabot/dependency_change_builder.rb @@ -1,6 +1,7 @@ -# typed: false +# typed: strong # frozen_string_literal: true +require "sorbet-runtime" require "dependabot/dependency" require "dependabot/dependency_change" require "dependabot/file_updaters" @@ -22,17 +23,47 @@ # a DependencyGroup module Dependabot class DependencyChangeBuilder - def self.create_from(**kwargs) - new(**kwargs).run + extend T::Sig + + sig do + params( + job: Dependabot::Job, + dependency_files: T::Array[Dependabot::DependencyFile], + updated_dependencies: T::Array[Dependabot::Dependency], + change_source: T.any(Dependabot::Dependency, Dependabot::DependencyGroup) + ).returns(Dependabot::DependencyChange) + end + def self.create_from(job:, dependency_files:, updated_dependencies:, change_source:) + new( + job: job, + dependency_files: dependency_files, + updated_dependencies: updated_dependencies, + change_source: change_source + ).run end + sig do + params( + job: Dependabot::Job, + dependency_files: T::Array[Dependabot::DependencyFile], + updated_dependencies: T::Array[Dependabot::Dependency], + change_source: T.any(Dependabot::Dependency, Dependabot::DependencyGroup) + ).void + end def initialize(job:, dependency_files:, updated_dependencies:, change_source:) @job = job - @dependency_files = dependency_files + + dir = Pathname.new(job.source.directory).cleanpath + @dependency_files = T.let(dependency_files.select { |f| Pathname.new(f.directory).cleanpath == dir }, + T::Array[Dependabot::DependencyFile]) + + raise "Missing directory in dependency files: #{dir}" unless @dependency_files.any? + @updated_dependencies = updated_dependencies @change_source = change_source end + sig { returns(Dependabot::DependencyChange) } def run updated_files = generate_dependency_files raise DependabotError, "FileUpdater failed" unless updated_files.any? @@ -47,7 +78,7 @@ def run d.version == d.previous_version end - updated_deps.each { |d| d.metadata[:directory] = job.source.directory } if job.source&.directory + updated_deps.each { |d| d.metadata[:directory] = job.source.directory } if job.source.directory Dependabot::DependencyChange.new( job: job, @@ -59,23 +90,36 @@ def run private - attr_reader :job, :dependency_files, :updated_dependencies, :change_source + sig { returns(Dependabot::Job) } + attr_reader :job + + sig { returns(T::Array[Dependabot::DependencyFile]) } + attr_reader :dependency_files + + sig { returns(T::Array[Dependabot::Dependency]) } + attr_reader :updated_dependencies + + sig { returns(T.any(Dependabot::Dependency, Dependabot::DependencyGroup)) } + attr_reader :change_source + sig { returns(T.nilable(String)) } def source_dependency_name return nil unless change_source.is_a? Dependabot::Dependency - change_source.name + T.cast(change_source, Dependabot::Dependency).name end + sig { returns(T.nilable(Dependabot::DependencyGroup)) } def source_dependency_group return nil unless change_source.is_a? Dependabot::DependencyGroup - change_source + T.cast(change_source, Dependabot::DependencyGroup) end + sig { returns(T::Array[Dependabot::DependencyFile]) } def generate_dependency_files if updated_dependencies.count == 1 - updated_dependency = updated_dependencies.first + updated_dependency = T.must(updated_dependencies.first) Dependabot.logger.info("Updating #{updated_dependency.name} from " \ "#{updated_dependency.previous_version} to " \ "#{updated_dependency.version}") @@ -91,6 +135,7 @@ def generate_dependency_files file_updater_for(relevant_dependencies).updated_dependency_files end + sig { params(dependencies: T::Array[Dependabot::Dependency]).returns(Dependabot::FileUpdaters::Base) } def file_updater_for(dependencies) Dependabot::FileUpdaters.for_package_manager(job.package_manager).new( dependencies: dependencies, diff --git a/updater/lib/dependabot/dependency_group_engine.rb b/updater/lib/dependabot/dependency_group_engine.rb index 830e78c9..9cd9fcaf 100644 --- a/updater/lib/dependabot/dependency_group_engine.rb +++ b/updater/lib/dependabot/dependency_group_engine.rb @@ -1,4 +1,4 @@ -# typed: true +# typed: strict # frozen_string_literal: true require "dependabot/dependency_group" @@ -11,29 +11,62 @@ # the groups. # # We permit dependencies to be in more than one group and also track those which -# have zero matches so they may be updated individuall. +# have zero matches so they may be updated individually. # # **Note:** This is currently an experimental feature which is not supported # in the service or as an integration point. # module Dependabot class DependencyGroupEngine + extend T::Sig + class ConfigurationError < StandardError; end + sig { params(job: Dependabot::Job).returns(Dependabot::DependencyGroupEngine) } def self.from_job_config(job:) + if job.security_updates_only? && job.source.directories && job.dependency_groups.empty? + # The indication that this should be a grouped update is: + # - We're using the DependencyGroupEngine which means this is a grouped update + # - This is a security update and there are multiple dependencies passed in + # Since there are no groups, the default behavior is to group all dependencies, so create a fake group. + job.dependency_groups << { + "name" => "#{job.package_manager} group", + "rules" => { "patterns" => ["*"] }, + "applies-to" => "security-updates" + } + + # This ensures refreshes work for these dynamic groups. + if job.updating_a_pull_request? + job.override_group_to_refresh_due_to_old_defaults(job.dependency_groups.first["name"]) + end + end + groups = job.dependency_groups.map do |group| - Dependabot::DependencyGroup.new(name: group["name"], rules: group["rules"]) + Dependabot::DependencyGroup.new(name: group["name"], rules: group["rules"], applies_to: group["applies-to"]) end + # Filter out version updates when doing security updates and visa versa + groups = if job.security_updates_only? + groups.select { |group| group.applies_to == "security-updates" } + else + groups.select { |group| group.applies_to == "version-updates" } + end + new(dependency_groups: groups) end - attr_reader :dependency_groups, :groups_calculated, :ungrouped_dependencies + sig { returns(T::Array[Dependabot::DependencyGroup]) } + attr_reader :dependency_groups + + sig { returns(T::Array[Dependabot::Dependency]) } + attr_reader :ungrouped_dependencies + sig { params(name: String).returns(T.nilable(Dependabot::DependencyGroup)) } def find_group(name:) dependency_groups.find { |group| group.name == name } end + sig { params(dependencies: T::Array[Dependabot::Dependency]).void } def assign_to_groups!(dependencies:) raise ConfigurationError, "dependency groups have already been configured!" if @groups_calculated @@ -59,24 +92,27 @@ def assign_to_groups!(dependencies:) private + sig { params(dependency_groups: T::Array[Dependabot::DependencyGroup]).void } def initialize(dependency_groups:) @dependency_groups = dependency_groups - @ungrouped_dependencies = [] - @groups_calculated = false + @ungrouped_dependencies = T.let([], T::Array[Dependabot::Dependency]) + @groups_calculated = T.let(false, T::Boolean) end + sig { void } def validate_groups empty_groups = dependency_groups.select { |group| group.dependencies.empty? } warn_misconfigured_groups(empty_groups) if empty_groups.any? end + sig { params(groups: T::Array[Dependabot::DependencyGroup]).void } def warn_misconfigured_groups(groups) Dependabot.logger.warn <<~WARN Please check your configuration as there are groups where no dependencies match: #{groups.map { |g| "- #{g.name}" }.join("\n")} This can happen if: - - the group's 'pattern' rules are mispelled + - the group's 'pattern' rules are misspelled - your configuration's 'allow' rules do not permit any of the dependencies that match the group - the dependencies that match the group rules have been removed from your project WARN diff --git a/updater/lib/dependabot/dependency_snapshot.rb b/updater/lib/dependabot/dependency_snapshot.rb index 6c345f80..914551bf 100644 --- a/updater/lib/dependabot/dependency_snapshot.rb +++ b/updater/lib/dependabot/dependency_snapshot.rb @@ -1,4 +1,4 @@ -# typed: true +# typed: strict # frozen_string_literal: true require "base64" @@ -12,6 +12,11 @@ # representing the output. module Dependabot class DependencySnapshot + extend T::Sig + + sig do + params(job: Dependabot::Job, job_definition: T::Hash[String, T.untyped]).returns(Dependabot::DependencySnapshot) + end def self.create_from_job_definition(job:, job_definition:) decoded_dependency_files = job_definition.fetch("base64_dependency_files").map do |a| file = Dependabot::DependencyFile.new(**a.transform_keys(&:to_sym)) @@ -28,51 +33,38 @@ def self.create_from_job_definition(job:, job_definition:) ) end - attr_reader :base_commit_sha, :dependency_files, :dependencies, :handled_dependencies + sig { returns(String) } + attr_reader :base_commit_sha - def add_handled_dependencies(dependency_names) - @handled_dependencies += Array(dependency_names) - end + sig { returns(T::Array[Dependabot::DependencyFile]) } + attr_reader :dependency_files - # Returns the subset of all project dependencies which are permitted - # by the project configuration. - def allowed_dependencies - @allowed_dependencies ||= dependencies.select { |d| job.allowed_update?(d) } - end + sig { returns(T::Array[Dependabot::Dependency]) } + attr_reader :dependencies - # Returns the subset of all project dependencies which are specifically - # requested to be updated by the job definition. - def job_dependencies - return [] unless job.dependencies&.any? - return @job_dependencies if defined? @job_dependencies + sig { returns(T::Set[String]) } + attr_reader :handled_dependencies - # Gradle, Maven and Nuget dependency names can be case-insensitive and - # the dependency name in the security advisory often doesn't match what - # users have specified in their manifest. - # - # It's technically possibly to publish case-sensitive npm packages to a - # private registry but shouldn't cause problems here as job.dependencies - # is set either from an existing PR rebase/recreate or a security - # advisory. - job_dependency_names = job.dependencies.map(&:downcase) - @job_dependencies = dependencies.select do |dep| - job_dependency_names.include?(dep.name.downcase) - end - end + sig { returns(T::Array[Dependabot::Dependency]) } + attr_reader :allowed_dependencies - # Returns just the group that is specifically requested to be updated by - # the job definition - def job_group - return nil unless job.dependency_group_to_refresh - return @job_group if defined?(@job_group) + sig { returns(T::Array[Dependabot::Dependency]) } + attr_reader :job_dependencies - @job_group = @dependency_group_engine.find_group(name: job.dependency_group_to_refresh) + sig { returns(T.nilable(Dependabot::DependencyGroup)) } + attr_reader :job_group + + sig { params(dependency_names: T.any(String, T::Array[String])).void } + def add_handled_dependencies(dependency_names) + @handled_dependencies += Array(dependency_names) end + sig { returns(T::Array[Dependabot::DependencyGroup]) } def groups @dependency_group_engine.dependency_groups end + sig { returns(T::Array[Dependabot::Dependency]) } def ungrouped_dependencies # If no groups are defined, all dependencies are ungrouped by default. return allowed_dependencies unless groups.any? @@ -83,24 +75,34 @@ def ungrouped_dependencies private + sig do + params(job: Dependabot::Job, base_commit_sha: String, dependency_files: T::Array[Dependabot::DependencyFile]).void + end def initialize(job:, base_commit_sha:, dependency_files:) @job = job @base_commit_sha = base_commit_sha @dependency_files = dependency_files - @handled_dependencies = Set.new + @handled_dependencies = T.let(Set.new, T::Set[String]) - @dependencies = parse_files! + @dependencies = T.let(parse_files!, T::Array[Dependabot::Dependency]) + @allowed_dependencies = T.let(calculate_allowed_dependencies, T::Array[Dependabot::Dependency]) + @job_dependencies = T.let(calculate_job_dependencies, T::Array[Dependabot::Dependency]) - @dependency_group_engine = DependencyGroupEngine.from_job_config(job: job) + @dependency_group_engine = T.let(DependencyGroupEngine.from_job_config(job: job), + Dependabot::DependencyGroupEngine) @dependency_group_engine.assign_to_groups!(dependencies: allowed_dependencies) + @job_group = T.let(calculate_job_group, T.nilable(Dependabot::DependencyGroup)) end + sig { returns(Dependabot::Job) } attr_reader :job + sig { returns(T::Array[Dependabot::Dependency]) } def parse_files! dependency_file_parser.parse end + sig { returns(Dependabot::FileParsers::Base) } def dependency_file_parser Dependabot::FileParsers.for_package_manager(job.package_manager).new( dependency_files: dependency_files, @@ -111,5 +113,45 @@ def dependency_file_parser options: job.experiments ) end + + # Returns the subset of all project dependencies which are permitted + # by the project configuration. + sig { returns(T::Array[Dependabot::Dependency]) } + def calculate_allowed_dependencies + if job.security_updates_only? + dependencies.select { |d| T.must(job.dependencies).include?(d.name) } + else + dependencies.select { |d| job.allowed_update?(d) } + end + end + + # Returns the subset of all project dependencies which are specifically + # requested to be updated by the job definition. + sig { returns(T::Array[Dependabot::Dependency]) } + def calculate_job_dependencies + return [] unless job.dependencies&.any? + + # Gradle, Maven and Nuget dependency names can be case-insensitive and + # the dependency name in the security advisory often doesn't match what + # users have specified in their manifest. + # + # It's technically possibly to publish case-sensitive npm packages to a + # private registry but shouldn't cause problems here as job.dependencies + # is set either from an existing PR rebase/recreate or a security + # advisory. + job_dependency_names = T.must(job.dependencies).map(&:downcase) + dependencies.select do |dep| + job_dependency_names.include?(dep.name.downcase) + end + end + + # Returns just the group that is specifically requested to be updated by + # the job definition + sig { returns(T.nilable(Dependabot::DependencyGroup)) } + def calculate_job_group + return nil unless job.dependency_group_to_refresh + + @dependency_group_engine.find_group(name: T.must(job.dependency_group_to_refresh)) + end end end diff --git a/updater/lib/dependabot/job.rb b/updater/lib/dependabot/job.rb index d079a60a..57b36320 100644 --- a/updater/lib/dependabot/job.rb +++ b/updater/lib/dependabot/job.rb @@ -1,6 +1,7 @@ -# typed: true +# typed: strict # frozen_string_literal: true +require "dependabot/credential" require "dependabot/config/ignore_condition" require "dependabot/config/update_config" require "dependabot/dependency_group_engine" @@ -16,12 +17,14 @@ # # See: https://github.com/dependabot/cli#job-description-file # -# This class should evenually be promoted to common/lib and augmented to +# This class should eventually be promoted to common/lib and augmented to # validate job description files. module Dependabot class Job - TOP_LEVEL_DEPENDENCY_TYPES = %w(direct production development).freeze - PERMITTED_KEYS = %i( + extend T::Sig + + TOP_LEVEL_DEPENDENCY_TYPES = T.let(%w(direct production development).freeze, T::Array[String]) + PERMITTED_KEYS = T.let(%i( allowed_updates commit_message_options dependencies @@ -43,87 +46,138 @@ class Job dependency_groups dependency_group_to_refresh repo_private - ).freeze - - attr_reader :allowed_updates, - :credentials, - :dependencies, - :existing_pull_requests, - :existing_group_pull_requests, - :id, - :ignore_conditions, - :package_manager, - :requirements_update_strategy, - :security_advisories, - :security_updates_only, - :source, - :token, - :vendor_dependencies, - :dependency_groups, - :dependency_group_to_refresh + ).freeze, T::Array[Symbol]) + + sig { returns(T::Array[T::Hash[String, T.untyped]]) } + attr_reader :allowed_updates + + sig { returns(T::Array[Dependabot::Credential]) } + attr_reader :credentials + + sig { returns(T.nilable(T::Array[String])) } + attr_reader :dependencies + + sig { returns(T::Array[T::Array[T::Hash[String, String]]]) } + attr_reader :existing_pull_requests + + sig { returns(T::Array[T::Hash[String, T.untyped]]) } + attr_reader :existing_group_pull_requests + + sig { returns(String) } + attr_reader :id + + sig { returns(T::Array[T.untyped]) } + attr_reader :ignore_conditions + + sig { returns(String) } + attr_reader :package_manager + + sig { returns(T.nilable(String)) } + attr_reader :requirements_update_strategy + + sig { returns(T::Array[T.untyped]) } + attr_reader :security_advisories + + sig { returns(T::Boolean) } + attr_reader :security_updates_only + + sig { returns(Dependabot::Source) } + attr_reader :source + + sig { returns(T.nilable(String)) } + attr_reader :token + + sig { returns(T::Boolean) } + attr_reader :vendor_dependencies + + sig { returns(T::Array[T.untyped]) } + attr_reader :dependency_groups + sig { returns(T.nilable(String)) } + attr_reader :dependency_group_to_refresh + + sig do + params(job_id: String, job_definition: T::Hash[String, T.untyped], + repo_contents_path: T.nilable(String)).returns(Job) + end def self.new_fetch_job(job_id:, job_definition:, repo_contents_path: nil) - attrs = standardise_keys(job_definition["job"]).slice(*PERMITTED_KEYS) + attrs = standardise_keys(job_definition["job"]).select { |k, _| PERMITTED_KEYS.include?(k) } new(attrs.merge(id: job_id, repo_contents_path: repo_contents_path)) end + sig do + params(job_id: String, job_definition: T::Hash[String, T.untyped], + repo_contents_path: T.nilable(String)).returns(Job) + end def self.new_update_job(job_id:, job_definition:, repo_contents_path: nil) job_hash = standardise_keys(job_definition["job"]) - attrs = job_hash.slice(*PERMITTED_KEYS) + attrs = job_hash.select { |k, _| PERMITTED_KEYS.include?(k) } attrs[:credentials] = job_hash[:credentials_metadata] || [] new(attrs.merge(id: job_id, repo_contents_path: repo_contents_path)) end + sig { params(hash: T::Hash[T.untyped, T.untyped]).returns(T::Hash[T.untyped, T.untyped]) } def self.standardise_keys(hash) hash.transform_keys { |key| key.tr("-", "_").to_sym } end # NOTE: "attributes" are fetched and injected at run time from # dependabot-api using the UpdateJobPrivateSerializer - def initialize(attributes) - @id = attributes.fetch(:id) - @allowed_updates = attributes.fetch(:allowed_updates) - @commit_message_options = attributes.fetch(:commit_message_options, {}) - @credentials = attributes.fetch(:credentials, []) - @dependencies = attributes.fetch(:dependencies) - @existing_pull_requests = attributes.fetch(:existing_pull_requests) + sig { params(attributes: T.untyped).void } + def initialize(attributes) # rubocop:disable Metrics/AbcSize + @id = T.let(attributes.fetch(:id), String) + @allowed_updates = T.let(attributes.fetch(:allowed_updates), T::Array[T.untyped]) + @commit_message_options = T.let(attributes.fetch(:commit_message_options, {}), + T.nilable(T::Hash[T.untyped, T.untyped])) + @credentials = T.let(attributes.fetch(:credentials, []).map do |data| + Dependabot::Credential.new(data) + end, + T::Array[Dependabot::Credential]) + @dependencies = T.let(attributes.fetch(:dependencies), T.nilable(T::Array[T.untyped])) + @existing_pull_requests = T.let(attributes.fetch(:existing_pull_requests), + T::Array[T::Array[T::Hash[String, String]]]) # TODO: Make this hash required # # We will need to do a pass updating the CLI and smoke tests before this is possible, # so let's consider it optional for now. If we get a nil value, let's force it to be # an array. - @existing_group_pull_requests = attributes.fetch(:existing_group_pull_requests, []) || [] - @experiments = attributes.fetch(:experiments, {}) - @ignore_conditions = attributes.fetch(:ignore_conditions) - @package_manager = attributes.fetch(:package_manager) - @reject_external_code = attributes.fetch(:reject_external_code, false) - @repo_contents_path = attributes.fetch(:repo_contents_path, nil) - - @requirements_update_strategy = build_update_strategy( - **attributes.slice(:requirements_update_strategy, :lockfile_only) - ) - - @security_advisories = attributes.fetch(:security_advisories) - @security_updates_only = attributes.fetch(:security_updates_only) - @source = build_source(attributes.fetch(:source)) - @token = attributes.fetch(:token, nil) - @update_subdependencies = attributes.fetch(:update_subdependencies) - @updating_a_pull_request = attributes.fetch(:updating_a_pull_request) - @vendor_dependencies = attributes.fetch(:vendor_dependencies, false) + @existing_group_pull_requests = T.let(attributes.fetch(:existing_group_pull_requests, []) || [], + T::Array[T::Hash[String, T.untyped]]) + @experiments = T.let(attributes.fetch(:experiments, {}), + T.nilable(T::Hash[T.untyped, T.untyped])) + @ignore_conditions = T.let(attributes.fetch(:ignore_conditions), T::Array[T.untyped]) + @package_manager = T.let(attributes.fetch(:package_manager), String) + @reject_external_code = T.let(attributes.fetch(:reject_external_code, false), T::Boolean) + @repo_contents_path = T.let(attributes.fetch(:repo_contents_path, nil), T.nilable(String)) + + @requirements_update_strategy = T.let(build_update_strategy( + **attributes.slice(:requirements_update_strategy, :lockfile_only) + ), T.nilable(String)) + + @security_advisories = T.let(attributes.fetch(:security_advisories), T::Array[T.untyped]) + @security_updates_only = T.let(attributes.fetch(:security_updates_only), T::Boolean) + @source = T.let(build_source(attributes.fetch(:source)), Dependabot::Source) + @token = T.let(attributes.fetch(:token, nil), T.nilable(String)) + @update_subdependencies = T.let(attributes.fetch(:update_subdependencies), T::Boolean) + @updating_a_pull_request = T.let(attributes.fetch(:updating_a_pull_request), T::Boolean) + @vendor_dependencies = T.let(attributes.fetch(:vendor_dependencies, false), T::Boolean) # TODO: Make this hash required # # We will need to do a pass updating the CLI and smoke tests before this is possible, # so let's consider it optional for now. If we get a nil value, let's force it to be # an array. - @dependency_groups = attributes.fetch(:dependency_groups, []) || [] - @dependency_group_to_refresh = attributes.fetch(:dependency_group_to_refresh, nil) - @repo_private = attributes.fetch(:repo_private, nil) + @dependency_groups = T.let(attributes.fetch(:dependency_groups, []) || [], T::Array[T.untyped]) + @dependency_group_to_refresh = T.let(attributes.fetch(:dependency_group_to_refresh, nil), T.nilable(String)) + @repo_private = T.let(attributes.fetch(:repo_private, nil), T.nilable(T::Boolean)) + + @update_config = T.let(calculate_update_config, Dependabot::Config::UpdateConfig) register_experiments end + sig { returns(T::Boolean) } def clone? true end @@ -131,36 +185,44 @@ def clone? # Some Core components test for a non-nil repo_contents_path as an implicit # signal they should use cloning behaviour, so we present it as nil unless # cloning is enabled to avoid unexpected behaviour. + sig { returns(T.nilable(String)) } def repo_contents_path return nil unless clone? @repo_contents_path end + sig { returns(T.nilable(T::Boolean)) } def repo_private? @repo_private end + sig { returns(T.nilable(String)) } def repo_owner - source&.organization + source.organization end + sig { returns(T::Boolean) } def updating_a_pull_request? @updating_a_pull_request end + sig { returns(T::Boolean) } def update_subdependencies? @update_subdependencies end + sig { returns(T::Boolean) } def security_updates_only? @security_updates_only end + sig { returns(T::Boolean) } def vendor_dependencies? @vendor_dependencies end + sig { returns(T::Boolean) } def reject_external_code? @reject_external_code end @@ -175,6 +237,7 @@ def reject_external_code? # # rubocop:disable Metrics/PerceivedComplexity # rubocop:disable Metrics/CyclomaticComplexity + sig { params(dependency: Dependency).returns(T::Boolean) } def allowed_update?(dependency) # Ignoring all versions is another way to say no updates allowed if completely_ignored?(dependency) @@ -212,6 +275,7 @@ def allowed_update?(dependency) # rubocop:enable Metrics/PerceivedComplexity # rubocop:enable Metrics/CyclomaticComplexity + sig { params(dependency: Dependabot::Dependency).returns(T::Boolean) } def vulnerable?(dependency) security_advisories = security_advisories_for(dependency) return false if security_advisories.none? @@ -231,26 +295,31 @@ def vulnerable?(dependency) security_advisories.any? { |a| all_versions.any? { |v| a.vulnerable?(v) } } end + sig { params(dependency: Dependabot::Dependency).returns(T::Boolean) } def security_fix?(dependency) security_advisories_for(dependency).any? { |a| a.fixed_by?(dependency) } end + sig { returns(T.nilable(T.proc.params(arg0: String).returns(String))) } def name_normaliser Dependabot::Dependency.name_normaliser_for_package_manager(package_manager) end + sig { returns(T::Hash[Symbol, T.untyped]) } def experiments return {} unless @experiments self.class.standardise_keys(@experiments) end + sig { returns(T::Hash[Symbol, T.untyped]) } def commit_message_options return {} unless @commit_message_options self.class.standardise_keys(@commit_message_options).compact end + sig { params(dependency: Dependabot::Dependency).returns(T::Array[Dependabot::SecurityAdvisory]) } def security_advisories_for(dependency) relevant_advisories = security_advisories @@ -270,6 +339,7 @@ def security_advisories_for(dependency) end end + sig { params(dependency: Dependabot::Dependency).returns(T::Array[String]) } def ignore_conditions_for(dependency) update_config.ignored_versions_for( dependency, @@ -287,6 +357,7 @@ def ignore_conditions_for(dependency) # that it does not have a 'source' attribute which we currently # use to distinguish rules from the config file from those that # were created via "@dependabot ignore version" commands + sig { params(dependency: Dependabot::Dependency).void } def log_ignore_conditions_for(dependency) conditions = ignore_conditions.select { |ic| name_match?(ic["dependency-name"], dependency.name) } return if conditions.empty? @@ -305,34 +376,64 @@ def log_ignore_conditions_for(dependency) end end + # Remove this once the API always sends groups for grouped refresh jobs + sig { params(group: String).void } + def override_group_to_refresh_due_to_old_defaults(group) + @dependency_group_to_refresh = group + end + private + sig { returns(Dependabot::Config::UpdateConfig) } + attr_reader :update_config + + sig { params(dependency: Dependabot::Dependency).returns(T::Boolean) } def completely_ignored?(dependency) ignore_conditions_for(dependency).any?(Dependabot::Config::IgnoreCondition::ALL_VERSIONS) end + sig { void } def register_experiments - experiments.each do |name, value| + experiments.entries.each do |name, value| Dependabot::Experiments.register(name, value) end end + sig { params(name1: String, name2: String).returns(T::Boolean) } def name_match?(name1, name2) WildcardMatcher.match?( - name_normaliser.call(name1), - name_normaliser.call(name2) + T.must(name_normaliser).call(name1), + T.must(name_normaliser).call(name2) ) end + sig do + params(requirements_update_strategy: T.nilable(String), lockfile_only: T::Boolean).returns(T.nilable(String)) + end def build_update_strategy(requirements_update_strategy:, lockfile_only:) return requirements_update_strategy unless requirements_update_strategy.nil? lockfile_only ? "lockfile_only" : nil end + sig { params(source_details: T::Hash[String, T.untyped]).returns(Dependabot::Source) } def build_source(source_details) + # Immediately normalize the source directory, ensure it starts with a "/" + directory = T.let(source_details["directory"], T.nilable(String)) + unless directory.nil? + directory = Pathname.new(directory).cleanpath.to_s + directory = "/#{directory}" unless directory.start_with?("/") + end + Dependabot::Source.new( - **source_details.transform_keys { |k| k.tr("-", "_").to_sym } + provider: T.let(source_details["provider"], String), + repo: T.let(source_details["repo"], String), + directory: directory, + directories: T.let(source_details["directories"], T.nilable(T::Array[String])), + branch: T.let(source_details["branch"], T.nilable(String)), + commit: T.let(source_details["commit"], T.nilable(String)), + hostname: T.let(source_details["hostname"], T.nilable(String)), + api_endpoint: T.let(source_details["api-endpoint"], T.nilable(String)) ) end @@ -340,18 +441,20 @@ def build_source(source_details) # relevant information obtained from the job definition. # # At present we only use this for ignore rules. - def update_config - return @update_config if defined? @update_config - - @update_config ||= Dependabot::Config::UpdateConfig.new( - ignore_conditions: ignore_conditions.map do |ic| - Dependabot::Config::IgnoreCondition.new( - dependency_name: ic["dependency-name"], - versions: [ic["version-requirement"]].compact, - update_types: ic["update-types"] - ) - end + sig { returns(Dependabot::Config::UpdateConfig) } + def calculate_update_config + update_config_ignore_conditions = ignore_conditions.map do |ic| + Dependabot::Config::IgnoreCondition.new( + dependency_name: T.let(ic["dependency-name"], String), + versions: T.let([ic["version-requirement"]].compact, T::Array[String]), + update_types: T.let(ic["update-types"], T.nilable(T::Array[String])) + ) + end + + update_config = Dependabot::Config::UpdateConfig.new( + ignore_conditions: T.let(update_config_ignore_conditions, T::Array[Dependabot::Config::IgnoreCondition]) ) + T.let(update_config, Dependabot::Config::UpdateConfig) end end end diff --git a/updater/lib/dependabot/sentry.rb b/updater/lib/dependabot/sentry.rb new file mode 100644 index 00000000..b4f2b66a --- /dev/null +++ b/updater/lib/dependabot/sentry.rb @@ -0,0 +1,21 @@ +# typed: strong +# frozen_string_literal: true + +require "sorbet-runtime" +require "dependabot/sentry/exception_sanitizer_processor" +require "dependabot/sentry/sentry_context_processor" + +module Dependabot + module Sentry + extend T::Sig + + # The default processor chain. + # This chain is applied in the order of the array. + sig { params(event: ::Sentry::Event, hint: T::Hash[Symbol, T.untyped]).returns(::Sentry::Event) } + def self.process_chain(event, hint) + [ExceptionSanitizer, SentryContext].each(&:new).reduce(event) do |acc, processor| + processor.new.process(acc, hint) + end + end + end +end diff --git a/updater/lib/dependabot/sentry/exception_sanitizer_processor.rb b/updater/lib/dependabot/sentry/exception_sanitizer_processor.rb index 3b213a4d..4bae7463 100644 --- a/updater/lib/dependabot/sentry/exception_sanitizer_processor.rb +++ b/updater/lib/dependabot/sentry/exception_sanitizer_processor.rb @@ -3,6 +3,7 @@ require "sentry-ruby" require "sorbet-runtime" + require "dependabot/sentry/processor" # ExceptionSanitizer filters potential secrets/PII from exception payloads diff --git a/updater/lib/dependabot/sentry/processor.rb b/updater/lib/dependabot/sentry/processor.rb index 1f236480..57103090 100644 --- a/updater/lib/dependabot/sentry/processor.rb +++ b/updater/lib/dependabot/sentry/processor.rb @@ -21,15 +21,6 @@ class Processor .returns(::Sentry::Event) end def process(event, hint); end - - # The default processor chain. - # This chain is applied in the order of the array. - sig { params(event: ::Sentry::Event, hint: T::Hash[Symbol, T.untyped]).returns(::Sentry::Event) } - def self.process_chain(event, hint) - [ExceptionSanitizer, SentryContext].reduce(event) do |acc, processor| - processor.new.process(acc, hint) - end - end end end end diff --git a/updater/lib/dependabot/sentry/sentry_context_processor.rb b/updater/lib/dependabot/sentry/sentry_context_processor.rb index f5c5f324..4420c46d 100644 --- a/updater/lib/dependabot/sentry/sentry_context_processor.rb +++ b/updater/lib/dependabot/sentry/sentry_context_processor.rb @@ -1,6 +1,7 @@ # typed: strict # frozen_string_literal: true +require "sentry-ruby" require "sorbet-runtime" require "dependabot/sentry/processor" @@ -9,17 +10,15 @@ class SentryContext < ::Dependabot::Sentry::Processor sig do override .params( - event: Sentry::Event, + event: ::Sentry::Event, hint: T::Hash[Symbol, T.untyped] ) - .returns(Sentry::Event) + .returns(::Sentry::Event) end def process(event, hint) - if (exception = hint[:exception]) - exception.raven_context.each do |key, value| - # rubocop:disable Performance/StringIdentifierArgument - event.send("#{key}=", value) - # rubocop:enable Performance/StringIdentifierArgument + if (exception = hint[:exception]) && exception.respond_to?(:sentry_context) + exception.sentry_context&.each do |key, value| + event.send(:"#{key}=", value) end end event diff --git a/updater/lib/dependabot/service.rb b/updater/lib/dependabot/service.rb index 7de1f7ab..2bdf9c98 100644 --- a/updater/lib/dependabot/service.rb +++ b/updater/lib/dependabot/service.rb @@ -19,7 +19,7 @@ class Service extend T::Sig extend Forwardable - sig { returns(T::Array[T::Array[String]]) } + sig { returns(T::Array[T.untyped]) } attr_reader :pull_requests sig { returns(T::Array[T::Array[T.untyped]]) } @@ -162,7 +162,7 @@ def pull_request_summary T.unsafe(Terminal::Table).new do |t| t.title = "Changes to Dependabot Pull Requests" - t.rows = pull_requests.map { |deps, action| [action, truncate(T.must(deps))] } + t.rows = pull_requests.map { |deps, action| [action, truncate(deps)] } end end diff --git a/updater/lib/dependabot/setup.rb b/updater/lib/dependabot/setup.rb index 5892346a..7bac4b92 100644 --- a/updater/lib/dependabot/setup.rb +++ b/updater/lib/dependabot/setup.rb @@ -6,7 +6,9 @@ require "dependabot/environment" require "dependabot/logger" require "dependabot/logger/formats" -require "dependabot/sentry/processor" +require "dependabot/opentelemetry" +require "dependabot/sentry" +require "dependabot/sorbet/runtime" Dependabot.logger = Logger.new($stdout).tap do |logger| logger.level = Dependabot::Environment.log_level @@ -38,16 +40,18 @@ npm_and_yarn| bundler| pub| + silent| swift| devcontainers )}x - config.before_send = ->(event, hint) { Dependabot::Sentry::Processor.process_chain(event, hint) } + config.before_send = ->(event, hint) { Dependabot::Sentry.process_chain(event, hint) } config.propagate_traces = false + config.instrumenter = ::Dependabot::OpenTelemetry.should_configure? ? :otel : :sentry end -require "dependabot/opentelemetry" Dependabot::OpenTelemetry.configure +Dependabot::Sorbet::Runtime.silently_report_errors! # Ecosystems require "dependabot/python" @@ -66,5 +70,6 @@ require "dependabot/npm_and_yarn" require "dependabot/bundler" require "dependabot/pub" +require "dependabot/silent" require "dependabot/swift" require "dependabot/devcontainers" diff --git a/updater/lib/dependabot/sorbet/runtime.rb b/updater/lib/dependabot/sorbet/runtime.rb new file mode 100644 index 00000000..b5664b13 --- /dev/null +++ b/updater/lib/dependabot/sorbet/runtime.rb @@ -0,0 +1,23 @@ +# typed: strict +# frozen_string_literal: true + +require "sorbet-runtime" + +module Dependabot + module Sorbet + module Runtime + class InformationalError < StandardError; end + extend T::Sig + + sig { void } + def self.silently_report_errors! + T::Configuration.call_validation_error_handler = lambda do |_sig, opts| + error = InformationalError.new(opts[:pretty_message]) + error.set_backtrace(caller.dup) + + ::Sentry.capture_exception(error) + end + end + end + end +end diff --git a/updater/lib/dependabot/updater/dependency_group_change_batch.rb b/updater/lib/dependabot/updater/dependency_group_change_batch.rb index 826106a4..96f542b7 100644 --- a/updater/lib/dependabot/updater/dependency_group_change_batch.rb +++ b/updater/lib/dependabot/updater/dependency_group_change_batch.rb @@ -55,6 +55,11 @@ def merge(dependency_change) debug_current_file_state end + # add an updated dependency without changing any files, useful for incidental updates + def add_updated_dependency(dependency) + merge_dependency_changes([dependency]) + end + private # We should retain a list of all dependencies that we change, in future we may need to account for the folder diff --git a/updater/lib/dependabot/updater/group_update_creation.rb b/updater/lib/dependabot/updater/group_update_creation.rb index 27db6ee4..dfb3b29d 100644 --- a/updater/lib/dependabot/updater/group_update_creation.rb +++ b/updater/lib/dependabot/updater/group_update_creation.rb @@ -19,12 +19,21 @@ module GroupUpdateCreation # Returns a Dependabot::DependencyChange object that encapsulates the # outcome of attempting to update every dependency iteratively which # can be used for PR creation. - def compile_all_dependency_changes_for(group) # rubocop:disable Metrics/AbcSize + # rubocop:disable Metrics/AbcSize + # rubocop:disable Metrics/MethodLength + # rubocop:disable Metrics/PerceivedComplexity + def compile_all_dependency_changes_for(group) prepare_workspace group_changes = Dependabot::Updater::DependencyGroupChangeBatch.new( initial_dependency_files: dependency_snapshot.dependency_files ) + # TODO: add directory to the dependencies to avoid reparsing? + job_directory = Pathname.new(job.source.directory).cleanpath + original_dependency_files = dependency_snapshot.dependency_files.select do |f| + Pathname.new(f.directory).cleanpath == job_directory + end + original_dependencies = dependency_file_parser(original_dependency_files).parse group.dependencies.each do |dependency| if dependency_snapshot.handled_dependencies.include?(dependency.name) @@ -45,8 +54,15 @@ def compile_all_dependency_changes_for(group) # rubocop:disable Metrics/AbcSize # dependency update next if dependency.nil? - updated_dependencies = compile_updates_for(dependency, dependency_files, group) + # If the dependency version changed, then we can deduce that the dependency was updated already. + original_dependency = original_dependencies.find { |d| d.name == dependency.name } + updated_dependency = deduce_updated_dependency(dependency, original_dependency) + unless updated_dependency.nil? + group_changes.add_updated_dependency(updated_dependency) + next + end + updated_dependencies = compile_updates_for(dependency, dependency_files, group) next unless updated_dependencies.any? lead_dependency = updated_dependencies.find do |dep| @@ -75,6 +91,9 @@ def compile_all_dependency_changes_for(group) # rubocop:disable Metrics/AbcSize ensure cleanup_workspace end + # rubocop:enable Metrics/AbcSize + # rubocop:enable Metrics/MethodLength + # rubocop:enable Metrics/PerceivedComplexity def dependency_file_parser(dependency_files) Dependabot::FileParsers.for_package_manager(job.package_manager).new( @@ -319,6 +338,24 @@ def dependencies_in_existing_pr_for_group(group) pr["dependency-group-name"] == group.name end.fetch("dependencies", []) end + + def deduce_updated_dependency(dependency, original_dependency) + return nil if original_dependency.version == dependency.version + + Dependabot.logger.info( + "Skipping #{dependency.name} as it has already been updated to #{dependency.version}" + ) + dependency_snapshot.handled_dependencies << dependency.name + + Dependabot::Dependency.new( + name: dependency.name, + version: dependency.version, + previous_version: original_dependency.version, + requirements: dependency.requirements, + previous_requirements: original_dependency.requirements, + package_manager: dependency.package_manager + ) + end end end end diff --git a/updater/lib/dependabot/updater/operations.rb b/updater/lib/dependabot/updater/operations.rb index 35829eb4..b1b59187 100644 --- a/updater/lib/dependabot/updater/operations.rb +++ b/updater/lib/dependabot/updater/operations.rb @@ -1,10 +1,8 @@ # typed: true # frozen_string_literal: true -require "dependabot/updater/operations/create_group_security_update_pull_request" require "dependabot/updater/operations/create_security_update_pull_request" require "dependabot/updater/operations/group_update_all_versions" -require "dependabot/updater/operations/refresh_group_security_update_pull_request" require "dependabot/updater/operations/refresh_group_update_pull_request" require "dependabot/updater/operations/refresh_security_update_pull_request" require "dependabot/updater/operations/refresh_version_update_pull_request" @@ -32,13 +30,11 @@ module Operations # that does, so these Operations should be ordered so that those with most # specific preconditions go before those with more permissive checks. OPERATIONS = [ - CreateGroupSecurityUpdatePullRequest, + GroupUpdateAllVersions, + RefreshGroupUpdatePullRequest, CreateSecurityUpdatePullRequest, - RefreshGroupSecurityUpdatePullRequest, RefreshSecurityUpdatePullRequest, - RefreshGroupUpdatePullRequest, RefreshVersionUpdatePullRequest, - GroupUpdateAllVersions, UpdateAllVersions ].freeze diff --git a/updater/lib/dependabot/updater/operations/create_group_security_update_pull_request.rb b/updater/lib/dependabot/updater/operations/create_group_security_update_pull_request.rb deleted file mode 100644 index c8a0efb5..00000000 --- a/updater/lib/dependabot/updater/operations/create_group_security_update_pull_request.rb +++ /dev/null @@ -1,101 +0,0 @@ -# typed: true -# frozen_string_literal: true - -require "dependabot/updater/security_update_helpers" -require "dependabot/updater/group_update_creation" - -# This class implements our strategy for updating multiple, insecure dependencies -# to a secure version. We attempt to make the smallest version update possible, -# i.e. semver patch-level increase is preferred over minor-level increase. -module Dependabot - class Updater - module Operations - class CreateGroupSecurityUpdatePullRequest - include SecurityUpdateHelpers - include GroupUpdateCreation - - def self.applies_to?(job:) - return false if Dependabot::Experiments.enabled?(:grouped_security_updates_disabled) - return false if job.updating_a_pull_request? - # If we haven't been given data for the vulnerable dependency, - # this strategy cannot act. - return false unless job.dependencies&.any? - - return false unless job.security_updates_only? - - true if job.dependencies.count > 1 || (job.source.directories && job.source.directories.count > 1) - end - - def self.tag_name - :create_security_pr - end - - def initialize(service:, job:, dependency_snapshot:, error_handler:) - @service = service - @job = job - @dependency_snapshot = dependency_snapshot - @error_handler = error_handler - # TODO: Collect @created_pull_requests on the Job object? - @created_pull_requests = [] - end - - def perform - Dependabot.logger.info("Starting security update job for #{job.source.repo}") - return record_security_update_dependency_not_found if dependency_snapshot.job_dependencies.empty? - - if dependency_change.updated_dependencies.any? - Dependabot.logger.info("Creating a pull request for '#{group.name}'") - begin - service.create_pull_request(dependency_change, dependency_snapshot.base_commit_sha) - rescue StandardError => e - error_handler.handle_job_error(error: e, dependency_group: group) - end - else - Dependabot.logger.info("Nothing to update for Dependency Group: '#{group.name}'") - end - - dependency_change - end - - private - - attr_reader :job, - :service, - :dependency_snapshot, - :error_handler, - :created_pull_requests - - def group - return @group if defined?(@group) - - # make a temporary fake group to use the existing logic - @group = grouped_security_update_group(job) - dependency_snapshot.job_dependencies.each do |dep| - @group.dependencies << dep - end - @group - end - - def dependency_change - return @dependency_change if defined?(@dependency_change) - - if job.source.directories.nil? - @dependency_change = compile_all_dependency_changes_for(group) - else - dependency_changes = job.source.directories.map do |directory| - job.source.directory = directory - # Fixes not updating because it already updated in a previous group - dependency_snapshot.handled_dependencies.clear - compile_all_dependency_changes_for(group) - end - - # merge the changes together into one - @dependency_change = dependency_changes.first - @dependency_change.merge_changes!(dependency_changes[1..-1]) if dependency_changes.count > 1 - @dependency_change - end - end - end - end - end -end diff --git a/updater/lib/dependabot/updater/operations/create_group_update_pull_request.rb b/updater/lib/dependabot/updater/operations/create_group_update_pull_request.rb index fc0a25fb..198cc90e 100644 --- a/updater/lib/dependabot/updater/operations/create_group_update_pull_request.rb +++ b/updater/lib/dependabot/updater/operations/create_group_update_pull_request.rb @@ -5,7 +5,7 @@ # This class implements our strategy for creating a single Pull Request which # updates all outdated Dependencies within a specific project folder that match -# a specificed Dependency Group. +# a specified Dependency Group. # # This will always post a new Pull Request to Dependabot API and does not check # to see if any exists for the group or any of the dependencies involved. diff --git a/updater/lib/dependabot/updater/operations/group_update_all_versions.rb b/updater/lib/dependabot/updater/operations/group_update_all_versions.rb index 85770e81..5a630895 100644 --- a/updater/lib/dependabot/updater/operations/group_update_all_versions.rb +++ b/updater/lib/dependabot/updater/operations/group_update_all_versions.rb @@ -21,9 +21,11 @@ class GroupUpdateAllVersions include GroupUpdateCreation def self.applies_to?(job:) - return false if job.security_updates_only? return false if job.updating_a_pull_request? - return false if job.dependencies&.any? + if Dependabot::Experiments.enabled?(:grouped_security_updates_disabled) && job.security_updates_only? + return false + end + return false if job.source.directory && job.security_updates_only? job.dependency_groups&.any? end @@ -120,12 +122,24 @@ def run_update_for(group) def run_ungrouped_dependency_updates return if dependency_snapshot.ungrouped_dependencies.empty? - Dependabot::Updater::Operations::UpdateAllVersions.new( - service: service, - job: job, - dependency_snapshot: dependency_snapshot, - error_handler: error_handler - ).perform + if job.source.directories.nil? + Dependabot::Updater::Operations::UpdateAllVersions.new( + service: service, + job: job, + dependency_snapshot: dependency_snapshot, + error_handler: error_handler + ).perform + else + job.source.directories.each do |directory| + job.source.directory = directory + Dependabot::Updater::Operations::UpdateAllVersions.new( + service: service, + job: job, + dependency_snapshot: dependency_snapshot, + error_handler: error_handler + ).perform + end + end end end end diff --git a/updater/lib/dependabot/updater/operations/refresh_group_security_update_pull_request.rb b/updater/lib/dependabot/updater/operations/refresh_group_security_update_pull_request.rb deleted file mode 100644 index 34c36d61..00000000 --- a/updater/lib/dependabot/updater/operations/refresh_group_security_update_pull_request.rb +++ /dev/null @@ -1,100 +0,0 @@ -# typed: true -# frozen_string_literal: true - -require "dependabot/updater/security_update_helpers" -require "dependabot/updater/group_update_creation" -require "dependabot/updater/group_update_refreshing" - -# This class implements our strategy for updating multiple, insecure dependencies -# to a secure version. We attempt to make the smallest version update possible, -# i.e. semver patch-level increase is preferred over minor-level increase. -module Dependabot - class Updater - module Operations - class RefreshGroupSecurityUpdatePullRequest - include SecurityUpdateHelpers - include GroupUpdateCreation - include GroupUpdateRefreshing - - def self.applies_to?(job:) - return false if Dependabot::Experiments.enabled?(:grouped_security_updates_disabled) - # If we haven't been given data for the vulnerable dependency, - # this strategy cannot act. - return false unless job.dependencies&.any? - return false unless job.security_updates_only? - return false unless job.dependencies.count > 1 - - job.updating_a_pull_request? - end - - def self.tag_name - :update_security_group_pr - end - - def initialize(service:, job:, dependency_snapshot:, error_handler:) - @service = service - @job = job - @dependency_snapshot = dependency_snapshot - @error_handler = error_handler - end - - def perform - Dependabot.logger.info("Starting a refresh of grouped security update for #{job.source.repo}") - return record_security_update_dependency_not_found if dependency_snapshot.job_dependencies.empty? - - if dependency_change.updated_dependencies.any? - Dependabot.logger.info("Upserting pull request for '#{group.name}'") - begin - upsert_pull_request_with_error_handling(dependency_change, group) - rescue StandardError => e - error_handler.handle_job_error(error: e, dependency_group: group) - end - else - Dependabot.logger.info("Nothing to update for Dependency Group: '#{group.name}'") - end - - dependency_change - end - - private - - attr_reader :job, - :service, - :dependency_snapshot, - :error_handler, - :created_pull_requests - - def group - return @group if defined?(@group) - - # make a temporary fake group to use the existing logic - @group = grouped_security_update_group(job) - dependency_snapshot.job_dependencies.each do |dep| - @group.dependencies << dep - end - @group - end - - def dependency_change - return @dependency_change if defined?(@dependency_change) - - if job.source.directories.nil? - @dependency_change = compile_all_dependency_changes_for(group) - else - dependency_changes = job.source.directories.map do |directory| - job.source.directory = directory - # Fixes not updating because it already updated in a previous group - dependency_snapshot.handled_dependencies.clear - compile_all_dependency_changes_for(group) - end - - # merge the changes together into one - @dependency_change = dependency_changes.first - @dependency_change.merge_changes!(dependency_changes[1..-1]) if dependency_changes.count > 1 - @dependency_change - end - end - end - end - end -end diff --git a/updater/lib/dependabot/updater/operations/refresh_group_update_pull_request.rb b/updater/lib/dependabot/updater/operations/refresh_group_update_pull_request.rb index 793b746c..a0702182 100644 --- a/updater/lib/dependabot/updater/operations/refresh_group_update_pull_request.rb +++ b/updater/lib/dependabot/updater/operations/refresh_group_update_pull_request.rb @@ -6,7 +6,7 @@ # This class implements our strategy for refreshing a single Pull Request which # updates all outdated Dependencies within a specific project folder that match -# a specificed Dependency Group. +# a specified Dependency Group. # # Refreshing a Dependency Group pull request essentially has two outcomes, we # either update or supersede the existing PR. @@ -27,12 +27,15 @@ class RefreshGroupUpdatePullRequest include GroupUpdateRefreshing def self.applies_to?(job:) - return false if job.security_updates_only? # If we haven't been given metadata about the dependencies present # in the pull request and the Dependency Group that originally created # it, this strategy cannot act. return false unless job.dependencies&.any? return false unless job.dependency_group_to_refresh + if Dependabot::Experiments.enabled?(:grouped_security_updates_disabled) && job.security_updates_only? + return false + end + return false if job.source.directory && job.security_updates_only? job.updating_a_pull_request? end diff --git a/updater/lib/dependabot/updater/operations/refresh_version_update_pull_request.rb b/updater/lib/dependabot/updater/operations/refresh_version_update_pull_request.rb index 3d4e9c0d..f2321824 100644 --- a/updater/lib/dependabot/updater/operations/refresh_version_update_pull_request.rb +++ b/updater/lib/dependabot/updater/operations/refresh_version_update_pull_request.rb @@ -30,6 +30,10 @@ def initialize(service:, job:, dependency_snapshot:, error_handler:) @job = job @dependency_snapshot = dependency_snapshot @error_handler = error_handler + + return unless job.source.directory.nil? && job.source.directories.count == 1 + + job.source.directory = job.source.directories.first end def perform diff --git a/updater/lib/dependabot/updater/operations/update_all_versions.rb b/updater/lib/dependabot/updater/operations/update_all_versions.rb index eda72b50..96f3a392 100644 --- a/updater/lib/dependabot/updater/operations/update_all_versions.rb +++ b/updater/lib/dependabot/updater/operations/update_all_versions.rb @@ -27,6 +27,10 @@ def initialize(service:, job:, dependency_snapshot:, error_handler:) @error_handler = error_handler # TODO: Collect @created_pull_requests on the Job object? @created_pull_requests = [] + + return unless job.source.directory.nil? && job.source.directories.count == 1 + + job.source.directory = job.source.directories.first end def perform diff --git a/updater/lib/dependabot/updater/security_update_helpers.rb b/updater/lib/dependabot/updater/security_update_helpers.rb index ed1e2786..727719ef 100644 --- a/updater/lib/dependabot/updater/security_update_helpers.rb +++ b/updater/lib/dependabot/updater/security_update_helpers.rb @@ -7,15 +7,6 @@ module Dependabot class Updater module SecurityUpdateHelpers - def grouped_security_update_group(job) - Dependabot::DependencyGroup.new( - name: "#{job.package_manager} group", - rules: { - "patterns" => "*" # The grouping is more dictated by the dependencies passed in. - } - ) - end - def record_security_update_not_needed_error(checker) Dependabot.logger.info( "no security update needed as #{checker.dependency.name} " \ diff --git a/updater/spec/dependabot/api_client_spec.rb b/updater/spec/dependabot/api_client_spec.rb index 4e8219e2..9f99ae7c 100644 --- a/updater/spec/dependabot/api_client_spec.rb +++ b/updater/spec/dependabot/api_client_spec.rb @@ -20,9 +20,12 @@ updated_dependency_files: dependency_files ) end + let(:source) do + instance_double(Dependabot::Source, provider: "github", repo: "gocardless/bump", directory: "/") + end let(:job) do instance_double(Dependabot::Job, - source: nil, + source: source, credentials: [], commit_message_options: [], updating_a_pull_request?: false, @@ -219,9 +222,12 @@ updated_dependency_files: dependency_files ) end + let(:source) do + instance_double(Dependabot::Source, provider: "github", repo: "gocardless/bump", directory: "/") + end let(:job) do instance_double(Dependabot::Job, - source: nil, + source: source, credentials: [], commit_message_options: [], updating_a_pull_request?: true) diff --git a/updater/spec/dependabot/dependency_change_spec.rb b/updater/spec/dependabot/dependency_change_spec.rb index d615e363..e8c26f85 100644 --- a/updater/spec/dependabot/dependency_change_spec.rb +++ b/updater/spec/dependabot/dependency_change_spec.rb @@ -86,7 +86,14 @@ end let(:message_builder_mock) do - instance_double(Dependabot::PullRequestCreator::MessageBuilder, message: "Hello World!") + instance_double( + Dependabot::PullRequestCreator::MessageBuilder, + message: Dependabot::PullRequestCreator::Message.new( + pr_name: "Title", + pr_message: "Hello World!", + commit_message: "Commit message" + ) + ) end before do @@ -110,7 +117,7 @@ ignore_conditions: [] ) - expect(dependency_change.pr_message).to eql("Hello World!") + expect(dependency_change.pr_message.pr_message).to eql("Hello World!") end context "when a dependency group is assigned" do @@ -137,7 +144,7 @@ ignore_conditions: [] ) - expect(dependency_change.pr_message).to eql("Hello World!") + expect(dependency_change.pr_message&.pr_message).to eql("Hello World!") end end end diff --git a/updater/spec/dependabot/dependency_group_engine_spec.rb b/updater/spec/dependabot/dependency_group_engine_spec.rb index 28a5fe19..c180b6c6 100644 --- a/updater/spec/dependabot/dependency_group_engine_spec.rb +++ b/updater/spec/dependabot/dependency_group_engine_spec.rb @@ -13,9 +13,20 @@ include DependencyFileHelpers let(:dependency_group_engine) { described_class.from_job_config(job: job) } - + let(:source) do + Dependabot::Source.new( + provider: "github", + repo: "gocardless/bump", + directory: "/", + branch: "master" + ) + end + let(:security_updates_only) { false } let(:job) do - instance_double(Dependabot::Job, dependency_groups: dependency_groups_config) + instance_double(Dependabot::Job, + dependency_groups: dependency_groups_config, + source: source, + security_updates_only?: security_updates_only) end let(:dummy_pkg_a) do @@ -82,6 +93,69 @@ ) end + context "when a job does not have grouped configured but it's a grouped security update" do + let(:source) do + Dependabot::Source.new(provider: "github", repo: "gocardless/bump", directories: ["/"]) + end + + let(:job) do + instance_double(Dependabot::Job, + dependency_groups: [], + package_manager: "bundler", + source: source, + security_updates_only?: true, + updating_a_pull_request?: false, + dependency_group_to_refresh: nil) + end + + describe "::from_job_config" do + it "creates a default group" do + expect(dependency_group_engine.dependency_groups.length).to eql(1) + expect(dependency_group_engine.dependency_groups.first.name).to eql("bundler group") + expect(dependency_group_engine.dependency_groups.first.dependencies).to be_empty + end + end + end + + context "when a job has grouped configured, and it's a version update" do + let(:dependency_groups_config) do + [ + { + "name" => "group-a", + "rules" => { + "patterns" => ["dummy-pkg-*"], + "exclude-patterns" => ["dummy-pkg-b"] + } + }, + { + "name" => "group-b", + "applies-to" => "security-updates", + "rules" => { + "patterns" => %w(dummy-pkg-b dummy-pkg-c) + } + } + ] + end + + describe "::from_job_config" do + it "filters out the security update" do + expect(dependency_group_engine.dependency_groups.length).to eql(1) + expect(dependency_group_engine.dependency_groups.map(&:name)).to eql(%w(group-a)) + end + end + + context "when it's a security update" do + let(:security_updates_only) { true } + + describe "::from_job_config" do + it "filters out the version update" do + expect(dependency_group_engine.dependency_groups.length).to eql(1) + expect(dependency_group_engine.dependency_groups.map(&:name)).to eql(%w(group-b)) + end + end + end + end + context "when a job has groups configured" do let(:dependency_groups_config) do [ @@ -159,7 +233,7 @@ - group-b This can happen if: - - the group's 'pattern' rules are mispelled + - the group's 'pattern' rules are misspelled - your configuration's 'allow' rules do not permit any of the dependencies that match the group - the dependencies that match the group rules have been removed from your project WARN @@ -180,7 +254,7 @@ - group-b This can happen if: - - the group's 'pattern' rules are mispelled + - the group's 'pattern' rules are misspelled - your configuration's 'allow' rules do not permit any of the dependencies that match the group - the dependencies that match the group rules have been removed from your project WARN diff --git a/updater/spec/dependabot/file_fetcher_command_spec.rb b/updater/spec/dependabot/file_fetcher_command_spec.rb new file mode 100644 index 00000000..3e7d67ec --- /dev/null +++ b/updater/spec/dependabot/file_fetcher_command_spec.rb @@ -0,0 +1,359 @@ +# typed: false +# frozen_string_literal: true + +require "spec_helper" +require "dependabot/file_fetcher_command" +require "tmpdir" + +require "support/dummy_package_manager/dummy" + +require "dependabot/bundler" + +RSpec.describe Dependabot::FileFetcherCommand do + subject(:job) { described_class.new } + + let(:api_client) { double(Dependabot::ApiClient) } + let(:job_id) { "123123" } + + before do + allow(Dependabot::Environment).to receive(:job_id).and_return(job_id) + allow(Dependabot::Environment).to receive(:job_token).and_return("job_token") + allow(Dependabot::ApiClient).to receive(:new).and_return(api_client) + + allow(api_client).to receive(:mark_job_as_processed) + allow(api_client).to receive(:record_update_job_error) + allow(api_client).to receive(:record_ecosystem_versions) + allow(api_client).to receive(:is_a?).with(Dependabot::ApiClient).and_return(true) + + allow(Dependabot::Environment).to receive(:output_path).and_return(File.join(Dir.mktmpdir, "output.json")) + allow(Dependabot::Environment).to receive(:job_definition).and_return(job_definition) + end + + describe "#perform_job" do + subject(:perform_job) { job.perform_job } + + let(:job_definition) do + JSON.parse(fixture("jobs/job_with_credentials.json")) + end + + after do + # The job definition in this context loads an experiment, so reset it + Dependabot::Experiments.reset! + end + + it "fetches the files and writes the fetched files to output.json", vcr: true do + expect(api_client).not_to receive(:mark_job_as_processed) + + perform_job + + output = JSON.parse(File.read(Dependabot::Environment.output_path)) + dependency_file = output["base64_dependency_files"][0] + expect(dependency_file["name"]).to eq( + "dependabot-test-ruby-package.gemspec" + ) + expect(dependency_file["content_encoding"]).to eq("utf-8") + end + + context "when the fetcher raises a ToolVersionNotSupported error", vcr: true do + before do + allow_any_instance_of(Dependabot::Bundler::FileFetcher) + .to receive(:commit).and_return("a" * 40) + allow_any_instance_of(Dependabot::Bundler::FileFetcher) + .to receive(:files).and_return([]) + allow_any_instance_of(Dependabot::Bundler::FileFetcher) + .to receive(:ecosystem_versions) + .and_raise(Dependabot::ToolVersionNotSupported.new("Bundler", "1.7", "2.x")) + end + + it "tells the backend about the error (and doesn't re-raise it)" do + expect(api_client) + .to receive(:record_update_job_error) + .with( + error_details: { "tool-name": "Bundler", "detected-version": "1.7", "supported-versions": "2.x" }, + error_type: "tool_version_not_supported" + ) + expect(api_client).to receive(:mark_job_as_processed) + + expect { perform_job }.to output(/Error during file fetching; aborting/).to_stdout_from_any_process + end + end + + context "when the fetcher raises a BranchNotFound error" do + before do + allow_any_instance_of(Dependabot::Bundler::FileFetcher) + .to receive(:commit) + .and_raise(Dependabot::BranchNotFound, "my_branch") + end + + it "tells the backend about the error (and doesn't re-raise it)" do + expect(api_client) + .to receive(:record_update_job_error) + .with( + error_details: { "branch-name": "my_branch" }, + error_type: "branch_not_found" + ) + expect(api_client).to receive(:mark_job_as_processed) + + expect { perform_job }.to output(/Error during file fetching; aborting/).to_stdout_from_any_process + end + end + + context "when the fetcher raises a RepoNotFound error" do + let(:provider) { job_definition.dig("job", "source", "provider") } + let(:repo) { job_definition.dig("job", "source", "repo") } + let(:source) { ::Dependabot::Source.new(provider: provider, repo: repo) } + + before do + allow_any_instance_of(Dependabot::Bundler::FileFetcher) + .to receive(:commit) + .and_raise(Dependabot::RepoNotFound, source) + end + + it "tells the backend about the error (and doesn't re-raise it)" do + expect(api_client) + .to receive(:record_update_job_error) + .with( + error_details: { message: "Dependabot::RepoNotFound" }, + error_type: "job_repo_not_found" + ) + expect(api_client).to receive(:mark_job_as_processed) + + expect { perform_job }.to output(/Error during file fetching; aborting/).to_stdout_from_any_process + end + end + + context "when the fetcher raises a file fetcher error (cloud) ", vcr: true do + before do + allow_any_instance_of(Dependabot::Bundler::FileFetcher) + .to receive(:commit) + .and_raise(StandardError, "my_branch") + Dependabot::Experiments.register(:record_update_job_unknown_error, true) + end + + after do + Dependabot::Experiments.reset! + end + + it "tells the backend about the error via update job error api (and doesn't re-raise it)" do + expect(api_client).to receive(:record_update_job_error).with( + error_type: "file_fetcher_error", + error_details: { + "error-backtrace" => an_instance_of(String), + "error-message" => "my_branch", + "error-class" => "StandardError", + "package-manager" => "bundler", + "job-id" => "123123", + "job-dependency_group" => [] + } + ) + expect(api_client).to receive(:record_update_job_unknown_error) + expect(api_client).to receive(:mark_job_as_processed) + + expect { perform_job }.to output(/Error during file fetching; aborting/).to_stdout_from_any_process + end + + it "tells the backend about the error via update job unknown error (and doesn't re-raise it)" do + expect(api_client).to receive(:record_update_job_unknown_error).with( + error_type: "file_fetcher_error", + error_details: { + "error-backtrace" => an_instance_of(String), + "error-message" => "my_branch", + "error-class" => "StandardError", + "package-manager" => "bundler", + "job-id" => "123123", + "job-dependency_group" => [] + } + ) + expect(api_client).to receive(:mark_job_as_processed) + + expect { perform_job }.to output(/Error during file fetching; aborting/).to_stdout_from_any_process + end + end + + context "when the fetcher raises a file fetcher error (ghes) ", vcr: true do + before do + allow_any_instance_of(Dependabot::Bundler::FileFetcher) + .to receive(:commit) + .and_raise(StandardError, "my_branch") + end + + it "tells the backend about the error via update job error api (and doesn't re-raise it)" do + expect(api_client).to receive(:record_update_job_error).with( + error_type: "file_fetcher_error", + error_details: { + "error-backtrace" => an_instance_of(String), + "error-message" => "my_branch", + "error-class" => "StandardError", + "package-manager" => "bundler", + "job-id" => "123123", + "job-dependency_group" => [] + } + ) + expect(api_client).to receive(:mark_job_as_processed) + + expect { perform_job }.to output(/Error during file fetching; aborting/).to_stdout_from_any_process + end + + it "do not tells the backend about the error" do + expect(api_client).to_not receive(:record_update_job_unknown_error) + expect(api_client).to receive(:mark_job_as_processed) + + expect { perform_job }.to output(/Error during file fetching; aborting/).to_stdout_from_any_process + end + end + + context "when the fetcher raises a rate limited error" do + let(:reset_at) { Time.now + 30 } + + before do + exception = Octokit::TooManyRequests.new( + response_headers: { + "X-RateLimit-Reset" => reset_at + } + ) + allow_any_instance_of(Dependabot::Bundler::FileFetcher) + .to receive(:commit) + .and_raise(exception) + end + + it "retries the job when the rate-limit is reset and reports api error" do + expect(Sentry).not_to receive(:capture_exception) + expect(api_client) + .to receive(:record_update_job_error) + .with( + error_details: { "rate-limit-reset": reset_at }, + error_type: "octokit_rate_limited" + ) + expect(api_client).to receive(:mark_job_as_processed) + + expect { perform_job }.to output(/Repository is rate limited, attempting to retry/).to_stdout_from_any_process + end + end + + context "when vendoring dependencies", vcr: true do + let(:job_definition) do + JSON.parse(fixture("jobs/job_with_vendor_dependencies.json")) + end + + before do + allow(Dependabot::Environment).to receive(:repo_contents_path).and_return(Dir.mktmpdir) + end + + it "clones the repo" do + expect(api_client).not_to receive(:mark_job_as_processed) + + perform_job + + root_dir_entries = Dir.entries(Dependabot::Environment.repo_contents_path) + expect(root_dir_entries).to include(".gitignore") + expect(root_dir_entries).to include( + "dependabot-test-ruby-package.gemspec" + ) + expect(root_dir_entries).to include("README.md") + end + end + + context "when package ecosystem always clones" do + let(:job_definition) do + JSON.parse(fixture("jobs/job_with_dummy.json")) + end + + before do + allow(Dependabot::Environment).to receive(:repo_contents_path).and_return(Dir.mktmpdir) + end + + it "clones the repo" do + perform_job + + root_dir_entries = Dir.entries(Dependabot::Environment.repo_contents_path) + expect(root_dir_entries).to include("go.mod") + expect(root_dir_entries).to include("go.sum") + expect(root_dir_entries).to include("main.go") + end + + context "when the fetcher raises a BranchNotFound error while cloning" do + before do + allow_any_instance_of(DummyPackageManager::FileFetcher) + .to receive(:clone_repo_contents) + .and_raise(Dependabot::BranchNotFound, "my_branch") + end + + it "tells the backend about the error (and doesn't re-raise it)" do + expect(api_client) + .to receive(:record_update_job_error) + .with( + error_details: { "branch-name": "my_branch" }, + error_type: "branch_not_found" + ) + expect(api_client).to receive(:mark_job_as_processed) + + expect { perform_job }.to output(/Error during file fetching; aborting/).to_stdout_from_any_process + end + end + + context "when the fetcher raises a OutOfDisk error while cloning" do + before do + allow_any_instance_of(DummyPackageManager::FileFetcher) + .to receive(:clone_repo_contents) + .and_raise(Dependabot::OutOfDisk) + end + + it "tells the backend about the error (and doesn't re-raise it)" do + expect(api_client) + .to receive(:record_update_job_error) + .with( + error_details: {}, + error_type: "out_of_disk" + ) + expect(api_client).to receive(:mark_job_as_processed) + + expect { perform_job }.to output(/Error during file fetching; aborting/).to_stdout_from_any_process + end + end + end + + context "when the connectivity check is enabled", vcr: true do + before do + allow(ENV).to receive(:[]).and_call_original + allow(ENV).to receive(:[]).with("ENABLE_CONNECTIVITY_CHECK").and_return("1") + end + + it "logs connectivity is successful and does not raise an error" do + expect(Dependabot.logger).to receive(:info).with(/Connectivity check starting/) + expect(Dependabot.logger).to receive(:info).with(/Connectivity check successful/) + + expect { perform_job }.not_to raise_error + end + + context "when connectivity is broken" do + let(:mock_octokit) { instance_double(Octokit::Client) } + + before do + allow(Octokit::Client) + .to receive(:new) + .and_call_original + allow(Octokit::Client) + .to receive(:new).with({ + api_endpoint: "https://api.github.com/", + connection_options: { + request: { + open_timeout: 20, + timeout: 5 + } + } + }) + .and_return(mock_octokit) + allow(mock_octokit).to receive(:repository) + .and_raise(Octokit::Error) + end + + it "logs connectivity failed and does not raise an error" do + expect(Dependabot.logger).to receive(:info).with(/Connectivity check starting/) + expect(Dependabot.logger).to receive(:error).with(/Connectivity check failed/) + + expect { perform_job }.not_to raise_error + end + end + end + end +end diff --git a/updater/spec/dependabot/job_spec.rb b/updater/spec/dependabot/job_spec.rb index 0e6c88ba..f989977e 100644 --- a/updater/spec/dependabot/job_spec.rb +++ b/updater/spec/dependabot/job_spec.rb @@ -13,7 +13,7 @@ let(:attributes) do { - id: 1, + id: "1", token: "token", dependencies: dependencies, allowed_updates: allowed_updates, @@ -24,7 +24,7 @@ source: { "provider" => "github", "repo" => "dependabot-fixtures/dependabot-test-ruby-package", - "directory" => "/", + "directory" => directory, "api-endpoint" => "https://api.github.com/", "hostname" => "github.com", "branch" => nil @@ -48,6 +48,7 @@ } end + let(:directory) { "/" } let(:dependencies) { nil } let(:security_advisories) { [] } let(:package_manager) { "bundler" } @@ -76,9 +77,9 @@ let(:new_update_job) do described_class.new_update_job( - job_id: anything, + job_id: "1", job_definition: JSON.parse(job_json), - repo_contents_path: anything + repo_contents_path: "repo" ) end @@ -93,6 +94,30 @@ expect(ruby_credential["host"]).to eql("my.rubygems-host.org") expect(ruby_credential.keys).not_to include("token") end + + context "when the directory does not start with a slash" do + let(:directory) { "hello" } + + it "adds a slash to the directory" do + expect(job.source.directory).to eq("/hello") + end + end + + context "when the directory uses relative path notation" do + let(:directory) { "hello/world/.." } + + it "cleans the path" do + expect(job.source.directory).to eq("/hello") + end + end + + context "when the directory is nil because it's a grouped security update" do + let(:directory) { nil } + + it "doesn't raise an error" do + expect(job.source.directory).to eq(nil) + end + end end context "when lockfile_only is passed as true" do diff --git a/updater/spec/dependabot/sentry/exception_sanitizer_processor_spec.rb b/updater/spec/dependabot/sentry/exception_sanitizer_processor_spec.rb index 1bf97b57..596a10c1 100644 --- a/updater/spec/dependabot/sentry/exception_sanitizer_processor_spec.rb +++ b/updater/spec/dependabot/sentry/exception_sanitizer_processor_spec.rb @@ -1,7 +1,9 @@ # typed: false # frozen_string_literal: true +require "sentry-ruby" require "spec_helper" + require "dependabot/sentry/exception_sanitizer_processor" RSpec.describe ExceptionSanitizer do diff --git a/updater/spec/dependabot/sentry/sentry_context_processor_spec.rb b/updater/spec/dependabot/sentry/sentry_context_processor_spec.rb new file mode 100644 index 00000000..5ac8d84d --- /dev/null +++ b/updater/spec/dependabot/sentry/sentry_context_processor_spec.rb @@ -0,0 +1,42 @@ +# typed: false +# frozen_string_literal: true + +require "sentry-ruby" +require "spec_helper" + +require "dependabot/errors" +require "dependabot/sentry/sentry_context_processor" + +RSpec.describe SentryContext do + let(:sentry_context) { { foo: "bar" } } + let(:exception) { double(::Dependabot::DependabotError, sentry_context: sentry_context) } + let(:hint) { { exception: exception } } + let(:event) { instance_double(::Sentry::ErrorEvent) } + + subject { event } + + before do + allow(event).to receive(:send) + described_class.new.process(event, hint) + end + + it "adds context to the event" do + is_expected.to have_received(:send).with(:foo=, "bar") + end + + context "without an exception" do + let(:exception) { nil } + + it "does not add context" do + is_expected.not_to have_received(:send) + end + end + + context "without sentry_context" do + let(:sentry_context) { nil } + + it "does not add context" do + is_expected.not_to have_received(:send) + end + end +end diff --git a/updater/spec/dependabot/service_spec.rb b/updater/spec/dependabot/service_spec.rb index 283e0962..a487d450 100644 --- a/updater/spec/dependabot/service_spec.rb +++ b/updater/spec/dependabot/service_spec.rb @@ -25,12 +25,25 @@ allow(api_client).to receive(:is_a?).with(Dependabot::ApiClient).and_return(true) api_client end + subject(:service) { described_class.new(client: mock_client) } shared_context :a_pr_was_created do + let(:source) do + instance_double(Dependabot::Source, provider: "github", repo: "dependabot/dependabot-core", directory: "/") + end + + let(:job) do + instance_double(Dependabot::Job, + source: source, + credentials: [], + commit_message_options: [], + ignore_conditions: []) + end + let(:dependency_change) do Dependabot::DependencyChange.new( - job: instance_double(Dependabot::Job, source: nil, credentials: [], commit_message_options: []), + job: job, updated_dependencies: dependencies, updated_dependency_files: dependency_files ) @@ -74,16 +87,34 @@ before do allow(Dependabot::PullRequestCreator::MessageBuilder) - .to receive_message_chain(:new, :message).and_return(pr_message) + .to receive_message_chain(:new, :message).and_return( + Dependabot::PullRequestCreator::Message.new( + pr_name: "Test PR", + pr_message: pr_message, + commit_message: "Commit message" + ) + ) service.create_pull_request(dependency_change, base_sha) end end shared_context :a_pr_was_updated do + let(:source) do + instance_double(Dependabot::Source, provider: "github", repo: "dependabot/dependabot-core", directory: "/") + end + + let(:job) do + instance_double(Dependabot::Job, + source: source, + credentials: [], + commit_message_options: [], + ignore_conditions: []) + end + let(:dependency_change) do Dependabot::DependencyChange.new( - job: anything, + job: job, updated_dependencies: dependencies, updated_dependency_files: dependency_files ) diff --git a/updater/spec/dependabot/updater/operations_spec.rb b/updater/spec/dependabot/updater/operations_spec.rb index bfb2266d..d3674d8b 100644 --- a/updater/spec/dependabot/updater/operations_spec.rb +++ b/updater/spec/dependabot/updater/operations_spec.rb @@ -27,7 +27,9 @@ end it "returns the UpdateAllVersions class when the Job is for a fresh, non-security update with no dependencies" do + source = instance_double(Dependabot::Source, directory: nil) job = instance_double(Dependabot::Job, + source: source, security_updates_only?: false, updating_a_pull_request?: false, dependencies: [], @@ -38,7 +40,10 @@ end it "returns the GroupUpdateAllVersions class when the Job is for a fresh, version update with no dependencies" do + source = instance_double(Dependabot::Source, directory: nil) + job = instance_double(Dependabot::Job, + source: source, security_updates_only?: false, updating_a_pull_request?: false, dependencies: [], @@ -51,7 +56,10 @@ end it "returns the RefreshGroupUpdatePullRequest class when the Job is for an existing group update" do + source = instance_double(Dependabot::Source, directory: nil) + job = instance_double(Dependabot::Job, + source: source, security_updates_only?: false, updating_a_pull_request?: true, dependencies: [anything], @@ -80,10 +88,11 @@ it "returns the CreateSecurityUpdatePullRequest class when the Job is for a new security update for a dependency" do job = instance_double(Dependabot::Job, + dependency_group_to_refresh: nil, security_updates_only?: true, updating_a_pull_request?: false, dependencies: [anything], - dependency_groups: [anything], + dependency_groups: [], source: Dependabot::Source.new(provider: "github", repo: "gocardless/bump"), is_a?: true) @@ -91,8 +100,11 @@ .to be(Dependabot::Updater::Operations::CreateSecurityUpdatePullRequest) end - it "returns the CreateGroupSecurityUpdatePullRequest class when Experiment flag is not provided" do + it "returns the GroupUpdateAllVersions class when Experiment flag is not provided" do + source = instance_double(Dependabot::Source, directory: nil) + job = instance_double(Dependabot::Job, + source: source, security_updates_only?: true, updating_a_pull_request?: false, dependencies: [anything, anything], @@ -100,12 +112,14 @@ is_a?: true) expect(described_class.class_for(job: job)) - .to be(Dependabot::Updater::Operations::CreateGroupSecurityUpdatePullRequest) + .to be(Dependabot::Updater::Operations::GroupUpdateAllVersions) end - it "returns the CreateGroupSecurityUpdatePullRequest class when Experiment flag is off" do + it "returns the GroupUpdateAllVersions class when Experiment flag is off" do Dependabot::Experiments.register(:grouped_security_updates_disabled, false) + source = instance_double(Dependabot::Source, directory: nil) job = instance_double(Dependabot::Job, + source: source, security_updates_only?: true, updating_a_pull_request?: false, dependencies: [anything, anything], @@ -113,12 +127,13 @@ is_a?: true) expect(described_class.class_for(job: job)) - .to be(Dependabot::Updater::Operations::CreateGroupSecurityUpdatePullRequest) + .to be(Dependabot::Updater::Operations::GroupUpdateAllVersions) end it "returns the CreateSecurityUpdatePullRequest class when Experiment flag is true" do Dependabot::Experiments.register(:grouped_security_updates_disabled, true) job = instance_double(Dependabot::Job, + dependency_group_to_refresh: nil, security_updates_only?: true, updating_a_pull_request?: false, dependencies: [anything, anything], @@ -131,7 +146,9 @@ it "returns the RefreshGroupSecurityUpdatePullRequest class when the Job is for an existing security update for" \ " multiple dependencies" do + source = instance_double(Dependabot::Source, directory: nil) job = instance_double(Dependabot::Job, + source: source, security_updates_only?: true, updating_a_pull_request?: true, dependencies: [anything, anything], @@ -140,11 +157,12 @@ is_a?: true) expect(described_class.class_for(job: job)) - .to be(Dependabot::Updater::Operations::RefreshGroupSecurityUpdatePullRequest) + .to be(Dependabot::Updater::Operations::RefreshGroupUpdatePullRequest) end it "returns the RefreshSecurityUpdatePullRequest class when the Job is for an existing security update" do job = instance_double(Dependabot::Job, + dependency_group_to_refresh: nil, security_updates_only?: true, updating_a_pull_request?: true, dependencies: [anything], diff --git a/updater/spec/fixtures/bundler/original/sub_dep b/updater/spec/fixtures/bundler/original/sub_dep new file mode 100644 index 00000000..d7ccf130 --- /dev/null +++ b/updater/spec/fixtures/bundler/original/sub_dep @@ -0,0 +1,5 @@ +# frozen_string_literal: true + +source "https://rubygems.org" + +gem "dummy-pkg-b", "~> 1.1.0" diff --git a/updater/spec/fixtures/bundler/original/sub_dep.lock b/updater/spec/fixtures/bundler/original/sub_dep.lock new file mode 100644 index 00000000..dae47db2 --- /dev/null +++ b/updater/spec/fixtures/bundler/original/sub_dep.lock @@ -0,0 +1,16 @@ +GEM + remote: https://rubygems.org/ + specs: + dummy-pkg-a (2.0.0) + dummy-pkg-b (1.1.0) + dummy-pkg-a (~> 2.0) + +PLATFORMS + ruby + +DEPENDENCIES + dummy-pkg-a + dummy-pkg-b (~> 1.1.0) + +BUNDLED WITH + 1.14.6 diff --git a/updater/spec/fixtures/bundler2/original/Gemfile b/updater/spec/fixtures/bundler2/original/Gemfile new file mode 100644 index 00000000..ecc7a043 --- /dev/null +++ b/updater/spec/fixtures/bundler2/original/Gemfile @@ -0,0 +1,6 @@ +# frozen_string_literal: true + +source "https://rubygems.org" + +gem "dummy-pkg-a", "~> 2.0.0" +gem "dummy-pkg-b", "~> 1.1.0" diff --git a/updater/spec/fixtures/bundler2/original/Gemfile.lock b/updater/spec/fixtures/bundler2/original/Gemfile.lock new file mode 100644 index 00000000..e2e32c16 --- /dev/null +++ b/updater/spec/fixtures/bundler2/original/Gemfile.lock @@ -0,0 +1,16 @@ +GEM + remote: https://rubygems.org/ + specs: + dummy-pkg-a (2.0.0) + dummy-pkg-b (1.1.0) + dummy-pkg-a (~> 2.0) + +PLATFORMS + ruby + +DEPENDENCIES + dummy-pkg-a (~> 2.0.0) + dummy-pkg-b (~> 1.1.0) + +BUNDLED WITH + 2.2.11 diff --git a/updater/spec/fixtures/bundler2/updated/Gemfile b/updater/spec/fixtures/bundler2/updated/Gemfile new file mode 100644 index 00000000..607828c5 --- /dev/null +++ b/updater/spec/fixtures/bundler2/updated/Gemfile @@ -0,0 +1,6 @@ +# frozen_string_literal: true + +source "https://rubygems.org" + +gem "dummy-pkg-a", "~> 2.0.0" +gem "dummy-pkg-b", "~> 1.2.0" diff --git a/updater/spec/fixtures/bundler2/updated/Gemfile.lock b/updater/spec/fixtures/bundler2/updated/Gemfile.lock new file mode 100644 index 00000000..8430d10f --- /dev/null +++ b/updater/spec/fixtures/bundler2/updated/Gemfile.lock @@ -0,0 +1,16 @@ +GEM + remote: https://rubygems.org/ + specs: + dummy-pkg-a (2.0.0) + dummy-pkg-b (1.2.0) + dummy-pkg-a (~> 2.0) + +PLATFORMS + ruby + +DEPENDENCIES + dummy-pkg-a (~> 2.0.0) + dummy-pkg-b (~> 1.2.0) + +BUNDLED WITH + 2.2.11 diff --git a/updater/spec/fixtures/bundler_gemspec/updated/Gemfile b/updater/spec/fixtures/bundler_gemspec/updated/Gemfile new file mode 100644 index 00000000..b4e2a20b --- /dev/null +++ b/updater/spec/fixtures/bundler_gemspec/updated/Gemfile @@ -0,0 +1,3 @@ +source "https://rubygems.org" + +gemspec diff --git a/updater/spec/fixtures/bundler_gemspec/updated/Gemfile.lock b/updater/spec/fixtures/bundler_gemspec/updated/Gemfile.lock new file mode 100644 index 00000000..29f945ec --- /dev/null +++ b/updater/spec/fixtures/bundler_gemspec/updated/Gemfile.lock @@ -0,0 +1,46 @@ +PATH + remote: . + specs: + library (1.0.0) + rack (>= 2.1.4, < 3.1.0) + rubocop (>= 0.76, < 1.51) + toml-rb (~> 2.2.0) + +GEM + remote: https://rubygems.org/ + specs: + ast (2.4.2) + citrus (3.0.2) + json (2.6.3) + parallel (1.23.0) + parser (3.2.2.1) + ast (~> 2.4.1) + rack (3.0.7) + rainbow (3.1.1) + regexp_parser (2.8.0) + rexml (3.2.6) + rubocop (1.50.2) + json (~> 2.3) + parallel (~> 1.10) + parser (>= 3.2.0.0) + rainbow (>= 2.2.2, < 4.0) + regexp_parser (>= 1.8, < 3.0) + rexml (>= 3.2.5, < 4.0) + rubocop-ast (>= 1.28.0, < 2.0) + ruby-progressbar (~> 1.7) + unicode-display_width (>= 2.4.0, < 3.0) + rubocop-ast (1.28.0) + parser (>= 3.2.1.0) + ruby-progressbar (1.13.0) + toml-rb (2.2.0) + citrus (~> 3.0, > 3.0) + unicode-display_width (2.4.2) + +PLATFORMS + ruby + +DEPENDENCIES + library! + +BUNDLED WITH + 2.4.11 diff --git a/updater/spec/fixtures/bundler_gemspec/updated/library.gemspec b/updater/spec/fixtures/bundler_gemspec/updated/library.gemspec new file mode 100644 index 00000000..15601fe9 --- /dev/null +++ b/updater/spec/fixtures/bundler_gemspec/updated/library.gemspec @@ -0,0 +1,12 @@ + +Gem::Specification.new do |s| + s.name = "library" + s.summary = "A Library" + s.version = "1.0.0" + s.homepage = "https://github.com/dependabot/dependabot-core" + s.authors = %w[monalisa] + + s.add_runtime_dependency "rubocop", ">= 0.76", "< 1.57" + s.add_runtime_dependency "toml-rb", "~> 2.2.0" + s.add_runtime_dependency "rack", ">= 2.1.4", "< 3.1.0" +end diff --git a/updater/spec/fixtures/bundler_git/original/Gemfile.lock b/updater/spec/fixtures/bundler_git/original/Gemfile.lock deleted file mode 100644 index cfe797d2..00000000 --- a/updater/spec/fixtures/bundler_git/original/Gemfile.lock +++ /dev/null @@ -1,21 +0,0 @@ -GIT - remote: git@github.com:dependabot-fixtures/ruby-dummy-git-dependency.git - revision: 20151f9b67c8a04461fa0ee28385b6187b86587b - ref: v1.0.0 - specs: - dummy-git-dependency (1.0.0) - -GEM - remote: https://rubygems.org/ - specs: - -PLATFORMS - aarch64-linux - x86_64-darwin-19 - x86_64-linux - -DEPENDENCIES - dummy-git-dependency! - -BUNDLED WITH - 2.2.11 diff --git a/updater/spec/fixtures/bundler_grouped/original/Gemfile b/updater/spec/fixtures/bundler_grouped/original/Gemfile new file mode 100644 index 00000000..01ede77b --- /dev/null +++ b/updater/spec/fixtures/bundler_grouped/original/Gemfile @@ -0,0 +1,7 @@ +# frozen_string_literal: true + +source "https://rubygems.org" + +gem "dummy-pkg-a", "~> 2.0.0" +gem "dummy-pkg-b", "~> 1.1.0" +gem "ungrouped-dummy-pkg-c", "~> 1.0.0" diff --git a/updater/spec/fixtures/bundler_grouped/original/Gemfile.lock b/updater/spec/fixtures/bundler_grouped/original/Gemfile.lock new file mode 100644 index 00000000..48feef35 --- /dev/null +++ b/updater/spec/fixtures/bundler_grouped/original/Gemfile.lock @@ -0,0 +1,18 @@ +GEM + remote: https://rubygems.org/ + specs: + dummy-pkg-a (2.0.0) + dummy-pkg-b (1.1.0) + dummy-pkg-a (~> 2.0) + ungrouped-dummy-pkg-c (1.0.0) + +PLATFORMS + ruby + +DEPENDENCIES + dummy-pkg-a (~> 2.0.0) + dummy-pkg-b (~> 1.1.0) + ungrouped-dummy-pkg-c (~> 1.0.0) + +BUNDLED WITH + 1.14.6 diff --git a/updater/spec/fixtures/bundler_grouped_by_types/original/Gemfile b/updater/spec/fixtures/bundler_grouped_by_types/original/Gemfile deleted file mode 100644 index 75e1bd97..00000000 --- a/updater/spec/fixtures/bundler_grouped_by_types/original/Gemfile +++ /dev/null @@ -1,10 +0,0 @@ -# frozen_string_literal: true - -source "https://rubygems.org" - -gem "rack", "~> 2.1.3" -gem "toml-rb", "~> 2.2.0" - -group :development do - gem "rubocop", "~> 0.75.0" -end diff --git a/updater/spec/fixtures/bundler_grouped_by_types/original/Gemfile.lock b/updater/spec/fixtures/bundler_grouped_by_types/original/Gemfile.lock deleted file mode 100644 index 4f3322cf..00000000 --- a/updater/spec/fixtures/bundler_grouped_by_types/original/Gemfile.lock +++ /dev/null @@ -1,35 +0,0 @@ -GEM - remote: https://rubygems.org/ - specs: - ast (2.4.2) - citrus (3.0.2) - jaro_winkler (1.5.6) - parallel (1.23.0) - parser (3.2.2.3) - ast (~> 2.4.1) - racc - racc (1.7.1) - rack (2.1.3) - rainbow (3.1.1) - rubocop (0.75.0) - jaro_winkler (~> 1.5.1) - parallel (~> 1.10) - parser (>= 2.6) - rainbow (>= 2.2.2, < 4.0) - ruby-progressbar (~> 1.7) - unicode-display_width (>= 1.4.0, < 1.7) - ruby-progressbar (1.13.0) - toml-rb (2.2.0) - citrus (~> 3.0, > 3.0) - unicode-display_width (1.6.1) - -PLATFORMS - ruby - -DEPENDENCIES - rack (~> 2.1.3) - rubocop (~> 0.75.0) - toml-rb (~> 2.2.0) - -BUNDLED WITH - 1.14.6 diff --git a/updater/spec/fixtures/bundler_vendored/original/vendor/cache/dummy-pkg-a-2.0.0.gem b/updater/spec/fixtures/bundler_vendored/original/vendor/cache/dummy-pkg-a-2.0.0.gem new file mode 100644 index 0000000000000000000000000000000000000000..922b25aae01bee376ce5db3fa87509f19ffaf0a8 GIT binary patch literal 4096 zcmc~zElEsCEJ@T$uVSDTFaQD*6B7my4Fu@4fti^ZgQ2mZp_!49xw)AkgMp#3iKz*L zf&r}@glukUaY8f@({lvJcp)zuyW9-Zv|A(^|wtI9Y^*9vxs6U>8_*>B{A{OgoR5Ey_pgkNZB)X1%4Ixm4xc=g-}5 zLqb*OE!k;pvha6b+m+}NuiBoBH|L~$%_=_JS}64Q&7Fl^zZYKmARPQm_$&YQ^RERt z3fXeABfUE&FN^i?>paT-#V6S#(oywZg3JBadKZ#-IqT1u6}r4w^FBAIDcxYk3e&~g ze13eD{xVBq#qgQe!%el;+ZA8U%u%6-cq;oV&&|T*}oEQ&9zO`TWx63Q9}v!dE9#j7-goOWK8`ZeQ# zS(X&{<&@o%H|9@&v%O#B!(pzH7oFWR^sJW&Eqe6++0$<6IKA1&U+wQHo)ca9JK#`* z-v4k(?eLT0*2U?3b2f@_wKnWm&3nDOYI9=_d;Z@G?>-*bQ1drH@5b^8JJ(qmKKc5q z;K;@!P0XB!e9jc!{n7n$RsTPRoPBodr!!MCErIhsFb51|{x>i&M$iAorskvhpPKQE z%Pd6xPfCzrU7R4&69Q8D|35Q>-ukWY8CY;>92FlHA&{Jrnw(u+np><_nV6eHn^FK& zHR7xPO$<%Z^1q3hq0wmmr$+)q+eHvL)a_K3f7nWE2hS7ln-7Kzdy>sRaiIX}JT`9d`&hYmI?2O(C* z=F?eykDD5gC2y|KR=L+N`l`$%AeZIz`aTZHMrmtnbw(Aprk6ccZ)#Q8KZ+!szM39p z()xUVZH`HI{--02x{ch9FVn+a literal 0 HcmV?d00001 diff --git a/updater/spec/fixtures/bundler_vendored/original/vendor/cache/dummy-pkg-b-1.1.0.gem b/updater/spec/fixtures/bundler_vendored/original/vendor/cache/dummy-pkg-b-1.1.0.gem new file mode 100644 index 0000000000000000000000000000000000000000..059a5064267367132e03d6b8893370e4b30fb790 GIT binary patch literal 4096 zcmc~zElEsCEJ@T$uVSDTFaQD*6B7my4Fu@4fw{REgQ2mZp_!4ffq^+t-q6^@#E?P3 zfL0DdHn+66B(VtSr1Ff^)Es09G&Ui5h~E&NL(@K3x$@l{3>F5Kkxa}-Lt^tU8;I0? zUvE%*GkBkt$%Li8KC@aX9VIB0RVDY34 zk-d!F{<+^T8~Hvlwkn-7p~r6Z{_CqvX0)BJ+*aRrE_Ti5PfZDTDuvVzWduqq9AM`# zXy{?de*gdD@MpQ)bFB~oOgmcQz?E0|Wl*Z4uIyWN+LI1$(78|7!OEZS(I^(HojOd%7dCr33k#a}|z-%v0smdz*Q`%52>?q2D2y7tS)~ygs?<*G%!J zHf`;SOE}i84}0^UDdLU#=kqEh36Hu@%{c$?iMZ}E=>^Kio4i#ms&xwI#y<-^y6D}S zZLxb>WiLK@*}A15ezV8UQw~#R|E)g#yu;G;5r^Q)V=q~a9o3(|kayqkzw|!~C{2R% zJ}?IiWd1iWF-Fh-#wJFi`JWzT1|t6_B}lL?P7vt{0a^S1KQn{g`mOI7z=?z&4jHv$ zKtdonBQ-g@xHPv|uQD+=hc=}EsA|Ml|C<<^pyhuPQ*)Ei{7;Vrfyn=<=XXvNaS(6` ztX(6)-nQb^y4B&%&c~aqCI)m&+%PZA)!@PL(=~hJ`rqH*_vrZJpMP%V>(~FDF2CP? zp1{_r;%B!!p5Z;MR7d@Baf|=j3sTLuYt8cif4!L)wfO8wn}&VDy}hYho5c$kTQOf= zwqNV1~>$94-Rd@TTOXsrR%+)EHur$X&Oysx4y29Jmd37E? z*I95~oOq(E<= 0".freeze) if s.respond_to? :required_rubygems_version= + s.require_paths = ["lib".freeze] + s.authors = ["Dependabot".freeze] + s.date = "2023-06-02" + s.email = "support@dependabot.com".freeze + s.homepage = "http://github.com/dependabot/dummy-git-dependency".freeze + s.licenses = ["MIT".freeze] + s.rubygems_version = "3.3.26".freeze + s.summary = "A dummy package for testing Dependabot".freeze + + s.installed_by_version = "3.3.26" if s.respond_to? :installed_by_version +end diff --git a/updater/spec/fixtures/bundler_vendored/updated/.bundle/config b/updater/spec/fixtures/bundler_vendored/updated/.bundle/config new file mode 100644 index 00000000..612e6ae3 --- /dev/null +++ b/updater/spec/fixtures/bundler_vendored/updated/.bundle/config @@ -0,0 +1,2 @@ +--- +BUNDLE_CACHE_ALL: "false" diff --git a/updater/spec/fixtures/bundler_git/original/Gemfile b/updater/spec/fixtures/bundler_vendored/updated/Gemfile similarity index 53% rename from updater/spec/fixtures/bundler_git/original/Gemfile rename to updater/spec/fixtures/bundler_vendored/updated/Gemfile index d27ea892..8e49b738 100644 --- a/updater/spec/fixtures/bundler_git/original/Gemfile +++ b/updater/spec/fixtures/bundler_vendored/updated/Gemfile @@ -2,4 +2,6 @@ source "https://rubygems.org" -gem "dummy-git-dependency", git: "git@github.com:dependabot-fixtures/ruby-dummy-git-dependency.git", ref: "v1.0.0" +gem "dummy-pkg-a", "~> 2.0.0" +gem "dummy-pkg-b", "~> 1.2.0" +gem "dummy-git-dependency", git: "git@github.com:dependabot-fixtures/ruby-dummy-git-dependency.git", ref: "v1.1.0" diff --git a/updater/spec/fixtures/bundler_vendored/updated/Gemfile.lock b/updater/spec/fixtures/bundler_vendored/updated/Gemfile.lock new file mode 100644 index 00000000..f2fa6424 --- /dev/null +++ b/updater/spec/fixtures/bundler_vendored/updated/Gemfile.lock @@ -0,0 +1,26 @@ +GIT + remote: git@github.com:dependabot-fixtures/ruby-dummy-git-dependency.git + revision: c0e25c2eb332122873f73acb3b61fb2e261cfd8f + ref: v1.1.0 + specs: + dummy-git-dependency (1.1.0) + +GEM + remote: https://rubygems.org/ + specs: + dummy-pkg-a (2.0.0) + dummy-pkg-b (1.2.0) + dummy-pkg-a (~> 2.0) + +PLATFORMS + aarch64-linux + x86_64-darwin + x86_64-linux + +DEPENDENCIES + dummy-git-dependency! + dummy-pkg-a (~> 2.0.0) + dummy-pkg-b (~> 1.2.0) + +BUNDLED WITH + 2.4.13 diff --git a/updater/spec/fixtures/bundler_vendored/updated/vendor/cache/dummy-pkg-a-2.0.0.gem b/updater/spec/fixtures/bundler_vendored/updated/vendor/cache/dummy-pkg-a-2.0.0.gem new file mode 100644 index 0000000000000000000000000000000000000000..922b25aae01bee376ce5db3fa87509f19ffaf0a8 GIT binary patch literal 4096 zcmc~zElEsCEJ@T$uVSDTFaQD*6B7my4Fu@4fti^ZgQ2mZp_!49xw)AkgMp#3iKz*L zf&r}@glukUaY8f@({lvJcp)zuyW9-Zv|A(^|wtI9Y^*9vxs6U>8_*>B{A{OgoR5Ey_pgkNZB)X1%4Ixm4xc=g-}5 zLqb*OE!k;pvha6b+m+}NuiBoBH|L~$%_=_JS}64Q&7Fl^zZYKmARPQm_$&YQ^RERt z3fXeABfUE&FN^i?>paT-#V6S#(oywZg3JBadKZ#-IqT1u6}r4w^FBAIDcxYk3e&~g ze13eD{xVBq#qgQe!%el;+ZA8U%u%6-cq;oV&&|T*}oEQ&9zO`TWx63Q9}v!dE9#j7-goOWK8`ZeQ# zS(X&{<&@o%H|9@&v%O#B!(pzH7oFWR^sJW&Eqe6++0$<6IKA1&U+wQHo)ca9JK#`* z-v4k(?eLT0*2U?3b2f@_wKnWm&3nDOYI9=_d;Z@G?>-*bQ1drH@5b^8JJ(qmKKc5q z;K;@!P0XB!e9jc!{n7n$RsTPRoPBodr!!MCErIhsFb51|{x>i&M$iAorskvhpPKQE z%Pd6xPfCzrU7R4&69Q8D|35Q>-ukWY8CY;>92FlHA&{Jrnw(u+np><_nV6eHn^FK& zHR7xPO$<%Z^1q3hq0wmmr$+)q+eHvL)a_K3f7nWE2hS7ln-7Kzdy>sRaiIX}JT`9d`&hYmI?2O(C* z=F?eykDD5gC2y|KR=L+N`l`$%AeZIz`aTZHMrmtnbw(Aprk6ccZ)#Q8KZ+!szM39p z()xUVZH`HI{--02x{ch9FVn+a literal 0 HcmV?d00001 diff --git a/updater/spec/fixtures/bundler_vendored/updated/vendor/cache/dummy-pkg-b-1.2.0.gem b/updater/spec/fixtures/bundler_vendored/updated/vendor/cache/dummy-pkg-b-1.2.0.gem new file mode 100644 index 0000000000000000000000000000000000000000..e0647d5b0d67c722e2cc7f3b092878cdb8ffea53 GIT binary patch literal 4096 zcmc~zElEsCEJ@T$uVSDTFaQD*6B7my4Fu@4fw{REgQ2mZp_vhoFf?K?Ff=wXHfK;U zpp}D=%`Gi1Nh|_7sXQY!H3wM&jZH`%;x~ln(6kR$u6#EKgO`zIBop(|kl6go1|qfJ z*BjK{47Q6}*r=16bV=n1vwlMb!@?7VdBW>IvVY@^YJIT1`0*0o-M+&4-r8I3?Dl>C zA#*%(+Q;z372jJ|zjs(z!SB{_UT(_0EY(2k(`!r=DvTvIpZ~M&Y}Pk!rzMgfk6c=R zS>*8_kErLf_oVEbzN7RYhuylwq66nzH6o7XA8gJ|d0XHT+c3YG@5;ohx6G_K{Pz1e z9`Gs+3O@MWK0}_lc)-l^ z!qKg1`=P4%ga9ay}|o6VrPVuXz_}mw;j@v>qWoL;5&Mp zKYj+|l#(S&9_;^b@LnnGmfMutc*zdKsp+0g-qo|B&L0bnOPa3rb(dX(uW3}6?dL^v zj(;#{5jptvYS-U*hVH*9|7Ny``P2kTezuhPyXa^M^Oh$O1uI$7`&IKkovzuN7Pvj^ z_O@FG=Vg5S;uN)GedLmuRE1M#zufy|ndH}N;pDQau|6e<^?Z2PCfByRJ z(&Z20ZoQhhK$rUpD4{(jnX3fna}_IIGH$QO125-#Khbk3AyLBavth3HphkC z4{`m~zq?}DmSo?iinb;uF%79z5qw-r`Kn)hYP_^b`Gj+>xRAF8rv<~zRcqr8O}22m zr{;S&FkCkO@>vOXA>$_txHnD-7XN=Q*>-Q^smUR$?yR;rUGXS^x%SS_EkV5xKD^s> z)-mD5wnqsKB{mDV!+*ajeqkA?tI(PCwsZCQMc$G(mA2(JYUeUO+FtPJEw{zTi{}= 0".freeze) if s.respond_to? :required_rubygems_version= + s.require_paths = ["lib".freeze] + s.authors = ["Dependabot".freeze] + s.date = "2023-06-05" + s.email = "support@dependabot.com".freeze + s.homepage = "http://github.com/dependabot/dummy-git-dependency".freeze + s.licenses = ["MIT".freeze] + s.rubygems_version = "3.3.26".freeze + s.summary = "A dummy package for testing Dependabot".freeze + + s.installed_by_version = "3.3.26" if s.respond_to? :installed_by_version +end diff --git a/updater/spec/fixtures/composer/original/composer.json b/updater/spec/fixtures/composer/original/composer.json new file mode 100644 index 00000000..a505225f --- /dev/null +++ b/updater/spec/fixtures/composer/original/composer.json @@ -0,0 +1,7 @@ +{ + "name": "dependabot/test-project", + "require": { + "dependabot/dummy-pkg-a": "^2.0.0", + "dependabot/dummy-pkg-b": "^1.1.0" + } +} diff --git a/updater/spec/fixtures/composer/original/composer.lock b/updater/spec/fixtures/composer/original/composer.lock new file mode 100644 index 00000000..886600a5 --- /dev/null +++ b/updater/spec/fixtures/composer/original/composer.lock @@ -0,0 +1,65 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", + "This file is @generated automatically" + ], + "content-hash": "8fe1579c07dcc6865cfb8300382414ea", + "packages": [ + { + "name": "dependabot/dummy-pkg-a", + "version": "v2.0.0", + "source": { + "type": "git", + "url": "https://github.com/dependabot/php-dummy-pkg-a.git", + "reference": "183c190aa576256c768a04ff2163c208e0dd81d1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dependabot/php-dummy-pkg-a/zipball/183c190aa576256c768a04ff2163c208e0dd81d1", + "reference": "183c190aa576256c768a04ff2163c208e0dd81d1", + "shasum": "" + }, + "type": "library", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A dummy package for testing Dependabot", + "time": "2017-06-08T12:52:19+00:00" + }, + { + "name": "dependabot/dummy-pkg-b", + "version": "v1.1.0", + "source": { + "type": "git", + "url": "https://github.com/dependabot/php-dummy-pkg-b.git", + "reference": "164a01c72b834713b19f05eb0cf51130fccd9429" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dependabot/php-dummy-pkg-b/zipball/164a01c72b834713b19f05eb0cf51130fccd9429", + "reference": "164a01c72b834713b19f05eb0cf51130fccd9429", + "shasum": "" + }, + "require": { + "dependabot/dummy-pkg-a": "~2.0" + }, + "type": "library", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A dummy package for testing Dependabot", + "time": "2017-06-08T13:03:29+00:00" + } + ], + "packages-dev": [], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": [], + "prefer-stable": false, + "prefer-lowest": false, + "platform": [], + "platform-dev": [] +} diff --git a/updater/spec/fixtures/composer/updated/composer.json b/updater/spec/fixtures/composer/updated/composer.json new file mode 100644 index 00000000..88344145 --- /dev/null +++ b/updater/spec/fixtures/composer/updated/composer.json @@ -0,0 +1,7 @@ +{ + "name": "dependabot/test-project", + "require": { + "dependabot/dummy-pkg-a": "^2.0.0", + "dependabot/dummy-pkg-b": "^1.2.0" + } +} diff --git a/updater/spec/fixtures/composer/updated/composer.lock b/updater/spec/fixtures/composer/updated/composer.lock new file mode 100644 index 00000000..25c4d617 --- /dev/null +++ b/updater/spec/fixtures/composer/updated/composer.lock @@ -0,0 +1,74 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", + "This file is @generated automatically" + ], + "content-hash": "f3db3a6bac0d9a53cb3d7f7da5a7f535", + "packages": [ + { + "name": "dependabot/dummy-pkg-a", + "version": "v2.0.0", + "source": { + "type": "git", + "url": "https://github.com/dependabot/php-dummy-pkg-a.git", + "reference": "183c190aa576256c768a04ff2163c208e0dd81d1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dependabot/php-dummy-pkg-a/zipball/183c190aa576256c768a04ff2163c208e0dd81d1", + "reference": "183c190aa576256c768a04ff2163c208e0dd81d1", + "shasum": "" + }, + "type": "library", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A dummy package for testing Dependabot", + "support": { + "issues": "https://github.com/dependabot/php-dummy-pkg-a/issues", + "source": "https://github.com/dependabot/php-dummy-pkg-a/tree/v2.0.0" + }, + "time": "2017-06-08T12:52:19+00:00" + }, + { + "name": "dependabot/dummy-pkg-b", + "version": "v1.2.0", + "source": { + "type": "git", + "url": "https://github.com/dependabot/php-dummy-pkg-b.git", + "reference": "658d78acdba4020da5da797c4e96c082be9126f0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dependabot/php-dummy-pkg-b/zipball/658d78acdba4020da5da797c4e96c082be9126f0", + "reference": "658d78acdba4020da5da797c4e96c082be9126f0", + "shasum": "" + }, + "require": { + "dependabot/dummy-pkg-a": "~2.0" + }, + "type": "library", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A dummy package for testing Dependabot", + "support": { + "issues": "https://github.com/dependabot/php-dummy-pkg-b/issues", + "source": "https://github.com/dependabot/php-dummy-pkg-b/tree/v1.2.0" + }, + "time": "2017-06-08T13:03:43+00:00" + } + ], + "packages-dev": [], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": [], + "prefer-stable": false, + "prefer-lowest": false, + "platform": [], + "platform-dev": [], + "plugin-api-version": "2.6.0" +} diff --git a/updater/spec/fixtures/dummy/original/a.dummy b/updater/spec/fixtures/dummy/original/a.dummy new file mode 100644 index 00000000..3b96ce63 --- /dev/null +++ b/updater/spec/fixtures/dummy/original/a.dummy @@ -0,0 +1 @@ +dependabot/a = 1.1.1 diff --git a/updater/spec/fixtures/dummy/original/b.dummy b/updater/spec/fixtures/dummy/original/b.dummy new file mode 100644 index 00000000..9ef1f750 --- /dev/null +++ b/updater/spec/fixtures/dummy/original/b.dummy @@ -0,0 +1 @@ +dependabot/b = 2.2.2 diff --git a/updater/spec/fixtures/file_fetcher_output/output.json b/updater/spec/fixtures/file_fetcher_output/output.json new file mode 100644 index 00000000..45777a60 --- /dev/null +++ b/updater/spec/fixtures/file_fetcher_output/output.json @@ -0,0 +1,70 @@ +{ + "job": { + "allowed-updates": [ + { + "dependency-type": "direct", + "update-type": "all" + }, + { + "dependency-type": "indirect", + "update-type": "security" + } + ], + "credentials": [ + { + "type": "git_source", + "host": "github.com", + "username": "x-access-token", + "password": "v1.exampletokenfromgithubinityesitisforsure" + }, + { + "type": "rubygems_index", + "host": "my.rubygems-host.org", + "token": "secret" + } + ], + "credentials-metadata": [ + { + "type": "git_source", + "host": "github.com" + }, + { + "type": "rubygems_index", + "host": "my.rubygems-host.org" + } + ], + "dependencies": null, + "directory": "/", + "existing-pull-requests": [], + "ignore-conditions": [], + "security-advisories": [], + "package_manager": "bundler", + "repo-name": "dependabot-fixtures/dependabot-test-ruby-package", + "source": { + "provider": "github", + "repo": "dependabot-fixtures/dependabot-test-ruby-package", + "directory": "/", + "branch": null, + "hostname": "github.com", + "api-endpoint": "https://api.github.com/" + }, + "lockfile-only": false, + "requirements-update-strategy": null, + "update-subdependencies": false, + "updating-a-pull-request": false, + "vendor-dependencies": false, + "security-updates-only": false + }, + "base64_dependency_files":[ + { + "name":"dependabot-test-ruby-package.gemspec", + "content":"IyBmcm96ZW5fc3RyaW5nX2xpdGVyYWw6IHRydWUKCkdlbTo6U3BlY2lmaWNh\ndGlvbi5uZXcgZG8gfHNwZWN8CiAgc3BlYy5uYW1lICAgICA9ICdkZXBlbmRh\nYm90LXRlc3QtcnVieS1wYWNrYWdlJwogIHNwZWMudmVyc2lvbiAgPSAnMS4w\nLjEnCiAgc3BlYy5zdW1tYXJ5ICA9ICdBIGR1bW15IHBhY2thZ2UgZm9yIHRl\nc3RpbmcgRGVwZW5kYWJvdCcKICBzcGVjLmF1dGhvciAgID0gJ0RlcGVuZGFi\nb3QnCiAgc3BlYy5saWNlbnNlICA9ICdNSVQnCiAgc3BlYy5lbWFpbCAgICA9\nICdub3JlcGx5QGdpdGh1Yi5jb20nCiAgc3BlYy5ob21lcGFnZSA9ICdodHRw\nOi8vZ2l0aHViLmNvbS9kZXBlbmRhYm90LWZpeHR1cmVzL2RlcGVuZGFib3Qt\ndGVzdC1ydWJ5LXBhY2thZ2UnCmVuZAo=\n", + "directory":"/", + "type":"file", + "support_file":false, + "content_encoding":"utf-8", + "deleted":false + } + ], + "base_commit_sha":"1c6331732c41e4557a16dacb82534f1d1c831848" +} diff --git a/updater/spec/fixtures/file_fetcher_output/vendoring_output.json b/updater/spec/fixtures/file_fetcher_output/vendoring_output.json new file mode 100644 index 00000000..020585c7 --- /dev/null +++ b/updater/spec/fixtures/file_fetcher_output/vendoring_output.json @@ -0,0 +1,70 @@ +{ + "job": { + "allowed-updates": [ + { + "dependency-type": "direct", + "update-type": "all" + }, + { + "dependency-type": "indirect", + "update-type": "security" + } + ], + "credentials": [ + { + "type": "git_source", + "host": "github.com", + "username": "x-access-token", + "password": "v1.exampletokenfromgithubinityesitisforsure" + }, + { + "type": "rubygems_index", + "host": "my.rubygems-host.org", + "token": "secret" + } + ], + "credentials-metadata": [ + { + "type": "git_source", + "host": "github.com" + }, + { + "type": "rubygems_index", + "host": "my.rubygems-host.org" + } + ], + "dependencies": null, + "directory": "/", + "existing-pull-requests": [], + "ignore-conditions": [], + "security-advisories": [], + "package_manager": "bundler", + "repo-name": "dependabot-fixtures/dependabot-test-ruby-package", + "source": { + "provider": "github", + "repo": "dependabot-fixtures/dependabot-test-ruby-package", + "directory": "/", + "branch": null, + "hostname": "github.com", + "api-endpoint": "https://api.github.com/" + }, + "lockfile-only": false, + "requirements-update-strategy": null, + "update-subdependencies": false, + "updating-a-pull-request": false, + "vendor-dependencies": true, + "security-updates-only": false + }, + "base64_dependency_files":[ + { + "name":"dependabot-test-ruby-package.gemspec", + "content":"IyBmcm96ZW5fc3RyaW5nX2xpdGVyYWw6IHRydWUKCkdlbTo6U3BlY2lmaWNh\ndGlvbi5uZXcgZG8gfHNwZWN8CiAgc3BlYy5uYW1lICAgICA9ICdkZXBlbmRh\nYm90LXRlc3QtcnVieS1wYWNrYWdlJwogIHNwZWMudmVyc2lvbiAgPSAnMS4w\nLjEnCiAgc3BlYy5zdW1tYXJ5ICA9ICdBIGR1bW15IHBhY2thZ2UgZm9yIHRl\nc3RpbmcgRGVwZW5kYWJvdCcKICBzcGVjLmF1dGhvciAgID0gJ0RlcGVuZGFi\nb3QnCiAgc3BlYy5saWNlbnNlICA9ICdNSVQnCiAgc3BlYy5lbWFpbCAgICA9\nICdub3JlcGx5QGdpdGh1Yi5jb20nCiAgc3BlYy5ob21lcGFnZSA9ICdodHRw\nOi8vZ2l0aHViLmNvbS9kZXBlbmRhYm90LWZpeHR1cmVzL2RlcGVuZGFib3Qt\ndGVzdC1ydWJ5LXBhY2thZ2UnCmVuZAo=\n", + "directory":"/", + "type":"file", + "support_file":false, + "content_encoding":"utf-8", + "deleted":false + } + ], + "base_commit_sha":"1c6331732c41e4557a16dacb82534f1d1c831848" +} diff --git a/updater/spec/fixtures/handle_error.json b/updater/spec/fixtures/handle_error.json new file mode 100644 index 00000000..31cce925 --- /dev/null +++ b/updater/spec/fixtures/handle_error.json @@ -0,0 +1,5 @@ +{ + "data": { + "error_type": "some_error_class" + } +} diff --git a/updater/spec/fixtures/job_definitions/bundler/security_updates/group_update_multi_dir.yaml b/updater/spec/fixtures/job_definitions/bundler/security_updates/group_update_multi_dir.yaml new file mode 100644 index 00000000..13ced6e7 --- /dev/null +++ b/updater/spec/fixtures/job_definitions/bundler/security_updates/group_update_multi_dir.yaml @@ -0,0 +1,68 @@ +job: + allowed-updates: + - dependency-type: direct + update-type: all + commit-message-options: + prefix: + prefix-development: + include-scope: + credentials-metadata: + - type: git_source + host: github.com + debug: + dependencies: + - sinatra + dependency-groups: [] + dependency-group-to-refresh: + existing-pull-requests: [] + existing-group-pull-requests: [] + experiments: + grouped-updates-experimental-rules: true + record-ecosystem-versions: true + record-update-job-unknown-error: true + grouped-update: false + ignore-conditions: [] + lockfile-only: false + max-updater-run-time: 2700 + package-manager: bundler + proxy-log-response-body-on-auth-failure: true + requirements-update-strategy: + reject-external-code: false + security-advisories: + - dependency-name: sinatra + patched-versions: [] + unaffected-versions: [] + affected-versions: + - ">= 2.0.0.beta1, < 2.0.1" + - dependency-name: sinatra + patched-versions: [] + unaffected-versions: [] + affected-versions: + - ">= 2.0.0, < 2.0.2" + - dependency-name: sinatra + patched-versions: [] + unaffected-versions: [] + affected-versions: + - "< 2.2.0" + - dependency-name: sinatra + patched-versions: [] + unaffected-versions: [] + affected-versions: + - ">= 2.0.0, < 2.2.3" + - ">= 3.0, < 3.0.4" + security-updates-only: true + source: + provider: github + repo: dependabot-fixtures/test-gsu-multi-dir-bundler + directory: "/foo" + directories: + - "/foo" + - "/bar" + branch: + api-endpoint: https://api.github.com/ + hostname: github.com + commit: 2b0328507b516c5f06a98581aa99ab1233e37429 + updating-a-pull-request: false + update-subdependencies: false + vendor-dependencies: false + repo-private: false diff --git a/updater/spec/fixtures/job_definitions/bundler/version_updates/group_update_all_by_dependency_type.yaml b/updater/spec/fixtures/job_definitions/bundler/version_updates/group_update_all_by_dependency_type.yaml deleted file mode 100644 index 2f3ed238..00000000 --- a/updater/spec/fixtures/job_definitions/bundler/version_updates/group_update_all_by_dependency_type.yaml +++ /dev/null @@ -1,45 +0,0 @@ -job: - package-manager: bundler - source: - provider: github - repo: dependabot/smoke-tests - directory: "/" - branch: - api-endpoint: https://api.github.com/ - hostname: github.com - dependencies: - existing-pull-requests: [] - updating-a-pull-request: false - lockfile-only: false - update-subdependencies: false - ignore-conditions: - - dependency-name: rubocop - version-requirement: "> 1.56.0" - - dependency-name: rack - version-requirement: "> 3.0.8" - requirements-update-strategy: - allowed-updates: - - dependency-type: direct - update-type: all - credentials-metadata: - - type: git_source - host: github.com - security-advisories: [] - max-updater-run-time: 2700 - vendor-dependencies: false - experiments: - grouped-updates-prototype: true - grouped-updates-experimental-rules: true - reject-external-code: false - commit-message-options: - prefix: - prefix-development: - include-scope: - security-updates-only: false - dependency-groups: - - name: dev-dependencies - rules: - dependency-type: "development" - - name: production-dependencies - rules: - dependency-type: "production" diff --git a/updater/spec/fixtures/job_definitions/bundler/version_updates/group_update_all_overlapping_groups.yaml b/updater/spec/fixtures/job_definitions/bundler/version_updates/group_update_all_overlapping_groups.yaml deleted file mode 100644 index e76a7d30..00000000 --- a/updater/spec/fixtures/job_definitions/bundler/version_updates/group_update_all_overlapping_groups.yaml +++ /dev/null @@ -1,42 +0,0 @@ -job: - package-manager: bundler - source: - provider: github - repo: dependabot/smoke-tests - directory: "/" - branch: - api-endpoint: https://api.github.com/ - hostname: github.com - dependencies: - existing-pull-requests: [] - updating-a-pull-request: false - lockfile-only: false - update-subdependencies: false - ignore-conditions: [] - requirements-update-strategy: - allowed-updates: - - dependency-type: direct - update-type: all - credentials-metadata: - - type: git_source - host: github.com - security-advisories: [] - max-updater-run-time: 2700 - vendor-dependencies: false - experiments: - grouped-updates-prototype: true - reject-external-code: false - commit-message-options: - prefix: - prefix-development: - include-scope: - security-updates-only: false - dependency-groups: - - name: my-group - rules: - patterns: - - "dummy-pkg-*" - - name: my-overlapping-group - rules: - patterns: - - "dummy-pkg-*" diff --git a/updater/spec/fixtures/job_definitions/bundler/version_updates/group_update_all_semver_grouping.yaml b/updater/spec/fixtures/job_definitions/bundler/version_updates/group_update_all_semver_grouping.yaml deleted file mode 100644 index 59000f5d..00000000 --- a/updater/spec/fixtures/job_definitions/bundler/version_updates/group_update_all_semver_grouping.yaml +++ /dev/null @@ -1,40 +0,0 @@ -job: - package-manager: bundler - source: - provider: github - repo: dependabot/smoke-tests - directory: "/" - branch: - api-endpoint: https://api.github.com/ - hostname: github.com - dependencies: - existing-pull-requests: [] - updating-a-pull-request: false - lockfile-only: false - update-subdependencies: false - ignore-conditions: [] - requirements-update-strategy: - allowed-updates: - - dependency-type: direct - update-type: all - credentials-metadata: - - type: git_source - host: github.com - security-advisories: [] - max-updater-run-time: 2700 - vendor-dependencies: false - experiments: - grouped-updates-prototype: true - grouped-updates-experimental-rules: true - reject-external-code: false - commit-message-options: - prefix: - prefix-development: - include-scope: - security-updates-only: false - dependency-groups: - - name: small-bumps - rules: - update-types: - - "minor" - - "patch" diff --git a/updater/spec/fixtures/job_definitions/bundler/version_updates/group_update_all_semver_grouping_with_global_ignores.yaml b/updater/spec/fixtures/job_definitions/bundler/version_updates/group_update_all_semver_grouping_with_global_ignores.yaml deleted file mode 100644 index f636a292..00000000 --- a/updater/spec/fixtures/job_definitions/bundler/version_updates/group_update_all_semver_grouping_with_global_ignores.yaml +++ /dev/null @@ -1,41 +0,0 @@ -job: - package-manager: bundler - source: - provider: github - repo: dependabot/smoke-tests - directory: "/" - branch: - api-endpoint: https://api.github.com/ - hostname: github.com - dependencies: - existing-pull-requests: [] - updating-a-pull-request: false - lockfile-only: false - update-subdependencies: false - ignore-conditions: - - dependency-name: "*" - update-types: ["version-update:semver-major"] - requirements-update-strategy: - allowed-updates: - - dependency-type: direct - update-type: all - credentials-metadata: - - type: git_source - host: github.com - security-advisories: [] - max-updater-run-time: 2700 - vendor-dependencies: false - experiments: - grouped-updates-prototype: true - grouped-updates-experimental-rules: true - reject-external-code: false - commit-message-options: - prefix: - prefix-development: - include-scope: - security-updates-only: false - dependency-groups: - - name: patches - rules: - update-types: - - "patch" diff --git a/updater/spec/fixtures/job_definitions/bundler/version_updates/group_update_all_with_ungrouped.yaml b/updater/spec/fixtures/job_definitions/bundler/version_updates/group_update_all_with_ungrouped.yaml deleted file mode 100644 index 21289ade..00000000 --- a/updater/spec/fixtures/job_definitions/bundler/version_updates/group_update_all_with_ungrouped.yaml +++ /dev/null @@ -1,38 +0,0 @@ -job: - package-manager: bundler - source: - provider: github - repo: dependabot/smoke-tests - directory: "/" - branch: - api-endpoint: https://api.github.com/ - hostname: github.com - dependencies: - existing-pull-requests: [] - updating-a-pull-request: false - lockfile-only: false - update-subdependencies: false - ignore-conditions: [] - requirements-update-strategy: - allowed-updates: - - dependency-type: direct - update-type: all - credentials-metadata: - - type: git_source - host: github.com - security-advisories: [] - max-updater-run-time: 2700 - vendor-dependencies: false - experiments: - grouped-updates-prototype: true - reject-external-code: false - commit-message-options: - prefix: - prefix-development: - include-scope: - security-updates-only: false - dependency-groups: - - name: group-b - rules: - patterns: - - "dummy-pkg-b" diff --git a/updater/spec/fixtures/job_definitions/bundler/version_updates/group_update_all_empty_group.yaml b/updater/spec/fixtures/job_definitions/dummy/version_updates/group_update_peer_manifests.yaml similarity index 79% rename from updater/spec/fixtures/job_definitions/bundler/version_updates/group_update_all_empty_group.yaml rename to updater/spec/fixtures/job_definitions/dummy/version_updates/group_update_peer_manifests.yaml index ce148d3c..59c1f26a 100644 --- a/updater/spec/fixtures/job_definitions/bundler/version_updates/group_update_all_empty_group.yaml +++ b/updater/spec/fixtures/job_definitions/dummy/version_updates/group_update_peer_manifests.yaml @@ -1,13 +1,19 @@ job: - package-manager: bundler + package-manager: dummy source: provider: github - repo: dependabot/smoke-tests - directory: "/bundler" + repo: github/dependabot-action + directory: "/dummy" branch: api-endpoint: https://api.github.com/ hostname: github.com + commit: 302aaa943c6507c10cbbfd1b7f0fd623c5743807 dependencies: + dependency-groups: + - name: dependabot-core-images + rules: + patterns: + - "dependabot/*" existing-pull-requests: [] updating-a-pull-request: false lockfile-only: false @@ -31,8 +37,3 @@ job: prefix-development: include-scope: security-updates-only: false - dependency-groups: - - name: everything-everywhere-all-at-once - rules: - patterns: - - "*bagel" diff --git a/updater/spec/fixtures/jobs/job_with_dummy.json b/updater/spec/fixtures/jobs/job_with_dummy.json new file mode 100644 index 00000000..03606302 --- /dev/null +++ b/updater/spec/fixtures/jobs/job_with_dummy.json @@ -0,0 +1,41 @@ +{ + "job": { + "allowed-updates": [ + { + "dependency-type": "direct", + "update-type": "all" + }, + { + "dependency-type": "indirect", + "update-type": "security" + } + ], + "credentials-metadata": [ + { + "type": "git_source", + "host": "github.com" + } + ], + "dependencies": null, + "directory": "/", + "existing-pull-requests": [], + "ignore-conditions": [], + "security-advisories": [], + "package_manager": "dummy", + "repo-name": "dependabot-fixtures/go-modules-lib", + "source": { + "provider": "github", + "repo": "dependabot-fixtures/go-modules-lib", + "directory": "/", + "branch": null, + "hostname": "github.com", + "api-endpoint": "https://api.github.com/" + }, + "lockfile-only": false, + "requirements-update-strategy": null, + "update-subdependencies": false, + "updating-a-pull-request": false, + "vendor-dependencies": false, + "security-updates-only": false + } +} diff --git a/updater/spec/fixtures/jobs/job_with_vendor_dependencies.json b/updater/spec/fixtures/jobs/job_with_vendor_dependencies.json new file mode 100644 index 00000000..24f7d2cf --- /dev/null +++ b/updater/spec/fixtures/jobs/job_with_vendor_dependencies.json @@ -0,0 +1,58 @@ +{ + "job": { + "allowed-updates": [ + { + "dependency-type": "direct", + "update-type": "all" + }, + { + "dependency-type": "indirect", + "update-type": "security" + } + ], + "credentials-metadata": [ + { + "type": "git_source", + "host": "github.com" + }, + { + "type": "rubygems_index", + "host": "my.rubygems-host.org" + } + ], + "dependencies": null, + "directory": "/", + "existing-pull-requests": [], + "ignore-conditions": [], + "security-advisories": [], + "package_manager": "bundler", + "repo-name": "dependabot-fixtures/dependabot-test-ruby-package", + "source": { + "provider": "github", + "repo": "dependabot-fixtures/dependabot-test-ruby-package", + "directory": "/", + "branch": null, + "hostname": "github.com", + "api-endpoint": "https://api.github.com/" + }, + "lockfile-only": false, + "requirements-update-strategy": null, + "update-subdependencies": false, + "updating-a-pull-request": false, + "vendor-dependencies": true, + "security-updates-only": false + }, + "credentials": [ + { + "type": "git_source", + "host": "github.com", + "username": "x-access-token", + "password": "v1.exampletokenfromgithubinityesitisforsure" + }, + { + "type": "rubygems_index", + "host": "my.rubygems-host.org", + "token": "secret" + } + ] +} diff --git a/updater/spec/fixtures/jobs/job_without_credentials.json b/updater/spec/fixtures/jobs/job_without_credentials.json new file mode 100644 index 00000000..0044aba5 --- /dev/null +++ b/updater/spec/fixtures/jobs/job_without_credentials.json @@ -0,0 +1,45 @@ +{ + "job": { + "allowed-updates": [ + { + "dependency-type": "direct", + "update-type": "all" + }, + { + "dependency-type": "indirect", + "update-type": "security" + } + ], + "credentials-metadata": [ + { + "type": "git_source", + "host": "github.com" + }, + { + "type": "rubygems_index", + "host": "my.rubygems-host.org" + } + ], + "dependencies": null, + "directory": "/", + "existing-pull-requests": [], + "ignore-conditions": [], + "security-advisories": [], + "package_manager": "bundler", + "repo-name": "dependabot-fixtures/dependabot-test-ruby-package", + "source": { + "provider": "github", + "repo": "dependabot-fixtures/dependabot-test-ruby-package", + "directory": "/", + "branch": null, + "hostname": "github.com", + "api-endpoint": "https://api.github.com/" + }, + "lockfile-only": false, + "requirements-update-strategy": null, + "update-subdependencies": false, + "updating-a-pull-request": false, + "vendor-dependencies": false, + "security-updates-only": false + } +} diff --git a/updater/spec/fixtures/vcr_cassettes/Dependabot_FileFetcherCommand/_perform_job/does_not_clone_the_repo.yml b/updater/spec/fixtures/vcr_cassettes/Dependabot_FileFetcherCommand/_perform_job/does_not_clone_the_repo.yml new file mode 100644 index 00000000..4bba419b --- /dev/null +++ b/updater/spec/fixtures/vcr_cassettes/Dependabot_FileFetcherCommand/_perform_job/does_not_clone_the_repo.yml @@ -0,0 +1,302 @@ +--- +http_interactions: +- request: + method: get + uri: https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package + body: + encoding: US-ASCII + string: '' + headers: + User-Agent: + - Octokit Ruby Gem 4.19.0 + Accept: + - application/vnd.github.v3+json + Content-Type: + - application/json + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + response: + status: + code: 200 + message: OK + headers: + Server: + - GitHub.com + Date: + - Thu, 29 Oct 2020 19:20:31 GMT + Content-Type: + - application/json; charset=utf-8 + Status: + - 200 OK + Cache-Control: + - public, max-age=60, s-maxage=60 + Vary: + - Accept, Accept-Encoding, Accept, X-Requested-With + Etag: + - W/"c7014303ad99dbf7e02ae891e64a18881566da6a75b8b457cb0cf96705f6eca6" + Last-Modified: + - Wed, 27 May 2020 11:17:06 GMT + X-Github-Media-Type: + - github.v3; format=json + Access-Control-Expose-Headers: + - ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, + X-RateLimit-Used, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, + X-Poll-Interval, X-GitHub-Media-Type, Deprecation, Sunset + Access-Control-Allow-Origin: + - "*" + Strict-Transport-Security: + - max-age=31536000; includeSubdomains; preload + X-Frame-Options: + - deny + X-Content-Type-Options: + - nosniff + X-Xss-Protection: + - 1; mode=block + Referrer-Policy: + - origin-when-cross-origin, strict-origin-when-cross-origin + Content-Security-Policy: + - default-src 'none' + X-Ratelimit-Limit: + - '60' + X-Ratelimit-Remaining: + - '52' + X-Ratelimit-Reset: + - '1603999545' + X-Ratelimit-Used: + - '8' + Accept-Ranges: + - bytes + Content-Length: + - '1254' + X-Github-Request-Id: + - C80F:51E5:12C5A2:20FA0C:5F9B15FF + body: + encoding: ASCII-8BIT + string: '{"id":267290099,"node_id":"MDEwOlJlcG9zaXRvcnkyNjcyOTAwOTk=","name":"dependabot-test-ruby-package","full_name":"dependabot-fixtures/dependabot-test-ruby-package","private":false,"owner":{"login":"dependabot-fixtures","id":44116593,"node_id":"MDEyOk9yZ2FuaXphdGlvbjQ0MTE2NTkz","avatar_url":"https://avatars0.githubusercontent.com/u/44116593?v=4","gravatar_id":"","url":"https://api.github.com/users/dependabot-fixtures","html_url":"https://github.com/dependabot-fixtures","followers_url":"https://api.github.com/users/dependabot-fixtures/followers","following_url":"https://api.github.com/users/dependabot-fixtures/following{/other_user}","gists_url":"https://api.github.com/users/dependabot-fixtures/gists{/gist_id}","starred_url":"https://api.github.com/users/dependabot-fixtures/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dependabot-fixtures/subscriptions","organizations_url":"https://api.github.com/users/dependabot-fixtures/orgs","repos_url":"https://api.github.com/users/dependabot-fixtures/repos","events_url":"https://api.github.com/users/dependabot-fixtures/events{/privacy}","received_events_url":"https://api.github.com/users/dependabot-fixtures/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/dependabot-fixtures/dependabot-test-ruby-package","description":"A + ruby gem for testing dependabot","fork":false,"url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package","forks_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/forks","keys_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/keys{/key_id}","collaborators_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/teams","hooks_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/hooks","issue_events_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/issues/events{/number}","events_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/events","assignees_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/assignees{/user}","branches_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/branches{/branch}","tags_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/tags","blobs_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/git/refs{/sha}","trees_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/git/trees{/sha}","statuses_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/statuses/{sha}","languages_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/languages","stargazers_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/stargazers","contributors_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/contributors","subscribers_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/subscribers","subscription_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/subscription","commits_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/commits{/sha}","git_commits_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/git/commits{/sha}","comments_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/comments{/number}","issue_comment_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/issues/comments{/number}","contents_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/contents/{+path}","compare_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/compare/{base}...{head}","merges_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/merges","archive_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/downloads","issues_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/issues{/number}","pulls_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/pulls{/number}","milestones_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/milestones{/number}","notifications_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/labels{/name}","releases_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/releases{/id}","deployments_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/deployments","created_at":"2020-05-27T10:32:22Z","updated_at":"2020-05-27T11:17:06Z","pushed_at":"2020-05-27T11:23:26Z","git_url":"git://github.com/dependabot-fixtures/dependabot-test-ruby-package.git","ssh_url":"git@github.com:dependabot-fixtures/dependabot-test-ruby-package.git","clone_url":"https://github.com/dependabot-fixtures/dependabot-test-ruby-package.git","svn_url":"https://github.com/dependabot-fixtures/dependabot-test-ruby-package","homepage":null,"size":1,"stargazers_count":0,"watchers_count":0,"language":"Ruby","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":0,"license":null,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master","temp_clone_token":null,"organization":{"login":"dependabot-fixtures","id":44116593,"node_id":"MDEyOk9yZ2FuaXphdGlvbjQ0MTE2NTkz","avatar_url":"https://avatars0.githubusercontent.com/u/44116593?v=4","gravatar_id":"","url":"https://api.github.com/users/dependabot-fixtures","html_url":"https://github.com/dependabot-fixtures","followers_url":"https://api.github.com/users/dependabot-fixtures/followers","following_url":"https://api.github.com/users/dependabot-fixtures/following{/other_user}","gists_url":"https://api.github.com/users/dependabot-fixtures/gists{/gist_id}","starred_url":"https://api.github.com/users/dependabot-fixtures/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dependabot-fixtures/subscriptions","organizations_url":"https://api.github.com/users/dependabot-fixtures/orgs","repos_url":"https://api.github.com/users/dependabot-fixtures/repos","events_url":"https://api.github.com/users/dependabot-fixtures/events{/privacy}","received_events_url":"https://api.github.com/users/dependabot-fixtures/received_events","type":"Organization","site_admin":false},"network_count":0,"subscribers_count":0}' + recorded_at: Thu, 29 Oct 2020 19:20:32 GMT +- request: + method: get + uri: https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/git/refs/heads/master + body: + encoding: US-ASCII + string: '' + headers: + User-Agent: + - Octokit Ruby Gem 4.19.0 + Accept: + - application/vnd.github.v3+json + Content-Type: + - application/json + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + response: + status: + code: 200 + message: OK + headers: + Server: + - GitHub.com + Date: + - Thu, 29 Oct 2020 19:20:32 GMT + Content-Type: + - application/json; charset=utf-8 + Status: + - 200 OK + Cache-Control: + - public, max-age=60, s-maxage=60 + Vary: + - Accept, Accept-Encoding, Accept, X-Requested-With + Etag: + - W/"4ec4b41160548cc0f86c2459b25f9dd74f27df28fc425f9786cdb4ab70be7e01" + Last-Modified: + - Wed, 27 May 2020 11:17:06 GMT + X-Poll-Interval: + - '300' + X-Github-Media-Type: + - github.v3; format=json + Access-Control-Expose-Headers: + - ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, + X-RateLimit-Used, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, + X-Poll-Interval, X-GitHub-Media-Type, Deprecation, Sunset + Access-Control-Allow-Origin: + - "*" + Strict-Transport-Security: + - max-age=31536000; includeSubdomains; preload + X-Frame-Options: + - deny + X-Content-Type-Options: + - nosniff + X-Xss-Protection: + - 1; mode=block + Referrer-Policy: + - origin-when-cross-origin, strict-origin-when-cross-origin + Content-Security-Policy: + - default-src 'none' + X-Ratelimit-Limit: + - '60' + X-Ratelimit-Remaining: + - '51' + X-Ratelimit-Reset: + - '1603999545' + X-Ratelimit-Used: + - '9' + Accept-Ranges: + - bytes + Content-Length: + - '237' + X-Github-Request-Id: + - C810:0BE6:144B46:2232C8:5F9B1600 + body: + encoding: ASCII-8BIT + string: '{"ref":"refs/heads/master","node_id":"MDM6UmVmMjY3MjkwMDk5OnJlZnMvaGVhZHMvbWFzdGVy","url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/git/refs/heads/master","object":{"sha":"1c6331732c41e4557a16dacb82534f1d1c831848","type":"commit","url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/git/commits/1c6331732c41e4557a16dacb82534f1d1c831848"}}' + recorded_at: Thu, 29 Oct 2020 19:20:32 GMT +- request: + method: get + uri: https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/contents/?ref=1c6331732c41e4557a16dacb82534f1d1c831848 + body: + encoding: US-ASCII + string: '' + headers: + User-Agent: + - Octokit Ruby Gem 4.19.0 + Accept: + - application/vnd.github.v3+json + Content-Type: + - application/json + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + response: + status: + code: 200 + message: OK + headers: + Server: + - GitHub.com + Date: + - Thu, 29 Oct 2020 19:20:32 GMT + Content-Type: + - application/json; charset=utf-8 + Status: + - 200 OK + Cache-Control: + - public, max-age=60, s-maxage=60 + Vary: + - Accept, Accept-Encoding, Accept, X-Requested-With + Etag: + - W/"7b44807c792639c3b05064b3493694c6b4cce370" + Last-Modified: + - Wed, 27 May 2020 11:17:06 GMT + X-Github-Media-Type: + - github.v3; format=json + Access-Control-Expose-Headers: + - ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, + X-RateLimit-Used, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, + X-Poll-Interval, X-GitHub-Media-Type, Deprecation, Sunset + Access-Control-Allow-Origin: + - "*" + Strict-Transport-Security: + - max-age=31536000; includeSubdomains; preload + X-Frame-Options: + - deny + X-Content-Type-Options: + - nosniff + X-Xss-Protection: + - 1; mode=block + Referrer-Policy: + - origin-when-cross-origin, strict-origin-when-cross-origin + Content-Security-Policy: + - default-src 'none' + X-Ratelimit-Limit: + - '60' + X-Ratelimit-Remaining: + - '50' + X-Ratelimit-Reset: + - '1603999545' + X-Ratelimit-Used: + - '10' + Accept-Ranges: + - bytes + Content-Length: + - '496' + X-Github-Request-Id: + - C811:0357:123458:1FE6AE:5F9B1600 + body: + encoding: ASCII-8BIT + string: '[{"name":".gitignore","path":".gitignore","sha":"c111b331371ae211d3bc2e3a9e34ad2a7d6b3982","size":6,"url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/contents/.gitignore?ref=1c6331732c41e4557a16dacb82534f1d1c831848","html_url":"https://github.com/dependabot-fixtures/dependabot-test-ruby-package/blob/1c6331732c41e4557a16dacb82534f1d1c831848/.gitignore","git_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/git/blobs/c111b331371ae211d3bc2e3a9e34ad2a7d6b3982","download_url":"https://raw.githubusercontent.com/dependabot-fixtures/dependabot-test-ruby-package/1c6331732c41e4557a16dacb82534f1d1c831848/.gitignore","type":"file","_links":{"self":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/contents/.gitignore?ref=1c6331732c41e4557a16dacb82534f1d1c831848","git":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/git/blobs/c111b331371ae211d3bc2e3a9e34ad2a7d6b3982","html":"https://github.com/dependabot-fixtures/dependabot-test-ruby-package/blob/1c6331732c41e4557a16dacb82534f1d1c831848/.gitignore"}},{"name":"README.md","path":"README.md","sha":"f71de17053d17a9a5d135b3bfff3f6aa4409dc4b","size":85,"url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/contents/README.md?ref=1c6331732c41e4557a16dacb82534f1d1c831848","html_url":"https://github.com/dependabot-fixtures/dependabot-test-ruby-package/blob/1c6331732c41e4557a16dacb82534f1d1c831848/README.md","git_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/git/blobs/f71de17053d17a9a5d135b3bfff3f6aa4409dc4b","download_url":"https://raw.githubusercontent.com/dependabot-fixtures/dependabot-test-ruby-package/1c6331732c41e4557a16dacb82534f1d1c831848/README.md","type":"file","_links":{"self":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/contents/README.md?ref=1c6331732c41e4557a16dacb82534f1d1c831848","git":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/git/blobs/f71de17053d17a9a5d135b3bfff3f6aa4409dc4b","html":"https://github.com/dependabot-fixtures/dependabot-test-ruby-package/blob/1c6331732c41e4557a16dacb82534f1d1c831848/README.md"}},{"name":"dependabot-test-ruby-package.gemspec","path":"dependabot-test-ruby-package.gemspec","sha":"c5fd208850ed1bf1334b4b9cd4910950bed0c497","size":383,"url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/contents/dependabot-test-ruby-package.gemspec?ref=1c6331732c41e4557a16dacb82534f1d1c831848","html_url":"https://github.com/dependabot-fixtures/dependabot-test-ruby-package/blob/1c6331732c41e4557a16dacb82534f1d1c831848/dependabot-test-ruby-package.gemspec","git_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/git/blobs/c5fd208850ed1bf1334b4b9cd4910950bed0c497","download_url":"https://raw.githubusercontent.com/dependabot-fixtures/dependabot-test-ruby-package/1c6331732c41e4557a16dacb82534f1d1c831848/dependabot-test-ruby-package.gemspec","type":"file","_links":{"self":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/contents/dependabot-test-ruby-package.gemspec?ref=1c6331732c41e4557a16dacb82534f1d1c831848","git":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/git/blobs/c5fd208850ed1bf1334b4b9cd4910950bed0c497","html":"https://github.com/dependabot-fixtures/dependabot-test-ruby-package/blob/1c6331732c41e4557a16dacb82534f1d1c831848/dependabot-test-ruby-package.gemspec"}}]' + recorded_at: Thu, 29 Oct 2020 19:20:32 GMT +- request: + method: get + uri: https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/contents/dependabot-test-ruby-package.gemspec?ref=1c6331732c41e4557a16dacb82534f1d1c831848 + body: + encoding: US-ASCII + string: '' + headers: + User-Agent: + - Octokit Ruby Gem 4.19.0 + Accept: + - application/vnd.github.v3+json + Content-Type: + - application/json + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + response: + status: + code: 200 + message: OK + headers: + Server: + - GitHub.com + Date: + - Thu, 29 Oct 2020 19:20:32 GMT + Content-Type: + - application/json; charset=utf-8 + Status: + - 200 OK + Cache-Control: + - public, max-age=60, s-maxage=60 + Vary: + - Accept, Accept-Encoding, Accept, X-Requested-With + Etag: + - W/"c5fd208850ed1bf1334b4b9cd4910950bed0c497" + Last-Modified: + - Wed, 27 May 2020 10:39:57 GMT + X-Github-Media-Type: + - github.v3; format=json + Access-Control-Expose-Headers: + - ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, + X-RateLimit-Used, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, + X-Poll-Interval, X-GitHub-Media-Type, Deprecation, Sunset + Access-Control-Allow-Origin: + - "*" + Strict-Transport-Security: + - max-age=31536000; includeSubdomains; preload + X-Frame-Options: + - deny + X-Content-Type-Options: + - nosniff + X-Xss-Protection: + - 1; mode=block + Referrer-Policy: + - origin-when-cross-origin, strict-origin-when-cross-origin + Content-Security-Policy: + - default-src 'none' + X-Ratelimit-Limit: + - '60' + X-Ratelimit-Remaining: + - '49' + X-Ratelimit-Reset: + - '1603999545' + X-Ratelimit-Used: + - '11' + Accept-Ranges: + - bytes + Content-Length: + - '703' + X-Github-Request-Id: + - C812:0357:123474:1FE6DE:5F9B1600 + body: + encoding: ASCII-8BIT + string: '{"name":"dependabot-test-ruby-package.gemspec","path":"dependabot-test-ruby-package.gemspec","sha":"c5fd208850ed1bf1334b4b9cd4910950bed0c497","size":383,"url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/contents/dependabot-test-ruby-package.gemspec?ref=1c6331732c41e4557a16dacb82534f1d1c831848","html_url":"https://github.com/dependabot-fixtures/dependabot-test-ruby-package/blob/1c6331732c41e4557a16dacb82534f1d1c831848/dependabot-test-ruby-package.gemspec","git_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/git/blobs/c5fd208850ed1bf1334b4b9cd4910950bed0c497","download_url":"https://raw.githubusercontent.com/dependabot-fixtures/dependabot-test-ruby-package/1c6331732c41e4557a16dacb82534f1d1c831848/dependabot-test-ruby-package.gemspec","type":"file","content":"IyBmcm96ZW5fc3RyaW5nX2xpdGVyYWw6IHRydWUKCkdlbTo6U3BlY2lmaWNh\ndGlvbi5uZXcgZG8gfHNwZWN8CiAgc3BlYy5uYW1lICAgICA9ICdkZXBlbmRh\nYm90LXRlc3QtcnVieS1wYWNrYWdlJwogIHNwZWMudmVyc2lvbiAgPSAnMS4w\nLjEnCiAgc3BlYy5zdW1tYXJ5ICA9ICdBIGR1bW15IHBhY2thZ2UgZm9yIHRl\nc3RpbmcgRGVwZW5kYWJvdCcKICBzcGVjLmF1dGhvciAgID0gJ0RlcGVuZGFi\nb3QnCiAgc3BlYy5saWNlbnNlICA9ICdNSVQnCiAgc3BlYy5lbWFpbCAgICA9\nICdub3JlcGx5QGdpdGh1Yi5jb20nCiAgc3BlYy5ob21lcGFnZSA9ICdodHRw\nOi8vZ2l0aHViLmNvbS9kZXBlbmRhYm90LWZpeHR1cmVzL2RlcGVuZGFib3Qt\ndGVzdC1ydWJ5LXBhY2thZ2UnCmVuZAo=\n","encoding":"base64","_links":{"self":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/contents/dependabot-test-ruby-package.gemspec?ref=1c6331732c41e4557a16dacb82534f1d1c831848","git":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/git/blobs/c5fd208850ed1bf1334b4b9cd4910950bed0c497","html":"https://github.com/dependabot-fixtures/dependabot-test-ruby-package/blob/1c6331732c41e4557a16dacb82534f1d1c831848/dependabot-test-ruby-package.gemspec"}}' + recorded_at: Thu, 29 Oct 2020 19:20:32 GMT +recorded_with: VCR 6.0.0 diff --git a/updater/spec/fixtures/vcr_cassettes/Dependabot_FileFetcherCommand/_perform_job/fetches_the_files_and_writes_the_fetched_files_to_output_json.yml b/updater/spec/fixtures/vcr_cassettes/Dependabot_FileFetcherCommand/_perform_job/fetches_the_files_and_writes_the_fetched_files_to_output_json.yml new file mode 100644 index 00000000..a57dd2ac --- /dev/null +++ b/updater/spec/fixtures/vcr_cassettes/Dependabot_FileFetcherCommand/_perform_job/fetches_the_files_and_writes_the_fetched_files_to_output_json.yml @@ -0,0 +1,294 @@ +--- +http_interactions: +- request: + method: get + uri: https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package + body: + encoding: US-ASCII + string: '' + headers: + User-Agent: + - Octokit Ruby Gem 4.18.0 + Accept: + - application/vnd.github.v3+json + Content-Type: + - application/json + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + response: + status: + code: 200 + message: OK + headers: + Server: + - GitHub.com + Date: + - Thu, 20 Aug 2020 15:19:20 GMT + Content-Type: + - application/json; charset=utf-8 + Status: + - 200 OK + Cache-Control: + - public, max-age=60, s-maxage=60 + Vary: + - Accept, Accept-Encoding, Accept, X-Requested-With + Etag: + - W/"05138d3b8df2fc6f68facbbc84776e4d" + Last-Modified: + - Wed, 27 May 2020 11:17:06 GMT + X-Github-Media-Type: + - github.v3; format=json + Access-Control-Expose-Headers: + - ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, + X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, + X-GitHub-Media-Type, Deprecation, Sunset + Access-Control-Allow-Origin: + - "*" + Strict-Transport-Security: + - max-age=31536000; includeSubdomains; preload + X-Frame-Options: + - deny + X-Content-Type-Options: + - nosniff + X-Xss-Protection: + - 1; mode=block + Referrer-Policy: + - origin-when-cross-origin, strict-origin-when-cross-origin + Content-Security-Policy: + - default-src 'none' + X-Ratelimit-Limit: + - '60' + X-Ratelimit-Remaining: + - '42' + X-Ratelimit-Reset: + - '1597938283' + Accept-Ranges: + - bytes + Transfer-Encoding: + - chunked + X-Github-Request-Id: + - FED9:4A5A:67DBD2:F5E8C6:5F3E9478 + body: + encoding: ASCII-8BIT + string: '{"id":267290099,"node_id":"MDEwOlJlcG9zaXRvcnkyNjcyOTAwOTk=","name":"dependabot-test-ruby-package","full_name":"dependabot-fixtures/dependabot-test-ruby-package","private":false,"owner":{"login":"dependabot-fixtures","id":44116593,"node_id":"MDEyOk9yZ2FuaXphdGlvbjQ0MTE2NTkz","avatar_url":"https://avatars0.githubusercontent.com/u/44116593?v=4","gravatar_id":"","url":"https://api.github.com/users/dependabot-fixtures","html_url":"https://github.com/dependabot-fixtures","followers_url":"https://api.github.com/users/dependabot-fixtures/followers","following_url":"https://api.github.com/users/dependabot-fixtures/following{/other_user}","gists_url":"https://api.github.com/users/dependabot-fixtures/gists{/gist_id}","starred_url":"https://api.github.com/users/dependabot-fixtures/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dependabot-fixtures/subscriptions","organizations_url":"https://api.github.com/users/dependabot-fixtures/orgs","repos_url":"https://api.github.com/users/dependabot-fixtures/repos","events_url":"https://api.github.com/users/dependabot-fixtures/events{/privacy}","received_events_url":"https://api.github.com/users/dependabot-fixtures/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/dependabot-fixtures/dependabot-test-ruby-package","description":"A + ruby gem for testing dependabot","fork":false,"url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package","forks_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/forks","keys_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/keys{/key_id}","collaborators_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/teams","hooks_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/hooks","issue_events_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/issues/events{/number}","events_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/events","assignees_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/assignees{/user}","branches_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/branches{/branch}","tags_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/tags","blobs_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/git/refs{/sha}","trees_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/git/trees{/sha}","statuses_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/statuses/{sha}","languages_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/languages","stargazers_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/stargazers","contributors_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/contributors","subscribers_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/subscribers","subscription_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/subscription","commits_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/commits{/sha}","git_commits_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/git/commits{/sha}","comments_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/comments{/number}","issue_comment_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/issues/comments{/number}","contents_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/contents/{+path}","compare_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/compare/{base}...{head}","merges_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/merges","archive_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/downloads","issues_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/issues{/number}","pulls_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/pulls{/number}","milestones_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/milestones{/number}","notifications_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/labels{/name}","releases_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/releases{/id}","deployments_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/deployments","created_at":"2020-05-27T10:32:22Z","updated_at":"2020-05-27T11:17:06Z","pushed_at":"2020-05-27T11:23:26Z","git_url":"git://github.com/dependabot-fixtures/dependabot-test-ruby-package.git","ssh_url":"git@github.com:dependabot-fixtures/dependabot-test-ruby-package.git","clone_url":"https://github.com/dependabot-fixtures/dependabot-test-ruby-package.git","svn_url":"https://github.com/dependabot-fixtures/dependabot-test-ruby-package","homepage":null,"size":1,"stargazers_count":0,"watchers_count":0,"language":"Ruby","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":0,"license":null,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master","temp_clone_token":null,"organization":{"login":"dependabot-fixtures","id":44116593,"node_id":"MDEyOk9yZ2FuaXphdGlvbjQ0MTE2NTkz","avatar_url":"https://avatars0.githubusercontent.com/u/44116593?v=4","gravatar_id":"","url":"https://api.github.com/users/dependabot-fixtures","html_url":"https://github.com/dependabot-fixtures","followers_url":"https://api.github.com/users/dependabot-fixtures/followers","following_url":"https://api.github.com/users/dependabot-fixtures/following{/other_user}","gists_url":"https://api.github.com/users/dependabot-fixtures/gists{/gist_id}","starred_url":"https://api.github.com/users/dependabot-fixtures/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dependabot-fixtures/subscriptions","organizations_url":"https://api.github.com/users/dependabot-fixtures/orgs","repos_url":"https://api.github.com/users/dependabot-fixtures/repos","events_url":"https://api.github.com/users/dependabot-fixtures/events{/privacy}","received_events_url":"https://api.github.com/users/dependabot-fixtures/received_events","type":"Organization","site_admin":false},"network_count":0,"subscribers_count":0}' + recorded_at: Thu, 20 Aug 2020 15:19:20 GMT +- request: + method: get + uri: https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/git/refs/heads/master + body: + encoding: US-ASCII + string: '' + headers: + User-Agent: + - Octokit Ruby Gem 4.18.0 + Accept: + - application/vnd.github.v3+json + Content-Type: + - application/json + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + response: + status: + code: 200 + message: OK + headers: + Server: + - GitHub.com + Date: + - Thu, 20 Aug 2020 15:19:20 GMT + Content-Type: + - application/json; charset=utf-8 + Status: + - 200 OK + Cache-Control: + - public, max-age=60, s-maxage=60 + Vary: + - Accept, Accept-Encoding, Accept, X-Requested-With + Etag: + - W/"65d96789fd44ca17a64d185184c47a55" + Last-Modified: + - Wed, 27 May 2020 11:17:06 GMT + X-Poll-Interval: + - '300' + X-Github-Media-Type: + - github.v3; format=json + Access-Control-Expose-Headers: + - ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, + X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, + X-GitHub-Media-Type, Deprecation, Sunset + Access-Control-Allow-Origin: + - "*" + Strict-Transport-Security: + - max-age=31536000; includeSubdomains; preload + X-Frame-Options: + - deny + X-Content-Type-Options: + - nosniff + X-Xss-Protection: + - 1; mode=block + Referrer-Policy: + - origin-when-cross-origin, strict-origin-when-cross-origin + Content-Security-Policy: + - default-src 'none' + X-Ratelimit-Limit: + - '60' + X-Ratelimit-Remaining: + - '41' + X-Ratelimit-Reset: + - '1597938283' + Accept-Ranges: + - bytes + Content-Length: + - '237' + X-Github-Request-Id: + - FEDA:29AB:71BB21:FD5860:5F3E9478 + body: + encoding: ASCII-8BIT + string: '{"ref":"refs/heads/master","node_id":"MDM6UmVmMjY3MjkwMDk5OnJlZnMvaGVhZHMvbWFzdGVy","url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/git/refs/heads/master","object":{"sha":"1c6331732c41e4557a16dacb82534f1d1c831848","type":"commit","url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/git/commits/1c6331732c41e4557a16dacb82534f1d1c831848"}}' + recorded_at: Thu, 20 Aug 2020 15:19:20 GMT +- request: + method: get + uri: https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/contents/?ref=1c6331732c41e4557a16dacb82534f1d1c831848 + body: + encoding: US-ASCII + string: '' + headers: + User-Agent: + - Octokit Ruby Gem 4.18.0 + Accept: + - application/vnd.github.v3+json + Content-Type: + - application/json + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + response: + status: + code: 200 + message: OK + headers: + Server: + - GitHub.com + Date: + - Thu, 20 Aug 2020 15:19:21 GMT + Content-Type: + - application/json; charset=utf-8 + Status: + - 200 OK + Cache-Control: + - public, max-age=60, s-maxage=60 + Vary: + - Accept, Accept-Encoding, Accept, X-Requested-With + Etag: + - W/"7b44807c792639c3b05064b3493694c6b4cce370" + Last-Modified: + - Wed, 27 May 2020 11:17:06 GMT + X-Github-Media-Type: + - github.v3; format=json + Access-Control-Expose-Headers: + - ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, + X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, + X-GitHub-Media-Type, Deprecation, Sunset + Access-Control-Allow-Origin: + - "*" + Strict-Transport-Security: + - max-age=31536000; includeSubdomains; preload + X-Frame-Options: + - deny + X-Content-Type-Options: + - nosniff + X-Xss-Protection: + - 1; mode=block + Referrer-Policy: + - origin-when-cross-origin, strict-origin-when-cross-origin + Content-Security-Policy: + - default-src 'none' + X-Ratelimit-Limit: + - '60' + X-Ratelimit-Remaining: + - '40' + X-Ratelimit-Reset: + - '1597938284' + Accept-Ranges: + - bytes + Content-Length: + - '496' + X-Github-Request-Id: + - FEDB:549C:3517BB:8B1654:5F3E9479 + body: + encoding: ASCII-8BIT + string: '[{"name":".gitignore","path":".gitignore","sha":"c111b331371ae211d3bc2e3a9e34ad2a7d6b3982","size":6,"url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/contents/.gitignore?ref=1c6331732c41e4557a16dacb82534f1d1c831848","html_url":"https://github.com/dependabot-fixtures/dependabot-test-ruby-package/blob/1c6331732c41e4557a16dacb82534f1d1c831848/.gitignore","git_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/git/blobs/c111b331371ae211d3bc2e3a9e34ad2a7d6b3982","download_url":"https://raw.githubusercontent.com/dependabot-fixtures/dependabot-test-ruby-package/1c6331732c41e4557a16dacb82534f1d1c831848/.gitignore","type":"file","_links":{"self":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/contents/.gitignore?ref=1c6331732c41e4557a16dacb82534f1d1c831848","git":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/git/blobs/c111b331371ae211d3bc2e3a9e34ad2a7d6b3982","html":"https://github.com/dependabot-fixtures/dependabot-test-ruby-package/blob/1c6331732c41e4557a16dacb82534f1d1c831848/.gitignore"}},{"name":"README.md","path":"README.md","sha":"f71de17053d17a9a5d135b3bfff3f6aa4409dc4b","size":85,"url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/contents/README.md?ref=1c6331732c41e4557a16dacb82534f1d1c831848","html_url":"https://github.com/dependabot-fixtures/dependabot-test-ruby-package/blob/1c6331732c41e4557a16dacb82534f1d1c831848/README.md","git_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/git/blobs/f71de17053d17a9a5d135b3bfff3f6aa4409dc4b","download_url":"https://raw.githubusercontent.com/dependabot-fixtures/dependabot-test-ruby-package/1c6331732c41e4557a16dacb82534f1d1c831848/README.md","type":"file","_links":{"self":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/contents/README.md?ref=1c6331732c41e4557a16dacb82534f1d1c831848","git":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/git/blobs/f71de17053d17a9a5d135b3bfff3f6aa4409dc4b","html":"https://github.com/dependabot-fixtures/dependabot-test-ruby-package/blob/1c6331732c41e4557a16dacb82534f1d1c831848/README.md"}},{"name":"dependabot-test-ruby-package.gemspec","path":"dependabot-test-ruby-package.gemspec","sha":"c5fd208850ed1bf1334b4b9cd4910950bed0c497","size":383,"url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/contents/dependabot-test-ruby-package.gemspec?ref=1c6331732c41e4557a16dacb82534f1d1c831848","html_url":"https://github.com/dependabot-fixtures/dependabot-test-ruby-package/blob/1c6331732c41e4557a16dacb82534f1d1c831848/dependabot-test-ruby-package.gemspec","git_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/git/blobs/c5fd208850ed1bf1334b4b9cd4910950bed0c497","download_url":"https://raw.githubusercontent.com/dependabot-fixtures/dependabot-test-ruby-package/1c6331732c41e4557a16dacb82534f1d1c831848/dependabot-test-ruby-package.gemspec","type":"file","_links":{"self":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/contents/dependabot-test-ruby-package.gemspec?ref=1c6331732c41e4557a16dacb82534f1d1c831848","git":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/git/blobs/c5fd208850ed1bf1334b4b9cd4910950bed0c497","html":"https://github.com/dependabot-fixtures/dependabot-test-ruby-package/blob/1c6331732c41e4557a16dacb82534f1d1c831848/dependabot-test-ruby-package.gemspec"}}]' + recorded_at: Thu, 20 Aug 2020 15:19:21 GMT +- request: + method: get + uri: https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/contents/dependabot-test-ruby-package.gemspec?ref=1c6331732c41e4557a16dacb82534f1d1c831848 + body: + encoding: US-ASCII + string: '' + headers: + User-Agent: + - Octokit Ruby Gem 4.18.0 + Accept: + - application/vnd.github.v3+json + Content-Type: + - application/json + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + response: + status: + code: 200 + message: OK + headers: + Server: + - GitHub.com + Date: + - Thu, 20 Aug 2020 15:19:21 GMT + Content-Type: + - application/json; charset=utf-8 + Status: + - 200 OK + Cache-Control: + - public, max-age=60, s-maxage=60 + Vary: + - Accept, Accept-Encoding, Accept, X-Requested-With + Etag: + - W/"c5fd208850ed1bf1334b4b9cd4910950bed0c497" + Last-Modified: + - Wed, 27 May 2020 10:39:57 GMT + X-Github-Media-Type: + - github.v3; format=json + Access-Control-Expose-Headers: + - ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, + X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, + X-GitHub-Media-Type, Deprecation, Sunset + Access-Control-Allow-Origin: + - "*" + Strict-Transport-Security: + - max-age=31536000; includeSubdomains; preload + X-Frame-Options: + - deny + X-Content-Type-Options: + - nosniff + X-Xss-Protection: + - 1; mode=block + Referrer-Policy: + - origin-when-cross-origin, strict-origin-when-cross-origin + Content-Security-Policy: + - default-src 'none' + X-Ratelimit-Limit: + - '60' + X-Ratelimit-Remaining: + - '39' + X-Ratelimit-Reset: + - '1597938283' + Accept-Ranges: + - bytes + Content-Length: + - '703' + X-Github-Request-Id: + - FEDC:455E:E95A4A:1861D80:5F3E9479 + body: + encoding: ASCII-8BIT + string: '{"name":"dependabot-test-ruby-package.gemspec","path":"dependabot-test-ruby-package.gemspec","sha":"c5fd208850ed1bf1334b4b9cd4910950bed0c497","size":383,"url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/contents/dependabot-test-ruby-package.gemspec?ref=1c6331732c41e4557a16dacb82534f1d1c831848","html_url":"https://github.com/dependabot-fixtures/dependabot-test-ruby-package/blob/1c6331732c41e4557a16dacb82534f1d1c831848/dependabot-test-ruby-package.gemspec","git_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/git/blobs/c5fd208850ed1bf1334b4b9cd4910950bed0c497","download_url":"https://raw.githubusercontent.com/dependabot-fixtures/dependabot-test-ruby-package/1c6331732c41e4557a16dacb82534f1d1c831848/dependabot-test-ruby-package.gemspec","type":"file","content":"IyBmcm96ZW5fc3RyaW5nX2xpdGVyYWw6IHRydWUKCkdlbTo6U3BlY2lmaWNh\ndGlvbi5uZXcgZG8gfHNwZWN8CiAgc3BlYy5uYW1lICAgICA9ICdkZXBlbmRh\nYm90LXRlc3QtcnVieS1wYWNrYWdlJwogIHNwZWMudmVyc2lvbiAgPSAnMS4w\nLjEnCiAgc3BlYy5zdW1tYXJ5ICA9ICdBIGR1bW15IHBhY2thZ2UgZm9yIHRl\nc3RpbmcgRGVwZW5kYWJvdCcKICBzcGVjLmF1dGhvciAgID0gJ0RlcGVuZGFi\nb3QnCiAgc3BlYy5saWNlbnNlICA9ICdNSVQnCiAgc3BlYy5lbWFpbCAgICA9\nICdub3JlcGx5QGdpdGh1Yi5jb20nCiAgc3BlYy5ob21lcGFnZSA9ICdodHRw\nOi8vZ2l0aHViLmNvbS9kZXBlbmRhYm90LWZpeHR1cmVzL2RlcGVuZGFib3Qt\ndGVzdC1ydWJ5LXBhY2thZ2UnCmVuZAo=\n","encoding":"base64","_links":{"self":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/contents/dependabot-test-ruby-package.gemspec?ref=1c6331732c41e4557a16dacb82534f1d1c831848","git":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/git/blobs/c5fd208850ed1bf1334b4b9cd4910950bed0c497","html":"https://github.com/dependabot-fixtures/dependabot-test-ruby-package/blob/1c6331732c41e4557a16dacb82534f1d1c831848/dependabot-test-ruby-package.gemspec"}}' + recorded_at: Thu, 20 Aug 2020 15:19:21 GMT +recorded_with: VCR 6.0.0 diff --git a/updater/spec/fixtures/vcr_cassettes/Dependabot_FileFetcherCommand/_perform_job/when_the_connectivity_check_is_enabled/logs_connectivity_is_successful_and_does_not_raise_an_error.yml b/updater/spec/fixtures/vcr_cassettes/Dependabot_FileFetcherCommand/_perform_job/when_the_connectivity_check_is_enabled/logs_connectivity_is_successful_and_does_not_raise_an_error.yml new file mode 100644 index 00000000..f6ffdd02 --- /dev/null +++ b/updater/spec/fixtures/vcr_cassettes/Dependabot_FileFetcherCommand/_perform_job/when_the_connectivity_check_is_enabled/logs_connectivity_is_successful_and_does_not_raise_an_error.yml @@ -0,0 +1,382 @@ +--- +http_interactions: +- request: + method: get + uri: https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package + body: + encoding: US-ASCII + string: '' + headers: + User-Agent: + - Octokit Ruby Gem 4.22.0 + Accept: + - application/vnd.github.v3+json + Content-Type: + - application/json + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + response: + status: + code: 200 + message: OK + headers: + Server: + - GitHub.com + Date: + - Tue, 15 Mar 2022 19:30:05 GMT + Content-Type: + - application/json; charset=utf-8 + Cache-Control: + - public, max-age=60, s-maxage=60 + Vary: + - Accept, Accept-Encoding, Accept, X-Requested-With + Etag: + - W/"d041f3a6129802958b654fb48b93bc9dc7ccb7d70f223019425d4c0d579491c6" + Last-Modified: + - Wed, 27 May 2020 11:17:06 GMT + X-Github-Media-Type: + - github.v3; format=json + Access-Control-Expose-Headers: + - ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, + X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, + X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, + X-GitHub-Request-Id, Deprecation, Sunset + Access-Control-Allow-Origin: + - "*" + Strict-Transport-Security: + - max-age=31536000; includeSubdomains; preload + X-Frame-Options: + - deny + X-Content-Type-Options: + - nosniff + X-Xss-Protection: + - '0' + Referrer-Policy: + - origin-when-cross-origin, strict-origin-when-cross-origin + Content-Security-Policy: + - default-src 'none' + X-Ratelimit-Limit: + - '60' + X-Ratelimit-Remaining: + - '43' + X-Ratelimit-Reset: + - '1647374033' + X-Ratelimit-Resource: + - core + X-Ratelimit-Used: + - '17' + Accept-Ranges: + - bytes + Content-Length: + - '1298' + X-Github-Request-Id: + - 0400:5036:3954D:41410:6230E93D + body: + encoding: ASCII-8BIT + string: '{"id":267290099,"node_id":"MDEwOlJlcG9zaXRvcnkyNjcyOTAwOTk=","name":"dependabot-test-ruby-package","full_name":"dependabot-fixtures/dependabot-test-ruby-package","private":false,"owner":{"login":"dependabot-fixtures","id":44116593,"node_id":"MDEyOk9yZ2FuaXphdGlvbjQ0MTE2NTkz","avatar_url":"https://avatars.githubusercontent.com/u/44116593?v=4","gravatar_id":"","url":"https://api.github.com/users/dependabot-fixtures","html_url":"https://github.com/dependabot-fixtures","followers_url":"https://api.github.com/users/dependabot-fixtures/followers","following_url":"https://api.github.com/users/dependabot-fixtures/following{/other_user}","gists_url":"https://api.github.com/users/dependabot-fixtures/gists{/gist_id}","starred_url":"https://api.github.com/users/dependabot-fixtures/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dependabot-fixtures/subscriptions","organizations_url":"https://api.github.com/users/dependabot-fixtures/orgs","repos_url":"https://api.github.com/users/dependabot-fixtures/repos","events_url":"https://api.github.com/users/dependabot-fixtures/events{/privacy}","received_events_url":"https://api.github.com/users/dependabot-fixtures/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/dependabot-fixtures/dependabot-test-ruby-package","description":"A + ruby gem for testing dependabot","fork":false,"url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package","forks_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/forks","keys_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/keys{/key_id}","collaborators_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/teams","hooks_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/hooks","issue_events_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/issues/events{/number}","events_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/events","assignees_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/assignees{/user}","branches_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/branches{/branch}","tags_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/tags","blobs_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/git/refs{/sha}","trees_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/git/trees{/sha}","statuses_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/statuses/{sha}","languages_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/languages","stargazers_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/stargazers","contributors_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/contributors","subscribers_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/subscribers","subscription_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/subscription","commits_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/commits{/sha}","git_commits_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/git/commits{/sha}","comments_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/comments{/number}","issue_comment_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/issues/comments{/number}","contents_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/contents/{+path}","compare_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/compare/{base}...{head}","merges_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/merges","archive_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/downloads","issues_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/issues{/number}","pulls_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/pulls{/number}","milestones_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/milestones{/number}","notifications_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/labels{/name}","releases_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/releases{/id}","deployments_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/deployments","created_at":"2020-05-27T10:32:22Z","updated_at":"2020-05-27T11:17:06Z","pushed_at":"2020-05-27T11:23:26Z","git_url":"git://github.com/dependabot-fixtures/dependabot-test-ruby-package.git","ssh_url":"git@github.com:dependabot-fixtures/dependabot-test-ruby-package.git","clone_url":"https://github.com/dependabot-fixtures/dependabot-test-ruby-package.git","svn_url":"https://github.com/dependabot-fixtures/dependabot-test-ruby-package","homepage":null,"size":1,"stargazers_count":0,"watchers_count":0,"language":"Ruby","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":0,"license":null,"allow_forking":true,"is_template":false,"topics":[],"visibility":"public","forks":0,"open_issues":0,"watchers":0,"default_branch":"master","temp_clone_token":null,"organization":{"login":"dependabot-fixtures","id":44116593,"node_id":"MDEyOk9yZ2FuaXphdGlvbjQ0MTE2NTkz","avatar_url":"https://avatars.githubusercontent.com/u/44116593?v=4","gravatar_id":"","url":"https://api.github.com/users/dependabot-fixtures","html_url":"https://github.com/dependabot-fixtures","followers_url":"https://api.github.com/users/dependabot-fixtures/followers","following_url":"https://api.github.com/users/dependabot-fixtures/following{/other_user}","gists_url":"https://api.github.com/users/dependabot-fixtures/gists{/gist_id}","starred_url":"https://api.github.com/users/dependabot-fixtures/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dependabot-fixtures/subscriptions","organizations_url":"https://api.github.com/users/dependabot-fixtures/orgs","repos_url":"https://api.github.com/users/dependabot-fixtures/repos","events_url":"https://api.github.com/users/dependabot-fixtures/events{/privacy}","received_events_url":"https://api.github.com/users/dependabot-fixtures/received_events","type":"Organization","site_admin":false},"network_count":0,"subscribers_count":1}' + recorded_at: Tue, 15 Mar 2022 19:30:05 GMT +- request: + method: get + uri: https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package + body: + encoding: US-ASCII + string: '' + headers: + User-Agent: + - Octokit Ruby Gem 4.22.0 + Accept: + - application/vnd.github.v3+json + Content-Type: + - application/json + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + response: + status: + code: 200 + message: OK + headers: + Server: + - GitHub.com + Date: + - Tue, 15 Mar 2022 19:30:05 GMT + Content-Type: + - application/json; charset=utf-8 + Cache-Control: + - public, max-age=60, s-maxage=60 + Vary: + - Accept, Accept-Encoding, Accept, X-Requested-With + Etag: + - W/"d041f3a6129802958b654fb48b93bc9dc7ccb7d70f223019425d4c0d579491c6" + Last-Modified: + - Wed, 27 May 2020 11:17:06 GMT + X-Github-Media-Type: + - github.v3; format=json + Access-Control-Expose-Headers: + - ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, + X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, + X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, + X-GitHub-Request-Id, Deprecation, Sunset + Access-Control-Allow-Origin: + - "*" + Strict-Transport-Security: + - max-age=31536000; includeSubdomains; preload + X-Frame-Options: + - deny + X-Content-Type-Options: + - nosniff + X-Xss-Protection: + - '0' + Referrer-Policy: + - origin-when-cross-origin, strict-origin-when-cross-origin + Content-Security-Policy: + - default-src 'none' + X-Ratelimit-Limit: + - '60' + X-Ratelimit-Remaining: + - '42' + X-Ratelimit-Reset: + - '1647374033' + X-Ratelimit-Resource: + - core + X-Ratelimit-Used: + - '18' + Accept-Ranges: + - bytes + Content-Length: + - '1298' + X-Github-Request-Id: + - 0401:2EA6:1406B3:14B558:6230E93D + body: + encoding: ASCII-8BIT + string: '{"id":267290099,"node_id":"MDEwOlJlcG9zaXRvcnkyNjcyOTAwOTk=","name":"dependabot-test-ruby-package","full_name":"dependabot-fixtures/dependabot-test-ruby-package","private":false,"owner":{"login":"dependabot-fixtures","id":44116593,"node_id":"MDEyOk9yZ2FuaXphdGlvbjQ0MTE2NTkz","avatar_url":"https://avatars.githubusercontent.com/u/44116593?v=4","gravatar_id":"","url":"https://api.github.com/users/dependabot-fixtures","html_url":"https://github.com/dependabot-fixtures","followers_url":"https://api.github.com/users/dependabot-fixtures/followers","following_url":"https://api.github.com/users/dependabot-fixtures/following{/other_user}","gists_url":"https://api.github.com/users/dependabot-fixtures/gists{/gist_id}","starred_url":"https://api.github.com/users/dependabot-fixtures/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dependabot-fixtures/subscriptions","organizations_url":"https://api.github.com/users/dependabot-fixtures/orgs","repos_url":"https://api.github.com/users/dependabot-fixtures/repos","events_url":"https://api.github.com/users/dependabot-fixtures/events{/privacy}","received_events_url":"https://api.github.com/users/dependabot-fixtures/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/dependabot-fixtures/dependabot-test-ruby-package","description":"A + ruby gem for testing dependabot","fork":false,"url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package","forks_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/forks","keys_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/keys{/key_id}","collaborators_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/teams","hooks_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/hooks","issue_events_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/issues/events{/number}","events_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/events","assignees_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/assignees{/user}","branches_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/branches{/branch}","tags_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/tags","blobs_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/git/refs{/sha}","trees_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/git/trees{/sha}","statuses_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/statuses/{sha}","languages_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/languages","stargazers_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/stargazers","contributors_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/contributors","subscribers_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/subscribers","subscription_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/subscription","commits_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/commits{/sha}","git_commits_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/git/commits{/sha}","comments_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/comments{/number}","issue_comment_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/issues/comments{/number}","contents_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/contents/{+path}","compare_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/compare/{base}...{head}","merges_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/merges","archive_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/downloads","issues_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/issues{/number}","pulls_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/pulls{/number}","milestones_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/milestones{/number}","notifications_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/labels{/name}","releases_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/releases{/id}","deployments_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/deployments","created_at":"2020-05-27T10:32:22Z","updated_at":"2020-05-27T11:17:06Z","pushed_at":"2020-05-27T11:23:26Z","git_url":"git://github.com/dependabot-fixtures/dependabot-test-ruby-package.git","ssh_url":"git@github.com:dependabot-fixtures/dependabot-test-ruby-package.git","clone_url":"https://github.com/dependabot-fixtures/dependabot-test-ruby-package.git","svn_url":"https://github.com/dependabot-fixtures/dependabot-test-ruby-package","homepage":null,"size":1,"stargazers_count":0,"watchers_count":0,"language":"Ruby","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":0,"license":null,"allow_forking":true,"is_template":false,"topics":[],"visibility":"public","forks":0,"open_issues":0,"watchers":0,"default_branch":"master","temp_clone_token":null,"organization":{"login":"dependabot-fixtures","id":44116593,"node_id":"MDEyOk9yZ2FuaXphdGlvbjQ0MTE2NTkz","avatar_url":"https://avatars.githubusercontent.com/u/44116593?v=4","gravatar_id":"","url":"https://api.github.com/users/dependabot-fixtures","html_url":"https://github.com/dependabot-fixtures","followers_url":"https://api.github.com/users/dependabot-fixtures/followers","following_url":"https://api.github.com/users/dependabot-fixtures/following{/other_user}","gists_url":"https://api.github.com/users/dependabot-fixtures/gists{/gist_id}","starred_url":"https://api.github.com/users/dependabot-fixtures/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dependabot-fixtures/subscriptions","organizations_url":"https://api.github.com/users/dependabot-fixtures/orgs","repos_url":"https://api.github.com/users/dependabot-fixtures/repos","events_url":"https://api.github.com/users/dependabot-fixtures/events{/privacy}","received_events_url":"https://api.github.com/users/dependabot-fixtures/received_events","type":"Organization","site_admin":false},"network_count":0,"subscribers_count":1}' + recorded_at: Tue, 15 Mar 2022 19:30:05 GMT +- request: + method: get + uri: https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/git/refs/heads/master + body: + encoding: US-ASCII + string: '' + headers: + User-Agent: + - Octokit Ruby Gem 4.22.0 + Accept: + - application/vnd.github.v3+json + Content-Type: + - application/json + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + response: + status: + code: 200 + message: OK + headers: + Server: + - GitHub.com + Date: + - Tue, 15 Mar 2022 19:30:05 GMT + Content-Type: + - application/json; charset=utf-8 + Cache-Control: + - public, max-age=60, s-maxage=60 + Vary: + - Accept, Accept-Encoding, Accept, X-Requested-With + Etag: + - W/"4ec4b41160548cc0f86c2459b25f9dd74f27df28fc425f9786cdb4ab70be7e01" + Last-Modified: + - Wed, 27 May 2020 11:17:06 GMT + X-Poll-Interval: + - '300' + X-Github-Media-Type: + - github.v3; format=json + Access-Control-Expose-Headers: + - ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, + X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, + X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, + X-GitHub-Request-Id, Deprecation, Sunset + Access-Control-Allow-Origin: + - "*" + Strict-Transport-Security: + - max-age=31536000; includeSubdomains; preload + X-Frame-Options: + - deny + X-Content-Type-Options: + - nosniff + X-Xss-Protection: + - '0' + Referrer-Policy: + - origin-when-cross-origin, strict-origin-when-cross-origin + Content-Security-Policy: + - default-src 'none' + X-Ratelimit-Limit: + - '60' + X-Ratelimit-Remaining: + - '41' + X-Ratelimit-Reset: + - '1647374033' + X-Ratelimit-Resource: + - core + X-Ratelimit-Used: + - '19' + Accept-Ranges: + - bytes + Content-Length: + - '237' + X-Github-Request-Id: + - 0402:19A3:158342:163172:6230E93D + body: + encoding: ASCII-8BIT + string: '{"ref":"refs/heads/master","node_id":"MDM6UmVmMjY3MjkwMDk5OnJlZnMvaGVhZHMvbWFzdGVy","url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/git/refs/heads/master","object":{"sha":"1c6331732c41e4557a16dacb82534f1d1c831848","type":"commit","url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/git/commits/1c6331732c41e4557a16dacb82534f1d1c831848"}}' + recorded_at: Tue, 15 Mar 2022 19:30:05 GMT +- request: + method: get + uri: https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/contents/?ref=1c6331732c41e4557a16dacb82534f1d1c831848 + body: + encoding: US-ASCII + string: '' + headers: + User-Agent: + - Octokit Ruby Gem 4.22.0 + Accept: + - application/vnd.github.v3+json + Content-Type: + - application/json + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + response: + status: + code: 200 + message: OK + headers: + Server: + - GitHub.com + Date: + - Tue, 15 Mar 2022 19:30:05 GMT + Content-Type: + - application/json; charset=utf-8 + Cache-Control: + - public, max-age=60, s-maxage=60 + Vary: + - Accept, Accept-Encoding, Accept, X-Requested-With + Etag: + - W/"7b44807c792639c3b05064b3493694c6b4cce370" + Last-Modified: + - Wed, 27 May 2020 11:17:06 GMT + X-Github-Media-Type: + - github.v3; format=json + Access-Control-Expose-Headers: + - ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, + X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, + X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, + X-GitHub-Request-Id, Deprecation, Sunset + Access-Control-Allow-Origin: + - "*" + Strict-Transport-Security: + - max-age=31536000; includeSubdomains; preload + X-Frame-Options: + - deny + X-Content-Type-Options: + - nosniff + X-Xss-Protection: + - '0' + Referrer-Policy: + - origin-when-cross-origin, strict-origin-when-cross-origin + Content-Security-Policy: + - default-src 'none' + X-Ratelimit-Limit: + - '60' + X-Ratelimit-Remaining: + - '40' + X-Ratelimit-Reset: + - '1647374033' + X-Ratelimit-Resource: + - core + X-Ratelimit-Used: + - '20' + Accept-Ranges: + - bytes + Content-Length: + - '496' + X-Github-Request-Id: + - 0403:7088:17566:1EFBA:6230E93D + body: + encoding: ASCII-8BIT + string: '[{"name":".gitignore","path":".gitignore","sha":"c111b331371ae211d3bc2e3a9e34ad2a7d6b3982","size":6,"url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/contents/.gitignore?ref=1c6331732c41e4557a16dacb82534f1d1c831848","html_url":"https://github.com/dependabot-fixtures/dependabot-test-ruby-package/blob/1c6331732c41e4557a16dacb82534f1d1c831848/.gitignore","git_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/git/blobs/c111b331371ae211d3bc2e3a9e34ad2a7d6b3982","download_url":"https://raw.githubusercontent.com/dependabot-fixtures/dependabot-test-ruby-package/1c6331732c41e4557a16dacb82534f1d1c831848/.gitignore","type":"file","_links":{"self":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/contents/.gitignore?ref=1c6331732c41e4557a16dacb82534f1d1c831848","git":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/git/blobs/c111b331371ae211d3bc2e3a9e34ad2a7d6b3982","html":"https://github.com/dependabot-fixtures/dependabot-test-ruby-package/blob/1c6331732c41e4557a16dacb82534f1d1c831848/.gitignore"}},{"name":"README.md","path":"README.md","sha":"f71de17053d17a9a5d135b3bfff3f6aa4409dc4b","size":85,"url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/contents/README.md?ref=1c6331732c41e4557a16dacb82534f1d1c831848","html_url":"https://github.com/dependabot-fixtures/dependabot-test-ruby-package/blob/1c6331732c41e4557a16dacb82534f1d1c831848/README.md","git_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/git/blobs/f71de17053d17a9a5d135b3bfff3f6aa4409dc4b","download_url":"https://raw.githubusercontent.com/dependabot-fixtures/dependabot-test-ruby-package/1c6331732c41e4557a16dacb82534f1d1c831848/README.md","type":"file","_links":{"self":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/contents/README.md?ref=1c6331732c41e4557a16dacb82534f1d1c831848","git":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/git/blobs/f71de17053d17a9a5d135b3bfff3f6aa4409dc4b","html":"https://github.com/dependabot-fixtures/dependabot-test-ruby-package/blob/1c6331732c41e4557a16dacb82534f1d1c831848/README.md"}},{"name":"dependabot-test-ruby-package.gemspec","path":"dependabot-test-ruby-package.gemspec","sha":"c5fd208850ed1bf1334b4b9cd4910950bed0c497","size":383,"url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/contents/dependabot-test-ruby-package.gemspec?ref=1c6331732c41e4557a16dacb82534f1d1c831848","html_url":"https://github.com/dependabot-fixtures/dependabot-test-ruby-package/blob/1c6331732c41e4557a16dacb82534f1d1c831848/dependabot-test-ruby-package.gemspec","git_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/git/blobs/c5fd208850ed1bf1334b4b9cd4910950bed0c497","download_url":"https://raw.githubusercontent.com/dependabot-fixtures/dependabot-test-ruby-package/1c6331732c41e4557a16dacb82534f1d1c831848/dependabot-test-ruby-package.gemspec","type":"file","_links":{"self":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/contents/dependabot-test-ruby-package.gemspec?ref=1c6331732c41e4557a16dacb82534f1d1c831848","git":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/git/blobs/c5fd208850ed1bf1334b4b9cd4910950bed0c497","html":"https://github.com/dependabot-fixtures/dependabot-test-ruby-package/blob/1c6331732c41e4557a16dacb82534f1d1c831848/dependabot-test-ruby-package.gemspec"}}]' + recorded_at: Tue, 15 Mar 2022 19:30:05 GMT +- request: + method: get + uri: https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/contents/dependabot-test-ruby-package.gemspec?ref=1c6331732c41e4557a16dacb82534f1d1c831848 + body: + encoding: US-ASCII + string: '' + headers: + User-Agent: + - Octokit Ruby Gem 4.22.0 + Accept: + - application/vnd.github.v3+json + Content-Type: + - application/json + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + response: + status: + code: 200 + message: OK + headers: + Server: + - GitHub.com + Date: + - Tue, 15 Mar 2022 19:30:05 GMT + Content-Type: + - application/json; charset=utf-8 + Cache-Control: + - public, max-age=60, s-maxage=60 + Vary: + - Accept, Accept-Encoding, Accept, X-Requested-With + Etag: + - W/"c5fd208850ed1bf1334b4b9cd4910950bed0c497" + Last-Modified: + - Wed, 27 May 2020 10:39:57 GMT + X-Github-Media-Type: + - github.v3; format=json + Access-Control-Expose-Headers: + - ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, + X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, + X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, + X-GitHub-Request-Id, Deprecation, Sunset + Access-Control-Allow-Origin: + - "*" + Strict-Transport-Security: + - max-age=31536000; includeSubdomains; preload + X-Frame-Options: + - deny + X-Content-Type-Options: + - nosniff + X-Xss-Protection: + - '0' + Referrer-Policy: + - origin-when-cross-origin, strict-origin-when-cross-origin + Content-Security-Policy: + - default-src 'none' + X-Ratelimit-Limit: + - '60' + X-Ratelimit-Remaining: + - '39' + X-Ratelimit-Reset: + - '1647374033' + X-Ratelimit-Resource: + - core + X-Ratelimit-Used: + - '21' + Accept-Ranges: + - bytes + Content-Length: + - '703' + X-Github-Request-Id: + - 0404:19A2:D5755:DF679:6230E93D + body: + encoding: ASCII-8BIT + string: '{"name":"dependabot-test-ruby-package.gemspec","path":"dependabot-test-ruby-package.gemspec","sha":"c5fd208850ed1bf1334b4b9cd4910950bed0c497","size":383,"url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/contents/dependabot-test-ruby-package.gemspec?ref=1c6331732c41e4557a16dacb82534f1d1c831848","html_url":"https://github.com/dependabot-fixtures/dependabot-test-ruby-package/blob/1c6331732c41e4557a16dacb82534f1d1c831848/dependabot-test-ruby-package.gemspec","git_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/git/blobs/c5fd208850ed1bf1334b4b9cd4910950bed0c497","download_url":"https://raw.githubusercontent.com/dependabot-fixtures/dependabot-test-ruby-package/1c6331732c41e4557a16dacb82534f1d1c831848/dependabot-test-ruby-package.gemspec","type":"file","content":"IyBmcm96ZW5fc3RyaW5nX2xpdGVyYWw6IHRydWUKCkdlbTo6U3BlY2lmaWNh\ndGlvbi5uZXcgZG8gfHNwZWN8CiAgc3BlYy5uYW1lICAgICA9ICdkZXBlbmRh\nYm90LXRlc3QtcnVieS1wYWNrYWdlJwogIHNwZWMudmVyc2lvbiAgPSAnMS4w\nLjEnCiAgc3BlYy5zdW1tYXJ5ICA9ICdBIGR1bW15IHBhY2thZ2UgZm9yIHRl\nc3RpbmcgRGVwZW5kYWJvdCcKICBzcGVjLmF1dGhvciAgID0gJ0RlcGVuZGFi\nb3QnCiAgc3BlYy5saWNlbnNlICA9ICdNSVQnCiAgc3BlYy5lbWFpbCAgICA9\nICdub3JlcGx5QGdpdGh1Yi5jb20nCiAgc3BlYy5ob21lcGFnZSA9ICdodHRw\nOi8vZ2l0aHViLmNvbS9kZXBlbmRhYm90LWZpeHR1cmVzL2RlcGVuZGFib3Qt\ndGVzdC1ydWJ5LXBhY2thZ2UnCmVuZAo=\n","encoding":"base64","_links":{"self":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/contents/dependabot-test-ruby-package.gemspec?ref=1c6331732c41e4557a16dacb82534f1d1c831848","git":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/git/blobs/c5fd208850ed1bf1334b4b9cd4910950bed0c497","html":"https://github.com/dependabot-fixtures/dependabot-test-ruby-package/blob/1c6331732c41e4557a16dacb82534f1d1c831848/dependabot-test-ruby-package.gemspec"}}' + recorded_at: Tue, 15 Mar 2022 19:30:05 GMT +recorded_with: VCR 6.0.0 diff --git a/updater/spec/fixtures/vcr_cassettes/Dependabot_FileFetcherCommand/_perform_job/when_the_connectivity_check_is_enabled/when_connectivity_is_broken/logs_connectivity_failed_and_does_not_raise_an_error.yml b/updater/spec/fixtures/vcr_cassettes/Dependabot_FileFetcherCommand/_perform_job/when_the_connectivity_check_is_enabled/when_connectivity_is_broken/logs_connectivity_failed_and_does_not_raise_an_error.yml new file mode 100644 index 00000000..98e5e2a8 --- /dev/null +++ b/updater/spec/fixtures/vcr_cassettes/Dependabot_FileFetcherCommand/_perform_job/when_the_connectivity_check_is_enabled/when_connectivity_is_broken/logs_connectivity_failed_and_does_not_raise_an_error.yml @@ -0,0 +1,306 @@ +--- +http_interactions: +- request: + method: get + uri: https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package + body: + encoding: US-ASCII + string: '' + headers: + User-Agent: + - Octokit Ruby Gem 4.22.0 + Accept: + - application/vnd.github.v3+json + Content-Type: + - application/json + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + response: + status: + code: 200 + message: OK + headers: + Server: + - GitHub.com + Date: + - Tue, 15 Mar 2022 19:23:50 GMT + Content-Type: + - application/json; charset=utf-8 + Cache-Control: + - public, max-age=60, s-maxage=60 + Vary: + - Accept, Accept-Encoding, Accept, X-Requested-With + Etag: + - W/"d041f3a6129802958b654fb48b93bc9dc7ccb7d70f223019425d4c0d579491c6" + Last-Modified: + - Wed, 27 May 2020 11:17:06 GMT + X-Github-Media-Type: + - github.v3; format=json + Access-Control-Expose-Headers: + - ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, + X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, + X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, + X-GitHub-Request-Id, Deprecation, Sunset + Access-Control-Allow-Origin: + - "*" + Strict-Transport-Security: + - max-age=31536000; includeSubdomains; preload + X-Frame-Options: + - deny + X-Content-Type-Options: + - nosniff + X-Xss-Protection: + - '0' + Referrer-Policy: + - origin-when-cross-origin, strict-origin-when-cross-origin + Content-Security-Policy: + - default-src 'none' + X-Ratelimit-Limit: + - '60' + X-Ratelimit-Remaining: + - '47' + X-Ratelimit-Reset: + - '1647374033' + X-Ratelimit-Resource: + - core + X-Ratelimit-Used: + - '13' + Accept-Ranges: + - bytes + Content-Length: + - '1298' + X-Github-Request-Id: + - 0401:2EA6:132466:13CA55:6230E7C7 + body: + encoding: ASCII-8BIT + string: '{"id":267290099,"node_id":"MDEwOlJlcG9zaXRvcnkyNjcyOTAwOTk=","name":"dependabot-test-ruby-package","full_name":"dependabot-fixtures/dependabot-test-ruby-package","private":false,"owner":{"login":"dependabot-fixtures","id":44116593,"node_id":"MDEyOk9yZ2FuaXphdGlvbjQ0MTE2NTkz","avatar_url":"https://avatars.githubusercontent.com/u/44116593?v=4","gravatar_id":"","url":"https://api.github.com/users/dependabot-fixtures","html_url":"https://github.com/dependabot-fixtures","followers_url":"https://api.github.com/users/dependabot-fixtures/followers","following_url":"https://api.github.com/users/dependabot-fixtures/following{/other_user}","gists_url":"https://api.github.com/users/dependabot-fixtures/gists{/gist_id}","starred_url":"https://api.github.com/users/dependabot-fixtures/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dependabot-fixtures/subscriptions","organizations_url":"https://api.github.com/users/dependabot-fixtures/orgs","repos_url":"https://api.github.com/users/dependabot-fixtures/repos","events_url":"https://api.github.com/users/dependabot-fixtures/events{/privacy}","received_events_url":"https://api.github.com/users/dependabot-fixtures/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/dependabot-fixtures/dependabot-test-ruby-package","description":"A + ruby gem for testing dependabot","fork":false,"url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package","forks_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/forks","keys_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/keys{/key_id}","collaborators_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/teams","hooks_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/hooks","issue_events_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/issues/events{/number}","events_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/events","assignees_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/assignees{/user}","branches_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/branches{/branch}","tags_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/tags","blobs_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/git/refs{/sha}","trees_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/git/trees{/sha}","statuses_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/statuses/{sha}","languages_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/languages","stargazers_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/stargazers","contributors_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/contributors","subscribers_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/subscribers","subscription_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/subscription","commits_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/commits{/sha}","git_commits_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/git/commits{/sha}","comments_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/comments{/number}","issue_comment_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/issues/comments{/number}","contents_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/contents/{+path}","compare_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/compare/{base}...{head}","merges_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/merges","archive_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/downloads","issues_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/issues{/number}","pulls_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/pulls{/number}","milestones_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/milestones{/number}","notifications_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/labels{/name}","releases_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/releases{/id}","deployments_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/deployments","created_at":"2020-05-27T10:32:22Z","updated_at":"2020-05-27T11:17:06Z","pushed_at":"2020-05-27T11:23:26Z","git_url":"git://github.com/dependabot-fixtures/dependabot-test-ruby-package.git","ssh_url":"git@github.com:dependabot-fixtures/dependabot-test-ruby-package.git","clone_url":"https://github.com/dependabot-fixtures/dependabot-test-ruby-package.git","svn_url":"https://github.com/dependabot-fixtures/dependabot-test-ruby-package","homepage":null,"size":1,"stargazers_count":0,"watchers_count":0,"language":"Ruby","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":0,"license":null,"allow_forking":true,"is_template":false,"topics":[],"visibility":"public","forks":0,"open_issues":0,"watchers":0,"default_branch":"master","temp_clone_token":null,"organization":{"login":"dependabot-fixtures","id":44116593,"node_id":"MDEyOk9yZ2FuaXphdGlvbjQ0MTE2NTkz","avatar_url":"https://avatars.githubusercontent.com/u/44116593?v=4","gravatar_id":"","url":"https://api.github.com/users/dependabot-fixtures","html_url":"https://github.com/dependabot-fixtures","followers_url":"https://api.github.com/users/dependabot-fixtures/followers","following_url":"https://api.github.com/users/dependabot-fixtures/following{/other_user}","gists_url":"https://api.github.com/users/dependabot-fixtures/gists{/gist_id}","starred_url":"https://api.github.com/users/dependabot-fixtures/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dependabot-fixtures/subscriptions","organizations_url":"https://api.github.com/users/dependabot-fixtures/orgs","repos_url":"https://api.github.com/users/dependabot-fixtures/repos","events_url":"https://api.github.com/users/dependabot-fixtures/events{/privacy}","received_events_url":"https://api.github.com/users/dependabot-fixtures/received_events","type":"Organization","site_admin":false},"network_count":0,"subscribers_count":1}' + recorded_at: Tue, 15 Mar 2022 19:23:51 GMT +- request: + method: get + uri: https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/git/refs/heads/master + body: + encoding: US-ASCII + string: '' + headers: + User-Agent: + - Octokit Ruby Gem 4.22.0 + Accept: + - application/vnd.github.v3+json + Content-Type: + - application/json + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + response: + status: + code: 200 + message: OK + headers: + Server: + - GitHub.com + Date: + - Tue, 15 Mar 2022 19:23:50 GMT + Content-Type: + - application/json; charset=utf-8 + Cache-Control: + - public, max-age=60, s-maxage=60 + Vary: + - Accept, Accept-Encoding, Accept, X-Requested-With + Etag: + - W/"4ec4b41160548cc0f86c2459b25f9dd74f27df28fc425f9786cdb4ab70be7e01" + Last-Modified: + - Wed, 27 May 2020 11:17:06 GMT + X-Poll-Interval: + - '300' + X-Github-Media-Type: + - github.v3; format=json + Access-Control-Expose-Headers: + - ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, + X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, + X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, + X-GitHub-Request-Id, Deprecation, Sunset + Access-Control-Allow-Origin: + - "*" + Strict-Transport-Security: + - max-age=31536000; includeSubdomains; preload + X-Frame-Options: + - deny + X-Content-Type-Options: + - nosniff + X-Xss-Protection: + - '0' + Referrer-Policy: + - origin-when-cross-origin, strict-origin-when-cross-origin + Content-Security-Policy: + - default-src 'none' + X-Ratelimit-Limit: + - '60' + X-Ratelimit-Remaining: + - '46' + X-Ratelimit-Reset: + - '1647374033' + X-Ratelimit-Resource: + - core + X-Ratelimit-Used: + - '14' + Accept-Ranges: + - bytes + Content-Length: + - '237' + X-Github-Request-Id: + - 0403:7084:1D95:8E8F:6230E7C7 + body: + encoding: ASCII-8BIT + string: '{"ref":"refs/heads/master","node_id":"MDM6UmVmMjY3MjkwMDk5OnJlZnMvaGVhZHMvbWFzdGVy","url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/git/refs/heads/master","object":{"sha":"1c6331732c41e4557a16dacb82534f1d1c831848","type":"commit","url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/git/commits/1c6331732c41e4557a16dacb82534f1d1c831848"}}' + recorded_at: Tue, 15 Mar 2022 19:23:51 GMT +- request: + method: get + uri: https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/contents/?ref=1c6331732c41e4557a16dacb82534f1d1c831848 + body: + encoding: US-ASCII + string: '' + headers: + User-Agent: + - Octokit Ruby Gem 4.22.0 + Accept: + - application/vnd.github.v3+json + Content-Type: + - application/json + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + response: + status: + code: 200 + message: OK + headers: + Server: + - GitHub.com + Date: + - Tue, 15 Mar 2022 19:23:50 GMT + Content-Type: + - application/json; charset=utf-8 + Cache-Control: + - public, max-age=60, s-maxage=60 + Vary: + - Accept, Accept-Encoding, Accept, X-Requested-With + Etag: + - W/"7b44807c792639c3b05064b3493694c6b4cce370" + Last-Modified: + - Wed, 27 May 2020 11:17:06 GMT + X-Github-Media-Type: + - github.v3; format=json + Access-Control-Expose-Headers: + - ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, + X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, + X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, + X-GitHub-Request-Id, Deprecation, Sunset + Access-Control-Allow-Origin: + - "*" + Strict-Transport-Security: + - max-age=31536000; includeSubdomains; preload + X-Frame-Options: + - deny + X-Content-Type-Options: + - nosniff + X-Xss-Protection: + - '0' + Referrer-Policy: + - origin-when-cross-origin, strict-origin-when-cross-origin + Content-Security-Policy: + - default-src 'none' + X-Ratelimit-Limit: + - '60' + X-Ratelimit-Remaining: + - '45' + X-Ratelimit-Reset: + - '1647374033' + X-Ratelimit-Resource: + - core + X-Ratelimit-Used: + - '15' + Accept-Ranges: + - bytes + Content-Length: + - '496' + X-Github-Request-Id: + - 0402:199D:2FB1E:37377:6230E7C7 + body: + encoding: ASCII-8BIT + string: '[{"name":".gitignore","path":".gitignore","sha":"c111b331371ae211d3bc2e3a9e34ad2a7d6b3982","size":6,"url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/contents/.gitignore?ref=1c6331732c41e4557a16dacb82534f1d1c831848","html_url":"https://github.com/dependabot-fixtures/dependabot-test-ruby-package/blob/1c6331732c41e4557a16dacb82534f1d1c831848/.gitignore","git_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/git/blobs/c111b331371ae211d3bc2e3a9e34ad2a7d6b3982","download_url":"https://raw.githubusercontent.com/dependabot-fixtures/dependabot-test-ruby-package/1c6331732c41e4557a16dacb82534f1d1c831848/.gitignore","type":"file","_links":{"self":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/contents/.gitignore?ref=1c6331732c41e4557a16dacb82534f1d1c831848","git":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/git/blobs/c111b331371ae211d3bc2e3a9e34ad2a7d6b3982","html":"https://github.com/dependabot-fixtures/dependabot-test-ruby-package/blob/1c6331732c41e4557a16dacb82534f1d1c831848/.gitignore"}},{"name":"README.md","path":"README.md","sha":"f71de17053d17a9a5d135b3bfff3f6aa4409dc4b","size":85,"url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/contents/README.md?ref=1c6331732c41e4557a16dacb82534f1d1c831848","html_url":"https://github.com/dependabot-fixtures/dependabot-test-ruby-package/blob/1c6331732c41e4557a16dacb82534f1d1c831848/README.md","git_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/git/blobs/f71de17053d17a9a5d135b3bfff3f6aa4409dc4b","download_url":"https://raw.githubusercontent.com/dependabot-fixtures/dependabot-test-ruby-package/1c6331732c41e4557a16dacb82534f1d1c831848/README.md","type":"file","_links":{"self":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/contents/README.md?ref=1c6331732c41e4557a16dacb82534f1d1c831848","git":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/git/blobs/f71de17053d17a9a5d135b3bfff3f6aa4409dc4b","html":"https://github.com/dependabot-fixtures/dependabot-test-ruby-package/blob/1c6331732c41e4557a16dacb82534f1d1c831848/README.md"}},{"name":"dependabot-test-ruby-package.gemspec","path":"dependabot-test-ruby-package.gemspec","sha":"c5fd208850ed1bf1334b4b9cd4910950bed0c497","size":383,"url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/contents/dependabot-test-ruby-package.gemspec?ref=1c6331732c41e4557a16dacb82534f1d1c831848","html_url":"https://github.com/dependabot-fixtures/dependabot-test-ruby-package/blob/1c6331732c41e4557a16dacb82534f1d1c831848/dependabot-test-ruby-package.gemspec","git_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/git/blobs/c5fd208850ed1bf1334b4b9cd4910950bed0c497","download_url":"https://raw.githubusercontent.com/dependabot-fixtures/dependabot-test-ruby-package/1c6331732c41e4557a16dacb82534f1d1c831848/dependabot-test-ruby-package.gemspec","type":"file","_links":{"self":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/contents/dependabot-test-ruby-package.gemspec?ref=1c6331732c41e4557a16dacb82534f1d1c831848","git":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/git/blobs/c5fd208850ed1bf1334b4b9cd4910950bed0c497","html":"https://github.com/dependabot-fixtures/dependabot-test-ruby-package/blob/1c6331732c41e4557a16dacb82534f1d1c831848/dependabot-test-ruby-package.gemspec"}}]' + recorded_at: Tue, 15 Mar 2022 19:23:51 GMT +- request: + method: get + uri: https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/contents/dependabot-test-ruby-package.gemspec?ref=1c6331732c41e4557a16dacb82534f1d1c831848 + body: + encoding: US-ASCII + string: '' + headers: + User-Agent: + - Octokit Ruby Gem 4.22.0 + Accept: + - application/vnd.github.v3+json + Content-Type: + - application/json + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + response: + status: + code: 200 + message: OK + headers: + Server: + - GitHub.com + Date: + - Tue, 15 Mar 2022 19:23:51 GMT + Content-Type: + - application/json; charset=utf-8 + Cache-Control: + - public, max-age=60, s-maxage=60 + Vary: + - Accept, Accept-Encoding, Accept, X-Requested-With + Etag: + - W/"c5fd208850ed1bf1334b4b9cd4910950bed0c497" + Last-Modified: + - Wed, 27 May 2020 10:39:57 GMT + X-Github-Media-Type: + - github.v3; format=json + Access-Control-Expose-Headers: + - ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, + X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, + X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, + X-GitHub-Request-Id, Deprecation, Sunset + Access-Control-Allow-Origin: + - "*" + Strict-Transport-Security: + - max-age=31536000; includeSubdomains; preload + X-Frame-Options: + - deny + X-Content-Type-Options: + - nosniff + X-Xss-Protection: + - '0' + Referrer-Policy: + - origin-when-cross-origin, strict-origin-when-cross-origin + Content-Security-Policy: + - default-src 'none' + X-Ratelimit-Limit: + - '60' + X-Ratelimit-Remaining: + - '44' + X-Ratelimit-Reset: + - '1647374033' + X-Ratelimit-Resource: + - core + X-Ratelimit-Used: + - '16' + Accept-Ranges: + - bytes + Content-Length: + - '703' + X-Github-Request-Id: + - 0405:19A2:CC582:D5CB7:6230E7C7 + body: + encoding: ASCII-8BIT + string: '{"name":"dependabot-test-ruby-package.gemspec","path":"dependabot-test-ruby-package.gemspec","sha":"c5fd208850ed1bf1334b4b9cd4910950bed0c497","size":383,"url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/contents/dependabot-test-ruby-package.gemspec?ref=1c6331732c41e4557a16dacb82534f1d1c831848","html_url":"https://github.com/dependabot-fixtures/dependabot-test-ruby-package/blob/1c6331732c41e4557a16dacb82534f1d1c831848/dependabot-test-ruby-package.gemspec","git_url":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/git/blobs/c5fd208850ed1bf1334b4b9cd4910950bed0c497","download_url":"https://raw.githubusercontent.com/dependabot-fixtures/dependabot-test-ruby-package/1c6331732c41e4557a16dacb82534f1d1c831848/dependabot-test-ruby-package.gemspec","type":"file","content":"IyBmcm96ZW5fc3RyaW5nX2xpdGVyYWw6IHRydWUKCkdlbTo6U3BlY2lmaWNh\ndGlvbi5uZXcgZG8gfHNwZWN8CiAgc3BlYy5uYW1lICAgICA9ICdkZXBlbmRh\nYm90LXRlc3QtcnVieS1wYWNrYWdlJwogIHNwZWMudmVyc2lvbiAgPSAnMS4w\nLjEnCiAgc3BlYy5zdW1tYXJ5ICA9ICdBIGR1bW15IHBhY2thZ2UgZm9yIHRl\nc3RpbmcgRGVwZW5kYWJvdCcKICBzcGVjLmF1dGhvciAgID0gJ0RlcGVuZGFi\nb3QnCiAgc3BlYy5saWNlbnNlICA9ICdNSVQnCiAgc3BlYy5lbWFpbCAgICA9\nICdub3JlcGx5QGdpdGh1Yi5jb20nCiAgc3BlYy5ob21lcGFnZSA9ICdodHRw\nOi8vZ2l0aHViLmNvbS9kZXBlbmRhYm90LWZpeHR1cmVzL2RlcGVuZGFib3Qt\ndGVzdC1ydWJ5LXBhY2thZ2UnCmVuZAo=\n","encoding":"base64","_links":{"self":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/contents/dependabot-test-ruby-package.gemspec?ref=1c6331732c41e4557a16dacb82534f1d1c831848","git":"https://api.github.com/repos/dependabot-fixtures/dependabot-test-ruby-package/git/blobs/c5fd208850ed1bf1334b4b9cd4910950bed0c497","html":"https://github.com/dependabot-fixtures/dependabot-test-ruby-package/blob/1c6331732c41e4557a16dacb82534f1d1c831848/dependabot-test-ruby-package.gemspec"}}' + recorded_at: Tue, 15 Mar 2022 19:23:51 GMT +recorded_with: VCR 6.0.0 diff --git a/updater/spec/fixtures/vcr_cassettes/Dependabot_Updater_Operations_GroupUpdateAllVersions/when_the_snapshot_contains_a_git_dependency/creates_individual_PRs_since_git_dependencies_cannot_be_grouped_as_semver.yml b/updater/spec/fixtures/vcr_cassettes/Dependabot_Updater_Operations_GroupUpdateAllVersions/when_the_snapshot_contains_a_git_dependency/creates_individual_PRs_since_git_dependencies_cannot_be_grouped_as_semver.yml new file mode 100644 index 00000000..97056cfe --- /dev/null +++ b/updater/spec/fixtures/vcr_cassettes/Dependabot_Updater_Operations_GroupUpdateAllVersions/when_the_snapshot_contains_a_git_dependency/creates_individual_PRs_since_git_dependencies_cannot_be_grouped_as_semver.yml @@ -0,0 +1,505 @@ +--- +http_interactions: +- request: + method: get + uri: https://rubygems.org/api/v1/versions/dummy-git-dependency.json + body: + encoding: US-ASCII + string: '' + headers: + User-Agent: + - dependabot-core/0.225.0 excon/0.100.0 ruby/3.1.4 (x86_64-linux) (+https://github.com/dependabot/dependabot-core) + response: + status: + code: 200 + message: OK + headers: + Connection: + - keep-alive + Content-Length: + - '384' + Content-Type: + - application/json; charset=utf-8 + X-Frame-Options: + - SAMEORIGIN + X-Xss-Protection: + - '0' + X-Content-Type-Options: + - nosniff + X-Download-Options: + - noopen + X-Permitted-Cross-Domain-Policies: + - none + Referrer-Policy: + - strict-origin-when-cross-origin + Last-Modified: + - Mon, 14 Dec 2020 17:08:06 GMT + Cache-Control: + - max-age=60, public + Content-Encoding: + - '' + Content-Security-Policy: + - default-src 'self'; font-src 'self' https://fonts.gstatic.com; img-src 'self' + https://secure.gaug.es https://gravatar.com https://www.gravatar.com https://secure.gravatar.com + https://*.fastly-insights.com https://avatars.githubusercontent.com; object-src + 'none'; script-src 'self' https://secure.gaug.es https://www.fastly-insights.com + 'nonce-'; style-src 'self' https://fonts.googleapis.com; connect-src 'self' + https://s3-us-west-2.amazonaws.com/rubygems-dumps/ https://*.fastly-insights.com + https://fastly-insights.com https://api.github.com http://localhost:*; form-action + 'self' https://github.com/login/oauth/authorize; frame-ancestors 'self'; report-uri + https://csp-report.browser-intake-datadoghq.com/api/v2/logs?dd-api-key=pub852fa3e2312391fafa5640b60784e660&dd-evp-origin=content-security-policy&ddsource=csp-report&ddtags=service%3Arubygems.org%2Cversion%3A14ac2664a203aa4e56def33f9dc1ac9d9bf71c88%2Cenv%3Aproduction%2Ctrace_id%3A93572498929242322 + X-Request-Id: + - '05101318-b593-4f70-a9ec-752da6231f5b' + X-Runtime: + - '0.017212' + Strict-Transport-Security: + - max-age=31536000 + X-Backend: + - F_Rails 35.81.98.222:443 + Accept-Ranges: + - bytes + Date: + - Tue, 15 Aug 2023 12:07:29 GMT + Via: + - 1.1 varnish + Age: + - '0' + X-Served-By: + - cache-ams21038-AMS + X-Cache: + - MISS + X-Cache-Hits: + - '0' + X-Timer: + - S1692101249.628574,VS0,VE437 + Vary: + - Accept-Encoding + Etag: + - '"f59670cf8622242bfb55afc03a027238"' + Server: + - RubyGems.org + body: + encoding: UTF-8 + string: '[{"authors":"Dependabot","built_at":"2019-11-22T00:00:00.000Z","created_at":"2019-11-22T15:24:24.964Z","description":null,"downloads_count":2090,"metadata":{},"number":"1.1.0","summary":"A + dummy package for testing Dependabot","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"3c1b71569ef54c120b0c1d47704409bf9c63de0d581ad6bbb9521634063d7e2d"},{"authors":"Dependabot","built_at":"2019-11-22T00:00:00.000Z","created_at":"2019-11-22T15:24:41.638Z","description":null,"downloads_count":1517,"metadata":{},"number":"1.0.0","summary":"A + dummy package for testing Dependabot","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"c020db324e8d21ee9f0e16ffcdc3c025b6da796c4d62e24e952725b76e2b0088"}]' + recorded_at: Tue, 15 Aug 2023 12:07:29 GMT +- request: + method: get + uri: https://github.com/dependabot-fixtures/ruby-dummy-git-dependency.git/info/refs?service=git-upload-pack + body: + encoding: US-ASCII + string: '' + headers: + User-Agent: + - dependabot-core/0.225.0 excon/0.100.0 ruby/3.1.4 (x86_64-linux) (+https://github.com/dependabot/dependabot-core) + response: + status: + code: 200 + message: OK + headers: + Server: + - GitHub-Babel/3.0 + Content-Type: + - application/x-git-upload-pack-advertisement + Content-Security-Policy: + - default-src 'none'; sandbox + Expires: + - Fri, 01 Jan 1980 00:00:00 GMT + Pragma: + - no-cache + Cache-Control: + - no-cache, max-age=0, must-revalidate + Vary: + - Accept-Encoding + Date: + - Tue, 15 Aug 2023 12:07:28 GMT + X-Frame-Options: + - DENY + X-Github-Request-Id: + - D311:B3FC:4DE913E:4F14650:64DB6A81 + body: + encoding: ASCII-8BIT + string: "001e# service=git-upload-pack\n00000155f229d172c826b95f464a82d8ddf8b3efce3825b0 + HEAD\0multi_ack thin-pack side-band side-band-64k ofs-delta shallow deepen-since + deepen-not deepen-relative no-progress include-tag multi_ack_detailed allow-tip-sha1-in-want + allow-reachable-sha1-in-want no-done symref=HEAD:refs/heads/master filter + object-format=sha1 agent=git/github-32046c9f808f\n003ff229d172c826b95f464a82d8ddf8b3efce3825b0 + refs/heads/master\n003e20151f9b67c8a04461fa0ee28385b6187b86587b refs/tags/v1.0.0\n003ec0e25c2eb332122873f73acb3b61fb2e261cfd8f + refs/tags/v1.1.0\n0000" + recorded_at: Tue, 15 Aug 2023 12:07:29 GMT +- request: + method: get + uri: https://rubygems.org/api/v1/gems/dummy-git-dependency.json + body: + encoding: US-ASCII + string: '' + headers: + User-Agent: + - dependabot-core/0.225.0 excon/0.100.0 ruby/3.1.4 (x86_64-linux) (+https://github.com/dependabot/dependabot-core) + response: + status: + code: 200 + message: OK + headers: + Connection: + - keep-alive + Content-Length: + - '445' + Content-Type: + - application/json; charset=utf-8 + X-Frame-Options: + - SAMEORIGIN + X-Xss-Protection: + - '0' + X-Content-Type-Options: + - nosniff + X-Download-Options: + - noopen + X-Permitted-Cross-Domain-Policies: + - none + Referrer-Policy: + - strict-origin-when-cross-origin + Access-Control-Allow-Origin: + - "*" + Access-Control-Allow-Methods: + - GET + Access-Control-Max-Age: + - '1728000' + Cache-Control: + - max-age=60, public + Content-Encoding: + - '' + Content-Security-Policy: + - default-src 'self'; font-src 'self' https://fonts.gstatic.com; img-src 'self' + https://secure.gaug.es https://gravatar.com https://www.gravatar.com https://secure.gravatar.com + https://*.fastly-insights.com https://avatars.githubusercontent.com; object-src + 'none'; script-src 'self' https://secure.gaug.es https://www.fastly-insights.com + 'nonce-'; style-src 'self' https://fonts.googleapis.com; connect-src 'self' + https://s3-us-west-2.amazonaws.com/rubygems-dumps/ https://*.fastly-insights.com + https://fastly-insights.com https://api.github.com http://localhost:*; form-action + 'self' https://github.com/login/oauth/authorize; frame-ancestors 'self'; report-uri + https://csp-report.browser-intake-datadoghq.com/api/v2/logs?dd-api-key=pub852fa3e2312391fafa5640b60784e660&dd-evp-origin=content-security-policy&ddsource=csp-report&ddtags=service%3Arubygems.org%2Cversion%3A14ac2664a203aa4e56def33f9dc1ac9d9bf71c88%2Cenv%3Aproduction%2Ctrace_id%3A2302961586161028526 + X-Request-Id: + - 448e293b-7426-45ea-a71b-7de7631116b1 + X-Runtime: + - '0.023034' + Strict-Transport-Security: + - max-age=31536000 + X-Backend: + - F_Rails 52.24.74.243:443 + Accept-Ranges: + - bytes + Date: + - Tue, 15 Aug 2023 12:07:30 GMT + Via: + - 1.1 varnish + Age: + - '0' + X-Served-By: + - cache-ams21059-AMS + X-Cache: + - MISS + X-Cache-Hits: + - '0' + X-Timer: + - S1692101249.438226,VS0,VE621 + Vary: + - Accept-Encoding + Etag: + - '"b2b2df644984fa222ec351016a6a0037"' + Server: + - RubyGems.org + body: + encoding: UTF-8 + string: '{"name":"dummy-git-dependency","downloads":3607,"version":"1.1.0","version_created_at":"2019-11-22T15:24:24.964Z","version_downloads":2090,"platform":"ruby","authors":"Dependabot","info":"A + dummy package for testing Dependabot","licenses":["MIT"],"metadata":{},"yanked":false,"sha":"3c1b71569ef54c120b0c1d47704409bf9c63de0d581ad6bbb9521634063d7e2d","project_uri":"https://rubygems.org/gems/dummy-git-dependency","gem_uri":"https://rubygems.org/gems/dummy-git-dependency-1.1.0.gem","homepage_uri":"http://github.com/dependabot/dummy-git-dependency","wiki_uri":null,"documentation_uri":"https://www.rubydoc.info/gems/dummy-git-dependency/1.1.0","mailing_list_uri":null,"source_code_uri":null,"bug_tracker_uri":null,"changelog_uri":null,"funding_uri":null,"dependencies":{"development":[],"runtime":[]}}' + recorded_at: Tue, 15 Aug 2023 12:07:29 GMT +- request: + method: get + uri: https://github.com/dependabot/dummy-git-dependency.git/info/refs?service=git-upload-pack + body: + encoding: US-ASCII + string: '' + headers: + User-Agent: + - dependabot-core/0.225.0 excon/0.100.0 ruby/3.1.4 (x86_64-linux) (+https://github.com/dependabot/dependabot-core) + response: + status: + code: 401 + message: Unauthorized + headers: + Server: + - GitHub-Babel/3.0 + Content-Security-Policy: + - default-src 'none'; sandbox + Content-Type: + - text/plain; charset=UTF-8 + Www-Authenticate: + - Basic realm="GitHub" + Content-Length: + - '21' + Date: + - Tue, 15 Aug 2023 12:07:30 GMT + X-Frame-Options: + - DENY + X-Github-Request-Id: + - D313:CB32:4F223FA:504D973:64DB6A82 + body: + encoding: ASCII-8BIT + string: Repository not found. + recorded_at: Tue, 15 Aug 2023 12:07:30 GMT +- request: + method: get + uri: https://rubygems.org/api/v1/versions/dummy-git-dependency.json + body: + encoding: US-ASCII + string: '' + headers: + User-Agent: + - dependabot-core/0.225.0 excon/0.100.0 ruby/3.1.4 (x86_64-linux) (+https://github.com/dependabot/dependabot-core) + response: + status: + code: 200 + message: OK + headers: + Connection: + - keep-alive + Content-Length: + - '384' + Content-Type: + - application/json; charset=utf-8 + X-Frame-Options: + - SAMEORIGIN + X-Xss-Protection: + - '0' + X-Content-Type-Options: + - nosniff + X-Download-Options: + - noopen + X-Permitted-Cross-Domain-Policies: + - none + Referrer-Policy: + - strict-origin-when-cross-origin + Last-Modified: + - Mon, 14 Dec 2020 17:08:06 GMT + Cache-Control: + - max-age=60, public + Content-Encoding: + - '' + Content-Security-Policy: + - default-src 'self'; font-src 'self' https://fonts.gstatic.com; img-src 'self' + https://secure.gaug.es https://gravatar.com https://www.gravatar.com https://secure.gravatar.com + https://*.fastly-insights.com https://avatars.githubusercontent.com; object-src + 'none'; script-src 'self' https://secure.gaug.es https://www.fastly-insights.com + 'nonce-'; style-src 'self' https://fonts.googleapis.com; connect-src 'self' + https://s3-us-west-2.amazonaws.com/rubygems-dumps/ https://*.fastly-insights.com + https://fastly-insights.com https://api.github.com http://localhost:*; form-action + 'self' https://github.com/login/oauth/authorize; frame-ancestors 'self'; report-uri + https://csp-report.browser-intake-datadoghq.com/api/v2/logs?dd-api-key=pub852fa3e2312391fafa5640b60784e660&dd-evp-origin=content-security-policy&ddsource=csp-report&ddtags=service%3Arubygems.org%2Cversion%3A14ac2664a203aa4e56def33f9dc1ac9d9bf71c88%2Cenv%3Aproduction%2Ctrace_id%3A93572498929242322 + X-Request-Id: + - '05101318-b593-4f70-a9ec-752da6231f5b' + X-Runtime: + - '0.017212' + Strict-Transport-Security: + - max-age=31536000 + X-Backend: + - F_Rails 35.81.98.222:443 + Accept-Ranges: + - bytes + Date: + - Tue, 15 Aug 2023 12:07:30 GMT + Via: + - 1.1 varnish + Age: + - '2' + X-Served-By: + - cache-ams21065-AMS + X-Cache: + - HIT + X-Cache-Hits: + - '1' + X-Timer: + - S1692101251.759070,VS0,VE1 + Vary: + - Accept-Encoding + Etag: + - '"f59670cf8622242bfb55afc03a027238"' + Server: + - RubyGems.org + body: + encoding: UTF-8 + string: '[{"authors":"Dependabot","built_at":"2019-11-22T00:00:00.000Z","created_at":"2019-11-22T15:24:24.964Z","description":null,"downloads_count":2090,"metadata":{},"number":"1.1.0","summary":"A + dummy package for testing Dependabot","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"3c1b71569ef54c120b0c1d47704409bf9c63de0d581ad6bbb9521634063d7e2d"},{"authors":"Dependabot","built_at":"2019-11-22T00:00:00.000Z","created_at":"2019-11-22T15:24:41.638Z","description":null,"downloads_count":1517,"metadata":{},"number":"1.0.0","summary":"A + dummy package for testing Dependabot","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"c020db324e8d21ee9f0e16ffcdc3c025b6da796c4d62e24e952725b76e2b0088"}]' + recorded_at: Tue, 15 Aug 2023 12:07:30 GMT +- request: + method: get + uri: https://github.com/dependabot-fixtures/ruby-dummy-git-dependency.git/info/refs?service=git-upload-pack + body: + encoding: US-ASCII + string: '' + headers: + User-Agent: + - dependabot-core/0.225.0 excon/0.100.0 ruby/3.1.4 (x86_64-linux) (+https://github.com/dependabot/dependabot-core) + response: + status: + code: 200 + message: OK + headers: + Server: + - GitHub-Babel/3.0 + Content-Type: + - application/x-git-upload-pack-advertisement + Content-Security-Policy: + - default-src 'none'; sandbox + Expires: + - Fri, 01 Jan 1980 00:00:00 GMT + Pragma: + - no-cache + Cache-Control: + - no-cache, max-age=0, must-revalidate + Vary: + - Accept-Encoding + Date: + - Tue, 15 Aug 2023 12:07:30 GMT + X-Frame-Options: + - DENY + X-Github-Request-Id: + - D316:E95B:4F937F3:50BEC2D:64DB6A82 + body: + encoding: ASCII-8BIT + string: "001e# service=git-upload-pack\n00000155f229d172c826b95f464a82d8ddf8b3efce3825b0 + HEAD\0multi_ack thin-pack side-band side-band-64k ofs-delta shallow deepen-since + deepen-not deepen-relative no-progress include-tag multi_ack_detailed allow-tip-sha1-in-want + allow-reachable-sha1-in-want no-done symref=HEAD:refs/heads/master filter + object-format=sha1 agent=git/github-32046c9f808f\n003ff229d172c826b95f464a82d8ddf8b3efce3825b0 + refs/heads/master\n003e20151f9b67c8a04461fa0ee28385b6187b86587b refs/tags/v1.0.0\n003ec0e25c2eb332122873f73acb3b61fb2e261cfd8f + refs/tags/v1.1.0\n0000" + recorded_at: Tue, 15 Aug 2023 12:07:30 GMT +- request: + method: get + uri: https://rubygems.org/api/v1/gems/dummy-git-dependency.json + body: + encoding: US-ASCII + string: '' + headers: + User-Agent: + - dependabot-core/0.225.0 excon/0.100.0 ruby/3.1.4 (x86_64-linux) (+https://github.com/dependabot/dependabot-core) + response: + status: + code: 200 + message: OK + headers: + Connection: + - keep-alive + Content-Length: + - '445' + Content-Type: + - application/json; charset=utf-8 + X-Frame-Options: + - SAMEORIGIN + X-Xss-Protection: + - '0' + X-Content-Type-Options: + - nosniff + X-Download-Options: + - noopen + X-Permitted-Cross-Domain-Policies: + - none + Referrer-Policy: + - strict-origin-when-cross-origin + Access-Control-Allow-Origin: + - "*" + Access-Control-Allow-Methods: + - GET + Access-Control-Max-Age: + - '1728000' + Cache-Control: + - max-age=60, public + Content-Encoding: + - '' + Content-Security-Policy: + - default-src 'self'; font-src 'self' https://fonts.gstatic.com; img-src 'self' + https://secure.gaug.es https://gravatar.com https://www.gravatar.com https://secure.gravatar.com + https://*.fastly-insights.com https://avatars.githubusercontent.com; object-src + 'none'; script-src 'self' https://secure.gaug.es https://www.fastly-insights.com + 'nonce-'; style-src 'self' https://fonts.googleapis.com; connect-src 'self' + https://s3-us-west-2.amazonaws.com/rubygems-dumps/ https://*.fastly-insights.com + https://fastly-insights.com https://api.github.com http://localhost:*; form-action + 'self' https://github.com/login/oauth/authorize; frame-ancestors 'self'; report-uri + https://csp-report.browser-intake-datadoghq.com/api/v2/logs?dd-api-key=pub852fa3e2312391fafa5640b60784e660&dd-evp-origin=content-security-policy&ddsource=csp-report&ddtags=service%3Arubygems.org%2Cversion%3A14ac2664a203aa4e56def33f9dc1ac9d9bf71c88%2Cenv%3Aproduction%2Ctrace_id%3A2302961586161028526 + X-Request-Id: + - 448e293b-7426-45ea-a71b-7de7631116b1 + X-Runtime: + - '0.023034' + Strict-Transport-Security: + - max-age=31536000 + X-Backend: + - F_Rails 52.24.74.243:443 + Accept-Ranges: + - bytes + Date: + - Tue, 15 Aug 2023 12:07:31 GMT + Via: + - 1.1 varnish + Age: + - '1' + X-Served-By: + - cache-ams21066-AMS + X-Cache: + - HIT + X-Cache-Hits: + - '1' + X-Timer: + - S1692101251.086141,VS0,VE2 + Vary: + - Accept-Encoding + Etag: + - '"b2b2df644984fa222ec351016a6a0037"' + Server: + - RubyGems.org + body: + encoding: UTF-8 + string: '{"name":"dummy-git-dependency","downloads":3607,"version":"1.1.0","version_created_at":"2019-11-22T15:24:24.964Z","version_downloads":2090,"platform":"ruby","authors":"Dependabot","info":"A + dummy package for testing Dependabot","licenses":["MIT"],"metadata":{},"yanked":false,"sha":"3c1b71569ef54c120b0c1d47704409bf9c63de0d581ad6bbb9521634063d7e2d","project_uri":"https://rubygems.org/gems/dummy-git-dependency","gem_uri":"https://rubygems.org/gems/dummy-git-dependency-1.1.0.gem","homepage_uri":"http://github.com/dependabot/dummy-git-dependency","wiki_uri":null,"documentation_uri":"https://www.rubydoc.info/gems/dummy-git-dependency/1.1.0","mailing_list_uri":null,"source_code_uri":null,"bug_tracker_uri":null,"changelog_uri":null,"funding_uri":null,"dependencies":{"development":[],"runtime":[]}}' + recorded_at: Tue, 15 Aug 2023 12:07:30 GMT +- request: + method: get + uri: https://github.com/dependabot/dummy-git-dependency.git/info/refs?service=git-upload-pack + body: + encoding: US-ASCII + string: '' + headers: + User-Agent: + - dependabot-core/0.225.0 excon/0.100.0 ruby/3.1.4 (x86_64-linux) (+https://github.com/dependabot/dependabot-core) + response: + status: + code: 401 + message: Unauthorized + headers: + Server: + - GitHub-Babel/3.0 + Content-Security-Policy: + - default-src 'none'; sandbox + Content-Type: + - text/plain; charset=UTF-8 + Www-Authenticate: + - Basic realm="GitHub" + Content-Length: + - '21' + Date: + - Tue, 15 Aug 2023 12:07:30 GMT + X-Frame-Options: + - DENY + X-Github-Request-Id: + - D318:E95B:4F939CA:50BEE1A:64DB6A83 + body: + encoding: ASCII-8BIT + string: Repository not found. + recorded_at: Tue, 15 Aug 2023 12:07:31 GMT +recorded_with: VCR 6.2.0 diff --git a/updater/spec/fixtures/vcr_cassettes/Dependabot_Updater_Operations_GroupUpdateAllVersions/when_the_snapshot_is_updating_a_gemspec/creates_a_DependencyChange_for_just_the_modified_files_without_reporting_errors.yml b/updater/spec/fixtures/vcr_cassettes/Dependabot_Updater_Operations_GroupUpdateAllVersions/when_the_snapshot_is_updating_a_gemspec/creates_a_DependencyChange_for_just_the_modified_files_without_reporting_errors.yml new file mode 100644 index 00000000..11035e06 --- /dev/null +++ b/updater/spec/fixtures/vcr_cassettes/Dependabot_Updater_Operations_GroupUpdateAllVersions/when_the_snapshot_is_updating_a_gemspec/creates_a_DependencyChange_for_just_the_modified_files_without_reporting_errors.yml @@ -0,0 +1,2557 @@ +--- +http_interactions: +- request: + method: get + uri: https://rubygems.org/api/v1/versions/rubocop.json + body: + encoding: US-ASCII + string: '' + headers: + User-Agent: + - dependabot-core/0.225.0 excon/0.100.0 ruby/3.1.4 (aarch64-linux) (+https://github.com/dependabot/dependabot-core) + response: + status: + code: 200 + message: OK + headers: + Connection: + - keep-alive + Content-Length: + - '18348' + Content-Type: + - application/json; charset=utf-8 + X-Frame-Options: + - SAMEORIGIN + X-Xss-Protection: + - '0' + X-Content-Type-Options: + - nosniff + X-Download-Options: + - noopen + X-Permitted-Cross-Domain-Policies: + - none + Referrer-Policy: + - strict-origin-when-cross-origin + Last-Modified: + - Wed, 09 Aug 2023 06:34:52 GMT + Cache-Control: + - max-age=60, public + Content-Encoding: + - '' + Content-Security-Policy: + - default-src 'self'; font-src 'self' https://fonts.gstatic.com; img-src 'self' + https://secure.gaug.es https://gravatar.com https://www.gravatar.com https://secure.gravatar.com + https://*.fastly-insights.com https://avatars.githubusercontent.com; object-src + 'none'; script-src 'self' https://secure.gaug.es https://www.fastly-insights.com + 'nonce-'; style-src 'self' https://fonts.googleapis.com; connect-src 'self' + https://s3-us-west-2.amazonaws.com/rubygems-dumps/ https://*.fastly-insights.com + https://fastly-insights.com https://api.github.com http://localhost:*; form-action + 'self' https://github.com/login/oauth/authorize; frame-ancestors 'self'; report-uri + https://csp-report.browser-intake-datadoghq.com/api/v2/logs?dd-api-key=pub852fa3e2312391fafa5640b60784e660&dd-evp-origin=content-security-policy&ddsource=csp-report&ddtags=service%3Arubygems.org%2Cversion%3A34907a6b36a81c276c9cc8a53a7534170f401308%2Cenv%3Aproduction%2Ctrace_id%3A432763313615770357 + X-Request-Id: + - d8045972-4d46-423e-b53e-ebbe5fd6ebb2 + X-Runtime: + - '0.102663' + Strict-Transport-Security: + - max-age=31536000 + X-Backend: + - F_Rails 35.81.98.222:443 + Accept-Ranges: + - bytes + Date: + - Wed, 09 Aug 2023 17:40:27 GMT + Via: + - 1.1 varnish + Age: + - '697' + X-Served-By: + - cache-stl760081-STL + X-Cache: + - HIT + X-Cache-Hits: + - '2' + X-Timer: + - S1691602827.217070,VS0,VE0 + Vary: + - Accept-Encoding + Etag: + - '"8b940b33fc8a9445cdbb1a3d81206175"' + Server: + - RubyGems.org + body: + encoding: UTF-8 + string: '[{"authors":"Bozhidar Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2023-08-09T00:00:00.000Z","created_at":"2023-08-09T06:34:52.156Z","description":" RuboCop + is a Ruby code style checking and code formatting tool.\n It aims to enforce + the community-driven Ruby Style Guide.\n","downloads_count":20407,"metadata":{"homepage_uri":"https://rubocop.org/","changelog_uri":"https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop/rubocop/issues","source_code_uri":"https://github.com/rubocop/rubocop/","documentation_uri":"https://docs.rubocop.org/rubocop/1.56/","rubygems_mfa_required":"true"},"number":"1.56.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.7.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"96152bc00f2bd09df20a48133cb2b5c34267414d665f424d7cc127470c1fe2c5"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2023-07-31T00:00:00.000Z","created_at":"2023-07-31T05:20:13.164Z","description":" RuboCop + is a Ruby code style checking and code formatting tool.\n It aims to enforce + the community-driven Ruby Style Guide.\n","downloads_count":378694,"metadata":{"homepage_uri":"https://rubocop.org/","changelog_uri":"https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop/rubocop/issues","source_code_uri":"https://github.com/rubocop/rubocop/","documentation_uri":"https://docs.rubocop.org/rubocop/1.55/","rubygems_mfa_required":"true"},"number":"1.55.1","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.7.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"35e7ab338bcfd883122a3cb828b33aaa32c6759ab423ed872e10198c152e3769"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2023-07-25T00:00:00.000Z","created_at":"2023-07-25T15:27:10.822Z","description":" RuboCop + is a Ruby code style checking and code formatting tool.\n It aims to enforce + the community-driven Ruby Style Guide.\n","downloads_count":237388,"metadata":{"homepage_uri":"https://rubocop.org/","changelog_uri":"https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop/rubocop/issues","source_code_uri":"https://github.com/rubocop/rubocop/","documentation_uri":"https://docs.rubocop.org/rubocop/1.55/","rubygems_mfa_required":"true"},"number":"1.55.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.7.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"71defdb44c840b580db541900e02194d87ab7e6f3519221d711f2f252827899d"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2023-07-13T00:00:00.000Z","created_at":"2023-07-13T11:02:41.121Z","description":" RuboCop + is a Ruby code style checking and code formatting tool.\n It aims to enforce + the community-driven Ruby Style Guide.\n","downloads_count":648288,"metadata":{"homepage_uri":"https://rubocop.org/","changelog_uri":"https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop/rubocop/issues","source_code_uri":"https://github.com/rubocop/rubocop/","documentation_uri":"https://docs.rubocop.org/rubocop/1.54/","rubygems_mfa_required":"true"},"number":"1.54.2","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.7.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"f9884d2335026b22c6341355da508cecd3762ea4180e2cf65edcdd07553284c1"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2023-07-04T00:00:00.000Z","created_at":"2023-07-04T07:34:06.364Z","description":" RuboCop + is a Ruby code style checking and code formatting tool.\n It aims to enforce + the community-driven Ruby Style Guide.\n","downloads_count":882738,"metadata":{"homepage_uri":"https://rubocop.org/","changelog_uri":"https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop/rubocop/issues","source_code_uri":"https://github.com/rubocop/rubocop/","documentation_uri":"https://docs.rubocop.org/rubocop/1.54/","rubygems_mfa_required":"true"},"number":"1.54.1","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.7.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"e4bc497a45928beb95cf5d2688a4bfe8258b4b778bf41921d6118402da5274ee"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2023-07-01T00:00:00.000Z","created_at":"2023-07-01T08:14:24.868Z","description":" RuboCop + is a Ruby code style checking and code formatting tool.\n It aims to enforce + the community-driven Ruby Style Guide.\n","downloads_count":180029,"metadata":{"homepage_uri":"https://rubocop.org/","changelog_uri":"https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop/rubocop/issues","source_code_uri":"https://github.com/rubocop/rubocop/","documentation_uri":"https://docs.rubocop.org/rubocop/1.54/","rubygems_mfa_required":"true"},"number":"1.54.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.7.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"1fe1fd463dfe1cae2c57b9ea60c29c780bbdc7ff8b36173a9197cd17e292da0b"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2023-06-26T00:00:00.000Z","created_at":"2023-06-26T10:56:26.570Z","description":" RuboCop + is a Ruby code style checking and code formatting tool.\n It aims to enforce + the community-driven Ruby Style Guide.\n","downloads_count":408828,"metadata":{"homepage_uri":"https://rubocop.org/","changelog_uri":"https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop/rubocop/issues","source_code_uri":"https://github.com/rubocop/rubocop/","documentation_uri":"https://docs.rubocop.org/rubocop/1.53/","rubygems_mfa_required":"true"},"number":"1.53.1","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.7.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"cf1844ecc1e610dc72116dbfeb39ca1d74c609913203c91f539db313e625bed4"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2023-06-23T00:00:00.000Z","created_at":"2023-06-23T09:44:11.779Z","description":" RuboCop + is a Ruby code style checking and code formatting tool.\n It aims to enforce + the community-driven Ruby Style Guide.\n","downloads_count":113748,"metadata":{"homepage_uri":"https://rubocop.org/","changelog_uri":"https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop/rubocop/issues","source_code_uri":"https://github.com/rubocop/rubocop/","documentation_uri":"https://docs.rubocop.org/rubocop/1.53/","rubygems_mfa_required":"true"},"number":"1.53.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.7.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"01e56decdd30c12163c3ec5784ee6f579e61c939c04edb64d2f74c131272f72c"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2023-06-12T00:00:00.000Z","created_at":"2023-06-12T08:02:12.517Z","description":" RuboCop + is a Ruby code style checking and code formatting tool.\n It aims to enforce + the community-driven Ruby Style Guide.\n","downloads_count":1150337,"metadata":{"homepage_uri":"https://rubocop.org/","changelog_uri":"https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop/rubocop/issues","source_code_uri":"https://github.com/rubocop/rubocop/","documentation_uri":"https://docs.rubocop.org/rubocop/1.52/","rubygems_mfa_required":"true"},"number":"1.52.1","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.7.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"908718035c4771f414280412be0d9168a7abd310da1ab859a50d41bece0dac2f"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2023-06-02T00:00:00.000Z","created_at":"2023-06-02T09:27:27.204Z","description":" RuboCop + is a Ruby code style checking and code formatting tool.\n It aims to enforce + the community-driven Ruby Style Guide.\n","downloads_count":627975,"metadata":{"homepage_uri":"https://rubocop.org/","changelog_uri":"https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop/rubocop/issues","source_code_uri":"https://github.com/rubocop/rubocop/","documentation_uri":"https://docs.rubocop.org/rubocop/1.52/","rubygems_mfa_required":"true"},"number":"1.52.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.7.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"a9860af191f6d51696de9ece6ca8c072643ee6c04af4310242b13e642b11ef91"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2023-05-13T00:00:00.000Z","created_at":"2023-05-13T07:54:17.418Z","description":" RuboCop + is a Ruby code style checking and code formatting tool.\n It aims to enforce + the community-driven Ruby Style Guide.\n","downloads_count":1477707,"metadata":{"homepage_uri":"https://rubocop.org/","changelog_uri":"https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop/rubocop/issues","source_code_uri":"https://github.com/rubocop/rubocop/","documentation_uri":"https://docs.rubocop.org/rubocop/1.51/","rubygems_mfa_required":"true"},"number":"1.51.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.7.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"beba4c57242d3dfd9561d67f6588e2568a818445d51d172dda836223bfad2300"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2023-04-17T00:00:00.000Z","created_at":"2023-04-17T08:12:58.522Z","description":" RuboCop + is a Ruby code style checking and code formatting tool.\n It aims to enforce + the community-driven Ruby Style Guide.\n","downloads_count":3579674,"metadata":{"homepage_uri":"https://rubocop.org/","changelog_uri":"https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop/rubocop/issues","source_code_uri":"https://github.com/rubocop/rubocop/","documentation_uri":"https://docs.rubocop.org/rubocop/1.50/","rubygems_mfa_required":"true"},"number":"1.50.2","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.6.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"7cfeb0616f686ac61d049beae89f31446792d7e9f5728152657548f70aa78650"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2023-04-12T00:00:00.000Z","created_at":"2023-04-12T12:52:35.268Z","description":" RuboCop + is a Ruby code style checking and code formatting tool.\n It aims to enforce + the community-driven Ruby Style Guide.\n","downloads_count":327587,"metadata":{"homepage_uri":"https://rubocop.org/","changelog_uri":"https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop/rubocop/issues","source_code_uri":"https://github.com/rubocop/rubocop/","documentation_uri":"https://docs.rubocop.org/rubocop/1.50/","rubygems_mfa_required":"true"},"number":"1.50.1","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.6.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"acfcbf5a410f7afe00d42fa696e752646057731396411d5066078ec26b909242"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2023-04-11T00:00:00.000Z","created_at":"2023-04-11T07:14:22.682Z","description":" RuboCop + is a Ruby code style checking and code formatting tool.\n It aims to enforce + the community-driven Ruby Style Guide.\n","downloads_count":205132,"metadata":{"homepage_uri":"https://rubocop.org/","changelog_uri":"https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop/rubocop/issues","source_code_uri":"https://github.com/rubocop/rubocop/","documentation_uri":"https://docs.rubocop.org/rubocop/1.50/","rubygems_mfa_required":"true"},"number":"1.50.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.6.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"ad8ce5c13982a66c4e9c0d54040e96d210f9f88405e903b0e31081bd53e11dbd"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2023-04-03T00:00:00.000Z","created_at":"2023-04-03T07:00:18.540Z","description":" RuboCop + is a Ruby code style checking and code formatting tool.\n It aims to enforce + the community-driven Ruby Style Guide.\n","downloads_count":668777,"metadata":{"homepage_uri":"https://rubocop.org/","changelog_uri":"https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop/rubocop/issues","source_code_uri":"https://github.com/rubocop/rubocop/","documentation_uri":"https://docs.rubocop.org/rubocop/1.49/","rubygems_mfa_required":"true"},"number":"1.49.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.6.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"d4c09409555ae24bca5b80cce20954544b057c1e7ec89c361f676aaba4b705b6"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2023-03-13T00:00:00.000Z","created_at":"2023-03-13T06:59:23.990Z","description":" RuboCop + is a Ruby code style checking and code formatting tool.\n It aims to enforce + the community-driven Ruby Style Guide.\n","downloads_count":2476799,"metadata":{"homepage_uri":"https://rubocop.org/","changelog_uri":"https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop/rubocop/issues","source_code_uri":"https://github.com/rubocop/rubocop/","documentation_uri":"https://docs.rubocop.org/rubocop/1.48/","rubygems_mfa_required":"true"},"number":"1.48.1","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.6.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"18cf7216ba8febb2f8a2a5978f36c54cfdf0de4427cb190a20fd0ee38ccdbee8"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2023-03-06T00:00:00.000Z","created_at":"2023-03-06T09:50:13.745Z","description":" RuboCop + is a Ruby code style checking and code formatting tool.\n It aims to enforce + the community-driven Ruby Style Guide.\n","downloads_count":762065,"metadata":{"homepage_uri":"https://rubocop.org/","changelog_uri":"https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop/rubocop/issues","source_code_uri":"https://github.com/rubocop/rubocop/","documentation_uri":"https://docs.rubocop.org/rubocop/1.48/","rubygems_mfa_required":"true"},"number":"1.48.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.6.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"2a90d242c2155c6d72cfaaf86d68bbbe58a6816cc8b192ac8c6702466c40c231"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2023-03-01T00:00:00.000Z","created_at":"2023-03-01T11:21:14.919Z","description":" RuboCop + is a Ruby code style checking and code formatting tool.\n It aims to enforce + the community-driven Ruby Style Guide.\n","downloads_count":360010,"metadata":{"homepage_uri":"https://rubocop.org/","changelog_uri":"https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop/rubocop/issues","source_code_uri":"https://github.com/rubocop/rubocop/","documentation_uri":"https://docs.rubocop.org/rubocop/1.47/","rubygems_mfa_required":"true"},"number":"1.47.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.6.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"90c159d8584eca251e90c45112301c4519dea61ecdda11a1ff6e65e4d1f49241"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2023-02-22T00:00:00.000Z","created_at":"2023-02-22T18:46:08.467Z","description":" RuboCop + is a Ruby code style checking and code formatting tool.\n It aims to enforce + the community-driven Ruby Style Guide.\n","downloads_count":706391,"metadata":{"homepage_uri":"https://rubocop.org/","changelog_uri":"https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop/rubocop/issues","source_code_uri":"https://github.com/rubocop/rubocop/","documentation_uri":"https://docs.rubocop.org/rubocop/1.46/","rubygems_mfa_required":"true"},"number":"1.46.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.6.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"ad46816d898ceec42babb5564f73d48d95cda7c3950cb4dba61b8252f0404c98"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2023-02-08T00:00:00.000Z","created_at":"2023-02-08T17:34:23.239Z","description":" RuboCop + is a Ruby code style checking and code formatting tool.\n It aims to enforce + the community-driven Ruby Style Guide.\n","downloads_count":1326475,"metadata":{"homepage_uri":"https://rubocop.org/","changelog_uri":"https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop/rubocop/issues","source_code_uri":"https://github.com/rubocop/rubocop/","documentation_uri":"https://docs.rubocop.org/rubocop/1.45/","rubygems_mfa_required":"true"},"number":"1.45.1","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.6.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"f5863c6aa3954e62d583f13a51d100bc45040454adca92b5e85ab0e247f251cb"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2023-02-08T00:00:00.000Z","created_at":"2023-02-08T12:27:53.350Z","description":" RuboCop + is a Ruby code style checking and code formatting tool.\n It aims to enforce + the community-driven Ruby Style Guide.\n","downloads_count":38182,"metadata":{"homepage_uri":"https://rubocop.org/","changelog_uri":"https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop/rubocop/issues","source_code_uri":"https://github.com/rubocop/rubocop/","documentation_uri":"https://docs.rubocop.org/rubocop/1.45/","rubygems_mfa_required":"true"},"number":"1.45.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.6.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"283f2aaa2bc2a2e9a14f290ac735c284473c47ec0451d539bf55b0cc7f444d5f"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2023-01-25T00:00:00.000Z","created_at":"2023-01-25T12:34:55.402Z","description":" RuboCop + is a Ruby code style checking and code formatting tool.\n It aims to enforce + the community-driven Ruby Style Guide.\n","downloads_count":2299679,"metadata":{"homepage_uri":"https://rubocop.org/","changelog_uri":"https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop/rubocop/issues","source_code_uri":"https://github.com/rubocop/rubocop/","documentation_uri":"https://docs.rubocop.org/rubocop/1.44/","rubygems_mfa_required":"true"},"number":"1.44.1","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.6.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"d734ba640caea1b6de27ed49e9ef7c6206f230aa8aa5e35a5b598aec09419638"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2023-01-23T00:00:00.000Z","created_at":"2023-01-23T10:46:02.014Z","description":" RuboCop + is a Ruby code style checking and code formatting tool.\n It aims to enforce + the community-driven Ruby Style Guide.\n","downloads_count":1493506,"metadata":{"homepage_uri":"https://rubocop.org/","changelog_uri":"https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop/rubocop/issues","source_code_uri":"https://github.com/rubocop/rubocop/","documentation_uri":"https://docs.rubocop.org/rubocop/1.44/","rubygems_mfa_required":"true"},"number":"1.44.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.6.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"6152012525035a7cdd62c7a6acede84ac7a25f1880f33a3fc5cfee6bf2295228"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2023-01-10T00:00:00.000Z","created_at":"2023-01-10T10:32:39.737Z","description":" RuboCop + is a Ruby code style checking and code formatting tool.\n It aims to enforce + the community-driven Ruby Style Guide.\n","downloads_count":3965068,"metadata":{"homepage_uri":"https://rubocop.org/","changelog_uri":"https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop/rubocop/issues","source_code_uri":"https://github.com/rubocop/rubocop/","documentation_uri":"https://docs.rubocop.org/rubocop/1.43/","rubygems_mfa_required":"true"},"number":"1.43.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.6.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"d08127ff6d99b7217b9ac27b51be872270bc7f19151706d799e18a5e4777adc6"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2023-01-01T00:00:00.000Z","created_at":"2023-01-01T14:16:25.547Z","description":" RuboCop + is a Ruby code style checking and code formatting tool.\n It aims to enforce + the community-driven Ruby Style Guide.\n","downloads_count":1507980,"metadata":{"homepage_uri":"https://rubocop.org/","changelog_uri":"https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop/rubocop/issues","source_code_uri":"https://github.com/rubocop/rubocop/","documentation_uri":"https://docs.rubocop.org/rubocop/1.42/","rubygems_mfa_required":"true"},"number":"1.42.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.6.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"a8eaa22c3e5c2741229d65804211a9867699fc03e17d3a150fe654b986aa0b6a"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2022-12-22T00:00:00.000Z","created_at":"2022-12-22T08:40:32.261Z","description":" RuboCop + is a Ruby code style checking and code formatting tool.\n It aims to enforce + the community-driven Ruby Style Guide.\n","downloads_count":988446,"metadata":{"homepage_uri":"https://rubocop.org/","changelog_uri":"https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop/rubocop/issues","source_code_uri":"https://github.com/rubocop/rubocop/","documentation_uri":"https://docs.rubocop.org/rubocop/1.41/","rubygems_mfa_required":"true"},"number":"1.41.1","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.6.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"23fdc9ed8f1f78acda597a4c6d54ace2feafdffc4871fba207ea0afbcc566d57"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2022-12-20T00:00:00.000Z","created_at":"2022-12-20T08:41:26.726Z","description":" RuboCop + is a Ruby code style checking and code formatting tool.\n It aims to enforce + the community-driven Ruby Style Guide.\n","downloads_count":173877,"metadata":{"homepage_uri":"https://rubocop.org/","changelog_uri":"https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop/rubocop/issues","source_code_uri":"https://github.com/rubocop/rubocop/","documentation_uri":"https://docs.rubocop.org/rubocop/1.41/","rubygems_mfa_required":"true"},"number":"1.41.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.6.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"f53c9bbee7ad00e3294379e0f3e702bf4b9a8733bb95c5ff82de6bdd27c77184"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2022-12-08T00:00:00.000Z","created_at":"2022-12-08T07:50:52.498Z","description":" RuboCop + is a Ruby code style checking and code formatting tool.\n It aims to enforce + the community-driven Ruby Style Guide.\n","downloads_count":1080174,"metadata":{"homepage_uri":"https://rubocop.org/","changelog_uri":"https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop/rubocop/issues","source_code_uri":"https://github.com/rubocop/rubocop/","documentation_uri":"https://docs.rubocop.org/rubocop/1.40/","rubygems_mfa_required":"true"},"number":"1.40.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.6.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"031881f824594fdb08713d5187c7bf07a11ff83fda869a7dd2d7765f92846a35"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2022-11-14T00:00:00.000Z","created_at":"2022-11-14T06:09:18.582Z","description":" RuboCop + is a Ruby code style checking and code formatting tool.\n It aims to enforce + the community-driven Ruby Style Guide.\n","downloads_count":2495233,"metadata":{"homepage_uri":"https://rubocop.org/","changelog_uri":"https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop/rubocop/issues","source_code_uri":"https://github.com/rubocop/rubocop/","documentation_uri":"https://docs.rubocop.org/rubocop/1.39/","rubygems_mfa_required":"true"},"number":"1.39.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.6.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"7ce41a7778f3b65d3b8ca9d39ea360bbe58551fe3b7b2ab2f5b5b7860c9efd3d"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2022-11-01T00:00:00.000Z","created_at":"2022-11-01T07:26:18.895Z","description":" RuboCop + is a Ruby code style checking and code formatting tool.\n It aims to enforce + the community-driven Ruby Style Guide.\n","downloads_count":3168203,"metadata":{"homepage_uri":"https://rubocop.org/","changelog_uri":"https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop/rubocop/issues","source_code_uri":"https://github.com/rubocop/rubocop/","documentation_uri":"https://docs.rubocop.org/rubocop/1.38/","rubygems_mfa_required":"true"},"number":"1.38.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.6.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"64a64a66d746bd417224c0292d08d8bf5affcfe8fbfc3d50a36810ee8c8a1eba"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2022-10-24T00:00:00.000Z","created_at":"2022-10-24T06:34:17.041Z","description":" RuboCop + is a Ruby code style checking and code formatting tool.\n It aims to enforce + the community-driven Ruby Style Guide.\n","downloads_count":1057324,"metadata":{"homepage_uri":"https://rubocop.org/","changelog_uri":"https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop/rubocop/issues","source_code_uri":"https://github.com/rubocop/rubocop/","documentation_uri":"https://docs.rubocop.org/rubocop/1.37/","rubygems_mfa_required":"true"},"number":"1.37.1","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.6.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"c1a5dc9b54913531ae03b6856216487734fba881d5673b77249fe8ff054215f6"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2022-10-20T00:00:00.000Z","created_at":"2022-10-20T07:55:22.076Z","description":" RuboCop + is a Ruby code style checking and code formatting tool.\n It aims to enforce + the community-driven Ruby Style Guide.\n","downloads_count":270540,"metadata":{"homepage_uri":"https://rubocop.org/","changelog_uri":"https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop/rubocop/issues","source_code_uri":"https://github.com/rubocop/rubocop/","documentation_uri":"https://docs.rubocop.org/rubocop/1.37/","rubygems_mfa_required":"true"},"number":"1.37.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.6.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"285b6e8ac2ba7d7651122974669839cfd64b8a960d3ce29270bd1cb598be250f"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2022-09-01T00:00:00.000Z","created_at":"2022-09-01T07:59:06.750Z","description":" RuboCop + is a Ruby code style checking and code formatting tool.\n It aims to enforce + the community-driven Ruby Style Guide.\n","downloads_count":6795626,"metadata":{"homepage_uri":"https://rubocop.org/","changelog_uri":"https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop/rubocop/issues","source_code_uri":"https://github.com/rubocop/rubocop/","documentation_uri":"https://docs.rubocop.org/rubocop/1.36/","rubygems_mfa_required":"true"},"number":"1.36.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.6.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"368e47dcab8417419949bbadb11ec41fd94e6b785f8bff4f9cc56a1ddf60ffac"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2022-08-22T00:00:00.000Z","created_at":"2022-08-22T05:48:01.573Z","description":" RuboCop + is a Ruby code style checking and code formatting tool.\n It aims to enforce + the community-driven Ruby Style Guide.\n","downloads_count":1772634,"metadata":{"homepage_uri":"https://rubocop.org/","changelog_uri":"https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop/rubocop/issues","source_code_uri":"https://github.com/rubocop/rubocop/","documentation_uri":"https://docs.rubocop.org/rubocop/1.35/","rubygems_mfa_required":"true"},"number":"1.35.1","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.6.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"9d5cf370e27d5e44ed4cd6eeabd5224b21faafa677e6ec0cc0836c847ae3db8d"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2022-08-12T00:00:00.000Z","created_at":"2022-08-12T12:50:07.105Z","description":" RuboCop + is a Ruby code style checking and code formatting tool.\n It aims to enforce + the community-driven Ruby Style Guide.\n","downloads_count":738570,"metadata":{"homepage_uri":"https://rubocop.org/","changelog_uri":"https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop/rubocop/issues","source_code_uri":"https://github.com/rubocop/rubocop/","documentation_uri":"https://docs.rubocop.org/rubocop/1.35/","rubygems_mfa_required":"true"},"number":"1.35.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.6.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"7fdcffa6eff2272e0e31993743caec05d1d48e9e6de8d0f6c1a57b4e849183f1"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2022-08-09T00:00:00.000Z","created_at":"2022-08-09T12:00:48.363Z","description":" RuboCop + is a Ruby code style checking and code formatting tool.\n It aims to enforce + the community-driven Ruby Style Guide.\n","downloads_count":394017,"metadata":{"homepage_uri":"https://rubocop.org/","changelog_uri":"https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop/rubocop/issues","source_code_uri":"https://github.com/rubocop/rubocop/","documentation_uri":"https://docs.rubocop.org/rubocop/1.34/","rubygems_mfa_required":"true"},"number":"1.34.1","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.6.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"eed2747f54da1414f6a163442ad9c02d07b93c8b3d5a571e52b22b7cb4e508d8"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2022-08-09T00:00:00.000Z","created_at":"2022-08-09T05:25:37.049Z","description":" RuboCop + is a Ruby code style checking and code formatting tool.\n It aims to enforce + the community-driven Ruby Style Guide.\n","downloads_count":44642,"metadata":{"homepage_uri":"https://rubocop.org/","changelog_uri":"https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop/rubocop/issues","source_code_uri":"https://github.com/rubocop/rubocop/","documentation_uri":"https://docs.rubocop.org/rubocop/1.34/","rubygems_mfa_required":"true"},"number":"1.34.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.6.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"c794b2713af8017c3e17941ae42c99000d4188fdfc164fb033c67f8dec1e3f0a"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2022-08-04T00:00:00.000Z","created_at":"2022-08-04T09:25:43.239Z","description":" RuboCop + is a Ruby code style checking and code formatting tool.\n It aims to enforce + the community-driven Ruby Style Guide.\n","downloads_count":668540,"metadata":{"homepage_uri":"https://rubocop.org/","changelog_uri":"https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop/rubocop/issues","source_code_uri":"https://github.com/rubocop/rubocop/","documentation_uri":"https://docs.rubocop.org/rubocop/1.33/","rubygems_mfa_required":"true"},"number":"1.33.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.6.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"7613b5d7bced82209ec8d8455f9f0910732dc623e6717a6c21aec45e6f3a389a"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2022-07-21T00:00:00.000Z","created_at":"2022-07-21T10:33:44.211Z","description":" RuboCop + is a Ruby code style checking and code formatting tool.\n It aims to enforce + the community-driven Ruby Style Guide.\n","downloads_count":2250801,"metadata":{"homepage_uri":"https://rubocop.org/","changelog_uri":"https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop/rubocop/issues","source_code_uri":"https://github.com/rubocop/rubocop/","documentation_uri":"https://docs.rubocop.org/rubocop/1.32/","rubygems_mfa_required":"true"},"number":"1.32.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.6.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"82d2a9c2995324ee0d27b75f4396d30a021e965c0e82c39162e7041a6a386326"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2022-07-07T00:00:00.000Z","created_at":"2022-07-07T08:04:49.754Z","description":" RuboCop + is a Ruby code style checking and code formatting tool.\n It aims to enforce + the community-driven Ruby Style Guide.\n","downloads_count":1603979,"metadata":{"homepage_uri":"https://rubocop.org/","changelog_uri":"https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop/rubocop/issues","source_code_uri":"https://github.com/rubocop/rubocop/","documentation_uri":"https://docs.rubocop.org/rubocop/1.31/","rubygems_mfa_required":"true"},"number":"1.31.2","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.6.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"641f15809e4850d86fc9337f8b783b1accd23c16f19e347608ff35fa270dd2f2"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2022-06-29T00:00:00.000Z","created_at":"2022-06-29T06:55:06.791Z","description":" RuboCop + is a Ruby code style checking and code formatting tool.\n It aims to enforce + the community-driven Ruby Style Guide.\n","downloads_count":784026,"metadata":{"homepage_uri":"https://rubocop.org/","changelog_uri":"https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop/rubocop/issues","source_code_uri":"https://github.com/rubocop/rubocop/","documentation_uri":"https://docs.rubocop.org/rubocop/1.31/","rubygems_mfa_required":"true"},"number":"1.31.1","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.6.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"bc8cbc2ca284d31785e3379bad610447e4cb43688a6db38c0c4f50c0c3afca19"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2022-06-27T00:00:00.000Z","created_at":"2022-06-27T06:28:07.483Z","description":" RuboCop + is a Ruby code style checking and code formatting tool.\n It aims to enforce + the community-driven Ruby Style Guide.\n","downloads_count":538447,"metadata":{"homepage_uri":"https://rubocop.org/","changelog_uri":"https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop/rubocop/issues","source_code_uri":"https://github.com/rubocop/rubocop/","documentation_uri":"https://docs.rubocop.org/rubocop/1.31/","rubygems_mfa_required":"true"},"number":"1.31.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.6.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"a20b666d1702649efff1d27f95cf6fbb412a8d162441afce2def2276b7a104f4"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2022-06-06T00:00:00.000Z","created_at":"2022-06-06T07:58:39.398Z","description":" RuboCop + is a Ruby code style checking and code formatting tool.\n It aims to enforce + the community-driven Ruby Style Guide.\n","downloads_count":1948133,"metadata":{"homepage_uri":"https://rubocop.org/","changelog_uri":"https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop/rubocop/issues","source_code_uri":"https://github.com/rubocop/rubocop/","documentation_uri":"https://docs.rubocop.org/rubocop/1.30/","rubygems_mfa_required":"true"},"number":"1.30.1","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.6.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"e1fcbed368d823ff8bbda00819f0abf0d522a914dfe62499884fcb6df0ff1d21"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2022-05-26T00:00:00.000Z","created_at":"2022-05-26T06:05:15.705Z","description":" RuboCop + is a Ruby code style checking and code formatting tool.\n It aims to enforce + the community-driven Ruby Style Guide.\n","downloads_count":1061849,"metadata":{"homepage_uri":"https://rubocop.org/","changelog_uri":"https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop/rubocop/issues","source_code_uri":"https://github.com/rubocop/rubocop/","documentation_uri":"https://docs.rubocop.org/rubocop/1.30/","rubygems_mfa_required":"true"},"number":"1.30.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.6.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"665a7539677efb17bd644106a463047bd4c6a38963fca98fe50189de504109a2"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2022-05-12T00:00:00.000Z","created_at":"2022-05-12T11:19:28.982Z","description":" RuboCop + is a Ruby code style checking and code formatting tool.\n It aims to enforce + the community-driven Ruby Style Guide.\n","downloads_count":2042877,"metadata":{"homepage_uri":"https://rubocop.org/","changelog_uri":"https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop/rubocop/issues","source_code_uri":"https://github.com/rubocop/rubocop/","documentation_uri":"https://docs.rubocop.org/rubocop/1.29/","rubygems_mfa_required":"true"},"number":"1.29.1","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.6.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"2880817bba3d1f7f3418a8f50f12de84580f34750aa33b4560be5ddc75ba5c4c"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2022-05-06T00:00:00.000Z","created_at":"2022-05-06T15:51:42.728Z","description":" RuboCop + is a Ruby code style checking and code formatting tool.\n It aims to enforce + the community-driven Ruby Style Guide.\n","downloads_count":582277,"metadata":{"homepage_uri":"https://rubocop.org/","changelog_uri":"https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop/rubocop/issues","source_code_uri":"https://github.com/rubocop/rubocop/","documentation_uri":"https://docs.rubocop.org/rubocop/1.29/","rubygems_mfa_required":"true"},"number":"1.29.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.6.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"eb47f76dbc87b5b6eb449ace51a6f2819df2f1ee49734a866554ef80b8f478cc"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2022-04-25T00:00:00.000Z","created_at":"2022-04-25T06:44:26.428Z","description":" RuboCop + is a Ruby code style checking and code formatting tool.\n It aims to enforce + the community-driven Ruby Style Guide.\n","downloads_count":4417812,"metadata":{"homepage_uri":"https://rubocop.org/","changelog_uri":"https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop/rubocop/issues","source_code_uri":"https://github.com/rubocop/rubocop/","documentation_uri":"https://docs.rubocop.org/rubocop/1.28/","rubygems_mfa_required":"true"},"number":"1.28.2","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.5.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"0d9bf4108fd86ede43c6cf30adcb3dd2e0c6750941c5ec2a00621478157cb377"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2022-04-21T00:00:00.000Z","created_at":"2022-04-21T12:36:57.304Z","description":" RuboCop + is a Ruby code style checking and code formatting tool.\n It aims to enforce + the community-driven Ruby Style Guide.\n","downloads_count":342774,"metadata":{"homepage_uri":"https://rubocop.org/","changelog_uri":"https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop/rubocop/issues","source_code_uri":"https://github.com/rubocop/rubocop/","documentation_uri":"https://docs.rubocop.org/rubocop/1.28/","rubygems_mfa_required":"true"},"number":"1.28.1","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.5.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"d608991e7f0038b0bd3012ba5c6e59aba587dc0451a36ee3f970330c380b59c4"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2022-04-21T00:00:00.000Z","created_at":"2022-04-21T08:07:06.255Z","description":" RuboCop + is a Ruby code style checking and code formatting tool.\n It aims to enforce + the community-driven Ruby Style Guide.\n","downloads_count":51783,"metadata":{"homepage_uri":"https://rubocop.org/","changelog_uri":"https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop/rubocop/issues","source_code_uri":"https://github.com/rubocop/rubocop/","documentation_uri":"https://docs.rubocop.org/rubocop/1.28/","rubygems_mfa_required":"true"},"number":"1.28.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.5.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"40934c4b94f39b9cd1108b4ace5e39584971bd47ab2fe8a806da08d5078f553d"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2022-04-08T00:00:00.000Z","created_at":"2022-04-08T06:05:25.410Z","description":" RuboCop + is a Ruby code style checking and code formatting tool.\n It aims to enforce + the community-driven Ruby Style Guide.\n","downloads_count":1279397,"metadata":{"homepage_uri":"https://rubocop.org/","changelog_uri":"https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop/rubocop/issues","source_code_uri":"https://github.com/rubocop/rubocop/","documentation_uri":"https://docs.rubocop.org/rubocop/1.27/","rubygems_mfa_required":"true"},"number":"1.27.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.5.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"936a444b2915697e8f1f0e97d92e1682260d15cb6209e5279623f765e9b7a901"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2022-03-22T00:00:00.000Z","created_at":"2022-03-22T11:02:36.495Z","description":" RuboCop + is a Ruby code style checking and code formatting tool.\n It aims to enforce + the community-driven Ruby Style Guide.\n","downloads_count":2661539,"metadata":{"homepage_uri":"https://rubocop.org/","changelog_uri":"https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop/rubocop/issues","source_code_uri":"https://github.com/rubocop/rubocop/","documentation_uri":"https://docs.rubocop.org/rubocop/1.26/","rubygems_mfa_required":"true"},"number":"1.26.1","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.5.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"f4c91b087a10596529fb82146f214824f952e6b2e15977002df54a85b32f2018"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2022-03-09T00:00:00.000Z","created_at":"2022-03-09T16:40:38.227Z","description":" RuboCop + is a Ruby code style checking and code formatting tool.\n It aims to enforce + the community-driven Ruby Style Guide.\n","downloads_count":1512988,"metadata":{"homepage_uri":"https://rubocop.org/","changelog_uri":"https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop/rubocop/issues","source_code_uri":"https://github.com/rubocop/rubocop/","documentation_uri":"https://docs.rubocop.org/rubocop/1.26/","rubygems_mfa_required":"true"},"number":"1.26.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.5.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"9939f5ded335c505b4f34d856dbbc11138a74ed7c045a09add8837ec96d9860d"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2022-02-03T00:00:00.000Z","created_at":"2022-02-03T06:44:47.250Z","description":" RuboCop + is a Ruby code style checking and code formatting tool.\n It aims to enforce + the community-driven Ruby Style Guide.\n","downloads_count":4394904,"metadata":{"homepage_uri":"https://rubocop.org/","changelog_uri":"https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop/rubocop/issues","source_code_uri":"https://github.com/rubocop/rubocop/","documentation_uri":"https://docs.rubocop.org/rubocop/1.25/","rubygems_mfa_required":"true"},"number":"1.25.1","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.5.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"330b7674fd5242a8f10beaebe91098b7f766b3abbbd34000fda57f44a34978d0"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2022-01-18T00:00:00.000Z","created_at":"2022-01-18T07:45:28.499Z","description":" RuboCop + is a Ruby code style checking and code formatting tool.\n It aims to enforce + the community-driven Ruby Style Guide.\n","downloads_count":2051694,"metadata":{"homepage_uri":"https://rubocop.org/","changelog_uri":"https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop/rubocop/issues","source_code_uri":"https://github.com/rubocop/rubocop/","documentation_uri":"https://docs.rubocop.org/rubocop/1.25/","rubygems_mfa_required":"true"},"number":"1.25.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.5.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"723149a1d1809a13e61e7352f59b98ecd0f8219b88630030b20a45dc6a712e90"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2021-12-31T00:00:00.000Z","created_at":"2021-12-31T10:33:10.186Z","description":" RuboCop + is a Ruby code style checking and code formatting tool.\n It aims to enforce + the community-driven Ruby Style Guide.\n","downloads_count":3521938,"metadata":{"homepage_uri":"https://rubocop.org/","changelog_uri":"https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop/rubocop/issues","source_code_uri":"https://github.com/rubocop/rubocop/","documentation_uri":"https://docs.rubocop.org/rubocop/1.24/","rubygems_mfa_required":"true"},"number":"1.24.1","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.5.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"e01ede58cb413c08e6e5b8c6f4b92ec282e646158774b3f98595ae92c453c7ea"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2021-12-23T00:00:00.000Z","created_at":"2021-12-23T11:06:39.276Z","description":" RuboCop + is a Ruby code style checking and code formatting tool.\n It aims to enforce + the community-driven Ruby Style Guide.\n","downloads_count":636312,"metadata":{"homepage_uri":"https://rubocop.org/","changelog_uri":"https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop/rubocop/issues","source_code_uri":"https://github.com/rubocop/rubocop/","documentation_uri":"https://docs.rubocop.org/rubocop/1.24/","rubygems_mfa_required":"true"},"number":"1.24.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.5.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"104848c84b18417e0c0e7c96670320d028a15a918fe2327ffc86d3c1b83be2c3"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2021-11-15T00:00:00.000Z","created_at":"2021-11-15T08:10:45.792Z","description":" RuboCop + is a Ruby code style checking and code formatting tool.\n It aims to enforce + the community-driven Ruby Style Guide.\n","downloads_count":4516948,"metadata":{"homepage_uri":"https://rubocop.org/","changelog_uri":"https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop/rubocop/issues","source_code_uri":"https://github.com/rubocop/rubocop/","documentation_uri":"https://docs.rubocop.org/rubocop/1.23/","rubygems_mfa_required":"true"},"number":"1.23.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.5.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"0b0b110eb9309a750d02f4549dfdc5399d3384ddfd6758cb3e4bd3551a5e3b0e"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2021-10-27T00:00:00.000Z","created_at":"2021-10-27T13:02:09.306Z","description":" RuboCop + is a Ruby code style checking and code formatting tool.\n It aims to enforce + the community-driven Ruby Style Guide.\n","downloads_count":2109830,"metadata":{"homepage_uri":"https://rubocop.org/","changelog_uri":"https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop/rubocop/issues","source_code_uri":"https://github.com/rubocop/rubocop/","documentation_uri":"https://docs.rubocop.org/rubocop/1.22/"},"number":"1.22.3","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.5.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"5e10a1a63db9028b173f2b65549477d087a9a23de4d94eb1b89d79db31ee306b"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2021-10-22T00:00:00.000Z","created_at":"2021-10-22T05:45:22.726Z","description":" RuboCop + is a Ruby code style checking and code formatting tool.\n It aims to enforce + the community-driven Ruby Style Guide.\n","downloads_count":511068,"metadata":{"homepage_uri":"https://rubocop.org/","changelog_uri":"https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop/rubocop/issues","source_code_uri":"https://github.com/rubocop/rubocop/","documentation_uri":"https://docs.rubocop.org/rubocop/1.22/"},"number":"1.22.2","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.5.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"bb760c298b15e5dc1bbbb4e0fb225abf2598b5b30a0c059e805370ce586d0b67"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2021-10-04T00:00:00.000Z","created_at":"2021-10-04T03:20:23.304Z","description":" RuboCop + is a Ruby code style checking and code formatting tool.\n It aims to enforce + the community-driven Ruby Style Guide.\n","downloads_count":2024908,"metadata":{"homepage_uri":"https://rubocop.org/","changelog_uri":"https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop/rubocop/issues","source_code_uri":"https://github.com/rubocop/rubocop/","documentation_uri":"https://docs.rubocop.org/rubocop/1.22/"},"number":"1.22.1","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.5.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"9171b4a7cea4fc98cb7053df4467ec2ae0bac03e1b6b65802404c84e6a154fa6"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2021-09-29T00:00:00.000Z","created_at":"2021-09-29T07:26:49.236Z","description":" RuboCop + is a Ruby code style checking and code formatting tool.\n It aims to enforce + the community-driven Ruby Style Guide.\n","downloads_count":500253,"metadata":{"homepage_uri":"https://rubocop.org/","changelog_uri":"https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop/rubocop/issues","source_code_uri":"https://github.com/rubocop/rubocop/","documentation_uri":"https://docs.rubocop.org/rubocop/1.22/"},"number":"1.22.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.5.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"2784830587b80e019661015ee5c9e030248985dabc590ddd84d7aca0ddc26a81"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2021-09-13T00:00:00.000Z","created_at":"2021-09-13T13:09:37.203Z","description":" RuboCop + is a Ruby code style checking and code formatting tool.\n It aims to enforce + the community-driven Ruby Style Guide.\n","downloads_count":1425971,"metadata":{"homepage_uri":"https://rubocop.org/","changelog_uri":"https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop/rubocop/issues","source_code_uri":"https://github.com/rubocop/rubocop/","documentation_uri":"https://docs.rubocop.org/rubocop/1.21/"},"number":"1.21.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.5.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"9501707e5d72476e72843242fcd29332a1ccb656a163042462d4b18f2f531abf"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2021-08-26T00:00:00.000Z","created_at":"2021-08-26T07:51:17.209Z","description":" RuboCop + is a Ruby code style checking and code formatting tool.\n It aims to enforce + the community-driven Ruby Style Guide.\n","downloads_count":1639791,"metadata":{"homepage_uri":"https://rubocop.org/","changelog_uri":"https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop/rubocop/issues","source_code_uri":"https://github.com/rubocop/rubocop/","documentation_uri":"https://docs.rubocop.org/rubocop/1.20/"},"number":"1.20.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.5.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"46f6c5d45a25f2c75cf8c92149e91e8680dac7f6056ebb92d979f36ff890d17f"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2021-08-19T00:00:00.000Z","created_at":"2021-08-19T06:55:01.167Z","description":" RuboCop + is a Ruby code style checking and code formatting tool.\n It aims to enforce + the community-driven Ruby Style Guide.\n","downloads_count":925414,"metadata":{"homepage_uri":"https://rubocop.org/","changelog_uri":"https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop/rubocop/issues","source_code_uri":"https://github.com/rubocop/rubocop/","documentation_uri":"https://docs.rubocop.org/rubocop/1.19/"},"number":"1.19.1","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.5.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"8c4f8cd8abfd8bb24f4f30a9d9d70118b3bc64a455750c742414b6b540acacbe"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2021-08-12T00:00:00.000Z","created_at":"2021-08-12T10:31:19.249Z","description":" RuboCop + is a Ruby code style checking and code formatting tool.\n It aims to enforce + the community-driven Ruby Style Guide.\n","downloads_count":488236,"metadata":{"homepage_uri":"https://rubocop.org/","changelog_uri":"https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop/rubocop/issues","source_code_uri":"https://github.com/rubocop/rubocop/","documentation_uri":"https://docs.rubocop.org/rubocop/1.19/"},"number":"1.19.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.5.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"4ea67b3e0581623e40cfcb58cdb946d11d2aa92b78d42cd050ab6d786d36a716"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2021-07-23T00:00:00.000Z","created_at":"2021-07-23T06:12:42.555Z","description":" RuboCop + is a Ruby code style checking and code formatting tool.\n It aims to enforce + the community-driven Ruby Style Guide.\n","downloads_count":2925846,"metadata":{"homepage_uri":"https://rubocop.org/","changelog_uri":"https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop/rubocop/issues","source_code_uri":"https://github.com/rubocop/rubocop/","documentation_uri":"https://docs.rubocop.org/rubocop/1.18/"},"number":"1.18.4","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.5.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"12c63a283dc90816072392118f7dbfc358febc0648655abd23690905ecbd68d2"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2021-07-06T00:00:00.000Z","created_at":"2021-07-06T09:15:19.404Z","description":" RuboCop + is a Ruby code style checking and code formatting tool.\n It aims to enforce + the community-driven Ruby Style Guide.\n","downloads_count":1940171,"metadata":{"homepage_uri":"https://rubocop.org/","changelog_uri":"https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop/rubocop/issues","source_code_uri":"https://github.com/rubocop/rubocop/","documentation_uri":"https://docs.rubocop.org/rubocop/1.18/"},"number":"1.18.3","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.5.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"3d68b45c160faab94cc544f94d31c0625305ee5faf49415c49edfaa9a9cab110"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2021-07-02T00:00:00.000Z","created_at":"2021-07-02T12:18:10.848Z","description":" RuboCop + is a Ruby code style checking and code formatting tool.\n It aims to enforce + the community-driven Ruby Style Guide.\n","downloads_count":361132,"metadata":{"homepage_uri":"https://rubocop.org/","changelog_uri":"https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop/rubocop/issues","source_code_uri":"https://github.com/rubocop/rubocop/","documentation_uri":"https://docs.rubocop.org/rubocop/1.18/"},"number":"1.18.2","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.5.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"6b45980977a3adf83ebea10ed31b81611db4713c910b9d4f37144d7e6cff25c2"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2021-06-30T00:00:00.000Z","created_at":"2021-06-30T05:26:23.167Z","description":" RuboCop + is a Ruby code style checking and code formatting tool.\n It aims to enforce + the community-driven Ruby Style Guide.\n","downloads_count":309987,"metadata":{"homepage_uri":"https://rubocop.org/","changelog_uri":"https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop/rubocop/issues","source_code_uri":"https://github.com/rubocop/rubocop/","documentation_uri":"https://docs.rubocop.org/rubocop/1.18/"},"number":"1.18.1","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.5.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"33ae45f78d826a5ef9613eebe354a841cee55eb02b826daa4ba7af1fb7d6689c"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2021-06-29T00:00:00.000Z","created_at":"2021-06-29T05:37:50.088Z","description":" RuboCop + is a Ruby code style checking and code formatting tool.\n It aims to enforce + the community-driven Ruby Style Guide.\n","downloads_count":120921,"metadata":{"homepage_uri":"https://rubocop.org/","changelog_uri":"https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop/rubocop/issues","source_code_uri":"https://github.com/rubocop/rubocop/","documentation_uri":"https://docs.rubocop.org/rubocop/1.18/"},"number":"1.18.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.5.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"b5de58755d97ca72d25a3cd057cd61ac519a9021787da927f20337ef6676b130"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2021-06-15T00:00:00.000Z","created_at":"2021-06-15T10:36:25.983Z","description":" RuboCop + is a Ruby code style checking and code formatting tool.\n It aims to enforce + the community-driven Ruby Style Guide.\n","downloads_count":1393211,"metadata":{"homepage_uri":"https://rubocop.org/","changelog_uri":"https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop/rubocop/issues","source_code_uri":"https://github.com/rubocop/rubocop/","documentation_uri":"https://docs.rubocop.org/rubocop/1.17/"},"number":"1.17.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.5.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"e69e12da57c04241dd7978b43e570e1eed589d486271842b10d9c921a330d052"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2021-06-09T00:00:00.000Z","created_at":"2021-06-09T10:46:29.434Z","description":" RuboCop + is a Ruby code style checking and code formatting tool.\n It aims to enforce + the community-driven Ruby Style Guide.\n","downloads_count":447418,"metadata":{"homepage_uri":"https://rubocop.org/","changelog_uri":"https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop/rubocop/issues","source_code_uri":"https://github.com/rubocop/rubocop/","documentation_uri":"https://docs.rubocop.org/rubocop/1.16/"},"number":"1.16.1","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.5.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"fd0feb97e7249b890af0d5bf1078d94ac587741a2c88dd0ddfc959b3aa35729a"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2021-06-01T00:00:00.000Z","created_at":"2021-06-01T07:05:05.867Z","description":" RuboCop + is a Ruby code style checking and code formatting tool.\n It aims to enforce + the community-driven Ruby Style Guide.\n","downloads_count":1300536,"metadata":{"homepage_uri":"https://rubocop.org/","changelog_uri":"https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop/rubocop/issues","source_code_uri":"https://github.com/rubocop/rubocop/","documentation_uri":"https://docs.rubocop.org/rubocop/1.16/"},"number":"1.16.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.5.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"223c4d1187f34a224ab38e1f180cb390d9209191d268d9040b6315c0bbe65746"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2021-05-17T00:00:00.000Z","created_at":"2021-05-17T07:17:56.288Z","description":" RuboCop + is a Ruby code style checking and code formatting tool.\n It aims to enforce + the community-driven Ruby Style Guide.\n","downloads_count":1737542,"metadata":{"homepage_uri":"https://rubocop.org/","changelog_uri":"https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop/rubocop/issues","source_code_uri":"https://github.com/rubocop/rubocop/","documentation_uri":"https://docs.rubocop.org/rubocop/1.15/"},"number":"1.15.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.5.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"3c783af32a3950d5b5d7b3a59d2517bccc2fce80df44d4cd1baedc6131f20af6"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2021-05-05T00:00:00.000Z","created_at":"2021-05-05T07:54:36.043Z","description":" RuboCop + is a Ruby code style checking and code formatting tool.\n It aims to enforce + the community-driven Ruby Style Guide.\n","downloads_count":1683392,"metadata":{"homepage_uri":"https://rubocop.org/","changelog_uri":"https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop/rubocop/issues","source_code_uri":"https://github.com/rubocop/rubocop/","documentation_uri":"https://docs.rubocop.org/rubocop/1.14/"},"number":"1.14.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.5.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"f73a95a3aa4999d617678fd5c3559b531d77ef408d44d8ce5dd99d07a2c91232"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2021-04-20T00:00:00.000Z","created_at":"2021-04-20T08:04:40.949Z","description":" RuboCop + is a Ruby code style checking and code formatting tool.\n It aims to enforce + the community-driven Ruby Style Guide.\n","downloads_count":1592133,"metadata":{"homepage_uri":"https://rubocop.org/","changelog_uri":"https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop/rubocop/issues","source_code_uri":"https://github.com/rubocop/rubocop/","documentation_uri":"https://docs.rubocop.org/rubocop/1.13/"},"number":"1.13.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.5.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"4d24d2557ad91ebf0c316c7da4e4b96c2e293ae32ab6760510bc650e8e91f931"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2021-04-04T00:00:00.000Z","created_at":"2021-04-04T13:59:28.208Z","description":" RuboCop + is a Ruby code style checking and code formatting tool.\n It aims to enforce + the community-driven Ruby Style Guide.\n","downloads_count":3413699,"metadata":{"homepage_uri":"https://rubocop.org/","changelog_uri":"https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop/rubocop/issues","source_code_uri":"https://github.com/rubocop/rubocop/","documentation_uri":"https://docs.rubocop.org/rubocop/1.12/"},"number":"1.12.1","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.4.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"2963dc4b3b8e9b2b2d39e8986e5bacbb0246bfb439da03ba4fca5365d4602242"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2021-03-24T00:00:00.000Z","created_at":"2021-03-24T13:37:11.465Z","description":" RuboCop + is a Ruby code style checking and code formatting tool.\n It aims to enforce + the community-driven Ruby Style Guide.\n","downloads_count":1122587,"metadata":{"homepage_uri":"https://rubocop.org/","changelog_uri":"https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop/rubocop/issues","source_code_uri":"https://github.com/rubocop/rubocop/","documentation_uri":"https://docs.rubocop.org/rubocop/1.12/"},"number":"1.12.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.4.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"dc9150badc782e37fbf572357b132ad3db2a11485635595b269d7bae0c047ec4"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2021-03-01T00:00:00.000Z","created_at":"2021-03-01T07:52:18.929Z","description":" RuboCop + is a Ruby code style checking and code formatting tool.\n It aims to enforce + the community-driven Ruby Style Guide.\n","downloads_count":2358637,"metadata":{"homepage_uri":"https://rubocop.org/","changelog_uri":"https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop/rubocop/issues","source_code_uri":"https://github.com/rubocop/rubocop/","documentation_uri":"https://docs.rubocop.org/rubocop/1.11/"},"number":"1.11.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.4.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"f954e6889e6a5e0b64e973b531e673ec597ff430ddbf50584099d532fad33f7f"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2021-02-15T00:00:00.000Z","created_at":"2021-02-15T13:10:10.167Z","description":" RuboCop + is a Ruby code style checking and code formatting tool.\n It aims to enforce + the community-driven Ruby Style Guide.\n","downloads_count":1565678,"metadata":{"homepage_uri":"https://rubocop.org/","changelog_uri":"https://github.com/rubocop-hq/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop-hq/rubocop/issues","source_code_uri":"https://github.com/rubocop-hq/rubocop/","documentation_uri":"https://docs.rubocop.org/rubocop/1.10/"},"number":"1.10.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.4.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"9fe2014e760ddef3ba9f822a8b6643d175ea8ee622c8240d922204a609378dd9"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2021-02-01T00:00:00.000Z","created_at":"2021-02-01T07:37:07.234Z","description":" RuboCop + is a Ruby code style checking and code formatting tool.\n It aims to enforce + the community-driven Ruby Style Guide.\n","downloads_count":1252206,"metadata":{"homepage_uri":"https://rubocop.org/","changelog_uri":"https://github.com/rubocop-hq/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop-hq/rubocop/issues","source_code_uri":"https://github.com/rubocop-hq/rubocop/","documentation_uri":"https://docs.rubocop.org/rubocop/1.9/"},"number":"1.9.1","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.4.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"42a43aeea3d87ea429b897c3f18d8b6fddcf99c37d47f413f859f7ebe5f2d71a"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2021-01-28T00:00:00.000Z","created_at":"2021-01-28T08:18:31.958Z","description":" RuboCop + is a Ruby code style checking and code formatting tool.\n It aims to enforce + the community-driven Ruby Style Guide.\n","downloads_count":198283,"metadata":{"homepage_uri":"https://rubocop.org/","changelog_uri":"https://github.com/rubocop-hq/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop-hq/rubocop/issues","source_code_uri":"https://github.com/rubocop-hq/rubocop/","documentation_uri":"https://docs.rubocop.org/rubocop/1.9/"},"number":"1.9.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.4.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"a99ce92e7b5b2050b75a8885b1ca2a32f7c690222bba3357d566f4495ebee0f3"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2021-01-11T00:00:00.000Z","created_at":"2021-01-11T11:18:45.376Z","description":" RuboCop + is a Ruby code style checking and code formatting tool.\n It aims to enforce + the community-driven Ruby Style Guide.\n","downloads_count":1758035,"metadata":{"homepage_uri":"https://rubocop.org/","changelog_uri":"https://github.com/rubocop-hq/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop-hq/rubocop/issues","source_code_uri":"https://github.com/rubocop-hq/rubocop/","documentation_uri":"https://docs.rubocop.org/rubocop/1.8/"},"number":"1.8.1","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.4.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"bffc58b0a398bd3fd46ad6f6310befb981e5cd1d706a8f8de18251e981620299"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2021-01-07T00:00:00.000Z","created_at":"2021-01-07T08:56:11.791Z","description":" RuboCop + is a Ruby code style checking and code formatting tool.\n It aims to enforce + the community-driven Ruby Style Guide.\n","downloads_count":196242,"metadata":{"homepage_uri":"https://rubocop.org/","changelog_uri":"https://github.com/rubocop-hq/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop-hq/rubocop/issues","source_code_uri":"https://github.com/rubocop-hq/rubocop/","documentation_uri":"https://docs.rubocop.org/rubocop/1.8/"},"number":"1.8.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.4.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"2d7a5c2eacd9e1b322a8b910acc1f16c109e793b76f56af435228821b5755989"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2020-12-25T00:00:00.000Z","created_at":"2020-12-25T07:22:09.105Z","description":" RuboCop + is a Ruby code style checking and code formatting tool.\n It aims to enforce + the community-driven Ruby Style Guide.\n","downloads_count":2112037,"metadata":{"homepage_uri":"https://rubocop.org/","changelog_uri":"https://github.com/rubocop-hq/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop-hq/rubocop/issues","source_code_uri":"https://github.com/rubocop-hq/rubocop/","documentation_uri":"https://docs.rubocop.org/rubocop/1.7/"},"number":"1.7.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.4.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"343c1b2ebf906a0e889c5135a65227548538e50d8c8aa27b8a150cf8fdf7738a"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2020-12-10T00:00:00.000Z","created_at":"2020-12-10T07:36:17.340Z","description":" RuboCop + is a Ruby code style checking and code formatting tool.\n It aims to enforce + the community-driven Ruby Style Guide.\n","downloads_count":1503282,"metadata":{"homepage_uri":"https://rubocop.org/","changelog_uri":"https://github.com/rubocop-hq/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop-hq/rubocop/issues","source_code_uri":"https://github.com/rubocop-hq/rubocop/","documentation_uri":"https://docs.rubocop.org/rubocop/1.6/"},"number":"1.6.1","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.4.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"89b638e3975463d2b0749617ec7a372f3a597bfa2465e1e396aee82824839626"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2020-12-09T00:00:00.000Z","created_at":"2020-12-09T12:10:09.487Z","description":" RuboCop + is a Ruby code style checking and code formatting tool.\n It aims to enforce + the community-driven Ruby Style Guide.\n","downloads_count":69443,"metadata":{"homepage_uri":"https://rubocop.org/","changelog_uri":"https://github.com/rubocop-hq/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop-hq/rubocop/issues","source_code_uri":"https://github.com/rubocop-hq/rubocop/","documentation_uri":"https://docs.rubocop.org/rubocop/1.6/"},"number":"1.6.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.4.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"de769122490a39a283aa99519e54358a4ae84b5a3773d4ed135da750f59dbdef"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2020-12-04T00:00:00.000Z","created_at":"2020-12-04T08:48:50.982Z","description":" RuboCop + is a Ruby code style checking and code formatting tool.\n It aims to enforce + the community-driven Ruby Style Guide.\n","downloads_count":538481,"metadata":{"homepage_uri":"https://rubocop.org/","changelog_uri":"https://github.com/rubocop-hq/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop-hq/rubocop/issues","source_code_uri":"https://github.com/rubocop-hq/rubocop/","documentation_uri":"https://docs.rubocop.org/rubocop/1.5/"},"number":"1.5.2","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.4.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"e552e6c2a0765a5faea5b0def4c13a6004bcdd2e947eb5693ee3900c5535444c"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2020-12-02T00:00:00.000Z","created_at":"2020-12-02T16:00:42.960Z","description":" RuboCop + is a Ruby code style checking and code formatting tool.\n It aims to enforce + the community-driven Ruby Style Guide.\n","downloads_count":143427,"metadata":{"homepage_uri":"https://rubocop.org/","changelog_uri":"https://github.com/rubocop-hq/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop-hq/rubocop/issues","source_code_uri":"https://github.com/rubocop-hq/rubocop/","documentation_uri":"https://docs.rubocop.org/rubocop/1.5/"},"number":"1.5.1","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.4.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"481149f40d9e4b45e81ba9df462d943fb1dddadc60b88bf5632e1dcb5278168d"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2020-12-01T00:00:00.000Z","created_at":"2020-12-01T17:18:15.865Z","description":" RuboCop + is a Ruby code style checking and code formatting tool.\n It aims to enforce + the community-driven Ruby Style Guide.\n","downloads_count":42212,"metadata":{"homepage_uri":"https://rubocop.org/","changelog_uri":"https://github.com/rubocop-hq/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop-hq/rubocop/issues","source_code_uri":"https://github.com/rubocop-hq/rubocop/","documentation_uri":"https://docs.rubocop.org/rubocop/1.5/"},"number":"1.5.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.4.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"2b1c5101afc230126dc5be1d9a8afa5deda2e9b6a8eb87f032863ab195113ad2"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2020-11-25T00:00:00.000Z","created_at":"2020-11-25T08:13:43.899Z","description":" RuboCop + is a Ruby code style checking and code formatting tool.\n It aims to enforce + the community-driven Ruby Style Guide.\n","downloads_count":2377457,"metadata":{"homepage_uri":"https://rubocop.org/","changelog_uri":"https://github.com/rubocop-hq/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop-hq/rubocop/issues","source_code_uri":"https://github.com/rubocop-hq/rubocop/","documentation_uri":"https://docs.rubocop.org/rubocop/1.4/"},"number":"1.4.2","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.4.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"5e58c81eb570336047380f2cc179b412eb50ee7560d128395ea535f6e1877fcf"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2020-11-23T00:00:00.000Z","created_at":"2020-11-23T15:47:06.586Z","description":" RuboCop + is a Ruby code style checking and code formatting tool.\n It aims to enforce + the community-driven Ruby Style Guide.\n","downloads_count":274848,"metadata":{"homepage_uri":"https://rubocop.org/","changelog_uri":"https://github.com/rubocop-hq/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop-hq/rubocop/issues","source_code_uri":"https://github.com/rubocop-hq/rubocop/","documentation_uri":"https://docs.rubocop.org/rubocop/1.4/"},"number":"1.4.1","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.4.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"c502ab34cfdffafca465b8ab4338209eaf86f3ac2a015e87caeb49b69e0979f6"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2020-11-23T00:00:00.000Z","created_at":"2020-11-23T09:00:24.039Z","description":" RuboCop + is a Ruby code style checking and code formatting tool.\n It aims to enforce + the community-driven Ruby Style Guide.\n","downloads_count":26784,"metadata":{"homepage_uri":"https://rubocop.org/","changelog_uri":"https://github.com/rubocop-hq/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop-hq/rubocop/issues","source_code_uri":"https://github.com/rubocop-hq/rubocop/","documentation_uri":"https://docs.rubocop.org/rubocop/1.4/"},"number":"1.4.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.4.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"c01c4658123427d9198c3d20e6fede1d0be555703a84bd8023efdf91dd8a6187"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2020-11-16T00:00:00.000Z","created_at":"2020-11-16T08:54:41.526Z","description":" RuboCop + is a Ruby code style checking and code formatting tool.\n It aims to enforce + the community-driven Ruby Style Guide.\n","downloads_count":777950,"metadata":{"homepage_uri":"https://rubocop.org/","changelog_uri":"https://github.com/rubocop-hq/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop-hq/rubocop/issues","source_code_uri":"https://github.com/rubocop-hq/rubocop/","documentation_uri":"https://docs.rubocop.org/rubocop/1.3/"},"number":"1.3.1","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.4.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"4054ee99368d9e479ef82869e731eccde3055b1a5bcdba02ea077f2411b3eab1"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2020-11-12T00:00:00.000Z","created_at":"2020-11-12T08:03:01.026Z","description":" RuboCop + is a Ruby code style checking and code formatting tool.\n It aims to enforce + the community-driven Ruby Style Guide.\n","downloads_count":233414,"metadata":{"homepage_uri":"https://rubocop.org/","changelog_uri":"https://github.com/rubocop-hq/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop-hq/rubocop/issues","source_code_uri":"https://github.com/rubocop-hq/rubocop/","documentation_uri":"https://docs.rubocop.org/rubocop/1.3/"},"number":"1.3.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.4.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"7cf281b5e63b87b6caf26a0fc44f98af32b0507898e360ac3a0d8fd824a947ef"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2020-11-05T00:00:00.000Z","created_at":"2020-11-05T07:35:20.077Z","description":" RuboCop + is a Ruby code style checking and code formatting tool.\n It aims to enforce + the community-driven Ruby Style Guide.\n","downloads_count":609851,"metadata":{"homepage_uri":"https://rubocop.org/","changelog_uri":"https://github.com/rubocop-hq/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop-hq/rubocop/issues","source_code_uri":"https://github.com/rubocop-hq/rubocop/","documentation_uri":"https://docs.rubocop.org/rubocop/1.2/"},"number":"1.2.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.4.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"599bb8a001cd4cb0195b8b0b8f055158b93f7bd77fc3a232e5adbdf3bca28715"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2020-10-29T00:00:00.000Z","created_at":"2020-10-29T15:18:10.951Z","description":" RuboCop + is a Ruby code style checking and code formatting tool.\n It aims to enforce + the community-driven Ruby Style Guide.\n","downloads_count":1144309,"metadata":{"homepage_uri":"https://rubocop.org/","changelog_uri":"https://github.com/rubocop-hq/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop-hq/rubocop/issues","source_code_uri":"https://github.com/rubocop-hq/rubocop/","documentation_uri":"https://docs.rubocop.org/rubocop/1.1/"},"number":"1.1.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.4.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"146a44a1d0baba33cac6274c0be6a98098cabe38684dff6e1b3929c29f3d88db"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2020-10-21T00:00:00.000Z","created_at":"2020-10-21T11:02:00.444Z","description":" RuboCop + is a Ruby code style checking and code formatting tool.\n It aims to enforce + the community-driven Ruby Style Guide.\n","downloads_count":1157578,"metadata":{"homepage_uri":"https://rubocop.org/","changelog_uri":"https://github.com/rubocop-hq/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop-hq/rubocop/issues","source_code_uri":"https://github.com/rubocop-hq/rubocop/","documentation_uri":"https://docs.rubocop.org/rubocop/1.0/"},"number":"1.0.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.4.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"c16df6a0a14e370a64ac7de209bba6e8466a0283761373c82b9eff9d0bf988b5"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2020-10-12T00:00:00.000Z","created_at":"2020-10-12T07:04:17.359Z","description":" RuboCop + is a Ruby code style checking and code formatting tool.\n It aims to enforce + the community-driven Ruby Style Guide.\n","downloads_count":17570406,"metadata":{"homepage_uri":"https://rubocop.org/","changelog_uri":"https://github.com/rubocop-hq/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop-hq/rubocop/issues","source_code_uri":"https://github.com/rubocop-hq/rubocop/","documentation_uri":"https://docs.rubocop.org/rubocop/0.93/"},"number":"0.93.1","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.4.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"73b44fbbe872edbd3f14487175b6369a0f48e952c155f305896ffa56c48b195e"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2020-10-08T00:00:00.000Z","created_at":"2020-10-08T14:53:41.340Z","description":" RuboCop + is a Ruby code style checking and code formatting tool.\n It aims to enforce + the community-driven Ruby Style Guide.\n","downloads_count":232421,"metadata":{"homepage_uri":"https://rubocop.org/","changelog_uri":"https://github.com/rubocop-hq/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop-hq/rubocop/issues","source_code_uri":"https://github.com/rubocop-hq/rubocop/","documentation_uri":"https://docs.rubocop.org/rubocop/0.93/"},"number":"0.93.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.4.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"6a3c6b8e5287ea7b7c729ab51406a163a9894fe0f925f0626b2a9112503c3bdb"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2020-09-25T00:00:00.000Z","created_at":"2020-09-25T08:12:20.931Z","description":" RuboCop + is a Ruby code style checking and code formatting tool.\n It aims to enforce + the community-driven Ruby Style Guide.\n","downloads_count":2834641,"metadata":{"homepage_uri":"https://rubocop.org/","changelog_uri":"https://github.com/rubocop-hq/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop-hq/rubocop/issues","source_code_uri":"https://github.com/rubocop-hq/rubocop/","documentation_uri":"https://docs.rubocop.org/rubocop/0.92/"},"number":"0.92.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.4.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"3653dec299db6290c1f4dd3c4afd47ef76c484185f3642605552547c74672e4b"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2020-09-23T00:00:00.000Z","created_at":"2020-09-23T09:46:14.960Z","description":" RuboCop + is a Ruby code style checking and code formatting tool.\n It aims to enforce + the community-driven Ruby Style Guide.\n","downloads_count":2128361,"metadata":{"homepage_uri":"https://rubocop.org/","changelog_uri":"https://github.com/rubocop-hq/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop-hq/rubocop/issues","source_code_uri":"https://github.com/rubocop-hq/rubocop/","documentation_uri":"https://docs.rubocop.org/"},"number":"0.91.1","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.4.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"06b08219c476a9507eb8a7f6b026d33f5d463d2a32488a3b80aab06a3e6fd5a6"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2020-09-15T00:00:00.000Z","created_at":"2020-09-15T05:45:14.063Z","description":" RuboCop + is a Ruby code style checking and code formatting tool.\n It aims to enforce + the community-driven Ruby Style Guide.\n","downloads_count":7480215,"metadata":{"homepage_uri":"https://rubocop.org/","changelog_uri":"https://github.com/rubocop-hq/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop-hq/rubocop/issues","source_code_uri":"https://github.com/rubocop-hq/rubocop/","documentation_uri":"https://docs.rubocop.org/"},"number":"0.91.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.4.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"0a836a303d959ba4d35b9c3eb848e4ed54952a4d0037874f0c1067da4721781d"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2020-09-01T00:00:00.000Z","created_at":"2020-09-01T06:44:59.545Z","description":" RuboCop + is a Ruby code style checking and code formatting tool.\n It aims to enforce + the community-driven Ruby Style Guide.\n","downloads_count":1652573,"metadata":{"homepage_uri":"https://rubocop.org/","changelog_uri":"https://github.com/rubocop-hq/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop-hq/rubocop/issues","source_code_uri":"https://github.com/rubocop-hq/rubocop/","documentation_uri":"https://docs.rubocop.org/"},"number":"0.90.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.4.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"9d3d3acf7dde11cea1c7c18c1baf8cc80124ad02db802eee2a96e03f38c58cf0"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2020-08-10T00:00:00.000Z","created_at":"2020-08-10T12:17:06.265Z","description":" RuboCop + is a Ruby code style checking and code formatting tool.\n It aims to enforce + the community-driven Ruby Style Guide.\n","downloads_count":6424554,"metadata":{"homepage_uri":"https://rubocop.org/","changelog_uri":"https://github.com/rubocop-hq/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop-hq/rubocop/issues","source_code_uri":"https://github.com/rubocop-hq/rubocop/","documentation_uri":"https://docs.rubocop.org/"},"number":"0.89.1","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.4.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"30794116b2804aab1abc74780a201fae5160c1d6a21550ce9786abd3ca0e07fa"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2020-08-05T00:00:00.000Z","created_at":"2020-08-05T19:05:18.634Z","description":" RuboCop + is a Ruby code style checking and code formatting tool.\n It aims to enforce + the community-driven Ruby Style Guide.\n","downloads_count":280008,"metadata":{"homepage_uri":"https://rubocop.org/","changelog_uri":"https://github.com/rubocop-hq/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop-hq/rubocop/issues","source_code_uri":"https://github.com/rubocop-hq/rubocop/","documentation_uri":"https://docs.rubocop.org/"},"number":"0.89.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.4.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"ef1aba0c16b4610bfc8e9fdd233707719872b387f4bc9d3fc66829572a9008c2"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2020-07-13T00:00:00.000Z","created_at":"2020-07-13T12:22:19.339Z","description":" RuboCop + is a Ruby code style checking and code formatting tool.\n It aims to enforce + the community-driven Ruby Style Guide.\n","downloads_count":3644319,"metadata":{"homepage_uri":"https://rubocop.org/","changelog_uri":"https://github.com/rubocop-hq/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop-hq/rubocop/issues","source_code_uri":"https://github.com/rubocop-hq/rubocop/","documentation_uri":"https://docs.rubocop.org/"},"number":"0.88.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.4.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"8d7da9340fce8b64be15077e6ba1f7c60b5b5999901ce2eda9837f9ca08b2fe4"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2020-07-07T00:00:00.000Z","created_at":"2020-07-07T19:14:41.214Z","description":" RuboCop + is a Ruby code style checking and code formatting tool.\n It aims to enforce + the community-driven Ruby Style Guide.\n","downloads_count":631211,"metadata":{"homepage_uri":"https://rubocop.org/","changelog_uri":"https://github.com/rubocop-hq/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop-hq/rubocop/issues","source_code_uri":"https://github.com/rubocop-hq/rubocop/","documentation_uri":"https://docs.rubocop.org/"},"number":"0.87.1","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.4.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"3df1a0c641feed9004d0dd787e220283cf8a82f8ba24a04a284c4f841dad6029"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2020-07-06T00:00:00.000Z","created_at":"2020-07-06T16:12:40.171Z","description":" RuboCop + is a Ruby code style checking and code formatting tool.\n It aims to enforce + the community-driven Ruby Style Guide.\n","downloads_count":2324512,"metadata":{"homepage_uri":"https://rubocop.org/","changelog_uri":"https://github.com/rubocop-hq/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop-hq/rubocop/issues","source_code_uri":"https://github.com/rubocop-hq/rubocop/","documentation_uri":"https://docs.rubocop.org/"},"number":"0.87.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.4.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"a928b5acff012d15df735ef34978bc099397b12fcaa4025e46c565397e179430"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2020-06-22T00:00:00.000Z","created_at":"2020-06-22T07:29:21.381Z","description":" RuboCop + is a Ruby code style checking and code formatting tool.\n It aims to enforce + the community-driven Ruby Style Guide.\n","downloads_count":10205881,"metadata":{"homepage_uri":"https://rubocop.org/","changelog_uri":"https://github.com/rubocop-hq/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop-hq/rubocop/issues","source_code_uri":"https://github.com/rubocop-hq/rubocop/","documentation_uri":"https://docs.rubocop.org/"},"number":"0.86.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.4.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"babe641b554e28d53bad32fd94f90e6d65410fa06fe8a2c511f2aec03b7c83ca"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2020-06-07T00:00:00.000Z","created_at":"2020-06-07T15:40:00.351Z","description":" RuboCop + is a Ruby code style checking and code formatting tool.\n It aims to enforce + the community-driven Ruby Style Guide.\n","downloads_count":1912351,"metadata":{"homepage_uri":"https://rubocop.org/","changelog_uri":"https://github.com/rubocop-hq/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop-hq/rubocop/issues","source_code_uri":"https://github.com/rubocop-hq/rubocop/","documentation_uri":"https://docs.rubocop.org/"},"number":"0.85.1","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.4.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"d0a0b8a7cf84ed0c5f3a305a48c738b1b8ec8a08affd19e7c5986fd6d5a21bbe"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2020-06-01T00:00:00.000Z","created_at":"2020-06-01T15:47:28.436Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":407188,"metadata":{"homepage_uri":"https://rubocop.org/","changelog_uri":"https://github.com/rubocop-hq/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop-hq/rubocop/issues","source_code_uri":"https://github.com/rubocop-hq/rubocop/","documentation_uri":"https://docs.rubocop.org/"},"number":"0.85.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.4.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"3963352c8187a06dbf3f65358ab91eff3502792da8dbb0e8329eeb7fb74715bc"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2020-05-21T00:00:00.000Z","created_at":"2020-05-21T06:57:11.953Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":1763468,"metadata":{"homepage_uri":"https://www.rubocop.org/","changelog_uri":"https://github.com/rubocop-hq/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop-hq/rubocop/issues","source_code_uri":"https://github.com/rubocop-hq/rubocop/","documentation_uri":"https://docs.rubocop.org/"},"number":"0.84.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.4.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"069f1497ef67aefa360a80aef66375fab2941b85dd09a2a68dcaab3d17a4e5c6"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2020-05-11T00:00:00.000Z","created_at":"2020-05-11T12:28:44.160Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":1474486,"metadata":{"homepage_uri":"https://www.rubocop.org/","changelog_uri":"https://github.com/rubocop-hq/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop-hq/rubocop/issues","source_code_uri":"https://github.com/rubocop-hq/rubocop/","documentation_uri":"https://docs.rubocop.org/"},"number":"0.83.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.4.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"3397a3778ed0fa4d43e69b19f9c421da1925e7a85acc07f5b852aafc7a3c7224"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2020-04-16T00:00:00.000Z","created_at":"2020-04-16T08:19:59.835Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":5420222,"metadata":{"homepage_uri":"https://www.rubocop.org/","changelog_uri":"https://github.com/rubocop-hq/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop-hq/rubocop/issues","source_code_uri":"https://github.com/rubocop-hq/rubocop/","documentation_uri":"https://docs.rubocop.org/"},"number":"0.82.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.4.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"2d6c5bc7d9b9c1ac1e8bb8a724ea761d724661ebec143eb0b92345b5a8e8d25f"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2020-04-01T00:00:00.000Z","created_at":"2020-04-01T07:55:38.383Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":4461435,"metadata":{"homepage_uri":"https://www.rubocop.org/","changelog_uri":"https://github.com/rubocop-hq/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop-hq/rubocop/issues","source_code_uri":"https://github.com/rubocop-hq/rubocop/","documentation_uri":"https://docs.rubocop.org/"},"number":"0.81.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.3.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"3d1ff65d3acf3a4ef1babb4624255268460f5d56ddb8f9c985a731d8ebe80d32"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2020-02-29T00:00:00.000Z","created_at":"2020-02-29T18:05:39.532Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":4091837,"metadata":{"homepage_uri":"https://www.rubocop.org/","changelog_uri":"https://github.com/rubocop-hq/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop-hq/rubocop/issues","source_code_uri":"https://github.com/rubocop-hq/rubocop/","documentation_uri":"https://docs.rubocop.org/"},"number":"0.80.1","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.3.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"485291465f908c08de184932a6ae7a796c8a37dd46020dd5ed21cc46eee117c5"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2020-02-18T00:00:00.000Z","created_at":"2020-02-18T11:59:08.971Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":1657923,"metadata":{"homepage_uri":"https://www.rubocop.org/","changelog_uri":"https://github.com/rubocop-hq/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop-hq/rubocop/issues","source_code_uri":"https://github.com/rubocop-hq/rubocop/","documentation_uri":"https://docs.rubocop.org/"},"number":"0.80.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.3.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"cb7ec63f27324162a4d2021104b2d94ea611e7c47995cc8b6f65436ecebeae29"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2020-01-06T00:00:00.000Z","created_at":"2020-01-06T09:57:25.274Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":3881112,"metadata":{"homepage_uri":"https://www.rubocop.org/","changelog_uri":"https://github.com/rubocop-hq/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop-hq/rubocop/issues","source_code_uri":"https://github.com/rubocop-hq/rubocop/","documentation_uri":"https://docs.rubocop.org/"},"number":"0.79.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.3.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"325b331102897bd19d08f4e4d18dde806f24cbf5768110663ae16fab1f17a792"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2019-12-18T00:00:00.000Z","created_at":"2019-12-18T20:51:20.075Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":2086611,"metadata":{"homepage_uri":"https://www.rubocop.org/","changelog_uri":"https://github.com/rubocop-hq/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop-hq/rubocop/issues","source_code_uri":"https://github.com/rubocop-hq/rubocop/","documentation_uri":"https://docs.rubocop.org/"},"number":"0.78.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.3.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"a013cddb1b1292833fada241aea59b450c2a51d730c556e829572ba69d862bdc"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2019-11-27T00:00:00.000Z","created_at":"2019-11-27T18:03:03.812Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":2513680,"metadata":{"homepage_uri":"https://www.rubocop.org/","changelog_uri":"https://github.com/rubocop-hq/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop-hq/rubocop/issues","source_code_uri":"https://github.com/rubocop-hq/rubocop/","documentation_uri":"https://docs.rubocop.org/"},"number":"0.77.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.3.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"a95b032eeeb52bfd83db802d992a2e98484023b06677f16d5bb5c2f556580855"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2019-10-28T00:00:00.000Z","created_at":"2019-10-28T14:54:29.237Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":3241279,"metadata":{"homepage_uri":"https://www.rubocop.org/","changelog_uri":"https://github.com/rubocop-hq/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop-hq/rubocop/issues","source_code_uri":"https://github.com/rubocop-hq/rubocop/","documentation_uri":"https://docs.rubocop.org/"},"number":"0.76.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.3.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"00837450d0eb3d85c7eb32afe909f9536135172df06bdd490ade9c4e7b0ca51f"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2019-10-14T00:00:00.000Z","created_at":"2019-10-14T16:58:16.713Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":2156709,"metadata":{"homepage_uri":"https://www.rubocop.org/","changelog_uri":"https://github.com/rubocop-hq/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop-hq/rubocop/issues","source_code_uri":"https://github.com/rubocop-hq/rubocop/","documentation_uri":"https://docs.rubocop.org/"},"number":"0.75.1","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.3.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"360c1d4941881064611feae6b3b9f1535a5e455dd174ced9a4d39b734e0cb868"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2019-09-30T00:00:00.000Z","created_at":"2019-09-30T17:05:51.523Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":1094590,"metadata":{"homepage_uri":"https://www.rubocop.org/","changelog_uri":"https://github.com/rubocop-hq/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop-hq/rubocop/issues","source_code_uri":"https://github.com/rubocop-hq/rubocop/","documentation_uri":"https://docs.rubocop.org/"},"number":"0.75.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.3.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"4be504c51e6bfbce5070bc853d9bd770a273600eca31820ca1aa3695d66010f4"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2019-07-31T00:00:00.000Z","created_at":"2019-07-31T19:12:04.545Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":10008882,"metadata":{"homepage_uri":"https://www.rubocop.org/","changelog_uri":"https://github.com/rubocop-hq/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop-hq/rubocop/issues","source_code_uri":"https://github.com/rubocop-hq/rubocop/","documentation_uri":"https://docs.rubocop.org/"},"number":"0.74.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.3.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"d3abbf59133f5fce2bea961bb363a3c2f7d2e36ffc30fd11de5c2c9cb456fe72"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2019-07-16T00:00:00.000Z","created_at":"2019-07-16T08:57:10.832Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":1290752,"metadata":{"homepage_uri":"https://www.rubocop.org/","changelog_uri":"https://github.com/rubocop-hq/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop-hq/rubocop/issues","source_code_uri":"https://github.com/rubocop-hq/rubocop/","documentation_uri":"https://docs.rubocop.org/"},"number":"0.73.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.3.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"0ed89317eba64db6327896303dafad5c1520983e12cb2c21cbb32cac3a62bfac"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2019-06-25T00:00:00.000Z","created_at":"2019-06-25T14:36:09.976Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":2979244,"metadata":{"homepage_uri":"https://www.rubocop.org/","changelog_uri":"https://github.com/rubocop-hq/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop-hq/rubocop/issues","source_code_uri":"https://github.com/rubocop-hq/rubocop/","documentation_uri":"https://docs.rubocop.org/"},"number":"0.72.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.3.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"a20e5b9fe52b337b491d77faea871fe90f8bf2fd5a71b594e76419a852ad5ba4"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2019-05-30T00:00:00.000Z","created_at":"2019-05-30T13:53:44.134Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":2595408,"metadata":{"homepage_uri":"https://www.rubocop.org/","changelog_uri":"https://github.com/rubocop-hq/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop-hq/rubocop/issues","source_code_uri":"https://github.com/rubocop-hq/rubocop/","documentation_uri":"https://docs.rubocop.org/"},"number":"0.71.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.3.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"cb40a9fb646368c867dd3a41753169dee24aa4b819e91f0189a8b8da82cb5e56"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2019-05-21T00:00:00.000Z","created_at":"2019-05-21T10:26:46.421Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":1383246,"metadata":{"homepage_uri":"https://www.rubocop.org/","changelog_uri":"https://github.com/rubocop-hq/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop-hq/rubocop/issues","source_code_uri":"https://github.com/rubocop-hq/rubocop/","documentation_uri":"https://docs.rubocop.org/"},"number":"0.70.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.3.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"9c938c50fe39ed55458ecf600f316ccbaf51cf5584d1aa83b621ba27ba94f86c"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2019-05-13T00:00:00.000Z","created_at":"2019-05-13T08:57:55.837Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":2841242,"metadata":{"homepage_uri":"https://www.rubocop.org/","changelog_uri":"https://github.com/rubocop-hq/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop-hq/rubocop/issues","source_code_uri":"https://github.com/rubocop-hq/rubocop/","documentation_uri":"https://docs.rubocop.org/"},"number":"0.69.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.3.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"b1ccb922caf3eb21a97a92fe8cbf62950e4adc215052cde4cfbbc5a8a442bcb2"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2019-04-30T00:00:00.000Z","created_at":"2019-04-30T19:46:32.378Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":2467915,"metadata":{"homepage_uri":"https://www.rubocop.org/","changelog_uri":"https://github.com/rubocop-hq/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop-hq/rubocop/issues","source_code_uri":"https://github.com/rubocop-hq/rubocop/","documentation_uri":"https://docs.rubocop.org/"},"number":"0.68.1","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.2.2","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"af830b7ddf6459700b35225db789e828015df5d96ca40ee438da1115383a39d4"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2019-04-29T00:00:00.000Z","created_at":"2019-04-29T13:53:42.552Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":444126,"metadata":{"homepage_uri":"https://www.rubocop.org/","changelog_uri":"https://github.com/rubocop-hq/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop-hq/rubocop/issues","source_code_uri":"https://github.com/rubocop-hq/rubocop/","documentation_uri":"https://docs.rubocop.org/"},"number":"0.68.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.2.2","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"8a1d642e344ef81164915cf00f021724a2ff1b17ff552369f8be36a7dc672b9c"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2019-04-05T00:00:00.000Z","created_at":"2019-04-05T07:54:59.405Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":1425061,"metadata":{"homepage_uri":"https://www.rubocop.org/","changelog_uri":"https://github.com/rubocop-hq/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop-hq/rubocop/issues","source_code_uri":"https://github.com/rubocop-hq/rubocop/","documentation_uri":"https://docs.rubocop.org/"},"number":"0.67.2","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.2.2","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"0029e66eb5c02fca2befdcba5c12c81ca83620c4ad5e1d197fcd35f7a549efb1"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2019-04-04T00:00:00.000Z","created_at":"2019-04-04T17:13:15.415Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":110653,"metadata":{"homepage_uri":"https://www.rubocop.org/","changelog_uri":"https://github.com/rubocop-hq/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop-hq/rubocop/issues","source_code_uri":"https://github.com/rubocop-hq/rubocop/","documentation_uri":"https://docs.rubocop.org/"},"number":"0.67.1","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.2.2","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"c1e929a0aae8b28d75c8ca093a4401e66c2fc91e84f6a8ccb8ad5f22016fd7a2"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2019-04-04T00:00:00.000Z","created_at":"2019-04-04T15:23:11.383Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":69380,"metadata":{"homepage_uri":"https://www.rubocop.org/","changelog_uri":"https://github.com/rubocop-hq/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop-hq/rubocop/issues","source_code_uri":"https://github.com/rubocop-hq/rubocop/","documentation_uri":"https://docs.rubocop.org/"},"number":"0.67.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.2.2","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"fe1d716afc92a59180e30e9d62b398a3c069c4ae5bca97b5de6e4d65c6cf9f8c"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2019-03-18T00:00:00.000Z","created_at":"2019-03-18T09:27:01.934Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":2661515,"metadata":{"homepage_uri":"https://www.rubocop.org/","changelog_uri":"https://github.com/rubocop-hq/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop-hq/rubocop/issues","source_code_uri":"https://github.com/rubocop-hq/rubocop/","documentation_uri":"https://docs.rubocop.org/"},"number":"0.66.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.2.2","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"f05a6896f367765b3f0fba663d0add120444f8de604dada405662b10a0860f5a"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2019-02-19T00:00:00.000Z","created_at":"2019-02-19T08:43:14.568Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":2547696,"metadata":{"homepage_uri":"https://www.rubocop.org/","changelog_uri":"https://github.com/rubocop-hq/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop-hq/rubocop/issues","source_code_uri":"https://github.com/rubocop-hq/rubocop/","documentation_uri":"https://docs.rubocop.org/"},"number":"0.65.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.2.2","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"c6ffcb57bab1cecbcd0240948c2bba65f422abc1e72bef461fb4f31cd9bbd19a"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2019-02-10T00:00:00.000Z","created_at":"2019-02-10T13:54:58.751Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":3552284,"metadata":{"homepage_uri":"https://www.rubocop.org/","changelog_uri":"https://github.com/rubocop-hq/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop-hq/rubocop/issues","source_code_uri":"https://github.com/rubocop-hq/rubocop/","documentation_uri":"https://docs.rubocop.org/"},"number":"0.64.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.2.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"726debef2d860b3855f683c5051121046b99197b39459620dd137266a789501f"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2019-01-22T00:00:00.000Z","created_at":"2019-01-22T03:02:01.872Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":2269935,"metadata":{"homepage_uri":"https://www.rubocop.org/","changelog_uri":"https://github.com/rubocop-hq/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop-hq/rubocop/issues","source_code_uri":"https://github.com/rubocop-hq/rubocop/","documentation_uri":"https://docs.rubocop.org/"},"number":"0.63.1","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.2.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"5e8a8fadbe248ff9c3727b603d66f23658fe1e1965ae07571365b34a390600df"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2019-01-16T00:00:00.000Z","created_at":"2019-01-16T16:32:03.430Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":455917,"metadata":{"homepage_uri":"https://www.rubocop.org/","changelog_uri":"https://github.com/rubocop-hq/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop-hq/rubocop/issues","source_code_uri":"https://github.com/rubocop-hq/rubocop/","documentation_uri":"https://docs.rubocop.org/"},"number":"0.63.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.2.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"81b091cf498be83ecb01be8ea5c265c0231eed14d9ee00b872cd10859dca8d65"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2019-01-01T00:00:00.000Z","created_at":"2019-01-01T08:40:22.886Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":1155198,"metadata":{"homepage_uri":"https://www.rubocop.org/","changelog_uri":"https://github.com/rubocop-hq/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop-hq/rubocop/issues","source_code_uri":"https://github.com/rubocop-hq/rubocop/","documentation_uri":"https://docs.rubocop.org/"},"number":"0.62.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.2.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"73bb7e9b97e35444c37a9164e5a644518807fba613a790e1e234ae9b7fcfca0e"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2018-12-06T00:00:00.000Z","created_at":"2018-12-06T08:18:53.311Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":1916902,"metadata":{"homepage_uri":"https://www.rubocop.org/","changelog_uri":"https://github.com/rubocop-hq/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop-hq/rubocop/issues","source_code_uri":"https://github.com/rubocop-hq/rubocop/","documentation_uri":"https://docs.rubocop.org/"},"number":"0.61.1","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.2.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"8650301567ee5a4867dbb9ba9ca9987d7dc8a9166ee3136c41c03906cc935ada"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2018-12-05T00:00:00.000Z","created_at":"2018-12-05T12:42:54.009Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":117778,"metadata":{"homepage_uri":"https://www.rubocop.org/","changelog_uri":"https://github.com/rubocop-hq/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop-hq/rubocop/issues","source_code_uri":"https://github.com/rubocop-hq/rubocop/","documentation_uri":"https://docs.rubocop.org/"},"number":"0.61.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.2.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"18a30bb68d42e8cc3fd1a0aac37c86db46c99fae2edae7bb9dc49eed8f41864c"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2018-10-26T00:00:00.000Z","created_at":"2018-10-26T10:41:04.209Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":2218016,"metadata":{"homepage_uri":"https://www.rubocop.org/","changelog_uri":"https://github.com/rubocop-hq/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop-hq/rubocop/issues","source_code_uri":"https://github.com/rubocop-hq/rubocop/","documentation_uri":"https://docs.rubocop.org/"},"number":"0.60.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.2.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"31d8b34585456ce0f0e79d6411c3b7e705ac571996876d9815e1d6f1130173c7"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2018-09-24T00:00:00.000Z","created_at":"2018-09-24T05:19:49.887Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":2856290,"metadata":{"homepage_uri":"https://www.rubocop.org/","changelog_uri":"https://github.com/rubocop-hq/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop-hq/rubocop/issues","source_code_uri":"https://github.com/rubocop-hq/rubocop/","documentation_uri":"https://docs.rubocop.org/"},"number":"0.59.2","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.2.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"a6888aef273e586226013355db553bca6c7acd81ca5771d749d69a883dc92004"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2018-09-15T00:00:00.000Z","created_at":"2018-09-15T07:45:31.993Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":809484,"metadata":{"homepage_uri":"http://www.rubocop.org/","changelog_uri":"https://github.com/rubocop-hq/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop-hq/rubocop/issues","source_code_uri":"https://github.com/rubocop-hq/rubocop/","documentation_uri":"http://docs.rubocop.org/"},"number":"0.59.1","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.2.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"4b449177a369193559dabbbbd4fff967c1b2bd817bd78134b6082f1d1dd5e443"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2018-09-09T00:00:00.000Z","created_at":"2018-09-09T16:24:47.204Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":815608,"metadata":{"homepage_uri":"http://www.rubocop.org/","changelog_uri":"https://github.com/rubocop-hq/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop-hq/rubocop/issues","source_code_uri":"https://github.com/rubocop-hq/rubocop/","documentation_uri":"http://docs.rubocop.org/"},"number":"0.59.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.2.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"455597f026940948d5c46a84660a0a944f07d6cf27f497d7147bc49626ced183"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2018-07-23T00:00:00.000Z","created_at":"2018-07-23T18:01:18.681Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":5843604,"metadata":{"homepage_uri":"http://www.rubocop.org/","changelog_uri":"https://github.com/rubocop-hq/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop-hq/rubocop/issues","source_code_uri":"https://github.com/rubocop-hq/rubocop/","documentation_uri":"http://docs.rubocop.org/"},"number":"0.58.2","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.2.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"43dab6c9d6c72844cbd028140ee7c60190c5ee6e30417d63480da3f413778139"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2018-07-10T00:00:00.000Z","created_at":"2018-07-10T07:31:15.576Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":853005,"metadata":{"homepage_uri":"http://www.rubocop.org/","changelog_uri":"https://github.com/rubocop-hq/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop-hq/rubocop/issues","source_code_uri":"https://github.com/rubocop-hq/rubocop/","documentation_uri":"http://docs.rubocop.org/"},"number":"0.58.1","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.2.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"26ca690212ae00b00435e767f9b3f46ffb1f1143a5f25fe728e638d15ba65868"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2018-07-07T00:00:00.000Z","created_at":"2018-07-07T12:38:26.296Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":186241,"metadata":{"homepage_uri":"http://www.rubocop.org/","changelog_uri":"https://github.com/rubocop-hq/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop-hq/rubocop/issues","source_code_uri":"https://github.com/rubocop-hq/rubocop/","documentation_uri":"http://docs.rubocop.org/"},"number":"0.58.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.2.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"e3b24a143239f4752f4a4e5e09ebb6ff41bb302db34771489db6ef4b728d3a24"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2018-06-12T00:00:00.000Z","created_at":"2018-06-12T09:05:03.272Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":2274204,"metadata":{"homepage_uri":"https://rubocop.readthedocs.io/","changelog_uri":"https://github.com/rubocop-hq/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop-hq/rubocop/issues","source_code_uri":"https://github.com/rubocop-hq/rubocop/","documentation_uri":"https://rubocop.readthedocs.io/"},"number":"0.57.2","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.1.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"468ca03be186a4c39f75535ad445bb073408cf2c75035105ac6b91dc04d9cbac"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2018-06-06T00:00:00.000Z","created_at":"2018-06-06T22:57:40.803Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":274997,"metadata":{"homepage_uri":"https://rubocop.readthedocs.io/","changelog_uri":"https://github.com/rubocop-hq/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop-hq/rubocop/issues","source_code_uri":"https://github.com/rubocop-hq/rubocop/","documentation_uri":"https://rubocop.readthedocs.io/"},"number":"0.57.1","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.1.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"ad25fe52d9be12bb0662dd32e84cc72067f2ab516a14bb5d557dfec15a74a2e6"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2018-06-06T00:00:00.000Z","created_at":"2018-06-06T00:53:30.394Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":118755,"metadata":{"homepage_uri":"https://rubocop.readthedocs.io/","changelog_uri":"https://github.com/rubocop-hq/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rubocop-hq/rubocop/issues","source_code_uri":"https://github.com/rubocop-hq/rubocop/","documentation_uri":"https://rubocop.readthedocs.io/"},"number":"0.57.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.1.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"cbce208bac27d4368ebe1a7892b37674399ad274b18888259be8b305a368e644"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2018-05-14T00:00:00.000Z","created_at":"2018-05-14T15:17:56.916Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":1916629,"metadata":{"homepage_uri":"https://rubocop.readthedocs.io/","changelog_uri":"https://github.com/bbatsov/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/bbatsov/rubocop/issues","source_code_uri":"https://github.com/bbatsov/rubocop/","documentation_uri":"https://rubocop.readthedocs.io/"},"number":"0.56.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.1.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"687f9418a1475911fdd0cf7c57009620daef2caffe5692b621dc6d1abfb04212"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2018-04-16T00:00:00.000Z","created_at":"2018-04-16T09:20:00.851Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":3910741,"metadata":{"homepage_uri":"https://rubocop.readthedocs.io/","changelog_uri":"https://github.com/bbatsov/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/bbatsov/rubocop/issues","source_code_uri":"https://github.com/bbatsov/rubocop/","documentation_uri":"https://rubocop.readthedocs.io/"},"number":"0.55.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.1.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"21fc1b25eee37a6b601144b02f2b90d608555aa09aafbf57f03636828d99169f"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2018-03-21T00:00:00.000Z","created_at":"2018-03-21T03:01:01.664Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":4986826,"metadata":{"homepage_uri":"https://rubocop.readthedocs.io/","changelog_uri":"https://github.com/bbatsov/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/bbatsov/rubocop/issues","source_code_uri":"https://github.com/bbatsov/rubocop/","documentation_uri":"https://rubocop.readthedocs.io/"},"number":"0.54.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.1.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"3a2208fe1166b22e109b3a184aa0bd26e04d16e78587b9c714e63980694ade80"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2018-03-05T00:00:00.000Z","created_at":"2018-03-05T01:51:12.010Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":1134869,"metadata":{"homepage_uri":"https://rubocop.readthedocs.io/","changelog_uri":"https://github.com/bbatsov/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/bbatsov/rubocop/issues","source_code_uri":"https://github.com/bbatsov/rubocop/","documentation_uri":"https://rubocop.readthedocs.io/"},"number":"0.53.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.1.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"ce9862b128c49183b2bf2b3416825557ca99bddd504eb1a9f815e8039f201b28"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2017-12-27T00:00:00.000Z","created_at":"2017-12-27T13:31:06.690Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":7053869,"metadata":{"homepage_uri":"https://rubocop.readthedocs.io/","changelog_uri":"https://github.com/bbatsov/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/bbatsov/rubocop/issues","source_code_uri":"https://github.com/bbatsov/rubocop/","documentation_uri":"https://rubocop.readthedocs.io/"},"number":"0.52.1","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.1.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"4ec659892e86c64ec25e7a543b4a717f9ee6e9450bdb9541e0d3492b43ce4234"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2017-12-12T00:00:00.000Z","created_at":"2017-12-12T13:56:04.078Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":945343,"metadata":{"homepage_uri":"https://rubocop.readthedocs.io/","changelog_uri":"https://github.com/bbatsov/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/bbatsov/rubocop/issues","source_code_uri":"https://github.com/bbatsov/rubocop/","documentation_uri":"https://rubocop.readthedocs.io/"},"number":"0.52.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.1.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"291bcca376e76b5bada3ee91c938a4354e384d3d87278ab54b22bde660b520bd"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2017-10-18T00:00:00.000Z","created_at":"2017-10-18T19:13:19.013Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":3328257,"metadata":{"homepage_uri":"https://rubocop.readthedocs.io/","changelog_uri":"https://github.com/bbatsov/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/bbatsov/rubocop/issues","source_code_uri":"https://github.com/bbatsov/rubocop/","documentation_uri":"https://rubocop.readthedocs.io/"},"number":"0.51.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.1.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"c131a5c063600cd31cf49c69130c16b94a6bd7d6a35f6f00c587ac6330bdc233"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2017-09-14T00:00:00.000Z","created_at":"2017-09-14T18:13:15.476Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":3356510,"metadata":{"homepage_uri":"https://rubocop.readthedocs.io/","changelog_uri":"https://github.com/bbatsov/rubocop/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/bbatsov/rubocop/issues","source_code_uri":"https://github.com/bbatsov/rubocop/","documentation_uri":"https://rubocop.readthedocs.io/"},"number":"0.50.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.0.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"9f7610b37b6746609c932ec8ac5b1a9b4b56f7526018c941393e79b2d93fedc2"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2017-05-29T00:00:00.000Z","created_at":"2017-05-29T12:34:28.077Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":10749870,"metadata":{},"number":"0.49.1","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.0.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"bcb37220633a570611b68bf8d4649414624d90fad83a7bf8310940f61df51ed7"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2017-05-24T00:00:00.000Z","created_at":"2017-05-24T05:33:44.287Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":343189,"metadata":{},"number":"0.49.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.0.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"3af20292590127c5e5a67a08e84642bb9d1f555cb8ed16717980c8b524ed038f"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2017-04-03T00:00:00.000Z","created_at":"2017-04-03T11:29:58.977Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":2592511,"metadata":{},"number":"0.48.1","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.0.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"002f6b49013abdc05c68ae75433c48d3ee7f1baa70674d60bf1cc310e210fbd7"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2017-03-26T00:00:00.000Z","created_at":"2017-03-26T09:53:19.789Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":198982,"metadata":{},"number":"0.48.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.0.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"cca38e2b3ba3496fa63dbe747baa9eff7f9717631df1221467618b54773fd690"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2017-01-18T00:00:00.000Z","created_at":"2017-01-18T02:22:18.664Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":3109698,"metadata":{},"number":"0.47.1","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.0.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"a7066a0c553e3bad1f118062deef5f05d050a6cf11cb9c9cda067b2a891a7916"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2017-01-16T00:00:00.000Z","created_at":"2017-01-16T01:37:21.113Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":94971,"metadata":{},"number":"0.47.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.0.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"55d32c0b5b42f7ac5b6ede9ef4f6a1e6605bc28f8cb38db1c796042ad71f5bd3"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2016-11-30T00:00:00.000Z","created_at":"2016-11-30T06:56:04.929Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":2007313,"metadata":{},"number":"0.46.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.0.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"0c5087c157b6070319d06cab7594f9f72b5478344a2568b7029875a081c20418"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2016-10-31T00:00:00.000Z","created_at":"2016-10-31T09:31:11.908Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":913542,"metadata":{},"number":"0.45.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.0.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"c579b99be005868127c26d18d8ebfc2e71ed4ebacf781896a837cac6f128248f"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2016-10-13T00:00:00.000Z","created_at":"2016-10-13T14:55:04.417Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":452524,"metadata":{},"number":"0.44.1","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.0.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"2f702937dce43bed412c186dadd3727a769e837bd82263ee7687f37050c324ec"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2016-10-13T00:00:00.000Z","created_at":"2016-10-13T14:05:27.902Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":5856,"metadata":{},"number":"0.44.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.0.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"b124c8255b6570964a53e9d17d3861970d71788f8caa7819335cfac291eb8093"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2016-09-19T00:00:00.000Z","created_at":"2016-09-19T08:02:45.931Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":936565,"metadata":{},"number":"0.43.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.0.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"125e352d5ad65cae73f33572fde0f4793ca8ef7823263935e93ff0c2cd265764"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2016-07-25T00:00:00.000Z","created_at":"2016-07-25T09:16:51.982Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":1763676,"metadata":{},"number":"0.42.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.0.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"1bfd76aa1f6e266d459a7776e5de13956595aca4718758f593b5800c9d809918"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2016-07-07T00:00:00.000Z","created_at":"2016-07-07T11:55:00.995Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":1677885,"metadata":{},"number":"0.41.2","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 1.9.3","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"9ef6e6a8de0ee0f45305beaae85645bb050e443c237ce91ab488268540ca4d09"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2016-06-26T00:00:00.000Z","created_at":"2016-06-26T08:50:26.134Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":377270,"metadata":{},"number":"0.41.1","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 1.9.3","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"7f6c7d8a9a9b4fecbe89a851c38bc549c8d1d4744f57bde383aa33884d4ef661"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2016-06-25T00:00:00.000Z","created_at":"2016-06-25T17:50:26.038Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":51431,"metadata":{},"number":"0.41.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 1.9.3","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"9580eb20ce098b7a0c06730f92e07ff71da25b803b5a28580ea571b17422e008"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2016-05-09T00:00:00.000Z","created_at":"2016-05-09T17:45:53.078Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":1493315,"metadata":{},"number":"0.40.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 1.9.3","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"ddca83f353721240eb3563c2d9b5fb7e9928845058a6a49f23aab79d25ca83f6"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2016-03-27T00:00:00.000Z","created_at":"2016-03-27T11:16:21.158Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":1658242,"metadata":{},"number":"0.39.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 1.9.3","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"5600c0f7268778520598394cc9ceed69ca3df2a874f2881dfd1d17ba336427bb"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2016-03-09T00:00:00.000Z","created_at":"2016-03-09T15:10:05.281Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":643355,"metadata":{},"number":"0.38.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 1.9.3","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"4094e2c4b9e0827191c55ab59fd8813e41f40f5c83717b5a143f108b4ac1fc61"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2016-02-11T00:00:00.000Z","created_at":"2016-02-11T12:50:57.031Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":885969,"metadata":{},"number":"0.37.2","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 1.9.3","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"d65255d1f072bf737cef74c0cfca50de448bd8428644fa3c4e8880698856be2a"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2016-02-09T00:00:00.000Z","created_at":"2016-02-09T16:45:33.535Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":63445,"metadata":{},"number":"0.37.1","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 1.9.3","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"a1dbc993cd8c0f1afb90a913b4ef6fa83400809d2b30079a877f52358e498bcc"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2016-02-04T00:00:00.000Z","created_at":"2016-02-04T06:37:12.148Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":110900,"metadata":{},"number":"0.37.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 1.9.3","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"c8979d3c94088d7e7f38f412efb91a74b2b0c97b3eadf35d7d2645b676508ae1"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2016-01-14T00:00:00.000Z","created_at":"2016-01-14T18:22:21.651Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":1306723,"metadata":{},"number":"0.36.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 1.9.3","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"e613b68a72930726a8aab8fba7afffef0b162edaa67b271b491fd18c6c350fec"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2015-11-10T00:00:00.000Z","created_at":"2015-11-10T17:09:13.947Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":1590757,"metadata":{},"number":"0.35.1","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 1.9.3","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"4f0b3ce1e3f9e6bb2b1409a3c49dbf7e4a682b7b083ee5ff20d5cee6846a38bf"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2015-11-07T00:00:00.000Z","created_at":"2015-11-07T06:46:41.231Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":252146,"metadata":{},"number":"0.35.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 1.9.3","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"c7b4d9f1bfd1dfb4730519979f6fb283518b945ebe3bb7fc21b2a89ecb7979ff"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2015-09-21T00:00:00.000Z","created_at":"2015-09-21T14:50:42.260Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":1222555,"metadata":{},"number":"0.34.2","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 1.9.3","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"d387d22b07c8ba54043d742ee7738dd31440808e371e86502e6d06fbf5d22b7a"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2015-09-09T00:00:00.000Z","created_at":"2015-09-09T11:29:19.149Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":144599,"metadata":{},"number":"0.34.1","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 1.9.3","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"0d904489dca12ab4005c358d74057e197266a2571c9feafc15a37bbe3c3b13f8"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2015-09-05T00:00:00.000Z","created_at":"2015-09-05T05:06:00.263Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":60655,"metadata":{},"number":"0.34.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 1.9.3","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"e704f43bc99114ca93d78cef7937d5a7aebde105613bf82ec86612a8efb44bc3"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2015-08-05T00:00:00.000Z","created_at":"2015-08-05T12:17:28.842Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":549818,"metadata":{},"number":"0.33.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 1.9.3","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"8910c66466538d01d0abbf21aa099b15901e4fc9c20394cf1ba9ef9f357b4a8c"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2015-06-24T00:00:00.000Z","created_at":"2015-06-24T06:17:18.900Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":564168,"metadata":{},"number":"0.32.1","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 1.9.3","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"fa2a1ea1a069436b991ce4d4c4c45682d1e9e83cc9e609dc181eb786e93641d5"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2015-06-06T00:00:00.000Z","created_at":"2015-06-06T09:02:54.433Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":209457,"metadata":{},"number":"0.32.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 1.9.3","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"091830914416431bd8217855ccf2e23a82865519e97dbe309501184529efe25e"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2015-05-05T00:00:00.000Z","created_at":"2015-05-05T17:06:13.868Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":458000,"metadata":{},"number":"0.31.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 1.9.3","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"f44b741edaa71337b8bce7a08e966630035a178034a4308de483e92cb02989e3"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2015-04-21T00:00:00.000Z","created_at":"2015-04-21T11:54:36.285Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":403414,"metadata":{},"number":"0.30.1","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 1.9.3","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"f6fbe1c3236e4472365a7c726c2bf4c0f066b241dbecd274a3b296cc19dfbe50"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2015-04-06T00:00:00.000Z","created_at":"2015-04-06T15:38:28.162Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":264151,"metadata":{},"number":"0.30.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 1.9.3","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"ac19d6befb873d5b16dd10f8000ed5b579708e3a883ba5140bc4c21ae5a93923"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2015-02-13T00:00:00.000Z","created_at":"2015-02-13T09:44:57.178Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":746127,"metadata":{},"number":"0.29.1","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 1.9.3","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"fdef20af47f52e8130d39665fb5770fdc7cb72d9c5a5ba56078e0fe2c325f50c"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2015-02-05T00:00:00.000Z","created_at":"2015-02-05T20:28:53.282Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":68184,"metadata":{},"number":"0.29.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 1.9.3","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"ed2b625e9884ff66a606f60d4b725f5bba747c05591c3dca0e426afd35f8135e"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2014-12-10T00:00:00.000Z","created_at":"2014-12-10T17:17:29.029Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":836598,"metadata":{},"number":"0.28.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 1.9.3","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"8db05151c0af7fbb334d0326c587f6515380122a17ed726d0936dc16147cc41e"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2014-11-08T00:00:00.000Z","created_at":"2014-11-08T11:26:10.904Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":538776,"metadata":{},"number":"0.27.1","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 1.9.3","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"e0f5190a96b82917bd2a15de027d252218830efdfee98bcca3cd3fd8a0e38d24"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2014-10-30T00:00:00.000Z","created_at":"2014-10-30T16:43:32.213Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":43707,"metadata":{},"number":"0.27.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 1.9.3","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"5729bcce45721e6c9a9139e44df8c26872ff97927fa0df382ed82d1b932593e4"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2014-09-18T00:00:00.000Z","created_at":"2014-09-18T12:10:31.079Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":686475,"metadata":{},"number":"0.26.1","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 1.9.3","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"c49f376e77808c8b07578c3d4cdfb6c73f1fd530941ba724303a354498d2cabb"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2014-09-03T00:00:00.000Z","created_at":"2014-09-03T12:35:37.840Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":104416,"metadata":{},"number":"0.26.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 1.9.3","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"773ed161beab33976b5760a2f5db27db3447726dd1389212c60668889f9e6091"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2014-08-15T00:00:00.000Z","created_at":"2014-08-15T11:19:31.470Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":84208,"metadata":{},"number":"0.25.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 1.9.3","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"8ec2267e73031a0056e3cda5332d81774c3102acb8afb0ec5131f28de26dd662"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2014-07-03T00:00:00.000Z","created_at":"2014-07-03T11:40:30.994Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":243728,"metadata":{},"number":"0.24.1","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 1.9.2","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"1c58201dcd9e9cb364a5865b71d29c1371379c3c6c6896d6aaef292d0468bc54"},{"authors":"Bozhidar + Batsov, Jonas Arvidsson, Yuji Nakayama","built_at":"2014-06-25T00:00:00.000Z","created_at":"2014-06-25T06:50:13.105Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":39988,"metadata":{},"number":"0.24.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 1.9.2","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"d27a16864c907fd7a1ea463c6cc4ccbda6671b12255e497fceaa080315f0c90d"},{"authors":"Bozhidar + Batsov","built_at":"2014-06-02T00:00:00.000Z","created_at":"2014-06-02T12:19:23.545Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":221393,"metadata":{},"number":"0.23.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 1.9.2","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"82de5ffe9e7acd0a4d5846fbad8805303cf7764955ccba375640ff9d6871a2f1"},{"authors":"Bozhidar + Batsov","built_at":"2014-05-20T00:00:00.000Z","created_at":"2014-05-20T14:36:31.896Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":39383,"metadata":{},"number":"0.22.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 1.9.2","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"888b5a1aba5991169ccb8ba81b9880ef1a190f431252c4174dbcd05c366dcb15"},{"authors":"Bozhidar + Batsov","built_at":"2014-04-24T00:00:00.000Z","created_at":"2014-04-24T09:41:19.853Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":143109,"metadata":{},"number":"0.21.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 1.9.2","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"93667e72149fd96897c5e410827dab5b260a95666549b7885d5b334b1eaadd1e"},{"authors":"Bozhidar + Batsov","built_at":"2014-04-05T00:00:00.000Z","created_at":"2014-04-05T12:16:27.467Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":86329,"metadata":{},"number":"0.20.1","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 1.9.2","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"42577cc435ac444c8f9fb8659c99721416b6046a3db499f6434464cd7cb09aa5"},{"authors":"Bozhidar + Batsov","built_at":"2014-04-02T00:00:00.000Z","created_at":"2014-04-02T14:03:48.747Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":18787,"metadata":{},"number":"0.20.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 1.9.2","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"1d9bf34022495497bafc86d30443ba5d9732553d3e966c26250956dc33431627"},{"authors":"Bozhidar + Batsov","built_at":"2014-03-17T00:00:00.000Z","created_at":"2014-03-17T15:57:49.176Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":159095,"metadata":{},"number":"0.19.1","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 1.9.2","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"271e424a97876d4c94ba07f8b65fc56356d19f1ae8b2c0ef4e767e970dafb352"},{"authors":"Bozhidar + Batsov","built_at":"2014-03-13T00:00:00.000Z","created_at":"2014-03-13T16:07:32.092Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":11167,"metadata":{},"number":"0.19.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 1.9.2","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"37f30df2bfabf7d2e66b6efcbbc6d646db9389c26e94bbc2fa86c1d8e62e563f"},{"authors":"Bozhidar + Batsov","built_at":"2014-02-02T00:00:00.000Z","created_at":"2014-02-02T10:11:48.216Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":193045,"metadata":{},"number":"0.18.1","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 1.9.2","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"a8e35b2f2b25cf5306866b821002f35b2c35d221598c1d376df8d497940ba253"},{"authors":"Bozhidar + Batsov","built_at":"2014-01-30T00:00:00.000Z","created_at":"2014-01-30T16:11:12.247Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":15554,"metadata":{},"number":"0.18.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 1.9.2","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"4b0e26be25eb9154938b665685aec57fc1b6956d825e7a05d17373bb4b729681"},{"authors":"Bozhidar + Batsov","built_at":"2014-01-23T00:00:00.000Z","created_at":"2014-01-23T15:44:06.875Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":29958,"metadata":{},"number":"0.17.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 1.9.2","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"529e1af94a20544424c6d7603ca62459acdfe10466503416a6eae5c0d3fb67e3"},{"authors":"Bozhidar + Batsov","built_at":"2013-12-25T00:00:00.000Z","created_at":"2013-12-25T18:01:42.589Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":58764,"metadata":{},"number":"0.16.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 1.9.2","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"c14fd2a1f918227e105be122e2500b62b94ef9ac454b2e01fc528bbd4da66aa0"},{"authors":"Bozhidar + Batsov","built_at":"2013-11-06T00:00:00.000Z","created_at":"2013-11-06T14:55:07.694Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":58847,"metadata":{},"number":"0.15.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 1.9.2","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"794a5f1839bac8bf728a44291598ba4040a90dd164878adb0d82c192dcd10279"},{"authors":"Bozhidar + Batsov","built_at":"2013-10-10T00:00:00.000Z","created_at":"2013-10-10T09:22:35.405Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":63013,"metadata":{},"number":"0.14.1","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 1.9.2","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"6e164c3d0a55e543012eb814e11b25c431d32a04393b6f86ebbad6d21a493f2c"},{"authors":"Bozhidar + Batsov","built_at":"2013-10-07T00:00:00.000Z","created_at":"2013-10-07T11:55:17.164Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":8084,"metadata":{},"number":"0.14.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 1.9.2","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"f5d16dd4e7e012b4414afc57691e6ae4902a96cd63f2a3462ac5ca5423a6c78e"},{"authors":"Bozhidar + Batsov","built_at":"2013-09-19T00:00:00.000Z","created_at":"2013-09-19T11:17:32.222Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":30944,"metadata":{},"number":"0.13.1","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 1.9.2","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"53a38480d2217ea4f0076485cc3eddb3baece8e69179e144177af38ab860e4f0"},{"authors":"Bozhidar + Batsov","built_at":"2013-09-13T00:00:00.000Z","created_at":"2013-09-13T14:12:11.377Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":10582,"metadata":{},"number":"0.13.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 1.9.2","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"693f24feec332394ff817e95c1d27000ab843802de02ee232c47711e497bddd2"},{"authors":"Bozhidar + Batsov","built_at":"2013-08-23T00:00:00.000Z","created_at":"2013-08-23T08:20:14.993Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":23339,"metadata":{},"number":"0.12.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 1.9.2","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"6935abc7d1cc704bf2c96646b1441270c3415ab8be1a7776686ff36ad3cd38bc"},{"authors":"Bozhidar + Batsov","built_at":"2013-08-12T00:00:00.000Z","created_at":"2013-08-12T08:41:14.761Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":16338,"metadata":{},"number":"0.11.1","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 1.9.2","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"8b8155e9b786c8e2bb8699875c4351e50b093b9dced4097d1be176b426306981"},{"authors":"Bozhidar + Batsov","built_at":"2013-08-09T00:00:00.000Z","created_at":"2013-08-09T14:44:40.288Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":5017,"metadata":{},"number":"0.11.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 1.9.2","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"edf8fcf8682ccdbf9ff65e4365fcba0f203777471f6afdb58f31a5327881636d"},{"authors":"Bozhidar + Batsov","built_at":"2013-07-17T00:00:00.000Z","created_at":"2013-07-17T18:38:32.352Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":15268,"metadata":{},"number":"0.10.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 1.9.2","prerelease":false,"licenses":["MIT"],"requirements":null,"sha":"5542215006b235d0ade4dda74b23d5d22d47cad02100a0e31bb097d80d7c8431"},{"authors":"Bozhidar + Batsov","built_at":"2013-07-05T00:00:00.000Z","created_at":"2013-07-05T15:13:09.528Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":10002,"metadata":{},"number":"0.9.1","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 1.9.2","prerelease":false,"licenses":["MIT"],"requirements":null,"sha":"cea12e9561a37ca065cd05c613735406fe8ff86d9015cc80cb02d8f9fc4c3131"},{"authors":"Bozhidar + Batsov","built_at":"2013-07-01T00:00:00.000Z","created_at":"2013-07-01T12:57:41.924Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":13669,"metadata":{},"number":"0.9.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 1.9.2","prerelease":false,"licenses":["MIT"],"requirements":null,"sha":"846a289554c4716fd4ff3f890a954ecce2895a9a6e913d4617f21dea5f522361"},{"authors":"Bozhidar + Batsov","built_at":"2013-04-17T00:00:00.000Z","created_at":"2013-06-18T12:41:29.955Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":9742,"metadata":{},"number":"0.8.3","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 1.9.2","prerelease":false,"licenses":["MIT"],"requirements":null,"sha":"30178ff21ee90e5e760c7ea40f448c46efab17c5ab9263e4f9df470d8ef008e3"},{"authors":"Bozhidar + Batsov","built_at":"2013-04-17T00:00:00.000Z","created_at":"2013-06-05T11:46:36.612Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":6441,"metadata":{},"number":"0.8.2","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 1.9.2","prerelease":false,"licenses":["MIT"],"requirements":null,"sha":"a853697357734fa301a3594bcc457b068be4056fe19cc420abe68531a771936c"},{"authors":"Bozhidar + Batsov","built_at":"2013-04-17T00:00:00.000Z","created_at":"2013-05-30T08:11:17.673Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":5358,"metadata":{},"number":"0.8.1","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 1.9.2","prerelease":false,"licenses":["MIT"],"requirements":null,"sha":"7d008670bf5a3aa378e78ea78024670bd83f38b188c82b1b64d1858ab5d6cf29"},{"authors":"Bozhidar + Batsov","built_at":"2013-04-17T00:00:00.000Z","created_at":"2013-05-28T09:06:01.240Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":5396,"metadata":{},"number":"0.8.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 1.9.2","prerelease":false,"licenses":["MIT"],"requirements":null,"sha":"2e7d746c66b0c8d3ab9d1ed9c3ccb827b8c4325cb8ea835d8becec870be2b70f"},{"authors":"Bozhidar + Batsov","built_at":"2013-04-17T00:00:00.000Z","created_at":"2013-05-13T07:00:10.330Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":10469,"metadata":{},"number":"0.7.2","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 1.9.2","prerelease":false,"licenses":["MIT"],"requirements":null,"sha":"36c0574cc728e120e593fcf84fa0a01a36aa948096cdccdbd9f3eb3f9a0d3011"},{"authors":"Bozhidar + Batsov","built_at":"2013-04-17T00:00:00.000Z","created_at":"2013-05-11T12:01:12.103Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":3989,"metadata":{},"number":"0.7.1","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 1.9.2","prerelease":false,"licenses":["MIT"],"requirements":null,"sha":"5a8fb4c2cb9270b9fc5c325d8bb7f556233e472a82d1b02ab8501041c7c35d16"},{"authors":"Bozhidar + Batsov","built_at":"2013-04-17T00:00:00.000Z","created_at":"2013-05-11T05:40:16.929Z","description":" Automatic + Ruby code style checking tool.\n Aims to enforce the community-driven Ruby + Style Guide.\n","downloads_count":3978,"metadata":{},"number":"0.7.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 1.9.2","prerelease":false,"licenses":["MIT"],"requirements":null,"sha":"3a9096d62151fb4dffebc3fd2f672b238172af945890156923ffc60ebe1eef7a"},{"authors":"Bozhidar + Batsov","built_at":"2013-04-17T00:00:00.000Z","created_at":"2013-04-28T12:44:09.481Z","description":"Automatic + Ruby code style checking tool. Aims to enforce the community-driven Ruby Style + Guide.","downloads_count":5381,"metadata":{},"number":"0.6.1","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 1.9.2","prerelease":false,"licenses":["MIT"],"requirements":null,"sha":"2cc2d86791a143c791ac99b566d99e920873d086e7b7a9daed69fe5546d4dad6"},{"authors":"Bozhidar + Batsov","built_at":"2013-04-17T00:00:00.000Z","created_at":"2013-04-23T11:23:04.364Z","description":"Automatic + Ruby code style checking tool. Aims to enforce the community-driven Ruby Style + Guide.","downloads_count":4914,"metadata":{},"number":"0.6.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 1.9.2","prerelease":false,"licenses":["MIT"],"requirements":null,"sha":"53702a3cd38c916ab3b57e2a84a5a1af68350dedd83e1b5f5a2dfd786612789a"},{"authors":"Bozhidar + Batsov","built_at":"2013-04-17T00:00:00.000Z","created_at":"2013-04-17T15:09:32.991Z","description":"Automatic + Ruby code style checking tool. Aims to enforce the community-driven Ruby Style + Guide.","downloads_count":10870,"metadata":{},"number":"0.5.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":null,"prerelease":false,"licenses":["MIT"],"requirements":null,"sha":"3ba57b2986af5eb7521aa4f5b4fbc2b6b9b5177b398eecee02bbb1411983d7a6"},{"authors":"Bozhidar + Batsov","built_at":"2013-04-15T00:00:00.000Z","created_at":"2013-04-15T13:21:26.422Z","description":"Automatic + Ruby code style checking tool. Aims to enforce the community-driven Ruby Style + Guide.","downloads_count":4802,"metadata":{},"number":"0.4.6","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":null,"prerelease":false,"licenses":["MIT"],"requirements":null,"sha":"714b451a1e3cdc7e11e407c06028e3cad0d77c74aa5f1ba623029d2d12c1eca7"},{"authors":"Bozhidar + Batsov","built_at":"2013-04-15T00:00:00.000Z","created_at":"2013-04-15T13:18:31.196Z","description":"Automatic + Ruby code style checking tool. Aims to enforce the community-driven Ruby Style + Guide.","downloads_count":3815,"metadata":{},"number":"0.4.5","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":null,"prerelease":false,"licenses":["MIT"],"requirements":null,"sha":"e95b05fa17998d7eb195244d8be36d836f28b60d23cd754349684309a5cd7999"},{"authors":"Bozhidar + Batsov","built_at":"2013-04-14T00:00:00.000Z","created_at":"2013-04-14T14:26:04.168Z","description":"Automatic + Ruby code style checking tool. Aims to enforce the community-driven Ruby Style + Guide.","downloads_count":3952,"metadata":{},"number":"0.4.4","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":null,"prerelease":false,"licenses":["MIT"],"requirements":null,"sha":"aeacff29f694b02465fbff9c089f3bb57c2f27d15734935764e14d3beadfce7b"},{"authors":"Bozhidar + Batsov","built_at":"2013-04-14T00:00:00.000Z","created_at":"2013-04-14T06:10:31.699Z","description":"Automatic + Ruby code style checking tool. Aims to enforce the community-driven Ruby Style + Guide.","downloads_count":3923,"metadata":{},"number":"0.4.3","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":null,"prerelease":false,"licenses":["MIT"],"requirements":null,"sha":"81c55e8dae6e379f92ea47898daf0e138ba9d84102225e26a82fa9d51f75e4ec"},{"authors":"Bozhidar + Batsov","built_at":"2013-04-13T00:00:00.000Z","created_at":"2013-04-13T19:20:43.281Z","description":"Automatic + Ruby code style checking tool. Aims to enforce the community-driven Ruby Style + Guide.","downloads_count":3873,"metadata":{},"number":"0.4.2","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":null,"prerelease":false,"licenses":["MIT"],"requirements":null,"sha":"a4086d3db38c363a0143a8d4ff7b00f03eb91ddc01081604b9812524d50d5991"},{"authors":"Bozhidar + Batsov","built_at":"2013-04-13T00:00:00.000Z","created_at":"2013-04-13T11:20:04.189Z","description":"Automatic + Ruby code style checking tool. Aims to enforce the community-driven Ruby Style + Guide.","downloads_count":3840,"metadata":{},"number":"0.4.1","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":null,"prerelease":false,"licenses":["MIT"],"requirements":null,"sha":"7173b29a39b02640c4ce5d9b285527978b5f256056b3f85c0f33c894ad476570"},{"authors":"Bozhidar + Batsov","built_at":"2013-04-11T00:00:00.000Z","created_at":"2013-04-11T09:45:55.167Z","description":"Automatic + Ruby code style checking tool. Aims to enforce the community-driven Ruby Style + Guide.","downloads_count":4394,"metadata":{},"number":"0.4.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":null,"prerelease":false,"licenses":["MIT"],"requirements":null,"sha":"ce4270b896e61800e286def6324c8d471cc13185cc9270ebe98b9390da0ba480"},{"authors":"Bozhidar + Batsov","built_at":"2013-04-06T00:00:00.000Z","created_at":"2013-04-06T17:24:51.540Z","description":"Automatic + Ruby code style checking tool. Aims to enforce the community-driven Ruby Style + Guide.","downloads_count":3907,"metadata":{},"number":"0.3.2","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":null,"prerelease":false,"licenses":["MIT"],"requirements":null,"sha":"d3c2ae557b75d78c05624c51fc2ce6e42e41102da11323f164f25581f82a5d4b"},{"authors":"Bozhidar + Batsov","built_at":"2013-02-28T00:00:00.000Z","created_at":"2013-02-28T20:45:07.073Z","description":"Automatic + Ruby code style checking tool. Aims to enforce the community-driven Ruby Style + Guide.","downloads_count":10405,"metadata":{},"number":"0.3.1","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":null,"prerelease":false,"licenses":["MIT"],"requirements":null,"sha":"10be88926012cf90ecb86e1289252fd0cd4fd7973e7c34854d03ced3f219f68e"},{"authors":"Bozhidar + Batsov","built_at":"2013-02-11T00:00:00.000Z","created_at":"2013-02-11T15:55:45.093Z","description":"Automatic + Ruby code style checking tool. Aims to enforce the community-driven Ruby Style + Guide.","downloads_count":4259,"metadata":{},"number":"0.3.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":null,"prerelease":false,"licenses":["MIT"],"requirements":null,"sha":"a54c7d286347e81af34c0381aa41bd5bfeba13f19d27fdd7b6fc9d81a18faf65"},{"authors":"Bozhidar + Batsov","built_at":"2013-01-12T00:00:00.000Z","created_at":"2013-01-12T15:56:50.441Z","description":"Automatic + Ruby code style checking tool. Aims to enforce the community-driven Ruby Style + Guide.","downloads_count":4309,"metadata":{},"number":"0.2.1","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":null,"prerelease":false,"licenses":["MIT"],"requirements":null,"sha":"7c6fb4f739334b6ab3312b8efe99dc8e8c4ec4965657146287d25f82f4e0459e"},{"authors":"Bozhidar + Batsov","built_at":"2013-01-02T00:00:00.000Z","created_at":"2013-01-02T19:42:27.672Z","description":"Automatic + Ruby code style checking tool. Aims to enforce the community-driven Ruby Style + Guide.","downloads_count":4015,"metadata":{},"number":"0.2.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":null,"prerelease":false,"licenses":["MIT"],"requirements":null,"sha":"b4f367fbe644fc6947c07172b7a0a022c726efb5efcfa3390dd1c69e6ee808cc"},{"authors":"Bozhidar + Batsov","built_at":"2012-12-20T00:00:00.000Z","created_at":"2012-12-20T09:56:20.974Z","description":"Automatic + Ruby code style checking tool. Aims to enforce the community-driven Ruby Style + Guide.","downloads_count":11260,"metadata":{},"number":"0.1.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":null,"prerelease":false,"licenses":["MIT"],"requirements":null,"sha":"68930de9ca68b1efbe8c39c7835b818bfed303c0b13fdd9682b5d2b0f170310c"},{"authors":"Bozhidar + Batsov","built_at":"2012-05-03T00:00:00.000Z","created_at":"2012-05-03T12:36:58.944Z","description":"Automatic + Ruby code style checking tool. Aims to enforce the community-driven Ruby Style + Guide.","downloads_count":4281,"metadata":{},"number":"0.0.0","summary":"Automatic + Ruby code style checking tool.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":null,"prerelease":false,"licenses":null,"requirements":null,"sha":"4d4405e8735e7cc4f310c02eb0085f394f5c235ff6777dfd4cc0e36ba1e5b94f"}]' + recorded_at: Wed, 09 Aug 2023 17:40:27 GMT +- request: + method: get + uri: https://rubygems.org/api/v1/versions/toml-rb.json + body: + encoding: US-ASCII + string: '' + headers: + User-Agent: + - dependabot-core/0.225.0 excon/0.100.0 ruby/3.1.4 (aarch64-linux) (+https://github.com/dependabot/dependabot-core) + response: + status: + code: 200 + message: OK + headers: + Connection: + - keep-alive + Content-Length: + - '2642' + Content-Type: + - application/json; charset=utf-8 + X-Frame-Options: + - SAMEORIGIN + X-Xss-Protection: + - '0' + X-Content-Type-Options: + - nosniff + X-Download-Options: + - noopen + X-Permitted-Cross-Domain-Policies: + - none + Referrer-Policy: + - strict-origin-when-cross-origin + Last-Modified: + - Fri, 15 Jul 2022 09:00:06 GMT + Cache-Control: + - max-age=60, public + Content-Encoding: + - '' + Content-Security-Policy: + - default-src 'self'; font-src 'self' https://fonts.gstatic.com; img-src 'self' + https://secure.gaug.es https://gravatar.com https://www.gravatar.com https://secure.gravatar.com + https://*.fastly-insights.com https://avatars.githubusercontent.com; object-src + 'none'; script-src 'self' https://secure.gaug.es https://www.fastly-insights.com + 'nonce-'; style-src 'self' https://fonts.googleapis.com; connect-src 'self' + https://s3-us-west-2.amazonaws.com/rubygems-dumps/ https://*.fastly-insights.com + https://fastly-insights.com https://api.github.com http://localhost:*; form-action + 'self' https://github.com/login/oauth/authorize; frame-ancestors 'self'; report-uri + https://csp-report.browser-intake-datadoghq.com/api/v2/logs?dd-api-key=pub852fa3e2312391fafa5640b60784e660&dd-evp-origin=content-security-policy&ddsource=csp-report&ddtags=service%3Arubygems.org%2Cversion%3A34907a6b36a81c276c9cc8a53a7534170f401308%2Cenv%3Aproduction%2Ctrace_id%3A1052983647522675522 + X-Request-Id: + - ec920637-1658-4b57-b527-2d6e317ffdaa + X-Runtime: + - '0.022905' + Strict-Transport-Security: + - max-age=31536000 + X-Backend: + - F_Rails 35.81.98.222:443 + Accept-Ranges: + - bytes + Date: + - Wed, 09 Aug 2023 17:40:29 GMT + Via: + - 1.1 varnish + Age: + - '700' + X-Served-By: + - cache-stl760032-STL + X-Cache: + - HIT + X-Cache-Hits: + - '1' + X-Timer: + - S1691602829.296721,VS0,VE1 + Vary: + - Accept-Encoding + Etag: + - '"7b4f06968d50f51f6a290ce7dacf9e78"' + Server: + - RubyGems.org + body: + encoding: UTF-8 + string: '[{"authors":"Emiliano Mancuso, Lucas Tolchinsky","built_at":"2022-07-15T00:00:00.000Z","created_at":"2022-07-15T09:00:06.684Z","description":"A + Toml parser using Citrus parsing library. ","downloads_count":6386413,"metadata":{},"number":"2.2.0","summary":"Toml + parser in ruby, for ruby.","platform":"ruby","rubygems_version":"\u003e= 0","ruby_version":"\u003e= + 2.3","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"a1e2c54ac3cc9d49861004f75f0648b3622ac03a76abe105358c31553227d9a6"},{"authors":"Emiliano + Mancuso, Lucas Tolchinsky","built_at":"2022-01-27T00:00:00.000Z","created_at":"2022-01-27T10:12:59.502Z","description":"A + Toml parser using Citrus parsing library. ","downloads_count":803589,"metadata":{},"number":"2.1.2","summary":"Toml + parser in ruby, for ruby.","platform":"ruby","rubygems_version":"\u003e= 0","ruby_version":"\u003e= + 2.3","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"ced902c8de778cf3556b0c335a383ce24af7b214b57140a2bace51cd2c5f30a2"},{"authors":"Emiliano + Mancuso, Lucas Tolchinsky","built_at":"2022-01-19T00:00:00.000Z","created_at":"2022-01-19T17:59:09.198Z","description":"A + Toml parser using Citrus parsing library. ","downloads_count":28019,"metadata":{},"number":"2.1.1","summary":"Toml + parser in ruby, for ruby.","platform":"ruby","rubygems_version":"\u003e= 0","ruby_version":"\u003e= + 2.3","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"915ef9d397a0b58413bcffc1a2303e5be1223a34d5debe2330ee4a4b30faca0c"},{"authors":"Emiliano + Mancuso, Lucas Tolchinsky","built_at":"2021-11-01T00:00:00.000Z","created_at":"2021-11-01T10:37:10.046Z","description":"A + Toml parser using Citrus parsing library. ","downloads_count":413438,"metadata":{},"number":"2.1.0","summary":"Toml + parser in ruby, for ruby.","platform":"ruby","rubygems_version":"\u003e= 0","ruby_version":"\u003e= + 2.3","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"595bc99fda33682dd7e9d18f632444a00bc33ed6960ea35fa2c9d5a7124339d7"},{"authors":"Emiliano + Mancuso, Lucas Tolchinsky","built_at":"2021-11-01T00:00:00.000Z","created_at":"2021-11-01T10:28:17.330Z","description":"A + Toml parser using Citrus parsing library. ","downloads_count":38061,"metadata":{},"number":"2.0.2","summary":"Toml + parser in ruby, for ruby.","platform":"ruby","rubygems_version":"\u003e= 0","ruby_version":"\u003e= + 2.3","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"f5715daa5d05ca424829fb54d9e049bf9b2f3687ab1c0261540c027e9945596e"},{"authors":"Emiliano + Mancuso, Lucas Tolchinsky","built_at":"2019-11-18T00:00:00.000Z","created_at":"2019-11-18T09:46:24.255Z","description":"A + Toml parser using Citrus parsing library. ","downloads_count":10361654,"metadata":{},"number":"2.0.1","summary":"Toml + parser in ruby, for ruby.","platform":"ruby","rubygems_version":"\u003e= 0","ruby_version":"\u003e= + 2.3","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"5016c6c77ac72bca5fe67c372722bdfdd4479a6fe1a1c4ff2a486e247849b274"},{"authors":"Emiliano + Mancuso, Lucas Tolchinsky","built_at":"2019-10-25T00:00:00.000Z","created_at":"2019-10-25T15:21:19.133Z","description":"A + Toml parser using Citrus parsing library. ","downloads_count":17629,"metadata":{},"number":"2.0.0","summary":"Toml + parser in ruby, for ruby.","platform":"ruby","rubygems_version":"\u003e= 0","ruby_version":"\u003e= + 2.3","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"967f44df7882d6494ec773f7126b26803704bc04a20c0cfb78d654220620aa43"},{"authors":"Emiliano + Mancuso, Lucas Tolchinsky","built_at":"2018-08-16T00:00:00.000Z","created_at":"2018-08-16T10:38:02.132Z","description":"A + Toml parser using Citrus parsing library. ","downloads_count":766709,"metadata":{},"number":"1.1.2","summary":"Toml + parser in ruby, for ruby.","platform":"ruby","rubygems_version":"\u003e= 0","ruby_version":"\u003e= + 1.9","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"e70993afeddfee6fc5f01cd168870603a2878011baa0d2c0fcb997724a96047d"},{"authors":"Emiliano + Mancuso, Lucas Tolchinsky","built_at":"2017-11-25T00:00:00.000Z","created_at":"2017-11-25T12:26:27.634Z","description":"A + Toml parser using Citrus parsing library. ","downloads_count":463723,"metadata":{},"number":"1.1.1","summary":"Toml + parser in ruby, for ruby.","platform":"ruby","rubygems_version":"\u003e= 0","ruby_version":"\u003e= + 0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"c43f188f68a8cefa790950e8eb02100164710479c6f6d189cb30098e6b212665"},{"authors":"Emiliano + Mancuso, Lucas Tolchinsky","built_at":"2017-10-01T00:00:00.000Z","created_at":"2017-10-02T02:15:21.004Z","description":"A + Toml parser using Citrus parsing library. ","downloads_count":248684,"metadata":{},"number":"1.1.0","summary":"Toml + parser in ruby, for ruby.","platform":"ruby","rubygems_version":"\u003e= 0","ruby_version":"\u003e= + 0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"4a674f4d815aabf20f2ed97f7271261f77aabe3b2380b1174fabb5875954c727"},{"authors":"Emiliano + Mancuso, Lucas Tolchinsky","built_at":"2017-06-14T00:00:00.000Z","created_at":"2017-06-14T14:54:10.984Z","description":"A + Toml parser using Citrus parsing library. ","downloads_count":10799838,"metadata":{},"number":"1.0.0","summary":"Toml + parser in ruby, for ruby.","platform":"ruby","rubygems_version":"\u003e= 0","ruby_version":"\u003e= + 0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"8d440e2c075ba681d73c0537938a04f7d280896d75f4352123dbe6c36af8e65f"},{"authors":"Emiliano + Mancuso, Lucas Tolchinsky","built_at":"2016-10-22T00:00:00.000Z","created_at":"2016-10-22T21:03:58.526Z","description":"A + TOML parser using Citrus parsing library. ","downloads_count":1474633,"metadata":{},"number":"0.3.15","summary":"TOML + parser in ruby, for ruby.","platform":"ruby","rubygems_version":"\u003e= 0","ruby_version":"\u003e= + 0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"2e937e6a2ffbe094e166cd662079bd8a4e99703cec9397e02a39c491c21c590f"},{"authors":"Emiliano + Mancuso, Lucas Tolchinsky","built_at":"2016-04-18T00:00:00.000Z","created_at":"2016-04-18T12:36:25.934Z","description":"A + TOML parser using Citrus parsing library. ","downloads_count":32329,"metadata":{},"number":"0.3.14","summary":"TOML + parser in ruby, for ruby.","platform":"ruby","rubygems_version":"\u003e= 0","ruby_version":"\u003e= + 0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"ea2824e01479b653e4648c4a66e1cf5620af8f87e67614b75346b269c23bd5dd"},{"authors":"Emiliano + Mancuso, Lucas Tolchinsky","built_at":"2016-04-02T00:00:00.000Z","created_at":"2016-04-02T21:31:13.069Z","description":"A + TOML parser using Citrus parsing library. ","downloads_count":4030,"metadata":{},"number":"0.3.13","summary":"TOML + parser in ruby, for ruby.","platform":"ruby","rubygems_version":"\u003e= 0","ruby_version":"\u003e= + 0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"a5442186b21abb3c9b20e08f1aef4ba469c302c13f0f9c3c3f7d39334d1b6c2b"},{"authors":"Emiliano + Mancuso, Lucas Tolchinsky","built_at":"2016-03-10T00:00:00.000Z","created_at":"2016-03-10T13:52:13.108Z","description":"A + TOML parser using Citrus parsing library. ","downloads_count":18859,"metadata":{},"number":"0.3.12","summary":"TOML + parser in ruby, for ruby.","platform":"ruby","rubygems_version":"\u003e= 0","ruby_version":"\u003e= + 0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"5c605fded9badfd6ee84ef25cda294084235b47312e3b0e5d38560a871ab84f2"},{"authors":"Emiliano + Mancuso, Lucas Tolchinsky","built_at":"2016-03-08T00:00:00.000Z","created_at":"2016-03-09T00:00:11.277Z","description":"A + TOML parser using Citrus parsing library. ","downloads_count":2319,"metadata":{},"number":"0.3.11","summary":"TOML + parser in ruby, for ruby.","platform":"ruby","rubygems_version":"\u003e= 0","ruby_version":"\u003e= + 0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"caf6b55302f4de162fa6a3aeb806792cf3017672ffafae7c7139e0a2632ab48d"},{"authors":"Emiliano + Mancuso, Lucas Tolchinsky","built_at":"2016-02-23T00:00:00.000Z","created_at":"2016-02-23T15:47:50.855Z","description":"A + TOML parser using Citrus parsing library. ","downloads_count":3490,"metadata":{},"number":"0.3.10","summary":"TOML + parser in ruby, for ruby.","platform":"ruby","rubygems_version":"\u003e= 0","ruby_version":"\u003e= + 0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"3db4a604458446d2372a0923f38e40eae7d158991c4bf59948a1dc162ec808cf"},{"authors":"Emiliano + Mancuso, Lucas Tolchinsky","built_at":"2015-12-28T00:00:00.000Z","created_at":"2015-12-28T15:06:15.159Z","description":"A + TOML parser using Citrus parsing library. ","downloads_count":6357,"metadata":{},"number":"0.3.9","summary":"TOML + parser in ruby, for ruby.","platform":"ruby","rubygems_version":"\u003e= 0","ruby_version":"\u003e= + 0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"799894ebffe778b4e7ee121a9aec890548581bb546bd10e7812c3a58886b8c8d"},{"authors":"Emiliano + Mancuso, Lucas Tolchinsky","built_at":"2015-06-12T00:00:00.000Z","created_at":"2015-06-12T12:34:31.349Z","description":"A + TOML parser using Citrus parsing library. ","downloads_count":8250,"metadata":{},"number":"0.3.8","summary":"TOML + parser in ruby, for ruby.","platform":"ruby","rubygems_version":"\u003e= 0","ruby_version":"\u003e= + 0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"5c2bf7d0b6545dacef67832aa6008abfb1f8d1faf15f2a93879bcab2dfac7cf3"},{"authors":"Emiliano + Mancuso, Lucas Tolchinsky","built_at":"2015-06-08T00:00:00.000Z","created_at":"2015-06-09T01:20:16.618Z","description":"A + TOML parser using Citrus parsing library. ","downloads_count":2051,"metadata":{},"number":"0.3.7","summary":"TOML + parser in ruby, for ruby.","platform":"ruby","rubygems_version":"\u003e= 0","ruby_version":"\u003e= + 0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"aa66498e2e5ddf60be95ddcdf93e847738d1b430f0d5efac4fde5154c6ae6624"},{"authors":"Emiliano + Mancuso, Lucas Tolchinsky","built_at":"2015-05-22T00:00:00.000Z","created_at":"2015-05-22T20:49:50.980Z","description":"A + TOML parser using Citrus parsing library. ","downloads_count":2376,"metadata":{},"number":"0.3.6","summary":"TOML + parser in ruby, for ruby.","platform":"ruby","rubygems_version":"\u003e= 0","ruby_version":"\u003e= + 0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"8d1accad4caa1f0ae44475a04cdad11240b66a38df974898c0db0a7e222bd929"},{"authors":"Emiliano + Mancuso, Lucas Tolchinsky","built_at":"2015-05-14T00:00:00.000Z","created_at":"2015-05-15T00:22:52.510Z","description":"A + TOML parser using Citrus parsing library. ","downloads_count":2174,"metadata":{},"number":"0.3.5","summary":"TOML + parser in ruby, for ruby.","platform":"ruby","rubygems_version":"\u003e= 0","ruby_version":"\u003e= + 0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"b8b137b7e741ce53865cf19898342584ef79e6dbc7d37e3ec40c77eebc52da72"},{"authors":"Emiliano + Mancuso, Lucas Tolchinsky","built_at":"2015-05-13T00:00:00.000Z","created_at":"2015-05-13T23:11:35.823Z","description":"A + TOML parser using Citrus parsing library. ","downloads_count":2053,"metadata":{},"number":"0.3.4","summary":"TOML + parser in ruby, for ruby.","platform":"ruby","rubygems_version":"\u003e= 0","ruby_version":"\u003e= + 0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"af8e3e5894ad875fb3a46cacef4ddece4eba24b6f03e97cb9af7efe4d5414834"},{"authors":"Emiliano + Mancuso, Lucas Tolchinsky","built_at":"2015-04-17T00:00:00.000Z","created_at":"2015-04-18T01:08:02.325Z","description":"A + TOML parser using Citrus parsing library. ","downloads_count":2931,"metadata":{},"number":"0.3.3","summary":"TOML + parser in ruby, for ruby.","platform":"ruby","rubygems_version":"\u003e= 0","ruby_version":"\u003e= + 0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"3652aaa990a837ddbe1cd0269ba9d9f1a57e03e7e929eb48877f41ab7f9df103"},{"authors":"Emiliano + Mancuso, Lucas Tolchinsky","built_at":"2015-02-19T00:00:00.000Z","created_at":"2015-02-19T14:04:46.429Z","description":"A + TOML parser using Citrus parsing library. ","downloads_count":4672,"metadata":{},"number":"0.3.0","summary":"TOML + parser in ruby, for ruby.","platform":"ruby","rubygems_version":"\u003e= 0","ruby_version":"\u003e= + 0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"39ab52eb9575a8d7c6e07250cf3fb2194a0dfab72a93233f4dea42e6012d76e8"},{"authors":"Emiliano + Mancuso, Lucas Tolchinsky","built_at":"2015-02-05T00:00:00.000Z","created_at":"2015-02-05T12:02:24.579Z","description":"A + TOML parser using Citrus parsing library. ","downloads_count":2357,"metadata":{},"number":"0.2.1","summary":"TOML + parser in ruby, for ruby.","platform":"ruby","rubygems_version":"\u003e= 0","ruby_version":"\u003e= + 0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"542f9a144200c00fad32ed6d9bd81bf2c4f0a42091b3b159c54ed514a33b5499"},{"authors":"Emiliano + Mancuso, Lucas Tolchinsky","built_at":"2015-01-31T00:00:00.000Z","created_at":"2015-01-31T13:21:32.125Z","description":"A + TOML parser using Citrus parsing library. ","downloads_count":2075,"metadata":{},"number":"0.2.0","summary":"TOML + parser in ruby, for ruby.","platform":"ruby","rubygems_version":"\u003e= 0","ruby_version":"\u003e= + 0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"4ce285781f13c04dcfff200925c893cdf59f421bb959882683c58482062c4d8b"},{"authors":"Emiliano + Mancuso, Lucas Tolchinsky","built_at":"2014-03-26T00:00:00.000Z","created_at":"2014-03-26T15:10:52.601Z","description":"A + TOML parser using Citrus parsing library. ","downloads_count":4854,"metadata":{},"number":"0.1.6","summary":"TOML + parser in ruby, for ruby.","platform":"ruby","rubygems_version":"\u003e= 0","ruby_version":"\u003e= + 0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"0541beef8203204a243603f42964958810d33629a6c38a3231936dc28afe6e2d"},{"authors":"Emiliano + Mancuso, Lucas Tolchinsky","built_at":"2014-03-16T00:00:00.000Z","created_at":"2014-03-16T16:57:58.913Z","description":"A + TOML parser using Citrus parsing library. ","downloads_count":2459,"metadata":{},"number":"0.1.5","summary":"TOML + parser in ruby, for ruby.","platform":"ruby","rubygems_version":"\u003e= 0","ruby_version":null,"prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"f8df352a62984084c26764adfb0a4a048e8bfa4617ed90edf57063ac65ae05a1"},{"authors":"Emiliano + Mancuso, Lucas Tolchinsky","built_at":"2013-10-15T00:00:00.000Z","created_at":"2013-10-15T14:08:12.587Z","description":"A + TOML parser using Citrus parsing library. ","downloads_count":5769,"metadata":{},"number":"0.1.4","summary":"TOML + parser in ruby, for ruby.","platform":"ruby","rubygems_version":"\u003e= 0","ruby_version":null,"prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"f4812e0672c7beacb291d4a13b08f0d6ce8c5f392453145896a92b626356f737"},{"authors":"Emiliano + Mancuso, Lucas Tolchinsky","built_at":"2013-05-07T00:00:00.000Z","created_at":"2013-05-07T03:49:35.472Z","description":"A + TOML parser using Citrus parsing library. Formerly known as ''toml_parser-ruby''. + ","downloads_count":3236,"metadata":{},"number":"0.1.3","summary":"TOML parser + in ruby, for ruby.","platform":"ruby","rubygems_version":"\u003e= 0","ruby_version":null,"prerelease":false,"licenses":["MIT"],"requirements":null,"sha":"04f0a7a1c46ecde6c89bf4bb1f9556bf4336d0fc850333836837b513fa2cae29"},{"authors":"Emiliano + Mancuso, Lucas Tolchinsky","built_at":"2013-04-12T00:00:00.000Z","created_at":"2013-04-12T20:23:35.014Z","description":"A + TOML parser using Citrus parsing library. Formerly known as ''toml_parser-ruby''. + ","downloads_count":2550,"metadata":{},"number":"0.1.2","summary":"TOML parser + in ruby, for ruby.","platform":"ruby","rubygems_version":"\u003e= 0","ruby_version":null,"prerelease":false,"licenses":["MIT"],"requirements":null,"sha":"509881e2e820c77145f1258669f93b8eea9e5d0dfd4cd1ce3d806077732c386a"},{"authors":"Emiliano + Mancuso, Lucas Tolchinsky","built_at":"2013-04-03T00:00:00.000Z","created_at":"2013-04-03T14:37:25.812Z","description":"A + TOML parser using Citrus parsing library. Formerly known as ''toml_parser-ruby''. + ","downloads_count":2487,"metadata":{},"number":"0.1.0","summary":"TOML parser + in ruby, for ruby.","platform":"ruby","rubygems_version":"\u003e= 0","ruby_version":null,"prerelease":false,"licenses":["MIT"],"requirements":null,"sha":"2bbf858d9f55251df8522671c54972d7b6a3a43e407cd6baa3f7d0a5a5862b2a"}]' + recorded_at: Wed, 09 Aug 2023 17:40:29 GMT +- request: + method: get + uri: https://rubygems.org/api/v1/versions/rack.json + body: + encoding: US-ASCII + string: '' + headers: + User-Agent: + - dependabot-core/0.225.0 excon/0.100.0 ruby/3.1.4 (aarch64-linux) (+https://github.com/dependabot/dependabot-core) + response: + status: + code: 200 + message: OK + headers: + Connection: + - keep-alive + Content-Length: + - '9209' + Content-Type: + - application/json; charset=utf-8 + X-Frame-Options: + - SAMEORIGIN + X-Xss-Protection: + - '0' + X-Content-Type-Options: + - nosniff + X-Download-Options: + - noopen + X-Permitted-Cross-Domain-Policies: + - none + Referrer-Policy: + - strict-origin-when-cross-origin + Last-Modified: + - Mon, 31 Jul 2023 02:43:44 GMT + Cache-Control: + - max-age=60, public + Content-Encoding: + - '' + Content-Security-Policy: + - default-src 'self'; font-src 'self' https://fonts.gstatic.com; img-src 'self' + https://secure.gaug.es https://gravatar.com https://www.gravatar.com https://secure.gravatar.com + https://*.fastly-insights.com https://avatars.githubusercontent.com; object-src + 'none'; script-src 'self' https://secure.gaug.es https://www.fastly-insights.com + 'nonce-'; style-src 'self' https://fonts.googleapis.com; connect-src 'self' + https://s3-us-west-2.amazonaws.com/rubygems-dumps/ https://*.fastly-insights.com + https://fastly-insights.com https://api.github.com http://localhost:*; form-action + 'self' https://github.com/login/oauth/authorize; frame-ancestors 'self'; report-uri + https://csp-report.browser-intake-datadoghq.com/api/v2/logs?dd-api-key=pub852fa3e2312391fafa5640b60784e660&dd-evp-origin=content-security-policy&ddsource=csp-report&ddtags=service%3Arubygems.org%2Cversion%3A34907a6b36a81c276c9cc8a53a7534170f401308%2Cenv%3Aproduction%2Ctrace_id%3A699312993194980926 + X-Request-Id: + - 000d3dad-d218-444d-82fc-140918fadae8 + X-Runtime: + - '0.052328' + Strict-Transport-Security: + - max-age=31536000 + X-Backend: + - F_Rails 35.164.180.222:443 + Accept-Ranges: + - bytes + Date: + - Wed, 09 Aug 2023 17:40:29 GMT + Via: + - 1.1 varnish + Age: + - '701' + X-Served-By: + - cache-stl760073-STL + X-Cache: + - HIT + X-Cache-Hits: + - '1' + X-Timer: + - S1691602830.614498,VS0,VE1 + Vary: + - Accept-Encoding + Etag: + - '"06d8052ca76f90cd682e9a3c3002cb6a"' + Server: + - RubyGems.org + body: + encoding: UTF-8 + string: '[{"authors":"Leah Neukirchen","built_at":"2023-06-14T00:00:00.000Z","created_at":"2023-06-14T02:01:53.401Z","description":"Rack + provides a minimal, modular and adaptable interface for developing\nweb applications + in Ruby. By wrapping HTTP requests and responses in\nthe simplest way possible, + it unifies and distills the API for web\nservers, web frameworks, and software + in between (the so-called\nmiddleware) into a single method call.\n","downloads_count":2057123,"metadata":{"changelog_uri":"https://github.com/rack/rack/blob/main/CHANGELOG.md","bug_tracker_uri":"https://github.com/rack/rack/issues","source_code_uri":"https://github.com/rack/rack","documentation_uri":"https://rubydoc.info/github/rack/rack"},"number":"3.0.8","summary":"A + modular Ruby webserver interface.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.4.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"9c2c912fb7bb367ddeea98193fc51f2aa526733066d0846911aaddb13a457248"},{"authors":"Leah + Neukirchen","built_at":"2023-03-16T00:00:00.000Z","created_at":"2023-03-16T02:22:59.785Z","description":"Rack + provides a minimal, modular and adaptable interface for developing\nweb applications + in Ruby. By wrapping HTTP requests and responses in\nthe simplest way possible, + it unifies and distills the API for web\nservers, web frameworks, and software + in between (the so-called\nmiddleware) into a single method call.\n","downloads_count":3789411,"metadata":{"changelog_uri":"https://github.com/rack/rack/blob/main/CHANGELOG.md","bug_tracker_uri":"https://github.com/rack/rack/issues","source_code_uri":"https://github.com/rack/rack","documentation_uri":"https://rubydoc.info/github/rack/rack"},"number":"3.0.7","summary":"A + modular Ruby webserver interface.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.4.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"4383a019926cfd250c3027f8cc7064f6859e478871b4e09b9cf967800947e7ce"},{"authors":"Leah + Neukirchen","built_at":"2023-03-13T00:00:00.000Z","created_at":"2023-03-13T18:10:08.055Z","description":"Rack + provides a minimal, modular and adaptable interface for developing\nweb applications + in Ruby. By wrapping HTTP requests and responses in\nthe simplest way possible, + it unifies and distills the API for web\nservers, web frameworks, and software + in between (the so-called\nmiddleware) into a single method call.\n","downloads_count":274579,"metadata":{"changelog_uri":"https://github.com/rack/rack/blob/main/CHANGELOG.md","bug_tracker_uri":"https://github.com/rack/rack/issues","source_code_uri":"https://github.com/rack/rack","documentation_uri":"https://rubydoc.info/github/rack/rack"},"number":"3.0.6.1","summary":"A + modular Ruby webserver interface.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.4.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"a3f89e07502bda2f4c866a2fe37f416458c9e1defadc05cd6d8e3991ca63f960"},{"authors":"Leah + Neukirchen","built_at":"2023-03-13T00:00:00.000Z","created_at":"2023-03-13T06:00:02.662Z","description":"Rack + provides a minimal, modular and adaptable interface for developing\nweb applications + in Ruby. By wrapping HTTP requests and responses in\nthe simplest way possible, + it unifies and distills the API for web\nservers, web frameworks, and software + in between (the so-called\nmiddleware) into a single method call.\n","downloads_count":37345,"metadata":{"changelog_uri":"https://github.com/rack/rack/blob/main/CHANGELOG.md","bug_tracker_uri":"https://github.com/rack/rack/issues","source_code_uri":"https://github.com/rack/rack","documentation_uri":"https://rubydoc.info/github/rack/rack"},"number":"3.0.6","summary":"A + modular Ruby webserver interface.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.4.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"431f49518ddcd70913767aef2327830388eff1de94b3c5be40044af297784d20"},{"authors":"Leah + Neukirchen","built_at":"2023-03-12T00:00:00.000Z","created_at":"2023-03-12T06:28:17.816Z","description":"Rack + provides a minimal, modular and adaptable interface for developing\nweb applications + in Ruby. By wrapping HTTP requests and responses in\nthe simplest way possible, + it unifies and distills the API for web\nservers, web frameworks, and software + in between (the so-called\nmiddleware) into a single method call.\n","downloads_count":25709,"metadata":{"changelog_uri":"https://github.com/rack/rack/blob/main/CHANGELOG.md","bug_tracker_uri":"https://github.com/rack/rack/issues","source_code_uri":"https://github.com/rack/rack","documentation_uri":"https://rubydoc.info/github/rack/rack"},"number":"3.0.5","summary":"A + modular Ruby webserver interface.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.4.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"fb590ecd5ba8a047b18fc991c5235d1501e2dc1be2976e6dac14a63599847adc"},{"authors":"Leah + Neukirchen","built_at":"2023-03-02T00:00:00.000Z","created_at":"2023-03-02T22:57:31.330Z","description":"Rack + provides a minimal, modular and adaptable interface for developing\nweb applications + in Ruby. By wrapping HTTP requests and responses in\nthe simplest way possible, + it unifies and distills the API for web\nservers, web frameworks, and software + in between (the so-called\nmiddleware) into a single method call.\n","downloads_count":449621,"metadata":{"changelog_uri":"https://github.com/rack/rack/blob/main/CHANGELOG.md","bug_tracker_uri":"https://github.com/rack/rack/issues","source_code_uri":"https://github.com/rack/rack","documentation_uri":"https://rubydoc.info/github/rack/rack"},"number":"3.0.4.2","summary":"A + modular Ruby webserver interface.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.4.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"f5e3f987030d83c8e9477e2002410531943f441df6b8224113039eb3f91fdbb4"},{"authors":"Leah + Neukirchen","built_at":"2023-01-17T00:00:00.000Z","created_at":"2023-01-17T20:48:39.596Z","description":"Rack + provides a minimal, modular and adaptable interface for developing\nweb applications + in Ruby. By wrapping HTTP requests and responses in\nthe simplest way possible, + it unifies and distills the API for web\nservers, web frameworks, and software + in between (the so-called\nmiddleware) into a single method call.\n","downloads_count":1826800,"metadata":{"changelog_uri":"https://github.com/rack/rack/blob/main/CHANGELOG.md","bug_tracker_uri":"https://github.com/rack/rack/issues","source_code_uri":"https://github.com/rack/rack","documentation_uri":"https://rubydoc.info/github/rack/rack"},"number":"3.0.4.1","summary":"A + modular Ruby webserver interface.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.4.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"6fe0042b786617e966ebc082f76dba624f5167f70acb741209805b216e0d07d7"},{"authors":"Leah + Neukirchen","built_at":"2023-01-16T00:00:00.000Z","created_at":"2023-01-16T22:41:09.758Z","description":"Rack + provides a minimal, modular and adaptable interface for developing\nweb applications + in Ruby. By wrapping HTTP requests and responses in\nthe simplest way possible, + it unifies and distills the API for web\nservers, web frameworks, and software + in between (the so-called\nmiddleware) into a single method call.\n","downloads_count":42264,"metadata":{"changelog_uri":"https://github.com/rack/rack/blob/main/CHANGELOG.md","bug_tracker_uri":"https://github.com/rack/rack/issues","source_code_uri":"https://github.com/rack/rack","documentation_uri":"https://rubydoc.info/github/rack/rack"},"number":"3.0.4","summary":"A + modular Ruby webserver interface.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.4.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"93008e4e29af4ac220ec19ed814f288f0cc27e14b1a4b27216e6e4b7e1e73cf6"},{"authors":"Leah + Neukirchen","built_at":"2022-12-26T00:00:00.000Z","created_at":"2022-12-26T20:20:10.238Z","description":"Rack + provides a minimal, modular and adaptable interface for developing\nweb applications + in Ruby. By wrapping HTTP requests and responses in\nthe simplest way possible, + it unifies and distills the API for web\nservers, web frameworks, and software + in between (the so-called\nmiddleware) into a single method call.\n","downloads_count":687494,"metadata":{"changelog_uri":"https://github.com/rack/rack/blob/main/CHANGELOG.md","bug_tracker_uri":"https://github.com/rack/rack/issues","source_code_uri":"https://github.com/rack/rack","documentation_uri":"https://rubydoc.info/github/rack/rack"},"number":"3.0.3","summary":"A + modular Ruby webserver interface.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.4.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"3a3b430e04eb9c5eb1e93502ce80e1c534eb20586eca8d2fbfb1b99960aad300"},{"authors":"Leah + Neukirchen","built_at":"2022-12-05T00:00:00.000Z","created_at":"2022-12-05T05:13:22.496Z","description":"Rack + provides a minimal, modular and adaptable interface for developing\nweb applications + in Ruby. By wrapping HTTP requests and responses in\nthe simplest way possible, + it unifies and distills the API for web\nservers, web frameworks, and software + in between (the so-called\nmiddleware) into a single method call.\n","downloads_count":804455,"metadata":{"changelog_uri":"https://github.com/rack/rack/blob/main/CHANGELOG.md","bug_tracker_uri":"https://github.com/rack/rack/issues","source_code_uri":"https://github.com/rack/rack","documentation_uri":"https://rubydoc.info/github/rack/rack"},"number":"3.0.2","summary":"A + modular Ruby webserver interface.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.4.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"7313e1a28e8301e08f86de3ee0c82d9e3e1602586683007fdd018abe5e818420"},{"authors":"Leah + Neukirchen","built_at":"2022-11-18T00:00:00.000Z","created_at":"2022-11-18T20:59:51.381Z","description":"Rack + provides a minimal, modular and adaptable interface for developing\nweb applications + in Ruby. By wrapping HTTP requests and responses in\nthe simplest way possible, + it unifies and distills the API for web\nservers, web frameworks, and software + in between (the so-called\nmiddleware) into a single method call.\n","downloads_count":589564,"metadata":{"changelog_uri":"https://github.com/rack/rack/blob/main/CHANGELOG.md","bug_tracker_uri":"https://github.com/rack/rack/issues","source_code_uri":"https://github.com/rack/rack","documentation_uri":"https://rubydoc.info/github/rack/rack"},"number":"3.0.1","summary":"A + modular Ruby webserver interface.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.4.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"0fe3e8d68b2a4684bcdff0b1fecb0a5e201b7ea3f6fac868fa18d596035eff3c"},{"authors":"Leah + Neukirchen","built_at":"2022-09-06T00:00:00.000Z","created_at":"2022-09-06T16:28:59.486Z","description":"Rack + provides a minimal, modular and adaptable interface for developing\nweb applications + in Ruby. By wrapping HTTP requests and responses in\nthe simplest way possible, + it unifies and distills the API for web\nservers, web frameworks, and software + in between (the so-called\nmiddleware) into a single method call.\n","downloads_count":2917585,"metadata":{"changelog_uri":"https://github.com/rack/rack/blob/main/CHANGELOG.md","bug_tracker_uri":"https://github.com/rack/rack/issues","source_code_uri":"https://github.com/rack/rack","documentation_uri":"https://rubydoc.info/github/rack/rack"},"number":"3.0.0","summary":"A + modular Ruby webserver interface.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.4.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"197adbbe5d585dca1909fe6c544f369919d795d54fc76f86b6ce458008f6e29c"},{"authors":"Leah + Neukirchen","built_at":"2022-09-04T00:00:00.000Z","created_at":"2022-09-04T23:52:01.005Z","description":"Rack + provides a minimal, modular and adaptable interface for developing\nweb applications + in Ruby. By wrapping HTTP requests and responses in\nthe simplest way possible, + it unifies and distills the API for web\nservers, web frameworks, and software + in between (the so-called\nmiddleware) into a single method call.\n","downloads_count":903,"metadata":{"changelog_uri":"https://github.com/rack/rack/blob/main/CHANGELOG.md","bug_tracker_uri":"https://github.com/rack/rack/issues","source_code_uri":"https://github.com/rack/rack","documentation_uri":"https://rubydoc.info/github/rack/rack"},"number":"3.0.0.rc1","summary":"A + modular Ruby webserver interface.","platform":"ruby","rubygems_version":"\u003e + 1.3.1","ruby_version":"\u003e= 2.4.0","prerelease":true,"licenses":["MIT"],"requirements":[],"sha":"9ded32f01d520c16076c72649873229fcd83a18e79d9ebd696fc22d34e484088"},{"authors":"Leah + Neukirchen","built_at":"2022-08-08T00:00:00.000Z","created_at":"2022-08-08T20:34:51.637Z","description":"Rack + provides a minimal, modular and adaptable interface for developing\nweb applications + in Ruby. By wrapping HTTP requests and responses in\nthe simplest way possible, + it unifies and distills the API for web\nservers, web frameworks, and software + in between (the so-called\nmiddleware) into a single method call.\n","downloads_count":1962,"metadata":{"changelog_uri":"https://github.com/rack/rack/blob/main/CHANGELOG.md","bug_tracker_uri":"https://github.com/rack/rack/issues","source_code_uri":"https://github.com/rack/rack","documentation_uri":"https://rubydoc.info/github/rack/rack"},"number":"3.0.0.beta1","summary":"A + modular Ruby webserver interface.","platform":"ruby","rubygems_version":"\u003e + 1.3.1","ruby_version":"\u003e= 2.4.0","prerelease":true,"licenses":["MIT"],"requirements":[],"sha":"293cd882966e417d38329ff96b62f3ce1be14cc534cdec22a9150e93ec803cc9"},{"authors":"Leah + Neukirchen","built_at":"2023-07-31T00:00:00.000Z","created_at":"2023-07-31T02:43:44.620Z","description":"Rack + provides a minimal, modular and adaptable interface for developing\nweb applications + in Ruby. By wrapping HTTP requests and responses in\nthe simplest way possible, + it unifies and distills the API for web\nservers, web frameworks, and software + in between (the so-called\nmiddleware) into a single method call.\n","downloads_count":754768,"metadata":{"changelog_uri":"https://github.com/rack/rack/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rack/rack/issues","source_code_uri":"https://github.com/rack/rack","documentation_uri":"https://rubydoc.info/github/rack/rack"},"number":"2.2.8","summary":"A + modular Ruby webserver interface.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.3.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"7b83a1f1304a8f5554c67bc83632d29ecd2ed1daeb88d276b7898533fde22d97"},{"authors":"Leah + Neukirchen","built_at":"2023-04-24T00:00:00.000Z","created_at":"2023-04-24T23:22:24.296Z","description":"Rack + provides a minimal, modular and adaptable interface for developing\nweb applications + in Ruby. By wrapping HTTP requests and responses in\nthe simplest way possible, + it unifies and distills the API for web\nservers, web frameworks, and software + in between (the so-called\nmiddleware) into a single method call.\n","downloads_count":12588819,"metadata":{"changelog_uri":"https://github.com/rack/rack/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rack/rack/issues","source_code_uri":"https://github.com/rack/rack","documentation_uri":"https://rubydoc.info/github/rack/rack"},"number":"2.2.7","summary":"A + modular Ruby webserver interface.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.3.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"b3377e8b2227b8ffa6b617ef8649ffb5e265e46ca8fa1f31244c809fe609829b"},{"authors":"Leah + Neukirchen","built_at":"2023-03-13T00:00:00.000Z","created_at":"2023-03-13T18:10:14.661Z","description":"Rack + provides a minimal, modular and adaptable interface for developing\nweb applications + in Ruby. By wrapping HTTP requests and responses in\nthe simplest way possible, + it unifies and distills the API for web\nservers, web frameworks, and software + in between (the so-called\nmiddleware) into a single method call.\n","downloads_count":12426721,"metadata":{"changelog_uri":"https://github.com/rack/rack/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rack/rack/issues","source_code_uri":"https://github.com/rack/rack","documentation_uri":"https://rubydoc.info/github/rack/rack"},"number":"2.2.6.4","summary":"A + modular Ruby webserver interface.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.3.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"d3d92be402b5881058caccc0975e6d67a1e0ba929d1d144a43daf689169bfce1"},{"authors":"Leah + Neukirchen","built_at":"2023-03-02T00:00:00.000Z","created_at":"2023-03-02T22:57:25.059Z","description":"Rack + provides a minimal, modular and adaptable interface for developing\nweb applications + in Ruby. By wrapping HTTP requests and responses in\nthe simplest way possible, + it unifies and distills the API for web\nservers, web frameworks, and software + in between (the so-called\nmiddleware) into a single method call.\n","downloads_count":3306045,"metadata":{"changelog_uri":"https://github.com/rack/rack/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rack/rack/issues","source_code_uri":"https://github.com/rack/rack","documentation_uri":"https://rubydoc.info/github/rack/rack"},"number":"2.2.6.3","summary":"A + modular Ruby webserver interface.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.3.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"421648340bfe81e20fc766304129e08c92d7a661a856466ec2f1c224784a8f9f"},{"authors":"Leah + Neukirchen","built_at":"2023-01-17T00:00:00.000Z","created_at":"2023-01-17T21:22:23.931Z","description":"Rack + provides a minimal, modular and adaptable interface for developing\nweb applications + in Ruby. By wrapping HTTP requests and responses in\nthe simplest way possible, + it unifies and distills the API for web\nservers, web frameworks, and software + in between (the so-called\nmiddleware) into a single method call.\n","downloads_count":11613635,"metadata":{"changelog_uri":"https://github.com/rack/rack/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rack/rack/issues","source_code_uri":"https://github.com/rack/rack","documentation_uri":"https://rubydoc.info/github/rack/rack"},"number":"2.2.6.2","summary":"A + modular Ruby webserver interface.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.3.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"4be320c0fdea6651f0247dbd4182c1bd8acc06606a6b8935a19ad6a504347763"},{"authors":"Leah + Neukirchen","built_at":"2023-01-17T00:00:00.000Z","created_at":"2023-01-17T20:48:33.530Z","description":"Rack + provides a minimal, modular and adaptable interface for developing\nweb applications + in Ruby. By wrapping HTTP requests and responses in\nthe simplest way possible, + it unifies and distills the API for web\nservers, web frameworks, and software + in between (the so-called\nmiddleware) into a single method call.\n","downloads_count":18538,"metadata":{"changelog_uri":"https://github.com/rack/rack/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rack/rack/issues","source_code_uri":"https://github.com/rack/rack","documentation_uri":"https://rubydoc.info/github/rack/rack"},"number":"2.2.6.1","summary":"A + modular Ruby webserver interface.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.3.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"252ebd625fa53bbc5aa5aa43cb658d3d92342850898b5f0592dc170d20b8ba88"},{"authors":"Leah + Neukirchen","built_at":"2023-01-16T00:00:00.000Z","created_at":"2023-01-16T21:05:52.483Z","description":"Rack + provides a minimal, modular and adaptable interface for developing\nweb applications + in Ruby. By wrapping HTTP requests and responses in\nthe simplest way possible, + it unifies and distills the API for web\nservers, web frameworks, and software + in between (the so-called\nmiddleware) into a single method call.\n","downloads_count":251379,"metadata":{"changelog_uri":"https://github.com/rack/rack/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rack/rack/issues","source_code_uri":"https://github.com/rack/rack","documentation_uri":"https://rubydoc.info/github/rack/rack"},"number":"2.2.6","summary":"A + modular Ruby webserver interface.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.3.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"d903a6529095f624bb7bd3b6b0e29a1aa0fdcd85d476033648d93e7a68760308"},{"authors":"Leah + Neukirchen","built_at":"2022-12-26T00:00:00.000Z","created_at":"2022-12-26T20:19:38.461Z","description":"Rack + provides a minimal, modular and adaptable interface for developing\nweb applications + in Ruby. By wrapping HTTP requests and responses in\nthe simplest way possible, + it unifies and distills the API for web\nservers, web frameworks, and software + in between (the so-called\nmiddleware) into a single method call.\n","downloads_count":2731754,"metadata":{"changelog_uri":"https://github.com/rack/rack/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rack/rack/issues","source_code_uri":"https://github.com/rack/rack","documentation_uri":"https://rubydoc.info/github/rack/rack"},"number":"2.2.5","summary":"A + modular Ruby webserver interface.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.3.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"724426d0d1dd60f35247024413af93f8e1071c7cfe2c012e59503e5bd7f4b293"},{"authors":"Leah + Neukirchen","built_at":"2022-06-30T00:00:00.000Z","created_at":"2022-06-30T22:22:23.466Z","description":"Rack + provides a minimal, modular and adaptable interface for developing\nweb applications + in Ruby. By wrapping HTTP requests and responses in\nthe simplest way possible, + it unifies and distills the API for web\nservers, web frameworks, and software + in between (the so-called\nmiddleware) into a single method call.\n","downloads_count":40843275,"metadata":{"changelog_uri":"https://github.com/rack/rack/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rack/rack/issues","source_code_uri":"https://github.com/rack/rack","documentation_uri":"https://rubydoc.info/github/rack/rack"},"number":"2.2.4","summary":"A + modular Ruby webserver interface.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.3.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"ea2232b638cbd919129c8c8ad8012ecaccc09f848152a7e705d2139d0137ac2b"},{"authors":"Leah + Neukirchen","built_at":"2022-05-27T00:00:00.000Z","created_at":"2022-05-27T15:31:55.752Z","description":"Rack + provides a minimal, modular and adaptable interface for developing\nweb applications + in Ruby. By wrapping HTTP requests and responses in\nthe simplest way possible, + it unifies and distills the API for web\nservers, web frameworks, and software + in between (the so-called\nmiddleware) into a single method call.\n","downloads_count":29927209,"metadata":{"changelog_uri":"https://github.com/rack/rack/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rack/rack/issues","source_code_uri":"https://github.com/rack/rack","documentation_uri":"https://rubydoc.info/github/rack/rack"},"number":"2.2.3.1","summary":"A + modular Ruby webserver interface.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.3.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"8c728da28f6d800c3839d226fdbce702c94eeb68e25e752b6c2f2be7c1d338ac"},{"authors":"Leah + Neukirchen","built_at":"2020-06-15T00:00:00.000Z","created_at":"2020-06-15T22:25:14.574Z","description":"Rack + provides a minimal, modular and adaptable interface for developing\nweb applications + in Ruby. By wrapping HTTP requests and responses in\nthe simplest way possible, + it unifies and distills the API for web\nservers, web frameworks, and software + in between (the so-called\nmiddleware) into a single method call.\n","downloads_count":170247890,"metadata":{"changelog_uri":"https://github.com/rack/rack/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rack/rack/issues","source_code_uri":"https://github.com/rack/rack","documentation_uri":"https://rubydoc.info/github/rack/rack"},"number":"2.2.3","summary":"A + modular Ruby webserver interface.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.3.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"2638e7eb6689a5725c7e16f30cc4aa4e31694dc3ca30d790952526781bd0bb44"},{"authors":"Leah + Neukirchen","built_at":"2020-02-10T00:00:00.000Z","created_at":"2020-02-10T22:25:17.510Z","description":"Rack + provides a minimal, modular and adaptable interface for developing\nweb applications + in Ruby. By wrapping HTTP requests and responses in\nthe simplest way possible, + it unifies and distills the API for web\nservers, web frameworks, and software + in between (the so-called\nmiddleware) into a single method call.\n","downloads_count":17033347,"metadata":{"changelog_uri":"https://github.com/rack/rack/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rack/rack/issues","source_code_uri":"https://github.com/rack/rack","documentation_uri":"https://rubydoc.info/github/rack/rack"},"number":"2.2.2","summary":"A + modular Ruby webserver interface.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.3.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"77f51f9a1409e388a7c002612311fc8cef06f70309eba90800dc6a8d884eb782"},{"authors":"Leah + Neukirchen","built_at":"2020-02-09T00:00:00.000Z","created_at":"2020-02-09T06:20:24.822Z","description":"Rack + provides a minimal, modular and adaptable interface for developing\nweb applications + in Ruby. By wrapping HTTP requests and responses in\nthe simplest way possible, + it unifies and distills the API for web\nservers, web frameworks, and software + in between (the so-called\nmiddleware) into a single method call.\n","downloads_count":194947,"metadata":{"changelog_uri":"https://github.com/rack/rack/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rack/rack/issues","source_code_uri":"https://github.com/rack/rack","documentation_uri":"https://rubydoc.info/github/rack/rack"},"number":"2.2.1","summary":"A + modular Ruby webserver interface.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.3.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"da7f8ccc5dcdc4a25a6fc7086e6969f32ded6d70ae3d79bb8fe6c30c4bd67fbc"},{"authors":"Leah + Neukirchen","built_at":"2020-02-08T00:00:00.000Z","created_at":"2020-02-08T18:26:43.205Z","description":"Rack + provides a minimal, modular and adaptable interface for developing\nweb applications + in Ruby. By wrapping HTTP requests and responses in\nthe simplest way possible, + it unifies and distills the API for web\nservers, web frameworks, and software + in between (the so-called\nmiddleware) into a single method call.\n","downloads_count":46498,"metadata":{"changelog_uri":"https://github.com/rack/rack/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rack/rack/issues","source_code_uri":"https://github.com/rack/rack","documentation_uri":"https://rubydoc.info/github/rack/rack"},"number":"2.2.0","summary":"A + modular Ruby webserver interface.","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.3.0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"740433e3a52f9862f508db646e7d324eb209db02572a633de01e406483c29cf3"},{"authors":"Leah + Neukirchen","built_at":"2023-03-02T00:00:00.000Z","created_at":"2023-03-02T22:57:19.576Z","description":"Rack + provides a minimal, modular and adaptable interface for developing\nweb applications + in Ruby. By wrapping HTTP requests and responses in\nthe simplest way possible, + it unifies and distills the API for web\nservers, web frameworks, and software + in between (the so-called\nmiddleware) into a single method call.\n\nAlso + see https://rack.github.io/.\n","downloads_count":46740,"metadata":{"homepage_uri":"https://rack.github.io","changelog_uri":"https://github.com/rack/rack/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rack/rack/issues","source_code_uri":"https://github.com/rack/rack","mailing_list_uri":"https://groups.google.com/forum/#!forum/rack-devel","documentation_uri":"https://rubydoc.info/github/rack/rack"},"number":"2.1.4.3","summary":"a + modular Ruby webserver interface","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.2.2","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"9b421416c3dd3ea788bcfe642ce9da7622cd5a7fd684fdc7262f5f6028f50f85"},{"authors":"Leah + Neukirchen","built_at":"2023-01-17T00:00:00.000Z","created_at":"2023-01-17T20:48:28.897Z","description":"Rack + provides a minimal, modular and adaptable interface for developing\nweb applications + in Ruby. By wrapping HTTP requests and responses in\nthe simplest way possible, + it unifies and distills the API for web\nservers, web frameworks, and software + in between (the so-called\nmiddleware) into a single method call.\n\nAlso + see https://rack.github.io/.\n","downloads_count":86727,"metadata":{"homepage_uri":"https://rack.github.io","changelog_uri":"https://github.com/rack/rack/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rack/rack/issues","source_code_uri":"https://github.com/rack/rack","mailing_list_uri":"https://groups.google.com/forum/#!forum/rack-devel","documentation_uri":"https://rubydoc.info/github/rack/rack"},"number":"2.1.4.2","summary":"a + modular Ruby webserver interface","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.2.2","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"42eff000e8df7e9ac284deb30b9140570592be565582d84768825e2354a9b77c"},{"authors":"Leah + Neukirchen","built_at":"2022-05-27T00:00:00.000Z","created_at":"2022-05-27T15:31:49.864Z","description":"Rack + provides a minimal, modular and adaptable interface for developing\nweb applications + in Ruby. By wrapping HTTP requests and responses in\nthe simplest way possible, + it unifies and distills the API for web\nservers, web frameworks, and software + in between (the so-called\nmiddleware) into a single method call.\n\nAlso + see https://rack.github.io/.\n","downloads_count":433014,"metadata":{"homepage_uri":"https://rack.github.io","changelog_uri":"https://github.com/rack/rack/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rack/rack/issues","source_code_uri":"https://github.com/rack/rack","mailing_list_uri":"https://groups.google.com/forum/#!forum/rack-devel","documentation_uri":"https://rubydoc.info/github/rack/rack"},"number":"2.1.4.1","summary":"a + modular Ruby webserver interface","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.2.2","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"af609439fca4ac98fb3d9a5f82800d37c2758ebe50c2bbeb4d4d1db568ebe47d"},{"authors":"Leah + Neukirchen","built_at":"2020-06-15T00:00:00.000Z","created_at":"2020-06-15T22:24:45.579Z","description":"Rack + provides a minimal, modular and adaptable interface for developing\nweb applications + in Ruby. By wrapping HTTP requests and responses in\nthe simplest way possible, + it unifies and distills the API for web\nservers, web frameworks, and software + in between (the so-called\nmiddleware) into a single method call.\n\nAlso + see https://rack.github.io/.\n","downloads_count":3094055,"metadata":{"homepage_uri":"https://rack.github.io","changelog_uri":"https://github.com/rack/rack/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rack/rack/issues","source_code_uri":"https://github.com/rack/rack","mailing_list_uri":"https://groups.google.com/forum/#!forum/rack-devel","documentation_uri":"https://rubydoc.info/github/rack/rack"},"number":"2.1.4","summary":"a + modular Ruby webserver interface","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.2.2","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"bfae1fd43aab62bb60b268329c860f214d2ffb15c4bca48931135a2dea52e2f4"},{"authors":"Leah + Neukirchen","built_at":"2020-05-12T00:00:00.000Z","created_at":"2020-05-12T21:44:50.346Z","description":"Rack + provides a minimal, modular and adaptable interface for developing\nweb applications + in Ruby. By wrapping HTTP requests and responses in\nthe simplest way possible, + it unifies and distills the API for web\nservers, web frameworks, and software + in between (the so-called\nmiddleware) into a single method call.\n\nAlso + see https://rack.github.io/.\n","downloads_count":137152,"metadata":{"homepage_uri":"https://rack.github.io","changelog_uri":"https://github.com/rack/rack/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rack/rack/issues","source_code_uri":"https://github.com/rack/rack","mailing_list_uri":"https://groups.google.com/forum/#!forum/rack-devel","documentation_uri":"https://rubydoc.info/github/rack/rack"},"number":"2.1.3","summary":"a + modular Ruby webserver interface","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.2.2","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"f8088454a5ad6974e5710cb7441c233773bb2871610aa802009c6e86c0f2f916"},{"authors":"Leah + Neukirchen","built_at":"2020-01-27T00:00:00.000Z","created_at":"2020-01-27T22:42:41.077Z","description":"Rack + provides a minimal, modular and adaptable interface for developing\nweb applications + in Ruby. By wrapping HTTP requests and responses in\nthe simplest way possible, + it unifies and distills the API for web\nservers, web frameworks, and software + in between (the so-called\nmiddleware) into a single method call.\n\nAlso + see https://rack.github.io/.\n","downloads_count":3342175,"metadata":{"homepage_uri":"https://rack.github.io","changelog_uri":"https://github.com/rack/rack/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rack/rack/issues","source_code_uri":"https://github.com/rack/rack","mailing_list_uri":"https://groups.google.com/forum/#!forum/rack-devel","documentation_uri":"https://rubydoc.info/github/rack/rack"},"number":"2.1.2","summary":"a + modular Ruby webserver interface","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.2.2","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"1c45c0dac286ae71afe8d74265ccfb39a2ba36950e44b8ebe4ae43237c060a13"},{"authors":"Leah + Neukirchen","built_at":"2020-01-11T00:00:00.000Z","created_at":"2020-01-11T22:18:36.652Z","description":"Rack + provides a minimal, modular and adaptable interface for developing\nweb applications + in Ruby. By wrapping HTTP requests and responses in\nthe simplest way possible, + it unifies and distills the API for web\nservers, web frameworks, and software + in between (the so-called\nmiddleware) into a single method call.\n\nAlso + see https://rack.github.io/.\n","downloads_count":1688804,"metadata":{"homepage_uri":"https://rack.github.io","changelog_uri":"https://github.com/rack/rack/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rack/rack/issues","source_code_uri":"https://github.com/rack/rack","mailing_list_uri":"https://groups.google.com/forum/#!forum/rack-devel","documentation_uri":"https://rubydoc.info/github/rack/rack"},"number":"2.1.1","summary":"a + modular Ruby webserver interface","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.2.2","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"dc6653775cc44febfc82132783e0a7d7284cf248d42c0c13bd77ecc327b79375"},{"authors":"Leah + Neukirchen","built_at":"2020-01-10T00:00:00.000Z","created_at":"2020-01-10T17:49:19.823Z","description":"Rack + provides a minimal, modular and adaptable interface for developing\nweb applications + in Ruby. By wrapping HTTP requests and responses in\nthe simplest way possible, + it unifies and distills the API for web\nservers, web frameworks, and software + in between (the so-called\nmiddleware) into a single method call.\n\nAlso + see https://rack.github.io/.\n","downloads_count":93460,"metadata":{"homepage_uri":"https://rack.github.io","changelog_uri":"https://github.com/rack/rack/blob/master/CHANGELOG.md","bug_tracker_uri":"https://github.com/rack/rack/issues","source_code_uri":"https://github.com/rack/rack","mailing_list_uri":"https://groups.google.com/forum/#!forum/rack-devel","documentation_uri":"https://rubydoc.info/github/rack/rack"},"number":"2.1.0","summary":"a + modular Ruby webserver interface","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.2.2","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"9d0a52989ce13125be491dd30e6b6c23c539ecf0cc404b2cb5d862dddbcb3e68"},{"authors":"Leah + Neukirchen","built_at":"2023-03-02T00:00:00.000Z","created_at":"2023-03-02T22:57:12.585Z","description":"Rack + provides a minimal, modular and adaptable interface for developing\nweb applications + in Ruby. By wrapping HTTP requests and responses in\nthe simplest way possible, + it unifies and distills the API for web\nservers, web frameworks, and software + in between (the so-called\nmiddleware) into a single method call.\n\nAlso + see https://rack.github.io/.\n","downloads_count":89877,"metadata":{},"number":"2.0.9.3","summary":"a + modular Ruby webserver interface","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.2.2","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"3c38013104cf9f83d645bd7ad9c036e96d0e8ee4dfc6891cde4480274bfbbd79"},{"authors":"Leah + Neukirchen","built_at":"2023-01-17T00:00:00.000Z","created_at":"2023-01-17T20:48:23.635Z","description":"Rack + provides a minimal, modular and adaptable interface for developing\nweb applications + in Ruby. By wrapping HTTP requests and responses in\nthe simplest way possible, + it unifies and distills the API for web\nservers, web frameworks, and software + in between (the so-called\nmiddleware) into a single method call.\n\nAlso + see https://rack.github.io/.\n","downloads_count":51700,"metadata":{},"number":"2.0.9.2","summary":"a + modular Ruby webserver interface","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.2.2","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"4b1cfbe2f35832ce9d06e9bf52d5d5b2ef75f0960ce90f3d8c8890ed71bdd93e"},{"authors":"Leah + Neukirchen","built_at":"2022-05-27T00:00:00.000Z","created_at":"2022-05-27T15:31:43.757Z","description":"Rack + provides a minimal, modular and adaptable interface for developing\nweb applications + in Ruby. By wrapping HTTP requests and responses in\nthe simplest way possible, + it unifies and distills the API for web\nservers, web frameworks, and software + in between (the so-called\nmiddleware) into a single method call.\n\nAlso + see https://rack.github.io/.\n","downloads_count":665245,"metadata":{},"number":"2.0.9.1","summary":"a + modular Ruby webserver interface","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.2.2","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"3cc510b7943eb9d963ad028438501f06c6f909377ffe58206339fa2b73cd61d3"},{"authors":"Leah + Neukirchen","built_at":"2020-02-08T00:00:00.000Z","created_at":"2020-02-08T18:21:51.799Z","description":"Rack + provides a minimal, modular and adaptable interface for developing\nweb applications + in Ruby. By wrapping HTTP requests and responses in\nthe simplest way possible, + it unifies and distills the API for web\nservers, web frameworks, and software + in between (the so-called\nmiddleware) into a single method call.\n\nAlso + see https://rack.github.io/.\n","downloads_count":6474747,"metadata":{},"number":"2.0.9","summary":"a + modular Ruby webserver interface","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.2.2","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"733a9e53a7470c472d58b94532d70d6e31edb49245ca6449333f53df4598bfd7"},{"authors":"Leah + Neukirchen","built_at":"2019-12-18T00:00:00.000Z","created_at":"2019-12-18T18:08:51.732Z","description":"Rack + provides a minimal, modular and adaptable interface for developing\nweb applications + in Ruby. By wrapping HTTP requests and responses in\nthe simplest way possible, + it unifies and distills the API for web\nservers, web frameworks, and software + in between (the so-called\nmiddleware) into a single method call.\n\nAlso + see https://rack.github.io/.\n","downloads_count":10829683,"metadata":{},"number":"2.0.8","summary":"a + modular Ruby webserver interface","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.2.2","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"f98171fb30e104950abe1e9fb97c177d8bb5643dd649bc2ed837864eb596a0c5"},{"authors":"Leah + Neukirchen","built_at":"2019-04-02T00:00:00.000Z","created_at":"2019-04-02T16:54:37.554Z","description":"Rack + provides a minimal, modular and adaptable interface for developing\nweb applications + in Ruby. By wrapping HTTP requests and responses in\nthe simplest way possible, + it unifies and distills the API for web\nservers, web frameworks, and software + in between (the so-called\nmiddleware) into a single method call.\n\nAlso + see https://rack.github.io/.\n","downloads_count":36381631,"metadata":{},"number":"2.0.7","summary":"a + modular Ruby webserver interface","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.2.2","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"5158fb64313c17fb2535c8e5def3de7e8b38baf2ab9e4c90155ebed5a9db207d"},{"authors":"Leah + Neukirchen","built_at":"2018-11-05T00:00:00.000Z","created_at":"2018-11-05T20:00:33.151Z","description":"Rack + provides a minimal, modular and adaptable interface for developing\nweb applications + in Ruby. By wrapping HTTP requests and responses in\nthe simplest way possible, + it unifies and distills the API for web\nservers, web frameworks, and software + in between (the so-called\nmiddleware) into a single method call.\n\nAlso + see https://rack.github.io/.\n","downloads_count":25314306,"metadata":{},"number":"2.0.6","summary":"a + modular Ruby webserver interface","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.2.2","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"f5874ac9c2223ecc65fcad3120c884fc2a868c1c18f548ff676a6eb21bda8fdd"},{"authors":"Leah + Neukirchen","built_at":"2018-04-23T00:00:00.000Z","created_at":"2018-04-23T17:47:56.538Z","description":"Rack + provides a minimal, modular and adaptable interface for developing\nweb applications + in Ruby. By wrapping HTTP requests and responses in\nthe simplest way possible, + it unifies and distills the API for web\nservers, web frameworks, and software + in between (the so-called\nmiddleware) into a single method call.\n\nAlso + see https://rack.github.io/.\n","downloads_count":20630903,"metadata":{},"number":"2.0.5","summary":"a + modular Ruby webserver interface","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.2.2","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"81e3ece3d36e7507ff6a05666cc2ff759bdd08a96aefb8c5fd6c309a8f5d1095"},{"authors":"Christian + Neukirchen","built_at":"2018-01-31T00:00:00.000Z","created_at":"2018-01-31T18:17:19.593Z","description":"Rack + provides a minimal, modular and adaptable interface for developing\nweb applications + in Ruby. By wrapping HTTP requests and responses in\nthe simplest way possible, + it unifies and distills the API for web\nservers, web frameworks, and software + in between (the so-called\nmiddleware) into a single method call.\n\nAlso + see https://rack.github.io/.\n","downloads_count":7679067,"metadata":{},"number":"2.0.4","summary":"a + modular Ruby webserver interface","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.2.2","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"2700d52bdc681b103e161d1da2b3767850e58f3de80e87d16e232491058fd9d5"},{"authors":"Christian + Neukirchen","built_at":"2017-05-15T00:00:00.000Z","created_at":"2017-05-15T16:50:19.287Z","description":"Rack + provides a minimal, modular and adaptable interface for developing\nweb applications + in Ruby. By wrapping HTTP requests and responses in\nthe simplest way possible, + it unifies and distills the API for web\nservers, web frameworks, and software + in between (the so-called\nmiddleware) into a single method call.\n\nAlso + see http://rack.github.io/.\n","downloads_count":16201010,"metadata":{},"number":"2.0.3","summary":"a + modular Ruby webserver interface","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.2.2","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"8c1c9bbafd74f11c78a29bd87c72a70e7b5b872712d1768ab83b33fec57d9fcd"},{"authors":"Christian + Neukirchen","built_at":"2017-05-08T00:00:00.000Z","created_at":"2017-05-08T17:08:46.316Z","description":"Rack + provides a minimal, modular and adaptable interface for developing\nweb applications + in Ruby. By wrapping HTTP requests and responses in\nthe simplest way possible, + it unifies and distills the API for web\nservers, web frameworks, and software + in between (the so-called\nmiddleware) into a single method call.\n\nAlso + see http://rack.github.io/.\n","downloads_count":24833871,"metadata":{},"number":"2.0.2","summary":"a + modular Ruby webserver interface","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.2.2","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"b9009b9acbefd85bea220ca13011e6f0f76630169289d9e433a0558dc73542d2"},{"authors":"Christian + Neukirchen","built_at":"2016-06-30T00:00:00.000Z","created_at":"2016-06-30T17:34:18.298Z","description":"Rack + provides a minimal, modular and adaptable interface for developing\nweb applications + in Ruby. By wrapping HTTP requests and responses in\nthe simplest way possible, + it unifies and distills the API for web\nservers, web frameworks, and software + in between (the so-called\nmiddleware) into a single method call.\n\nAlso + see http://rack.github.io/.\n","downloads_count":9689863,"metadata":{},"number":"2.0.1","summary":"a + modular Ruby webserver interface","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 2.2.2","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"61f78033bf5b1cd0221549ecce7c7b73205d4634b0e63c66e1f295dcf3c26b14"},{"authors":"Christian + Neukirchen","built_at":"2016-05-06T00:00:00.000Z","created_at":"2016-05-06T20:52:56.316Z","description":"Rack + provides a minimal, modular and adaptable interface for developing\nweb applications + in Ruby. By wrapping HTTP requests and responses in\nthe simplest way possible, + it unifies and distills the API for web\nservers, web frameworks, and software + in between (the so-called\nmiddleware) into a single method call.\n\nAlso + see http://rack.github.io/.\n","downloads_count":162419,"metadata":{},"number":"2.0.0.rc1","summary":"a + modular Ruby webserver interface","platform":"ruby","rubygems_version":"\u003e + 1.3.1","ruby_version":"\u003e= 2.2.2","prerelease":true,"licenses":["MIT"],"requirements":[],"sha":"f5b00b0977166f79073c79b2b1d11fc7fe335697e05eafde380379ddf253ba77"},{"authors":"Christian + Neukirchen","built_at":"2015-12-17T00:00:00.000Z","created_at":"2015-12-17T21:34:53.915Z","description":"Rack + provides a minimal, modular and adaptable interface for developing\nweb applications + in Ruby. By wrapping HTTP requests and responses in\nthe simplest way possible, + it unifies and distills the API for web\nservers, web frameworks, and software + in between (the so-called\nmiddleware) into a single method call.\n\nAlso + see http://rack.github.io/.\n","downloads_count":249285,"metadata":{},"number":"2.0.0.alpha","summary":"a + modular Ruby webserver interface","platform":"ruby","rubygems_version":"\u003e + 1.3.1","ruby_version":"\u003e= 2.2.2","prerelease":true,"licenses":["MIT"],"requirements":[],"sha":"f6d4e7b7673f1d3d09e52c9b0d7fbfd7702f23f6d14f82e8283e19460bb223f9"},{"authors":"Christian + Neukirchen","built_at":"2020-02-08T00:00:00.000Z","created_at":"2020-02-08T18:19:58.581Z","description":"Rack + provides a minimal, modular and adaptable interface for developing\nweb applications + in Ruby. By wrapping HTTP requests and responses in\nthe simplest way possible, + it unifies and distills the API for web\nservers, web frameworks, and software + in between (the so-called\nmiddleware) into a single method call.\n\nAlso + see http://rack.github.io/.\n","downloads_count":18967125,"metadata":{},"number":"1.6.13","summary":"a + modular Ruby webserver interface","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"207e60f917a7b47cb858a6e813500bc6042a958c2ca9eeb64631b19cde702173"},{"authors":"Christian + Neukirchen","built_at":"2019-12-18T00:00:00.000Z","created_at":"2019-12-18T18:08:57.819Z","description":"Rack + provides a minimal, modular and adaptable interface for developing\nweb applications + in Ruby. By wrapping HTTP requests and responses in\nthe simplest way possible, + it unifies and distills the API for web\nservers, web frameworks, and software + in between (the so-called\nmiddleware) into a single method call.\n\nAlso + see http://rack.github.io/.\n","downloads_count":2235335,"metadata":{},"number":"1.6.12","summary":"a + modular Ruby webserver interface","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"928527a0897796d2575e8cacdfa526341dc4c55d05e09b31c39b3704c80738e6"},{"authors":"Christian + Neukirchen","built_at":"2018-11-05T00:00:00.000Z","created_at":"2018-11-05T20:00:22.853Z","description":"Rack + provides a minimal, modular and adaptable interface for developing\nweb applications + in Ruby. By wrapping HTTP requests and responses in\nthe simplest way possible, + it unifies and distills the API for web\nservers, web frameworks, and software + in between (the so-called\nmiddleware) into a single method call.\n\nAlso + see http://rack.github.io/.\n","downloads_count":19130463,"metadata":{},"number":"1.6.11","summary":"a + modular Ruby webserver interface","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"ee2016b1ddf820f6e5ee437d10a85319506b60c0d493da1d15815361a91129bd"},{"authors":"Christian + Neukirchen","built_at":"2018-04-23T00:00:00.000Z","created_at":"2018-04-23T17:52:31.754Z","description":"Rack + provides a minimal, modular and adaptable interface for developing\nweb applications + in Ruby. By wrapping HTTP requests and responses in\nthe simplest way possible, + it unifies and distills the API for web\nservers, web frameworks, and software + in between (the so-called\nmiddleware) into a single method call.\n\nAlso + see http://rack.github.io/.\n","downloads_count":9674179,"metadata":{},"number":"1.6.10","summary":"a + modular Ruby webserver interface","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"58e8ae09c502f219a6ad2e7f932072faf2d2b38ce6fd0251ac7ff3096c55c046"},{"authors":"Christian + Neukirchen","built_at":"2018-02-27T00:00:00.000Z","created_at":"2018-02-27T17:19:24.605Z","description":"Rack + provides a minimal, modular and adaptable interface for developing\nweb applications + in Ruby. By wrapping HTTP requests and responses in\nthe simplest way possible, + it unifies and distills the API for web\nservers, web frameworks, and software + in between (the so-called\nmiddleware) into a single method call.\n\nAlso + see http://rack.github.io/.\n","downloads_count":2485395,"metadata":{},"number":"1.6.9","summary":"a + modular Ruby webserver interface","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"0764d8edafbd52a1055966045a27d1c73fb572a18db5151c000887444bcc810f"},{"authors":"Christian + Neukirchen","built_at":"2017-05-16T00:00:00.000Z","created_at":"2017-05-16T21:29:10.758Z","description":"Rack + provides a minimal, modular and adaptable interface for developing\nweb applications + in Ruby. By wrapping HTTP requests and responses in\nthe simplest way possible, + it unifies and distills the API for web\nservers, web frameworks, and software + in between (the so-called\nmiddleware) into a single method call.\n\nAlso + see http://rack.github.io/.\n","downloads_count":23136033,"metadata":{},"number":"1.6.8","summary":"a + modular Ruby webserver interface","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"eae37ccb7686b2c672f64bc6be366cfda4d828ea58e1086cb82766b17a54a7a6"},{"authors":"Christian + Neukirchen","built_at":"2017-05-15T00:00:00.000Z","created_at":"2017-05-15T16:47:41.052Z","description":"Rack + provides a minimal, modular and adaptable interface for developing\nweb applications + in Ruby. By wrapping HTTP requests and responses in\nthe simplest way possible, + it unifies and distills the API for web\nservers, web frameworks, and software + in between (the so-called\nmiddleware) into a single method call.\n\nAlso + see http://rack.github.io/.\n","downloads_count":49597,"metadata":{},"number":"1.6.7","summary":"a + modular Ruby webserver interface","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"485c1bf52521ff354be7dd2a9f529423ee976a51ddec5aace4cf2eebc2ce9c59"},{"authors":"Christian + Neukirchen","built_at":"2017-05-08T00:00:00.000Z","created_at":"2017-05-08T17:07:35.278Z","description":"Rack + provides a minimal, modular and adaptable interface for developing\nweb applications + in Ruby. By wrapping HTTP requests and responses in\nthe simplest way possible, + it unifies and distills the API for web\nservers, web frameworks, and software + in between (the so-called\nmiddleware) into a single method call.\n\nAlso + see http://rack.github.io/.\n","downloads_count":1612071,"metadata":{},"number":"1.6.6","summary":"a + modular Ruby webserver interface","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"5d098ff67ab8c44a9a9007a445fac67db7f53075d943bda0ec6439fc64366d1c"},{"authors":"Christian + Neukirchen","built_at":"2016-11-10T00:00:00.000Z","created_at":"2016-11-10T21:55:00.409Z","description":"Rack + provides a minimal, modular and adaptable interface for developing\nweb applications + in Ruby. By wrapping HTTP requests and responses in\nthe simplest way possible, + it unifies and distills the API for web\nservers, web frameworks, and software + in between (the so-called\nmiddleware) into a single method call.\n\nAlso + see http://rack.github.io/.\n","downloads_count":10726360,"metadata":{},"number":"1.6.5","summary":"a + modular Ruby webserver interface","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"ff9d8fc9e89af3f59ba1708d5dec642e3ec421dbeca567bc460b5b8ba0efe48c"},{"authors":"Christian + Neukirchen","built_at":"2015-06-18T00:00:00.000Z","created_at":"2015-06-18T21:51:38.677Z","description":"Rack + provides a minimal, modular and adaptable interface for developing\nweb applications + in Ruby. By wrapping HTTP requests and responses in\nthe simplest way possible, + it unifies and distills the API for web\nservers, web frameworks, and software + in between (the so-called\nmiddleware) into a single method call.\n\nAlso + see http://rack.github.io/.\n","downloads_count":38351024,"metadata":{},"number":"1.6.4","summary":"a + modular Ruby webserver interface","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"455ec4545a54b40dae9937bc5f61ee0e32134191cc1ef9a7959a19ec4b127a25"},{"authors":"Christian + Neukirchen","built_at":"2015-06-18T00:00:00.000Z","created_at":"2015-06-18T18:45:14.478Z","description":"Rack + provides a minimal, modular and adaptable interface for developing\nweb applications + in Ruby. By wrapping HTTP requests and responses in\nthe simplest way possible, + it unifies and distills the API for web\nservers, web frameworks, and software + in between (the so-called\nmiddleware) into a single method call.\n\nAlso + see http://rack.github.io/.\n","downloads_count":16042,"metadata":{},"number":"1.6.3","summary":"a + modular Ruby webserver interface","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"4da0c396487e0914cd380c9ec43d4511992756d2c0fa079f70de0a03651cd783"},{"authors":"Christian + Neukirchen","built_at":"2015-06-16T00:00:00.000Z","created_at":"2015-06-16T17:59:02.851Z","description":"Rack + provides a minimal, modular and adaptable interface for developing\nweb applications + in Ruby. By wrapping HTTP requests and responses in\nthe simplest way possible, + it unifies and distills the API for web\nservers, web frameworks, and software + in between (the so-called\nmiddleware) into a single method call.\n\nAlso + see http://rack.github.io/.\n","downloads_count":499570,"metadata":{},"number":"1.6.2","summary":"a + modular Ruby webserver interface","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"89278d4842d0ecdd1e79cbf7a894dc86f976e6d25debc6814343298fd19ed017"},{"authors":"Christian + Neukirchen","built_at":"2015-05-06T00:00:00.000Z","created_at":"2015-05-06T18:37:48.080Z","description":"Rack + provides a minimal, modular and adaptable interface for developing\nweb applications + in Ruby. By wrapping HTTP requests and responses in\nthe simplest way possible, + it unifies and distills the API for web\nservers, web frameworks, and software + in between (the so-called\nmiddleware) into a single method call.\n\nAlso + see http://rack.github.io/.\n","downloads_count":2791756,"metadata":{},"number":"1.6.1","summary":"a + modular Ruby webserver interface","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"f4017a0a84dd36f1a6b38baa081731e3696a356f8f83ed74a09ff109afd9e338"},{"authors":"Christian + Neukirchen","built_at":"2014-12-18T00:00:00.000Z","created_at":"2014-12-18T22:45:11.060Z","description":"Rack + provides a minimal, modular and adaptable interface for developing\nweb applications + in Ruby. By wrapping HTTP requests and responses in\nthe simplest way possible, + it unifies and distills the API for web\nservers, web frameworks, and software + in between (the so-called\nmiddleware) into a single method call.\n\nAlso + see http://rack.github.io/.\n","downloads_count":25592578,"metadata":{},"number":"1.6.0","summary":"a + modular Ruby webserver interface","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"6b6941d48013bc605538fc453006a9df18114ddf0757a3cd69cfbd5c3b72a7b8"},{"authors":"Christian + Neukirchen","built_at":"2014-11-27T00:00:00.000Z","created_at":"2014-11-27T18:52:53.658Z","description":"Rack + provides a minimal, modular and adaptable interface for developing\nweb applications + in Ruby. By wrapping HTTP requests and responses in\nthe simplest way possible, + it unifies and distills the API for web\nservers, web frameworks, and software + in between (the so-called\nmiddleware) into a single method call.\n\nAlso + see http://rack.github.io/.\n","downloads_count":102047,"metadata":{},"number":"1.6.0.beta2","summary":"a + modular Ruby webserver interface","platform":"ruby","rubygems_version":"\u003e + 1.3.1","ruby_version":"\u003e= 0","prerelease":true,"licenses":["MIT"],"requirements":[],"sha":"078f2babefc7c659f1833f08e03ca79cb1a8ab80f2a6cb6fec057b9f60e7a494"},{"authors":"Christian + Neukirchen","built_at":"2014-08-18T00:00:00.000Z","created_at":"2014-08-18T19:02:15.332Z","description":"Rack + provides a minimal, modular and adaptable interface for developing\nweb applications + in Ruby. By wrapping HTTP requests and responses in\nthe simplest way possible, + it unifies and distills the API for web\nservers, web frameworks, and software + in between (the so-called\nmiddleware) into a single method call.\n\nAlso + see http://rack.github.io/.\n","downloads_count":350200,"metadata":{},"number":"1.6.0.beta","summary":"a + modular Ruby webserver interface","platform":"ruby","rubygems_version":"\u003e + 1.3.1","ruby_version":"\u003e= 0","prerelease":true,"licenses":["MIT"],"requirements":[],"sha":"fbfe6d3f321a863809ade0c8fb5db95721ddd95831d01342623123789c596125"},{"authors":"Christian + Neukirchen","built_at":"2015-06-18T00:00:00.000Z","created_at":"2015-06-18T18:46:19.771Z","description":"Rack + provides a minimal, modular and adaptable interface for developing\nweb applications + in Ruby. By wrapping HTTP requests and responses in\nthe simplest way possible, + it unifies and distills the API for web\nservers, web frameworks, and software + in between (the so-called\nmiddleware) into a single method call.\n\nAlso + see http://rack.github.com/.\n","downloads_count":9158509,"metadata":{},"number":"1.5.5","summary":"a + modular Ruby webserver interface","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"4ae4a74f555008ecc541060515c37baa9e16f131538447a668c0bf52117c43b7"},{"authors":"Christian + Neukirchen","built_at":"2015-06-16T00:00:00.000Z","created_at":"2015-06-16T17:58:54.690Z","description":"Rack + provides a minimal, modular and adaptable interface for developing\nweb applications + in Ruby. By wrapping HTTP requests and responses in\nthe simplest way possible, + it unifies and distills the API for web\nservers, web frameworks, and software + in between (the so-called\nmiddleware) into a single method call.\n\nAlso + see http://rack.github.com/.\n","downloads_count":258372,"metadata":{},"number":"1.5.4","summary":"a + modular Ruby webserver interface","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"401f8725be81ca60a4c8366fca674a9f18e9bc577b6ad4f42c9f66d763107e6e"},{"authors":"Christian + Neukirchen","built_at":"2015-05-06T00:00:00.000Z","created_at":"2015-05-06T18:43:23.519Z","description":"Rack + provides a minimal, modular and adaptable interface for developing\nweb applications + in Ruby. By wrapping HTTP requests and responses in\nthe simplest way possible, + it unifies and distills the API for web\nservers, web frameworks, and software + in between (the so-called\nmiddleware) into a single method call.\n\nAlso + see http://rack.github.com/.\n","downloads_count":498872,"metadata":{},"number":"1.5.3","summary":"a + modular Ruby webserver interface","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"6b4cbe46b77cd1887c8175bd5f08b1644ab4397122edc1bb1551c9e14390100f"},{"authors":"Christian + Neukirchen","built_at":"2013-02-08T00:00:00.000Z","created_at":"2013-02-08T03:14:13.517Z","description":"Rack + provides a minimal, modular and adaptable interface for developing\nweb applications + in Ruby. By wrapping HTTP requests and responses in\nthe simplest way possible, + it unifies and distills the API for web\nservers, web frameworks, and software + in between (the so-called\nmiddleware) into a single method call.\n\nAlso + see http://rack.github.com/.\n","downloads_count":45819782,"metadata":{},"number":"1.5.2","summary":"a + modular Ruby webserver interface","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":null,"prerelease":false,"licenses":["MIT"],"requirements":null,"sha":"e64af00234e8faaa69ea81ef4e3800f40743c69560f0dda8fc9969660e775fa7"},{"authors":"Christian + Neukirchen","built_at":"2013-01-28T00:00:00.000Z","created_at":"2013-01-28T22:52:21.850Z","description":"Rack + provides a minimal, modular and adaptable interface for developing\nweb applications + in Ruby. By wrapping HTTP requests and responses in\nthe simplest way possible, + it unifies and distills the API for web\nservers, web frameworks, and software + in between (the so-called\nmiddleware) into a single method call.\n\nAlso + see http://rack.github.com/.\n","downloads_count":477969,"metadata":{},"number":"1.5.1","summary":"a + modular Ruby webserver interface","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":null,"prerelease":false,"licenses":[],"requirements":null,"sha":"398896c8a109b402d4f62b7fc3b93f65249b3ffd8024ca8127a763a1a0fa6f84"},{"authors":"Christian + Neukirchen","built_at":"2013-01-22T00:00:00.000Z","created_at":"2013-01-22T07:40:50.789Z","description":"Rack + provides a minimal, modular and adaptable interface for developing\nweb applications + in Ruby. By wrapping HTTP requests and responses in\nthe simplest way possible, + it unifies and distills the API for web\nservers, web frameworks, and software + in between (the so-called\nmiddleware) into a single method call.\n\nAlso + see http://rack.github.com/.\n","downloads_count":209973,"metadata":{},"number":"1.5.0","summary":"a + modular Ruby webserver interface","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":null,"prerelease":false,"licenses":[],"requirements":null,"sha":"d0ac19e607aae98dc2ebe9e45b0d07405efae90a43874cfa5b7a47e4f76af624"},{"authors":"Christian + Neukirchen","built_at":"2013-01-13T00:00:00.000Z","created_at":"2013-01-13T22:10:44.503Z","description":"Rack + provides a minimal, modular and adaptable interface for developing\nweb applications + in Ruby. By wrapping HTTP requests and responses in\nthe simplest way possible, + it unifies and distills the API for web\nservers, web frameworks, and software + in between (the so-called\nmiddleware) into a single method call.\n\nAlso + see http://rack.github.com/.\n","downloads_count":5191,"metadata":{},"number":"1.5.0.beta.2","summary":"a + modular Ruby webserver interface","platform":"ruby","rubygems_version":"\u003e + 1.3.1","ruby_version":null,"prerelease":true,"licenses":[],"requirements":null,"sha":"9e6b45061429c21a9c50fe5252efb83f3faf1f54e2bfcf629d1a9d5a2340c2ed"},{"authors":"Christian + Neukirchen","built_at":"2013-01-11T00:00:00.000Z","created_at":"2013-01-11T22:58:13.295Z","description":"Rack + provides a minimal, modular and adaptable interface for developing\nweb applications + in Ruby. By wrapping HTTP requests and responses in\nthe simplest way possible, + it unifies and distills the API for web\nservers, web frameworks, and software + in between (the so-called\nmiddleware) into a single method call.\n\nAlso + see http://rack.github.com/.\n","downloads_count":4995,"metadata":{},"number":"1.5.0.beta.1","summary":"a + modular Ruby webserver interface","platform":"ruby","rubygems_version":"\u003e + 1.3.1","ruby_version":null,"prerelease":true,"licenses":[],"requirements":null,"sha":"92a8748082af00c11b47df71f66ce04e96b724d8a67c51dc301b56a955312468"},{"authors":"Christian + Neukirchen","built_at":"2015-06-18T00:00:00.000Z","created_at":"2015-06-18T21:12:18.862Z","description":"Rack + provides a minimal, modular and adaptable interface for developing\nweb applications + in Ruby. By wrapping HTTP requests and responses in\nthe simplest way possible, + it unifies and distills the API for web\nservers, web frameworks, and software + in between (the so-called\nmiddleware) into a single method call.\n\nAlso + see http://rack.github.com/.\n","downloads_count":11925377,"metadata":{},"number":"1.4.7","summary":"a + modular Ruby webserver interface","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 0","prerelease":false,"licenses":[],"requirements":[],"sha":"fa06e970605808834fc7e5a8b9babd4871d7d4c23a4d9d61cb94cbd4c15de5e6"},{"authors":"Christian + Neukirchen","built_at":"2015-06-16T00:00:00.000Z","created_at":"2015-06-16T20:47:05.112Z","description":"Rack + provides a minimal, modular and adaptable interface for developing\nweb applications + in Ruby. By wrapping HTTP requests and responses in\nthe simplest way possible, + it unifies and distills the API for web\nservers, web frameworks, and software + in between (the so-called\nmiddleware) into a single method call.\n\nAlso + see http://rack.github.com/.\n","downloads_count":99471,"metadata":{},"number":"1.4.6","summary":"a + modular Ruby webserver interface","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 0","prerelease":false,"licenses":[],"requirements":[],"sha":"f65ad9022e83e6517d6e3e37cecb781cd172061e769068334bab142d3435f13d"},{"authors":"Christian + Neukirchen","built_at":"2013-02-08T00:00:00.000Z","created_at":"2013-02-08T03:13:08.844Z","description":"Rack + provides a minimal, modular and adaptable interface for developing\nweb applications + in Ruby. By wrapping HTTP requests and responses in\nthe simplest way possible, + it unifies and distills the API for web\nservers, web frameworks, and software + in between (the so-called\nmiddleware) into a single method call.\n\nAlso + see http://rack.github.com/.\n","downloads_count":17832473,"metadata":{},"number":"1.4.5","summary":"a + modular Ruby webserver interface","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":null,"prerelease":false,"licenses":[],"requirements":null,"sha":"f7bf3faa8e09a2ff26475372de36a724e7470d6bdc33d189a0ec34b49605f308"},{"authors":"Christian + Neukirchen","built_at":"2013-01-13T00:00:00.000Z","created_at":"2013-01-13T22:07:50.276Z","description":"Rack + provides a minimal, modular and adaptable interface for developing\nweb applications + in Ruby. By wrapping HTTP requests and responses in\nthe simplest way possible, + it unifies and distills the API for web\nservers, web frameworks, and software + in between (the so-called\nmiddleware) into a single method call.\n\nAlso + see http://rack.github.com/.\n","downloads_count":872377,"metadata":{},"number":"1.4.4","summary":"a + modular Ruby webserver interface","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":null,"prerelease":false,"licenses":[],"requirements":null,"sha":"7f8b61b0d1f65279474f09e0a92d121dfd0d0651843755a0f152e8f02c281dc0"},{"authors":"Christian + Neukirchen","built_at":"2013-01-07T00:00:00.000Z","created_at":"2013-01-07T18:49:46.932Z","description":"Rack + provides a minimal, modular and adaptable interface for developing\nweb applications + in Ruby. By wrapping HTTP requests and responses in\nthe simplest way possible, + it unifies and distills the API for web\nservers, web frameworks, and software + in between (the so-called\nmiddleware) into a single method call.\n\nAlso + see http://rack.github.com/.\n","downloads_count":582786,"metadata":{},"number":"1.4.3","summary":"a + modular Ruby webserver interface","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":null,"prerelease":false,"licenses":[],"requirements":null,"sha":"e16392baa87833c0eb51afcec13f96a521339af183032fa211b6d31e57f320df"},{"authors":"Christian + Neukirchen","built_at":"2013-01-07T00:00:00.000Z","created_at":"2013-01-07T02:43:24.200Z","description":"Rack + provides a minimal, modular and adaptable interface for developing\nweb applications + in Ruby. By wrapping HTTP requests and responses in\nthe simplest way possible, + it unifies and distills the API for web\nservers, web frameworks, and software + in between (the so-called\nmiddleware) into a single method call.\n\nAlso + see http://rack.github.com/.\n","downloads_count":34447,"metadata":{},"number":"1.4.2","summary":"a + modular Ruby webserver interface","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":null,"prerelease":false,"licenses":[],"requirements":null,"sha":"cf09934534722129318d8049fdc98bf319a3e9254565e0edc31529fed889b840"},{"authors":"Christian + Neukirchen","built_at":"2012-01-23T00:00:00.000Z","created_at":"2012-01-23T06:51:48.577Z","description":"Rack + provides a minimal, modular and adaptable interface for developing\nweb applications + in Ruby. By wrapping HTTP requests and responses in\nthe simplest way possible, + it unifies and distills the API for web\nservers, web frameworks, and software + in between (the so-called\nmiddleware) into a single method call.\n\nAlso + see http://rack.rubyforge.org.\n","downloads_count":9622155,"metadata":{},"number":"1.4.1","summary":"a + modular Ruby webserver interface","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":null,"prerelease":false,"licenses":null,"requirements":null,"sha":"2005d0cee536e76b5d0dc853778e3f7840e98c38380265d6d2c45e44dee7a3b3"},{"authors":"Christian + Neukirchen","built_at":"2011-12-28T00:00:00.000Z","created_at":"2011-12-28T02:56:39.698Z","description":"Rack + provides a minimal, modular and adaptable interface for developing\nweb applications + in Ruby. By wrapping HTTP requests and responses in\nthe simplest way possible, + it unifies and distills the API for web\nservers, web frameworks, and software + in between (the so-called\nmiddleware) into a single method call.\n\nAlso + see http://rack.rubyforge.org.\n","downloads_count":225586,"metadata":{},"number":"1.4.0","summary":"a + modular Ruby webserver interface","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":null,"prerelease":false,"licenses":null,"requirements":null,"sha":"09b3fbc957e182b00db573b0693014065745432f4bc53920e8d019e4a7cfb896"},{"authors":"Christian + Neukirchen","built_at":"2013-02-08T00:00:00.000Z","created_at":"2013-02-08T03:11:09.654Z","description":"Rack + provides minimal, modular and adaptable interface for developing\nweb applications + in Ruby. By wrapping HTTP requests and responses in\nthe simplest way possible, + it unifies and distills the API for web\nservers, web frameworks, and software + in between (the so-called\nmiddleware) into a single method call.\n\nAlso + see http://rack.github.com/.\n","downloads_count":817709,"metadata":{},"number":"1.3.10","summary":"a + modular Ruby webserver interface","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":null,"prerelease":false,"licenses":[],"requirements":null,"sha":"7a7e3e07181d05dc39bdfa566c4025c126a1eb9ac0f434848a9ea0a9c127d9b6"},{"authors":"Christian + Neukirchen","built_at":"2013-01-13T00:00:00.000Z","created_at":"2013-01-13T22:07:05.217Z","description":"Rack + provides minimal, modular and adaptable interface for developing\nweb applications + in Ruby. By wrapping HTTP requests and responses in\nthe simplest way possible, + it unifies and distills the API for web\nservers, web frameworks, and software + in between (the so-called\nmiddleware) into a single method call.\n\nAlso + see http://rack.github.com/.\n","downloads_count":53184,"metadata":{},"number":"1.3.9","summary":"a + modular Ruby webserver interface","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":null,"prerelease":false,"licenses":[],"requirements":null,"sha":"c75023e17509f4fdee8f62f86140175c8dd279e0e0b489fd9e2662226640243f"},{"authors":"Christian + Neukirchen","built_at":"2013-01-07T00:00:00.000Z","created_at":"2013-01-07T18:49:00.051Z","description":"Rack + provides minimal, modular and adaptable interface for developing\nweb applications + in Ruby. By wrapping HTTP requests and responses in\nthe simplest way possible, + it unifies and distills the API for web\nservers, web frameworks, and software + in between (the so-called\nmiddleware) into a single method call.\n\nAlso + see http://rack.github.com/.\n","downloads_count":47052,"metadata":{},"number":"1.3.8","summary":"a + modular Ruby webserver interface","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":null,"prerelease":false,"licenses":[],"requirements":null,"sha":"977aef187206d8706b074a3f900b1ac1dcdf86eccbfc7fc4b234d821ee1b8015"},{"authors":"Christian + Neukirchen","built_at":"2013-01-07T00:00:00.000Z","created_at":"2013-01-07T02:42:07.617Z","description":"Rack + provides minimal, modular and adaptable interface for developing\nweb applications + in Ruby. By wrapping HTTP requests and responses in\nthe simplest way possible, + it unifies and distills the API for web\nservers, web frameworks, and software + in between (the so-called\nmiddleware) into a single method call.\n\nAlso + see http://rack.github.com/.\n","downloads_count":6196,"metadata":{},"number":"1.3.7","summary":"a + modular Ruby webserver interface","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":null,"prerelease":false,"licenses":[],"requirements":null,"sha":"258d673aedab569c5f9ed6f6bd5c19907b6d948aa92a25aac83afc8a35cc46b9"},{"authors":"Christian + Neukirchen","built_at":"2011-12-28T00:00:00.000Z","created_at":"2011-12-28T02:52:24.315Z","description":"Rack + provides minimal, modular and adaptable interface for developing\nweb applications + in Ruby. By wrapping HTTP requests and responses in\nthe simplest way possible, + it unifies and distills the API for web\nservers, web frameworks, and software + in between (the so-called\nmiddleware) into a single method call.\n\nAlso + see http://rack.rubyforge.org.\n","downloads_count":1064118,"metadata":{},"number":"1.3.6","summary":"a + modular Ruby webserver interface","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":null,"prerelease":false,"licenses":null,"requirements":null,"sha":"d4090f47205a8af4e602be73cf6e5f94f0c91951cfb4e4682e93fc17b2e670e2"},{"authors":"Christian + Neukirchen","built_at":"2011-10-18T00:00:00.000Z","created_at":"2011-10-18T05:33:18.912Z","description":"Rack + provides minimal, modular and adaptable interface for developing\nweb applications + in Ruby. By wrapping HTTP requests and responses in\nthe simplest way possible, + it unifies and distills the API for web\nservers, web frameworks, and software + in between (the so-called\nmiddleware) into a single method call.\n\nAlso + see http://rack.rubyforge.org.\n","downloads_count":1280322,"metadata":{},"number":"1.3.5","summary":"a + modular Ruby webserver interface","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":null,"prerelease":false,"licenses":null,"requirements":null,"sha":"1722c36ea1200116560f7e8973a7675a27e6fc2e08a5cc1c146523351ab6e5e1"},{"authors":"Christian + Neukirchen","built_at":"2011-10-01T00:00:00.000Z","created_at":"2011-10-01T20:50:43.592Z","description":"Rack + provides minimal, modular and adaptable interface for developing\nweb applications + in Ruby. By wrapping HTTP requests and responses in\nthe simplest way possible, + it unifies and distills the API for web\nservers, web frameworks, and software + in between (the so-called\nmiddleware) into a single method call.\n\nAlso + see http://rack.rubyforge.org.\n","downloads_count":238474,"metadata":{},"number":"1.3.4","summary":"a + modular Ruby webserver interface","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":null,"prerelease":false,"licenses":null,"requirements":null,"sha":"347f9bc51d2ecba71caa31e0fe2a0cddf88c0877ba0047ffaa365ee474a0919f"},{"authors":"Christian + Neukirchen","built_at":"2011-09-16T00:00:00.000Z","created_at":"2011-09-16T23:32:21.895Z","description":"Rack + provides minimal, modular and adaptable interface for developing\nweb applications + in Ruby. By wrapping HTTP requests and responses in\nthe simplest way possible, + it unifies and distills the API for web\nservers, web frameworks, and software + in between (the so-called\nmiddleware) into a single method call.\n\nAlso + see http://rack.rubyforge.org.\n","downloads_count":233325,"metadata":{},"number":"1.3.3","summary":"a + modular Ruby webserver interface","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":null,"prerelease":false,"licenses":null,"requirements":null,"sha":"8a32cf05128c1d89f6899ef67826ead71ec44a9c9ff4b7cafcb82eae50cc7e47"},{"authors":"Christian + Neukirchen","built_at":"2011-07-26T00:00:00.000Z","created_at":"2011-07-26T01:40:42.197Z","description":"Rack + provides minimal, modular and adaptable interface for developing\nweb applications + in Ruby. By wrapping HTTP requests and responses in\nthe simplest way possible, + it unifies and distills the API for web\nservers, web frameworks, and software + in between (the so-called\nmiddleware) into a single method call.\n\nAlso + see http://rack.rubyforge.org.\n","downloads_count":1880670,"metadata":{},"number":"1.3.2","summary":"a + modular Ruby webserver interface","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":null,"prerelease":false,"licenses":null,"requirements":null,"sha":"f3fc568ecab28b26473c97e5e3a3ff36368128db157d95931b8c28247d263ae3"},{"authors":"Christian + Neukirchen","built_at":"2011-07-13T00:00:00.000Z","created_at":"2011-07-13T23:20:57.656Z","description":"Rack + provides minimal, modular and adaptable interface for developing\nweb applications + in Ruby. By wrapping HTTP requests and responses in\nthe simplest way possible, + it unifies and distills the API for web\nservers, web frameworks, and software + in between (the so-called\nmiddleware) into a single method call.\n\nAlso + see http://rack.rubyforge.org.\n","downloads_count":79822,"metadata":{},"number":"1.3.1","summary":"a + modular Ruby webserver interface","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":null,"prerelease":false,"licenses":null,"requirements":null,"sha":"d64b700e33f156fb6e7ddfbafcd6a962b441394f04c31f559e2078c45ceb6b68"},{"authors":"Christian + Neukirchen","built_at":"2011-05-22T07:00:00.000Z","created_at":"2011-05-23T06:08:16.127Z","description":"Rack + provides minimal, modular and adaptable interface for developing\nweb applications + in Ruby. By wrapping HTTP requests and responses in\nthe simplest way possible, + it unifies and distills the API for web\nservers, web frameworks, and software + in between (the so-called\nmiddleware) into a single method call.\n\nAlso + see http://rack.rubyforge.org.\n","downloads_count":384390,"metadata":{},"number":"1.3.0","summary":"a + modular Ruby webserver interface","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":null,"prerelease":false,"licenses":null,"requirements":null,"sha":"98c4aa69ea449c54bcb6f5a7417e2bdad1b34a0de20608c0fe8c621b01914aa4"},{"authors":"Christian + Neukirchen","built_at":"2011-05-19T04:00:00.000Z","created_at":"2011-05-19T17:16:00.870Z","description":"Rack + provides minimal, modular and adaptable interface for developing\nweb applications + in Ruby. By wrapping HTTP requests and responses in\nthe simplest way possible, + it unifies and distills the API for web\nservers, web frameworks, and software + in between (the so-called\nmiddleware) into a single method call.\n\nAlso + see http://rack.rubyforge.org.\n","downloads_count":71032,"metadata":{},"number":"1.3.0.beta2","summary":"a + modular Ruby webserver interface","platform":"ruby","rubygems_version":"\u003e + 1.3.1","ruby_version":null,"prerelease":true,"licenses":null,"requirements":null,"sha":"2ba51abc21a6543d117f1a31318bc3acf41ed90cc5397090857746c01f187555"},{"authors":"Christian + Neukirchen","built_at":"2011-05-03T07:00:00.000Z","created_at":"2011-05-03T10:39:20.440Z","description":"Rack + provides minimal, modular and adaptable interface for developing\nweb applications + in Ruby. By wrapping HTTP requests and responses in\nthe simplest way possible, + it unifies and distills the API for web\nservers, web frameworks, and software + in between (the so-called\nmiddleware) into a single method call.\n\nAlso + see http://rack.rubyforge.org.\n","downloads_count":15025,"metadata":{},"number":"1.3.0.beta","summary":"a + modular Ruby webserver interface","platform":"ruby","rubygems_version":"\u003e + 1.3.1","ruby_version":null,"prerelease":true,"licenses":null,"requirements":null,"sha":"a5f8a8a2233e43636c4164c35fe837364a1fb673e52a578c5a73485e5acd2057"},{"authors":"Christian + Neukirchen","built_at":"2013-02-08T00:00:00.000Z","created_at":"2013-02-08T03:09:59.888Z","description":"Rack + provides minimal, modular and adaptable interface for developing\nweb applications + in Ruby. By wrapping HTTP requests and responses in\nthe simplest way possible, + it unifies and distills the API for web\nservers, web frameworks, and software + in between (the so-called\nmiddleware) into a single method call.\n\nAlso + see http://rack.rubyforge.org.\n","downloads_count":1099355,"metadata":{},"number":"1.2.8","summary":"a + modular Ruby webserver interface","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":null,"prerelease":false,"licenses":[],"requirements":null,"sha":"4b0414a7267d6426d61a105f0ccd75ed0c94cf3ceebb25a0740d3894dbca5cc6"},{"authors":"Christian + Neukirchen","built_at":"2013-01-13T00:00:00.000Z","created_at":"2013-01-13T22:05:30.848Z","description":"Rack + provides minimal, modular and adaptable interface for developing\nweb applications + in Ruby. By wrapping HTTP requests and responses in\nthe simplest way possible, + it unifies and distills the API for web\nservers, web frameworks, and software + in between (the so-called\nmiddleware) into a single method call.\n\nAlso + see http://rack.rubyforge.org.\n","downloads_count":106782,"metadata":{},"number":"1.2.7","summary":"a + modular Ruby webserver interface","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":null,"prerelease":false,"licenses":[],"requirements":null,"sha":"107cee2cda7b9cd4231c849dc9dcf06867beb7c67b64a4066502452908847ac0"},{"authors":"Christian + Neukirchen","built_at":"2013-01-07T00:00:00.000Z","created_at":"2013-01-07T02:39:13.764Z","description":"Rack + provides minimal, modular and adaptable interface for developing\nweb applications + in Ruby. By wrapping HTTP requests and responses in\nthe simplest way possible, + it unifies and distills the API for web\nservers, web frameworks, and software + in between (the so-called\nmiddleware) into a single method call.\n\nAlso + see http://rack.rubyforge.org.\n","downloads_count":68277,"metadata":{},"number":"1.2.6","summary":"a + modular Ruby webserver interface","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":null,"prerelease":false,"licenses":[],"requirements":null,"sha":"673af82991bd3f51f7f063b701abe910c4eca7711b34821a31cee743e48357d7"},{"authors":"Christian + Neukirchen","built_at":"2011-12-28T00:00:00.000Z","created_at":"2011-12-28T02:48:19.240Z","description":"Rack + provides minimal, modular and adaptable interface for developing\nweb applications + in Ruby. By wrapping HTTP requests and responses in\nthe simplest way possible, + it unifies and distills the API for web\nservers, web frameworks, and software + in between (the so-called\nmiddleware) into a single method call.\n\nAlso + see http://rack.rubyforge.org.\n","downloads_count":849098,"metadata":{},"number":"1.2.5","summary":"a + modular Ruby webserver interface","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":null,"prerelease":false,"licenses":null,"requirements":null,"sha":"2722169809a6fcd73b395a405e43985af24d0cc005a3f9ec389967ecfc6f2c6c"},{"authors":"Christian + Neukirchen","built_at":"2011-09-16T00:00:00.000Z","created_at":"2011-09-17T00:00:17.782Z","description":"Rack + provides minimal, modular and adaptable interface for developing\nweb applications + in Ruby. By wrapping HTTP requests and responses in\nthe simplest way possible, + it unifies and distills the API for web\nservers, web frameworks, and software + in between (the so-called\nmiddleware) into a single method call.\n\nAlso + see http://rack.rubyforge.org.\n","downloads_count":516069,"metadata":{},"number":"1.2.4","summary":"a + modular Ruby webserver interface","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":null,"prerelease":false,"licenses":null,"requirements":null,"sha":"2f0d158a077e40f2150922d0049e33fb21854b1b2d4a795c0bed0a2872fda002"},{"authors":"Christian + Neukirchen","built_at":"2011-05-23T07:00:00.000Z","created_at":"2011-05-23T07:42:19.332Z","description":"Rack + provides minimal, modular and adaptable interface for developing\nweb applications + in Ruby. By wrapping HTTP requests and responses in\nthe simplest way possible, + it unifies and distills the API for web\nservers, web frameworks, and software + in between (the so-called\nmiddleware) into a single method call.\n\nAlso + see http://rack.rubyforge.org.\n","downloads_count":1056409,"metadata":{},"number":"1.2.3","summary":"a + modular Ruby webserver interface","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":null,"prerelease":false,"licenses":null,"requirements":null,"sha":"d1c6f65e54facecd0cd3f06ea60c63a81c8f36497e6ebb575d48cf015b13847f"},{"authors":"Christian + Neukirchen","built_at":"2011-03-12T23:00:00.000Z","created_at":"2011-03-13T14:03:14.786Z","description":"Rack + provides minimal, modular and adaptable interface for developing\nweb applications + in Ruby. By wrapping HTTP requests and responses in\nthe simplest way possible, + it unifies and distills the API for web\nservers, web frameworks, and software + in between (the so-called\nmiddleware) into a single method call.\n\nAlso + see http://rack.rubyforge.org.\n","downloads_count":4952146,"metadata":{},"number":"1.2.2","summary":"a + modular Ruby webserver interface","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":null,"prerelease":false,"licenses":null,"requirements":null,"sha":"6463a86f1d86fa9850f24d32bb398889103c4bca0a1ad34c3f1e6a1cd77e51b3"},{"authors":"Christian + Neukirchen","built_at":"2010-06-14T22:00:00.000Z","created_at":"2010-06-15T09:57:28.836Z","description":"Rack + provides minimal, modular and adaptable interface for developing\nweb applications + in Ruby. By wrapping HTTP requests and responses in\nthe simplest way possible, + it unifies and distills the API for web\nservers, web frameworks, and software + in between (the so-called\nmiddleware) into a single method call.\n\nAlso + see http://rack.rubyforge.org.\n","downloads_count":3175206,"metadata":{},"number":"1.2.1","summary":"a + modular Ruby webserver interface","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":null,"prerelease":false,"licenses":null,"requirements":null,"sha":"72014a9f5b565bd088735f54e6d601a715c5d4d89c89bc387f9ddb9d6f749a2f"},{"authors":"Christian + Neukirchen","built_at":"2010-06-12T22:00:00.000Z","created_at":"2010-06-13T17:53:23.974Z","description":"Rack + provides minimal, modular and adaptable interface for developing\nweb applications + in Ruby. By wrapping HTTP requests and responses in\nthe simplest way possible, + it unifies and distills the API for web\nservers, web frameworks, and software + in between (the so-called\nmiddleware) into a single method call.\n\nAlso + see http://rack.rubyforge.org.\n","downloads_count":24319,"metadata":{},"number":"1.2.0","summary":"a + modular Ruby webserver interface","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":null,"prerelease":false,"licenses":null,"requirements":null,"sha":"dede6fbef9c9f00435d68c90e404e18988dd9e22d4bf3317e7d29b0fa4562f2d"},{"authors":"Christian + Neukirchen","built_at":"2013-02-08T00:00:00.000Z","created_at":"2013-02-08T03:08:42.626Z","description":"Rack + provides minimal, modular and adaptable interface for developing\nweb applications + in Ruby. By wrapping HTTP requests and responses in\nthe simplest way possible, + it unifies and distills the API for web\nservers, web frameworks, and software + in between (the so-called\nmiddleware) into a single method call.\n\nAlso + see http://rack.rubyforge.org.\n","downloads_count":1637287,"metadata":{},"number":"1.1.6","summary":"a + modular Ruby webserver interface","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":null,"prerelease":false,"licenses":[],"requirements":null,"sha":"fd0aaca346d52758e4b152783418c5b6e04861862001c54a0d3715ed08e0ecb8"},{"authors":"Christian + Neukirchen","built_at":"2013-01-13T00:00:00.000Z","created_at":"2013-01-13T22:03:48.342Z","description":"Rack + provides minimal, modular and adaptable interface for developing\nweb applications + in Ruby. By wrapping HTTP requests and responses in\nthe simplest way possible, + it unifies and distills the API for web\nservers, web frameworks, and software + in between (the so-called\nmiddleware) into a single method call.\n\nAlso + see http://rack.rubyforge.org.\n","downloads_count":68469,"metadata":{},"number":"1.1.5","summary":"a + modular Ruby webserver interface","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":null,"prerelease":false,"licenses":[],"requirements":null,"sha":"49cf6108fb5aa606cd121d63a16ba40bd56af83b8e12d9ea06edafdd58a4926d"},{"authors":"Christian + Neukirchen","built_at":"2013-01-07T00:00:00.000Z","created_at":"2013-01-07T02:21:38.382Z","description":"Rack + provides minimal, modular and adaptable interface for developing\nweb applications + in Ruby. By wrapping HTTP requests and responses in\nthe simplest way possible, + it unifies and distills the API for web\nservers, web frameworks, and software + in between (the so-called\nmiddleware) into a single method call.\n\nAlso + see http://rack.rubyforge.org.\n","downloads_count":43667,"metadata":{},"number":"1.1.4","summary":"a + modular Ruby webserver interface","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":null,"prerelease":false,"licenses":[],"requirements":null,"sha":"4d8a7504ac93a872712275e4d5a2b6274ea6e17b7e30dd92d49ec73f329b1909"},{"authors":"Christian + Neukirchen","built_at":"2011-12-28T00:00:00.000Z","created_at":"2011-12-28T02:37:38.280Z","description":"Rack + provides minimal, modular and adaptable interface for developing\nweb applications + in Ruby. By wrapping HTTP requests and responses in\nthe simplest way possible, + it unifies and distills the API for web\nservers, web frameworks, and software + in between (the so-called\nmiddleware) into a single method call.\n\nAlso + see http://rack.rubyforge.org.\n","downloads_count":506617,"metadata":{},"number":"1.1.3","summary":"a + modular Ruby webserver interface","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":null,"prerelease":false,"licenses":null,"requirements":null,"sha":"e774004d0229a82835d21fcfed2feda1b0df1fe7e609d3d4324660890a57ac3e"},{"authors":"Christian + Neukirchen","built_at":"2011-03-12T23:00:00.000Z","created_at":"2011-03-13T14:02:46.405Z","description":"Rack + provides minimal, modular and adaptable interface for developing\nweb applications + in Ruby. By wrapping HTTP requests and responses in\nthe simplest way possible, + it unifies and distills the API for web\nservers, web frameworks, and software + in between (the so-called\nmiddleware) into a single method call.\n\nAlso + see http://rack.rubyforge.org.\n","downloads_count":506232,"metadata":{},"number":"1.1.2","summary":"a + modular Ruby webserver interface","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":null,"prerelease":false,"licenses":null,"requirements":null,"sha":"0caaa479982622042c4af7411a3f9b9748c9b3a5a03b60a0991c7e44a22f15f5"},{"authors":"Christian + Neukirchen","built_at":"2011-02-28T08:00:00.000Z","created_at":"2011-03-01T06:04:51.617Z","description":"Rack + provides minimal, modular and adaptable interface for developing\nweb applications + in Ruby. By wrapping HTTP requests and responses in\nthe simplest way possible, + it unifies and distills the API for web\nservers, web frameworks, and software + in between (the so-called\nmiddleware) into a single method call.\n\nAlso + see http://rack.rubyforge.org.\n","downloads_count":86855,"metadata":{},"number":"1.1.1","summary":"a + modular Ruby webserver interface","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":null,"prerelease":false,"licenses":null,"requirements":null,"sha":"89c18ffce62358c17ba8a4674b500635f6a9debb0bd612d816c998ae16be7148"},{"authors":"Christian + Neukirchen","built_at":"2011-02-09T08:00:00.000Z","created_at":"2011-02-10T03:12:48.548Z","description":"Rack + provides minimal, modular and adaptable interface for developing\nweb applications + in Ruby. By wrapping HTTP requests and responses in\nthe simplest way possible, + it unifies and distills the API for web\nservers, web frameworks, and software + in between (the so-called\nmiddleware) into a single method call.\n\nAlso + see http://rack.rubyforge.org.\n","downloads_count":5477,"metadata":{},"number":"1.1.1.pre","summary":"a + modular Ruby webserver interface","platform":"ruby","rubygems_version":"\u003e + 1.3.1","ruby_version":null,"prerelease":true,"licenses":null,"requirements":null,"sha":"ea26b77b9b55d364ec38d649a98901abbd5ab2317906a947532fd96facfc568c"},{"authors":"Christian + Neukirchen","built_at":"2010-01-03T23:00:00.000Z","created_at":"2010-01-03T23:15:29.326Z","description":"Rack + provides minimal, modular and adaptable interface for developing\nweb applications + in Ruby. By wrapping HTTP requests and responses in\nthe simplest way possible, + it unifies and distills the API for web\nservers, web frameworks, and software + in between (the so-called\nmiddleware) into a single method call.\n\nAlso + see http://rack.rubyforge.org.\n","downloads_count":1850210,"metadata":{},"number":"1.1.0","summary":"a + modular Ruby webserver interface","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":null,"prerelease":false,"licenses":null,"requirements":null,"sha":"96c618247e5f53c20ad51de0b7682ca589abe7070ce5325502054f80ed29011f"},{"authors":"Christian + Neukirchen","built_at":"2009-10-18T01:00:00.000Z","created_at":"2009-10-18T22:45:05.531Z","description":"Rack + provides minimal, modular and adaptable interface for developing web applications + in Ruby. By wrapping HTTP requests and responses in the simplest way possible, + it unifies and distills the API for web servers, web frameworks, and software + in between (the so-called middleware) into a single method call. Also see + http://rack.rubyforge.org.","downloads_count":1793950,"metadata":{},"number":"1.0.1","summary":"a + modular Ruby webserver interface","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":null,"prerelease":false,"licenses":null,"requirements":null,"sha":"78b9d7d82d40a3c2e361fdc93db8652c527d397b4a4eda99e6873e14190ec612"},{"authors":"Christian + Neukirchen","built_at":"2009-04-24T22:00:00.000Z","created_at":"2009-07-25T18:02:12.000Z","description":"Rack + provides minimal, modular and adaptable interface for developing web applications + in Ruby. By wrapping HTTP requests and responses in the simplest way possible, + it unifies and distills the API for web servers, web frameworks, and software + in between (the so-called middleware) into a single method call. Also see + http://rack.rubyforge.org.","downloads_count":88849,"metadata":{},"number":"1.0.0","summary":"a + modular Ruby webserver interface","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":null,"prerelease":false,"licenses":null,"requirements":null,"sha":"b1147fd2991884dfbac9b101b0c88a0f0fc71abbd1bd24fb29cde3fdfc8ebd77"},{"authors":"Christian + Neukirchen","built_at":"2009-01-08T23:00:00.000Z","created_at":"2009-07-25T18:02:13.000Z","description":"Rack + provides minimal, modular and adaptable interface for developing web applications + in Ruby. By wrapping HTTP requests and responses in the simplest way possible, + it unifies and distills the API for web servers, web frameworks, and software + in between (the so-called middleware) into a single method call. Also see + http://rack.rubyforge.org.","downloads_count":23655,"metadata":{},"number":"0.9.1","summary":"a + modular Ruby webserver interface","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":null,"prerelease":false,"licenses":null,"requirements":null,"sha":"0b10d9a9ae7dec712abb18a4e684a660e80c095ee03062dfa48a15f7a643720b"},{"authors":"Christian + Neukirchen","built_at":"2009-01-05T23:00:00.000Z","created_at":"2009-07-25T18:02:13.000Z","description":"Rack + provides minimal, modular and adaptable interface for developing web applications + in Ruby. By wrapping HTTP requests and responses in the simplest way possible, + it unifies and distills the API for web servers, web frameworks, and software + in between (the so-called middleware) into a single method call. Also see + http://rack.rubyforge.org.","downloads_count":5245,"metadata":{},"number":"0.9.0","summary":"a + modular Ruby webserver interface","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":null,"prerelease":false,"licenses":null,"requirements":null,"sha":"412426b5b2c95d60f014469baabf5ed50fc6cca2ec098b5ad32c24eddfab63de"},{"authors":"Christian + Neukirchen","built_at":"2008-08-20T22:00:00.000Z","created_at":"2009-07-25T18:02:13.000Z","description":"Rack + provides minimal, modular and adaptable interface for developing web applications + in Ruby. By wrapping HTTP requests and responses in the simplest way possible, + it unifies and distills the API for web servers, web frameworks, and software + in between (the so-called middleware) into a single method call. Also see + http://rack.rubyforge.org.","downloads_count":8602,"metadata":{},"number":"0.4.0","summary":"a + modular Ruby webserver interface","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":null,"prerelease":false,"licenses":null,"requirements":null,"sha":"720ce53dfe04ab32724871f135d9fe6b9af79070ab4c2b2b22aaf93aa7fa52dd"},{"authors":"Christian + Neukirchen","built_at":"2008-02-25T23:00:00.000Z","created_at":"2009-07-25T18:02:13.000Z","description":"Rack + provides minimal, modular and adaptable interface for developing web applications + in Ruby. By wrapping HTTP requests and responses in the simplest way possible, + it unifies and distills the API for web servers, web frameworks, and software + in between (the so-called middleware) into a single method call. Also see + http://rack.rubyforge.org.","downloads_count":6343,"metadata":{},"number":"0.3.0","summary":"a + modular Ruby webserver interface","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e 0.0.0","prerelease":false,"licenses":null,"requirements":null,"sha":"344a154a0aeaeff1b7114a62263cd42e902521ff6869e6d7159d76e3df066d82"},{"authors":"Christian + Neukirchen","built_at":"2007-05-15T22:00:00.000Z","created_at":"2009-07-25T18:02:13.000Z","description":"Rack + provides minimal, modular and adaptable interface for developing web applications + in Ruby. By wrapping HTTP requests and responses in the simplest way possible, + it unifies and distills the API for web servers, web frameworks, and software + in between (the so-called middleware) into a single method call. Also see + http://rack.rubyforge.org.","downloads_count":4877,"metadata":{},"number":"0.2.0","summary":"a + modular Ruby webserver interface","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e 0.0.0","prerelease":false,"licenses":null,"requirements":null,"sha":"865666f11c3016e89e689078358edb895691170b11482ec252e42ae9c08b0772"},{"authors":"Christian + Neukirchen","built_at":"2007-03-02T23:00:00.000Z","created_at":"2009-07-25T18:02:13.000Z","description":"Rack + provides minimal, modular and adaptable interface for developing web applications + in Ruby. By wrapping HTTP requests and responses in the simplest way possible, + it unifies and distills the API for web servers, web frameworks, and software + in between (the so-called middleware) into a single method call. Also see + http://rack.rubyforge.org.","downloads_count":6926,"metadata":{},"number":"0.1.0","summary":"a + modular Ruby webserver interface","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e 0.0.0","prerelease":false,"licenses":null,"requirements":null,"sha":"ae2a16ef7744acf003a2f1adc0d8c5cbb3dfa614f6f70f7b99165ba5fad3c0ac"}]' + recorded_at: Wed, 09 Aug 2023 17:40:29 GMT diff --git a/updater/spec/fixtures/vcr_cassettes/Dependabot_Updater_Operations_GroupUpdateAllVersions/when_the_snapshot_is_updating_vendored_dependencies/creates_a_pull_request_that_includes_changes_to_the_vendored_files.yml b/updater/spec/fixtures/vcr_cassettes/Dependabot_Updater_Operations_GroupUpdateAllVersions/when_the_snapshot_is_updating_vendored_dependencies/creates_a_pull_request_that_includes_changes_to_the_vendored_files.yml new file mode 100644 index 00000000..04ecc3b2 --- /dev/null +++ b/updater/spec/fixtures/vcr_cassettes/Dependabot_Updater_Operations_GroupUpdateAllVersions/when_the_snapshot_is_updating_vendored_dependencies/creates_a_pull_request_that_includes_changes_to_the_vendored_files.yml @@ -0,0 +1,254 @@ +--- +http_interactions: +- request: + method: get + uri: https://rubygems.org/api/v1/versions/dummy-git-dependency.json + body: + encoding: US-ASCII + string: '' + headers: + User-Agent: + - dependabot-core/0.218.0 excon/0.99.0 ruby/3.1.4 (x86_64-linux) (+https://github.com/dependabot/dependabot-core) + response: + status: + code: 200 + message: OK + headers: + Connection: + - keep-alive + Content-Length: + - '384' + Content-Type: + - application/json; charset=utf-8 + X-Frame-Options: + - SAMEORIGIN + X-Xss-Protection: + - '0' + X-Content-Type-Options: + - nosniff + X-Download-Options: + - noopen + X-Permitted-Cross-Domain-Policies: + - none + Referrer-Policy: + - strict-origin-when-cross-origin + Last-Modified: + - Mon, 14 Dec 2020 17:08:06 GMT + Cache-Control: + - max-age=60, public + Content-Encoding: + - '' + Content-Security-Policy: + - default-src 'self'; font-src 'self' https://fonts.gstatic.com; img-src 'self' + https://secure.gaug.es https://gravatar.com https://www.gravatar.com https://secure.gravatar.com + https://*.fastly-insights.com https://avatars.githubusercontent.com; object-src + 'none'; script-src 'self' https://secure.gaug.es https://www.fastly-insights.com + 'nonce-'; style-src 'self' https://fonts.googleapis.com; connect-src 'self' + https://s3-us-west-2.amazonaws.com/rubygems-dumps/ https://*.fastly-insights.com + https://fastly-insights.com https://api.github.com http://localhost:*; form-action + 'self' https://github.com/login/oauth/authorize; frame-ancestors 'self'; report-uri + https://csp-report.browser-intake-datadoghq.com/api/v2/logs?dd-api-key=pub852fa3e2312391fafa5640b60784e660&dd-evp-origin=content-security-policy&ddsource=csp-report&ddtags=service%3Arubygems.org%2Cversion%3A146af3740941a790a743a2e699036f0d7137b99e%2Cenv%3Aproduction%2Ctrace_id%3A4285453584986361312 + X-Request-Id: + - cb7aac61-54b3-42e9-aadf-50389d975e32 + X-Runtime: + - '0.014696' + Strict-Transport-Security: + - max-age=31536000 + X-Backend: + - F_Rails 44.238.31.117:443 + Accept-Ranges: + - bytes + Date: + - Fri, 02 Jun 2023 15:59:46 GMT + Via: + - 1.1 varnish + Age: + - '0' + X-Served-By: + - cache-lcy-eglc8600048-LCY + X-Cache: + - MISS + X-Cache-Hits: + - '0' + X-Timer: + - S1685721586.853325,VS0,VE168 + Vary: + - Accept-Encoding + Etag: + - '"f59670cf8622242bfb55afc03a027238"' + Server: + - RubyGems.org + body: + encoding: UTF-8 + string: '[{"authors":"Dependabot","built_at":"2019-11-22T00:00:00.000Z","created_at":"2019-11-22T15:24:24.964Z","description":null,"downloads_count":2033,"metadata":{},"number":"1.1.0","summary":"A + dummy package for testing Dependabot","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"3c1b71569ef54c120b0c1d47704409bf9c63de0d581ad6bbb9521634063d7e2d"},{"authors":"Dependabot","built_at":"2019-11-22T00:00:00.000Z","created_at":"2019-11-22T15:24:41.638Z","description":null,"downloads_count":1476,"metadata":{},"number":"1.0.0","summary":"A + dummy package for testing Dependabot","platform":"ruby","rubygems_version":"\u003e= + 0","ruby_version":"\u003e= 0","prerelease":false,"licenses":["MIT"],"requirements":[],"sha":"c020db324e8d21ee9f0e16ffcdc3c025b6da796c4d62e24e952725b76e2b0088"}]' + recorded_at: Fri, 02 Jun 2023 15:59:45 GMT +- request: + method: get + uri: https://github.com/dependabot-fixtures/ruby-dummy-git-dependency.git/info/refs?service=git-upload-pack + body: + encoding: US-ASCII + string: '' + headers: + User-Agent: + - dependabot-core/0.218.0 excon/0.99.0 ruby/3.1.4 (x86_64-linux) (+https://github.com/dependabot/dependabot-core) + response: + status: + code: 200 + message: OK + headers: + Server: + - GitHub-Babel/3.0 + Content-Type: + - application/x-git-upload-pack-advertisement + Content-Security-Policy: + - default-src 'none'; sandbox + Expires: + - Fri, 01 Jan 1980 00:00:00 GMT + Pragma: + - no-cache + Cache-Control: + - no-cache, max-age=0, must-revalidate + Vary: + - Accept-Encoding + Date: + - Fri, 02 Jun 2023 15:59:46 GMT + X-Frame-Options: + - DENY + X-Github-Request-Id: + - DD50:EC5D:56DC982:581CFB3:647A11F2 + body: + encoding: ASCII-8BIT + string: "001e# service=git-upload-pack\n00000155f229d172c826b95f464a82d8ddf8b3efce3825b0 + HEAD\0multi_ack thin-pack side-band side-band-64k ofs-delta shallow deepen-since + deepen-not deepen-relative no-progress include-tag multi_ack_detailed allow-tip-sha1-in-want + allow-reachable-sha1-in-want no-done symref=HEAD:refs/heads/master filter + object-format=sha1 agent=git/github-aebc4fa63a74\n003ff229d172c826b95f464a82d8ddf8b3efce3825b0 + refs/heads/master\n003e20151f9b67c8a04461fa0ee28385b6187b86587b refs/tags/v1.0.0\n003ec0e25c2eb332122873f73acb3b61fb2e261cfd8f + refs/tags/v1.1.0\n0000" + recorded_at: Fri, 02 Jun 2023 15:59:46 GMT +- request: + method: get + uri: https://rubygems.org/api/v1/gems/dummy-git-dependency.json + body: + encoding: US-ASCII + string: '' + headers: + User-Agent: + - dependabot-core/0.218.0 excon/0.99.0 ruby/3.1.4 (x86_64-linux) (+https://github.com/dependabot/dependabot-core) + response: + status: + code: 200 + message: OK + headers: + Connection: + - keep-alive + Content-Length: + - '445' + Content-Type: + - application/json; charset=utf-8 + X-Frame-Options: + - SAMEORIGIN + X-Xss-Protection: + - '0' + X-Content-Type-Options: + - nosniff + X-Download-Options: + - noopen + X-Permitted-Cross-Domain-Policies: + - none + Referrer-Policy: + - strict-origin-when-cross-origin + Access-Control-Allow-Origin: + - "*" + Access-Control-Allow-Methods: + - GET + Access-Control-Max-Age: + - '1728000' + Cache-Control: + - max-age=60, public + Content-Encoding: + - '' + Content-Security-Policy: + - default-src 'self'; font-src 'self' https://fonts.gstatic.com; img-src 'self' + https://secure.gaug.es https://gravatar.com https://www.gravatar.com https://secure.gravatar.com + https://*.fastly-insights.com https://avatars.githubusercontent.com; object-src + 'none'; script-src 'self' https://secure.gaug.es https://www.fastly-insights.com + 'nonce-'; style-src 'self' https://fonts.googleapis.com; connect-src 'self' + https://s3-us-west-2.amazonaws.com/rubygems-dumps/ https://*.fastly-insights.com + https://fastly-insights.com https://api.github.com http://localhost:*; form-action + 'self' https://github.com/login/oauth/authorize; frame-ancestors 'self'; report-uri + https://csp-report.browser-intake-datadoghq.com/api/v2/logs?dd-api-key=pub852fa3e2312391fafa5640b60784e660&dd-evp-origin=content-security-policy&ddsource=csp-report&ddtags=service%3Arubygems.org%2Cversion%3A146af3740941a790a743a2e699036f0d7137b99e%2Cenv%3Aproduction%2Ctrace_id%3A2719169708493862752 + X-Request-Id: + - b3f6e55c-f0e9-4b2c-8deb-e44b382fb5b8 + X-Runtime: + - '0.022959' + Strict-Transport-Security: + - max-age=31536000 + X-Backend: + - F_Rails 44.238.31.117:443 + Accept-Ranges: + - bytes + Date: + - Fri, 02 Jun 2023 15:59:46 GMT + Via: + - 1.1 varnish + Age: + - '0' + X-Served-By: + - cache-lhr7376-LHR + X-Cache: + - MISS + X-Cache-Hits: + - '0' + X-Timer: + - S1685721586.359029,VS0,VE629 + Vary: + - Accept-Encoding + Etag: + - '"8540b24d44eb668142e74c17caf70060"' + Server: + - RubyGems.org + body: + encoding: UTF-8 + string: '{"name":"dummy-git-dependency","downloads":3509,"version":"1.1.0","version_created_at":"2019-11-22T15:24:24.964Z","version_downloads":2033,"platform":"ruby","authors":"Dependabot","info":"A + dummy package for testing Dependabot","licenses":["MIT"],"metadata":{},"yanked":false,"sha":"3c1b71569ef54c120b0c1d47704409bf9c63de0d581ad6bbb9521634063d7e2d","project_uri":"https://rubygems.org/gems/dummy-git-dependency","gem_uri":"https://rubygems.org/gems/dummy-git-dependency-1.1.0.gem","homepage_uri":"http://github.com/dependabot/dummy-git-dependency","wiki_uri":null,"documentation_uri":"https://www.rubydoc.info/gems/dummy-git-dependency/1.1.0","mailing_list_uri":null,"source_code_uri":null,"bug_tracker_uri":null,"changelog_uri":null,"funding_uri":null,"dependencies":{"development":[],"runtime":[]}}' + recorded_at: Fri, 02 Jun 2023 15:59:46 GMT +- request: + method: get + uri: https://github.com/dependabot/dummy-git-dependency.git/info/refs?service=git-upload-pack + body: + encoding: US-ASCII + string: '' + headers: + User-Agent: + - dependabot-core/0.218.0 excon/0.99.0 ruby/3.1.4 (x86_64-linux) (+https://github.com/dependabot/dependabot-core) + response: + status: + code: 401 + message: Unauthorized + headers: + Server: + - GitHub-Babel/3.0 + Content-Security-Policy: + - default-src 'none'; sandbox + Content-Type: + - text/plain; charset=UTF-8 + Www-Authenticate: + - Basic realm="GitHub" + Content-Length: + - '21' + Date: + - Fri, 02 Jun 2023 15:59:46 GMT + X-Frame-Options: + - DENY + X-Github-Request-Id: + - DD52:35CF:108CDB83:10C1816C:647A11F3 + body: + encoding: ASCII-8BIT + string: Repository not found. + recorded_at: Fri, 02 Jun 2023 15:59:47 GMT +recorded_with: VCR 6.1.0 diff --git a/updater/spec/spec_helper.rb b/updater/spec/spec_helper.rb index c57ca52a..fe3386fc 100644 --- a/updater/spec/spec_helper.rb +++ b/updater/spec/spec_helper.rb @@ -3,6 +3,7 @@ require "dependabot/logger" require "logger" +require "rspec/sorbet" require "vcr" require "webmock/rspec" require "yaml" @@ -53,6 +54,8 @@ def job_definition_fixture(path) end end +RSpec::Sorbet.allow_doubles! + VCR.configure do |config| config.cassette_library_dir = "spec/fixtures/vcr_cassettes" config.hook_into :webmock