sorbet-rails 0.3.0 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +5 -2
- data/.travis.yml +7 -1
- data/CONTRIBUTING.md +3 -1
- data/Gemfile +11 -0
- data/README.md +0 -2
- data/{rbi → lib/sorbet-rails/rbi}/activerecord.rbi +118 -86
- data/lib/sorbet-rails/tasks/rails_rbi.rake +15 -6
- data/lib/sorbet-rails/utils.rb +11 -0
- data/sorbet-rails.gemspec +1 -1
- data/spec/bin/run_all_specs.sh +3 -2
- data/spec/bin/run_spec.sh +33 -26
- data/spec/model_rbi_formatter_spec.rb +0 -15
- data/spec/rails_helper.rb +12 -7
- data/spec/rake_rails_rbi_models_spec.rb +22 -5
- data/spec/rake_rails_rbi_routes_spec.rb +0 -1
- data/spec/sorbet_spec.rb +80 -0
- data/spec/support/rails_shared/config/routes.rb +1 -0
- data/spec/support/rails_shared/sorbet_test_cases.rb +120 -0
- data/spec/support/rails_symlinks/sorbet_test_cases.rb +1 -0
- data/spec/support/v4.2/Gemfile +13 -0
- data/spec/support/v4.2/Gemfile.lock +138 -0
- data/spec/support/v4.2/app/controllers/application_controller.rb +1 -0
- data/spec/support/v4.2/app/helpers/application_helper.rb +1 -0
- data/spec/support/v4.2/config/application.rb +1 -0
- data/spec/support/v4.2/config/boot.rb +1 -0
- data/spec/support/v4.2/config/environment.rb +1 -0
- data/spec/support/v4.2/config/environments/development.rb +1 -0
- data/spec/support/v4.2/config/environments/production.rb +1 -0
- data/spec/support/v4.2/config/environments/test.rb +1 -0
- data/spec/support/v4.2/config/initializers/backtrace_silencers.rb +1 -0
- data/spec/support/v4.2/config/initializers/cookies_serializer.rb +1 -0
- data/spec/support/v4.2/config/initializers/filter_parameter_logging.rb +1 -0
- data/spec/support/v4.2/config/initializers/inflections.rb +1 -0
- data/spec/support/v4.2/config/initializers/mime_types.rb +1 -0
- data/spec/support/v4.2/config/initializers/session_store.rb +1 -0
- data/spec/support/v4.2/config/initializers/to_time_preserves_timezone.rb +1 -0
- data/spec/support/v4.2/config/initializers/wrap_parameters.rb +1 -0
- data/spec/support/v4.2/config/routes.rb +1 -0
- data/spec/support/v4.2/db/migrate/20190620001234_create_wizards.rb +1 -0
- data/spec/support/v4.2/db/migrate/20190620003037_create_wands.rb +1 -0
- data/spec/support/v4.2/db/migrate/20190620003739_create_spell_books.rb +1 -0
- data/spec/support/v4.2/db/migrate/20190622000000_add_more_column_types_to_wands.rb +1 -0
- data/spec/support/v4.2/db/schema.rb +1 -0
- data/spec/support/v4.2/db/seeds.rb +1 -0
- data/spec/support/v4.2/sorbet/config +2 -0
- data/spec/support/v4.2/sorbet/rbi/gems/actionmailer.rbi +267 -0
- data/spec/support/v4.2/sorbet/rbi/gems/actionpack.rbi +2885 -0
- data/spec/support/v4.2/sorbet/rbi/gems/actionview.rbi +978 -0
- data/spec/support/v4.2/sorbet/rbi/gems/activejob.rbi +19 -0
- data/spec/support/v4.2/sorbet/rbi/gems/activemodel.rbi +335 -0
- data/spec/support/v4.2/sorbet/rbi/gems/activerecord.rbi +3382 -0
- data/spec/support/v4.2/sorbet/rbi/gems/activesupport.rbi +1892 -0
- data/spec/support/v4.2/sorbet/rbi/gems/arel.rbi +1109 -0
- data/spec/support/v4.2/sorbet/rbi/gems/binding_of_caller.rbi +22 -0
- data/spec/support/v4.2/sorbet/rbi/gems/byebug.rbi +1039 -0
- data/spec/support/v4.2/sorbet/rbi/gems/concurrent-ruby.rbi +218 -0
- data/spec/support/v4.2/sorbet/rbi/gems/crass.rbi +92 -0
- data/spec/support/v4.2/sorbet/rbi/gems/debug_inspector.rbi +18 -0
- data/spec/support/v4.2/sorbet/rbi/gems/erubis.rbi +265 -0
- data/spec/support/v4.2/sorbet/rbi/gems/globalid.rbi +98 -0
- data/spec/support/v4.2/sorbet/rbi/gems/i18n.rbi +186 -0
- data/spec/support/v4.2/sorbet/rbi/gems/jbuilder.rbi +99 -0
- data/spec/support/v4.2/sorbet/rbi/gems/loofah.rbi +129 -0
- data/spec/support/v4.2/sorbet/rbi/gems/mail.rbi +1091 -0
- data/spec/support/v4.2/sorbet/rbi/gems/mini_mime.rbi +45 -0
- data/spec/support/v4.2/sorbet/rbi/gems/minitest.rbi +276 -0
- data/spec/support/v4.2/sorbet/rbi/gems/nokogiri.rbi +1010 -0
- data/spec/support/v4.2/sorbet/rbi/gems/rack-test.rbi +145 -0
- data/spec/support/v4.2/sorbet/rbi/gems/rack.rbi +490 -0
- data/spec/support/v4.2/sorbet/rbi/gems/rails-deprecated_sanitizer.rbi +13 -0
- data/spec/support/v4.2/sorbet/rbi/gems/rails-dom-testing.rbi +76 -0
- data/spec/support/v4.2/sorbet/rbi/gems/rails-html-sanitizer.rbi +90 -0
- data/spec/support/v4.2/sorbet/rbi/gems/railties.rbi +623 -0
- data/spec/support/v4.2/sorbet/rbi/gems/rdoc.rbi +1053 -0
- data/spec/support/v4.2/sorbet/rbi/gems/sdoc.rbi +73 -0
- data/spec/support/v4.2/sorbet/rbi/gems/sorbet-runtime.rbi +647 -0
- data/spec/support/v4.2/sorbet/rbi/gems/sqlite3.rbi +345 -0
- data/spec/support/v4.2/sorbet/rbi/gems/thor.rbi +401 -0
- data/spec/support/v4.2/sorbet/rbi/gems/thread_safe.rbi +81 -0
- data/spec/support/v4.2/sorbet/rbi/gems/tzinfo.rbi +407 -0
- data/spec/support/v4.2/sorbet/rbi/gems/web-console.rbi +136 -0
- data/spec/support/v4.2/sorbet/rbi/hidden-definitions/errors.txt +11998 -0
- data/spec/support/v4.2/sorbet/rbi/hidden-definitions/hidden.rbi +27774 -0
- data/spec/support/v4.2/sorbet/rbi/sorbet-typed/lib/actionmailer/all/actionmailer.rbi +13 -0
- data/spec/support/v4.2/sorbet/rbi/sorbet-typed/lib/actionpack/all/actionpack.rbi +13 -0
- data/spec/support/v4.2/sorbet/rbi/sorbet-typed/lib/activerecord/all/activerecord.rbi +51 -0
- data/spec/support/v4.2/sorbet/rbi/sorbet-typed/lib/activesupport/all/activesupport.rbi +107 -0
- data/spec/support/v4.2/sorbet/rbi/sorbet-typed/lib/bundler/all/bundler.rbi +8547 -0
- data/spec/support/v4.2/sorbet/rbi/sorbet-typed/lib/railties/all/railties.rbi +22 -0
- data/spec/support/v4.2/sorbet/rbi/sorbet-typed/lib/ruby/all/open3.rbi +111 -0
- data/spec/support/v4.2/sorbet/rbi/sorbet-typed/lib/ruby/all/resolv.rbi +543 -0
- data/spec/support/v4.2/sorbet/rbi/todo.rbi +8 -0
- data/spec/support/v4.2/sorbet_test_cases.rb +1 -0
- data/spec/support/v4.2/test/test_helper.rb +1 -0
- data/spec/support/v5.0/Gemfile +13 -0
- data/spec/support/v5.0/Gemfile.lock +130 -0
- data/spec/support/v5.0/app/channels/application_cable/channel.rb +1 -0
- data/spec/support/v5.0/app/channels/application_cable/connection.rb +1 -0
- data/spec/support/v5.0/app/jobs/application_job.rb +1 -0
- data/spec/support/v5.0/app/mailers/application_mailer.rb +1 -0
- data/spec/support/v5.0/config/application.rb +1 -0
- data/spec/support/v5.0/config/boot.rb +1 -0
- data/spec/support/v5.0/config/environment.rb +1 -0
- data/spec/support/v5.0/config/environments/development.rb +1 -0
- data/spec/support/v5.0/config/environments/production.rb +1 -0
- data/spec/support/v5.0/config/environments/test.rb +1 -0
- data/spec/support/v5.0/config/initializers/application_controller_renderer.rb +1 -0
- data/spec/support/v5.0/config/initializers/backtrace_silencers.rb +1 -0
- data/spec/support/v5.0/config/initializers/cors.rb +1 -0
- data/spec/support/v5.0/config/initializers/filter_parameter_logging.rb +1 -0
- data/spec/support/v5.0/config/initializers/inflections.rb +1 -0
- data/spec/support/v5.0/config/initializers/mime_types.rb +1 -0
- data/spec/support/v5.0/config/initializers/new_framework_defaults.rb +1 -0
- data/spec/support/v5.0/config/initializers/wrap_parameters.rb +1 -0
- data/spec/support/v5.0/config/puma.rb +1 -0
- data/spec/support/v5.0/config/routes.rb +1 -0
- data/spec/support/v5.0/db/schema.rb +1 -0
- data/spec/support/v5.0/db/seeds.rb +1 -0
- data/spec/support/v5.0/rails_symlinks/config/routes.rb +1 -0
- data/spec/support/v5.0/sorbet/config +2 -0
- data/spec/support/v5.0/sorbet/rbi/gems/actioncable.rbi +309 -0
- data/spec/support/v5.0/sorbet/rbi/gems/actionmailer.rbi +379 -0
- data/spec/support/v5.0/sorbet/rbi/gems/actionpack.rbi +3150 -0
- data/spec/support/v5.0/sorbet/rbi/gems/actionview.rbi +1093 -0
- data/spec/support/v5.0/sorbet/rbi/gems/activejob.rbi +252 -0
- data/spec/support/v5.0/sorbet/rbi/gems/activemodel.rbi +562 -0
- data/spec/support/v5.0/sorbet/rbi/gems/activerecord.rbi +4060 -0
- data/spec/support/v5.0/sorbet/rbi/gems/activesupport.rbi +2078 -0
- data/spec/support/v5.0/sorbet/rbi/gems/arel.rbi +1222 -0
- data/spec/support/v5.0/sorbet/rbi/gems/byebug.rbi +1039 -0
- data/spec/support/v5.0/sorbet/rbi/gems/concurrent-ruby.rbi +1587 -0
- data/spec/support/v5.0/sorbet/rbi/gems/crass.rbi +92 -0
- data/spec/support/v5.0/sorbet/rbi/gems/erubis.rbi +265 -0
- data/spec/support/v5.0/sorbet/rbi/gems/globalid.rbi +98 -0
- data/spec/support/v5.0/sorbet/rbi/gems/i18n.rbi +191 -0
- data/spec/support/v5.0/sorbet/rbi/gems/loofah.rbi +129 -0
- data/spec/support/v5.0/sorbet/rbi/gems/mail.rbi +1091 -0
- data/spec/support/v5.0/sorbet/rbi/gems/method_source.rbi +63 -0
- data/spec/support/v5.0/sorbet/rbi/gems/mini_mime.rbi +45 -0
- data/spec/support/v5.0/sorbet/rbi/gems/minitest.rbi +276 -0
- data/spec/support/v5.0/sorbet/rbi/gems/nokogiri.rbi +1010 -0
- data/spec/support/v5.0/sorbet/rbi/gems/puma.rbi +570 -0
- data/spec/support/v5.0/sorbet/rbi/gems/rack-test.rbi +145 -0
- data/spec/support/v5.0/sorbet/rbi/gems/rack.rbi +534 -0
- data/spec/support/v5.0/sorbet/rbi/gems/rails-dom-testing.rbi +67 -0
- data/spec/support/v5.0/sorbet/rbi/gems/rails-html-sanitizer.rbi +90 -0
- data/spec/support/v5.0/sorbet/rbi/gems/railties.rbi +682 -0
- data/spec/support/v5.0/sorbet/rbi/gems/rake.rbi +255 -0
- data/spec/support/v5.0/sorbet/rbi/gems/sorbet-runtime.rbi +647 -0
- data/spec/support/v5.0/sorbet/rbi/gems/sqlite3.rbi +345 -0
- data/spec/support/v5.0/sorbet/rbi/gems/thor.rbi +401 -0
- data/spec/support/v5.0/sorbet/rbi/gems/thread_safe.rbi +81 -0
- data/spec/support/v5.0/sorbet/rbi/gems/tzinfo.rbi +407 -0
- data/spec/support/v5.0/sorbet/rbi/hidden-definitions/errors.txt +10523 -0
- data/spec/support/v5.0/sorbet/rbi/hidden-definitions/hidden.rbi +24969 -0
- data/spec/support/v5.0/sorbet/rbi/sorbet-typed/lib/actionmailer/all/actionmailer.rbi +13 -0
- data/spec/support/v5.0/sorbet/rbi/sorbet-typed/lib/actionpack/all/actionpack.rbi +13 -0
- data/spec/support/v5.0/sorbet/rbi/sorbet-typed/lib/activerecord/all/activerecord.rbi +51 -0
- data/spec/support/v5.0/sorbet/rbi/sorbet-typed/lib/activesupport/all/activesupport.rbi +107 -0
- data/spec/support/v5.0/sorbet/rbi/sorbet-typed/lib/bundler/all/bundler.rbi +8547 -0
- data/spec/support/v5.0/sorbet/rbi/sorbet-typed/lib/railties/all/railties.rbi +22 -0
- data/spec/support/v5.0/sorbet/rbi/sorbet-typed/lib/ruby/all/open3.rbi +111 -0
- data/spec/support/v5.0/sorbet/rbi/sorbet-typed/lib/ruby/all/resolv.rbi +543 -0
- data/spec/support/v5.0/sorbet/rbi/todo.rbi +10 -0
- data/spec/support/v5.0/sorbet_test_cases.rb +1 -0
- data/spec/support/v5.0/test/test_helper.rb +1 -0
- data/spec/support/v5.1/Gemfile +13 -0
- data/spec/support/v5.1/Gemfile.lock +15 -20
- data/spec/support/v5.1/app/channels/application_cable/channel.rb +1 -0
- data/spec/support/v5.1/app/channels/application_cable/connection.rb +1 -0
- data/spec/support/v5.1/app/jobs/application_job.rb +1 -0
- data/spec/support/v5.1/app/mailers/application_mailer.rb +1 -0
- data/spec/support/v5.1/bin/rails +0 -5
- data/spec/support/v5.1/bin/rake +0 -5
- data/spec/support/v5.1/config/application.rb +1 -0
- data/spec/support/v5.1/config/boot.rb +1 -0
- data/spec/support/v5.1/config/environment.rb +1 -0
- data/spec/support/v5.1/config/environments/development.rb +2 -1
- data/spec/support/v5.1/config/environments/production.rb +1 -0
- data/spec/support/v5.1/config/environments/test.rb +1 -0
- data/spec/support/v5.1/config/initializers/application_controller_renderer.rb +1 -0
- data/spec/support/v5.1/config/initializers/backtrace_silencers.rb +1 -0
- data/spec/support/v5.1/config/initializers/cors.rb +1 -0
- data/spec/support/v5.1/config/initializers/filter_parameter_logging.rb +1 -0
- data/spec/support/v5.1/config/initializers/inflections.rb +1 -0
- data/spec/support/v5.1/config/initializers/mime_types.rb +1 -0
- data/spec/support/v5.1/config/initializers/wrap_parameters.rb +1 -0
- data/spec/support/v5.1/config/puma.rb +1 -0
- data/spec/support/v5.1/config/spring.rb +1 -0
- data/spec/support/v5.1/db/schema.rb +1 -0
- data/spec/support/v5.1/db/seeds.rb +1 -0
- data/spec/support/v5.1/sorbet/config +2 -0
- data/spec/support/v5.1/sorbet/rbi/gems/actioncable.rbi +309 -0
- data/spec/support/v5.1/sorbet/rbi/gems/actionmailer.rbi +429 -0
- data/spec/support/v5.1/sorbet/rbi/gems/actionpack.rbi +3171 -0
- data/spec/support/v5.1/sorbet/rbi/gems/actionview.rbi +1115 -0
- data/spec/support/v5.1/sorbet/rbi/gems/activejob.rbi +273 -0
- data/spec/support/v5.1/sorbet/rbi/gems/activemodel.rbi +547 -0
- data/spec/support/v5.1/sorbet/rbi/gems/activerecord.rbi +4093 -0
- data/spec/support/v5.1/sorbet/rbi/gems/activesupport.rbi +2180 -0
- data/spec/support/v5.1/sorbet/rbi/gems/arel.rbi +1220 -0
- data/spec/support/v5.1/sorbet/rbi/gems/byebug.rbi +1039 -0
- data/spec/support/v5.1/sorbet/rbi/gems/concurrent-ruby.rbi +1587 -0
- data/spec/support/v5.1/sorbet/rbi/gems/crass.rbi +92 -0
- data/spec/support/v5.1/sorbet/rbi/gems/erubi.rbi +26 -0
- data/spec/support/v5.1/sorbet/rbi/gems/globalid.rbi +98 -0
- data/spec/support/v5.1/sorbet/rbi/gems/i18n.rbi +191 -0
- data/spec/support/v5.1/sorbet/rbi/gems/loofah.rbi +129 -0
- data/spec/support/v5.1/sorbet/rbi/gems/mail.rbi +1091 -0
- data/spec/support/v5.1/sorbet/rbi/gems/method_source.rbi +63 -0
- data/spec/support/v5.1/sorbet/rbi/gems/mini_mime.rbi +45 -0
- data/spec/support/v5.1/sorbet/rbi/gems/minitest.rbi +276 -0
- data/spec/support/v5.1/sorbet/rbi/gems/nokogiri.rbi +1010 -0
- data/spec/support/v5.1/sorbet/rbi/gems/puma.rbi +570 -0
- data/spec/support/v5.1/sorbet/rbi/gems/rack-test.rbi +161 -0
- data/spec/support/v5.1/sorbet/rbi/gems/rack.rbi +534 -0
- data/spec/support/v5.1/sorbet/rbi/gems/rails-dom-testing.rbi +67 -0
- data/spec/support/v5.1/sorbet/rbi/gems/rails-html-sanitizer.rbi +90 -0
- data/spec/support/v5.1/sorbet/rbi/gems/railties.rbi +707 -0
- data/spec/support/v5.1/sorbet/rbi/gems/rake.rbi +255 -0
- data/spec/support/v5.1/sorbet/rbi/gems/sorbet-runtime.rbi +647 -0
- data/spec/support/v5.1/sorbet/rbi/gems/sqlite3.rbi +345 -0
- data/spec/support/v5.1/sorbet/rbi/gems/thor.rbi +450 -0
- data/spec/support/v5.1/sorbet/rbi/gems/thread_safe.rbi +81 -0
- data/spec/support/v5.1/sorbet/rbi/gems/tzinfo.rbi +407 -0
- data/spec/support/v5.1/sorbet/rbi/hidden-definitions/errors.txt +10226 -0
- data/spec/support/v5.1/sorbet/rbi/hidden-definitions/hidden.rbi +24635 -0
- data/spec/support/v5.1/sorbet/rbi/sorbet-typed/lib/actionmailer/all/actionmailer.rbi +13 -0
- data/spec/support/v5.1/sorbet/rbi/sorbet-typed/lib/actionpack/all/actionpack.rbi +13 -0
- data/spec/support/v5.1/sorbet/rbi/sorbet-typed/lib/activerecord/all/activerecord.rbi +51 -0
- data/spec/support/v5.1/sorbet/rbi/sorbet-typed/lib/activesupport/all/activesupport.rbi +107 -0
- data/spec/support/v5.1/sorbet/rbi/sorbet-typed/lib/bundler/all/bundler.rbi +8547 -0
- data/spec/support/v5.1/sorbet/rbi/sorbet-typed/lib/railties/all/railties.rbi +22 -0
- data/spec/support/v5.1/sorbet/rbi/sorbet-typed/lib/ruby/all/open3.rbi +111 -0
- data/spec/support/v5.1/sorbet/rbi/sorbet-typed/lib/ruby/all/resolv.rbi +543 -0
- data/spec/support/v5.1/sorbet/rbi/todo.rbi +11 -0
- data/spec/support/v5.1/sorbet_test_cases.rb +1 -0
- data/spec/support/v5.1/test/test_helper.rb +1 -0
- data/spec/support/v5.2/Gemfile +12 -0
- data/spec/support/v5.2/Gemfile.lock +12 -0
- data/spec/support/v5.2/app/channels/application_cable/channel.rb +1 -0
- data/spec/support/v5.2/app/channels/application_cable/connection.rb +1 -0
- data/spec/support/v5.2/app/jobs/application_job.rb +1 -0
- data/spec/support/v5.2/app/mailers/application_mailer.rb +1 -0
- data/spec/support/v5.2/bin/rails +0 -5
- data/spec/support/v5.2/bin/rake +0 -5
- data/spec/support/v5.2/config/application.rb +1 -0
- data/spec/support/v5.2/config/boot.rb +1 -0
- data/spec/support/v5.2/config/environment.rb +1 -0
- data/spec/support/v5.2/config/environments/development.rb +1 -0
- data/spec/support/v5.2/config/environments/production.rb +1 -0
- data/spec/support/v5.2/config/environments/test.rb +1 -0
- data/spec/support/v5.2/config/initializers/application_controller_renderer.rb +1 -0
- data/spec/support/v5.2/config/initializers/backtrace_silencers.rb +1 -0
- data/spec/support/v5.2/config/initializers/cors.rb +1 -0
- data/spec/support/v5.2/config/initializers/filter_parameter_logging.rb +1 -0
- data/spec/support/v5.2/config/initializers/inflections.rb +1 -0
- data/spec/support/v5.2/config/initializers/mime_types.rb +1 -0
- data/spec/support/v5.2/config/initializers/wrap_parameters.rb +1 -0
- data/spec/support/v5.2/config/puma.rb +1 -0
- data/spec/support/v5.2/config/spring.rb +1 -0
- data/spec/support/v5.2/db/schema.rb +1 -0
- data/spec/support/v5.2/db/seeds.rb +1 -0
- data/spec/support/v5.2/sorbet/rbi/gems/sorbet-runtime.rbi +644 -0
- data/spec/support/v5.2/sorbet/rbi/hidden-definitions/errors.txt +12 -6
- data/spec/support/v5.2/sorbet/rbi/hidden-definitions/hidden.rbi +57 -19
- data/spec/support/v5.2/sorbet_test_cases.rb +1 -0
- data/spec/support/v5.2/test/test_helper.rb +1 -0
- data/spec/support/v5.2-no-sorbet/Gemfile +57 -0
- data/spec/support/v5.2-no-sorbet/Gemfile.lock +140 -0
- data/spec/support/v5.2-no-sorbet/README.md +24 -0
- data/spec/support/v5.2-no-sorbet/Rakefile +6 -0
- data/spec/support/v5.2-no-sorbet/app/channels/application_cable/channel.rb +5 -0
- data/spec/support/v5.2-no-sorbet/app/channels/application_cable/connection.rb +5 -0
- data/spec/support/v5.2-no-sorbet/app/controllers +1 -0
- data/spec/support/v5.2-no-sorbet/app/jobs/application_job.rb +3 -0
- data/spec/support/v5.2-no-sorbet/app/mailers/application_mailer.rb +5 -0
- data/spec/support/v5.2-no-sorbet/app/models +1 -0
- data/spec/support/v5.2-no-sorbet/app/views/layouts/mailer.html.erb +13 -0
- data/spec/support/v5.2-no-sorbet/app/views/layouts/mailer.text.erb +1 -0
- data/spec/support/v5.2-no-sorbet/bin/bundle +3 -0
- data/spec/support/v5.2-no-sorbet/bin/rails +4 -0
- data/spec/support/v5.2-no-sorbet/bin/rake +4 -0
- data/spec/support/v5.2-no-sorbet/bin/setup +33 -0
- data/spec/support/v5.2-no-sorbet/bin/spring +17 -0
- data/spec/support/v5.2-no-sorbet/bin/update +28 -0
- data/spec/support/v5.2-no-sorbet/config/application.rb +36 -0
- data/spec/support/v5.2-no-sorbet/config/boot.rb +4 -0
- data/spec/support/v5.2-no-sorbet/config/cable.yml +10 -0
- data/spec/support/v5.2-no-sorbet/config/credentials.yml.enc +1 -0
- data/spec/support/v5.2-no-sorbet/config/database.yml +25 -0
- data/spec/support/v5.2-no-sorbet/config/environment.rb +6 -0
- data/spec/support/v5.2-no-sorbet/config/environments/development.rb +55 -0
- data/spec/support/v5.2-no-sorbet/config/environments/production.rb +86 -0
- data/spec/support/v5.2-no-sorbet/config/environments/test.rb +47 -0
- data/spec/support/v5.2-no-sorbet/config/initializers/application_controller_renderer.rb +9 -0
- data/spec/support/v5.2-no-sorbet/config/initializers/backtrace_silencers.rb +8 -0
- data/spec/support/v5.2-no-sorbet/config/initializers/cors.rb +17 -0
- data/spec/support/v5.2-no-sorbet/config/initializers/filter_parameter_logging.rb +5 -0
- data/spec/support/v5.2-no-sorbet/config/initializers/inflections.rb +17 -0
- data/spec/support/v5.2-no-sorbet/config/initializers/mime_types.rb +5 -0
- data/spec/support/v5.2-no-sorbet/config/initializers/wrap_parameters.rb +15 -0
- data/spec/support/v5.2-no-sorbet/config/locales/en.yml +33 -0
- data/spec/support/v5.2-no-sorbet/config/puma.rb +35 -0
- data/spec/support/v5.2-no-sorbet/config/routes.rb +1 -0
- data/spec/support/v5.2-no-sorbet/config/spring.rb +7 -0
- data/spec/support/v5.2-no-sorbet/config/storage.yml +34 -0
- data/spec/support/v5.2-no-sorbet/config.ru +5 -0
- data/spec/support/v5.2-no-sorbet/db/migrate +1 -0
- data/spec/support/v5.2-no-sorbet/db/schema.rb +48 -0
- data/spec/support/v5.2-no-sorbet/db/seeds.rb +8 -0
- data/spec/support/v5.2-no-sorbet/lib/tasks/.keep +0 -0
- data/spec/support/v5.2-no-sorbet/log/.keep +0 -0
- data/spec/support/v5.2-no-sorbet/public/robots.txt +1 -0
- data/spec/support/v5.2-no-sorbet/storage/.keep +0 -0
- data/spec/support/v5.2-no-sorbet/test/controllers/.keep +0 -0
- data/spec/support/v5.2-no-sorbet/test/fixtures/.keep +0 -0
- data/spec/support/v5.2-no-sorbet/test/fixtures/files/.keep +0 -0
- data/spec/support/v5.2-no-sorbet/test/integration/.keep +0 -0
- data/spec/support/v5.2-no-sorbet/test/mailers/.keep +0 -0
- data/spec/support/v5.2-no-sorbet/test/models/.keep +0 -0
- data/spec/support/v5.2-no-sorbet/test/test_helper.rb +11 -0
- data/spec/support/v5.2-no-sorbet/tmp/.keep +0 -0
- data/spec/support/v5.2-no-sorbet/vendor/.keep +0 -0
- data/spec/support/v6.0/Gemfile +12 -0
- data/spec/support/v6.0/Gemfile.lock +157 -0
- data/spec/support/v6.0/app/channels/application_cable/channel.rb +1 -0
- data/spec/support/v6.0/app/channels/application_cable/connection.rb +1 -0
- data/spec/support/v6.0/app/jobs/application_job.rb +1 -0
- data/spec/support/v6.0/app/mailers/application_mailer.rb +1 -0
- data/spec/support/v6.0/config/application.rb +1 -0
- data/spec/support/v6.0/config/boot.rb +1 -0
- data/spec/support/v6.0/config/environment.rb +1 -0
- data/spec/support/v6.0/config/environments/development.rb +1 -0
- data/spec/support/v6.0/config/environments/production.rb +1 -0
- data/spec/support/v6.0/config/environments/test.rb +1 -0
- data/spec/support/v6.0/config/initializers/application_controller_renderer.rb +1 -0
- data/spec/support/v6.0/config/initializers/backtrace_silencers.rb +1 -0
- data/spec/support/v6.0/config/initializers/cors.rb +1 -0
- data/spec/support/v6.0/config/initializers/filter_parameter_logging.rb +1 -0
- data/spec/support/v6.0/config/initializers/inflections.rb +1 -0
- data/spec/support/v6.0/config/initializers/mime_types.rb +1 -0
- data/spec/support/v6.0/config/initializers/wrap_parameters.rb +1 -0
- data/spec/support/v6.0/config/puma.rb +1 -0
- data/spec/support/v6.0/config/routes.rb +1 -0
- data/spec/support/v6.0/db/schema.rb +1 -0
- data/spec/support/v6.0/db/seeds.rb +1 -0
- data/spec/support/v6.0/sorbet/config +2 -0
- data/spec/support/v6.0/sorbet/rbi/gems/actioncable.rbi +245 -0
- data/spec/support/v6.0/sorbet/rbi/gems/actionmailbox.rbi +56 -0
- data/spec/support/v6.0/sorbet/rbi/gems/actionmailer.rbi +69 -0
- data/spec/support/v6.0/sorbet/rbi/gems/actionpack.rbi +2401 -0
- data/spec/support/v6.0/sorbet/rbi/gems/actiontext.rbi +32 -0
- data/spec/support/v6.0/sorbet/rbi/gems/actionview.rbi +1033 -0
- data/spec/support/v6.0/sorbet/rbi/gems/activejob.rbi +362 -0
- data/spec/support/v6.0/sorbet/rbi/gems/activemodel.rbi +750 -0
- data/spec/support/v6.0/sorbet/rbi/gems/activerecord.rbi +5552 -0
- data/spec/support/v6.0/sorbet/rbi/gems/activestorage.rbi +217 -0
- data/spec/support/v6.0/sorbet/rbi/gems/activesupport.rbi +2430 -0
- data/spec/support/v6.0/sorbet/rbi/gems/byebug.rbi +1039 -0
- data/spec/support/v6.0/sorbet/rbi/gems/concurrent-ruby.rbi +1587 -0
- data/spec/support/v6.0/sorbet/rbi/gems/crass.rbi +92 -0
- data/spec/support/v6.0/sorbet/rbi/gems/erubi.rbi +26 -0
- data/spec/support/v6.0/sorbet/rbi/gems/globalid.rbi +98 -0
- data/spec/support/v6.0/sorbet/rbi/gems/i18n.rbi +191 -0
- data/spec/support/v6.0/sorbet/rbi/gems/loofah.rbi +129 -0
- data/spec/support/v6.0/sorbet/rbi/gems/mail.rbi +1542 -0
- data/spec/support/v6.0/sorbet/rbi/gems/marcel.rbi +12 -0
- data/spec/support/v6.0/sorbet/rbi/gems/method_source.rbi +63 -0
- data/spec/support/v6.0/sorbet/rbi/gems/mini_mime.rbi +45 -0
- data/spec/support/v6.0/sorbet/rbi/gems/minitest.rbi +276 -0
- data/spec/support/v6.0/sorbet/rbi/gems/nokogiri.rbi +1010 -0
- data/spec/support/v6.0/sorbet/rbi/gems/puma.rbi +570 -0
- data/spec/support/v6.0/sorbet/rbi/gems/rack-test.rbi +161 -0
- data/spec/support/v6.0/sorbet/rbi/gems/rack.rbi +522 -0
- data/spec/support/v6.0/sorbet/rbi/gems/rails-dom-testing.rbi +67 -0
- data/spec/support/v6.0/sorbet/rbi/gems/rails-html-sanitizer.rbi +90 -0
- data/spec/support/v6.0/sorbet/rbi/gems/railties.rbi +760 -0
- data/spec/support/v6.0/sorbet/rbi/gems/rake.rbi +254 -0
- data/spec/support/v6.0/sorbet/rbi/gems/sorbet-runtime.rbi +647 -0
- data/spec/support/v6.0/sorbet/rbi/gems/sqlite3.rbi +353 -0
- data/spec/support/v6.0/sorbet/rbi/gems/thor.rbi +450 -0
- data/spec/support/v6.0/sorbet/rbi/gems/thread_safe.rbi +81 -0
- data/spec/support/v6.0/sorbet/rbi/gems/tzinfo.rbi +407 -0
- data/spec/support/v6.0/sorbet/rbi/gems/zeitwerk.rbi +119 -0
- data/spec/support/v6.0/sorbet/rbi/hidden-definitions/errors.txt +12074 -0
- data/spec/support/v6.0/sorbet/rbi/hidden-definitions/hidden.rbi +28231 -0
- data/spec/support/v6.0/sorbet/rbi/sorbet-typed/lib/actionmailer/all/actionmailer.rbi +13 -0
- data/spec/support/v6.0/sorbet/rbi/sorbet-typed/lib/actionpack/all/actionpack.rbi +13 -0
- data/spec/support/v6.0/sorbet/rbi/sorbet-typed/lib/activerecord/all/activerecord.rbi +51 -0
- data/spec/support/v6.0/sorbet/rbi/sorbet-typed/lib/activesupport/all/activesupport.rbi +107 -0
- data/spec/support/v6.0/sorbet/rbi/sorbet-typed/lib/bundler/all/bundler.rbi +8547 -0
- data/spec/support/v6.0/sorbet/rbi/sorbet-typed/lib/railties/all/railties.rbi +22 -0
- data/spec/support/v6.0/sorbet/rbi/sorbet-typed/lib/ruby/all/open3.rbi +111 -0
- data/spec/support/v6.0/sorbet/rbi/sorbet-typed/lib/ruby/all/resolv.rbi +543 -0
- data/spec/support/v6.0/sorbet/rbi/todo.rbi +11 -0
- data/spec/support/v6.0/sorbet_test_cases.rb +1 -0
- data/spec/support/v6.0/test/channels/application_cable/connection_test.rb +1 -0
- data/spec/support/v6.0/test/test_helper.rb +1 -0
- data/spec/test_data/v4.2/expected_srb_tc_output.txt +178 -0
- data/spec/test_data/v5.0/expected_internal_metadata.rbi +155 -0
- data/spec/test_data/v5.0/expected_schema_migration.rbi +128 -0
- data/spec/test_data/v5.0/expected_srb_tc_output.txt +178 -0
- data/spec/test_data/v5.1/expected_internal_metadata.rbi +161 -0
- data/spec/test_data/v5.1/expected_schema_migration.rbi +134 -0
- data/spec/test_data/v5.1/expected_srb_tc_output.txt +160 -0
- data/spec/test_data/v5.2/expected_attachment.rbi +137 -0
- data/spec/test_data/v5.2/expected_blob.rbi +149 -0
- data/spec/test_data/v5.2/expected_internal_metadata.rbi +161 -0
- data/spec/test_data/v5.2/expected_schema_migration.rbi +134 -0
- data/spec/test_data/v5.2/expected_srb_tc_output.txt +160 -0
- data/spec/test_data/v5.2-no-sorbet/expected_attachment.rbi +137 -0
- data/spec/test_data/v5.2-no-sorbet/expected_blob.rbi +149 -0
- data/spec/test_data/v5.2-no-sorbet/expected_internal_metadata.rbi +161 -0
- data/spec/test_data/v5.2-no-sorbet/expected_no_routes.rbi +11 -0
- data/spec/test_data/v5.2-no-sorbet/expected_potion.rbi +128 -0
- data/spec/test_data/v5.2-no-sorbet/expected_routes.rbi +43 -0
- data/spec/test_data/v5.2-no-sorbet/expected_schema_migration.rbi +134 -0
- data/spec/test_data/v5.2-no-sorbet/expected_spell_book.rbi +161 -0
- data/spec/test_data/v5.2-no-sorbet/expected_srb_tc_output.txt +160 -0
- data/spec/test_data/v5.2-no-sorbet/expected_wand.rbi +311 -0
- data/spec/test_data/v5.2-no-sorbet/expected_wizard.rbi +254 -0
- data/spec/test_data/v5.2-no-sorbet/expected_wizard_wo_spellbook.rbi +254 -0
- data/spec/test_data/v6.0/expected_attachment.rbi +149 -0
- data/spec/test_data/v6.0/expected_blob.rbi +161 -0
- data/spec/test_data/v6.0/expected_internal_metadata.rbi +173 -0
- data/spec/test_data/v6.0/expected_schema_migration.rbi +146 -0
- data/spec/test_data/v6.0/expected_srb_tc_output.txt +160 -0
- data/spec/utils_spec.rb +24 -0
- metadata +573 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 319136a77de53915ea8e2999617f3942dc9913dd
|
4
|
+
data.tar.gz: e3cd87219252f35701df8647edcf752244bf0534
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fbd53d9c25ae7d561d1a817f07c042fc7f014a3765726dfdefc7d2ab528a0321463d3f2511bbcdf1dcc4a9a6d10b973eaf4f0497f2b59b3edd6fe947f0ca178e
|
7
|
+
data.tar.gz: b5e9cdb6b32400026629532bdb75da9aee0518432dac9608ac68b7587ec8d04c602a0aa2983ff9ff905f8220fe2a89ad4ea5b479d302cfda2dd5349dbf74b892
|
data/.gitignore
CHANGED
@@ -42,7 +42,7 @@ build-iPhoneSimulator/
|
|
42
42
|
|
43
43
|
# for a library or gem, you might want to ignore these files since the code is
|
44
44
|
# intended to run in multiple environments; otherwise, check them in:
|
45
|
-
Gemfile.lock
|
45
|
+
/Gemfile.lock
|
46
46
|
.ruby-version
|
47
47
|
.ruby-gemset
|
48
48
|
|
@@ -80,4 +80,7 @@ Gemfile.lock
|
|
80
80
|
/spec/support/**/sorbet/rails-rbi/*
|
81
81
|
/spec/support/**/sorbet/rails-rbi/**/*
|
82
82
|
|
83
|
-
|
83
|
+
# Ignore sorbet files in v5.2-no-sorbet
|
84
|
+
/spec/support/v5.2-no-sorbet/sorbet_test_cases.rb
|
85
|
+
/spec/support/v5.2-no-sorbet/sorbet/*
|
86
|
+
/spec/support/v5.2-no-sorbet/sorbet/**/*
|
data/.travis.yml
CHANGED
@@ -15,6 +15,11 @@ rvm:
|
|
15
15
|
- 2.6
|
16
16
|
- ruby-head
|
17
17
|
matrix:
|
18
|
+
include:
|
19
|
+
- rvm: 2.5
|
20
|
+
env: RAILS_VERSION=5.2 SORBET_VERSION=0.4.4386
|
21
|
+
- rvm: 2.5
|
22
|
+
env: TEST_SRB_INIT=true
|
18
23
|
exclude:
|
19
24
|
- rvm: 2.3
|
20
25
|
env: RAILS_VERSION=6.0
|
@@ -22,6 +27,7 @@ matrix:
|
|
22
27
|
env: RAILS_VERSION=6.0
|
23
28
|
allow_failures:
|
24
29
|
- rvm: ruby-head
|
30
|
+
- env: RAILS_VERSION=5.2
|
25
31
|
before_install:
|
26
32
|
- gem install bundler -v 2.0.1 --no-doc
|
27
33
|
- gem install bundler -v 1.17.3 --no-doc
|
@@ -34,5 +40,5 @@ deploy:
|
|
34
40
|
secure: AVQi+tC5+HEoGgOKj/+/UeizOkwgVoB8zdPrd48/H9rx1KsAAmQ+2N9srOnrrEkm9I/bvHLOs0JpM96IiXFhztzrDefkaYQc1Zhu3tbWKZf6kuw0gabTMGhx3JsLoQiYRbJYea1qfrL0XlvQTxgkaa4zGJQaIBIZ97X7jlG5lVcys7JGjUFkozGJgS0t2HDffgDPLs3SiWR380Zvo4xcogw9tFHg5MuirZM/bXb9C/WhdDmKV9LbM8bTkJBjkZ0jbzKITtDJWSCXzdjRebLesTVN6F6cNWkwp2TumefgpQId4uGa5iUN8nXriqN890jjeZ3xHDq7xF0dRZgr8TyreocevCtNPCl+12c9ook0+mJn2GFTJL4W9BTuBGkBFekcQZ5MChWywcJ280iuPfX56Ilpt0wkCtWgB0k+k+eGTgEUv0iLykRFytNfiXr1oySG6mzxcUMf90IxfIKMydjFl8ZmAoTmZDfECtk59IW3PRwfHnNiNwmGMIGz9x9geO0wORWWnqdAwvHnQ7wMdScbSZ/VIPvpBdNe3rbhh4xAXXen+t1V0jvAlkBng9GLCwaRWuAsQG3fvRCbjWGxVmCLaQjUqIoJOtNVgeww+s5bXc8eVUtJ2UNRNnlN78lCWrRBhEfgRoyhVzl47vSZjhOE/2JlmQhpot9nwmMOz1h9wk8=
|
35
41
|
gem: sorbet-rails
|
36
42
|
on:
|
43
|
+
tags: true
|
37
44
|
repo: chanzuckerberg/sorbet-rails
|
38
|
-
branch: setup_travis
|
data/CONTRIBUTING.md
CHANGED
@@ -85,8 +85,10 @@ You can also switch to a version of Rails with `RAILS_VERSION`:
|
|
85
85
|
|
86
86
|
```sh
|
87
87
|
❯ RAILS_VERSION=4.2 ./spec/bin/run_spec.sh
|
88
|
+
❯ RAILS_VERSION=5.0 ./spec/bin/run_spec.sh
|
88
89
|
❯ RAILS_VERSION=5.1 ./spec/bin/run_spec.sh
|
89
90
|
❯ RAILS_VERSION=5.2 ./spec/bin/run_spec.sh
|
91
|
+
❯ RAILS_VERSION=6.0 ./spec/bin/run_spec.sh
|
90
92
|
```
|
91
93
|
|
92
94
|
#### Debugging
|
@@ -107,7 +109,7 @@ execution to stop, which will then start a debugger. For more, check out the
|
|
107
109
|
|
108
110
|
### Writing Tests
|
109
111
|
|
110
|
-
Tests are in the `_spec.rb` files in the [`spec/`](spec/) directory.
|
112
|
+
Tests are in the `_spec.rb` files in the [`spec/`](spec/) directory. Sorbet's `srb tc` test cases are in [`spec/support/rails_shared/sorbet_test_cases.rb`](spec/support/rails_shared/sorbet_test_cases.rb).
|
111
113
|
|
112
114
|
Rails apps are stored in [`spec/support/`](spec/support/). Code shared across Rails versions
|
113
115
|
(models, views, controllers) are in [`spec/support/rails_shared/`](spec/support/rails_shared/)
|
data/Gemfile
CHANGED
@@ -38,3 +38,14 @@ else
|
|
38
38
|
gem "bundler", ">= 2.0"
|
39
39
|
gem "sqlite3", "~> 1.4.1"
|
40
40
|
end
|
41
|
+
|
42
|
+
sorbet_version = ENV["SORBET_VERSION"]
|
43
|
+
if sorbet_version
|
44
|
+
# mostly used to test against a stable version of Sorbet in Travis.
|
45
|
+
gem 'sorbet', sorbet_version
|
46
|
+
gem 'sorbet-runtime', sorbet_version
|
47
|
+
else
|
48
|
+
# prefer to test against latest version because sorbet is updated frequently
|
49
|
+
gem 'sorbet'
|
50
|
+
gem 'sorbet-runtime'
|
51
|
+
end
|
data/README.md
CHANGED
@@ -13,8 +13,6 @@ This gem adds a few Rake tasks to generate Ruby Interface (RBI) files for dynami
|
|
13
13
|
|
14
14
|
1. Follow the steps [here](https://sorbet.org/docs/adopting) to set up the latest version of Sorbet, up to being able to run `srb tc`.
|
15
15
|
|
16
|
-
Note: Do not add `sorbet-rails` to your Gemfile until after you've set up Sorbet. `sorbet-rails` adds RBI files that may [break](https://github.com/sorbet/sorbet/issues/1158) `srb init`.
|
17
|
-
|
18
16
|
2. Add `sorbet-rails` to your Gemfile and install them with Bundler.
|
19
17
|
|
20
18
|
```
|
@@ -3,7 +3,7 @@ class ActiveRecord::Relation
|
|
3
3
|
extend T::Sig
|
4
4
|
extend T::Generic
|
5
5
|
include Enumerable
|
6
|
-
include
|
6
|
+
include SorbetRails::CustomFinderMethods
|
7
7
|
|
8
8
|
Elem = type_member(fixed: ActiveRecord::Base)
|
9
9
|
|
@@ -17,47 +17,28 @@ class ActiveRecord::Relation
|
|
17
17
|
def to_a; end
|
18
18
|
|
19
19
|
# This is part of both FinderMethods & Enumerable module.
|
20
|
-
#
|
21
|
-
#
|
22
|
-
#
|
23
|
-
#
|
20
|
+
# These methods would return 1 single element when there is no limit, and return an
|
21
|
+
# array of element when there is a limit passed in.
|
22
|
+
# The more common use case is to find 1 object. We use that as the default sig
|
23
|
+
# and add custom first_n, last_n method for the cases that return an array
|
24
24
|
sig { params(args: T.untyped).returns(Elem) }
|
25
25
|
def find(*args); end
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
Elem = type_member(fixed: ActiveRecord::Base)
|
32
|
-
|
33
|
-
# -- << and aliases
|
34
|
-
sig { params(records: T.any(Elem, T::Array[Elem])).returns(T.self_type) }
|
35
|
-
def <<(*records); end
|
36
|
-
sig { params(records: T.any(Elem, T::Array[Elem])).returns(T.self_type) }
|
37
|
-
def append(*records); end
|
38
|
-
sig { params(records: T.any(Elem, T::Array[Elem])).returns(T.self_type) }
|
39
|
-
def push(*records); end
|
40
|
-
sig { params(records: T.any(Elem, T::Array[Elem])).returns(T.self_type) }
|
41
|
-
def concat(*records); end
|
42
|
-
end
|
43
|
-
|
44
|
-
|
45
|
-
module ActiveRecord::Querying::Typed
|
46
|
-
extend T::Sig
|
47
|
-
extend T::Generic
|
48
|
-
Elem = type_member(fixed: ActiveRecord::Base)
|
26
|
+
sig { params(limit: T.nilable(Integer)).returns(T.nilable(Elem)) }
|
27
|
+
def first(limit = nil); end
|
28
|
+
sig { params(limit: T.nilable(Integer)).returns(T.nilable(Elem)) }
|
29
|
+
def last(limit = nil); end
|
49
30
|
|
50
|
-
# --
|
51
|
-
sig { params(
|
52
|
-
def exists?(
|
53
|
-
sig {
|
54
|
-
def any
|
55
|
-
sig {
|
56
|
-
def many
|
57
|
-
sig {
|
58
|
-
def none
|
59
|
-
sig {
|
60
|
-
def one
|
31
|
+
# -- place here to avoid conflicts with sorbet generated gem rbi
|
32
|
+
sig { params(conditions: T.untyped).returns(T::Boolean) }
|
33
|
+
def exists?(conditions = nil); end
|
34
|
+
sig { returns(T::Boolean) }
|
35
|
+
def any?; end
|
36
|
+
sig { returns(T::Boolean) }
|
37
|
+
def many?; end
|
38
|
+
sig { returns(T::Boolean) }
|
39
|
+
def none?; end
|
40
|
+
sig { returns(T::Boolean) }
|
41
|
+
def one?; end
|
61
42
|
|
62
43
|
# -- finder methods
|
63
44
|
sig { returns(Elem) }
|
@@ -90,18 +71,45 @@ module ActiveRecord::Querying::Typed
|
|
90
71
|
sig { returns(T.nilable(Elem)) }
|
91
72
|
def second_to_last; end
|
92
73
|
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
74
|
+
sig { params(arg: T.untyped, args: T.untyped).returns(T.nilable(Elem)) }
|
75
|
+
def find_by(arg, *args); end
|
76
|
+
sig { params(arg: T.untyped, args: T.untyped).returns(Elem) }
|
77
|
+
def find_by!(arg, *args); end
|
78
|
+
end
|
79
|
+
|
80
|
+
class ActiveRecord::Associations::CollectionProxy < ActiveRecord::Relation
|
81
|
+
extend T::Generic
|
82
|
+
|
83
|
+
Elem = type_member(fixed: ActiveRecord::Base)
|
84
|
+
|
85
|
+
sig { params(block: T.proc.params(e: Elem).void).void }
|
86
|
+
def each(&block); end
|
87
|
+
|
88
|
+
sig { returns(T::Array[Elem]) }
|
89
|
+
def to_a; end
|
90
|
+
|
91
|
+
# -- << and aliases
|
92
|
+
sig { params(records: T.any(Elem, T::Array[Elem])).returns(T.self_type) }
|
93
|
+
def <<(*records); end
|
94
|
+
sig { params(records: T.any(Elem, T::Array[Elem])).returns(T.self_type) }
|
95
|
+
def append(*records); end
|
96
|
+
sig { params(records: T.any(Elem, T::Array[Elem])).returns(T.self_type) }
|
97
|
+
def push(*records); end
|
98
|
+
sig { params(records: T.any(Elem, T::Array[Elem])).returns(T.self_type) }
|
99
|
+
def concat(*records); end
|
100
|
+
|
101
|
+
# -- Overridden finder methods
|
102
|
+
sig { params(args: T.untyped).returns(Elem) }
|
104
103
|
def find(*args); end
|
104
|
+
# sig { params(limit: T.nilable(Integer)).returns(T.nilable(Elem)) }
|
105
|
+
# def last(limit = nil); end
|
106
|
+
end
|
107
|
+
|
108
|
+
module SorbetRails::CustomFinderMethods
|
109
|
+
extend T::Sig
|
110
|
+
extend T::Generic
|
111
|
+
Elem = type_member(fixed: ActiveRecord::Base)
|
112
|
+
|
105
113
|
# These are custom finder methods to provide strong type for secondary use case of first, last & find
|
106
114
|
# See sorbet_rails/custom_finder_methods
|
107
115
|
sig { params(limit: Integer).returns(T::Array[Elem]) }
|
@@ -111,23 +119,11 @@ module ActiveRecord::Querying::Typed
|
|
111
119
|
sig { params(args: T::Array[T.any(Integer, String)]).returns(T::Array[Elem]) }
|
112
120
|
def find_n(*args); end
|
113
121
|
|
114
|
-
|
115
|
-
def find_by(*args, &block); end
|
116
|
-
|
117
|
-
sig { params(args: T.untyped, block: T.nilable(T.proc.void)).returns(Elem) }
|
118
|
-
def find_by!(*args, &block); end
|
119
|
-
|
122
|
+
# allow common cases of find_by
|
120
123
|
sig { params(id: Integer).returns(T.nilable(Elem)) }
|
121
124
|
def find_by_id(id); end
|
122
|
-
|
123
125
|
sig { params(id: Integer).returns(Elem) }
|
124
126
|
def find_by_id!(id); end
|
125
|
-
|
126
|
-
# -- Calculation
|
127
|
-
# There can be a complication of using count with .group
|
128
|
-
# https://api.rubyonrails.org/classes/ActiveRecord/Calculations.html#method-i-count
|
129
|
-
# sig { params(args: T.untyped, block: T.nilable(T.proc.void)).returns(Integer) }
|
130
|
-
# def count(*args, &block); end
|
131
127
|
end
|
132
128
|
|
133
129
|
module ActiveRecord::QueryMethods
|
@@ -139,37 +135,73 @@ module ActiveRecord::QueryMethods
|
|
139
135
|
end
|
140
136
|
|
141
137
|
class ActiveRecord::Base
|
142
|
-
extend
|
138
|
+
extend SorbetRails::CustomFinderMethods
|
143
139
|
extend T::Generic
|
144
140
|
Elem = type_template(fixed: ActiveRecord::Base)
|
145
|
-
include ActiveRecord::AttributeMethods::Dirty
|
146
|
-
include ActiveModel::Dirty
|
147
|
-
end
|
148
141
|
|
149
|
-
|
150
|
-
extend T::Generic
|
151
|
-
Elem = type_template(fixed: ApplicationRecord)
|
152
|
-
end
|
142
|
+
# -- place here to avoid conflicts with sorbet generated gem rbis
|
153
143
|
|
154
|
-
|
155
|
-
|
144
|
+
# These methods would return 1 single element when there is no limit, and return an
|
145
|
+
# array of element when there is a limit passed in.
|
146
|
+
# The more common use case is to find 1 object. We use that as the default sig
|
147
|
+
# and add custom first_n, last_n method for the cases that return an array
|
148
|
+
sig { params(args: T.untyped).returns(Elem) }
|
149
|
+
def self.find(*args); end
|
150
|
+
sig { params(limit: T.nilable(Integer)).returns(T.nilable(Elem)) }
|
151
|
+
def self.first(limit = nil); end
|
152
|
+
sig { params(limit: T.nilable(Integer)).returns(T.nilable(Elem)) }
|
153
|
+
def self.last(limit = nil); end
|
156
154
|
|
157
|
-
|
158
|
-
|
155
|
+
# -- place here to avoid conflicts with sorbet generated gem rbi
|
156
|
+
sig { params(conditions: T.untyped).returns(T::Boolean) }
|
157
|
+
def self.exists?(conditions = nil); end
|
158
|
+
sig { returns(T::Boolean) }
|
159
|
+
def self.any?; end
|
160
|
+
sig { returns(T::Boolean) }
|
161
|
+
def self.many?; end
|
162
|
+
sig { returns(T::Boolean) }
|
163
|
+
def self.none?; end
|
164
|
+
sig { returns(T::Boolean) }
|
165
|
+
def self.one?; end
|
159
166
|
|
160
|
-
|
161
|
-
|
167
|
+
# -- finder methods
|
168
|
+
sig { returns(Elem) }
|
169
|
+
def self.first!; end
|
170
|
+
sig { returns(Elem) }
|
171
|
+
def self.second!; end
|
172
|
+
sig { returns(T.nilable(Elem)) }
|
173
|
+
def self.second; end
|
174
|
+
sig { returns(Elem) }
|
175
|
+
def self.third!; end
|
176
|
+
sig { returns(T.nilable(Elem)) }
|
177
|
+
def self.third; end
|
178
|
+
sig { returns(Elem) }
|
179
|
+
def self.fourth!; end
|
180
|
+
sig { returns(T.nilable(Elem)) }
|
181
|
+
def self.fourth; end
|
182
|
+
sig { returns(Elem) }
|
183
|
+
def self.fifth!; end
|
184
|
+
sig { returns(T.nilable(Elem)) }
|
185
|
+
def self.fifth; end
|
162
186
|
|
163
|
-
sig {
|
164
|
-
def
|
187
|
+
sig { returns(Elem) }
|
188
|
+
def self.last!; end
|
189
|
+
sig { returns(Elem) }
|
190
|
+
def self.third_to_last!; end
|
191
|
+
sig { returns(T.nilable(Elem)) }
|
192
|
+
def self.third_to_last; end
|
193
|
+
sig { returns(Elem) }
|
194
|
+
def self.second_to_last!; end
|
195
|
+
sig { returns(T.nilable(Elem)) }
|
196
|
+
def self.second_to_last; end
|
165
197
|
|
166
|
-
sig { returns(T
|
167
|
-
def
|
198
|
+
sig { params(arg: T.untyped, args: T.untyped).returns(T.nilable(Elem)) }
|
199
|
+
def self.find_by(arg, *args); end
|
200
|
+
sig { params(arg: T.untyped, args: T.untyped).returns(Elem) }
|
201
|
+
def self.find_by!(arg, *args); end
|
168
202
|
end
|
169
203
|
|
170
|
-
|
171
|
-
extend T::
|
172
|
-
|
173
|
-
sig { params(attr_name: Symbol, options: T.untyped).returns(T::Boolean) }
|
174
|
-
def saved_change_to_attribute?(attr_name, **options); end
|
204
|
+
class ApplicationRecord < ActiveRecord::Base
|
205
|
+
extend T::Generic
|
206
|
+
Elem = type_template(fixed: ApplicationRecord)
|
175
207
|
end
|
@@ -1,5 +1,10 @@
|
|
1
1
|
require("sorbet-rails/model_rbi_formatter")
|
2
2
|
require("sorbet-rails/routes_rbi_formatter")
|
3
|
+
require("sorbet-rails/utils")
|
4
|
+
|
5
|
+
# this is ugly but it's a way to get the current directory of this script
|
6
|
+
# maybe someone coming along will know a better way
|
7
|
+
@@sorbet_rails_rake_dir = File.dirname(__FILE__)
|
3
8
|
|
4
9
|
namespace :rails_rbi do
|
5
10
|
|
@@ -16,12 +21,9 @@ namespace :rails_rbi do
|
|
16
21
|
|
17
22
|
desc "Generate rbi for rails models. Pass models name to regenrate rbi for only the given models."
|
18
23
|
task models: :environment do |t, args|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
# https://github.com/rails/rails/blob/master/railties/lib/rails/application/finisher.rb#L116
|
23
|
-
# But this is not applied to Rails.application.eager_load! method
|
24
|
-
Zeitwerk::Loader.eager_load_all if defined?(Zeitwerk)
|
24
|
+
SorbetRails::Utils.rails_eager_load_all!
|
25
|
+
|
26
|
+
copy_bundled_rbi
|
25
27
|
|
26
28
|
all_models = Set.new(ActiveRecord::Base.descendants + whitelisted_models - blacklisted_models)
|
27
29
|
|
@@ -37,6 +39,13 @@ namespace :rails_rbi do
|
|
37
39
|
end
|
38
40
|
end
|
39
41
|
|
42
|
+
def copy_bundled_rbi
|
43
|
+
bundled_rbi_path = File.join(@@sorbet_rails_rake_dir, "..", "rbi", ".")
|
44
|
+
copy_to_path = Rails.root.join("sorbet", "rails-rbi")
|
45
|
+
FileUtils.mkdir_p(File.dirname(copy_to_path))
|
46
|
+
FileUtils.cp_r(bundled_rbi_path, copy_to_path)
|
47
|
+
end
|
48
|
+
|
40
49
|
def generate_rbis_for_models(model_classes, available_classes)
|
41
50
|
available_class_names = Set.new(available_classes.map { |c| c.name })
|
42
51
|
formatted = model_classes.map do |model_class|
|
@@ -0,0 +1,11 @@
|
|
1
|
+
|
2
|
+
module SorbetRails::Utils
|
3
|
+
def self.rails_eager_load_all!
|
4
|
+
# need to eager load to see all models
|
5
|
+
Rails.configuration.eager_load_namespaces.each { |ns| ns.try(:eager_load!) }
|
6
|
+
# Rails 6.0 change the loading logic to use Zeitwerk
|
7
|
+
# https://github.com/rails/rails/blob/master/railties/lib/rails/application/finisher.rb#L116
|
8
|
+
# But this is not applied to Rails.application.eager_load! method
|
9
|
+
Zeitwerk::Loader.eager_load_all if defined?(Zeitwerk)
|
10
|
+
end
|
11
|
+
end
|
data/sorbet-rails.gemspec
CHANGED
data/spec/bin/run_all_specs.sh
CHANGED
@@ -6,8 +6,9 @@ wd="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
|
6
6
|
RAILS_VERSION=4.2 bash $wd/run_spec.sh
|
7
7
|
RAILS_VERSION=5.0 bash $wd/run_spec.sh
|
8
8
|
RAILS_VERSION=5.1 bash $wd/run_spec.sh
|
9
|
-
RAILS_VERSION=5.2 bash $wd/run_spec.sh
|
10
9
|
RAILS_VERSION=6.0 bash $wd/run_spec.sh
|
11
10
|
|
12
|
-
|
11
|
+
TEST_SRB_INIT=1 bash $wd/run_spec.sh
|
12
|
+
|
13
|
+
# Always end with the default version, which is Rails 5.2
|
13
14
|
sh $wd/run_spec.sh
|
data/spec/bin/run_spec.sh
CHANGED
@@ -3,31 +3,38 @@
|
|
3
3
|
|
4
4
|
# need to use bash so that $wd returns the location of the script
|
5
5
|
wd="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
6
|
+
current_dir=$(pwd)
|
7
|
+
|
8
|
+
if [[ -z $RAILS_VERSION ]]; then
|
9
|
+
if [[ -z $TEST_SRB_INIT ]]; then
|
10
|
+
rails_dir="$wd/../support/v5.2"
|
11
|
+
else
|
12
|
+
rails_dir="$wd/../support/v5.2-no-sorbet"
|
13
|
+
fi
|
14
|
+
else
|
15
|
+
rails_dir="$wd/../support/v$RAILS_VERSION"
|
16
|
+
fi
|
17
|
+
|
18
|
+
bundle_version=$([ "$RAILS_VERSION" == 4.2 ] && echo "_1.17.3_" || echo "")
|
19
|
+
|
20
|
+
# clean up & install gems
|
6
21
|
rm $wd/../../Gemfile.lock 2>/dev/null # clean up Gemfile.lock first
|
22
|
+
bundle $bundle_version install
|
23
|
+
|
24
|
+
echo $rails_dir
|
25
|
+
|
26
|
+
# update gems in rails_dir
|
27
|
+
cd $rails_dir
|
28
|
+
bundle $bundle_version install
|
29
|
+
|
30
|
+
# move back to current dir to run test
|
31
|
+
cd $current_dir
|
7
32
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
;;
|
17
|
-
5.1)
|
18
|
-
echo 'run spec with Rails 5.1'
|
19
|
-
RAILS_VERSION=5.1 bundle update && RAILS_VERSION=5.1 bundle exec rake
|
20
|
-
;;
|
21
|
-
5.2)
|
22
|
-
echo 'run spec with Rails 5.2'
|
23
|
-
RAILS_VERSION=5.2 bundle update && RAILS_VERSION=5.2 bundle exec rake
|
24
|
-
;;
|
25
|
-
6.0)
|
26
|
-
echo 'run spec with Rails 6.0'
|
27
|
-
RAILS_VERSION=6.0 bundle update && RAILS_VERSION=6.0 bundle exec rake
|
28
|
-
;;
|
29
|
-
*)
|
30
|
-
echo 'run default'
|
31
|
-
bundle update && bundle exec rake
|
32
|
-
;;
|
33
|
-
esac
|
33
|
+
if [[ -z $RAILS_VERSION ]]; then
|
34
|
+
echo "---- Run DEFAULT ----"
|
35
|
+
bundle update && bundle exec rake
|
36
|
+
else
|
37
|
+
echo "---- Run $RAILS_VERSION ----"
|
38
|
+
RAILS_VERSION=$RAILS_VERSION bundle $bundle_version update
|
39
|
+
RAILS_VERSION=$RAILS_VERSION bundle $bundle_version exec rake
|
40
|
+
fi
|
@@ -3,21 +3,6 @@ require 'sorbet-rails/model_rbi_formatter'
|
|
3
3
|
|
4
4
|
RSpec.describe ModelRbiFormatter do
|
5
5
|
|
6
|
-
it 'loads all the models in the app' do
|
7
|
-
expected_models = [
|
8
|
-
Potion,
|
9
|
-
SpellBook,
|
10
|
-
Wand,
|
11
|
-
Wizard,
|
12
|
-
]
|
13
|
-
|
14
|
-
Rails.application.eager_load!
|
15
|
-
# Needed for Rails 6.0
|
16
|
-
Zeitwerk::Loader.eager_load_all if defined?(Zeitwerk)
|
17
|
-
all_models = ActiveRecord::Base.descendants
|
18
|
-
expect((expected_models - all_models)).to eql([])
|
19
|
-
end
|
20
|
-
|
21
6
|
it 'does not throw an error when given an abstract class' do
|
22
7
|
formatter = ModelRbiFormatter.new(Potion, ['Potion'])
|
23
8
|
expect_match_file(
|
data/spec/rails_helper.rb
CHANGED
@@ -22,7 +22,7 @@ rails_folder =
|
|
22
22
|
when "6.0"
|
23
23
|
"v6.0"
|
24
24
|
else
|
25
|
-
"v5.2"
|
25
|
+
ENV["TEST_SRB_INIT"] ? "v5.2-no-sorbet" : "v5.2"
|
26
26
|
end
|
27
27
|
|
28
28
|
TEST_DATA_FOLDER = "spec/test_data/#{rails_folder}"
|
@@ -31,10 +31,16 @@ require "support/#{rails_folder}/config/environment"
|
|
31
31
|
|
32
32
|
ActiveRecord::Migration.maintain_test_schema!
|
33
33
|
|
34
|
+
require 'rake_helper'
|
35
|
+
|
34
36
|
RSpec.configure do |config|
|
35
37
|
config.before(:suite) do
|
36
38
|
next if ENV["DISABLE_DATABASE_CLEANER"] == 'true'
|
37
|
-
DatabaseCleaner.clean_with(:truncation, {
|
39
|
+
DatabaseCleaner.clean_with(:truncation, {
|
40
|
+
pre_count: true,
|
41
|
+
reset_ids: false,
|
42
|
+
except: %w(ar_internal_metadata),
|
43
|
+
})
|
38
44
|
end
|
39
45
|
|
40
46
|
config.around(:each) do |example|
|
@@ -42,11 +48,10 @@ RSpec.configure do |config|
|
|
42
48
|
example.run
|
43
49
|
next
|
44
50
|
end
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
end
|
51
|
+
DatabaseCleaner.strategy = :truncation, {
|
52
|
+
pre_count: true,
|
53
|
+
reset_ids: false,
|
54
|
+
}
|
50
55
|
DatabaseCleaner.start
|
51
56
|
example.run
|
52
57
|
DatabaseCleaner.clean
|
@@ -1,8 +1,7 @@
|
|
1
1
|
require 'rails_helper'
|
2
|
-
require 'rake_helper'
|
3
2
|
|
4
3
|
RSpec.describe 'rake rails_rbi:models', type: :task do
|
5
|
-
let!(:
|
4
|
+
let!(:generated_dir_path) { Rails.root.join("sorbet", "rails-rbi", "models") }
|
6
5
|
|
7
6
|
it "preloads the Rails environment" do
|
8
7
|
expect(task.prerequisites).to include("environment")
|
@@ -11,7 +10,7 @@ RSpec.describe 'rake rails_rbi:models', type: :task do
|
|
11
10
|
it "generates model files correctly" do
|
12
11
|
task.invoke
|
13
12
|
expect_files(
|
14
|
-
base_dir:
|
13
|
+
base_dir: generated_dir_path,
|
15
14
|
files: [
|
16
15
|
'potion.rbi',
|
17
16
|
'spell_book.rbi',
|
@@ -19,12 +18,30 @@ RSpec.describe 'rake rails_rbi:models', type: :task do
|
|
19
18
|
'wizard.rbi',
|
20
19
|
]
|
21
20
|
)
|
21
|
+
if Object.const_defined?('ActiveStorage')
|
22
|
+
expect_files(
|
23
|
+
base_dir: generated_dir_path.join('active_storage'),
|
24
|
+
files: [
|
25
|
+
'attachment.rbi',
|
26
|
+
'blob.rbi',
|
27
|
+
],
|
28
|
+
)
|
29
|
+
end
|
30
|
+
if Object.const_defined?('ActiveRecord::InternalMetadata')
|
31
|
+
expect_files(
|
32
|
+
base_dir: generated_dir_path.join('active_record'),
|
33
|
+
files: [
|
34
|
+
'internal_metadata.rbi',
|
35
|
+
'schema_migration.rbi',
|
36
|
+
]
|
37
|
+
)
|
38
|
+
end
|
22
39
|
end
|
23
40
|
|
24
41
|
it 'generates selected model correctly' do
|
25
42
|
task.invoke("Wizard")
|
26
43
|
expect_files(
|
27
|
-
base_dir:
|
44
|
+
base_dir: generated_dir_path,
|
28
45
|
files: [
|
29
46
|
'wizard.rbi',
|
30
47
|
]
|
@@ -34,7 +51,7 @@ RSpec.describe 'rake rails_rbi:models', type: :task do
|
|
34
51
|
it 'generates more than 1 selected models correctly' do
|
35
52
|
task.invoke("Wizard","SpellBook")
|
36
53
|
expect_files(
|
37
|
-
base_dir:
|
54
|
+
base_dir: generated_dir_path,
|
38
55
|
files: [
|
39
56
|
'spell_book.rbi',
|
40
57
|
'wizard.rbi',
|