sorbet-rails 0.5.1 → 0.5.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +3 -10
- data/.travis.yml +0 -2
- data/Gemfile +2 -2
- data/README.md +2 -1
- data/Rakefile +4 -15
- data/lib/sorbet-rails/gem_plugins/kaminari_plugin.rb +3 -4
- data/lib/sorbet-rails/model_plugins/active_record_enum.rb +0 -8
- data/lib/sorbet-rails/model_plugins/active_record_finder_methods.rb +3 -0
- data/lib/sorbet-rails/model_plugins/active_record_named_scope.rb +4 -3
- data/lib/sorbet-rails/model_plugins/active_record_querying.rb +6 -7
- data/lib/sorbet-rails/model_plugins/active_relation_where_not.rb +2 -2
- data/lib/sorbet-rails/model_plugins/custom_finder_methods.rb +2 -5
- data/lib/sorbet-rails/model_plugins/enumerable_collections.rb +15 -0
- data/lib/sorbet-rails/model_plugins/plugins.rb +1 -1
- data/lib/sorbet-rails/model_rbi_formatter.rb +11 -13
- data/lib/sorbet-rails/model_utils.rb +49 -2
- data/lib/sorbet-rails/railtie.rb +16 -1
- data/lib/sorbet-rails/routes_rbi_formatter.rb +48 -34
- data/sorbet-rails.gemspec +1 -1
- data/spec/bin/run_all_specs.sh +0 -2
- data/spec/bin/run_spec.sh +1 -5
- data/spec/generators/rails-template.rb +24 -17
- data/spec/generators/sorbet_test_cases.rb +78 -40
- data/spec/rails_helper.rb +1 -1
- data/spec/sorbet_spec.rb +16 -14
- data/spec/support/v4.2/Gemfile.lock +6 -6
- data/spec/support/v4.2/app/models/application_record.rb +1 -2
- data/spec/support/v4.2/app/models/spell_book.rb +6 -0
- data/spec/support/v4.2/app/models/wizard.rb +2 -0
- data/spec/support/v4.2/db/migrate/20190620000003_create_spell_books.rb +1 -0
- data/spec/support/v4.2/db/schema.rb +1 -0
- data/spec/support/v4.2/sorbet_test_cases.rb +78 -40
- data/spec/support/v5.0/Gemfile.lock +6 -6
- data/spec/support/v5.0/app/models/application_record.rb +1 -2
- data/spec/support/v5.0/app/models/spell_book.rb +7 -1
- data/spec/support/v5.0/app/models/wizard.rb +2 -0
- data/spec/support/v5.0/config/initializers/new_framework_defaults.rb +1 -1
- data/spec/support/v5.0/db/migrate/20190620000003_create_spell_books.rb +1 -0
- data/spec/support/v5.0/db/schema.rb +1 -0
- data/spec/support/v5.0/sorbet_test_cases.rb +78 -40
- data/spec/support/v5.1/Gemfile.lock +6 -6
- data/spec/support/v5.1/app/models/application_record.rb +1 -2
- data/spec/support/v5.1/app/models/spell_book.rb +7 -1
- data/spec/support/v5.1/app/models/wizard.rb +2 -0
- data/spec/support/v5.1/db/migrate/20190620000003_create_spell_books.rb +1 -0
- data/spec/support/v5.1/db/schema.rb +1 -0
- data/spec/support/v5.1/sorbet_test_cases.rb +78 -40
- data/spec/support/v5.2/Gemfile +1 -1
- data/spec/support/v5.2/Gemfile.lock +7 -7
- data/spec/support/v5.2/app/models/application_record.rb +1 -2
- data/spec/support/v5.2/app/models/spell_book.rb +7 -1
- data/spec/support/v5.2/app/models/wizard.rb +2 -0
- data/spec/support/v5.2/db/migrate/20190620000003_create_spell_books.rb +1 -0
- data/spec/support/v5.2/db/schema.rb +1 -0
- data/spec/support/v5.2/sorbet_test_cases.rb +78 -40
- data/spec/support/v6.0/Gemfile +2 -3
- data/spec/support/v6.0/Gemfile.lock +64 -64
- data/spec/support/v6.0/app/models/application_record.rb +1 -2
- data/spec/support/v6.0/app/models/spell_book.rb +7 -1
- data/spec/support/v6.0/app/models/wizard.rb +2 -0
- data/spec/support/v6.0/config/puma.rb +3 -0
- data/spec/support/v6.0/db/migrate/20190620000003_create_spell_books.rb +1 -0
- data/spec/support/v6.0/db/schema.rb +1 -0
- data/spec/support/v6.0/sorbet_test_cases.rb +78 -40
- data/spec/test_data/v4.2/expected_no_routes.rbi +3 -10
- data/spec/test_data/v4.2/expected_potion.rbi +356 -52
- data/spec/test_data/v4.2/expected_routes.rbi +10 -4
- data/spec/test_data/v4.2/expected_spell_book.rbi +428 -53
- data/spec/test_data/v4.2/expected_srb_tc_output.txt +1 -80
- data/spec/test_data/v4.2/expected_wand.rbi +347 -19
- data/spec/test_data/v4.2/expected_wizard.rbi +356 -16
- data/spec/test_data/v4.2/expected_wizard_wo_spellbook.rbi +356 -16
- data/spec/test_data/v5.0/expected_internal_metadata.rbi +385 -51
- data/spec/test_data/v5.0/expected_no_routes.rbi +3 -10
- data/spec/test_data/v5.0/expected_potion.rbi +383 -52
- data/spec/test_data/v5.0/expected_routes.rbi +10 -4
- data/spec/test_data/v5.0/expected_schema_migration.rbi +385 -51
- data/spec/test_data/v5.0/expected_spell_book.rbi +455 -53
- data/spec/test_data/v5.0/expected_srb_tc_output.txt +1 -98
- data/spec/test_data/v5.0/expected_wand.rbi +374 -19
- data/spec/test_data/v5.0/expected_wizard.rbi +383 -16
- data/spec/test_data/v5.0/expected_wizard_wo_spellbook.rbi +383 -16
- data/spec/test_data/v5.1/expected_internal_metadata.rbi +403 -51
- data/spec/test_data/v5.1/expected_no_routes.rbi +3 -10
- data/spec/test_data/v5.1/expected_potion.rbi +401 -52
- data/spec/test_data/v5.1/expected_routes.rbi +10 -4
- data/spec/test_data/v5.1/expected_schema_migration.rbi +403 -51
- data/spec/test_data/v5.1/expected_spell_book.rbi +473 -53
- data/spec/test_data/v5.1/expected_srb_tc_output.txt +1 -80
- data/spec/test_data/v5.1/expected_wand.rbi +392 -19
- data/spec/test_data/v5.1/expected_wizard.rbi +401 -16
- data/spec/test_data/v5.1/expected_wizard_wo_spellbook.rbi +401 -16
- data/spec/test_data/v5.2-no-sorbet/expected_attachment.rbi +403 -51
- data/spec/test_data/v5.2-no-sorbet/expected_blob.rbi +421 -51
- data/spec/test_data/v5.2-no-sorbet/expected_internal_metadata.rbi +403 -51
- data/spec/test_data/v5.2-no-sorbet/expected_no_routes.rbi +3 -10
- data/spec/test_data/v5.2-no-sorbet/expected_potion.rbi +401 -52
- data/spec/test_data/v5.2-no-sorbet/expected_routes.rbi +15 -4
- data/spec/test_data/v5.2-no-sorbet/expected_schema_migration.rbi +403 -51
- data/spec/test_data/v5.2-no-sorbet/expected_spell_book.rbi +473 -53
- data/spec/test_data/v5.2-no-sorbet/expected_srb_tc_output.txt +1 -80
- data/spec/test_data/v5.2-no-sorbet/expected_wand.rbi +392 -19
- data/spec/test_data/v5.2-no-sorbet/expected_wizard.rbi +401 -16
- data/spec/test_data/v5.2-no-sorbet/expected_wizard_wo_spellbook.rbi +401 -16
- data/spec/test_data/v5.2/expected_attachment.rbi +403 -51
- data/spec/test_data/v5.2/expected_blob.rbi +421 -51
- data/spec/test_data/v5.2/expected_internal_metadata.rbi +403 -51
- data/spec/test_data/v5.2/expected_no_routes.rbi +3 -10
- data/spec/test_data/v5.2/expected_potion.rbi +401 -52
- data/spec/test_data/v5.2/expected_routes.rbi +15 -4
- data/spec/test_data/v5.2/expected_schema_migration.rbi +403 -51
- data/spec/test_data/v5.2/expected_spell_book.rbi +473 -53
- data/spec/test_data/v5.2/expected_srb_tc_output.txt +1 -80
- data/spec/test_data/v5.2/expected_wand.rbi +392 -19
- data/spec/test_data/v5.2/expected_wizard.rbi +401 -16
- data/spec/test_data/v5.2/expected_wizard_wo_spellbook.rbi +401 -16
- data/spec/test_data/v6.0/expected_attachment.rbi +439 -51
- data/spec/test_data/v6.0/expected_blob.rbi +457 -51
- data/spec/test_data/v6.0/expected_internal_metadata.rbi +439 -51
- data/spec/test_data/v6.0/expected_no_routes.rbi +3 -10
- data/spec/test_data/v6.0/expected_potion.rbi +437 -52
- data/spec/test_data/v6.0/expected_routes.rbi +25 -4
- data/spec/test_data/v6.0/expected_schema_migration.rbi +439 -51
- data/spec/test_data/v6.0/expected_spell_book.rbi +545 -53
- data/spec/test_data/v6.0/expected_srb_tc_output.txt +1 -80
- data/spec/test_data/v6.0/expected_wand.rbi +464 -19
- data/spec/test_data/v6.0/expected_wizard.rbi +473 -16
- data/spec/test_data/v6.0/expected_wizard_wo_spellbook.rbi +473 -16
- metadata +29 -581
- data/spec/support/v4.2/sorbet/config +0 -2
- data/spec/support/v4.2/sorbet/rbi/gems/actionmailer.rbi +0 -267
- data/spec/support/v4.2/sorbet/rbi/gems/actionpack.rbi +0 -2883
- data/spec/support/v4.2/sorbet/rbi/gems/actionview.rbi +0 -978
- data/spec/support/v4.2/sorbet/rbi/gems/activejob.rbi +0 -19
- data/spec/support/v4.2/sorbet/rbi/gems/activemodel.rbi +0 -335
- data/spec/support/v4.2/sorbet/rbi/gems/activerecord.rbi +0 -3385
- data/spec/support/v4.2/sorbet/rbi/gems/activesupport.rbi +0 -1892
- data/spec/support/v4.2/sorbet/rbi/gems/arel.rbi +0 -1109
- data/spec/support/v4.2/sorbet/rbi/gems/byebug.rbi +0 -1039
- data/spec/support/v4.2/sorbet/rbi/gems/concurrent-ruby.rbi +0 -218
- data/spec/support/v4.2/sorbet/rbi/gems/crass.rbi +0 -92
- data/spec/support/v4.2/sorbet/rbi/gems/erubis.rbi +0 -265
- data/spec/support/v4.2/sorbet/rbi/gems/globalid.rbi +0 -98
- data/spec/support/v4.2/sorbet/rbi/gems/i18n.rbi +0 -186
- data/spec/support/v4.2/sorbet/rbi/gems/jbuilder.rbi +0 -99
- data/spec/support/v4.2/sorbet/rbi/gems/loofah.rbi +0 -129
- data/spec/support/v4.2/sorbet/rbi/gems/mail.rbi +0 -1091
- data/spec/support/v4.2/sorbet/rbi/gems/mini_mime.rbi +0 -51
- data/spec/support/v4.2/sorbet/rbi/gems/minitest.rbi +0 -276
- data/spec/support/v4.2/sorbet/rbi/gems/nokogiri.rbi +0 -1010
- data/spec/support/v4.2/sorbet/rbi/gems/parlour.rbi +0 -214
- data/spec/support/v4.2/sorbet/rbi/gems/rack-test.rbi +0 -145
- data/spec/support/v4.2/sorbet/rbi/gems/rack.rbi +0 -490
- data/spec/support/v4.2/sorbet/rbi/gems/rails-deprecated_sanitizer.rbi +0 -13
- data/spec/support/v4.2/sorbet/rbi/gems/rails-dom-testing.rbi +0 -76
- data/spec/support/v4.2/sorbet/rbi/gems/rails-html-sanitizer.rbi +0 -91
- data/spec/support/v4.2/sorbet/rbi/gems/railties.rbi +0 -617
- data/spec/support/v4.2/sorbet/rbi/gems/sqlite3.rbi +0 -345
- data/spec/support/v4.2/sorbet/rbi/gems/thor.rbi +0 -401
- data/spec/support/v4.2/sorbet/rbi/gems/thread_safe.rbi +0 -81
- data/spec/support/v4.2/sorbet/rbi/gems/tzinfo.rbi +0 -407
- data/spec/support/v4.2/sorbet/rbi/sorbet-typed/lib/actionmailer/all/actionmailer.rbi +0 -13
- data/spec/support/v4.2/sorbet/rbi/sorbet-typed/lib/actionpack/all/actionpack.rbi +0 -468
- data/spec/support/v4.2/sorbet/rbi/sorbet-typed/lib/activemodel/all/activemodel.rbi +0 -422
- data/spec/support/v4.2/sorbet/rbi/sorbet-typed/lib/activerecord/all/activerecord.rbi +0 -1263
- data/spec/support/v4.2/sorbet/rbi/sorbet-typed/lib/activesupport/all/activesupport.rbi +0 -458
- data/spec/support/v4.2/sorbet/rbi/sorbet-typed/lib/bundler/all/bundler.rbi +0 -8575
- data/spec/support/v4.2/sorbet/rbi/sorbet-typed/lib/minitest/all/minitest.rbi +0 -99
- data/spec/support/v4.2/sorbet/rbi/sorbet-typed/lib/railties/all/railties.rbi +0 -22
- data/spec/support/v4.2/sorbet/rbi/sorbet-typed/lib/ruby/all/open3.rbi +0 -111
- data/spec/support/v4.2/sorbet/rbi/sorbet-typed/lib/ruby/all/resolv.rbi +0 -543
- data/spec/support/v4.2/sorbet/rbi/todo.rbi +0 -66
- data/spec/support/v5.0/sorbet/config +0 -2
- data/spec/support/v5.0/sorbet/rbi/gems/actionmailer.rbi +0 -331
- data/spec/support/v5.0/sorbet/rbi/gems/actionpack.rbi +0 -2987
- data/spec/support/v5.0/sorbet/rbi/gems/actionview.rbi +0 -1092
- data/spec/support/v5.0/sorbet/rbi/gems/activejob.rbi +0 -230
- data/spec/support/v5.0/sorbet/rbi/gems/activemodel.rbi +0 -562
- data/spec/support/v5.0/sorbet/rbi/gems/activerecord.rbi +0 -3684
- data/spec/support/v5.0/sorbet/rbi/gems/activesupport.rbi +0 -1943
- data/spec/support/v5.0/sorbet/rbi/gems/arel.rbi +0 -1222
- data/spec/support/v5.0/sorbet/rbi/gems/byebug.rbi +0 -1039
- data/spec/support/v5.0/sorbet/rbi/gems/concurrent-ruby.rbi +0 -1587
- data/spec/support/v5.0/sorbet/rbi/gems/crass.rbi +0 -92
- data/spec/support/v5.0/sorbet/rbi/gems/erubis.rbi +0 -265
- data/spec/support/v5.0/sorbet/rbi/gems/globalid.rbi +0 -98
- data/spec/support/v5.0/sorbet/rbi/gems/i18n.rbi +0 -191
- data/spec/support/v5.0/sorbet/rbi/gems/jbuilder.rbi +0 -99
- data/spec/support/v5.0/sorbet/rbi/gems/loofah.rbi +0 -129
- data/spec/support/v5.0/sorbet/rbi/gems/mail.rbi +0 -1091
- data/spec/support/v5.0/sorbet/rbi/gems/mini_mime.rbi +0 -51
- data/spec/support/v5.0/sorbet/rbi/gems/nokogiri.rbi +0 -1010
- data/spec/support/v5.0/sorbet/rbi/gems/parlour.rbi +0 -214
- data/spec/support/v5.0/sorbet/rbi/gems/puma.rbi +0 -570
- data/spec/support/v5.0/sorbet/rbi/gems/rack-test.rbi +0 -145
- data/spec/support/v5.0/sorbet/rbi/gems/rack.rbi +0 -489
- data/spec/support/v5.0/sorbet/rbi/gems/rails-html-sanitizer.rbi +0 -91
- data/spec/support/v5.0/sorbet/rbi/gems/railties.rbi +0 -472
- data/spec/support/v5.0/sorbet/rbi/gems/sqlite3.rbi +0 -345
- data/spec/support/v5.0/sorbet/rbi/gems/thread_safe.rbi +0 -81
- data/spec/support/v5.0/sorbet/rbi/gems/tzinfo.rbi +0 -407
- data/spec/support/v5.0/sorbet/rbi/sorbet-typed/lib/actionmailer/all/actionmailer.rbi +0 -13
- data/spec/support/v5.0/sorbet/rbi/sorbet-typed/lib/actionpack/all/actionpack.rbi +0 -468
- data/spec/support/v5.0/sorbet/rbi/sorbet-typed/lib/activemodel/all/activemodel.rbi +0 -422
- data/spec/support/v5.0/sorbet/rbi/sorbet-typed/lib/activerecord/all/activerecord.rbi +0 -1263
- data/spec/support/v5.0/sorbet/rbi/sorbet-typed/lib/activesupport/all/activesupport.rbi +0 -458
- data/spec/support/v5.0/sorbet/rbi/sorbet-typed/lib/bundler/all/bundler.rbi +0 -8575
- data/spec/support/v5.0/sorbet/rbi/sorbet-typed/lib/minitest/all/minitest.rbi +0 -99
- data/spec/support/v5.0/sorbet/rbi/sorbet-typed/lib/railties/all/railties.rbi +0 -22
- data/spec/support/v5.0/sorbet/rbi/sorbet-typed/lib/ruby/all/open3.rbi +0 -111
- data/spec/support/v5.0/sorbet/rbi/sorbet-typed/lib/ruby/all/resolv.rbi +0 -543
- data/spec/support/v5.0/sorbet/rbi/todo.rbi +0 -68
- data/spec/support/v5.1/sorbet/config +0 -2
- data/spec/support/v5.1/sorbet/rbi/gems/actionmailer.rbi +0 -382
- data/spec/support/v5.1/sorbet/rbi/gems/actionpack.rbi +0 -3027
- data/spec/support/v5.1/sorbet/rbi/gems/actionview.rbi +0 -1114
- data/spec/support/v5.1/sorbet/rbi/gems/activejob.rbi +0 -238
- data/spec/support/v5.1/sorbet/rbi/gems/activemodel.rbi +0 -547
- data/spec/support/v5.1/sorbet/rbi/gems/activerecord.rbi +0 -3943
- data/spec/support/v5.1/sorbet/rbi/gems/activesupport.rbi +0 -2042
- data/spec/support/v5.1/sorbet/rbi/gems/arel.rbi +0 -1220
- data/spec/support/v5.1/sorbet/rbi/gems/bindex.rbi +0 -36
- data/spec/support/v5.1/sorbet/rbi/gems/byebug.rbi +0 -1039
- data/spec/support/v5.1/sorbet/rbi/gems/concurrent-ruby.rbi +0 -1587
- data/spec/support/v5.1/sorbet/rbi/gems/crass.rbi +0 -92
- data/spec/support/v5.1/sorbet/rbi/gems/erubi.rbi +0 -26
- data/spec/support/v5.1/sorbet/rbi/gems/globalid.rbi +0 -98
- data/spec/support/v5.1/sorbet/rbi/gems/i18n.rbi +0 -191
- data/spec/support/v5.1/sorbet/rbi/gems/jbuilder.rbi +0 -99
- data/spec/support/v5.1/sorbet/rbi/gems/loofah.rbi +0 -129
- data/spec/support/v5.1/sorbet/rbi/gems/mail.rbi +0 -1091
- data/spec/support/v5.1/sorbet/rbi/gems/mini_mime.rbi +0 -51
- data/spec/support/v5.1/sorbet/rbi/gems/nokogiri.rbi +0 -1010
- data/spec/support/v5.1/sorbet/rbi/gems/parlour.rbi +0 -214
- data/spec/support/v5.1/sorbet/rbi/gems/puma.rbi +0 -570
- data/spec/support/v5.1/sorbet/rbi/gems/rack-test.rbi +0 -161
- data/spec/support/v5.1/sorbet/rbi/gems/rack.rbi +0 -489
- data/spec/support/v5.1/sorbet/rbi/gems/rails-html-sanitizer.rbi +0 -91
- data/spec/support/v5.1/sorbet/rbi/gems/railties.rbi +0 -498
- data/spec/support/v5.1/sorbet/rbi/gems/sqlite3.rbi +0 -353
- data/spec/support/v5.1/sorbet/rbi/gems/thread_safe.rbi +0 -81
- data/spec/support/v5.1/sorbet/rbi/gems/tzinfo.rbi +0 -407
- data/spec/support/v5.1/sorbet/rbi/gems/web-console.rbi +0 -73
- data/spec/support/v5.1/sorbet/rbi/sorbet-typed/lib/actionmailer/all/actionmailer.rbi +0 -13
- data/spec/support/v5.1/sorbet/rbi/sorbet-typed/lib/actionpack/all/actionpack.rbi +0 -468
- data/spec/support/v5.1/sorbet/rbi/sorbet-typed/lib/activemodel/all/activemodel.rbi +0 -422
- data/spec/support/v5.1/sorbet/rbi/sorbet-typed/lib/activerecord/all/activerecord.rbi +0 -1263
- data/spec/support/v5.1/sorbet/rbi/sorbet-typed/lib/activesupport/all/activesupport.rbi +0 -458
- data/spec/support/v5.1/sorbet/rbi/sorbet-typed/lib/bundler/all/bundler.rbi +0 -8575
- data/spec/support/v5.1/sorbet/rbi/sorbet-typed/lib/minitest/all/minitest.rbi +0 -99
- data/spec/support/v5.1/sorbet/rbi/sorbet-typed/lib/railties/all/railties.rbi +0 -22
- data/spec/support/v5.1/sorbet/rbi/sorbet-typed/lib/ruby/all/open3.rbi +0 -111
- data/spec/support/v5.1/sorbet/rbi/sorbet-typed/lib/ruby/all/resolv.rbi +0 -543
- data/spec/support/v5.1/sorbet/rbi/todo.rbi +0 -68
- data/spec/support/v5.2-no-sorbet/.gitignore +0 -31
- data/spec/support/v5.2-no-sorbet/Gemfile +0 -39
- data/spec/support/v5.2-no-sorbet/Gemfile.lock +0 -156
- data/spec/support/v5.2-no-sorbet/README.md +0 -24
- data/spec/support/v5.2-no-sorbet/Rakefile +0 -6
- data/spec/support/v5.2-no-sorbet/app/assets/config/manifest.js +0 -2
- data/spec/support/v5.2-no-sorbet/app/assets/images/.keep +0 -0
- data/spec/support/v5.2-no-sorbet/app/assets/stylesheets/application.css +0 -15
- data/spec/support/v5.2-no-sorbet/app/controllers/application_controller.rb +0 -2
- data/spec/support/v5.2-no-sorbet/app/controllers/concerns/.keep +0 -0
- data/spec/support/v5.2-no-sorbet/app/helpers/application_helper.rb +0 -2
- data/spec/support/v5.2-no-sorbet/app/helpers/bar_helper.rb +0 -2
- data/spec/support/v5.2-no-sorbet/app/helpers/baz_helper.rb +0 -2
- data/spec/support/v5.2-no-sorbet/app/helpers/foo_helper.rb +0 -2
- data/spec/support/v5.2-no-sorbet/app/jobs/application_job.rb +0 -2
- data/spec/support/v5.2-no-sorbet/app/mailers/application_mailer.rb +0 -4
- data/spec/support/v5.2-no-sorbet/app/models/application_record.rb +0 -4
- data/spec/support/v5.2-no-sorbet/app/models/concerns/.keep +0 -0
- data/spec/support/v5.2-no-sorbet/app/models/concerns/mythical.rb +0 -10
- data/spec/support/v5.2-no-sorbet/app/models/potion.rb +0 -4
- data/spec/support/v5.2-no-sorbet/app/models/spell_book.rb +0 -4
- data/spec/support/v5.2-no-sorbet/app/models/wand.rb +0 -16
- data/spec/support/v5.2-no-sorbet/app/models/wizard.rb +0 -13
- data/spec/support/v5.2-no-sorbet/app/views/layouts/application.html.erb +0 -14
- data/spec/support/v5.2-no-sorbet/app/views/layouts/mailer.html.erb +0 -13
- data/spec/support/v5.2-no-sorbet/app/views/layouts/mailer.text.erb +0 -1
- data/spec/support/v5.2-no-sorbet/bin/bundle +0 -3
- data/spec/support/v5.2-no-sorbet/bin/rails +0 -4
- data/spec/support/v5.2-no-sorbet/bin/rake +0 -4
- data/spec/support/v5.2-no-sorbet/bin/setup +0 -36
- data/spec/support/v5.2-no-sorbet/bin/update +0 -31
- data/spec/support/v5.2-no-sorbet/bin/yarn +0 -11
- data/spec/support/v5.2-no-sorbet/config.ru +0 -5
- data/spec/support/v5.2-no-sorbet/config/application.rb +0 -33
- data/spec/support/v5.2-no-sorbet/config/boot.rb +0 -3
- data/spec/support/v5.2-no-sorbet/config/database.yml +0 -25
- data/spec/support/v5.2-no-sorbet/config/environment.rb +0 -5
- data/spec/support/v5.2-no-sorbet/config/environments/development.rb +0 -54
- data/spec/support/v5.2-no-sorbet/config/environments/production.rb +0 -80
- data/spec/support/v5.2-no-sorbet/config/environments/test.rb +0 -46
- data/spec/support/v5.2-no-sorbet/config/initializers/application_controller_renderer.rb +0 -8
- data/spec/support/v5.2-no-sorbet/config/initializers/backtrace_silencers.rb +0 -7
- data/spec/support/v5.2-no-sorbet/config/initializers/content_security_policy.rb +0 -25
- data/spec/support/v5.2-no-sorbet/config/initializers/cookies_serializer.rb +0 -5
- data/spec/support/v5.2-no-sorbet/config/initializers/filter_parameter_logging.rb +0 -4
- data/spec/support/v5.2-no-sorbet/config/initializers/inflections.rb +0 -16
- data/spec/support/v5.2-no-sorbet/config/initializers/mime_types.rb +0 -4
- data/spec/support/v5.2-no-sorbet/config/initializers/sorbet_rails.rb +0 -3
- data/spec/support/v5.2-no-sorbet/config/initializers/wrap_parameters.rb +0 -14
- data/spec/support/v5.2-no-sorbet/config/locales/en.yml +0 -33
- data/spec/support/v5.2-no-sorbet/config/puma.rb +0 -34
- data/spec/support/v5.2-no-sorbet/config/routes.rb +0 -4
- data/spec/support/v5.2-no-sorbet/config/storage.yml +0 -34
- data/spec/support/v5.2-no-sorbet/db/migrate/20190620000001_create_wizards.rb +0 -12
- data/spec/support/v5.2-no-sorbet/db/migrate/20190620000002_create_wands.rb +0 -11
- data/spec/support/v5.2-no-sorbet/db/migrate/20190620000003_create_spell_books.rb +0 -8
- data/spec/support/v5.2-no-sorbet/db/migrate/20190620000004_add_more_column_types_to_wands.rb +0 -15
- data/spec/support/v5.2-no-sorbet/db/schema.rb +0 -47
- data/spec/support/v5.2-no-sorbet/db/seeds.rb +0 -7
- data/spec/support/v5.2-no-sorbet/lib/assets/.keep +0 -0
- data/spec/support/v5.2-no-sorbet/lib/mythical_rbi_plugin.rb +0 -16
- 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/package.json +0 -5
- data/spec/support/v5.2-no-sorbet/sorbet_test_cases.rb +0 -123
- data/spec/support/v5.2-no-sorbet/storage/.keep +0 -0
- data/spec/support/v5.2-no-sorbet/tmp/.keep +0 -0
- data/spec/support/v5.2-no-sorbet/typed-override.yaml +0 -2
- data/spec/support/v5.2-no-sorbet/vendor/.keep +0 -0
- data/spec/support/v5.2/sorbet/config +0 -2
- data/spec/support/v5.2/sorbet/rbi/gems/actionmailer.rbi +0 -391
- data/spec/support/v5.2/sorbet/rbi/gems/actionpack.rbi +0 -3109
- data/spec/support/v5.2/sorbet/rbi/gems/actionview.rbi +0 -1128
- data/spec/support/v5.2/sorbet/rbi/gems/activejob.rbi +0 -244
- data/spec/support/v5.2/sorbet/rbi/gems/activemodel.rbi +0 -741
- data/spec/support/v5.2/sorbet/rbi/gems/activerecord.rbi +0 -3827
- data/spec/support/v5.2/sorbet/rbi/gems/activestorage.rbi +0 -173
- data/spec/support/v5.2/sorbet/rbi/gems/activesupport.rbi +0 -2167
- data/spec/support/v5.2/sorbet/rbi/gems/arel.rbi +0 -1252
- data/spec/support/v5.2/sorbet/rbi/gems/bindex.rbi +0 -36
- data/spec/support/v5.2/sorbet/rbi/gems/byebug.rbi +0 -1039
- data/spec/support/v5.2/sorbet/rbi/gems/concurrent-ruby.rbi +0 -1587
- data/spec/support/v5.2/sorbet/rbi/gems/crass.rbi +0 -92
- data/spec/support/v5.2/sorbet/rbi/gems/erubi.rbi +0 -26
- data/spec/support/v5.2/sorbet/rbi/gems/globalid.rbi +0 -98
- data/spec/support/v5.2/sorbet/rbi/gems/i18n.rbi +0 -191
- data/spec/support/v5.2/sorbet/rbi/gems/jbuilder.rbi +0 -99
- data/spec/support/v5.2/sorbet/rbi/gems/loofah.rbi +0 -129
- data/spec/support/v5.2/sorbet/rbi/gems/mail.rbi +0 -1091
- data/spec/support/v5.2/sorbet/rbi/gems/marcel.rbi +0 -12
- data/spec/support/v5.2/sorbet/rbi/gems/mini_mime.rbi +0 -51
- data/spec/support/v5.2/sorbet/rbi/gems/nokogiri.rbi +0 -1010
- data/spec/support/v5.2/sorbet/rbi/gems/parlour.rbi +0 -214
- data/spec/support/v5.2/sorbet/rbi/gems/puma.rbi +0 -570
- data/spec/support/v5.2/sorbet/rbi/gems/rack-test.rbi +0 -161
- data/spec/support/v5.2/sorbet/rbi/gems/rack.rbi +0 -493
- data/spec/support/v5.2/sorbet/rbi/gems/rails-html-sanitizer.rbi +0 -91
- data/spec/support/v5.2/sorbet/rbi/gems/railties.rbi +0 -508
- data/spec/support/v5.2/sorbet/rbi/gems/sqlite3.rbi +0 -353
- data/spec/support/v5.2/sorbet/rbi/gems/thread_safe.rbi +0 -81
- data/spec/support/v5.2/sorbet/rbi/gems/tzinfo.rbi +0 -407
- data/spec/support/v5.2/sorbet/rbi/gems/web-console.rbi +0 -73
- data/spec/support/v5.2/sorbet/rbi/sorbet-typed/lib/actionmailer/all/actionmailer.rbi +0 -13
- data/spec/support/v5.2/sorbet/rbi/sorbet-typed/lib/actionpack/all/actionpack.rbi +0 -468
- data/spec/support/v5.2/sorbet/rbi/sorbet-typed/lib/activemodel/all/activemodel.rbi +0 -422
- data/spec/support/v5.2/sorbet/rbi/sorbet-typed/lib/activerecord/>=5.2/activerecord.rbi +0 -17
- data/spec/support/v5.2/sorbet/rbi/sorbet-typed/lib/activerecord/all/activerecord.rbi +0 -1263
- data/spec/support/v5.2/sorbet/rbi/sorbet-typed/lib/activerecord/~>5.2.0/activerecord.rbi +0 -10
- data/spec/support/v5.2/sorbet/rbi/sorbet-typed/lib/activesupport/all/activesupport.rbi +0 -458
- data/spec/support/v5.2/sorbet/rbi/sorbet-typed/lib/bundler/all/bundler.rbi +0 -8575
- data/spec/support/v5.2/sorbet/rbi/sorbet-typed/lib/minitest/all/minitest.rbi +0 -99
- data/spec/support/v5.2/sorbet/rbi/sorbet-typed/lib/railties/all/railties.rbi +0 -22
- data/spec/support/v5.2/sorbet/rbi/sorbet-typed/lib/ruby/all/open3.rbi +0 -111
- data/spec/support/v5.2/sorbet/rbi/sorbet-typed/lib/ruby/all/resolv.rbi +0 -543
- data/spec/support/v5.2/sorbet/rbi/todo.rbi +0 -68
- data/spec/support/v6.0/sorbet/config +0 -2
- data/spec/support/v6.0/sorbet/rbi/gems/actionmailbox.rbi +0 -56
- data/spec/support/v6.0/sorbet/rbi/gems/actionmailer.rbi +0 -20
- data/spec/support/v6.0/sorbet/rbi/gems/actionpack.rbi +0 -2154
- data/spec/support/v6.0/sorbet/rbi/gems/actiontext.rbi +0 -32
- data/spec/support/v6.0/sorbet/rbi/gems/actionview.rbi +0 -1135
- data/spec/support/v6.0/sorbet/rbi/gems/activejob.rbi +0 -80
- data/spec/support/v6.0/sorbet/rbi/gems/activemodel.rbi +0 -751
- data/spec/support/v6.0/sorbet/rbi/gems/activerecord.rbi +0 -5414
- data/spec/support/v6.0/sorbet/rbi/gems/activestorage.rbi +0 -221
- data/spec/support/v6.0/sorbet/rbi/gems/activesupport.rbi +0 -2251
- data/spec/support/v6.0/sorbet/rbi/gems/bindex.rbi +0 -36
- data/spec/support/v6.0/sorbet/rbi/gems/byebug.rbi +0 -1039
- data/spec/support/v6.0/sorbet/rbi/gems/concurrent-ruby.rbi +0 -1587
- data/spec/support/v6.0/sorbet/rbi/gems/crass.rbi +0 -92
- data/spec/support/v6.0/sorbet/rbi/gems/erubi.rbi +0 -26
- data/spec/support/v6.0/sorbet/rbi/gems/globalid.rbi +0 -98
- data/spec/support/v6.0/sorbet/rbi/gems/i18n.rbi +0 -191
- data/spec/support/v6.0/sorbet/rbi/gems/jbuilder.rbi +0 -99
- data/spec/support/v6.0/sorbet/rbi/gems/loofah.rbi +0 -129
- data/spec/support/v6.0/sorbet/rbi/gems/mail.rbi +0 -1542
- data/spec/support/v6.0/sorbet/rbi/gems/marcel.rbi +0 -12
- data/spec/support/v6.0/sorbet/rbi/gems/mini_mime.rbi +0 -51
- data/spec/support/v6.0/sorbet/rbi/gems/nokogiri.rbi +0 -1010
- data/spec/support/v6.0/sorbet/rbi/gems/parlour.rbi +0 -214
- data/spec/support/v6.0/sorbet/rbi/gems/puma.rbi +0 -570
- data/spec/support/v6.0/sorbet/rbi/gems/rack-test.rbi +0 -161
- data/spec/support/v6.0/sorbet/rbi/gems/rack.rbi +0 -481
- data/spec/support/v6.0/sorbet/rbi/gems/rails-html-sanitizer.rbi +0 -91
- data/spec/support/v6.0/sorbet/rbi/gems/railties.rbi +0 -548
- data/spec/support/v6.0/sorbet/rbi/gems/sqlite3.rbi +0 -353
- data/spec/support/v6.0/sorbet/rbi/gems/thread_safe.rbi +0 -81
- data/spec/support/v6.0/sorbet/rbi/gems/tzinfo.rbi +0 -407
- data/spec/support/v6.0/sorbet/rbi/gems/web-console.rbi +0 -72
- data/spec/support/v6.0/sorbet/rbi/gems/zeitwerk.rbi +0 -127
- data/spec/support/v6.0/sorbet/rbi/sorbet-typed/lib/actionmailer/all/actionmailer.rbi +0 -13
- data/spec/support/v6.0/sorbet/rbi/sorbet-typed/lib/actionpack/all/actionpack.rbi +0 -468
- data/spec/support/v6.0/sorbet/rbi/sorbet-typed/lib/activemodel/all/activemodel.rbi +0 -422
- data/spec/support/v6.0/sorbet/rbi/sorbet-typed/lib/activerecord/>=5.2/activerecord.rbi +0 -17
- data/spec/support/v6.0/sorbet/rbi/sorbet-typed/lib/activerecord/all/activerecord.rbi +0 -1263
- data/spec/support/v6.0/sorbet/rbi/sorbet-typed/lib/activerecord/~>6.0.0.rc1/activerecord.rbi +0 -10
- data/spec/support/v6.0/sorbet/rbi/sorbet-typed/lib/activesupport/>=6.0.0.rc1/activesupport.rbi +0 -23
- data/spec/support/v6.0/sorbet/rbi/sorbet-typed/lib/activesupport/all/activesupport.rbi +0 -458
- data/spec/support/v6.0/sorbet/rbi/sorbet-typed/lib/bundler/all/bundler.rbi +0 -8575
- data/spec/support/v6.0/sorbet/rbi/sorbet-typed/lib/minitest/all/minitest.rbi +0 -99
- data/spec/support/v6.0/sorbet/rbi/sorbet-typed/lib/railties/all/railties.rbi +0 -22
- data/spec/support/v6.0/sorbet/rbi/sorbet-typed/lib/ruby/all/open3.rbi +0 -111
- data/spec/support/v6.0/sorbet/rbi/sorbet-typed/lib/ruby/all/resolv.rbi +0 -543
- data/spec/support/v6.0/sorbet/rbi/todo.rbi +0 -70
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: dfa9a71f1119781cfb7095483dbbbab875f51f5562c475d77d38aabe1d97267f
|
4
|
+
data.tar.gz: 80d6b0e7cc740a65db4678213bd6f1e6d34a81852a516854afedd0ad407e5866
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fd11e9d0f44405b205b56a9af096c8bd7814d03b7c1d7123e9f8be8803d6be06452a155c2950386d9de059b4ede03e6d636841e139b01af8fab8c9112b6a3cb8
|
7
|
+
data.tar.gz: 69e086df0c72d95ffc54c87ee533b0b6833dcf66e70d434a8f0652a84f03c22a737c3cff180f2df06c620e4a3679740bde7774ddd0377575df93f5b6a4ed934c
|
data/.gitignore
CHANGED
@@ -78,16 +78,9 @@ build-iPhoneSimulator/
|
|
78
78
|
/spec/support/**/config/secrets.yml
|
79
79
|
/spec/support/**/config/credentials.yml.enc
|
80
80
|
|
81
|
-
# Ignore sorbet
|
82
|
-
/spec/support/**/sorbet
|
83
|
-
/spec/support/**/sorbet
|
84
|
-
# Ignore hidden-definition.rbi because we will rerun it
|
85
|
-
/spec/support/**/sorbet/rbi/hidden-definitions/*
|
86
|
-
/spec/support/**/sorbet/rbi/hidden-definitions/**/*
|
87
|
-
|
88
|
-
# Ignore sorbet files in v5.2-no-sorbet
|
89
|
-
/spec/support/v5.2-no-sorbet/sorbet/*
|
90
|
-
/spec/support/v5.2-no-sorbet/sorbet/**/*
|
81
|
+
# Ignore sorbet generated files
|
82
|
+
/spec/support/**/sorbet/*
|
83
|
+
/spec/support/**/sorbet/**/*
|
91
84
|
|
92
85
|
# Ignore files in the public/ directories.
|
93
86
|
/spec/support/**/public/*
|
data/.travis.yml
CHANGED
data/Gemfile
CHANGED
@@ -30,11 +30,11 @@ when "5.2"
|
|
30
30
|
gem "bundler", ">= 2.0"
|
31
31
|
gem "sqlite3", "~> 1.4.1"
|
32
32
|
when "6.0"
|
33
|
-
gem "rails", "~> 6.0.0
|
33
|
+
gem "rails", "~> 6.0.0"
|
34
34
|
gem "bundler", ">= 2.0"
|
35
35
|
gem "sqlite3", "~> 1.4.1"
|
36
36
|
else
|
37
|
-
gem "rails", "
|
37
|
+
gem "rails", "~> 5.2.3"
|
38
38
|
gem "bundler", ">= 2.0"
|
39
39
|
gem "sqlite3", "~> 1.4.1"
|
40
40
|
end
|
data/README.md
CHANGED
@@ -69,7 +69,8 @@ The generation task currently creates the following signatures:
|
|
69
69
|
- Associations getters & setters
|
70
70
|
- Enum values, checkers & scopes
|
71
71
|
- Named scopes
|
72
|
-
- Model
|
72
|
+
- Model `Relation` class
|
73
|
+
- Scopes on `Relation`, but not [class methods](https://github.com/chanzuckerberg/sorbet-rails/issues/104#issuecomment-521763909)
|
73
74
|
|
74
75
|
It is possible to add custom RBI generation logic for your custom module or gems via the plugin system. Check out the [plugins section](#extending-model-generation-task-with-custom-plugins) below if you are interested.
|
75
76
|
|
data/Rakefile
CHANGED
@@ -13,7 +13,6 @@ namespace :update_spec do
|
|
13
13
|
task :v5_plus do |t, args|
|
14
14
|
Rake::Task['update_spec:v6_0'].invoke
|
15
15
|
Rake::Task['update_spec:v5_2'].invoke
|
16
|
-
Rake::Task['update_spec:v5_2_no_sorbet'].invoke
|
17
16
|
Rake::Task['update_spec:v5_1'].invoke
|
18
17
|
Rake::Task['update_spec:v5_0'].invoke
|
19
18
|
end
|
@@ -22,9 +21,9 @@ namespace :update_spec do
|
|
22
21
|
task :v6_0 do |t, args|
|
23
22
|
Bundler.with_clean_env do
|
24
23
|
FileUtils.rm_rf 'spec/support/v6.0' if File.directory?('spec/support/v6.0')
|
25
|
-
system("gem install rails -v 6.0.0
|
26
|
-
system("rails _6.0.
|
27
|
-
system("RAILS_VERSION='6.0' rails _6.0.
|
24
|
+
system("gem install rails -v 6.0.0")
|
25
|
+
system("rails _6.0.0_ -v")
|
26
|
+
system("RAILS_VERSION='6.0' rails _6.0.0_ new --template spec/generators/rails-template.rb spec/support/v6.0 --skip-javascript --skip-action-cable --skip-test --skip-sprockets --skip-spring --skip-bootsnap --skip-listen")
|
28
27
|
end
|
29
28
|
end
|
30
29
|
|
@@ -38,16 +37,6 @@ namespace :update_spec do
|
|
38
37
|
end
|
39
38
|
end
|
40
39
|
|
41
|
-
desc "Delete the Rails 5.2-no-sorbet spec directory and regenerate it."
|
42
|
-
task :v5_2_no_sorbet do |t, args|
|
43
|
-
Bundler.with_clean_env do
|
44
|
-
FileUtils.rm_rf 'spec/support/v5.2-no-sorbet' if File.directory?('spec/support/v5.2-no-sorbet')
|
45
|
-
system("gem install rails -v 5.2.3")
|
46
|
-
system("rails _5.2.3_ -v")
|
47
|
-
system("RUN_WITH_SORBET='false' RAILS_VERSION='5.2' rails _5.2.3_ new --template spec/generators/rails-template.rb spec/support/v5.2-no-sorbet --skip-javascript --skip-action-cable --skip-test --skip-sprockets --skip-spring --skip-bootsnap --skip-listen")
|
48
|
-
end
|
49
|
-
end
|
50
|
-
|
51
40
|
desc "Delete the Rails 5.1 spec directory and regenerate it."
|
52
41
|
task :v5_1 do |t, args|
|
53
42
|
Bundler.with_clean_env do
|
@@ -80,7 +69,7 @@ namespace :update_spec do
|
|
80
69
|
|
81
70
|
desc "Update sorbet_test_cases.rb in all the Rails apps in spec/support."
|
82
71
|
task :sorbet_test_cases do |t, args|
|
83
|
-
['v6.0', 'v5.2', 'v5.
|
72
|
+
['v6.0', 'v5.2', 'v5.1', 'v5.0', 'v4.2'].each do |version|
|
84
73
|
FileUtils.cp("spec/generators/sorbet_test_cases.rb", "spec/support/#{version}/sorbet_test_cases.rb")
|
85
74
|
end
|
86
75
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
# typed:
|
1
|
+
# typed: strict
|
2
2
|
class KaminariPlugin < SorbetRails::ModelPlugins::Base
|
3
3
|
# Kaminari generates a dynamic `page` method on ActiveRecord relations.
|
4
4
|
# https://github.com/kaminari/kaminari/blob/c5186f5d9b7f23299d115408e62047447fd3189d/kaminari-activerecord/lib/kaminari/activerecord/active_record_model_extension.rb#L15
|
@@ -9,13 +9,12 @@ class KaminariPlugin < SorbetRails::ModelPlugins::Base
|
|
9
9
|
# Get the configured Kaminari page method name, or fall back to 'page' if necessary.
|
10
10
|
page_method = T.unsafe(Kaminari).config.page_method_name || 'page'
|
11
11
|
|
12
|
-
|
13
|
-
|
12
|
+
add_relation_query_method(
|
13
|
+
root,
|
14
14
|
page_method.to_s,
|
15
15
|
parameters: [
|
16
16
|
Parameter.new('num', type: 'T.nilable(Integer)', default: 'nil')
|
17
17
|
],
|
18
|
-
return_type: model_relation_class_name
|
19
18
|
)
|
20
19
|
end
|
21
20
|
end
|
@@ -13,8 +13,6 @@ class SorbetRails::ModelPlugins::ActiveRecordEnum < SorbetRails::ModelPlugins::B
|
|
13
13
|
model_class_rbi = root.create_class(self.model_class_name)
|
14
14
|
model_class_rbi.create_include(enum_module_name)
|
15
15
|
|
16
|
-
model_relation_shared_rbi = root.create_module(self.model_relation_shared_module_name)
|
17
|
-
|
18
16
|
# TODO: add any method for signature verification?
|
19
17
|
model_class.defined_enums.sort.each do |enum_name, enum_hash|
|
20
18
|
model_class_rbi.create_method(
|
@@ -31,12 +29,6 @@ class SorbetRails::ModelPlugins::ActiveRecordEnum < SorbetRails::ModelPlugins::B
|
|
31
29
|
"#{enum_val}!",
|
32
30
|
return_type: nil, # void
|
33
31
|
)
|
34
|
-
# force generating these methods because sorbet's hidden-definitions generate & override them
|
35
|
-
model_class_rbi.create_method(
|
36
|
-
"#{enum_val}",
|
37
|
-
return_type: self.model_relation_class_name,
|
38
|
-
class_method: true,
|
39
|
-
)
|
40
32
|
end
|
41
33
|
end
|
42
34
|
end
|
@@ -12,6 +12,9 @@ class SorbetRails::ModelPlugins::ActiveRecordFinderMethods < SorbetRails::ModelP
|
|
12
12
|
|
13
13
|
model_assoc_proxy_class_rbi = root.create_class(self.model_assoc_proxy_class_name)
|
14
14
|
create_finder_methods_for(model_assoc_proxy_class_rbi, class_method: false)
|
15
|
+
|
16
|
+
model_assoc_relation_rbi = root.create_class(self.model_assoc_relation_class_name)
|
17
|
+
create_finder_methods_for(model_assoc_relation_rbi, class_method: false)
|
15
18
|
end
|
16
19
|
|
17
20
|
sig { params(class_rbi: Parlour::RbiGenerator::ClassNamespace, class_method: T::Boolean).void }
|
@@ -4,7 +4,8 @@ class SorbetRails::ModelPlugins::ActiveRecordNamedScope < SorbetRails::ModelPlug
|
|
4
4
|
|
5
5
|
sig { implementation.params(root: Parlour::RbiGenerator::Namespace).void }
|
6
6
|
def generate(root)
|
7
|
-
|
7
|
+
model_class_rbi = root.create_class(self.model_class_name)
|
8
|
+
|
8
9
|
@model_class.methods.sort.each do |method_name|
|
9
10
|
method_obj = @model_class.method(method_name)
|
10
11
|
next unless method_obj.present? && method_obj.source_location.present?
|
@@ -16,12 +17,12 @@ class SorbetRails::ModelPlugins::ActiveRecordNamedScope < SorbetRails::ModelPlug
|
|
16
17
|
source_file = method_obj.source_location[0]
|
17
18
|
next unless source_file.include?("lib/active_record/scoping/named.rb")
|
18
19
|
|
19
|
-
|
20
|
+
add_relation_query_method(
|
21
|
+
root,
|
20
22
|
method_name.to_s,
|
21
23
|
parameters: [
|
22
24
|
Parameter.new("*args", type: "T.untyped"),
|
23
25
|
],
|
24
|
-
return_type: self.model_relation_class_name,
|
25
26
|
)
|
26
27
|
end
|
27
28
|
end
|
@@ -6,17 +6,16 @@ class SorbetRails::ModelPlugins::ActiveRecordQuerying < SorbetRails::ModelPlugin
|
|
6
6
|
def generate(root)
|
7
7
|
# All is a named scope that most method from ActiveRecord::Querying delegate to
|
8
8
|
# rails/activerecord/lib/active_record/querying.rb:21
|
9
|
-
|
10
|
-
|
9
|
+
add_relation_query_method(
|
10
|
+
root,
|
11
11
|
"all",
|
12
|
-
return_type: self.model_relation_class_name,
|
13
12
|
)
|
14
|
-
|
13
|
+
add_relation_query_method(
|
14
|
+
root,
|
15
15
|
"unscoped",
|
16
16
|
parameters: [
|
17
17
|
Parameter.new("&block", type: "T.nilable(T.proc.void)"),
|
18
18
|
],
|
19
|
-
return_type: self.model_relation_class_name,
|
20
19
|
)
|
21
20
|
|
22
21
|
# It's not possible to typedef all methods in ActiveRecord::Querying module to have the
|
@@ -29,13 +28,13 @@ class SorbetRails::ModelPlugins::ActiveRecordQuerying < SorbetRails::ModelPlugin
|
|
29
28
|
:having, :create_with, :distinct, :references, :none, :unscope, :optimizer_hints, :merge, :except, :only,
|
30
29
|
]
|
31
30
|
model_query_relation_methods.each do |method_name|
|
32
|
-
|
31
|
+
add_relation_query_method(
|
32
|
+
root,
|
33
33
|
method_name.to_s,
|
34
34
|
parameters: [
|
35
35
|
Parameter.new("*args", type: "T.untyped"),
|
36
36
|
Parameter.new("&block", type: "T.nilable(T.proc.void)"),
|
37
37
|
],
|
38
|
-
return_type: self.model_relation_class_name,
|
39
38
|
) if exists_class_method?(method_name)
|
40
39
|
end
|
41
40
|
end
|
@@ -10,8 +10,8 @@ class SorbetRails::ModelPlugins::ActiveRelationWhereNot < SorbetRails::ModelPlug
|
|
10
10
|
model_relation_class_rbi = root.create_class(self.model_relation_class_name)
|
11
11
|
model_relation_class_rbi.create_include(where_not_module_name)
|
12
12
|
|
13
|
-
|
14
|
-
|
13
|
+
model_assoc_relation_rbi = root.create_class(self.model_assoc_relation_class_name)
|
14
|
+
model_assoc_relation_rbi.create_include(where_not_module_name)
|
15
15
|
|
16
16
|
# TODO: where.not is a special case that we replace it with a `where_not` method
|
17
17
|
# `where` when not given parameters will return a `ActiveRecord::QueryMethods::WhereChain`
|
@@ -7,11 +7,7 @@ class SorbetRails::ModelPlugins::CustomFinderMethods < SorbetRails::ModelPlugins
|
|
7
7
|
model_class_rbi = root.create_class(self.model_class_name)
|
8
8
|
model_relation_class_rbi = root.create_class(self.model_relation_class_name)
|
9
9
|
model_assoc_proxy_class_rbi = root.create_class(self.model_assoc_proxy_class_name)
|
10
|
-
|
11
|
-
# include the actual module
|
12
|
-
model_class_rbi.create_extend("SorbetRails::CustomFinderMethods")
|
13
|
-
model_relation_class_rbi.create_include("SorbetRails::CustomFinderMethods")
|
14
|
-
model_assoc_proxy_class_rbi.create_include("SorbetRails::CustomFinderMethods")
|
10
|
+
model_assoc_relation_rbi = root.create_class(self.model_assoc_relation_class_name)
|
15
11
|
|
16
12
|
custom_module_name = self.model_module_name("CustomFinderMethods")
|
17
13
|
custom_module_rbi = root.create_module(custom_module_name)
|
@@ -20,6 +16,7 @@ class SorbetRails::ModelPlugins::CustomFinderMethods < SorbetRails::ModelPlugins
|
|
20
16
|
model_class_rbi.create_extend(custom_module_name)
|
21
17
|
model_relation_class_rbi.create_include(custom_module_name)
|
22
18
|
model_assoc_proxy_class_rbi.create_include(custom_module_name)
|
19
|
+
model_assoc_relation_rbi.create_include(custom_module_name)
|
23
20
|
|
24
21
|
custom_module_rbi.create_method(
|
25
22
|
"first_n",
|
@@ -9,6 +9,9 @@ class SorbetRails::ModelPlugins::EnumerableCollections < SorbetRails::ModelPlugi
|
|
9
9
|
model_relation_class_rbi = root.create_class(self.model_relation_class_name)
|
10
10
|
create_enumerable_methods_for(model_relation_class_rbi)
|
11
11
|
|
12
|
+
model_assoc_relation_rbi = root.create_class(self.model_assoc_relation_class_name)
|
13
|
+
create_enumerable_methods_for(model_assoc_relation_rbi)
|
14
|
+
|
12
15
|
model_assoc_proxy_class_rbi = root.create_class(self.model_assoc_proxy_class_name)
|
13
16
|
create_enumerable_methods_for(model_assoc_proxy_class_rbi)
|
14
17
|
|
@@ -45,5 +48,17 @@ class SorbetRails::ModelPlugins::EnumerableCollections < SorbetRails::ModelPlugi
|
|
45
48
|
"to_a",
|
46
49
|
return_type: "T::Array[#{self.model_class_name}]",
|
47
50
|
)
|
51
|
+
# TODO use type_parameters(:U) when parlour supports it
|
52
|
+
class_rbi.create_arbitrary(
|
53
|
+
code: <<~RUBY
|
54
|
+
sig do
|
55
|
+
type_parameters(:U).params(
|
56
|
+
blk: T.proc.params(arg0: Elem).returns(T.type_parameter(:U)),
|
57
|
+
)
|
58
|
+
.returns(T::Array[T.type_parameter(:U)])
|
59
|
+
end
|
60
|
+
def map(&blk); end
|
61
|
+
RUBY
|
62
|
+
)
|
48
63
|
end
|
49
64
|
end
|
@@ -72,7 +72,6 @@ class SorbetRails::ModelRbiFormatter
|
|
72
72
|
self.model_relation_class_name,
|
73
73
|
superclass: "ActiveRecord::Relation",
|
74
74
|
)
|
75
|
-
model_relation_rbi.create_include(self.model_relation_shared_module_name)
|
76
75
|
model_relation_rbi.create_extend("T::Sig")
|
77
76
|
model_relation_rbi.create_extend("T::Generic")
|
78
77
|
model_relation_rbi.create_constant(
|
@@ -80,11 +79,21 @@ class SorbetRails::ModelRbiFormatter
|
|
80
79
|
value: "type_member(fixed: #{model_class_name})",
|
81
80
|
)
|
82
81
|
|
82
|
+
model_assoc_relation_rbi = root.create_class(
|
83
|
+
self.model_assoc_relation_class_name,
|
84
|
+
superclass: "ActiveRecord::AssociationRelation",
|
85
|
+
)
|
86
|
+
model_assoc_relation_rbi.create_extend("T::Sig")
|
87
|
+
model_assoc_relation_rbi.create_extend("T::Generic")
|
88
|
+
model_assoc_relation_rbi.create_constant(
|
89
|
+
"Elem",
|
90
|
+
value: "type_member(fixed: #{model_class_name})",
|
91
|
+
)
|
92
|
+
|
83
93
|
collection_proxy_rbi = root.create_class(
|
84
94
|
self.model_assoc_proxy_class_name,
|
85
95
|
superclass: "ActiveRecord::Associations::CollectionProxy",
|
86
96
|
)
|
87
|
-
collection_proxy_rbi.create_include(self.model_relation_shared_module_name)
|
88
97
|
collection_proxy_rbi.create_extend("T::Sig")
|
89
98
|
collection_proxy_rbi.create_extend("T::Generic")
|
90
99
|
collection_proxy_rbi.create_constant(
|
@@ -98,17 +107,6 @@ class SorbetRails::ModelRbiFormatter
|
|
98
107
|
)
|
99
108
|
model_rbi.create_extend("T::Sig")
|
100
109
|
model_rbi.create_extend("T::Generic")
|
101
|
-
model_rbi.create_extend(self.model_relation_shared_module_name)
|
102
|
-
|
103
|
-
# <Model>::MODEL_RELATION_SHARED_MODULE_SUFFIX is a fake module added so that
|
104
|
-
# when a method is defined in this module, it'll be added to both the Model class
|
105
|
-
# as a class method and to its relation as an instance method.
|
106
|
-
#
|
107
|
-
# We need to define the module after the other classes
|
108
|
-
# to work around Sorbet loading order bug
|
109
|
-
# https://sorbet-ruby.slack.com/archives/CHN2L03NH/p1556065791047300
|
110
|
-
model_relation_shared_rbi = root.create_module(self.model_relation_shared_module_name)
|
111
|
-
model_relation_shared_rbi.create_extend("T::Sig")
|
112
110
|
end
|
113
111
|
|
114
112
|
sig {
|
@@ -24,8 +24,8 @@ module SorbetRails::ModelUtils
|
|
24
24
|
end
|
25
25
|
|
26
26
|
sig { returns(String) }
|
27
|
-
def
|
28
|
-
"#{model_class.name}::
|
27
|
+
def model_assoc_relation_class_name
|
28
|
+
"#{model_class.name}::ActiveRecord_AssociationRelation"
|
29
29
|
end
|
30
30
|
|
31
31
|
sig { params(module_name: String).returns(String) }
|
@@ -42,4 +42,51 @@ module SorbetRails::ModelUtils
|
|
42
42
|
def exists_class_method?(method_name)
|
43
43
|
model_class.respond_to?(method_name)
|
44
44
|
end
|
45
|
+
|
46
|
+
sig {
|
47
|
+
params(
|
48
|
+
root: Parlour::RbiGenerator::Namespace,
|
49
|
+
method_name: String,
|
50
|
+
parameters: T.nilable(T::Array[::Parlour::RbiGenerator::Parameter]),
|
51
|
+
).void
|
52
|
+
}
|
53
|
+
def add_relation_query_method(root, method_name, parameters: nil)
|
54
|
+
# a relation querying method will be available on
|
55
|
+
# - model (as a class method)
|
56
|
+
# - activerecord relation
|
57
|
+
# - asocciation collection proxy
|
58
|
+
# - association relation
|
59
|
+
# in case (1) and (2), it returns a Model::ActiveRecord_Relation
|
60
|
+
# in case (3) and (4), it returns a Model::ActiveRecord_AssociationRelation
|
61
|
+
|
62
|
+
# force generating these methods because sorbet's hidden-definitions generate & override them
|
63
|
+
model_class_rbi = root.create_class(self.model_class_name)
|
64
|
+
model_class_rbi.create_method(
|
65
|
+
method_name,
|
66
|
+
parameters: parameters,
|
67
|
+
return_type: self.model_relation_class_name,
|
68
|
+
class_method: true,
|
69
|
+
)
|
70
|
+
|
71
|
+
model_relation_rbi = root.create_class(self.model_relation_class_name)
|
72
|
+
model_relation_rbi.create_method(
|
73
|
+
method_name,
|
74
|
+
parameters: parameters,
|
75
|
+
return_type: self.model_relation_class_name,
|
76
|
+
)
|
77
|
+
|
78
|
+
model_assoc_relation_rbi = root.create_class(self.model_assoc_relation_class_name)
|
79
|
+
model_assoc_relation_rbi.create_method(
|
80
|
+
method_name,
|
81
|
+
parameters: parameters,
|
82
|
+
return_type: self.model_assoc_relation_class_name,
|
83
|
+
)
|
84
|
+
|
85
|
+
collection_proxy_rbi = root.create_class(self.model_assoc_proxy_class_name)
|
86
|
+
collection_proxy_rbi.create_method(
|
87
|
+
method_name,
|
88
|
+
parameters: parameters,
|
89
|
+
return_type: self.model_assoc_relation_class_name,
|
90
|
+
)
|
91
|
+
end
|
45
92
|
end
|
data/lib/sorbet-rails/railtie.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# typed:
|
1
|
+
# typed: true
|
2
2
|
require "rails"
|
3
3
|
require "sorbet-rails/custom_finder_methods"
|
4
4
|
|
@@ -14,6 +14,21 @@ class SorbetRails::Railtie < Rails::Railtie
|
|
14
14
|
ActiveSupport.on_load(:active_record) do
|
15
15
|
ActiveRecord::Base.extend SorbetRails::CustomFinderMethods
|
16
16
|
ActiveRecord::Relation.include SorbetRails::CustomFinderMethods
|
17
|
+
|
18
|
+
class ::ActiveRecord::Base
|
19
|
+
# open ActiveRecord::Base to override inherited
|
20
|
+
class << self
|
21
|
+
alias_method :sbr_old_inherited, :inherited
|
22
|
+
|
23
|
+
def inherited(child)
|
24
|
+
sbr_old_inherited(child)
|
25
|
+
# make the relation classes public so that they can be used for sorbet runtime checks
|
26
|
+
child.send(:public_constant, :ActiveRecord_Relation)
|
27
|
+
child.send(:public_constant, :ActiveRecord_AssociationRelation)
|
28
|
+
child.send(:public_constant, :ActiveRecord_Associations_CollectionProxy)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
17
32
|
end
|
18
33
|
end
|
19
34
|
end
|