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.
Files changed (419) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +3 -10
  3. data/.travis.yml +0 -2
  4. data/Gemfile +2 -2
  5. data/README.md +2 -1
  6. data/Rakefile +4 -15
  7. data/lib/sorbet-rails/gem_plugins/kaminari_plugin.rb +3 -4
  8. data/lib/sorbet-rails/model_plugins/active_record_enum.rb +0 -8
  9. data/lib/sorbet-rails/model_plugins/active_record_finder_methods.rb +3 -0
  10. data/lib/sorbet-rails/model_plugins/active_record_named_scope.rb +4 -3
  11. data/lib/sorbet-rails/model_plugins/active_record_querying.rb +6 -7
  12. data/lib/sorbet-rails/model_plugins/active_relation_where_not.rb +2 -2
  13. data/lib/sorbet-rails/model_plugins/custom_finder_methods.rb +2 -5
  14. data/lib/sorbet-rails/model_plugins/enumerable_collections.rb +15 -0
  15. data/lib/sorbet-rails/model_plugins/plugins.rb +1 -1
  16. data/lib/sorbet-rails/model_rbi_formatter.rb +11 -13
  17. data/lib/sorbet-rails/model_utils.rb +49 -2
  18. data/lib/sorbet-rails/railtie.rb +16 -1
  19. data/lib/sorbet-rails/routes_rbi_formatter.rb +48 -34
  20. data/sorbet-rails.gemspec +1 -1
  21. data/spec/bin/run_all_specs.sh +0 -2
  22. data/spec/bin/run_spec.sh +1 -5
  23. data/spec/generators/rails-template.rb +24 -17
  24. data/spec/generators/sorbet_test_cases.rb +78 -40
  25. data/spec/rails_helper.rb +1 -1
  26. data/spec/sorbet_spec.rb +16 -14
  27. data/spec/support/v4.2/Gemfile.lock +6 -6
  28. data/spec/support/v4.2/app/models/application_record.rb +1 -2
  29. data/spec/support/v4.2/app/models/spell_book.rb +6 -0
  30. data/spec/support/v4.2/app/models/wizard.rb +2 -0
  31. data/spec/support/v4.2/db/migrate/20190620000003_create_spell_books.rb +1 -0
  32. data/spec/support/v4.2/db/schema.rb +1 -0
  33. data/spec/support/v4.2/sorbet_test_cases.rb +78 -40
  34. data/spec/support/v5.0/Gemfile.lock +6 -6
  35. data/spec/support/v5.0/app/models/application_record.rb +1 -2
  36. data/spec/support/v5.0/app/models/spell_book.rb +7 -1
  37. data/spec/support/v5.0/app/models/wizard.rb +2 -0
  38. data/spec/support/v5.0/config/initializers/new_framework_defaults.rb +1 -1
  39. data/spec/support/v5.0/db/migrate/20190620000003_create_spell_books.rb +1 -0
  40. data/spec/support/v5.0/db/schema.rb +1 -0
  41. data/spec/support/v5.0/sorbet_test_cases.rb +78 -40
  42. data/spec/support/v5.1/Gemfile.lock +6 -6
  43. data/spec/support/v5.1/app/models/application_record.rb +1 -2
  44. data/spec/support/v5.1/app/models/spell_book.rb +7 -1
  45. data/spec/support/v5.1/app/models/wizard.rb +2 -0
  46. data/spec/support/v5.1/db/migrate/20190620000003_create_spell_books.rb +1 -0
  47. data/spec/support/v5.1/db/schema.rb +1 -0
  48. data/spec/support/v5.1/sorbet_test_cases.rb +78 -40
  49. data/spec/support/v5.2/Gemfile +1 -1
  50. data/spec/support/v5.2/Gemfile.lock +7 -7
  51. data/spec/support/v5.2/app/models/application_record.rb +1 -2
  52. data/spec/support/v5.2/app/models/spell_book.rb +7 -1
  53. data/spec/support/v5.2/app/models/wizard.rb +2 -0
  54. data/spec/support/v5.2/db/migrate/20190620000003_create_spell_books.rb +1 -0
  55. data/spec/support/v5.2/db/schema.rb +1 -0
  56. data/spec/support/v5.2/sorbet_test_cases.rb +78 -40
  57. data/spec/support/v6.0/Gemfile +2 -3
  58. data/spec/support/v6.0/Gemfile.lock +64 -64
  59. data/spec/support/v6.0/app/models/application_record.rb +1 -2
  60. data/spec/support/v6.0/app/models/spell_book.rb +7 -1
  61. data/spec/support/v6.0/app/models/wizard.rb +2 -0
  62. data/spec/support/v6.0/config/puma.rb +3 -0
  63. data/spec/support/v6.0/db/migrate/20190620000003_create_spell_books.rb +1 -0
  64. data/spec/support/v6.0/db/schema.rb +1 -0
  65. data/spec/support/v6.0/sorbet_test_cases.rb +78 -40
  66. data/spec/test_data/v4.2/expected_no_routes.rbi +3 -10
  67. data/spec/test_data/v4.2/expected_potion.rbi +356 -52
  68. data/spec/test_data/v4.2/expected_routes.rbi +10 -4
  69. data/spec/test_data/v4.2/expected_spell_book.rbi +428 -53
  70. data/spec/test_data/v4.2/expected_srb_tc_output.txt +1 -80
  71. data/spec/test_data/v4.2/expected_wand.rbi +347 -19
  72. data/spec/test_data/v4.2/expected_wizard.rbi +356 -16
  73. data/spec/test_data/v4.2/expected_wizard_wo_spellbook.rbi +356 -16
  74. data/spec/test_data/v5.0/expected_internal_metadata.rbi +385 -51
  75. data/spec/test_data/v5.0/expected_no_routes.rbi +3 -10
  76. data/spec/test_data/v5.0/expected_potion.rbi +383 -52
  77. data/spec/test_data/v5.0/expected_routes.rbi +10 -4
  78. data/spec/test_data/v5.0/expected_schema_migration.rbi +385 -51
  79. data/spec/test_data/v5.0/expected_spell_book.rbi +455 -53
  80. data/spec/test_data/v5.0/expected_srb_tc_output.txt +1 -98
  81. data/spec/test_data/v5.0/expected_wand.rbi +374 -19
  82. data/spec/test_data/v5.0/expected_wizard.rbi +383 -16
  83. data/spec/test_data/v5.0/expected_wizard_wo_spellbook.rbi +383 -16
  84. data/spec/test_data/v5.1/expected_internal_metadata.rbi +403 -51
  85. data/spec/test_data/v5.1/expected_no_routes.rbi +3 -10
  86. data/spec/test_data/v5.1/expected_potion.rbi +401 -52
  87. data/spec/test_data/v5.1/expected_routes.rbi +10 -4
  88. data/spec/test_data/v5.1/expected_schema_migration.rbi +403 -51
  89. data/spec/test_data/v5.1/expected_spell_book.rbi +473 -53
  90. data/spec/test_data/v5.1/expected_srb_tc_output.txt +1 -80
  91. data/spec/test_data/v5.1/expected_wand.rbi +392 -19
  92. data/spec/test_data/v5.1/expected_wizard.rbi +401 -16
  93. data/spec/test_data/v5.1/expected_wizard_wo_spellbook.rbi +401 -16
  94. data/spec/test_data/v5.2-no-sorbet/expected_attachment.rbi +403 -51
  95. data/spec/test_data/v5.2-no-sorbet/expected_blob.rbi +421 -51
  96. data/spec/test_data/v5.2-no-sorbet/expected_internal_metadata.rbi +403 -51
  97. data/spec/test_data/v5.2-no-sorbet/expected_no_routes.rbi +3 -10
  98. data/spec/test_data/v5.2-no-sorbet/expected_potion.rbi +401 -52
  99. data/spec/test_data/v5.2-no-sorbet/expected_routes.rbi +15 -4
  100. data/spec/test_data/v5.2-no-sorbet/expected_schema_migration.rbi +403 -51
  101. data/spec/test_data/v5.2-no-sorbet/expected_spell_book.rbi +473 -53
  102. data/spec/test_data/v5.2-no-sorbet/expected_srb_tc_output.txt +1 -80
  103. data/spec/test_data/v5.2-no-sorbet/expected_wand.rbi +392 -19
  104. data/spec/test_data/v5.2-no-sorbet/expected_wizard.rbi +401 -16
  105. data/spec/test_data/v5.2-no-sorbet/expected_wizard_wo_spellbook.rbi +401 -16
  106. data/spec/test_data/v5.2/expected_attachment.rbi +403 -51
  107. data/spec/test_data/v5.2/expected_blob.rbi +421 -51
  108. data/spec/test_data/v5.2/expected_internal_metadata.rbi +403 -51
  109. data/spec/test_data/v5.2/expected_no_routes.rbi +3 -10
  110. data/spec/test_data/v5.2/expected_potion.rbi +401 -52
  111. data/spec/test_data/v5.2/expected_routes.rbi +15 -4
  112. data/spec/test_data/v5.2/expected_schema_migration.rbi +403 -51
  113. data/spec/test_data/v5.2/expected_spell_book.rbi +473 -53
  114. data/spec/test_data/v5.2/expected_srb_tc_output.txt +1 -80
  115. data/spec/test_data/v5.2/expected_wand.rbi +392 -19
  116. data/spec/test_data/v5.2/expected_wizard.rbi +401 -16
  117. data/spec/test_data/v5.2/expected_wizard_wo_spellbook.rbi +401 -16
  118. data/spec/test_data/v6.0/expected_attachment.rbi +439 -51
  119. data/spec/test_data/v6.0/expected_blob.rbi +457 -51
  120. data/spec/test_data/v6.0/expected_internal_metadata.rbi +439 -51
  121. data/spec/test_data/v6.0/expected_no_routes.rbi +3 -10
  122. data/spec/test_data/v6.0/expected_potion.rbi +437 -52
  123. data/spec/test_data/v6.0/expected_routes.rbi +25 -4
  124. data/spec/test_data/v6.0/expected_schema_migration.rbi +439 -51
  125. data/spec/test_data/v6.0/expected_spell_book.rbi +545 -53
  126. data/spec/test_data/v6.0/expected_srb_tc_output.txt +1 -80
  127. data/spec/test_data/v6.0/expected_wand.rbi +464 -19
  128. data/spec/test_data/v6.0/expected_wizard.rbi +473 -16
  129. data/spec/test_data/v6.0/expected_wizard_wo_spellbook.rbi +473 -16
  130. metadata +29 -581
  131. data/spec/support/v4.2/sorbet/config +0 -2
  132. data/spec/support/v4.2/sorbet/rbi/gems/actionmailer.rbi +0 -267
  133. data/spec/support/v4.2/sorbet/rbi/gems/actionpack.rbi +0 -2883
  134. data/spec/support/v4.2/sorbet/rbi/gems/actionview.rbi +0 -978
  135. data/spec/support/v4.2/sorbet/rbi/gems/activejob.rbi +0 -19
  136. data/spec/support/v4.2/sorbet/rbi/gems/activemodel.rbi +0 -335
  137. data/spec/support/v4.2/sorbet/rbi/gems/activerecord.rbi +0 -3385
  138. data/spec/support/v4.2/sorbet/rbi/gems/activesupport.rbi +0 -1892
  139. data/spec/support/v4.2/sorbet/rbi/gems/arel.rbi +0 -1109
  140. data/spec/support/v4.2/sorbet/rbi/gems/byebug.rbi +0 -1039
  141. data/spec/support/v4.2/sorbet/rbi/gems/concurrent-ruby.rbi +0 -218
  142. data/spec/support/v4.2/sorbet/rbi/gems/crass.rbi +0 -92
  143. data/spec/support/v4.2/sorbet/rbi/gems/erubis.rbi +0 -265
  144. data/spec/support/v4.2/sorbet/rbi/gems/globalid.rbi +0 -98
  145. data/spec/support/v4.2/sorbet/rbi/gems/i18n.rbi +0 -186
  146. data/spec/support/v4.2/sorbet/rbi/gems/jbuilder.rbi +0 -99
  147. data/spec/support/v4.2/sorbet/rbi/gems/loofah.rbi +0 -129
  148. data/spec/support/v4.2/sorbet/rbi/gems/mail.rbi +0 -1091
  149. data/spec/support/v4.2/sorbet/rbi/gems/mini_mime.rbi +0 -51
  150. data/spec/support/v4.2/sorbet/rbi/gems/minitest.rbi +0 -276
  151. data/spec/support/v4.2/sorbet/rbi/gems/nokogiri.rbi +0 -1010
  152. data/spec/support/v4.2/sorbet/rbi/gems/parlour.rbi +0 -214
  153. data/spec/support/v4.2/sorbet/rbi/gems/rack-test.rbi +0 -145
  154. data/spec/support/v4.2/sorbet/rbi/gems/rack.rbi +0 -490
  155. data/spec/support/v4.2/sorbet/rbi/gems/rails-deprecated_sanitizer.rbi +0 -13
  156. data/spec/support/v4.2/sorbet/rbi/gems/rails-dom-testing.rbi +0 -76
  157. data/spec/support/v4.2/sorbet/rbi/gems/rails-html-sanitizer.rbi +0 -91
  158. data/spec/support/v4.2/sorbet/rbi/gems/railties.rbi +0 -617
  159. data/spec/support/v4.2/sorbet/rbi/gems/sqlite3.rbi +0 -345
  160. data/spec/support/v4.2/sorbet/rbi/gems/thor.rbi +0 -401
  161. data/spec/support/v4.2/sorbet/rbi/gems/thread_safe.rbi +0 -81
  162. data/spec/support/v4.2/sorbet/rbi/gems/tzinfo.rbi +0 -407
  163. data/spec/support/v4.2/sorbet/rbi/sorbet-typed/lib/actionmailer/all/actionmailer.rbi +0 -13
  164. data/spec/support/v4.2/sorbet/rbi/sorbet-typed/lib/actionpack/all/actionpack.rbi +0 -468
  165. data/spec/support/v4.2/sorbet/rbi/sorbet-typed/lib/activemodel/all/activemodel.rbi +0 -422
  166. data/spec/support/v4.2/sorbet/rbi/sorbet-typed/lib/activerecord/all/activerecord.rbi +0 -1263
  167. data/spec/support/v4.2/sorbet/rbi/sorbet-typed/lib/activesupport/all/activesupport.rbi +0 -458
  168. data/spec/support/v4.2/sorbet/rbi/sorbet-typed/lib/bundler/all/bundler.rbi +0 -8575
  169. data/spec/support/v4.2/sorbet/rbi/sorbet-typed/lib/minitest/all/minitest.rbi +0 -99
  170. data/spec/support/v4.2/sorbet/rbi/sorbet-typed/lib/railties/all/railties.rbi +0 -22
  171. data/spec/support/v4.2/sorbet/rbi/sorbet-typed/lib/ruby/all/open3.rbi +0 -111
  172. data/spec/support/v4.2/sorbet/rbi/sorbet-typed/lib/ruby/all/resolv.rbi +0 -543
  173. data/spec/support/v4.2/sorbet/rbi/todo.rbi +0 -66
  174. data/spec/support/v5.0/sorbet/config +0 -2
  175. data/spec/support/v5.0/sorbet/rbi/gems/actionmailer.rbi +0 -331
  176. data/spec/support/v5.0/sorbet/rbi/gems/actionpack.rbi +0 -2987
  177. data/spec/support/v5.0/sorbet/rbi/gems/actionview.rbi +0 -1092
  178. data/spec/support/v5.0/sorbet/rbi/gems/activejob.rbi +0 -230
  179. data/spec/support/v5.0/sorbet/rbi/gems/activemodel.rbi +0 -562
  180. data/spec/support/v5.0/sorbet/rbi/gems/activerecord.rbi +0 -3684
  181. data/spec/support/v5.0/sorbet/rbi/gems/activesupport.rbi +0 -1943
  182. data/spec/support/v5.0/sorbet/rbi/gems/arel.rbi +0 -1222
  183. data/spec/support/v5.0/sorbet/rbi/gems/byebug.rbi +0 -1039
  184. data/spec/support/v5.0/sorbet/rbi/gems/concurrent-ruby.rbi +0 -1587
  185. data/spec/support/v5.0/sorbet/rbi/gems/crass.rbi +0 -92
  186. data/spec/support/v5.0/sorbet/rbi/gems/erubis.rbi +0 -265
  187. data/spec/support/v5.0/sorbet/rbi/gems/globalid.rbi +0 -98
  188. data/spec/support/v5.0/sorbet/rbi/gems/i18n.rbi +0 -191
  189. data/spec/support/v5.0/sorbet/rbi/gems/jbuilder.rbi +0 -99
  190. data/spec/support/v5.0/sorbet/rbi/gems/loofah.rbi +0 -129
  191. data/spec/support/v5.0/sorbet/rbi/gems/mail.rbi +0 -1091
  192. data/spec/support/v5.0/sorbet/rbi/gems/mini_mime.rbi +0 -51
  193. data/spec/support/v5.0/sorbet/rbi/gems/nokogiri.rbi +0 -1010
  194. data/spec/support/v5.0/sorbet/rbi/gems/parlour.rbi +0 -214
  195. data/spec/support/v5.0/sorbet/rbi/gems/puma.rbi +0 -570
  196. data/spec/support/v5.0/sorbet/rbi/gems/rack-test.rbi +0 -145
  197. data/spec/support/v5.0/sorbet/rbi/gems/rack.rbi +0 -489
  198. data/spec/support/v5.0/sorbet/rbi/gems/rails-html-sanitizer.rbi +0 -91
  199. data/spec/support/v5.0/sorbet/rbi/gems/railties.rbi +0 -472
  200. data/spec/support/v5.0/sorbet/rbi/gems/sqlite3.rbi +0 -345
  201. data/spec/support/v5.0/sorbet/rbi/gems/thread_safe.rbi +0 -81
  202. data/spec/support/v5.0/sorbet/rbi/gems/tzinfo.rbi +0 -407
  203. data/spec/support/v5.0/sorbet/rbi/sorbet-typed/lib/actionmailer/all/actionmailer.rbi +0 -13
  204. data/spec/support/v5.0/sorbet/rbi/sorbet-typed/lib/actionpack/all/actionpack.rbi +0 -468
  205. data/spec/support/v5.0/sorbet/rbi/sorbet-typed/lib/activemodel/all/activemodel.rbi +0 -422
  206. data/spec/support/v5.0/sorbet/rbi/sorbet-typed/lib/activerecord/all/activerecord.rbi +0 -1263
  207. data/spec/support/v5.0/sorbet/rbi/sorbet-typed/lib/activesupport/all/activesupport.rbi +0 -458
  208. data/spec/support/v5.0/sorbet/rbi/sorbet-typed/lib/bundler/all/bundler.rbi +0 -8575
  209. data/spec/support/v5.0/sorbet/rbi/sorbet-typed/lib/minitest/all/minitest.rbi +0 -99
  210. data/spec/support/v5.0/sorbet/rbi/sorbet-typed/lib/railties/all/railties.rbi +0 -22
  211. data/spec/support/v5.0/sorbet/rbi/sorbet-typed/lib/ruby/all/open3.rbi +0 -111
  212. data/spec/support/v5.0/sorbet/rbi/sorbet-typed/lib/ruby/all/resolv.rbi +0 -543
  213. data/spec/support/v5.0/sorbet/rbi/todo.rbi +0 -68
  214. data/spec/support/v5.1/sorbet/config +0 -2
  215. data/spec/support/v5.1/sorbet/rbi/gems/actionmailer.rbi +0 -382
  216. data/spec/support/v5.1/sorbet/rbi/gems/actionpack.rbi +0 -3027
  217. data/spec/support/v5.1/sorbet/rbi/gems/actionview.rbi +0 -1114
  218. data/spec/support/v5.1/sorbet/rbi/gems/activejob.rbi +0 -238
  219. data/spec/support/v5.1/sorbet/rbi/gems/activemodel.rbi +0 -547
  220. data/spec/support/v5.1/sorbet/rbi/gems/activerecord.rbi +0 -3943
  221. data/spec/support/v5.1/sorbet/rbi/gems/activesupport.rbi +0 -2042
  222. data/spec/support/v5.1/sorbet/rbi/gems/arel.rbi +0 -1220
  223. data/spec/support/v5.1/sorbet/rbi/gems/bindex.rbi +0 -36
  224. data/spec/support/v5.1/sorbet/rbi/gems/byebug.rbi +0 -1039
  225. data/spec/support/v5.1/sorbet/rbi/gems/concurrent-ruby.rbi +0 -1587
  226. data/spec/support/v5.1/sorbet/rbi/gems/crass.rbi +0 -92
  227. data/spec/support/v5.1/sorbet/rbi/gems/erubi.rbi +0 -26
  228. data/spec/support/v5.1/sorbet/rbi/gems/globalid.rbi +0 -98
  229. data/spec/support/v5.1/sorbet/rbi/gems/i18n.rbi +0 -191
  230. data/spec/support/v5.1/sorbet/rbi/gems/jbuilder.rbi +0 -99
  231. data/spec/support/v5.1/sorbet/rbi/gems/loofah.rbi +0 -129
  232. data/spec/support/v5.1/sorbet/rbi/gems/mail.rbi +0 -1091
  233. data/spec/support/v5.1/sorbet/rbi/gems/mini_mime.rbi +0 -51
  234. data/spec/support/v5.1/sorbet/rbi/gems/nokogiri.rbi +0 -1010
  235. data/spec/support/v5.1/sorbet/rbi/gems/parlour.rbi +0 -214
  236. data/spec/support/v5.1/sorbet/rbi/gems/puma.rbi +0 -570
  237. data/spec/support/v5.1/sorbet/rbi/gems/rack-test.rbi +0 -161
  238. data/spec/support/v5.1/sorbet/rbi/gems/rack.rbi +0 -489
  239. data/spec/support/v5.1/sorbet/rbi/gems/rails-html-sanitizer.rbi +0 -91
  240. data/spec/support/v5.1/sorbet/rbi/gems/railties.rbi +0 -498
  241. data/spec/support/v5.1/sorbet/rbi/gems/sqlite3.rbi +0 -353
  242. data/spec/support/v5.1/sorbet/rbi/gems/thread_safe.rbi +0 -81
  243. data/spec/support/v5.1/sorbet/rbi/gems/tzinfo.rbi +0 -407
  244. data/spec/support/v5.1/sorbet/rbi/gems/web-console.rbi +0 -73
  245. data/spec/support/v5.1/sorbet/rbi/sorbet-typed/lib/actionmailer/all/actionmailer.rbi +0 -13
  246. data/spec/support/v5.1/sorbet/rbi/sorbet-typed/lib/actionpack/all/actionpack.rbi +0 -468
  247. data/spec/support/v5.1/sorbet/rbi/sorbet-typed/lib/activemodel/all/activemodel.rbi +0 -422
  248. data/spec/support/v5.1/sorbet/rbi/sorbet-typed/lib/activerecord/all/activerecord.rbi +0 -1263
  249. data/spec/support/v5.1/sorbet/rbi/sorbet-typed/lib/activesupport/all/activesupport.rbi +0 -458
  250. data/spec/support/v5.1/sorbet/rbi/sorbet-typed/lib/bundler/all/bundler.rbi +0 -8575
  251. data/spec/support/v5.1/sorbet/rbi/sorbet-typed/lib/minitest/all/minitest.rbi +0 -99
  252. data/spec/support/v5.1/sorbet/rbi/sorbet-typed/lib/railties/all/railties.rbi +0 -22
  253. data/spec/support/v5.1/sorbet/rbi/sorbet-typed/lib/ruby/all/open3.rbi +0 -111
  254. data/spec/support/v5.1/sorbet/rbi/sorbet-typed/lib/ruby/all/resolv.rbi +0 -543
  255. data/spec/support/v5.1/sorbet/rbi/todo.rbi +0 -68
  256. data/spec/support/v5.2-no-sorbet/.gitignore +0 -31
  257. data/spec/support/v5.2-no-sorbet/Gemfile +0 -39
  258. data/spec/support/v5.2-no-sorbet/Gemfile.lock +0 -156
  259. data/spec/support/v5.2-no-sorbet/README.md +0 -24
  260. data/spec/support/v5.2-no-sorbet/Rakefile +0 -6
  261. data/spec/support/v5.2-no-sorbet/app/assets/config/manifest.js +0 -2
  262. data/spec/support/v5.2-no-sorbet/app/assets/images/.keep +0 -0
  263. data/spec/support/v5.2-no-sorbet/app/assets/stylesheets/application.css +0 -15
  264. data/spec/support/v5.2-no-sorbet/app/controllers/application_controller.rb +0 -2
  265. data/spec/support/v5.2-no-sorbet/app/controllers/concerns/.keep +0 -0
  266. data/spec/support/v5.2-no-sorbet/app/helpers/application_helper.rb +0 -2
  267. data/spec/support/v5.2-no-sorbet/app/helpers/bar_helper.rb +0 -2
  268. data/spec/support/v5.2-no-sorbet/app/helpers/baz_helper.rb +0 -2
  269. data/spec/support/v5.2-no-sorbet/app/helpers/foo_helper.rb +0 -2
  270. data/spec/support/v5.2-no-sorbet/app/jobs/application_job.rb +0 -2
  271. data/spec/support/v5.2-no-sorbet/app/mailers/application_mailer.rb +0 -4
  272. data/spec/support/v5.2-no-sorbet/app/models/application_record.rb +0 -4
  273. data/spec/support/v5.2-no-sorbet/app/models/concerns/.keep +0 -0
  274. data/spec/support/v5.2-no-sorbet/app/models/concerns/mythical.rb +0 -10
  275. data/spec/support/v5.2-no-sorbet/app/models/potion.rb +0 -4
  276. data/spec/support/v5.2-no-sorbet/app/models/spell_book.rb +0 -4
  277. data/spec/support/v5.2-no-sorbet/app/models/wand.rb +0 -16
  278. data/spec/support/v5.2-no-sorbet/app/models/wizard.rb +0 -13
  279. data/spec/support/v5.2-no-sorbet/app/views/layouts/application.html.erb +0 -14
  280. data/spec/support/v5.2-no-sorbet/app/views/layouts/mailer.html.erb +0 -13
  281. data/spec/support/v5.2-no-sorbet/app/views/layouts/mailer.text.erb +0 -1
  282. data/spec/support/v5.2-no-sorbet/bin/bundle +0 -3
  283. data/spec/support/v5.2-no-sorbet/bin/rails +0 -4
  284. data/spec/support/v5.2-no-sorbet/bin/rake +0 -4
  285. data/spec/support/v5.2-no-sorbet/bin/setup +0 -36
  286. data/spec/support/v5.2-no-sorbet/bin/update +0 -31
  287. data/spec/support/v5.2-no-sorbet/bin/yarn +0 -11
  288. data/spec/support/v5.2-no-sorbet/config.ru +0 -5
  289. data/spec/support/v5.2-no-sorbet/config/application.rb +0 -33
  290. data/spec/support/v5.2-no-sorbet/config/boot.rb +0 -3
  291. data/spec/support/v5.2-no-sorbet/config/database.yml +0 -25
  292. data/spec/support/v5.2-no-sorbet/config/environment.rb +0 -5
  293. data/spec/support/v5.2-no-sorbet/config/environments/development.rb +0 -54
  294. data/spec/support/v5.2-no-sorbet/config/environments/production.rb +0 -80
  295. data/spec/support/v5.2-no-sorbet/config/environments/test.rb +0 -46
  296. data/spec/support/v5.2-no-sorbet/config/initializers/application_controller_renderer.rb +0 -8
  297. data/spec/support/v5.2-no-sorbet/config/initializers/backtrace_silencers.rb +0 -7
  298. data/spec/support/v5.2-no-sorbet/config/initializers/content_security_policy.rb +0 -25
  299. data/spec/support/v5.2-no-sorbet/config/initializers/cookies_serializer.rb +0 -5
  300. data/spec/support/v5.2-no-sorbet/config/initializers/filter_parameter_logging.rb +0 -4
  301. data/spec/support/v5.2-no-sorbet/config/initializers/inflections.rb +0 -16
  302. data/spec/support/v5.2-no-sorbet/config/initializers/mime_types.rb +0 -4
  303. data/spec/support/v5.2-no-sorbet/config/initializers/sorbet_rails.rb +0 -3
  304. data/spec/support/v5.2-no-sorbet/config/initializers/wrap_parameters.rb +0 -14
  305. data/spec/support/v5.2-no-sorbet/config/locales/en.yml +0 -33
  306. data/spec/support/v5.2-no-sorbet/config/puma.rb +0 -34
  307. data/spec/support/v5.2-no-sorbet/config/routes.rb +0 -4
  308. data/spec/support/v5.2-no-sorbet/config/storage.yml +0 -34
  309. data/spec/support/v5.2-no-sorbet/db/migrate/20190620000001_create_wizards.rb +0 -12
  310. data/spec/support/v5.2-no-sorbet/db/migrate/20190620000002_create_wands.rb +0 -11
  311. data/spec/support/v5.2-no-sorbet/db/migrate/20190620000003_create_spell_books.rb +0 -8
  312. data/spec/support/v5.2-no-sorbet/db/migrate/20190620000004_add_more_column_types_to_wands.rb +0 -15
  313. data/spec/support/v5.2-no-sorbet/db/schema.rb +0 -47
  314. data/spec/support/v5.2-no-sorbet/db/seeds.rb +0 -7
  315. data/spec/support/v5.2-no-sorbet/lib/assets/.keep +0 -0
  316. data/spec/support/v5.2-no-sorbet/lib/mythical_rbi_plugin.rb +0 -16
  317. data/spec/support/v5.2-no-sorbet/lib/tasks/.keep +0 -0
  318. data/spec/support/v5.2-no-sorbet/log/.keep +0 -0
  319. data/spec/support/v5.2-no-sorbet/package.json +0 -5
  320. data/spec/support/v5.2-no-sorbet/sorbet_test_cases.rb +0 -123
  321. data/spec/support/v5.2-no-sorbet/storage/.keep +0 -0
  322. data/spec/support/v5.2-no-sorbet/tmp/.keep +0 -0
  323. data/spec/support/v5.2-no-sorbet/typed-override.yaml +0 -2
  324. data/spec/support/v5.2-no-sorbet/vendor/.keep +0 -0
  325. data/spec/support/v5.2/sorbet/config +0 -2
  326. data/spec/support/v5.2/sorbet/rbi/gems/actionmailer.rbi +0 -391
  327. data/spec/support/v5.2/sorbet/rbi/gems/actionpack.rbi +0 -3109
  328. data/spec/support/v5.2/sorbet/rbi/gems/actionview.rbi +0 -1128
  329. data/spec/support/v5.2/sorbet/rbi/gems/activejob.rbi +0 -244
  330. data/spec/support/v5.2/sorbet/rbi/gems/activemodel.rbi +0 -741
  331. data/spec/support/v5.2/sorbet/rbi/gems/activerecord.rbi +0 -3827
  332. data/spec/support/v5.2/sorbet/rbi/gems/activestorage.rbi +0 -173
  333. data/spec/support/v5.2/sorbet/rbi/gems/activesupport.rbi +0 -2167
  334. data/spec/support/v5.2/sorbet/rbi/gems/arel.rbi +0 -1252
  335. data/spec/support/v5.2/sorbet/rbi/gems/bindex.rbi +0 -36
  336. data/spec/support/v5.2/sorbet/rbi/gems/byebug.rbi +0 -1039
  337. data/spec/support/v5.2/sorbet/rbi/gems/concurrent-ruby.rbi +0 -1587
  338. data/spec/support/v5.2/sorbet/rbi/gems/crass.rbi +0 -92
  339. data/spec/support/v5.2/sorbet/rbi/gems/erubi.rbi +0 -26
  340. data/spec/support/v5.2/sorbet/rbi/gems/globalid.rbi +0 -98
  341. data/spec/support/v5.2/sorbet/rbi/gems/i18n.rbi +0 -191
  342. data/spec/support/v5.2/sorbet/rbi/gems/jbuilder.rbi +0 -99
  343. data/spec/support/v5.2/sorbet/rbi/gems/loofah.rbi +0 -129
  344. data/spec/support/v5.2/sorbet/rbi/gems/mail.rbi +0 -1091
  345. data/spec/support/v5.2/sorbet/rbi/gems/marcel.rbi +0 -12
  346. data/spec/support/v5.2/sorbet/rbi/gems/mini_mime.rbi +0 -51
  347. data/spec/support/v5.2/sorbet/rbi/gems/nokogiri.rbi +0 -1010
  348. data/spec/support/v5.2/sorbet/rbi/gems/parlour.rbi +0 -214
  349. data/spec/support/v5.2/sorbet/rbi/gems/puma.rbi +0 -570
  350. data/spec/support/v5.2/sorbet/rbi/gems/rack-test.rbi +0 -161
  351. data/spec/support/v5.2/sorbet/rbi/gems/rack.rbi +0 -493
  352. data/spec/support/v5.2/sorbet/rbi/gems/rails-html-sanitizer.rbi +0 -91
  353. data/spec/support/v5.2/sorbet/rbi/gems/railties.rbi +0 -508
  354. data/spec/support/v5.2/sorbet/rbi/gems/sqlite3.rbi +0 -353
  355. data/spec/support/v5.2/sorbet/rbi/gems/thread_safe.rbi +0 -81
  356. data/spec/support/v5.2/sorbet/rbi/gems/tzinfo.rbi +0 -407
  357. data/spec/support/v5.2/sorbet/rbi/gems/web-console.rbi +0 -73
  358. data/spec/support/v5.2/sorbet/rbi/sorbet-typed/lib/actionmailer/all/actionmailer.rbi +0 -13
  359. data/spec/support/v5.2/sorbet/rbi/sorbet-typed/lib/actionpack/all/actionpack.rbi +0 -468
  360. data/spec/support/v5.2/sorbet/rbi/sorbet-typed/lib/activemodel/all/activemodel.rbi +0 -422
  361. data/spec/support/v5.2/sorbet/rbi/sorbet-typed/lib/activerecord/>=5.2/activerecord.rbi +0 -17
  362. data/spec/support/v5.2/sorbet/rbi/sorbet-typed/lib/activerecord/all/activerecord.rbi +0 -1263
  363. data/spec/support/v5.2/sorbet/rbi/sorbet-typed/lib/activerecord/~>5.2.0/activerecord.rbi +0 -10
  364. data/spec/support/v5.2/sorbet/rbi/sorbet-typed/lib/activesupport/all/activesupport.rbi +0 -458
  365. data/spec/support/v5.2/sorbet/rbi/sorbet-typed/lib/bundler/all/bundler.rbi +0 -8575
  366. data/spec/support/v5.2/sorbet/rbi/sorbet-typed/lib/minitest/all/minitest.rbi +0 -99
  367. data/spec/support/v5.2/sorbet/rbi/sorbet-typed/lib/railties/all/railties.rbi +0 -22
  368. data/spec/support/v5.2/sorbet/rbi/sorbet-typed/lib/ruby/all/open3.rbi +0 -111
  369. data/spec/support/v5.2/sorbet/rbi/sorbet-typed/lib/ruby/all/resolv.rbi +0 -543
  370. data/spec/support/v5.2/sorbet/rbi/todo.rbi +0 -68
  371. data/spec/support/v6.0/sorbet/config +0 -2
  372. data/spec/support/v6.0/sorbet/rbi/gems/actionmailbox.rbi +0 -56
  373. data/spec/support/v6.0/sorbet/rbi/gems/actionmailer.rbi +0 -20
  374. data/spec/support/v6.0/sorbet/rbi/gems/actionpack.rbi +0 -2154
  375. data/spec/support/v6.0/sorbet/rbi/gems/actiontext.rbi +0 -32
  376. data/spec/support/v6.0/sorbet/rbi/gems/actionview.rbi +0 -1135
  377. data/spec/support/v6.0/sorbet/rbi/gems/activejob.rbi +0 -80
  378. data/spec/support/v6.0/sorbet/rbi/gems/activemodel.rbi +0 -751
  379. data/spec/support/v6.0/sorbet/rbi/gems/activerecord.rbi +0 -5414
  380. data/spec/support/v6.0/sorbet/rbi/gems/activestorage.rbi +0 -221
  381. data/spec/support/v6.0/sorbet/rbi/gems/activesupport.rbi +0 -2251
  382. data/spec/support/v6.0/sorbet/rbi/gems/bindex.rbi +0 -36
  383. data/spec/support/v6.0/sorbet/rbi/gems/byebug.rbi +0 -1039
  384. data/spec/support/v6.0/sorbet/rbi/gems/concurrent-ruby.rbi +0 -1587
  385. data/spec/support/v6.0/sorbet/rbi/gems/crass.rbi +0 -92
  386. data/spec/support/v6.0/sorbet/rbi/gems/erubi.rbi +0 -26
  387. data/spec/support/v6.0/sorbet/rbi/gems/globalid.rbi +0 -98
  388. data/spec/support/v6.0/sorbet/rbi/gems/i18n.rbi +0 -191
  389. data/spec/support/v6.0/sorbet/rbi/gems/jbuilder.rbi +0 -99
  390. data/spec/support/v6.0/sorbet/rbi/gems/loofah.rbi +0 -129
  391. data/spec/support/v6.0/sorbet/rbi/gems/mail.rbi +0 -1542
  392. data/spec/support/v6.0/sorbet/rbi/gems/marcel.rbi +0 -12
  393. data/spec/support/v6.0/sorbet/rbi/gems/mini_mime.rbi +0 -51
  394. data/spec/support/v6.0/sorbet/rbi/gems/nokogiri.rbi +0 -1010
  395. data/spec/support/v6.0/sorbet/rbi/gems/parlour.rbi +0 -214
  396. data/spec/support/v6.0/sorbet/rbi/gems/puma.rbi +0 -570
  397. data/spec/support/v6.0/sorbet/rbi/gems/rack-test.rbi +0 -161
  398. data/spec/support/v6.0/sorbet/rbi/gems/rack.rbi +0 -481
  399. data/spec/support/v6.0/sorbet/rbi/gems/rails-html-sanitizer.rbi +0 -91
  400. data/spec/support/v6.0/sorbet/rbi/gems/railties.rbi +0 -548
  401. data/spec/support/v6.0/sorbet/rbi/gems/sqlite3.rbi +0 -353
  402. data/spec/support/v6.0/sorbet/rbi/gems/thread_safe.rbi +0 -81
  403. data/spec/support/v6.0/sorbet/rbi/gems/tzinfo.rbi +0 -407
  404. data/spec/support/v6.0/sorbet/rbi/gems/web-console.rbi +0 -72
  405. data/spec/support/v6.0/sorbet/rbi/gems/zeitwerk.rbi +0 -127
  406. data/spec/support/v6.0/sorbet/rbi/sorbet-typed/lib/actionmailer/all/actionmailer.rbi +0 -13
  407. data/spec/support/v6.0/sorbet/rbi/sorbet-typed/lib/actionpack/all/actionpack.rbi +0 -468
  408. data/spec/support/v6.0/sorbet/rbi/sorbet-typed/lib/activemodel/all/activemodel.rbi +0 -422
  409. data/spec/support/v6.0/sorbet/rbi/sorbet-typed/lib/activerecord/>=5.2/activerecord.rbi +0 -17
  410. data/spec/support/v6.0/sorbet/rbi/sorbet-typed/lib/activerecord/all/activerecord.rbi +0 -1263
  411. data/spec/support/v6.0/sorbet/rbi/sorbet-typed/lib/activerecord/~>6.0.0.rc1/activerecord.rbi +0 -10
  412. data/spec/support/v6.0/sorbet/rbi/sorbet-typed/lib/activesupport/>=6.0.0.rc1/activesupport.rbi +0 -23
  413. data/spec/support/v6.0/sorbet/rbi/sorbet-typed/lib/activesupport/all/activesupport.rbi +0 -458
  414. data/spec/support/v6.0/sorbet/rbi/sorbet-typed/lib/bundler/all/bundler.rbi +0 -8575
  415. data/spec/support/v6.0/sorbet/rbi/sorbet-typed/lib/minitest/all/minitest.rbi +0 -99
  416. data/spec/support/v6.0/sorbet/rbi/sorbet-typed/lib/railties/all/railties.rbi +0 -22
  417. data/spec/support/v6.0/sorbet/rbi/sorbet-typed/lib/ruby/all/open3.rbi +0 -111
  418. data/spec/support/v6.0/sorbet/rbi/sorbet-typed/lib/ruby/all/resolv.rbi +0 -543
  419. 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: 2b140547379c65a11d38f65b8f1947e8d14e904e17a45d3a47d00898414cfecc
4
- data.tar.gz: 491a878f313376278994b35ae9a1fd2a62408be09572167f92d4ea822da54562
3
+ metadata.gz: dfa9a71f1119781cfb7095483dbbbab875f51f5562c475d77d38aabe1d97267f
4
+ data.tar.gz: 80d6b0e7cc740a65db4678213bd6f1e6d34a81852a516854afedd0ad407e5866
5
5
  SHA512:
6
- metadata.gz: ffa8138e362bb2b8799826fc14b39cc2bd0e213e56e9aa2e783e476cd1d92b84561be6844bf2cca573339f432815fa9d95ba3aef3d88fbba78d226d3edf43f3a
7
- data.tar.gz: 03c4a2fcc89ac330c883a098b44864bf3bff7170d0b929c84e4a38e3b806be322f988babaef8508f87c8dcf41ae4d1bb1859df05a2dfd4343ea24ea4395b2e8f
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-rails generated files
82
- /spec/support/**/sorbet/rails-rbi/*
83
- /spec/support/**/sorbet/rails-rbi/**/*
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
@@ -18,8 +18,6 @@ matrix:
18
18
  include:
19
19
  - rvm: 2.5
20
20
  env: RAILS_VERSION=5.2 SORBET_VERSION=0.4.4602
21
- - rvm: 2.5
22
- env: RAILS_VERSION=5.2 TEST_SRB_INIT=true
23
21
  exclude:
24
22
  - rvm: 2.3
25
23
  env: RAILS_VERSION=6.0
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.rc1"
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", ">= 5.2.3"
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 relation class
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.rc2")
26
- system("rails _6.0.0.rc2_ -v")
27
- system("RAILS_VERSION='6.0' rails _6.0.0.rc2_ 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")
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.2-no-sorbet', 'v5.1', 'v5.0', 'v4.2'].each do |version|
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: true
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
- ar_querying_rbi = root.create_module(model_relation_shared_module_name)
13
- ar_querying_rbi.create_method(
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
- ar_named_scope_rbi = root.create_module(self.model_relation_shared_module_name)
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
- ar_named_scope_rbi.create_method(
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
- ar_querying_rbi = root.create_module(self.model_relation_shared_module_name)
10
- ar_querying_rbi.create_method(
9
+ add_relation_query_method(
10
+ root,
11
11
  "all",
12
- return_type: self.model_relation_class_name,
13
12
  )
14
- ar_querying_rbi.create_method(
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
- ar_querying_rbi.create_method(
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
- model_assoc_proxy_class_rbi = root.create_class(self.model_assoc_proxy_class_name)
14
- model_assoc_proxy_class_rbi.create_include(where_not_module_name)
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
@@ -1,4 +1,4 @@
1
- # typed: true
1
+ # typed: strict
2
2
  require('sorbet-rails/model_plugins/base')
3
3
  require('sorbet-rails/model_plugins/active_record_enum')
4
4
  require('sorbet-rails/model_plugins/active_record_querying')
@@ -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 model_relation_shared_module_name
28
- "#{model_class.name}::ModelRelationShared"
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
@@ -1,4 +1,4 @@
1
- # typed: strict
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