sorbet-rails 0.3.0 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (431) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +5 -2
  3. data/.travis.yml +7 -1
  4. data/CONTRIBUTING.md +3 -1
  5. data/Gemfile +11 -0
  6. data/README.md +0 -2
  7. data/{rbi → lib/sorbet-rails/rbi}/activerecord.rbi +118 -86
  8. data/lib/sorbet-rails/tasks/rails_rbi.rake +15 -6
  9. data/lib/sorbet-rails/utils.rb +11 -0
  10. data/sorbet-rails.gemspec +1 -1
  11. data/spec/bin/run_all_specs.sh +3 -2
  12. data/spec/bin/run_spec.sh +33 -26
  13. data/spec/model_rbi_formatter_spec.rb +0 -15
  14. data/spec/rails_helper.rb +12 -7
  15. data/spec/rake_rails_rbi_models_spec.rb +22 -5
  16. data/spec/rake_rails_rbi_routes_spec.rb +0 -1
  17. data/spec/sorbet_spec.rb +80 -0
  18. data/spec/support/rails_shared/config/routes.rb +1 -0
  19. data/spec/support/rails_shared/sorbet_test_cases.rb +120 -0
  20. data/spec/support/rails_symlinks/sorbet_test_cases.rb +1 -0
  21. data/spec/support/v4.2/Gemfile +13 -0
  22. data/spec/support/v4.2/Gemfile.lock +138 -0
  23. data/spec/support/v4.2/app/controllers/application_controller.rb +1 -0
  24. data/spec/support/v4.2/app/helpers/application_helper.rb +1 -0
  25. data/spec/support/v4.2/config/application.rb +1 -0
  26. data/spec/support/v4.2/config/boot.rb +1 -0
  27. data/spec/support/v4.2/config/environment.rb +1 -0
  28. data/spec/support/v4.2/config/environments/development.rb +1 -0
  29. data/spec/support/v4.2/config/environments/production.rb +1 -0
  30. data/spec/support/v4.2/config/environments/test.rb +1 -0
  31. data/spec/support/v4.2/config/initializers/backtrace_silencers.rb +1 -0
  32. data/spec/support/v4.2/config/initializers/cookies_serializer.rb +1 -0
  33. data/spec/support/v4.2/config/initializers/filter_parameter_logging.rb +1 -0
  34. data/spec/support/v4.2/config/initializers/inflections.rb +1 -0
  35. data/spec/support/v4.2/config/initializers/mime_types.rb +1 -0
  36. data/spec/support/v4.2/config/initializers/session_store.rb +1 -0
  37. data/spec/support/v4.2/config/initializers/to_time_preserves_timezone.rb +1 -0
  38. data/spec/support/v4.2/config/initializers/wrap_parameters.rb +1 -0
  39. data/spec/support/v4.2/config/routes.rb +1 -0
  40. data/spec/support/v4.2/db/migrate/20190620001234_create_wizards.rb +1 -0
  41. data/spec/support/v4.2/db/migrate/20190620003037_create_wands.rb +1 -0
  42. data/spec/support/v4.2/db/migrate/20190620003739_create_spell_books.rb +1 -0
  43. data/spec/support/v4.2/db/migrate/20190622000000_add_more_column_types_to_wands.rb +1 -0
  44. data/spec/support/v4.2/db/schema.rb +1 -0
  45. data/spec/support/v4.2/db/seeds.rb +1 -0
  46. data/spec/support/v4.2/sorbet/config +2 -0
  47. data/spec/support/v4.2/sorbet/rbi/gems/actionmailer.rbi +267 -0
  48. data/spec/support/v4.2/sorbet/rbi/gems/actionpack.rbi +2885 -0
  49. data/spec/support/v4.2/sorbet/rbi/gems/actionview.rbi +978 -0
  50. data/spec/support/v4.2/sorbet/rbi/gems/activejob.rbi +19 -0
  51. data/spec/support/v4.2/sorbet/rbi/gems/activemodel.rbi +335 -0
  52. data/spec/support/v4.2/sorbet/rbi/gems/activerecord.rbi +3382 -0
  53. data/spec/support/v4.2/sorbet/rbi/gems/activesupport.rbi +1892 -0
  54. data/spec/support/v4.2/sorbet/rbi/gems/arel.rbi +1109 -0
  55. data/spec/support/v4.2/sorbet/rbi/gems/binding_of_caller.rbi +22 -0
  56. data/spec/support/v4.2/sorbet/rbi/gems/byebug.rbi +1039 -0
  57. data/spec/support/v4.2/sorbet/rbi/gems/concurrent-ruby.rbi +218 -0
  58. data/spec/support/v4.2/sorbet/rbi/gems/crass.rbi +92 -0
  59. data/spec/support/v4.2/sorbet/rbi/gems/debug_inspector.rbi +18 -0
  60. data/spec/support/v4.2/sorbet/rbi/gems/erubis.rbi +265 -0
  61. data/spec/support/v4.2/sorbet/rbi/gems/globalid.rbi +98 -0
  62. data/spec/support/v4.2/sorbet/rbi/gems/i18n.rbi +186 -0
  63. data/spec/support/v4.2/sorbet/rbi/gems/jbuilder.rbi +99 -0
  64. data/spec/support/v4.2/sorbet/rbi/gems/loofah.rbi +129 -0
  65. data/spec/support/v4.2/sorbet/rbi/gems/mail.rbi +1091 -0
  66. data/spec/support/v4.2/sorbet/rbi/gems/mini_mime.rbi +45 -0
  67. data/spec/support/v4.2/sorbet/rbi/gems/minitest.rbi +276 -0
  68. data/spec/support/v4.2/sorbet/rbi/gems/nokogiri.rbi +1010 -0
  69. data/spec/support/v4.2/sorbet/rbi/gems/rack-test.rbi +145 -0
  70. data/spec/support/v4.2/sorbet/rbi/gems/rack.rbi +490 -0
  71. data/spec/support/v4.2/sorbet/rbi/gems/rails-deprecated_sanitizer.rbi +13 -0
  72. data/spec/support/v4.2/sorbet/rbi/gems/rails-dom-testing.rbi +76 -0
  73. data/spec/support/v4.2/sorbet/rbi/gems/rails-html-sanitizer.rbi +90 -0
  74. data/spec/support/v4.2/sorbet/rbi/gems/railties.rbi +623 -0
  75. data/spec/support/v4.2/sorbet/rbi/gems/rdoc.rbi +1053 -0
  76. data/spec/support/v4.2/sorbet/rbi/gems/sdoc.rbi +73 -0
  77. data/spec/support/v4.2/sorbet/rbi/gems/sorbet-runtime.rbi +647 -0
  78. data/spec/support/v4.2/sorbet/rbi/gems/sqlite3.rbi +345 -0
  79. data/spec/support/v4.2/sorbet/rbi/gems/thor.rbi +401 -0
  80. data/spec/support/v4.2/sorbet/rbi/gems/thread_safe.rbi +81 -0
  81. data/spec/support/v4.2/sorbet/rbi/gems/tzinfo.rbi +407 -0
  82. data/spec/support/v4.2/sorbet/rbi/gems/web-console.rbi +136 -0
  83. data/spec/support/v4.2/sorbet/rbi/hidden-definitions/errors.txt +11998 -0
  84. data/spec/support/v4.2/sorbet/rbi/hidden-definitions/hidden.rbi +27774 -0
  85. data/spec/support/v4.2/sorbet/rbi/sorbet-typed/lib/actionmailer/all/actionmailer.rbi +13 -0
  86. data/spec/support/v4.2/sorbet/rbi/sorbet-typed/lib/actionpack/all/actionpack.rbi +13 -0
  87. data/spec/support/v4.2/sorbet/rbi/sorbet-typed/lib/activerecord/all/activerecord.rbi +51 -0
  88. data/spec/support/v4.2/sorbet/rbi/sorbet-typed/lib/activesupport/all/activesupport.rbi +107 -0
  89. data/spec/support/v4.2/sorbet/rbi/sorbet-typed/lib/bundler/all/bundler.rbi +8547 -0
  90. data/spec/support/v4.2/sorbet/rbi/sorbet-typed/lib/railties/all/railties.rbi +22 -0
  91. data/spec/support/v4.2/sorbet/rbi/sorbet-typed/lib/ruby/all/open3.rbi +111 -0
  92. data/spec/support/v4.2/sorbet/rbi/sorbet-typed/lib/ruby/all/resolv.rbi +543 -0
  93. data/spec/support/v4.2/sorbet/rbi/todo.rbi +8 -0
  94. data/spec/support/v4.2/sorbet_test_cases.rb +1 -0
  95. data/spec/support/v4.2/test/test_helper.rb +1 -0
  96. data/spec/support/v5.0/Gemfile +13 -0
  97. data/spec/support/v5.0/Gemfile.lock +130 -0
  98. data/spec/support/v5.0/app/channels/application_cable/channel.rb +1 -0
  99. data/spec/support/v5.0/app/channels/application_cable/connection.rb +1 -0
  100. data/spec/support/v5.0/app/jobs/application_job.rb +1 -0
  101. data/spec/support/v5.0/app/mailers/application_mailer.rb +1 -0
  102. data/spec/support/v5.0/config/application.rb +1 -0
  103. data/spec/support/v5.0/config/boot.rb +1 -0
  104. data/spec/support/v5.0/config/environment.rb +1 -0
  105. data/spec/support/v5.0/config/environments/development.rb +1 -0
  106. data/spec/support/v5.0/config/environments/production.rb +1 -0
  107. data/spec/support/v5.0/config/environments/test.rb +1 -0
  108. data/spec/support/v5.0/config/initializers/application_controller_renderer.rb +1 -0
  109. data/spec/support/v5.0/config/initializers/backtrace_silencers.rb +1 -0
  110. data/spec/support/v5.0/config/initializers/cors.rb +1 -0
  111. data/spec/support/v5.0/config/initializers/filter_parameter_logging.rb +1 -0
  112. data/spec/support/v5.0/config/initializers/inflections.rb +1 -0
  113. data/spec/support/v5.0/config/initializers/mime_types.rb +1 -0
  114. data/spec/support/v5.0/config/initializers/new_framework_defaults.rb +1 -0
  115. data/spec/support/v5.0/config/initializers/wrap_parameters.rb +1 -0
  116. data/spec/support/v5.0/config/puma.rb +1 -0
  117. data/spec/support/v5.0/config/routes.rb +1 -0
  118. data/spec/support/v5.0/db/schema.rb +1 -0
  119. data/spec/support/v5.0/db/seeds.rb +1 -0
  120. data/spec/support/v5.0/rails_symlinks/config/routes.rb +1 -0
  121. data/spec/support/v5.0/sorbet/config +2 -0
  122. data/spec/support/v5.0/sorbet/rbi/gems/actioncable.rbi +309 -0
  123. data/spec/support/v5.0/sorbet/rbi/gems/actionmailer.rbi +379 -0
  124. data/spec/support/v5.0/sorbet/rbi/gems/actionpack.rbi +3150 -0
  125. data/spec/support/v5.0/sorbet/rbi/gems/actionview.rbi +1093 -0
  126. data/spec/support/v5.0/sorbet/rbi/gems/activejob.rbi +252 -0
  127. data/spec/support/v5.0/sorbet/rbi/gems/activemodel.rbi +562 -0
  128. data/spec/support/v5.0/sorbet/rbi/gems/activerecord.rbi +4060 -0
  129. data/spec/support/v5.0/sorbet/rbi/gems/activesupport.rbi +2078 -0
  130. data/spec/support/v5.0/sorbet/rbi/gems/arel.rbi +1222 -0
  131. data/spec/support/v5.0/sorbet/rbi/gems/byebug.rbi +1039 -0
  132. data/spec/support/v5.0/sorbet/rbi/gems/concurrent-ruby.rbi +1587 -0
  133. data/spec/support/v5.0/sorbet/rbi/gems/crass.rbi +92 -0
  134. data/spec/support/v5.0/sorbet/rbi/gems/erubis.rbi +265 -0
  135. data/spec/support/v5.0/sorbet/rbi/gems/globalid.rbi +98 -0
  136. data/spec/support/v5.0/sorbet/rbi/gems/i18n.rbi +191 -0
  137. data/spec/support/v5.0/sorbet/rbi/gems/loofah.rbi +129 -0
  138. data/spec/support/v5.0/sorbet/rbi/gems/mail.rbi +1091 -0
  139. data/spec/support/v5.0/sorbet/rbi/gems/method_source.rbi +63 -0
  140. data/spec/support/v5.0/sorbet/rbi/gems/mini_mime.rbi +45 -0
  141. data/spec/support/v5.0/sorbet/rbi/gems/minitest.rbi +276 -0
  142. data/spec/support/v5.0/sorbet/rbi/gems/nokogiri.rbi +1010 -0
  143. data/spec/support/v5.0/sorbet/rbi/gems/puma.rbi +570 -0
  144. data/spec/support/v5.0/sorbet/rbi/gems/rack-test.rbi +145 -0
  145. data/spec/support/v5.0/sorbet/rbi/gems/rack.rbi +534 -0
  146. data/spec/support/v5.0/sorbet/rbi/gems/rails-dom-testing.rbi +67 -0
  147. data/spec/support/v5.0/sorbet/rbi/gems/rails-html-sanitizer.rbi +90 -0
  148. data/spec/support/v5.0/sorbet/rbi/gems/railties.rbi +682 -0
  149. data/spec/support/v5.0/sorbet/rbi/gems/rake.rbi +255 -0
  150. data/spec/support/v5.0/sorbet/rbi/gems/sorbet-runtime.rbi +647 -0
  151. data/spec/support/v5.0/sorbet/rbi/gems/sqlite3.rbi +345 -0
  152. data/spec/support/v5.0/sorbet/rbi/gems/thor.rbi +401 -0
  153. data/spec/support/v5.0/sorbet/rbi/gems/thread_safe.rbi +81 -0
  154. data/spec/support/v5.0/sorbet/rbi/gems/tzinfo.rbi +407 -0
  155. data/spec/support/v5.0/sorbet/rbi/hidden-definitions/errors.txt +10523 -0
  156. data/spec/support/v5.0/sorbet/rbi/hidden-definitions/hidden.rbi +24969 -0
  157. data/spec/support/v5.0/sorbet/rbi/sorbet-typed/lib/actionmailer/all/actionmailer.rbi +13 -0
  158. data/spec/support/v5.0/sorbet/rbi/sorbet-typed/lib/actionpack/all/actionpack.rbi +13 -0
  159. data/spec/support/v5.0/sorbet/rbi/sorbet-typed/lib/activerecord/all/activerecord.rbi +51 -0
  160. data/spec/support/v5.0/sorbet/rbi/sorbet-typed/lib/activesupport/all/activesupport.rbi +107 -0
  161. data/spec/support/v5.0/sorbet/rbi/sorbet-typed/lib/bundler/all/bundler.rbi +8547 -0
  162. data/spec/support/v5.0/sorbet/rbi/sorbet-typed/lib/railties/all/railties.rbi +22 -0
  163. data/spec/support/v5.0/sorbet/rbi/sorbet-typed/lib/ruby/all/open3.rbi +111 -0
  164. data/spec/support/v5.0/sorbet/rbi/sorbet-typed/lib/ruby/all/resolv.rbi +543 -0
  165. data/spec/support/v5.0/sorbet/rbi/todo.rbi +10 -0
  166. data/spec/support/v5.0/sorbet_test_cases.rb +1 -0
  167. data/spec/support/v5.0/test/test_helper.rb +1 -0
  168. data/spec/support/v5.1/Gemfile +13 -0
  169. data/spec/support/v5.1/Gemfile.lock +15 -20
  170. data/spec/support/v5.1/app/channels/application_cable/channel.rb +1 -0
  171. data/spec/support/v5.1/app/channels/application_cable/connection.rb +1 -0
  172. data/spec/support/v5.1/app/jobs/application_job.rb +1 -0
  173. data/spec/support/v5.1/app/mailers/application_mailer.rb +1 -0
  174. data/spec/support/v5.1/bin/rails +0 -5
  175. data/spec/support/v5.1/bin/rake +0 -5
  176. data/spec/support/v5.1/config/application.rb +1 -0
  177. data/spec/support/v5.1/config/boot.rb +1 -0
  178. data/spec/support/v5.1/config/environment.rb +1 -0
  179. data/spec/support/v5.1/config/environments/development.rb +2 -1
  180. data/spec/support/v5.1/config/environments/production.rb +1 -0
  181. data/spec/support/v5.1/config/environments/test.rb +1 -0
  182. data/spec/support/v5.1/config/initializers/application_controller_renderer.rb +1 -0
  183. data/spec/support/v5.1/config/initializers/backtrace_silencers.rb +1 -0
  184. data/spec/support/v5.1/config/initializers/cors.rb +1 -0
  185. data/spec/support/v5.1/config/initializers/filter_parameter_logging.rb +1 -0
  186. data/spec/support/v5.1/config/initializers/inflections.rb +1 -0
  187. data/spec/support/v5.1/config/initializers/mime_types.rb +1 -0
  188. data/spec/support/v5.1/config/initializers/wrap_parameters.rb +1 -0
  189. data/spec/support/v5.1/config/puma.rb +1 -0
  190. data/spec/support/v5.1/config/spring.rb +1 -0
  191. data/spec/support/v5.1/db/schema.rb +1 -0
  192. data/spec/support/v5.1/db/seeds.rb +1 -0
  193. data/spec/support/v5.1/sorbet/config +2 -0
  194. data/spec/support/v5.1/sorbet/rbi/gems/actioncable.rbi +309 -0
  195. data/spec/support/v5.1/sorbet/rbi/gems/actionmailer.rbi +429 -0
  196. data/spec/support/v5.1/sorbet/rbi/gems/actionpack.rbi +3171 -0
  197. data/spec/support/v5.1/sorbet/rbi/gems/actionview.rbi +1115 -0
  198. data/spec/support/v5.1/sorbet/rbi/gems/activejob.rbi +273 -0
  199. data/spec/support/v5.1/sorbet/rbi/gems/activemodel.rbi +547 -0
  200. data/spec/support/v5.1/sorbet/rbi/gems/activerecord.rbi +4093 -0
  201. data/spec/support/v5.1/sorbet/rbi/gems/activesupport.rbi +2180 -0
  202. data/spec/support/v5.1/sorbet/rbi/gems/arel.rbi +1220 -0
  203. data/spec/support/v5.1/sorbet/rbi/gems/byebug.rbi +1039 -0
  204. data/spec/support/v5.1/sorbet/rbi/gems/concurrent-ruby.rbi +1587 -0
  205. data/spec/support/v5.1/sorbet/rbi/gems/crass.rbi +92 -0
  206. data/spec/support/v5.1/sorbet/rbi/gems/erubi.rbi +26 -0
  207. data/spec/support/v5.1/sorbet/rbi/gems/globalid.rbi +98 -0
  208. data/spec/support/v5.1/sorbet/rbi/gems/i18n.rbi +191 -0
  209. data/spec/support/v5.1/sorbet/rbi/gems/loofah.rbi +129 -0
  210. data/spec/support/v5.1/sorbet/rbi/gems/mail.rbi +1091 -0
  211. data/spec/support/v5.1/sorbet/rbi/gems/method_source.rbi +63 -0
  212. data/spec/support/v5.1/sorbet/rbi/gems/mini_mime.rbi +45 -0
  213. data/spec/support/v5.1/sorbet/rbi/gems/minitest.rbi +276 -0
  214. data/spec/support/v5.1/sorbet/rbi/gems/nokogiri.rbi +1010 -0
  215. data/spec/support/v5.1/sorbet/rbi/gems/puma.rbi +570 -0
  216. data/spec/support/v5.1/sorbet/rbi/gems/rack-test.rbi +161 -0
  217. data/spec/support/v5.1/sorbet/rbi/gems/rack.rbi +534 -0
  218. data/spec/support/v5.1/sorbet/rbi/gems/rails-dom-testing.rbi +67 -0
  219. data/spec/support/v5.1/sorbet/rbi/gems/rails-html-sanitizer.rbi +90 -0
  220. data/spec/support/v5.1/sorbet/rbi/gems/railties.rbi +707 -0
  221. data/spec/support/v5.1/sorbet/rbi/gems/rake.rbi +255 -0
  222. data/spec/support/v5.1/sorbet/rbi/gems/sorbet-runtime.rbi +647 -0
  223. data/spec/support/v5.1/sorbet/rbi/gems/sqlite3.rbi +345 -0
  224. data/spec/support/v5.1/sorbet/rbi/gems/thor.rbi +450 -0
  225. data/spec/support/v5.1/sorbet/rbi/gems/thread_safe.rbi +81 -0
  226. data/spec/support/v5.1/sorbet/rbi/gems/tzinfo.rbi +407 -0
  227. data/spec/support/v5.1/sorbet/rbi/hidden-definitions/errors.txt +10226 -0
  228. data/spec/support/v5.1/sorbet/rbi/hidden-definitions/hidden.rbi +24635 -0
  229. data/spec/support/v5.1/sorbet/rbi/sorbet-typed/lib/actionmailer/all/actionmailer.rbi +13 -0
  230. data/spec/support/v5.1/sorbet/rbi/sorbet-typed/lib/actionpack/all/actionpack.rbi +13 -0
  231. data/spec/support/v5.1/sorbet/rbi/sorbet-typed/lib/activerecord/all/activerecord.rbi +51 -0
  232. data/spec/support/v5.1/sorbet/rbi/sorbet-typed/lib/activesupport/all/activesupport.rbi +107 -0
  233. data/spec/support/v5.1/sorbet/rbi/sorbet-typed/lib/bundler/all/bundler.rbi +8547 -0
  234. data/spec/support/v5.1/sorbet/rbi/sorbet-typed/lib/railties/all/railties.rbi +22 -0
  235. data/spec/support/v5.1/sorbet/rbi/sorbet-typed/lib/ruby/all/open3.rbi +111 -0
  236. data/spec/support/v5.1/sorbet/rbi/sorbet-typed/lib/ruby/all/resolv.rbi +543 -0
  237. data/spec/support/v5.1/sorbet/rbi/todo.rbi +11 -0
  238. data/spec/support/v5.1/sorbet_test_cases.rb +1 -0
  239. data/spec/support/v5.1/test/test_helper.rb +1 -0
  240. data/spec/support/v5.2/Gemfile +12 -0
  241. data/spec/support/v5.2/Gemfile.lock +12 -0
  242. data/spec/support/v5.2/app/channels/application_cable/channel.rb +1 -0
  243. data/spec/support/v5.2/app/channels/application_cable/connection.rb +1 -0
  244. data/spec/support/v5.2/app/jobs/application_job.rb +1 -0
  245. data/spec/support/v5.2/app/mailers/application_mailer.rb +1 -0
  246. data/spec/support/v5.2/bin/rails +0 -5
  247. data/spec/support/v5.2/bin/rake +0 -5
  248. data/spec/support/v5.2/config/application.rb +1 -0
  249. data/spec/support/v5.2/config/boot.rb +1 -0
  250. data/spec/support/v5.2/config/environment.rb +1 -0
  251. data/spec/support/v5.2/config/environments/development.rb +1 -0
  252. data/spec/support/v5.2/config/environments/production.rb +1 -0
  253. data/spec/support/v5.2/config/environments/test.rb +1 -0
  254. data/spec/support/v5.2/config/initializers/application_controller_renderer.rb +1 -0
  255. data/spec/support/v5.2/config/initializers/backtrace_silencers.rb +1 -0
  256. data/spec/support/v5.2/config/initializers/cors.rb +1 -0
  257. data/spec/support/v5.2/config/initializers/filter_parameter_logging.rb +1 -0
  258. data/spec/support/v5.2/config/initializers/inflections.rb +1 -0
  259. data/spec/support/v5.2/config/initializers/mime_types.rb +1 -0
  260. data/spec/support/v5.2/config/initializers/wrap_parameters.rb +1 -0
  261. data/spec/support/v5.2/config/puma.rb +1 -0
  262. data/spec/support/v5.2/config/spring.rb +1 -0
  263. data/spec/support/v5.2/db/schema.rb +1 -0
  264. data/spec/support/v5.2/db/seeds.rb +1 -0
  265. data/spec/support/v5.2/sorbet/rbi/gems/sorbet-runtime.rbi +644 -0
  266. data/spec/support/v5.2/sorbet/rbi/hidden-definitions/errors.txt +12 -6
  267. data/spec/support/v5.2/sorbet/rbi/hidden-definitions/hidden.rbi +57 -19
  268. data/spec/support/v5.2/sorbet_test_cases.rb +1 -0
  269. data/spec/support/v5.2/test/test_helper.rb +1 -0
  270. data/spec/support/v5.2-no-sorbet/Gemfile +57 -0
  271. data/spec/support/v5.2-no-sorbet/Gemfile.lock +140 -0
  272. data/spec/support/v5.2-no-sorbet/README.md +24 -0
  273. data/spec/support/v5.2-no-sorbet/Rakefile +6 -0
  274. data/spec/support/v5.2-no-sorbet/app/channels/application_cable/channel.rb +5 -0
  275. data/spec/support/v5.2-no-sorbet/app/channels/application_cable/connection.rb +5 -0
  276. data/spec/support/v5.2-no-sorbet/app/controllers +1 -0
  277. data/spec/support/v5.2-no-sorbet/app/jobs/application_job.rb +3 -0
  278. data/spec/support/v5.2-no-sorbet/app/mailers/application_mailer.rb +5 -0
  279. data/spec/support/v5.2-no-sorbet/app/models +1 -0
  280. data/spec/support/v5.2-no-sorbet/app/views/layouts/mailer.html.erb +13 -0
  281. data/spec/support/v5.2-no-sorbet/app/views/layouts/mailer.text.erb +1 -0
  282. data/spec/support/v5.2-no-sorbet/bin/bundle +3 -0
  283. data/spec/support/v5.2-no-sorbet/bin/rails +4 -0
  284. data/spec/support/v5.2-no-sorbet/bin/rake +4 -0
  285. data/spec/support/v5.2-no-sorbet/bin/setup +33 -0
  286. data/spec/support/v5.2-no-sorbet/bin/spring +17 -0
  287. data/spec/support/v5.2-no-sorbet/bin/update +28 -0
  288. data/spec/support/v5.2-no-sorbet/config/application.rb +36 -0
  289. data/spec/support/v5.2-no-sorbet/config/boot.rb +4 -0
  290. data/spec/support/v5.2-no-sorbet/config/cable.yml +10 -0
  291. data/spec/support/v5.2-no-sorbet/config/credentials.yml.enc +1 -0
  292. data/spec/support/v5.2-no-sorbet/config/database.yml +25 -0
  293. data/spec/support/v5.2-no-sorbet/config/environment.rb +6 -0
  294. data/spec/support/v5.2-no-sorbet/config/environments/development.rb +55 -0
  295. data/spec/support/v5.2-no-sorbet/config/environments/production.rb +86 -0
  296. data/spec/support/v5.2-no-sorbet/config/environments/test.rb +47 -0
  297. data/spec/support/v5.2-no-sorbet/config/initializers/application_controller_renderer.rb +9 -0
  298. data/spec/support/v5.2-no-sorbet/config/initializers/backtrace_silencers.rb +8 -0
  299. data/spec/support/v5.2-no-sorbet/config/initializers/cors.rb +17 -0
  300. data/spec/support/v5.2-no-sorbet/config/initializers/filter_parameter_logging.rb +5 -0
  301. data/spec/support/v5.2-no-sorbet/config/initializers/inflections.rb +17 -0
  302. data/spec/support/v5.2-no-sorbet/config/initializers/mime_types.rb +5 -0
  303. data/spec/support/v5.2-no-sorbet/config/initializers/wrap_parameters.rb +15 -0
  304. data/spec/support/v5.2-no-sorbet/config/locales/en.yml +33 -0
  305. data/spec/support/v5.2-no-sorbet/config/puma.rb +35 -0
  306. data/spec/support/v5.2-no-sorbet/config/routes.rb +1 -0
  307. data/spec/support/v5.2-no-sorbet/config/spring.rb +7 -0
  308. data/spec/support/v5.2-no-sorbet/config/storage.yml +34 -0
  309. data/spec/support/v5.2-no-sorbet/config.ru +5 -0
  310. data/spec/support/v5.2-no-sorbet/db/migrate +1 -0
  311. data/spec/support/v5.2-no-sorbet/db/schema.rb +48 -0
  312. data/spec/support/v5.2-no-sorbet/db/seeds.rb +8 -0
  313. data/spec/support/v5.2-no-sorbet/lib/tasks/.keep +0 -0
  314. data/spec/support/v5.2-no-sorbet/log/.keep +0 -0
  315. data/spec/support/v5.2-no-sorbet/public/robots.txt +1 -0
  316. data/spec/support/v5.2-no-sorbet/storage/.keep +0 -0
  317. data/spec/support/v5.2-no-sorbet/test/controllers/.keep +0 -0
  318. data/spec/support/v5.2-no-sorbet/test/fixtures/.keep +0 -0
  319. data/spec/support/v5.2-no-sorbet/test/fixtures/files/.keep +0 -0
  320. data/spec/support/v5.2-no-sorbet/test/integration/.keep +0 -0
  321. data/spec/support/v5.2-no-sorbet/test/mailers/.keep +0 -0
  322. data/spec/support/v5.2-no-sorbet/test/models/.keep +0 -0
  323. data/spec/support/v5.2-no-sorbet/test/test_helper.rb +11 -0
  324. data/spec/support/v5.2-no-sorbet/tmp/.keep +0 -0
  325. data/spec/support/v5.2-no-sorbet/vendor/.keep +0 -0
  326. data/spec/support/v6.0/Gemfile +12 -0
  327. data/spec/support/v6.0/Gemfile.lock +157 -0
  328. data/spec/support/v6.0/app/channels/application_cable/channel.rb +1 -0
  329. data/spec/support/v6.0/app/channels/application_cable/connection.rb +1 -0
  330. data/spec/support/v6.0/app/jobs/application_job.rb +1 -0
  331. data/spec/support/v6.0/app/mailers/application_mailer.rb +1 -0
  332. data/spec/support/v6.0/config/application.rb +1 -0
  333. data/spec/support/v6.0/config/boot.rb +1 -0
  334. data/spec/support/v6.0/config/environment.rb +1 -0
  335. data/spec/support/v6.0/config/environments/development.rb +1 -0
  336. data/spec/support/v6.0/config/environments/production.rb +1 -0
  337. data/spec/support/v6.0/config/environments/test.rb +1 -0
  338. data/spec/support/v6.0/config/initializers/application_controller_renderer.rb +1 -0
  339. data/spec/support/v6.0/config/initializers/backtrace_silencers.rb +1 -0
  340. data/spec/support/v6.0/config/initializers/cors.rb +1 -0
  341. data/spec/support/v6.0/config/initializers/filter_parameter_logging.rb +1 -0
  342. data/spec/support/v6.0/config/initializers/inflections.rb +1 -0
  343. data/spec/support/v6.0/config/initializers/mime_types.rb +1 -0
  344. data/spec/support/v6.0/config/initializers/wrap_parameters.rb +1 -0
  345. data/spec/support/v6.0/config/puma.rb +1 -0
  346. data/spec/support/v6.0/config/routes.rb +1 -0
  347. data/spec/support/v6.0/db/schema.rb +1 -0
  348. data/spec/support/v6.0/db/seeds.rb +1 -0
  349. data/spec/support/v6.0/sorbet/config +2 -0
  350. data/spec/support/v6.0/sorbet/rbi/gems/actioncable.rbi +245 -0
  351. data/spec/support/v6.0/sorbet/rbi/gems/actionmailbox.rbi +56 -0
  352. data/spec/support/v6.0/sorbet/rbi/gems/actionmailer.rbi +69 -0
  353. data/spec/support/v6.0/sorbet/rbi/gems/actionpack.rbi +2401 -0
  354. data/spec/support/v6.0/sorbet/rbi/gems/actiontext.rbi +32 -0
  355. data/spec/support/v6.0/sorbet/rbi/gems/actionview.rbi +1033 -0
  356. data/spec/support/v6.0/sorbet/rbi/gems/activejob.rbi +362 -0
  357. data/spec/support/v6.0/sorbet/rbi/gems/activemodel.rbi +750 -0
  358. data/spec/support/v6.0/sorbet/rbi/gems/activerecord.rbi +5552 -0
  359. data/spec/support/v6.0/sorbet/rbi/gems/activestorage.rbi +217 -0
  360. data/spec/support/v6.0/sorbet/rbi/gems/activesupport.rbi +2430 -0
  361. data/spec/support/v6.0/sorbet/rbi/gems/byebug.rbi +1039 -0
  362. data/spec/support/v6.0/sorbet/rbi/gems/concurrent-ruby.rbi +1587 -0
  363. data/spec/support/v6.0/sorbet/rbi/gems/crass.rbi +92 -0
  364. data/spec/support/v6.0/sorbet/rbi/gems/erubi.rbi +26 -0
  365. data/spec/support/v6.0/sorbet/rbi/gems/globalid.rbi +98 -0
  366. data/spec/support/v6.0/sorbet/rbi/gems/i18n.rbi +191 -0
  367. data/spec/support/v6.0/sorbet/rbi/gems/loofah.rbi +129 -0
  368. data/spec/support/v6.0/sorbet/rbi/gems/mail.rbi +1542 -0
  369. data/spec/support/v6.0/sorbet/rbi/gems/marcel.rbi +12 -0
  370. data/spec/support/v6.0/sorbet/rbi/gems/method_source.rbi +63 -0
  371. data/spec/support/v6.0/sorbet/rbi/gems/mini_mime.rbi +45 -0
  372. data/spec/support/v6.0/sorbet/rbi/gems/minitest.rbi +276 -0
  373. data/spec/support/v6.0/sorbet/rbi/gems/nokogiri.rbi +1010 -0
  374. data/spec/support/v6.0/sorbet/rbi/gems/puma.rbi +570 -0
  375. data/spec/support/v6.0/sorbet/rbi/gems/rack-test.rbi +161 -0
  376. data/spec/support/v6.0/sorbet/rbi/gems/rack.rbi +522 -0
  377. data/spec/support/v6.0/sorbet/rbi/gems/rails-dom-testing.rbi +67 -0
  378. data/spec/support/v6.0/sorbet/rbi/gems/rails-html-sanitizer.rbi +90 -0
  379. data/spec/support/v6.0/sorbet/rbi/gems/railties.rbi +760 -0
  380. data/spec/support/v6.0/sorbet/rbi/gems/rake.rbi +254 -0
  381. data/spec/support/v6.0/sorbet/rbi/gems/sorbet-runtime.rbi +647 -0
  382. data/spec/support/v6.0/sorbet/rbi/gems/sqlite3.rbi +353 -0
  383. data/spec/support/v6.0/sorbet/rbi/gems/thor.rbi +450 -0
  384. data/spec/support/v6.0/sorbet/rbi/gems/thread_safe.rbi +81 -0
  385. data/spec/support/v6.0/sorbet/rbi/gems/tzinfo.rbi +407 -0
  386. data/spec/support/v6.0/sorbet/rbi/gems/zeitwerk.rbi +119 -0
  387. data/spec/support/v6.0/sorbet/rbi/hidden-definitions/errors.txt +12074 -0
  388. data/spec/support/v6.0/sorbet/rbi/hidden-definitions/hidden.rbi +28231 -0
  389. data/spec/support/v6.0/sorbet/rbi/sorbet-typed/lib/actionmailer/all/actionmailer.rbi +13 -0
  390. data/spec/support/v6.0/sorbet/rbi/sorbet-typed/lib/actionpack/all/actionpack.rbi +13 -0
  391. data/spec/support/v6.0/sorbet/rbi/sorbet-typed/lib/activerecord/all/activerecord.rbi +51 -0
  392. data/spec/support/v6.0/sorbet/rbi/sorbet-typed/lib/activesupport/all/activesupport.rbi +107 -0
  393. data/spec/support/v6.0/sorbet/rbi/sorbet-typed/lib/bundler/all/bundler.rbi +8547 -0
  394. data/spec/support/v6.0/sorbet/rbi/sorbet-typed/lib/railties/all/railties.rbi +22 -0
  395. data/spec/support/v6.0/sorbet/rbi/sorbet-typed/lib/ruby/all/open3.rbi +111 -0
  396. data/spec/support/v6.0/sorbet/rbi/sorbet-typed/lib/ruby/all/resolv.rbi +543 -0
  397. data/spec/support/v6.0/sorbet/rbi/todo.rbi +11 -0
  398. data/spec/support/v6.0/sorbet_test_cases.rb +1 -0
  399. data/spec/support/v6.0/test/channels/application_cable/connection_test.rb +1 -0
  400. data/spec/support/v6.0/test/test_helper.rb +1 -0
  401. data/spec/test_data/v4.2/expected_srb_tc_output.txt +178 -0
  402. data/spec/test_data/v5.0/expected_internal_metadata.rbi +155 -0
  403. data/spec/test_data/v5.0/expected_schema_migration.rbi +128 -0
  404. data/spec/test_data/v5.0/expected_srb_tc_output.txt +178 -0
  405. data/spec/test_data/v5.1/expected_internal_metadata.rbi +161 -0
  406. data/spec/test_data/v5.1/expected_schema_migration.rbi +134 -0
  407. data/spec/test_data/v5.1/expected_srb_tc_output.txt +160 -0
  408. data/spec/test_data/v5.2/expected_attachment.rbi +137 -0
  409. data/spec/test_data/v5.2/expected_blob.rbi +149 -0
  410. data/spec/test_data/v5.2/expected_internal_metadata.rbi +161 -0
  411. data/spec/test_data/v5.2/expected_schema_migration.rbi +134 -0
  412. data/spec/test_data/v5.2/expected_srb_tc_output.txt +160 -0
  413. data/spec/test_data/v5.2-no-sorbet/expected_attachment.rbi +137 -0
  414. data/spec/test_data/v5.2-no-sorbet/expected_blob.rbi +149 -0
  415. data/spec/test_data/v5.2-no-sorbet/expected_internal_metadata.rbi +161 -0
  416. data/spec/test_data/v5.2-no-sorbet/expected_no_routes.rbi +11 -0
  417. data/spec/test_data/v5.2-no-sorbet/expected_potion.rbi +128 -0
  418. data/spec/test_data/v5.2-no-sorbet/expected_routes.rbi +43 -0
  419. data/spec/test_data/v5.2-no-sorbet/expected_schema_migration.rbi +134 -0
  420. data/spec/test_data/v5.2-no-sorbet/expected_spell_book.rbi +161 -0
  421. data/spec/test_data/v5.2-no-sorbet/expected_srb_tc_output.txt +160 -0
  422. data/spec/test_data/v5.2-no-sorbet/expected_wand.rbi +311 -0
  423. data/spec/test_data/v5.2-no-sorbet/expected_wizard.rbi +254 -0
  424. data/spec/test_data/v5.2-no-sorbet/expected_wizard_wo_spellbook.rbi +254 -0
  425. data/spec/test_data/v6.0/expected_attachment.rbi +149 -0
  426. data/spec/test_data/v6.0/expected_blob.rbi +161 -0
  427. data/spec/test_data/v6.0/expected_internal_metadata.rbi +173 -0
  428. data/spec/test_data/v6.0/expected_schema_migration.rbi +146 -0
  429. data/spec/test_data/v6.0/expected_srb_tc_output.txt +160 -0
  430. data/spec/utils_spec.rb +24 -0
  431. metadata +573 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6a4e4c9b0f6d3cb813771d9673fb2c483507292f
4
- data.tar.gz: d34bda0c4a4a9269b8bf6a32cd8e7734888613d3
3
+ metadata.gz: 319136a77de53915ea8e2999617f3942dc9913dd
4
+ data.tar.gz: e3cd87219252f35701df8647edcf752244bf0534
5
5
  SHA512:
6
- metadata.gz: 8a346f014c1761602c445cc5ce1241e9643988433776c7d05f250f0a85d355bf5226a15b160ed1bf843b1d2268069ed736e16687a9a013e0494a3000aae20eb5
7
- data.tar.gz: 7844cc11287fe4108610435b9b8cba3387d122c0a074b92c89d22ad058ffcbc0c17cca311c9e38c38314ec049c30c25933359183d5b3f7cfbfe7de8a3c5e0f6e
6
+ metadata.gz: fbd53d9c25ae7d561d1a817f07c042fc7f014a3765726dfdefc7d2ab528a0321463d3f2511bbcdf1dcc4a9a6d10b973eaf4f0497f2b59b3edd6fe947f0ca178e
7
+ data.tar.gz: b5e9cdb6b32400026629532bdb75da9aee0518432dac9608ac68b7587ec8d04c602a0aa2983ff9ff905f8220fe2a89ad4ea5b479d302cfda2dd5349dbf74b892
data/.gitignore CHANGED
@@ -42,7 +42,7 @@ build-iPhoneSimulator/
42
42
 
43
43
  # for a library or gem, you might want to ignore these files since the code is
44
44
  # intended to run in multiple environments; otherwise, check them in:
45
- Gemfile.lock
45
+ /Gemfile.lock
46
46
  .ruby-version
47
47
  .ruby-gemset
48
48
 
@@ -80,4 +80,7 @@ Gemfile.lock
80
80
  /spec/support/**/sorbet/rails-rbi/*
81
81
  /spec/support/**/sorbet/rails-rbi/**/*
82
82
 
83
-
83
+ # Ignore sorbet files in v5.2-no-sorbet
84
+ /spec/support/v5.2-no-sorbet/sorbet_test_cases.rb
85
+ /spec/support/v5.2-no-sorbet/sorbet/*
86
+ /spec/support/v5.2-no-sorbet/sorbet/**/*
data/.travis.yml CHANGED
@@ -15,6 +15,11 @@ rvm:
15
15
  - 2.6
16
16
  - ruby-head
17
17
  matrix:
18
+ include:
19
+ - rvm: 2.5
20
+ env: RAILS_VERSION=5.2 SORBET_VERSION=0.4.4386
21
+ - rvm: 2.5
22
+ env: TEST_SRB_INIT=true
18
23
  exclude:
19
24
  - rvm: 2.3
20
25
  env: RAILS_VERSION=6.0
@@ -22,6 +27,7 @@ matrix:
22
27
  env: RAILS_VERSION=6.0
23
28
  allow_failures:
24
29
  - rvm: ruby-head
30
+ - env: RAILS_VERSION=5.2
25
31
  before_install:
26
32
  - gem install bundler -v 2.0.1 --no-doc
27
33
  - gem install bundler -v 1.17.3 --no-doc
@@ -34,5 +40,5 @@ deploy:
34
40
  secure: AVQi+tC5+HEoGgOKj/+/UeizOkwgVoB8zdPrd48/H9rx1KsAAmQ+2N9srOnrrEkm9I/bvHLOs0JpM96IiXFhztzrDefkaYQc1Zhu3tbWKZf6kuw0gabTMGhx3JsLoQiYRbJYea1qfrL0XlvQTxgkaa4zGJQaIBIZ97X7jlG5lVcys7JGjUFkozGJgS0t2HDffgDPLs3SiWR380Zvo4xcogw9tFHg5MuirZM/bXb9C/WhdDmKV9LbM8bTkJBjkZ0jbzKITtDJWSCXzdjRebLesTVN6F6cNWkwp2TumefgpQId4uGa5iUN8nXriqN890jjeZ3xHDq7xF0dRZgr8TyreocevCtNPCl+12c9ook0+mJn2GFTJL4W9BTuBGkBFekcQZ5MChWywcJ280iuPfX56Ilpt0wkCtWgB0k+k+eGTgEUv0iLykRFytNfiXr1oySG6mzxcUMf90IxfIKMydjFl8ZmAoTmZDfECtk59IW3PRwfHnNiNwmGMIGz9x9geO0wORWWnqdAwvHnQ7wMdScbSZ/VIPvpBdNe3rbhh4xAXXen+t1V0jvAlkBng9GLCwaRWuAsQG3fvRCbjWGxVmCLaQjUqIoJOtNVgeww+s5bXc8eVUtJ2UNRNnlN78lCWrRBhEfgRoyhVzl47vSZjhOE/2JlmQhpot9nwmMOz1h9wk8=
35
41
  gem: sorbet-rails
36
42
  on:
43
+ tags: true
37
44
  repo: chanzuckerberg/sorbet-rails
38
- branch: setup_travis
data/CONTRIBUTING.md CHANGED
@@ -85,8 +85,10 @@ You can also switch to a version of Rails with `RAILS_VERSION`:
85
85
 
86
86
  ```sh
87
87
  ❯ RAILS_VERSION=4.2 ./spec/bin/run_spec.sh
88
+ ❯ RAILS_VERSION=5.0 ./spec/bin/run_spec.sh
88
89
  ❯ RAILS_VERSION=5.1 ./spec/bin/run_spec.sh
89
90
  ❯ RAILS_VERSION=5.2 ./spec/bin/run_spec.sh
91
+ ❯ RAILS_VERSION=6.0 ./spec/bin/run_spec.sh
90
92
  ```
91
93
 
92
94
  #### Debugging
@@ -107,7 +109,7 @@ execution to stop, which will then start a debugger. For more, check out the
107
109
 
108
110
  ### Writing Tests
109
111
 
110
- Tests are in the `_spec.rb` files in the [`spec/`](spec/) directory.
112
+ Tests are in the `_spec.rb` files in the [`spec/`](spec/) directory. Sorbet's `srb tc` test cases are in [`spec/support/rails_shared/sorbet_test_cases.rb`](spec/support/rails_shared/sorbet_test_cases.rb).
111
113
 
112
114
  Rails apps are stored in [`spec/support/`](spec/support/). Code shared across Rails versions
113
115
  (models, views, controllers) are in [`spec/support/rails_shared/`](spec/support/rails_shared/)
data/Gemfile CHANGED
@@ -38,3 +38,14 @@ else
38
38
  gem "bundler", ">= 2.0"
39
39
  gem "sqlite3", "~> 1.4.1"
40
40
  end
41
+
42
+ sorbet_version = ENV["SORBET_VERSION"]
43
+ if sorbet_version
44
+ # mostly used to test against a stable version of Sorbet in Travis.
45
+ gem 'sorbet', sorbet_version
46
+ gem 'sorbet-runtime', sorbet_version
47
+ else
48
+ # prefer to test against latest version because sorbet is updated frequently
49
+ gem 'sorbet'
50
+ gem 'sorbet-runtime'
51
+ end
data/README.md CHANGED
@@ -13,8 +13,6 @@ This gem adds a few Rake tasks to generate Ruby Interface (RBI) files for dynami
13
13
 
14
14
  1. Follow the steps [here](https://sorbet.org/docs/adopting) to set up the latest version of Sorbet, up to being able to run `srb tc`.
15
15
 
16
- Note: Do not add `sorbet-rails` to your Gemfile until after you've set up Sorbet. `sorbet-rails` adds RBI files that may [break](https://github.com/sorbet/sorbet/issues/1158) `srb init`.
17
-
18
16
  2. Add `sorbet-rails` to your Gemfile and install them with Bundler.
19
17
 
20
18
  ```
@@ -3,7 +3,7 @@ class ActiveRecord::Relation
3
3
  extend T::Sig
4
4
  extend T::Generic
5
5
  include Enumerable
6
- include ActiveRecord::Querying::Typed
6
+ include SorbetRails::CustomFinderMethods
7
7
 
8
8
  Elem = type_member(fixed: ActiveRecord::Base)
9
9
 
@@ -17,47 +17,28 @@ class ActiveRecord::Relation
17
17
  def to_a; end
18
18
 
19
19
  # This is part of both FinderMethods & Enumerable module.
20
- # We need to define here to override the typedef in Enumerable module.
21
- # TODO normally this method could return Elem or Array[Elem]
22
- # however, we think it's better to limit the interface to returning Elem only
23
- # Use `find_n` as a replacement if you want to get an array from `find`
20
+ # These methods would return 1 single element when there is no limit, and return an
21
+ # array of element when there is a limit passed in.
22
+ # The more common use case is to find 1 object. We use that as the default sig
23
+ # and add custom first_n, last_n method for the cases that return an array
24
24
  sig { params(args: T.untyped).returns(Elem) }
25
25
  def find(*args); end
26
- end
27
-
28
- class ActiveRecord::Associations::CollectionProxy < ActiveRecord::Relation
29
- extend T::Generic
30
-
31
- Elem = type_member(fixed: ActiveRecord::Base)
32
-
33
- # -- << and aliases
34
- sig { params(records: T.any(Elem, T::Array[Elem])).returns(T.self_type) }
35
- def <<(*records); end
36
- sig { params(records: T.any(Elem, T::Array[Elem])).returns(T.self_type) }
37
- def append(*records); end
38
- sig { params(records: T.any(Elem, T::Array[Elem])).returns(T.self_type) }
39
- def push(*records); end
40
- sig { params(records: T.any(Elem, T::Array[Elem])).returns(T.self_type) }
41
- def concat(*records); end
42
- end
43
-
44
-
45
- module ActiveRecord::Querying::Typed
46
- extend T::Sig
47
- extend T::Generic
48
- Elem = type_member(fixed: ActiveRecord::Base)
26
+ sig { params(limit: T.nilable(Integer)).returns(T.nilable(Elem)) }
27
+ def first(limit = nil); end
28
+ sig { params(limit: T.nilable(Integer)).returns(T.nilable(Elem)) }
29
+ def last(limit = nil); end
49
30
 
50
- # -- Booleans
51
- sig { params(args: T.untyped, block: T.nilable(T.proc.void)).returns(T::Boolean) }
52
- def exists?(*args, &block); end
53
- sig { params(args: T.untyped, block: T.nilable(T.proc.void)).returns(T::Boolean) }
54
- def any?(*args, &block); end
55
- sig { params(args: T.untyped, block: T.nilable(T.proc.void)).returns(T::Boolean) }
56
- def many?(*args, &block); end
57
- sig { params(args: T.untyped, block: T.nilable(T.proc.void)).returns(T::Boolean) }
58
- def none?(*args, &block); end
59
- sig { params(args: T.untyped, block: T.nilable(T.proc.void)).returns(T::Boolean) }
60
- def one?(*args, &block); end
31
+ # -- place here to avoid conflicts with sorbet generated gem rbi
32
+ sig { params(conditions: T.untyped).returns(T::Boolean) }
33
+ def exists?(conditions = nil); end
34
+ sig { returns(T::Boolean) }
35
+ def any?; end
36
+ sig { returns(T::Boolean) }
37
+ def many?; end
38
+ sig { returns(T::Boolean) }
39
+ def none?; end
40
+ sig { returns(T::Boolean) }
41
+ def one?; end
61
42
 
62
43
  # -- finder methods
63
44
  sig { returns(Elem) }
@@ -90,18 +71,45 @@ module ActiveRecord::Querying::Typed
90
71
  sig { returns(T.nilable(Elem)) }
91
72
  def second_to_last; end
92
73
 
93
- # These methods would return 1 single element when there is no limit, and return an
94
- # array of element when there is a limit passed in.
95
- # The more common use case is to find 1 object. We use that as the default sig
96
- # and add custom first_n, last_n method for the cases that return an array
97
- sig { params(limit: T.nilable(Integer)).returns(T.nilable(Elem)) }
98
- def first(limit = nil); end
99
- sig { params(limit: T.nilable(Integer)).returns(T.nilable(Elem)) }
100
- def last(limit = nil); end
101
- # Similar to first & last, normally this method could return Elem or Array[Elem]
102
- # But we enforce that `find` return Elem by default and provide find_n as an alternative
103
- sig { params(args: T.any(Integer, String)).returns(Elem) }
74
+ sig { params(arg: T.untyped, args: T.untyped).returns(T.nilable(Elem)) }
75
+ def find_by(arg, *args); end
76
+ sig { params(arg: T.untyped, args: T.untyped).returns(Elem) }
77
+ def find_by!(arg, *args); end
78
+ end
79
+
80
+ class ActiveRecord::Associations::CollectionProxy < ActiveRecord::Relation
81
+ extend T::Generic
82
+
83
+ Elem = type_member(fixed: ActiveRecord::Base)
84
+
85
+ sig { params(block: T.proc.params(e: Elem).void).void }
86
+ def each(&block); end
87
+
88
+ sig { returns(T::Array[Elem]) }
89
+ def to_a; end
90
+
91
+ # -- << and aliases
92
+ sig { params(records: T.any(Elem, T::Array[Elem])).returns(T.self_type) }
93
+ def <<(*records); end
94
+ sig { params(records: T.any(Elem, T::Array[Elem])).returns(T.self_type) }
95
+ def append(*records); end
96
+ sig { params(records: T.any(Elem, T::Array[Elem])).returns(T.self_type) }
97
+ def push(*records); end
98
+ sig { params(records: T.any(Elem, T::Array[Elem])).returns(T.self_type) }
99
+ def concat(*records); end
100
+
101
+ # -- Overridden finder methods
102
+ sig { params(args: T.untyped).returns(Elem) }
104
103
  def find(*args); end
104
+ # sig { params(limit: T.nilable(Integer)).returns(T.nilable(Elem)) }
105
+ # def last(limit = nil); end
106
+ end
107
+
108
+ module SorbetRails::CustomFinderMethods
109
+ extend T::Sig
110
+ extend T::Generic
111
+ Elem = type_member(fixed: ActiveRecord::Base)
112
+
105
113
  # These are custom finder methods to provide strong type for secondary use case of first, last & find
106
114
  # See sorbet_rails/custom_finder_methods
107
115
  sig { params(limit: Integer).returns(T::Array[Elem]) }
@@ -111,23 +119,11 @@ module ActiveRecord::Querying::Typed
111
119
  sig { params(args: T::Array[T.any(Integer, String)]).returns(T::Array[Elem]) }
112
120
  def find_n(*args); end
113
121
 
114
- sig { params(args: T.untyped, block: T.nilable(T.proc.void)).returns(T.nilable(Elem)) }
115
- def find_by(*args, &block); end
116
-
117
- sig { params(args: T.untyped, block: T.nilable(T.proc.void)).returns(Elem) }
118
- def find_by!(*args, &block); end
119
-
122
+ # allow common cases of find_by
120
123
  sig { params(id: Integer).returns(T.nilable(Elem)) }
121
124
  def find_by_id(id); end
122
-
123
125
  sig { params(id: Integer).returns(Elem) }
124
126
  def find_by_id!(id); end
125
-
126
- # -- Calculation
127
- # There can be a complication of using count with .group
128
- # https://api.rubyonrails.org/classes/ActiveRecord/Calculations.html#method-i-count
129
- # sig { params(args: T.untyped, block: T.nilable(T.proc.void)).returns(Integer) }
130
- # def count(*args, &block); end
131
127
  end
132
128
 
133
129
  module ActiveRecord::QueryMethods
@@ -139,37 +135,73 @@ module ActiveRecord::QueryMethods
139
135
  end
140
136
 
141
137
  class ActiveRecord::Base
142
- extend ActiveRecord::Querying::Typed
138
+ extend SorbetRails::CustomFinderMethods
143
139
  extend T::Generic
144
140
  Elem = type_template(fixed: ActiveRecord::Base)
145
- include ActiveRecord::AttributeMethods::Dirty
146
- include ActiveModel::Dirty
147
- end
148
141
 
149
- class ApplicationRecord
150
- extend T::Generic
151
- Elem = type_template(fixed: ApplicationRecord)
152
- end
142
+ # -- place here to avoid conflicts with sorbet generated gem rbis
153
143
 
154
- module ActiveModel::Dirty
155
- extend T::Sig
144
+ # These methods would return 1 single element when there is no limit, and return an
145
+ # array of element when there is a limit passed in.
146
+ # The more common use case is to find 1 object. We use that as the default sig
147
+ # and add custom first_n, last_n method for the cases that return an array
148
+ sig { params(args: T.untyped).returns(Elem) }
149
+ def self.find(*args); end
150
+ sig { params(limit: T.nilable(Integer)).returns(T.nilable(Elem)) }
151
+ def self.first(limit = nil); end
152
+ sig { params(limit: T.nilable(Integer)).returns(T.nilable(Elem)) }
153
+ def self.last(limit = nil); end
156
154
 
157
- sig { params(attr: Symbol, from: T.untyped, to: T.untyped).returns(T::Boolean) }
158
- def attribute_changed?(attr, from: nil, to: nil); end
155
+ # -- place here to avoid conflicts with sorbet generated gem rbi
156
+ sig { params(conditions: T.untyped).returns(T::Boolean) }
157
+ def self.exists?(conditions = nil); end
158
+ sig { returns(T::Boolean) }
159
+ def self.any?; end
160
+ sig { returns(T::Boolean) }
161
+ def self.many?; end
162
+ sig { returns(T::Boolean) }
163
+ def self.none?; end
164
+ sig { returns(T::Boolean) }
165
+ def self.one?; end
159
166
 
160
- sig { params(attr_name: Symbol).returns(T::Boolean) }
161
- def attribute_changed_in_place?(attr_name); end
167
+ # -- finder methods
168
+ sig { returns(Elem) }
169
+ def self.first!; end
170
+ sig { returns(Elem) }
171
+ def self.second!; end
172
+ sig { returns(T.nilable(Elem)) }
173
+ def self.second; end
174
+ sig { returns(Elem) }
175
+ def self.third!; end
176
+ sig { returns(T.nilable(Elem)) }
177
+ def self.third; end
178
+ sig { returns(Elem) }
179
+ def self.fourth!; end
180
+ sig { returns(T.nilable(Elem)) }
181
+ def self.fourth; end
182
+ sig { returns(Elem) }
183
+ def self.fifth!; end
184
+ sig { returns(T.nilable(Elem)) }
185
+ def self.fifth; end
162
186
 
163
- sig { params(attr_name: Symbol).returns(T::Boolean) }
164
- def attribute_previously_changed?(attr_name); end
187
+ sig { returns(Elem) }
188
+ def self.last!; end
189
+ sig { returns(Elem) }
190
+ def self.third_to_last!; end
191
+ sig { returns(T.nilable(Elem)) }
192
+ def self.third_to_last; end
193
+ sig { returns(Elem) }
194
+ def self.second_to_last!; end
195
+ sig { returns(T.nilable(Elem)) }
196
+ def self.second_to_last; end
165
197
 
166
- sig { returns(T::Boolean) }
167
- def changed?; end
198
+ sig { params(arg: T.untyped, args: T.untyped).returns(T.nilable(Elem)) }
199
+ def self.find_by(arg, *args); end
200
+ sig { params(arg: T.untyped, args: T.untyped).returns(Elem) }
201
+ def self.find_by!(arg, *args); end
168
202
  end
169
203
 
170
- module ActiveRecord::AttributeMethods::Dirty
171
- extend T::Sig
172
-
173
- sig { params(attr_name: Symbol, options: T.untyped).returns(T::Boolean) }
174
- def saved_change_to_attribute?(attr_name, **options); end
204
+ class ApplicationRecord < ActiveRecord::Base
205
+ extend T::Generic
206
+ Elem = type_template(fixed: ApplicationRecord)
175
207
  end
@@ -1,5 +1,10 @@
1
1
  require("sorbet-rails/model_rbi_formatter")
2
2
  require("sorbet-rails/routes_rbi_formatter")
3
+ require("sorbet-rails/utils")
4
+
5
+ # this is ugly but it's a way to get the current directory of this script
6
+ # maybe someone coming along will know a better way
7
+ @@sorbet_rails_rake_dir = File.dirname(__FILE__)
3
8
 
4
9
  namespace :rails_rbi do
5
10
 
@@ -16,12 +21,9 @@ namespace :rails_rbi do
16
21
 
17
22
  desc "Generate rbi for rails models. Pass models name to regenrate rbi for only the given models."
18
23
  task models: :environment do |t, args|
19
- # need to eager load to see all models
20
- Rails.application.eager_load!
21
- # Rails 6.0 change the loading logic to use Zeitwerk
22
- # https://github.com/rails/rails/blob/master/railties/lib/rails/application/finisher.rb#L116
23
- # But this is not applied to Rails.application.eager_load! method
24
- Zeitwerk::Loader.eager_load_all if defined?(Zeitwerk)
24
+ SorbetRails::Utils.rails_eager_load_all!
25
+
26
+ copy_bundled_rbi
25
27
 
26
28
  all_models = Set.new(ActiveRecord::Base.descendants + whitelisted_models - blacklisted_models)
27
29
 
@@ -37,6 +39,13 @@ namespace :rails_rbi do
37
39
  end
38
40
  end
39
41
 
42
+ def copy_bundled_rbi
43
+ bundled_rbi_path = File.join(@@sorbet_rails_rake_dir, "..", "rbi", ".")
44
+ copy_to_path = Rails.root.join("sorbet", "rails-rbi")
45
+ FileUtils.mkdir_p(File.dirname(copy_to_path))
46
+ FileUtils.cp_r(bundled_rbi_path, copy_to_path)
47
+ end
48
+
40
49
  def generate_rbis_for_models(model_classes, available_classes)
41
50
  available_class_names = Set.new(available_classes.map { |c| c.name })
42
51
  formatted = model_classes.map do |model_class|
@@ -0,0 +1,11 @@
1
+
2
+ module SorbetRails::Utils
3
+ def self.rails_eager_load_all!
4
+ # need to eager load to see all models
5
+ Rails.configuration.eager_load_namespaces.each { |ns| ns.try(:eager_load!) }
6
+ # Rails 6.0 change the loading logic to use Zeitwerk
7
+ # https://github.com/rails/rails/blob/master/railties/lib/rails/application/finisher.rb#L116
8
+ # But this is not applied to Rails.application.eager_load! method
9
+ Zeitwerk::Loader.eager_load_all if defined?(Zeitwerk)
10
+ end
11
+ end
data/sorbet-rails.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = %q{sorbet-rails}
3
- s.version = "0.3.0"
3
+ s.version = "0.4.0"
4
4
  s.date = %q{2019-04-18}
5
5
  s.summary = %q{Set of tools to make Sorbet work with Rails seamlessly.}
6
6
  s.authors = ["Chan Zuckerberg Initiative"]
@@ -6,8 +6,9 @@ wd="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
6
6
  RAILS_VERSION=4.2 bash $wd/run_spec.sh
7
7
  RAILS_VERSION=5.0 bash $wd/run_spec.sh
8
8
  RAILS_VERSION=5.1 bash $wd/run_spec.sh
9
- RAILS_VERSION=5.2 bash $wd/run_spec.sh
10
9
  RAILS_VERSION=6.0 bash $wd/run_spec.sh
11
10
 
12
- # Always end with the default version
11
+ TEST_SRB_INIT=1 bash $wd/run_spec.sh
12
+
13
+ # Always end with the default version, which is Rails 5.2
13
14
  sh $wd/run_spec.sh
data/spec/bin/run_spec.sh CHANGED
@@ -3,31 +3,38 @@
3
3
 
4
4
  # need to use bash so that $wd returns the location of the script
5
5
  wd="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
6
+ current_dir=$(pwd)
7
+
8
+ if [[ -z $RAILS_VERSION ]]; then
9
+ if [[ -z $TEST_SRB_INIT ]]; then
10
+ rails_dir="$wd/../support/v5.2"
11
+ else
12
+ rails_dir="$wd/../support/v5.2-no-sorbet"
13
+ fi
14
+ else
15
+ rails_dir="$wd/../support/v$RAILS_VERSION"
16
+ fi
17
+
18
+ bundle_version=$([ "$RAILS_VERSION" == 4.2 ] && echo "_1.17.3_" || echo "")
19
+
20
+ # clean up & install gems
6
21
  rm $wd/../../Gemfile.lock 2>/dev/null # clean up Gemfile.lock first
22
+ bundle $bundle_version install
23
+
24
+ echo $rails_dir
25
+
26
+ # update gems in rails_dir
27
+ cd $rails_dir
28
+ bundle $bundle_version install
29
+
30
+ # move back to current dir to run test
31
+ cd $current_dir
7
32
 
8
- case $RAILS_VERSION in
9
- 4.2)
10
- echo 'run spec with Rails 4.2'
11
- RAILS_VERSION=4.2 bundle _1.17.3_ update && RAILS_VERSION=4.2 bundle _1.17.3_ exec rake
12
- ;;
13
- 5.0)
14
- echo 'run spec with Rails 5.0'
15
- RAILS_VERSION=5.0 bundle update && RAILS_VERSION=5.0 bundle exec rake
16
- ;;
17
- 5.1)
18
- echo 'run spec with Rails 5.1'
19
- RAILS_VERSION=5.1 bundle update && RAILS_VERSION=5.1 bundle exec rake
20
- ;;
21
- 5.2)
22
- echo 'run spec with Rails 5.2'
23
- RAILS_VERSION=5.2 bundle update && RAILS_VERSION=5.2 bundle exec rake
24
- ;;
25
- 6.0)
26
- echo 'run spec with Rails 6.0'
27
- RAILS_VERSION=6.0 bundle update && RAILS_VERSION=6.0 bundle exec rake
28
- ;;
29
- *)
30
- echo 'run default'
31
- bundle update && bundle exec rake
32
- ;;
33
- esac
33
+ if [[ -z $RAILS_VERSION ]]; then
34
+ echo "---- Run DEFAULT ----"
35
+ bundle update && bundle exec rake
36
+ else
37
+ echo "---- Run $RAILS_VERSION ----"
38
+ RAILS_VERSION=$RAILS_VERSION bundle $bundle_version update
39
+ RAILS_VERSION=$RAILS_VERSION bundle $bundle_version exec rake
40
+ fi
@@ -3,21 +3,6 @@ require 'sorbet-rails/model_rbi_formatter'
3
3
 
4
4
  RSpec.describe ModelRbiFormatter do
5
5
 
6
- it 'loads all the models in the app' do
7
- expected_models = [
8
- Potion,
9
- SpellBook,
10
- Wand,
11
- Wizard,
12
- ]
13
-
14
- Rails.application.eager_load!
15
- # Needed for Rails 6.0
16
- Zeitwerk::Loader.eager_load_all if defined?(Zeitwerk)
17
- all_models = ActiveRecord::Base.descendants
18
- expect((expected_models - all_models)).to eql([])
19
- end
20
-
21
6
  it 'does not throw an error when given an abstract class' do
22
7
  formatter = ModelRbiFormatter.new(Potion, ['Potion'])
23
8
  expect_match_file(
data/spec/rails_helper.rb CHANGED
@@ -22,7 +22,7 @@ rails_folder =
22
22
  when "6.0"
23
23
  "v6.0"
24
24
  else
25
- "v5.2"
25
+ ENV["TEST_SRB_INIT"] ? "v5.2-no-sorbet" : "v5.2"
26
26
  end
27
27
 
28
28
  TEST_DATA_FOLDER = "spec/test_data/#{rails_folder}"
@@ -31,10 +31,16 @@ require "support/#{rails_folder}/config/environment"
31
31
 
32
32
  ActiveRecord::Migration.maintain_test_schema!
33
33
 
34
+ require 'rake_helper'
35
+
34
36
  RSpec.configure do |config|
35
37
  config.before(:suite) do
36
38
  next if ENV["DISABLE_DATABASE_CLEANER"] == 'true'
37
- DatabaseCleaner.clean_with(:truncation, {pre_count: true, reset_ids: false})
39
+ DatabaseCleaner.clean_with(:truncation, {
40
+ pre_count: true,
41
+ reset_ids: false,
42
+ except: %w(ar_internal_metadata),
43
+ })
38
44
  end
39
45
 
40
46
  config.around(:each) do |example|
@@ -42,11 +48,10 @@ RSpec.configure do |config|
42
48
  example.run
43
49
  next
44
50
  end
45
- if example.metadata.fetch(:transaction, true)
46
- DatabaseCleaner.strategy = :transaction
47
- else
48
- DatabaseCleaner.strategy = :truncation, {pre_count: true, reset_ids: false}
49
- end
51
+ DatabaseCleaner.strategy = :truncation, {
52
+ pre_count: true,
53
+ reset_ids: false,
54
+ }
50
55
  DatabaseCleaner.start
51
56
  example.run
52
57
  DatabaseCleaner.clean
@@ -1,8 +1,7 @@
1
1
  require 'rails_helper'
2
- require 'rake_helper'
3
2
 
4
3
  RSpec.describe 'rake rails_rbi:models', type: :task do
5
- let!(:expected_dir_path) { Rails.root.join("sorbet", "rails-rbi", "models") }
4
+ let!(:generated_dir_path) { Rails.root.join("sorbet", "rails-rbi", "models") }
6
5
 
7
6
  it "preloads the Rails environment" do
8
7
  expect(task.prerequisites).to include("environment")
@@ -11,7 +10,7 @@ RSpec.describe 'rake rails_rbi:models', type: :task do
11
10
  it "generates model files correctly" do
12
11
  task.invoke
13
12
  expect_files(
14
- base_dir: expected_dir_path,
13
+ base_dir: generated_dir_path,
15
14
  files: [
16
15
  'potion.rbi',
17
16
  'spell_book.rbi',
@@ -19,12 +18,30 @@ RSpec.describe 'rake rails_rbi:models', type: :task do
19
18
  'wizard.rbi',
20
19
  ]
21
20
  )
21
+ if Object.const_defined?('ActiveStorage')
22
+ expect_files(
23
+ base_dir: generated_dir_path.join('active_storage'),
24
+ files: [
25
+ 'attachment.rbi',
26
+ 'blob.rbi',
27
+ ],
28
+ )
29
+ end
30
+ if Object.const_defined?('ActiveRecord::InternalMetadata')
31
+ expect_files(
32
+ base_dir: generated_dir_path.join('active_record'),
33
+ files: [
34
+ 'internal_metadata.rbi',
35
+ 'schema_migration.rbi',
36
+ ]
37
+ )
38
+ end
22
39
  end
23
40
 
24
41
  it 'generates selected model correctly' do
25
42
  task.invoke("Wizard")
26
43
  expect_files(
27
- base_dir: expected_dir_path,
44
+ base_dir: generated_dir_path,
28
45
  files: [
29
46
  'wizard.rbi',
30
47
  ]
@@ -34,7 +51,7 @@ RSpec.describe 'rake rails_rbi:models', type: :task do
34
51
  it 'generates more than 1 selected models correctly' do
35
52
  task.invoke("Wizard","SpellBook")
36
53
  expect_files(
37
- base_dir: expected_dir_path,
54
+ base_dir: generated_dir_path,
38
55
  files: [
39
56
  'spell_book.rbi',
40
57
  'wizard.rbi',
@@ -1,5 +1,4 @@
1
1
  require 'rails_helper'
2
- require 'rake_helper'
3
2
 
4
3
  RSpec.describe 'rake rails_rbi:routes', type: :task do
5
4
  it "preloads the Rails environment" do