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,98 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ActiveResource
4
+ class ConnectionError < StandardError # :nodoc:
5
+ attr_reader :response
6
+
7
+ def initialize(response, message = nil)
8
+ @response = response
9
+ @message = message
10
+ end
11
+
12
+ def to_s
13
+ return @message if @message
14
+
15
+ message = +"Failed."
16
+ message << " Response code = #{response.code}." if response.respond_to?(:code)
17
+ message << " Response message = #{response.message}." if response.respond_to?(:message)
18
+ message
19
+ end
20
+ end
21
+
22
+ # Raised when a Timeout::Error occurs.
23
+ class TimeoutError < ConnectionError
24
+ def initialize(message)
25
+ @message = message
26
+ end
27
+ def to_s; @message ; end
28
+ end
29
+
30
+ # Raised when a OpenSSL::SSL::SSLError occurs.
31
+ class SSLError < ConnectionError
32
+ def initialize(message)
33
+ @message = message
34
+ end
35
+ def to_s; @message ; end
36
+ end
37
+
38
+ # 3xx Redirection
39
+ class Redirection < ConnectionError # :nodoc:
40
+ def to_s
41
+ response["Location"] ? "#{super} => #{response['Location']}" : super
42
+ end
43
+ end
44
+
45
+ class MissingPrefixParam < ArgumentError # :nodoc:
46
+ end
47
+
48
+ # 4xx Client Error
49
+ class ClientError < ConnectionError # :nodoc:
50
+ end
51
+
52
+ # 400 Bad Request
53
+ class BadRequest < ClientError # :nodoc:
54
+ end
55
+
56
+ # 401 Unauthorized
57
+ class UnauthorizedAccess < ClientError # :nodoc:
58
+ end
59
+
60
+ # 402 Payment Required
61
+ class PaymentRequired < ClientError # :nodoc:
62
+ end
63
+
64
+ # 403 Forbidden
65
+ class ForbiddenAccess < ClientError # :nodoc:
66
+ end
67
+
68
+ # 404 Not Found
69
+ class ResourceNotFound < ClientError # :nodoc:
70
+ end
71
+
72
+ # 409 Conflict
73
+ class ResourceConflict < ClientError # :nodoc:
74
+ end
75
+
76
+ # 410 Gone
77
+ class ResourceGone < ClientError # :nodoc:
78
+ end
79
+
80
+ # 412 Precondition Failed
81
+ class PreconditionFailed < ClientError # :nodoc:
82
+ end
83
+
84
+ # 429 Too Many Requests
85
+ class TooManyRequests < ClientError # :nodoc:
86
+ end
87
+
88
+ # 5xx Server Error
89
+ class ServerError < ConnectionError # :nodoc:
90
+ end
91
+
92
+ # 405 Method Not Allowed
93
+ class MethodNotAllowed < ClientError # :nodoc:
94
+ def allowed_methods
95
+ @response["Allow"].split(",").map { |verb| verb.strip.downcase.to_sym }
96
+ end
97
+ end
98
+ end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "active_support/json"
4
+
5
+ module ActiveResource
6
+ module Formats
7
+ module JsonFormat
8
+ extend self
9
+
10
+ def extension
11
+ "json"
12
+ end
13
+
14
+ def mime_type
15
+ "application/json"
16
+ end
17
+
18
+ def encode(hash, options = nil)
19
+ ActiveSupport::JSON.encode(hash, options)
20
+ end
21
+
22
+ def decode(json)
23
+ return nil if json.nil?
24
+ Formats.remove_root(ActiveSupport::JSON.decode(json))
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "active_support/core_ext/hash/conversions"
4
+
5
+ module ActiveResource
6
+ module Formats
7
+ module XmlFormat
8
+ extend self
9
+
10
+ def extension
11
+ "xml"
12
+ end
13
+
14
+ def mime_type
15
+ "application/xml"
16
+ end
17
+
18
+ def encode(hash, options = {})
19
+ hash.to_xml(options)
20
+ end
21
+
22
+ def decode(xml)
23
+ Formats.remove_root(Hash.from_xml(xml))
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ActiveResource
4
+ module Formats
5
+ autoload :XmlFormat, "#{__dir__}/formats/xml_format.rb"
6
+ autoload :JsonFormat, "#{__dir__}/formats/json_format.rb"
7
+
8
+ # Lookup the format class from a mime type reference symbol. Example:
9
+ #
10
+ # ActiveResource::Formats[:xml] # => ActiveResource::Formats::XmlFormat
11
+ # ActiveResource::Formats[:json] # => ActiveResource::Formats::JsonFormat
12
+ def self.[](mime_type_reference)
13
+ ActiveResource::Formats.const_get(ActiveSupport::Inflector.camelize(mime_type_reference.to_s) + "Format")
14
+ end
15
+
16
+ def self.remove_root(data)
17
+ if data.is_a?(Hash) && data.keys.size == 1 && data.values.first.is_a?(Enumerable)
18
+ data.values.first
19
+ else
20
+ data
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,386 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "active_support/core_ext/kernel/reporting"
4
+ require "active_support/core_ext/object/inclusion"
5
+
6
+ module ActiveResource
7
+ class InvalidRequestError < StandardError; end # :nodoc:
8
+
9
+ # One thing that has always been a pain with remote web services is testing. The HttpMock
10
+ # class makes it easy to test your Active Resource models by creating a set of mock responses to specific
11
+ # requests.
12
+ #
13
+ # To test your Active Resource model, you simply call the ActiveResource::HttpMock.respond_to
14
+ # method with an attached block. The block declares a set of URIs with expected input, and the output
15
+ # each request should return. The passed in block has any number of entries in the following generalized
16
+ # format:
17
+ #
18
+ # mock.http_method(path, request_headers = {}, body = nil, status = 200, response_headers = {})
19
+ #
20
+ # * <tt>http_method</tt> - The HTTP method to listen for. This can be +get+, +post+, +patch+, +put+, +delete+ or
21
+ # +head+.
22
+ # * <tt>path</tt> - A string, starting with a "/", defining the URI that is expected to be
23
+ # called.
24
+ # * <tt>request_headers</tt> - Headers that are expected along with the request. This argument uses a
25
+ # hash format, such as <tt>{ "Content-Type" => "application/json" }</tt>. This mock will only trigger
26
+ # if your tests sends a request with identical headers.
27
+ # * <tt>body</tt> - The data to be returned. This should be a string of Active Resource parseable content,
28
+ # such as Json.
29
+ # * <tt>status</tt> - The HTTP response code, as an integer, to return with the response.
30
+ # * <tt>response_headers</tt> - Headers to be returned with the response. Uses the same hash format as
31
+ # <tt>request_headers</tt> listed above.
32
+ #
33
+ # In order for a mock to deliver its content, the incoming request must match by the <tt>http_method</tt>,
34
+ # +path+ and <tt>request_headers</tt>. If no match is found an +InvalidRequestError+ exception
35
+ # will be raised showing you what request it could not find a response for and also what requests and response
36
+ # pairs have been recorded so you can create a new mock for that request.
37
+ #
38
+ # ==== Example
39
+ # def setup
40
+ # @matz = { :person => { :id => 1, :name => "Matz" } }.to_json
41
+ # ActiveResource::HttpMock.respond_to do |mock|
42
+ # mock.post "/people.json", {}, @matz, 201, "Location" => "/people/1.json"
43
+ # mock.get "/people/1.json", {}, @matz
44
+ # mock.put "/people/1.json", {}, nil, 204
45
+ # mock.delete "/people/1.json", {}, nil, 200
46
+ # end
47
+ # end
48
+ #
49
+ # def test_get_matz
50
+ # person = Person.find(1)
51
+ # assert_equal "Matz", person.name
52
+ # end
53
+ #
54
+ class HttpMock
55
+ class Responder # :nodoc:
56
+ def initialize(responses)
57
+ @responses = responses
58
+ end
59
+
60
+ [ :post, :patch, :put, :get, :delete, :head ].each do |method|
61
+ # def post(path, request_headers = {}, body = nil, status = 200, response_headers = {}, options: {})
62
+ # @responses[Request.new(:post, path, nil, request_headers, options)] = Response.new(body || "", status, response_headers)
63
+ # end
64
+ module_eval <<-EOE, __FILE__, __LINE__ + 1
65
+ def #{method}(path, request_headers = {}, body = nil, status = 200, response_headers = {}, options = {})
66
+ request = Request.new(:#{method}, path, nil, request_headers, options)
67
+ response = Response.new(body || "", status, response_headers)
68
+
69
+ delete_duplicate_responses(request)
70
+
71
+ @responses << [request, response]
72
+ end
73
+ EOE
74
+ end
75
+
76
+ private
77
+ def delete_duplicate_responses(request)
78
+ @responses.delete_if { |r| r[0] == request }
79
+ end
80
+ end
81
+
82
+ class << self
83
+ # Returns an array of all request objects that have been sent to the mock. You can use this to check
84
+ # if your model actually sent an HTTP request.
85
+ #
86
+ # ==== Example
87
+ # def setup
88
+ # @matz = { :person => { :id => 1, :name => "Matz" } }.to_json
89
+ # ActiveResource::HttpMock.respond_to do |mock|
90
+ # mock.get "/people/1.json", {}, @matz
91
+ # end
92
+ # end
93
+ #
94
+ # def test_should_request_remote_service
95
+ # person = Person.find(1) # Call the remote service
96
+ #
97
+ # # This request object has the same HTTP method and path as declared by the mock
98
+ # expected_request = ActiveResource::Request.new(:get, "/people/1.json")
99
+ #
100
+ # # Assert that the mock received, and responded to, the expected request from the model
101
+ # assert ActiveResource::HttpMock.requests.include?(expected_request)
102
+ # end
103
+ def requests
104
+ @@requests ||= []
105
+ end
106
+
107
+ # Returns the list of requests and their mocked responses. Look up a
108
+ # response for a request using <tt>responses.assoc(request)</tt>.
109
+ def responses
110
+ @@responses ||= []
111
+ end
112
+
113
+ # Accepts a block which declares a set of requests and responses for the HttpMock to respond to in
114
+ # the following format:
115
+ #
116
+ # mock.http_method(path, request_headers = {}, body = nil, status = 200, response_headers = {})
117
+ #
118
+ # === Example
119
+ #
120
+ # @matz = { :person => { :id => 1, :name => "Matz" } }.to_json
121
+ # ActiveResource::HttpMock.respond_to do |mock|
122
+ # mock.post "/people.json", {}, @matz, 201, "Location" => "/people/1.json"
123
+ # mock.get "/people/1.json", {}, @matz
124
+ # mock.put "/people/1.json", {}, nil, 204
125
+ # mock.delete "/people/1.json", {}, nil, 200
126
+ # end
127
+ #
128
+ # Alternatively, accepts a hash of <tt>{Request => Response}</tt> pairs allowing you to generate
129
+ # these the following format:
130
+ #
131
+ # ActiveResource::Request.new(method, path, body, request_headers)
132
+ # ActiveResource::Response.new(body, status, response_headers)
133
+ #
134
+ # === Example
135
+ #
136
+ # Request.new(method, path, nil, request_headers)
137
+ #
138
+ # @matz = { :person => { :id => 1, :name => "Matz" } }.to_json
139
+ #
140
+ # create_matz = ActiveResource::Request.new(:post, '/people.json', @matz, {})
141
+ # created_response = ActiveResource::Response.new("", 201, {"Location" => "/people/1.json"})
142
+ # get_matz = ActiveResource::Request.new(:get, '/people/1.json', nil)
143
+ # ok_response = ActiveResource::Response.new("", 200, {})
144
+ #
145
+ # pairs = {create_matz => created_response, get_matz => ok_response}
146
+ #
147
+ # ActiveResource::HttpMock.respond_to(pairs)
148
+ #
149
+ # Note, by default, every time you call +respond_to+, any previous request and response pairs stored
150
+ # in HttpMock will be deleted giving you a clean slate to work on.
151
+ #
152
+ # If you want to override this behavior, pass in +false+ as the last argument to +respond_to+
153
+ #
154
+ # === Example
155
+ #
156
+ # ActiveResource::HttpMock.respond_to do |mock|
157
+ # mock.send(:get, "/people/1", {}, "JSON1")
158
+ # end
159
+ # ActiveResource::HttpMock.responses.length #=> 1
160
+ #
161
+ # ActiveResource::HttpMock.respond_to(false) do |mock|
162
+ # mock.send(:get, "/people/2", {}, "JSON2")
163
+ # end
164
+ # ActiveResource::HttpMock.responses.length #=> 2
165
+ #
166
+ # This also works with passing in generated pairs of requests and responses, again, just pass in false
167
+ # as the last argument:
168
+ #
169
+ # === Example
170
+ #
171
+ # ActiveResource::HttpMock.respond_to do |mock|
172
+ # mock.send(:get, "/people/1", {}, "JSON1")
173
+ # end
174
+ # ActiveResource::HttpMock.responses.length #=> 1
175
+ #
176
+ # get_matz = ActiveResource::Request.new(:get, '/people/1.json', nil)
177
+ # ok_response = ActiveResource::Response.new("", 200, {})
178
+ #
179
+ # pairs = {get_matz => ok_response}
180
+ #
181
+ # ActiveResource::HttpMock.respond_to(pairs, false)
182
+ # ActiveResource::HttpMock.responses.length #=> 2
183
+ #
184
+ # # If you add a response with an existing request, it will be replaced
185
+ #
186
+ # fail_response = ActiveResource::Response.new("", 404, {})
187
+ # pairs = {get_matz => fail_response}
188
+ #
189
+ # ActiveResource::HttpMock.respond_to(pairs, false)
190
+ # ActiveResource::HttpMock.responses.length #=> 2
191
+ #
192
+ def respond_to(*args) # :yields: mock
193
+ pairs = args.first || {}
194
+ reset! if args.last.class != FalseClass
195
+
196
+ if block_given?
197
+ yield Responder.new(responses)
198
+ else
199
+ delete_responses_to_replace pairs.to_a
200
+ responses.concat pairs.to_a
201
+ Responder.new(responses)
202
+ end
203
+ end
204
+
205
+ def delete_responses_to_replace(new_responses)
206
+ new_responses.each { |nr|
207
+ request_to_remove = nr[0]
208
+ @@responses = responses.delete_if { |r| r[0] == request_to_remove }
209
+ }
210
+ end
211
+
212
+ # Deletes all logged requests and responses.
213
+ def reset!
214
+ requests.clear
215
+ responses.clear
216
+ end
217
+
218
+ # Enables all ActiveResource::Connection instances to use real
219
+ # Net::HTTP instance instead of a mock.
220
+ def enable_net_connection!
221
+ @@net_connection_enabled = true
222
+ end
223
+
224
+ # Sets all ActiveResource::Connection to use HttpMock instances.
225
+ def disable_net_connection!
226
+ @@net_connection_enabled = false
227
+ end
228
+
229
+ # Checks if real requests can be used instead of the default mock used in tests.
230
+ def net_connection_enabled?
231
+ if defined?(@@net_connection_enabled)
232
+ @@net_connection_enabled
233
+ else
234
+ @@net_connection_enabled = false
235
+ end
236
+ end
237
+
238
+ def net_connection_disabled?
239
+ !net_connection_enabled?
240
+ end
241
+ end
242
+
243
+ # body? methods
244
+ { true => %w(post patch put),
245
+ false => %w(get delete head) }.each do |has_body, methods|
246
+ methods.each do |method|
247
+ # def post(path, body, headers, options = {})
248
+ # request = ActiveResource::Request.new(:post, path, body, headers, options)
249
+ # self.class.requests << request
250
+ # if response = self.class.responses.assoc(request)
251
+ # response[1]
252
+ # else
253
+ # raise InvalidRequestError.new("Could not find a response recorded for #{request.to_s} - Responses recorded are: - #{inspect_responses}")
254
+ # end
255
+ # end
256
+ module_eval <<-EOE, __FILE__, __LINE__ + 1
257
+ def #{method}(path, #{'body, ' if has_body}headers, options = {})
258
+ request = ActiveResource::Request.new(:#{method}, path, #{has_body ? 'body, ' : 'nil, '}headers, options)
259
+ self.class.requests << request
260
+ if response = self.class.responses.assoc(request)
261
+ response[1]
262
+ else
263
+ raise InvalidRequestError.new("Could not find a response recorded for \#{request.to_s} - Responses recorded are: \#{inspect_responses}")
264
+ end
265
+ end
266
+ EOE
267
+ end
268
+ end
269
+
270
+ def initialize(site) # :nodoc:
271
+ @site = site
272
+ end
273
+
274
+ def inspect_responses # :nodoc:
275
+ self.class.responses.map { |r| r[0].to_s }.inspect
276
+ end
277
+ end
278
+
279
+ class Request
280
+ attr_accessor :path, :method, :body, :headers
281
+
282
+ def initialize(method, path, body = nil, headers = {}, options = {})
283
+ @method, @path, @body, @headers, @options = method, path, body, headers, options
284
+ end
285
+
286
+ def ==(req)
287
+ same_path?(req) && method == req.method && headers_match?(req)
288
+ end
289
+
290
+ def to_s
291
+ "<#{method.to_s.upcase}: #{path} [#{headers}] (#{body})>"
292
+ end
293
+
294
+ # Removes query parameters from the path.
295
+ #
296
+ # @return [String] the path without query parameters
297
+ def remove_query_params_from_path
298
+ path.split("?").first
299
+ end
300
+
301
+ private
302
+ def same_path?(req)
303
+ if @options && @options[:omit_query_in_path]
304
+ remove_query_params_from_path == req.remove_query_params_from_path
305
+ else
306
+ path == req.path
307
+ end
308
+ end
309
+
310
+ def headers_match?(req)
311
+ # Ignore format header on equality if it's not defined
312
+ format_header = ActiveResource::Connection::HTTP_FORMAT_HEADER_NAMES[method]
313
+ if headers[format_header].present? || req.headers[format_header].blank?
314
+ headers == req.headers
315
+ else
316
+ headers.dup.merge(format_header => req.headers[format_header]) == req.headers
317
+ end
318
+ end
319
+ end
320
+
321
+ class Response
322
+ attr_accessor :body, :message, :code, :headers
323
+
324
+ def initialize(body, message = 200, headers = {})
325
+ @body, @message, @headers = body, message.to_s, headers
326
+ @code = @message[0, 3].to_i
327
+
328
+ resp_cls = Net::HTTPResponse::CODE_TO_OBJ[@code.to_s]
329
+ if resp_cls && !resp_cls.body_permitted?
330
+ @body = nil
331
+ end
332
+
333
+ self["Content-Length"] = @body.nil? ? "0" : body.size.to_s
334
+ end
335
+
336
+ # Returns true if code is 2xx,
337
+ # false otherwise.
338
+ def success?
339
+ code.in?(200..299)
340
+ end
341
+
342
+ def [](key)
343
+ headers[key]
344
+ end
345
+
346
+ def []=(key, value)
347
+ headers[key] = value
348
+ end
349
+
350
+ # Returns true if the other is a Response with an equal body, equal message
351
+ # and equal headers. Otherwise it returns false.
352
+ def ==(other)
353
+ if other.is_a?(Response)
354
+ other.body == body && other.message == message && other.headers == headers
355
+ else
356
+ false
357
+ end
358
+ end
359
+ end
360
+
361
+ class Connection
362
+ private
363
+ silence_warnings do
364
+ def http
365
+ if unstub_http?
366
+ @http = configure_http(new_http)
367
+ elsif stub_http?
368
+ @http = http_stub
369
+ end
370
+ @http ||= http_stub
371
+ end
372
+
373
+ def http_stub
374
+ HttpMock.new(@site)
375
+ end
376
+
377
+ def unstub_http?
378
+ HttpMock.net_connection_enabled? && defined?(@http) && @http.kind_of?(HttpMock)
379
+ end
380
+
381
+ def stub_http?
382
+ HttpMock.net_connection_disabled? && defined?(@http) && @http.kind_of?(Net::HTTP)
383
+ end
384
+ end
385
+ end
386
+ end
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ActiveResource
4
+ class InheritingHash < Hash
5
+ def initialize(parent_hash = {})
6
+ # Default hash value must be nil, which allows fallback lookup on parent hash
7
+ super(nil)
8
+ @parent_hash = parent_hash
9
+ end
10
+
11
+ def [](key)
12
+ super || @parent_hash[key]
13
+ end
14
+
15
+ # Merges the flattened parent hash (if it's an InheritingHash)
16
+ # with ourself
17
+ def to_hash
18
+ @parent_hash.to_hash.merge(self)
19
+ end
20
+
21
+ # So we can see the merged object in IRB or the Rails console
22
+ def pretty_print(pp)
23
+ pp.pp_hash to_hash
24
+ end
25
+
26
+ def inspect
27
+ to_hash.inspect
28
+ end
29
+
30
+ def to_s
31
+ inspect
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ActiveResource
4
+ class LogSubscriber < ActiveSupport::LogSubscriber
5
+ def request(event)
6
+ result = event.payload[:result]
7
+
8
+ # When result is nil, the connection could not even be initiated
9
+ # with the server, so we log an internal synthetic error response (523).
10
+ code = result.try(:code) || 523 # matches CloudFlare's convention
11
+ message = result.try(:message) || "ActiveResource connection error"
12
+ body = result.try(:body) || ""
13
+
14
+ log_level_method = code.to_i < 400 ? :info : :error
15
+
16
+ send log_level_method, "#{event.payload[:method].to_s.upcase} #{event.payload[:request_uri]}"
17
+ send log_level_method, "--> %d %s %d (%.1fms)" % [code, message, body.to_s.length, event.duration]
18
+ end
19
+
20
+ def logger
21
+ ActiveResource::Base.logger
22
+ end
23
+ end
24
+ end
25
+
26
+ ActiveResource::LogSubscriber.attach_to :active_resource
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "active_resource"
4
+ require "rails"
5
+
6
+ module ActiveResource
7
+ class Railtie < Rails::Railtie
8
+ config.active_resource = ActiveSupport::OrderedOptions.new
9
+
10
+ initializer "active_resource.set_configs" do |app|
11
+ ActiveSupport.on_load(:active_resource) do
12
+ app.config.active_resource.each do |k, v|
13
+ send "#{k}=", v
14
+ end
15
+ end
16
+ end
17
+
18
+ initializer "active_resource.add_active_job_serializer" do |app|
19
+ if app.config.try(:active_job).try(:custom_serializers)
20
+ require "active_resource/active_job_serializer"
21
+ app.config.active_job.custom_serializers << ActiveResource::ActiveJobSerializer
22
+ end
23
+ end
24
+
25
+ initializer "active_resource.deprecator" do |app|
26
+ if app.respond_to?(:deprecators)
27
+ app.deprecators[:active_resource] = ActiveResource.deprecator
28
+ end
29
+ end
30
+ end
31
+ end