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,155 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "abstract_unit"
4
+ require "active_support/core_ext/hash/conversions"
5
+
6
+ class Developer < ActiveResource::Base
7
+ self.site = "http://37s.sunrise.i:3000"
8
+
9
+ class << self
10
+ def callback_string(callback_method)
11
+ "history << [#{callback_method.to_sym.inspect}, :string]"
12
+ end
13
+
14
+ def callback_proc(callback_method)
15
+ Proc.new { |model| model.history << [callback_method, :proc] }
16
+ end
17
+
18
+ def define_callback_method(callback_method)
19
+ define_method(callback_method) do
20
+ self.history << [callback_method, :method]
21
+ end
22
+ send(callback_method, :"#{callback_method}")
23
+ end
24
+
25
+ def callback_object(callback_method)
26
+ klass = Class.new
27
+ klass.send(:define_method, callback_method) do |model|
28
+ model.history << [callback_method, :object]
29
+ end
30
+ klass.new
31
+ end
32
+ end
33
+
34
+ ActiveResource::Callbacks::CALLBACKS.each do |callback_method|
35
+ next if callback_method.to_s =~ /^around_/
36
+ define_callback_method(callback_method)
37
+ send(callback_method, callback_proc(callback_method))
38
+ send(callback_method, callback_object(callback_method))
39
+ send(callback_method) { |model| model.history << [callback_method, :block] }
40
+ end
41
+
42
+ def history
43
+ @history ||= []
44
+ end
45
+ end
46
+
47
+ class CallbacksTest < ActiveSupport::TestCase
48
+ def setup
49
+ @developer_attrs = { id: 1, name: "Guillermo", salary: 100_000 }
50
+ @developer = { "developer" => @developer_attrs }.to_json
51
+ ActiveResource::HttpMock.respond_to do |mock|
52
+ mock.post "/developers.json", {}, @developer, 201, "Location" => "/developers/1.json"
53
+ mock.get "/developers/1.json", {}, @developer
54
+ mock.put "/developers/1.json", {}, nil, 204
55
+ mock.delete "/developers/1.json", {}, nil, 200
56
+ end
57
+ end
58
+
59
+ def test_valid?
60
+ developer = Developer.new
61
+ developer.valid?
62
+ assert_equal [
63
+ [ :before_validation, :method ],
64
+ [ :before_validation, :proc ],
65
+ [ :before_validation, :object ],
66
+ [ :before_validation, :block ],
67
+ [ :after_validation, :method ],
68
+ [ :after_validation, :proc ],
69
+ [ :after_validation, :object ],
70
+ [ :after_validation, :block ],
71
+ ], developer.history
72
+ end
73
+
74
+ def test_create
75
+ developer = Developer.create(@developer_attrs)
76
+ assert_equal [
77
+ [ :before_validation, :method ],
78
+ [ :before_validation, :proc ],
79
+ [ :before_validation, :object ],
80
+ [ :before_validation, :block ],
81
+ [ :after_validation, :method ],
82
+ [ :after_validation, :proc ],
83
+ [ :after_validation, :object ],
84
+ [ :after_validation, :block ],
85
+ [ :before_save, :method ],
86
+ [ :before_save, :proc ],
87
+ [ :before_save, :object ],
88
+ [ :before_save, :block ],
89
+ [ :before_create, :method ],
90
+ [ :before_create, :proc ],
91
+ [ :before_create, :object ],
92
+ [ :before_create, :block ],
93
+ [ :after_create, :method ],
94
+ [ :after_create, :proc ],
95
+ [ :after_create, :object ],
96
+ [ :after_create, :block ],
97
+ [ :after_save, :method ],
98
+ [ :after_save, :proc ],
99
+ [ :after_save, :object ],
100
+ [ :after_save, :block ]
101
+ ], developer.history
102
+ end
103
+
104
+ def test_update
105
+ developer = Developer.find(1)
106
+ developer.save
107
+ assert_equal [
108
+ [ :before_validation, :method ],
109
+ [ :before_validation, :proc ],
110
+ [ :before_validation, :object ],
111
+ [ :before_validation, :block ],
112
+ [ :after_validation, :method ],
113
+ [ :after_validation, :proc ],
114
+ [ :after_validation, :object ],
115
+ [ :after_validation, :block ],
116
+ [ :before_save, :method ],
117
+ [ :before_save, :proc ],
118
+ [ :before_save, :object ],
119
+ [ :before_save, :block ],
120
+ [ :before_update, :method ],
121
+ [ :before_update, :proc ],
122
+ [ :before_update, :object ],
123
+ [ :before_update, :block ],
124
+ [ :after_update, :method ],
125
+ [ :after_update, :proc ],
126
+ [ :after_update, :object ],
127
+ [ :after_update, :block ],
128
+ [ :after_save, :method ],
129
+ [ :after_save, :proc ],
130
+ [ :after_save, :object ],
131
+ [ :after_save, :block ]
132
+ ], developer.history
133
+ end
134
+
135
+ def test_destroy
136
+ developer = Developer.find(1)
137
+ developer.destroy
138
+ assert_equal [
139
+ [ :before_destroy, :method ],
140
+ [ :before_destroy, :proc ],
141
+ [ :before_destroy, :object ],
142
+ [ :before_destroy, :block ],
143
+ [ :after_destroy, :method ],
144
+ [ :after_destroy, :proc ],
145
+ [ :after_destroy, :object ],
146
+ [ :after_destroy, :block ]
147
+ ], developer.history
148
+ end
149
+
150
+ def test_delete
151
+ developer = Developer.find(1)
152
+ Developer.delete(developer.id)
153
+ assert_equal [], developer.history
154
+ end
155
+ end
@@ -0,0 +1,172 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "abstract_unit"
4
+
5
+ class CollectionTest < ActiveSupport::TestCase
6
+ def setup
7
+ @collection = ActiveResource::Collection.new
8
+ end
9
+ end
10
+
11
+ class BasicCollectionTest < CollectionTest
12
+ def test_collection_respond_to_first_or_create
13
+ assert @collection.respond_to?(:first_or_create)
14
+ end
15
+
16
+ def test_collection_respond_to_first_or_initialize
17
+ assert @collection.respond_to?(:first_or_initialize)
18
+ end
19
+
20
+ def test_first_or_create_without_resource_class_raises_error
21
+ assert_raise(RuntimeError) { @collection.first_or_create }
22
+ end
23
+
24
+ def test_first_or_initialize_without_resource_class_raises_error
25
+ assert_raise(RuntimeError) { @collection.first_or_initialize }
26
+ end
27
+
28
+ def respond_to_where
29
+ assert @collection.respond_to?(:where)
30
+ end
31
+ end
32
+
33
+ class PaginatedCollection < ActiveResource::Collection
34
+ attr_accessor :next_page
35
+ def parse_response(parsed)
36
+ @elements = parsed["results"]
37
+ @next_page = parsed["next_page"]
38
+ end
39
+ end
40
+
41
+ class PaginatedPost < ActiveResource::Base
42
+ self.site = "http://37s.sunrise.i:3000"
43
+ self.collection_parser = "PaginatedCollection"
44
+ end
45
+
46
+ class ReduxCollection < ActiveResource::Base
47
+ self.site = "http://37s.sunrise.i:3000"
48
+ self.collection_parser = PaginatedCollection
49
+ end
50
+
51
+
52
+ class CollectionInheritanceTest < ActiveSupport::TestCase
53
+ def setup
54
+ @post = { id: 1, title: "Awesome" }
55
+ @post_even_more = { id: 1, title: "Awesome", subtitle: "EvenMore" }
56
+ @posts_hash = { "results" => [@post], :next_page => "/paginated_posts.json?page=2" }
57
+ @posts = @posts_hash.to_json
58
+ @posts2 = { "results" => [@post.merge(id: 2)], :next_page => nil }.to_json
59
+
60
+ @empty_posts = { "results" => [], :next_page => nil }.to_json
61
+ @new_post = { id: nil, title: nil }.to_json
62
+ ActiveResource::HttpMock.respond_to do |mock|
63
+ mock.get "/paginated_posts.json", {}, @posts
64
+ mock.get "/paginated_posts/new.json", {}, @new_post
65
+ mock.get "/paginated_posts.json?page=2", {}, @posts
66
+ mock.get "/paginated_posts.json?title=test", {}, @empty_posts
67
+ mock.get "/paginated_posts.json?page=2&title=Awesome", {}, @posts
68
+ mock.get "/paginated_posts.json?subtitle=EvenMore&title=Awesome", {}, @posts
69
+ mock.get "/paginated_posts.json?title=notfound", {}, nil, 404
70
+ mock.get "/paginated_posts.json?title=internalservererror", {}, nil, 500
71
+ mock.post "/paginated_posts.json", {}, nil
72
+ end
73
+ end
74
+
75
+ def test_setting_collection_parser
76
+ assert_kind_of PaginatedCollection, PaginatedPost.find(:all)
77
+ end
78
+
79
+ def test_setting_collection_parser_resource_class
80
+ assert_equal PaginatedPost, PaginatedPost.where(page: 2).resource_class
81
+ end
82
+
83
+ def test_setting_collection_parser_query_params
84
+ assert_equal({ page: 2 }, PaginatedPost.where(page: 2).query_params)
85
+ end
86
+
87
+ def test_custom_accessor
88
+ assert_equal PaginatedPost.find(:all).call.next_page, @posts_hash[:next_page]
89
+ end
90
+
91
+ def test_first_or_create
92
+ post = PaginatedPost.where(title: "test").first_or_create
93
+ assert post.valid?
94
+ end
95
+
96
+ def test_first_or_initialize
97
+ post = PaginatedPost.where(title: "test").first_or_initialize
98
+ assert post.valid?
99
+ end
100
+
101
+ def test_where
102
+ posts = PaginatedPost.where(page: 2)
103
+ next_posts = posts.where(title: "Awesome")
104
+ assert_kind_of PaginatedCollection, next_posts
105
+ end
106
+
107
+ def test_where_lazy_chain
108
+ expected_request = ActiveResource::Request.new(
109
+ :get,
110
+ "/paginated_posts.json?subtitle=EvenMore&title=Awesome",
111
+ nil,
112
+ { "Accept" => "application/json" }
113
+ )
114
+ posts = PaginatedPost.where(title: "Awesome").where(subtitle: "EvenMore")
115
+ assert_not posts.requested?
116
+ assert_equal 0, ActiveResource::HttpMock.requests.count { |r| r == expected_request }
117
+ # Call twice to ensure the request is only made once
118
+ posts.to_a
119
+ posts.to_a
120
+ assert_equal 1, ActiveResource::HttpMock.requests.count { |r| r == expected_request }
121
+ assert posts.requested?
122
+ end
123
+
124
+ def test_where_lazy_chain_with_no_results
125
+ posts = PaginatedPost.where(title: "notfound")
126
+ assert_not posts.requested?
127
+ assert_equal [], posts.to_a
128
+ assert posts.requested?
129
+ end
130
+
131
+ def test_where_lazy_chain_internal_server_error
132
+ posts = PaginatedPost.where(title: "internalservererror")
133
+ assert_not posts.requested?
134
+ assert_raise ActiveResource::ServerError do
135
+ posts.to_a
136
+ end
137
+ assert posts.requested?
138
+ end
139
+
140
+ def test_refresh
141
+ expected_request = ActiveResource::Request.new(
142
+ :get,
143
+ "/paginated_posts.json?page=2",
144
+ @posts,
145
+ { "Accept" => "application/json" }
146
+ )
147
+ posts = PaginatedPost.where(page: 2)
148
+
149
+ assert_not posts.requested?
150
+ posts.to_a
151
+ assert posts.requested?
152
+ assert_equal 1, ActiveResource::HttpMock.requests.count { |r| r == expected_request }
153
+ posts.refresh
154
+ assert_equal 2, ActiveResource::HttpMock.requests.count { |r| r == expected_request }
155
+ assert posts.requested?
156
+ end
157
+
158
+ def test_call
159
+ expected_request = ActiveResource::Request.new(
160
+ :get,
161
+ "/paginated_posts.json?page=2",
162
+ @posts,
163
+ { "Accept" => "application/json" }
164
+ )
165
+ posts = PaginatedPost.where(page: 2)
166
+
167
+ assert_not posts.requested?
168
+ assert_kind_of PaginatedCollection, posts.call
169
+ assert posts.requested?
170
+ assert_equal 1, ActiveResource::HttpMock.requests.count { |r| r == expected_request }
171
+ end
172
+ end
@@ -0,0 +1,357 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "abstract_unit"
4
+
5
+ class ConnectionTest < ActiveSupport::TestCase
6
+ ResponseCodeStub = Struct.new(:code)
7
+ RedirectResponseStub = Struct.new(:code, :Location)
8
+
9
+ def setup
10
+ @conn = ActiveResource::Connection.new("http://localhost")
11
+ matz = { person: { id: 1, name: "Matz" } }
12
+ david = { person: { id: 2, name: "David" } }
13
+ @people = { people: [ matz, david ] }.to_json
14
+ @people_single = { "people-single-elements" => [ matz ] }.to_json
15
+ @people_empty = { "people-empty-elements" => [ ] }.to_json
16
+ @matz = matz.to_json
17
+ @david = david.to_json
18
+ @header = { "key" => "value" }.freeze
19
+
20
+ @default_request_headers = { "Content-Type" => "application/json" }
21
+ ActiveResource::HttpMock.respond_to do |mock|
22
+ mock.get "/people/2.json", @header, @david
23
+ mock.get "/people.json", {}, @people
24
+ mock.get "/people_single_elements.json", {}, @people_single
25
+ mock.get "/people_empty_elements.json", {}, @people_empty
26
+ mock.get "/people/1.json", {}, @matz
27
+ mock.put "/people/1.json", {}, nil, 204
28
+ mock.put "/people/2.json", {}, @header, 204
29
+ mock.delete "/people/1.json", {}, nil, 200
30
+ mock.delete "/people/2.json", @header, nil, 200
31
+ mock.post "/people.json", {}, nil, 201, "Location" => "/people/5.json"
32
+ mock.post "/members.json", {}, @header, 201, "Location" => "/people/6.json"
33
+ mock.head "/people/1.json", {}, nil, 200
34
+ end
35
+ end
36
+
37
+ def test_same_logger_as_base
38
+ old_logger = ActiveResource::Base.logger
39
+ ActiveResource::Base.logger = original_logger = Object.new
40
+ old_site = ActiveResource::Base.site
41
+
42
+ ActiveResource::Base.site = "http://localhost"
43
+ assert_equal original_logger, ActiveResource::Base.connection.logger
44
+
45
+ ActiveResource::Base.logger = Logger.new(STDOUT)
46
+ assert_equal ActiveResource::Base.logger, ActiveResource::Base.connection.logger
47
+ ensure
48
+ ActiveResource::Base.logger = old_logger
49
+ ActiveResource::Base.site = old_site
50
+ end
51
+
52
+ def test_handle_response
53
+ # 2xx and 3xx are valid responses.
54
+ [200, 299, 300, 399].each do |code|
55
+ expected = ResponseCodeStub.new(code)
56
+ assert_equal expected, handle_response(expected)
57
+ end
58
+
59
+ # 301 is moved permanently (redirect)
60
+ assert_redirect_raises 301
61
+
62
+ # 302 is found (redirect)
63
+ assert_redirect_raises 302
64
+
65
+ # 303 is see other (redirect)
66
+ assert_redirect_raises 303
67
+
68
+ # 307 is temporary redirect
69
+ assert_redirect_raises 307
70
+
71
+ # 400 is a bad request (e.g. malformed URI or missing request parameter)
72
+ assert_response_raises ActiveResource::BadRequest, 400
73
+
74
+ # 401 is an unauthorized request
75
+ assert_response_raises ActiveResource::UnauthorizedAccess, 401
76
+
77
+ # 402 is a payment required error.
78
+ assert_response_raises ActiveResource::PaymentRequired, 402
79
+
80
+ # 403 is a forbidden request (and authorizing will not help)
81
+ assert_response_raises ActiveResource::ForbiddenAccess, 403
82
+
83
+ # 404 is a missing resource.
84
+ assert_response_raises ActiveResource::ResourceNotFound, 404
85
+
86
+ # 405 is a method not allowed error
87
+ assert_response_raises ActiveResource::MethodNotAllowed, 405
88
+
89
+ # 409 is an optimistic locking error
90
+ assert_response_raises ActiveResource::ResourceConflict, 409
91
+
92
+ # 410 is a removed resource
93
+ assert_response_raises ActiveResource::ResourceGone, 410
94
+
95
+ # 412 is a precondition failed
96
+ assert_response_raises ActiveResource::PreconditionFailed, 412
97
+
98
+ # 422 is a validation error
99
+ assert_response_raises ActiveResource::ResourceInvalid, 422
100
+
101
+ # 429 is too many requests
102
+ assert_response_raises ActiveResource::TooManyRequests, 429
103
+
104
+ # 4xx are client errors.
105
+ [402, 499].each do |code|
106
+ assert_response_raises ActiveResource::ClientError, code
107
+ end
108
+
109
+ # 5xx are server errors.
110
+ [500, 599].each do |code|
111
+ assert_response_raises ActiveResource::ServerError, code
112
+ end
113
+
114
+ # Others are unknown.
115
+ [199, 600].each do |code|
116
+ assert_response_raises ActiveResource::ConnectionError, code
117
+ end
118
+ end
119
+
120
+ ResponseHeaderStub = Struct.new(:code, :message, "Allow")
121
+ def test_should_return_allowed_methods_for_method_no_allowed_exception
122
+ handle_response ResponseHeaderStub.new(405, "HTTP Failed...", "GET, POST")
123
+ rescue ActiveResource::MethodNotAllowed => e
124
+ assert_equal "Failed. Response code = 405. Response message = HTTP Failed....", e.message
125
+ assert_equal [:get, :post], e.allowed_methods
126
+ end
127
+
128
+ def test_initialize_raises_argument_error_on_missing_site
129
+ assert_raise(ArgumentError) { ActiveResource::Connection.new(nil) }
130
+ end
131
+
132
+ def test_site_accessor_accepts_uri_or_string_argument
133
+ site = URI.parse("http://localhost")
134
+
135
+ assert_raise(URI::InvalidURIError) { @conn.site = nil }
136
+
137
+ assert_nothing_raised { @conn.site = "http://localhost" }
138
+ assert_equal site, @conn.site
139
+
140
+ assert_nothing_raised { @conn.site = site }
141
+ assert_equal site, @conn.site
142
+ end
143
+
144
+ def test_proxy_accessor_accepts_uri_or_string_argument
145
+ proxy = URI.parse("http://proxy_user:proxy_password@proxy.local:4242")
146
+
147
+ assert_nothing_raised { @conn.proxy = "http://proxy_user:proxy_password@proxy.local:4242" }
148
+ assert_equal proxy, @conn.proxy
149
+
150
+ assert_nothing_raised { @conn.proxy = proxy }
151
+ assert_equal proxy, @conn.proxy
152
+ end
153
+
154
+ def test_proxy_accessor_accepts_uri_or_string_argument_with_special_characters
155
+ user = "proxy_;{(,!$%_user"
156
+ password = "proxy_;:{(,!$%_password"
157
+
158
+ encoded_user = URI.encode_www_form_component(user) # "proxy_;%7B(,!$%25_user"
159
+ encoded_password = URI.encode_www_form_component(password) # "proxy_;:%7B(,!$%25_password"
160
+
161
+ proxy = URI.parse("http://#{encoded_user}:#{encoded_password}@proxy.local:4242")
162
+
163
+ assert_nothing_raised { @conn.proxy = "http://#{encoded_user}:#{encoded_password}@proxy.local:4242" }
164
+ assert_equal user, @conn.send(:new_http).proxy_user
165
+ assert_equal password, @conn.send(:new_http).proxy_pass
166
+
167
+ assert_nothing_raised { @conn.proxy = proxy }
168
+ assert_equal user, @conn.send(:new_http).proxy_user
169
+ assert_equal password, @conn.send(:new_http).proxy_pass
170
+ end
171
+
172
+ def test_timeout_accessor
173
+ @conn.timeout = 5
174
+ assert_equal 5, @conn.timeout
175
+ end
176
+
177
+ def test_get
178
+ matz = decode(@conn.get("/people/1.json"))
179
+ assert_equal "Matz", matz["name"]
180
+ end
181
+
182
+ def test_head
183
+ response = @conn.head("/people/1.json")
184
+ assert response.body.blank?
185
+ assert_equal 200, response.code
186
+ end
187
+
188
+ def test_get_with_header
189
+ david = decode(@conn.get("/people/2.json", @header))
190
+ assert_equal "David", david["name"]
191
+ end
192
+
193
+ def test_get_collection
194
+ people = decode(@conn.get("/people.json"))
195
+ assert_equal "Matz", people[0]["person"]["name"]
196
+ assert_equal "David", people[1]["person"]["name"]
197
+ end
198
+
199
+ def test_get_collection_single
200
+ people = decode(@conn.get("/people_single_elements.json"))
201
+ assert_equal "Matz", people[0]["person"]["name"]
202
+ end
203
+
204
+ def test_get_collection_empty
205
+ people = decode(@conn.get("/people_empty_elements.json"))
206
+ assert_equal [], people
207
+ end
208
+
209
+ def test_post
210
+ response = @conn.post("/people.json")
211
+ assert_equal "/people/5.json", response["Location"]
212
+ end
213
+
214
+ def test_post_with_header
215
+ response = @conn.post("/members.json", @header)
216
+ assert_equal "/people/6.json", response["Location"]
217
+ end
218
+
219
+ def test_put
220
+ response = @conn.put("/people/1.json")
221
+ assert_equal 204, response.code
222
+ end
223
+
224
+ def test_put_with_header
225
+ response = @conn.put("/people/2.json", @header)
226
+ assert_equal 204, response.code
227
+ end
228
+
229
+ def test_delete
230
+ response = @conn.delete("/people/1.json")
231
+ assert_equal 200, response.code
232
+ end
233
+
234
+ def test_delete_with_header
235
+ response = @conn.delete("/people/2.json", @header)
236
+ assert_equal 200, response.code
237
+ end
238
+
239
+ def test_timeout
240
+ @http = mock("new Net::HTTP")
241
+ @conn.expects(:http).returns(@http)
242
+ @http.expects(:get).raises(Timeout::Error, "execution expired")
243
+ assert_raise(ActiveResource::TimeoutError) { @conn.get("/people_timeout.json") }
244
+ end
245
+
246
+ def test_setting_timeout
247
+ http = Net::HTTP.new("")
248
+
249
+ [10, 20].each do |timeout|
250
+ @conn.timeout = timeout
251
+ @conn.send(:configure_http, http)
252
+ assert_equal timeout, http.open_timeout
253
+ assert_equal timeout, http.read_timeout
254
+ end
255
+ end
256
+
257
+ def test_accept_http_header
258
+ @http = mock("new Net::HTTP")
259
+ @conn.expects(:http).returns(@http)
260
+ path = "/people/1.xml"
261
+ @http.expects(:get).with(path, { "Accept" => "application/xhtml+xml" }).returns(ActiveResource::Response.new(@matz, 200, { "Content-Type" => "text/xhtml" }))
262
+ assert_nothing_raised { @conn.get(path, "Accept" => "application/xhtml+xml") }
263
+ end
264
+
265
+ def test_ssl_options_get_applied_to_http
266
+ http = Net::HTTP.new("")
267
+ @conn.site = "https://secure"
268
+ @conn.ssl_options = { verify_mode: OpenSSL::SSL::VERIFY_PEER }
269
+ @conn.send(:configure_http, http)
270
+
271
+ assert http.use_ssl?
272
+ assert_equal http.verify_mode, OpenSSL::SSL::VERIFY_PEER
273
+ end
274
+
275
+ def test_ssl_options_get_applied_to_https_urls_without_explicitly_setting_ssl_options
276
+ http = Net::HTTP.new("")
277
+ @conn.site = "https://secure"
278
+ assert @conn.send(:configure_http, http).use_ssl?
279
+ end
280
+
281
+ def test_ssl_error
282
+ http = Net::HTTP.new("")
283
+ @conn.expects(:http).returns(http)
284
+ http.expects(:get).raises(OpenSSL::SSL::SSLError, "Expired certificate")
285
+ assert_raise(ActiveResource::SSLError) { @conn.get("/people/1.json") }
286
+ end
287
+
288
+ def test_auth_type_can_be_string
289
+ @conn.auth_type = "digest"
290
+ assert_equal(:digest, @conn.auth_type)
291
+ end
292
+
293
+ def test_auth_type_defaults_to_basic
294
+ @conn.auth_type = nil
295
+ assert_equal(:basic, @conn.auth_type)
296
+ end
297
+
298
+ def test_auth_type_ignores_nonsensical_values
299
+ @conn.auth_type = :wibble
300
+ assert_equal(:basic, @conn.auth_type)
301
+ end
302
+
303
+ def test_disable_net_connection_by_default_when_http_mock_is_available
304
+ assert_equal(ActiveResource::HttpMock, @conn.send(:http).class)
305
+ end
306
+
307
+ def test_enable_net_connection
308
+ @conn.send(:http)
309
+ keep_net_connection_status do
310
+ ActiveResource::HttpMock.enable_net_connection!
311
+ assert @conn.send(:http).kind_of?(Net::HTTP)
312
+ end
313
+ end
314
+
315
+ def test_disable_net_connection
316
+ keep_net_connection_status do
317
+ ActiveResource::HttpMock.enable_net_connection!
318
+ @conn.send(:http)
319
+ ActiveResource::HttpMock.disable_net_connection!
320
+ assert @conn.send(:http).kind_of?(ActiveResource::HttpMock)
321
+ end
322
+ end
323
+
324
+ def keep_net_connection_status
325
+ old = ActiveResource::HttpMock.net_connection_enabled?
326
+ begin
327
+ yield
328
+ ensure
329
+ if old
330
+ ActiveResource::HttpMock.enable_net_connection!
331
+ else
332
+ ActiveResource::HttpMock.disable_net_connection!
333
+ end
334
+ end
335
+ end
336
+
337
+ protected
338
+ def assert_response_raises(klass, code)
339
+ assert_raise(klass, "Expected response code #{code} to raise #{klass}") do
340
+ handle_response ResponseCodeStub.new(code)
341
+ end
342
+ end
343
+
344
+ def assert_redirect_raises(code)
345
+ assert_raise(ActiveResource::Redirection, "Expected response code #{code} to raise ActiveResource::Redirection") do
346
+ handle_response RedirectResponseStub.new(code, "http://example.com/")
347
+ end
348
+ end
349
+
350
+ def handle_response(response)
351
+ @conn.__send__(:handle_response, response)
352
+ end
353
+
354
+ def decode(response)
355
+ @conn.format.decode(response.body)
356
+ end
357
+ end