active_cached_resource 0.0.1.pre

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (340) hide show
  1. checksums.yaml +7 -0
  2. data/.rspec +3 -0
  3. data/.rubocop.yml +22 -0
  4. data/.standard.yml +2 -0
  5. data/CHANGELOG.md +5 -0
  6. data/README.md +45 -0
  7. data/Rakefile +21 -0
  8. data/example/consumer/.dockerignore +41 -0
  9. data/example/consumer/.gitattributes +9 -0
  10. data/example/consumer/.gitignore +36 -0
  11. data/example/consumer/.kamal/hooks/docker-setup.sample +3 -0
  12. data/example/consumer/.kamal/hooks/post-deploy.sample +14 -0
  13. data/example/consumer/.kamal/hooks/post-proxy-reboot.sample +3 -0
  14. data/example/consumer/.kamal/hooks/pre-build.sample +51 -0
  15. data/example/consumer/.kamal/hooks/pre-connect.sample +47 -0
  16. data/example/consumer/.kamal/hooks/pre-deploy.sample +109 -0
  17. data/example/consumer/.kamal/hooks/pre-proxy-reboot.sample +3 -0
  18. data/example/consumer/.kamal/secrets +17 -0
  19. data/example/consumer/Dockerfile +65 -0
  20. data/example/consumer/Gemfile +17 -0
  21. data/example/consumer/Rakefile +6 -0
  22. data/example/consumer/app/controllers/application_controller.rb +2 -0
  23. data/example/consumer/app/controllers/concerns/.keep +0 -0
  24. data/example/consumer/app/jobs/application_job.rb +7 -0
  25. data/example/consumer/app/mailers/application_mailer.rb +4 -0
  26. data/example/consumer/app/models/application_record.rb +3 -0
  27. data/example/consumer/app/models/concerns/.keep +0 -0
  28. data/example/consumer/app/models/person.rb +9 -0
  29. data/example/consumer/app/views/layouts/mailer.html.erb +13 -0
  30. data/example/consumer/app/views/layouts/mailer.text.erb +1 -0
  31. data/example/consumer/bin/brakeman +7 -0
  32. data/example/consumer/bin/bundle +109 -0
  33. data/example/consumer/bin/dev +2 -0
  34. data/example/consumer/bin/docker-entrypoint +14 -0
  35. data/example/consumer/bin/jobs +6 -0
  36. data/example/consumer/bin/kamal +27 -0
  37. data/example/consumer/bin/rails +4 -0
  38. data/example/consumer/bin/rake +4 -0
  39. data/example/consumer/bin/rubocop +8 -0
  40. data/example/consumer/bin/setup +34 -0
  41. data/example/consumer/bin/thrust +5 -0
  42. data/example/consumer/config/application.rb +20 -0
  43. data/example/consumer/config/boot.rb +3 -0
  44. data/example/consumer/config/cache.yml +16 -0
  45. data/example/consumer/config/credentials.yml.enc +1 -0
  46. data/example/consumer/config/database.yml +14 -0
  47. data/example/consumer/config/deploy.yml +116 -0
  48. data/example/consumer/config/environment.rb +5 -0
  49. data/example/consumer/config/environments/development.rb +64 -0
  50. data/example/consumer/config/environments/production.rb +85 -0
  51. data/example/consumer/config/environments/test.rb +50 -0
  52. data/example/consumer/config/initializers/cors.rb +16 -0
  53. data/example/consumer/config/initializers/filter_parameter_logging.rb +8 -0
  54. data/example/consumer/config/initializers/inflections.rb +16 -0
  55. data/example/consumer/config/locales/en.yml +31 -0
  56. data/example/consumer/config/puma.rb +41 -0
  57. data/example/consumer/config/queue.yml +18 -0
  58. data/example/consumer/config/recurring.yml +10 -0
  59. data/example/consumer/config/routes.rb +10 -0
  60. data/example/consumer/config.ru +6 -0
  61. data/example/consumer/db/cache_schema.rb +14 -0
  62. data/example/consumer/db/queue_schema.rb +129 -0
  63. data/example/consumer/db/seeds.rb +0 -0
  64. data/example/consumer/lib/tasks/.keep +0 -0
  65. data/example/consumer/log/.keep +0 -0
  66. data/example/consumer/public/robots.txt +1 -0
  67. data/example/consumer/script/.keep +0 -0
  68. data/example/consumer/storage/.keep +0 -0
  69. data/example/consumer/tmp/.keep +0 -0
  70. data/example/consumer/tmp/cache/.keep +0 -0
  71. data/example/consumer/tmp/pids/.keep +0 -0
  72. data/example/consumer/tmp/storage/.keep +0 -0
  73. data/example/consumer/vendor/.keep +0 -0
  74. data/example/provider/.dockerignore +41 -0
  75. data/example/provider/.gitattributes +9 -0
  76. data/example/provider/.gitignore +32 -0
  77. data/example/provider/.kamal/hooks/docker-setup.sample +3 -0
  78. data/example/provider/.kamal/hooks/post-deploy.sample +14 -0
  79. data/example/provider/.kamal/hooks/post-proxy-reboot.sample +3 -0
  80. data/example/provider/.kamal/hooks/pre-build.sample +51 -0
  81. data/example/provider/.kamal/hooks/pre-connect.sample +47 -0
  82. data/example/provider/.kamal/hooks/pre-deploy.sample +109 -0
  83. data/example/provider/.kamal/hooks/pre-proxy-reboot.sample +3 -0
  84. data/example/provider/.kamal/secrets +17 -0
  85. data/example/provider/Dockerfile +65 -0
  86. data/example/provider/Gemfile +14 -0
  87. data/example/provider/Rakefile +6 -0
  88. data/example/provider/app/controllers/application_controller.rb +2 -0
  89. data/example/provider/app/controllers/concerns/.keep +0 -0
  90. data/example/provider/app/controllers/people_controller.rb +68 -0
  91. data/example/provider/app/jobs/application_job.rb +7 -0
  92. data/example/provider/app/mailers/application_mailer.rb +4 -0
  93. data/example/provider/app/models/address.rb +3 -0
  94. data/example/provider/app/models/application_record.rb +3 -0
  95. data/example/provider/app/models/company.rb +3 -0
  96. data/example/provider/app/models/concerns/.keep +0 -0
  97. data/example/provider/app/models/person.rb +6 -0
  98. data/example/provider/app/views/layouts/mailer.html.erb +13 -0
  99. data/example/provider/app/views/layouts/mailer.text.erb +1 -0
  100. data/example/provider/bin/brakeman +7 -0
  101. data/example/provider/bin/bundle +109 -0
  102. data/example/provider/bin/dev +2 -0
  103. data/example/provider/bin/docker-entrypoint +14 -0
  104. data/example/provider/bin/jobs +6 -0
  105. data/example/provider/bin/kamal +27 -0
  106. data/example/provider/bin/rails +4 -0
  107. data/example/provider/bin/rake +4 -0
  108. data/example/provider/bin/rubocop +8 -0
  109. data/example/provider/bin/setup +34 -0
  110. data/example/provider/bin/thrust +5 -0
  111. data/example/provider/config/application.rb +44 -0
  112. data/example/provider/config/boot.rb +3 -0
  113. data/example/provider/config/cache.yml +16 -0
  114. data/example/provider/config/credentials.yml.enc +1 -0
  115. data/example/provider/config/database.yml +20 -0
  116. data/example/provider/config/deploy.yml +116 -0
  117. data/example/provider/config/environment.rb +5 -0
  118. data/example/provider/config/environments/development.rb +64 -0
  119. data/example/provider/config/environments/production.rb +85 -0
  120. data/example/provider/config/environments/test.rb +50 -0
  121. data/example/provider/config/initializers/cors.rb +16 -0
  122. data/example/provider/config/initializers/filter_parameter_logging.rb +8 -0
  123. data/example/provider/config/initializers/inflections.rb +16 -0
  124. data/example/provider/config/locales/en.yml +31 -0
  125. data/example/provider/config/puma.rb +41 -0
  126. data/example/provider/config/queue.yml +18 -0
  127. data/example/provider/config/recurring.yml +10 -0
  128. data/example/provider/config/routes.rb +4 -0
  129. data/example/provider/config.ru +6 -0
  130. data/example/provider/db/cache_schema.rb +14 -0
  131. data/example/provider/db/migrate/20241202183937_create_people.rb +11 -0
  132. data/example/provider/db/migrate/20241202183955_create_addresses.rb +13 -0
  133. data/example/provider/db/migrate/20241202184017_create_companies.rb +14 -0
  134. data/example/provider/db/queue_schema.rb +129 -0
  135. data/example/provider/db/schema.rb +47 -0
  136. data/example/provider/db/seeds.rb +18 -0
  137. data/example/provider/lib/tasks/.keep +0 -0
  138. data/example/provider/log/.keep +0 -0
  139. data/example/provider/public/robots.txt +1 -0
  140. data/example/provider/script/.keep +0 -0
  141. data/example/provider/storage/.keep +0 -0
  142. data/example/provider/tmp/.keep +0 -0
  143. data/example/provider/tmp/pids/.keep +0 -0
  144. data/example/provider/tmp/storage/.keep +0 -0
  145. data/example/provider/vendor/.keep +0 -0
  146. data/lib/active_cached_resource/caching.rb +176 -0
  147. data/lib/active_cached_resource/caching_strategies/active_support_cache.rb +31 -0
  148. data/lib/active_cached_resource/caching_strategies/base.rb +114 -0
  149. data/lib/active_cached_resource/caching_strategies/sql_cache.rb +32 -0
  150. data/lib/active_cached_resource/configuration.rb +50 -0
  151. data/lib/active_cached_resource/logger.rb +22 -0
  152. data/lib/active_cached_resource/model.rb +33 -0
  153. data/lib/active_cached_resource/version.rb +12 -0
  154. data/lib/active_cached_resource.rb +64 -0
  155. data/lib/activeresource/.gitignore +15 -0
  156. data/lib/activeresource/README.md +283 -0
  157. data/lib/activeresource/examples/performance.rb +72 -0
  158. data/lib/activeresource/lib/active_resource/active_job_serializer.rb +26 -0
  159. data/lib/activeresource/lib/active_resource/associations/builder/association.rb +32 -0
  160. data/lib/activeresource/lib/active_resource/associations/builder/belongs_to.rb +16 -0
  161. data/lib/activeresource/lib/active_resource/associations/builder/has_many.rb +14 -0
  162. data/lib/activeresource/lib/active_resource/associations/builder/has_one.rb +14 -0
  163. data/lib/activeresource/lib/active_resource/associations.rb +175 -0
  164. data/lib/activeresource/lib/active_resource/base.rb +1741 -0
  165. data/lib/activeresource/lib/active_resource/callbacks.rb +22 -0
  166. data/lib/activeresource/lib/active_resource/collection.rb +214 -0
  167. data/lib/activeresource/lib/active_resource/connection.rb +298 -0
  168. data/lib/activeresource/lib/active_resource/custom_methods.rb +129 -0
  169. data/lib/activeresource/lib/active_resource/exceptions.rb +98 -0
  170. data/lib/activeresource/lib/active_resource/formats/json_format.rb +28 -0
  171. data/lib/activeresource/lib/active_resource/formats/xml_format.rb +27 -0
  172. data/lib/activeresource/lib/active_resource/formats.rb +24 -0
  173. data/lib/activeresource/lib/active_resource/http_mock.rb +386 -0
  174. data/lib/activeresource/lib/active_resource/inheriting_hash.rb +34 -0
  175. data/lib/activeresource/lib/active_resource/log_subscriber.rb +26 -0
  176. data/lib/activeresource/lib/active_resource/railtie.rb +31 -0
  177. data/lib/activeresource/lib/active_resource/reflection.rb +78 -0
  178. data/lib/activeresource/lib/active_resource/schema.rb +60 -0
  179. data/lib/activeresource/lib/active_resource/singleton.rb +111 -0
  180. data/lib/activeresource/lib/active_resource/threadsafe_attributes.rb +65 -0
  181. data/lib/activeresource/lib/active_resource/validations.rb +176 -0
  182. data/lib/activeresource/lib/active_resource.rb +49 -0
  183. data/lib/activeresource/lib/activeresource.rb +3 -0
  184. data/lib/activeresource/test/abstract_unit.rb +153 -0
  185. data/lib/activeresource/test/cases/active_job_serializer_test.rb +53 -0
  186. data/lib/activeresource/test/cases/association_test.rb +104 -0
  187. data/lib/activeresource/test/cases/associations/builder/belongs_to_test.rb +42 -0
  188. data/lib/activeresource/test/cases/associations/builder/has_many_test.rb +28 -0
  189. data/lib/activeresource/test/cases/associations/builder/has_one_test.rb +28 -0
  190. data/lib/activeresource/test/cases/authorization_test.rb +276 -0
  191. data/lib/activeresource/test/cases/base/custom_methods_test.rb +155 -0
  192. data/lib/activeresource/test/cases/base/equality_test.rb +53 -0
  193. data/lib/activeresource/test/cases/base/load_test.rb +249 -0
  194. data/lib/activeresource/test/cases/base/schema_test.rb +428 -0
  195. data/lib/activeresource/test/cases/base_errors_test.rb +129 -0
  196. data/lib/activeresource/test/cases/base_test.rb +1622 -0
  197. data/lib/activeresource/test/cases/callbacks_test.rb +155 -0
  198. data/lib/activeresource/test/cases/collection_test.rb +172 -0
  199. data/lib/activeresource/test/cases/connection_test.rb +357 -0
  200. data/lib/activeresource/test/cases/finder_test.rb +217 -0
  201. data/lib/activeresource/test/cases/format_test.rb +137 -0
  202. data/lib/activeresource/test/cases/http_mock_test.rb +213 -0
  203. data/lib/activeresource/test/cases/inheritence_test.rb +19 -0
  204. data/lib/activeresource/test/cases/inheriting_hash_test.rb +25 -0
  205. data/lib/activeresource/test/cases/log_subscriber_test.rb +63 -0
  206. data/lib/activeresource/test/cases/reflection_test.rb +65 -0
  207. data/lib/activeresource/test/cases/validations_test.rb +78 -0
  208. data/lib/activeresource/test/fixtures/address.rb +20 -0
  209. data/lib/activeresource/test/fixtures/beast.rb +16 -0
  210. data/lib/activeresource/test/fixtures/comment.rb +5 -0
  211. data/lib/activeresource/test/fixtures/customer.rb +5 -0
  212. data/lib/activeresource/test/fixtures/inventory.rb +14 -0
  213. data/lib/activeresource/test/fixtures/person.rb +15 -0
  214. data/lib/activeresource/test/fixtures/pet.rb +6 -0
  215. data/lib/activeresource/test/fixtures/post.rb +5 -0
  216. data/lib/activeresource/test/fixtures/product.rb +11 -0
  217. data/lib/activeresource/test/fixtures/project.rb +19 -0
  218. data/lib/activeresource/test/fixtures/proxy.rb +6 -0
  219. data/lib/activeresource/test/fixtures/sound.rb +11 -0
  220. data/lib/activeresource/test/fixtures/street_address.rb +6 -0
  221. data/lib/activeresource/test/fixtures/subscription_plan.rb +7 -0
  222. data/lib/activeresource/test/fixtures/weather.rb +21 -0
  223. data/lib/activeresource/test/setter_trap.rb +28 -0
  224. data/lib/activeresource/test/singleton_test.rb +138 -0
  225. data/lib/activeresource/test/threadsafe_attributes_test.rb +91 -0
  226. data/lib/generators/active_cached_resource/install_generator.rb +31 -0
  227. data/lib/generators/active_cached_resource/templates/migration.erb +16 -0
  228. data/sorbet/config +4 -0
  229. data/sorbet/rbi/annotations/.gitattributes +1 -0
  230. data/sorbet/rbi/annotations/activemodel.rbi +89 -0
  231. data/sorbet/rbi/annotations/activesupport.rbi +457 -0
  232. data/sorbet/rbi/annotations/minitest.rbi +119 -0
  233. data/sorbet/rbi/annotations/rainbow.rbi +269 -0
  234. data/sorbet/rbi/dsl/.gitattributes +1 -0
  235. data/sorbet/rbi/dsl/active_support/callbacks.rbi +21 -0
  236. data/sorbet/rbi/gems/.gitattributes +1 -0
  237. data/sorbet/rbi/gems/actioncable@8.0.0.rbi +252 -0
  238. data/sorbet/rbi/gems/actionmailbox@8.0.0.rbi +9 -0
  239. data/sorbet/rbi/gems/actionmailer@8.0.0.rbi +9 -0
  240. data/sorbet/rbi/gems/actionpack@8.0.0.rbi +20909 -0
  241. data/sorbet/rbi/gems/actiontext@8.0.0.rbi +9 -0
  242. data/sorbet/rbi/gems/actionview@8.0.0.rbi +16207 -0
  243. data/sorbet/rbi/gems/activejob@8.0.0.rbi +9 -0
  244. data/sorbet/rbi/gems/activemodel-serializers-xml@1.0.3.rbi +166 -0
  245. data/sorbet/rbi/gems/activemodel@8.0.0.rbi +6857 -0
  246. data/sorbet/rbi/gems/activerecord@8.0.0.rbi +42896 -0
  247. data/sorbet/rbi/gems/activeresource@6.1.4.rbi +3944 -0
  248. data/sorbet/rbi/gems/activestorage@8.0.0.rbi +9 -0
  249. data/sorbet/rbi/gems/activesupport@8.0.0.rbi +21251 -0
  250. data/sorbet/rbi/gems/ast@2.4.2.rbi +585 -0
  251. data/sorbet/rbi/gems/base64@0.2.0.rbi +509 -0
  252. data/sorbet/rbi/gems/benchmark@0.4.0.rbi +618 -0
  253. data/sorbet/rbi/gems/bigdecimal@3.1.8.rbi +78 -0
  254. data/sorbet/rbi/gems/builder@3.3.0.rbi +9 -0
  255. data/sorbet/rbi/gems/bump@0.10.0.rbi +169 -0
  256. data/sorbet/rbi/gems/byebug@11.1.3.rbi +3607 -0
  257. data/sorbet/rbi/gems/coderay@1.1.3.rbi +3427 -0
  258. data/sorbet/rbi/gems/concurrent-ruby@1.3.4.rbi +11645 -0
  259. data/sorbet/rbi/gems/connection_pool@2.4.1.rbi +9 -0
  260. data/sorbet/rbi/gems/crass@1.0.6.rbi +623 -0
  261. data/sorbet/rbi/gems/date@3.4.0.rbi +75 -0
  262. data/sorbet/rbi/gems/diff-lcs@1.5.1.rbi +1131 -0
  263. data/sorbet/rbi/gems/docile@1.4.1.rbi +377 -0
  264. data/sorbet/rbi/gems/drb@2.2.1.rbi +1347 -0
  265. data/sorbet/rbi/gems/erubi@1.13.0.rbi +150 -0
  266. data/sorbet/rbi/gems/globalid@1.2.1.rbi +9 -0
  267. data/sorbet/rbi/gems/i18n@1.14.6.rbi +2359 -0
  268. data/sorbet/rbi/gems/io-console@0.7.2.rbi +9 -0
  269. data/sorbet/rbi/gems/json@2.8.2.rbi +1901 -0
  270. data/sorbet/rbi/gems/language_server-protocol@3.17.0.3.rbi +14238 -0
  271. data/sorbet/rbi/gems/lint_roller@1.1.0.rbi +240 -0
  272. data/sorbet/rbi/gems/logger@1.6.1.rbi +920 -0
  273. data/sorbet/rbi/gems/loofah@2.23.1.rbi +1081 -0
  274. data/sorbet/rbi/gems/mail@2.8.1.rbi +9 -0
  275. data/sorbet/rbi/gems/marcel@1.0.4.rbi +9 -0
  276. data/sorbet/rbi/gems/method_source@1.1.0.rbi +304 -0
  277. data/sorbet/rbi/gems/mini_mime@1.1.5.rbi +9 -0
  278. data/sorbet/rbi/gems/minitest@5.25.2.rbi +1547 -0
  279. data/sorbet/rbi/gems/net-imap@0.5.1.rbi +9 -0
  280. data/sorbet/rbi/gems/net-pop@0.1.2.rbi +9 -0
  281. data/sorbet/rbi/gems/net-protocol@0.2.2.rbi +292 -0
  282. data/sorbet/rbi/gems/net-smtp@0.5.0.rbi +9 -0
  283. data/sorbet/rbi/gems/netrc@0.11.0.rbi +159 -0
  284. data/sorbet/rbi/gems/nio4r@2.7.4.rbi +9 -0
  285. data/sorbet/rbi/gems/nokogiri@1.16.7.rbi +7311 -0
  286. data/sorbet/rbi/gems/parallel@1.26.3.rbi +291 -0
  287. data/sorbet/rbi/gems/parser@3.3.6.0.rbi +5519 -0
  288. data/sorbet/rbi/gems/prism@1.2.0.rbi +39085 -0
  289. data/sorbet/rbi/gems/pry-byebug@3.10.1.rbi +1151 -0
  290. data/sorbet/rbi/gems/pry@0.14.2.rbi +10076 -0
  291. data/sorbet/rbi/gems/psych@5.2.0.rbi +1785 -0
  292. data/sorbet/rbi/gems/racc@1.8.1.rbi +162 -0
  293. data/sorbet/rbi/gems/rack-session@2.0.0.rbi +727 -0
  294. data/sorbet/rbi/gems/rack-test@2.1.0.rbi +747 -0
  295. data/sorbet/rbi/gems/rack@3.1.8.rbi +4905 -0
  296. data/sorbet/rbi/gems/rackup@2.2.1.rbi +230 -0
  297. data/sorbet/rbi/gems/rails-dom-testing@2.2.0.rbi +758 -0
  298. data/sorbet/rbi/gems/rails-html-sanitizer@1.6.0.rbi +785 -0
  299. data/sorbet/rbi/gems/rails@8.0.0.rbi +9 -0
  300. data/sorbet/rbi/gems/railties@8.0.0.rbi +6287 -0
  301. data/sorbet/rbi/gems/rainbow@3.1.1.rbi +403 -0
  302. data/sorbet/rbi/gems/rake@13.2.1.rbi +3091 -0
  303. data/sorbet/rbi/gems/rbi@0.2.1.rbi +4535 -0
  304. data/sorbet/rbi/gems/rdoc@6.8.1.rbi +12572 -0
  305. data/sorbet/rbi/gems/regexp_parser@2.9.2.rbi +3772 -0
  306. data/sorbet/rbi/gems/reline@0.5.12.rbi +2416 -0
  307. data/sorbet/rbi/gems/rexml@3.3.9.rbi +4858 -0
  308. data/sorbet/rbi/gems/rspec-core@3.13.2.rbi +11287 -0
  309. data/sorbet/rbi/gems/rspec-expectations@3.13.3.rbi +8183 -0
  310. data/sorbet/rbi/gems/rspec-mocks@3.13.2.rbi +5341 -0
  311. data/sorbet/rbi/gems/rspec-support@3.13.1.rbi +1630 -0
  312. data/sorbet/rbi/gems/rspec@3.13.0.rbi +83 -0
  313. data/sorbet/rbi/gems/rubocop-ast@1.36.1.rbi +7303 -0
  314. data/sorbet/rbi/gems/rubocop-performance@1.21.1.rbi +9 -0
  315. data/sorbet/rbi/gems/rubocop@1.65.1.rbi +58170 -0
  316. data/sorbet/rbi/gems/ruby-progressbar@1.13.0.rbi +1318 -0
  317. data/sorbet/rbi/gems/securerandom@0.3.2.rbi +395 -0
  318. data/sorbet/rbi/gems/simplecov-html@0.13.1.rbi +225 -0
  319. data/sorbet/rbi/gems/simplecov@0.22.0.rbi +2149 -0
  320. data/sorbet/rbi/gems/simplecov_json_formatter@0.1.4.rbi +9 -0
  321. data/sorbet/rbi/gems/spoom@1.5.0.rbi +4932 -0
  322. data/sorbet/rbi/gems/standard-custom@1.0.2.rbi +9 -0
  323. data/sorbet/rbi/gems/standard-performance@1.4.0.rbi +9 -0
  324. data/sorbet/rbi/gems/standard@1.40.0.rbi +929 -0
  325. data/sorbet/rbi/gems/stringio@3.1.2.rbi +9 -0
  326. data/sorbet/rbi/gems/tapioca@0.16.4.rbi +3597 -0
  327. data/sorbet/rbi/gems/thor@1.3.2.rbi +4378 -0
  328. data/sorbet/rbi/gems/timeout@0.4.2.rbi +151 -0
  329. data/sorbet/rbi/gems/tzinfo@2.0.6.rbi +5918 -0
  330. data/sorbet/rbi/gems/unicode-display_width@2.6.0.rbi +66 -0
  331. data/sorbet/rbi/gems/uri@1.0.2.rbi +2377 -0
  332. data/sorbet/rbi/gems/useragent@0.16.10.rbi +9 -0
  333. data/sorbet/rbi/gems/websocket-driver@0.7.6.rbi +9 -0
  334. data/sorbet/rbi/gems/websocket-extensions@0.1.5.rbi +9 -0
  335. data/sorbet/rbi/gems/yard-sorbet@0.9.0.rbi +435 -0
  336. data/sorbet/rbi/gems/yard@0.9.37.rbi +18504 -0
  337. data/sorbet/rbi/gems/zeitwerk@2.7.1.rbi +9 -0
  338. data/sorbet/tapioca/config.yml +13 -0
  339. data/sorbet/tapioca/require.rb +12 -0
  340. metadata +543 -0
@@ -0,0 +1,65 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "abstract_unit"
4
+
5
+ require "fixtures/person"
6
+ require "fixtures/customer"
7
+
8
+
9
+
10
+ class ReflectionTest < ActiveSupport::TestCase
11
+ def test_correct_class_attributes
12
+ object = ActiveResource::Reflection::AssociationReflection.new(:test, :people, {})
13
+ assert_equal :people, object.name
14
+ assert_equal :test, object.macro
15
+ assert_equal({}, object.options)
16
+ end
17
+
18
+ def test_correct_class_name_matching_without_class_name
19
+ object = ActiveResource::Reflection::AssociationReflection.new(:test, :people, {})
20
+ assert_equal Person, object.klass
21
+ end
22
+
23
+ def test_correct_class_name_matching_as_string
24
+ object = ActiveResource::Reflection::AssociationReflection.new(:test, :people, class_name: "Person")
25
+ assert_equal Person, object.klass
26
+ end
27
+
28
+ def test_correct_class_name_matching_as_symbol
29
+ object = ActiveResource::Reflection::AssociationReflection.new(:test, :people, class_name: :person)
30
+ assert_equal Person, object.klass
31
+ end
32
+
33
+ def test_correct_class_name_matching_as_class
34
+ object = ActiveResource::Reflection::AssociationReflection.new(:test, :people, class_name: Person)
35
+ assert_equal Person, object.klass
36
+ end
37
+
38
+ def test_correct_class_name_matching_as_string_with_namespace
39
+ object = ActiveResource::Reflection::AssociationReflection.new(:test, :people, class_name: "external/person")
40
+ assert_equal External::Person, object.klass
41
+ end
42
+
43
+ def test_correct_class_name_matching_as_plural_string_with_namespace
44
+ object = ActiveResource::Reflection::AssociationReflection.new(:test, :people, class_name: "external/profile_data")
45
+ assert_equal External::ProfileData, object.klass
46
+ end
47
+
48
+ def test_foreign_key_method_with_no_foreign_key_option
49
+ object = ActiveResource::Reflection::AssociationReflection.new(:test, :person, {})
50
+ assert_equal "person_id", object.foreign_key
51
+ end
52
+
53
+ def test_foreign_key_method_with_with_foreign_key_option
54
+ object = ActiveResource::Reflection::AssociationReflection.new(:test, :people, foreign_key: "client_id")
55
+ assert_equal "client_id", object.foreign_key
56
+ end
57
+
58
+ def test_creation_of_reflection
59
+ Person.reflections = {}
60
+ object = Person.create_reflection(:test, :people, {})
61
+ assert_equal ActiveResource::Reflection::AssociationReflection, object.class
62
+ assert_equal 1, Person.reflections.count
63
+ assert_equal Person, Person.reflections[:people].klass
64
+ end
65
+ end
@@ -0,0 +1,78 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "abstract_unit"
4
+ require "fixtures/project"
5
+ require "active_support/core_ext/hash/conversions"
6
+
7
+ # The validations are tested thoroughly under ActiveModel::Validations
8
+ # This test case simply makes sure that they are all accessible by
9
+ # Active Resource objects.
10
+ class ValidationsTest < ActiveSupport::TestCase
11
+ VALID_PROJECT_HASH = { name: "My Project", description: "A project" }
12
+ def setup
13
+ @my_proj = { "person" => VALID_PROJECT_HASH }.to_json
14
+ ActiveResource::HttpMock.respond_to do |mock|
15
+ mock.post "/projects.json", {}, @my_proj, 201, "Location" => "/projects/5.json"
16
+ end
17
+ end
18
+
19
+ def test_validates_presence_of
20
+ p = new_project(name: nil)
21
+ assert_not p.valid?, "should not be a valid record without name"
22
+ assert_not p.save, "should not have saved an invalid record"
23
+ assert_equal ["can't be blank"], p.errors[:name], "should have an error on name"
24
+
25
+ p.name = "something"
26
+
27
+ assert p.save, "should have saved after fixing the validation, but had: #{p.errors.inspect}"
28
+ end
29
+
30
+ def test_fails_save!
31
+ p = new_project(name: nil)
32
+ assert_raise(ActiveResource::ResourceInvalid) { p.save! }
33
+ end
34
+
35
+ def test_save_without_validation
36
+ p = new_project(name: nil)
37
+ assert_not p.save
38
+ assert p.save(validate: false)
39
+ end
40
+
41
+ def test_validate_callback
42
+ # we have a callback ensuring the description is longer than three letters
43
+ p = new_project(description: "a")
44
+ assert_not p.valid?, "should not be a valid record when it fails a validation callback"
45
+ assert_not p.save, "should not have saved an invalid record"
46
+ assert_equal ["must be greater than three letters long"], p.errors[:description], "should be an error on description"
47
+
48
+ # should now allow this description
49
+ p.description = "abcd"
50
+ assert p.save, "should have saved after fixing the validation, but had: #{p.errors.inspect}"
51
+ end
52
+
53
+ def test_client_side_validation_maximum
54
+ project = Project.new(description: "123456789012345")
55
+ assert_not project.valid?
56
+ assert_equal ["is too long (maximum is 10 characters)"], project.errors[:description]
57
+ end
58
+
59
+ def test_invalid_method
60
+ p = new_project
61
+
62
+ assert_not p.invalid?
63
+ end
64
+
65
+ def test_validate_bang_method
66
+ p = new_project(name: nil)
67
+
68
+ assert_raise(ActiveModel::ValidationError) { p.validate! }
69
+ end
70
+
71
+ protected
72
+ # quickie helper to create a new project with all the required
73
+ # attributes.
74
+ # Pass in any params you specifically want to override
75
+ def new_project(opts = {})
76
+ Project.new(VALID_PROJECT_HASH.merge(opts))
77
+ end
78
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ # turns everything into the same object
4
+ class AddressXMLFormatter
5
+ include ActiveResource::Formats::XmlFormat
6
+
7
+ def decode(xml)
8
+ data = ActiveResource::Formats::XmlFormat.decode(xml)
9
+ # process address fields
10
+ data.each do |address|
11
+ address["city_state"] = "#{address['city']}, #{address['state']}"
12
+ end
13
+ data
14
+ end
15
+ end
16
+
17
+ class AddressResource < ActiveResource::Base
18
+ self.element_name = "address"
19
+ self.format = AddressXMLFormatter.new
20
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ class BeastResource < ActiveResource::Base
4
+ self.site = "http://beast.caboo.se"
5
+ site.user = "foo"
6
+ site.password = "bar"
7
+ end
8
+
9
+ class Forum < BeastResource
10
+ # taken from BeastResource
11
+ # self.site = 'http://beast.caboo.se'
12
+ end
13
+
14
+ class Topic < BeastResource
15
+ self.site += "/forums/:forum_id"
16
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Comment < ActiveResource::Base
4
+ self.site = "http://37s.sunrise.i:3000/posts/:post_id"
5
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Customer < ActiveResource::Base
4
+ self.site = "http://37s.sunrise.i:3000"
5
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Inventory < ActiveResource::Base
4
+ include ActiveResource::Singleton
5
+ self.site = "http://37s.sunrise.i:3000"
6
+ self.prefix = "/products/:product_id/"
7
+
8
+ schema do
9
+ integer :total
10
+ integer :used
11
+
12
+ string :status
13
+ end
14
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Person < ActiveResource::Base
4
+ self.site = "http://37s.sunrise.i:3000"
5
+ end
6
+
7
+ module External
8
+ class Person < ActiveResource::Base
9
+ self.site = "http://atq.caffeine.intoxication.it"
10
+ end
11
+
12
+ class ProfileData < ActiveResource::Base
13
+ self.site = "http://external.profile.data.nl"
14
+ end
15
+ end
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Pet < ActiveResource::Base
4
+ self.site = "http://37s.sunrise.i:3000"
5
+ self.prefix = "/people/:person_id/"
6
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Post < ActiveResource::Base
4
+ self.site = "http://37s.sunrise.i:3000"
5
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Product < ActiveResource::Base
4
+ self.site = "http://37s.sunrise.i:3000"
5
+ # X-Inherited-Header is for testing that any subclasses
6
+ # include the headers of this class
7
+ self.headers["X-Inherited-Header"] = "present"
8
+ end
9
+
10
+ class SubProduct < Product
11
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ # used to test validations
4
+ class Project < ActiveResource::Base
5
+ self.site = "http://37s.sunrise.i:3000"
6
+ schema do
7
+ string :email
8
+ string :name
9
+ end
10
+
11
+ validates :name, presence: true
12
+ validates :description, presence: false, length: { maximum: 10 }
13
+ validate :description_greater_than_three_letters
14
+
15
+ # to test the validate *callback* works
16
+ def description_greater_than_three_letters
17
+ errors.add :description, "must be greater than three letters long" if description.length < 3 unless description.blank?
18
+ end
19
+ end
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ class ProxyResource < ActiveResource::Base
4
+ self.site = "http://localhost"
5
+ self.proxy = "http://user:password@proxy.local:3000"
6
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Asset
4
+ class Sound < ActiveResource::Base
5
+ self.site = "http://37s.sunrise.i:3000"
6
+ end
7
+ end
8
+
9
+ # to test namespacing in a module
10
+ class Author
11
+ end
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ class StreetAddress < ActiveResource::Base
4
+ self.site = "http://37s.sunrise.i:3000/people/:person_id"
5
+ self.element_name = "address"
6
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ class SubscriptionPlan < ActiveResource::Base
4
+ self.site = "http://37s.sunrise.i:3000"
5
+ self.element_name = "plan"
6
+ self.primary_key = :code
7
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Weather < ActiveResource::Base
4
+ include ActiveResource::Singleton
5
+ self.site = "http://37s.sunrise.i:3000"
6
+
7
+ schema do
8
+ string :status
9
+ string :temperature
10
+ end
11
+ end
12
+
13
+ class WeatherDashboard < ActiveResource::Base
14
+ include ActiveResource::Singleton
15
+ self.site = "http://37s.sunrise.i:3000"
16
+ self.singleton_name = "dashboard"
17
+
18
+ schema do
19
+ string :status
20
+ end
21
+ end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ class SetterTrap < BasicObject
4
+ class << self
5
+ def rollback_sets(obj)
6
+ trapped = new(obj)
7
+ yield(trapped).tap { trapped.rollback_sets }
8
+ end
9
+ end
10
+
11
+ def initialize(obj)
12
+ @cache = {}
13
+ @obj = obj
14
+ end
15
+
16
+ def respond_to?(method)
17
+ @obj.respond_to?(method)
18
+ end
19
+
20
+ def method_missing(method, *args, &proc)
21
+ @cache[method] ||= @obj.send($`) if method.to_s =~ /=$/
22
+ @obj.send method, *args, &proc
23
+ end
24
+
25
+ def rollback_sets
26
+ @cache.each { |k, v| @obj.send k, v }
27
+ end
28
+ end
@@ -0,0 +1,138 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "abstract_unit"
4
+ require "fixtures/weather"
5
+ require "fixtures/inventory"
6
+
7
+ class SingletonTest < ActiveSupport::TestCase
8
+ def setup_weather
9
+ weather = { status: "Sunny", temperature: 67 }
10
+ ActiveResource::HttpMock.respond_to do |mock|
11
+ mock.get "/weather.json", {}, weather.to_json
12
+ mock.get "/weather.json?degrees=fahrenheit", {}, weather.merge(temperature: 100).to_json
13
+ mock.post "/weather.json", {}, weather.to_json, 201, "Location" => "/weather.json"
14
+ mock.delete "/weather.json", {}, nil
15
+ mock.put "/weather.json", {}, nil, 204
16
+ end
17
+ end
18
+
19
+ def setup_weather_not_found
20
+ ActiveResource::HttpMock.respond_to do |mock|
21
+ mock.get "/weather.json", {}, nil, 404
22
+ end
23
+ end
24
+
25
+ def setup_inventory
26
+ inventory = { status: "Sold Out", total: 10, used: 10 }.to_json
27
+
28
+ ActiveResource::HttpMock.respond_to do |mock|
29
+ mock.get "/products/5/inventory.json", {}, inventory
30
+ end
31
+ end
32
+
33
+ def test_custom_singleton_name
34
+ assert_equal "dashboard", WeatherDashboard.singleton_name
35
+ end
36
+
37
+ def test_singleton_path
38
+ assert_equal "/weather.json", Weather.singleton_path
39
+ end
40
+
41
+ def test_singleton_path_with_parameters
42
+ assert_equal "/weather.json?degrees=fahrenheit", Weather.singleton_path(degrees: "fahrenheit")
43
+ assert_equal "/weather.json?degrees=false", Weather.singleton_path(degrees: false)
44
+ assert_equal "/weather.json?degrees=", Weather.singleton_path(degrees: nil)
45
+
46
+ assert_equal "/weather.json?degrees=fahrenheit", Weather.singleton_path("degrees" => "fahrenheit")
47
+
48
+ # Use include? because ordering of param hash is not guaranteed
49
+ path = Weather.singleton_path(degrees: "fahrenheit", lunar: true)
50
+ assert path.include?("weather.json")
51
+ assert path.include?("degrees=fahrenheit")
52
+ assert path.include?("lunar=true")
53
+
54
+ path = Weather.singleton_path(days: ["monday", "saturday and sunday", nil, false])
55
+ assert_equal "/weather.json?days%5B%5D=monday&days%5B%5D=saturday+and+sunday&days%5B%5D=&days%5B%5D=false", path
56
+
57
+ path = Inventory.singleton_path(product_id: 5)
58
+ assert_equal "/products/5/inventory.json", path
59
+
60
+ path = Inventory.singleton_path({ product_id: 5 }, { sold: true })
61
+ assert_equal "/products/5/inventory.json?sold=true", path
62
+ end
63
+
64
+ def test_find_singleton
65
+ setup_weather
66
+ weather = Weather.send(:find_singleton, Hash.new)
67
+ assert_not_nil weather
68
+ assert_equal "Sunny", weather.status
69
+ assert_equal 67, weather.temperature
70
+ end
71
+
72
+ def test_find
73
+ setup_weather
74
+ weather = Weather.find
75
+ assert_not_nil weather
76
+ assert_equal "Sunny", weather.status
77
+ assert_equal 67, weather.temperature
78
+ end
79
+
80
+ def test_find_with_param_options
81
+ setup_inventory
82
+ inventory = Inventory.find(params: { product_id: 5 })
83
+
84
+ assert_not_nil inventory
85
+ assert_equal "Sold Out", inventory.status
86
+ assert_equal 10, inventory.used
87
+ assert_equal 10, inventory.total
88
+ assert_equal({ product_id: 5 }, inventory.prefix_options)
89
+ end
90
+
91
+ def test_find_with_query_options
92
+ setup_weather
93
+
94
+ weather = Weather.find(params: { degrees: "fahrenheit" })
95
+ assert_not_nil weather
96
+ assert_equal "Sunny", weather.status
97
+ assert_equal 100, weather.temperature
98
+ end
99
+
100
+ def test_not_found
101
+ setup_weather_not_found
102
+
103
+ assert_raise ActiveResource::ResourceNotFound do
104
+ Weather.find
105
+ end
106
+ end
107
+
108
+ def test_create_singleton
109
+ setup_weather
110
+ weather = Weather.create(status: "Sunny", temperature: 67)
111
+ assert_not_nil weather
112
+ assert_equal "Sunny", weather.status
113
+ assert_equal 67, weather.temperature
114
+ end
115
+
116
+ def test_destroy
117
+ setup_weather
118
+
119
+ # First Create the Weather
120
+ weather = Weather.create(status: "Sunny", temperature: 67)
121
+ assert_not_nil weather
122
+
123
+ # Now Destroy it
124
+ weather.destroy
125
+ end
126
+
127
+ def test_update
128
+ setup_weather
129
+
130
+ # First Create the Weather
131
+ weather = Weather.create(status: "Sunny", temperature: 67)
132
+ assert_not_nil weather
133
+
134
+ # Then update it
135
+ weather.status = "Rainy"
136
+ weather.save
137
+ end
138
+ end
@@ -0,0 +1,91 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "abstract_unit"
4
+
5
+ class ThreadsafeAttributesTest < ActiveSupport::TestCase
6
+ class TestClass
7
+ include ThreadsafeAttributes
8
+ threadsafe_attribute :safeattr
9
+ end
10
+
11
+ setup do
12
+ @tester = TestClass.new
13
+ end
14
+
15
+ test "#threadsafe attributes work in a single thread" do
16
+ assert_not @tester.safeattr_defined?
17
+ assert_nil @tester.safeattr
18
+ @tester.safeattr = "a value"
19
+ assert @tester.safeattr_defined?
20
+ assert_equal "a value", @tester.safeattr
21
+ end
22
+
23
+ test "#threadsafe attributes inherit the value of the main thread" do
24
+ @tester.safeattr = "a value"
25
+ Thread.new do
26
+ assert @tester.safeattr_defined?
27
+ assert_equal "a value", @tester.safeattr
28
+ end.join
29
+ assert_equal "a value", @tester.safeattr
30
+ end
31
+
32
+ test "#changing a threadsafe attribute in a thread does not affect the main thread" do
33
+ @tester.safeattr = "a value"
34
+ Thread.new do
35
+ @tester.safeattr = "a new value"
36
+ assert_equal "a new value", @tester.safeattr
37
+ end.join
38
+ assert_equal "a value", @tester.safeattr
39
+ end
40
+
41
+ test "#threadsafe attributes inherit the value of the main thread when value is nil/false" do
42
+ @tester.safeattr = false
43
+ Thread.new do
44
+ assert @tester.safeattr_defined?
45
+ assert_equal false, @tester.safeattr
46
+ end.join
47
+ assert_equal false, @tester.safeattr
48
+ end
49
+
50
+ test "#changing a threadsafe attribute in a thread sets an equal value for the main thread, if no value has been set" do
51
+ assert_not @tester.safeattr_defined?
52
+ assert_nil @tester.safeattr
53
+ Thread.new do
54
+ @tester.safeattr = "value from child"
55
+ assert_equal "value from child", @tester.safeattr
56
+ end.join
57
+ assert @tester.safeattr_defined?
58
+ assert_equal "value from child", @tester.safeattr
59
+ end
60
+
61
+ test "#threadsafe attributes can retrieve non-duplicable from main thread" do
62
+ @tester.safeattr = :symbol_1
63
+ Thread.new do
64
+ assert_equal :symbol_1, @tester.safeattr
65
+ end.join
66
+ end
67
+
68
+ test "#threadsafe attributes work in fibers" do
69
+ @tester.safeattr = :symbol_1
70
+ Fiber.new do
71
+ assert_equal :symbol_1, @tester.safeattr
72
+ end.resume
73
+ end
74
+
75
+ unless RUBY_PLATFORM == "java"
76
+ test "threadsafe attributes can be accessed after forking within a thread" do
77
+ reader, writer = IO.pipe
78
+ @tester.safeattr = "a value"
79
+ Thread.new do
80
+ fork do
81
+ reader.close
82
+ writer.print(@tester.safeattr)
83
+ writer.close
84
+ end
85
+ end.join
86
+ writer.close
87
+ assert_equal "a value", reader.read
88
+ reader.close
89
+ end
90
+ end
91
+ end
@@ -0,0 +1,31 @@
1
+ require "rails/generators/active_record"
2
+
3
+ module ActiveCachedResource
4
+ module Generators
5
+ class ActiveRecordGenerator < ::Rails::Generators::Base
6
+ include ::Rails::Generators::Migration
7
+ desc "Generates migration for cache tables"
8
+
9
+ source_paths << File.join(File.dirname(__FILE__), "templates")
10
+
11
+ def self.next_migration_number(dirname)
12
+ ::ActiveRecord::Generators::Base.next_migration_number(dirname)
13
+ end
14
+
15
+ def self.migration_version
16
+ "[#{Rails::VERSION::MAJOR}.#{Rails::VERSION::MINOR}]"
17
+ end
18
+
19
+ def create_migration_file
20
+ options = {
21
+ migration_version: migration_version
22
+ }
23
+ migration_template "migration.erb", "db/migrate/create_active_cached_resource_table.rb", options
24
+ end
25
+
26
+ def migration_version
27
+ self.class.migration_version
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,16 @@
1
+ class CreateActiveCachedResourceTable < ActiveRecord::Migration<%= migration_version %>
2
+ def up
3
+ create_table :active_cached_resources, id: false do |t|
4
+ t.binary :key, limit: 512, null: false
5
+ t.binary :value, null: false
6
+ t.datetime :expires_at, null: false
7
+
8
+ t.index [:key, :expires_at], unique: true, name: "index_active_cached_resources_on_key_and_expires_at"
9
+ t.index :key, name: "index_active_cached_resources_on_key"
10
+ end
11
+ end
12
+
13
+ def down
14
+ drop_table :active_cached_resources
15
+ end
16
+ end
data/sorbet/config ADDED
@@ -0,0 +1,4 @@
1
+ --dir
2
+ .
3
+ --ignore=tmp/
4
+ --ignore=vendor/
@@ -0,0 +1 @@
1
+ **/*.rbi linguist-vendored=true