acfs 1.7.0 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (237) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +144 -116
  3. data/README.md +19 -24
  4. data/acfs.gemspec +7 -10
  5. data/lib/acfs/collections/paginatable.rb +11 -11
  6. data/lib/acfs/configuration.rb +1 -1
  7. data/lib/acfs/errors.rb +6 -6
  8. data/lib/acfs/global.rb +2 -2
  9. data/lib/acfs/location.rb +1 -1
  10. data/lib/acfs/resource/attributes/uuid.rb +1 -1
  11. data/lib/acfs/resource/attributes.rb +1 -1
  12. data/lib/acfs/resource/dirty.rb +1 -1
  13. data/lib/acfs/resource/operational.rb +4 -4
  14. data/lib/acfs/resource/query_methods.rb +3 -3
  15. data/lib/acfs/response/status.rb +1 -1
  16. data/lib/acfs/service/middleware.rb +2 -2
  17. data/lib/acfs/singleton_resource.rb +2 -2
  18. data/lib/acfs/stub.rb +1 -1
  19. data/lib/acfs/version.rb +2 -2
  20. data/lib/acfs/yard.rb +1 -0
  21. data/spec/acfs/adapter/typhoeus_spec.rb +3 -3
  22. data/spec/acfs/configuration_spec.rb +1 -1
  23. data/spec/acfs/global_spec.rb +5 -5
  24. data/spec/acfs/location_spec.rb +1 -1
  25. data/spec/acfs/middleware/json_spec.rb +1 -1
  26. data/spec/acfs/middleware/message_pack_spec.rb +1 -1
  27. data/spec/acfs/operation_spec.rb +1 -1
  28. data/spec/acfs/resource/attributes/boolean_spec.rb +31 -31
  29. data/spec/acfs/resource/attributes/date_time_spec.rb +9 -9
  30. data/spec/acfs/resource/attributes/dict_spec.rb +10 -10
  31. data/spec/acfs/resource/attributes/float_spec.rb +11 -11
  32. data/spec/acfs/resource/attributes/integer_spec.rb +6 -6
  33. data/spec/acfs/resource/attributes/list_spec.rb +1 -1
  34. data/spec/acfs/resource/attributes/uuid_spec.rb +8 -8
  35. data/spec/acfs/resource/attributes_spec.rb +8 -8
  36. data/spec/acfs/resource/dirty_spec.rb +1 -1
  37. data/spec/acfs/resource/persistence_spec.rb +7 -7
  38. data/spec/acfs/resource/query_methods_spec.rb +1 -1
  39. data/spec/acfs/runner_spec.rb +12 -12
  40. data/spec/acfs/stub_spec.rb +13 -18
  41. data/spec/acfs_spec.rb +4 -4
  42. data/spec/spec_helper.rb +9 -5
  43. data/spec/support/hash.rb +1 -1
  44. data/vendor/bundle/ruby/3.4.0/bundler/gems/rubocop-config-67802c9d1826/LICENSE +21 -0
  45. data/vendor/bundle/ruby/3.4.0/bundler/gems/rubocop-config-67802c9d1826/README.md +23 -0
  46. data/vendor/bundle/ruby/3.4.0/bundler/gems/rubocop-config-67802c9d1826/rubocop-config.gemspec +31 -0
  47. data/vendor/bundle/ruby/3.4.0/gems/actionpack-8.0.1/CHANGELOG.md +205 -0
  48. data/vendor/bundle/ruby/3.4.0/gems/actionpack-8.0.1/MIT-LICENSE +21 -0
  49. data/vendor/bundle/ruby/3.4.0/gems/actionpack-8.0.1/README.rdoc +57 -0
  50. data/vendor/bundle/ruby/3.4.0/gems/actionview-8.0.1/CHANGELOG.md +67 -0
  51. data/vendor/bundle/ruby/3.4.0/gems/actionview-8.0.1/MIT-LICENSE +21 -0
  52. data/vendor/bundle/ruby/3.4.0/gems/actionview-8.0.1/README.rdoc +40 -0
  53. data/vendor/bundle/ruby/3.4.0/gems/activemodel-8.0.1/CHANGELOG.md +110 -0
  54. data/vendor/bundle/ruby/3.4.0/gems/activemodel-8.0.1/MIT-LICENSE +21 -0
  55. data/vendor/bundle/ruby/3.4.0/gems/activemodel-8.0.1/README.rdoc +266 -0
  56. data/vendor/bundle/ruby/3.4.0/gems/activesupport-8.0.1/CHANGELOG.md +157 -0
  57. data/vendor/bundle/ruby/3.4.0/gems/activesupport-8.0.1/MIT-LICENSE +20 -0
  58. data/vendor/bundle/ruby/3.4.0/gems/activesupport-8.0.1/README.rdoc +40 -0
  59. data/vendor/bundle/ruby/3.4.0/gems/addressable-2.8.7/CHANGELOG.md +301 -0
  60. data/vendor/bundle/ruby/3.4.0/gems/addressable-2.8.7/LICENSE.txt +202 -0
  61. data/vendor/bundle/ruby/3.4.0/gems/addressable-2.8.7/README.md +121 -0
  62. data/vendor/bundle/ruby/3.4.0/gems/addressable-2.8.7/addressable.gemspec +28 -0
  63. data/vendor/bundle/ruby/3.4.0/gems/appraisal-2.5.0/MIT-LICENSE +21 -0
  64. data/vendor/bundle/ruby/3.4.0/gems/appraisal-2.5.0/README.md +243 -0
  65. data/vendor/bundle/ruby/3.4.0/gems/appraisal-2.5.0/appraisal.gemspec +29 -0
  66. data/vendor/bundle/ruby/3.4.0/gems/base64-0.2.0/LICENSE.txt +22 -0
  67. data/vendor/bundle/ruby/3.4.0/gems/base64-0.2.0/README.md +48 -0
  68. data/vendor/bundle/ruby/3.4.0/gems/benchmark-0.4.0/README.md +138 -0
  69. data/vendor/bundle/ruby/3.4.0/gems/benchmark-0.4.0/benchmark.gemspec +32 -0
  70. data/vendor/bundle/ruby/3.4.0/gems/bigdecimal-3.1.9/LICENSE +56 -0
  71. data/vendor/bundle/ruby/3.4.0/gems/bigdecimal-3.1.9/bigdecimal.gemspec +57 -0
  72. data/vendor/bundle/ruby/3.4.0/gems/builder-3.3.0/MIT-LICENSE +20 -0
  73. data/vendor/bundle/ruby/3.4.0/gems/builder-3.3.0/README.md +258 -0
  74. data/vendor/bundle/ruby/3.4.0/gems/builder-3.3.0/builder.gemspec +49 -0
  75. data/vendor/bundle/ruby/3.4.0/gems/concurrent-ruby-1.3.5/CHANGELOG.md +603 -0
  76. data/vendor/bundle/ruby/3.4.0/gems/concurrent-ruby-1.3.5/LICENSE.txt +21 -0
  77. data/vendor/bundle/ruby/3.4.0/gems/concurrent-ruby-1.3.5/README.md +407 -0
  78. data/vendor/bundle/ruby/3.4.0/gems/connection_pool-2.5.0/LICENSE +20 -0
  79. data/vendor/bundle/ruby/3.4.0/gems/connection_pool-2.5.0/README.md +167 -0
  80. data/vendor/bundle/ruby/3.4.0/gems/connection_pool-2.5.0/connection_pool.gemspec +24 -0
  81. data/vendor/bundle/ruby/3.4.0/gems/crack-1.0.0/LICENSE +20 -0
  82. data/vendor/bundle/ruby/3.4.0/gems/crack-1.0.0/README.md +43 -0
  83. data/vendor/bundle/ruby/3.4.0/gems/crass-1.0.6/LICENSE +18 -0
  84. data/vendor/bundle/ruby/3.4.0/gems/crass-1.0.6/README.md +192 -0
  85. data/vendor/bundle/ruby/3.4.0/gems/crass-1.0.6/crass.gemspec +31 -0
  86. data/vendor/bundle/ruby/3.4.0/gems/diff-lcs-1.5.1/License.md +41 -0
  87. data/vendor/bundle/ruby/3.4.0/gems/diff-lcs-1.5.1/README.rdoc +84 -0
  88. data/vendor/bundle/ruby/3.4.0/gems/drb-2.2.1/LICENSE.txt +22 -0
  89. data/vendor/bundle/ruby/3.4.0/gems/drb-2.2.1/drb.gemspec +41 -0
  90. data/vendor/bundle/ruby/3.4.0/gems/erubi-1.13.1/CHANGELOG +111 -0
  91. data/vendor/bundle/ruby/3.4.0/gems/erubi-1.13.1/MIT-LICENSE +21 -0
  92. data/vendor/bundle/ruby/3.4.0/gems/erubi-1.13.1/README.rdoc +151 -0
  93. data/vendor/bundle/ruby/3.4.0/gems/ethon-0.16.0/CHANGELOG.md +375 -0
  94. data/vendor/bundle/ruby/3.4.0/gems/ethon-0.16.0/LICENSE +20 -0
  95. data/vendor/bundle/ruby/3.4.0/gems/ethon-0.16.0/README.md +118 -0
  96. data/vendor/bundle/ruby/3.4.0/gems/ethon-0.16.0/ethon.gemspec +26 -0
  97. data/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.1-x86_64-linux-gnu/CHANGELOG.md +465 -0
  98. data/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.1-x86_64-linux-gnu/LICENSE +24 -0
  99. data/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.1-x86_64-linux-gnu/LICENSE.SPECS +22 -0
  100. data/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.1-x86_64-linux-gnu/README.md +137 -0
  101. data/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.1-x86_64-linux-gnu/ffi.gemspec +42 -0
  102. data/vendor/bundle/ruby/3.4.0/gems/hashdiff-1.1.2/LICENSE +19 -0
  103. data/vendor/bundle/ruby/3.4.0/gems/hashdiff-1.1.2/README.md +298 -0
  104. data/vendor/bundle/ruby/3.4.0/gems/hashdiff-1.1.2/changelog.md +119 -0
  105. data/vendor/bundle/ruby/3.4.0/gems/hashdiff-1.1.2/hashdiff.gemspec +39 -0
  106. data/vendor/bundle/ruby/3.4.0/gems/i18n-1.14.6/MIT-LICENSE +20 -0
  107. data/vendor/bundle/ruby/3.4.0/gems/i18n-1.14.6/README.md +127 -0
  108. data/vendor/bundle/ruby/3.4.0/gems/json-2.9.1/README.md +195 -0
  109. data/vendor/bundle/ruby/3.4.0/gems/json-2.9.1/json.gemspec +64 -0
  110. data/vendor/bundle/ruby/3.4.0/gems/logger-1.6.5/README.md +104 -0
  111. data/vendor/bundle/ruby/3.4.0/gems/logger-1.6.5/logger.gemspec +28 -0
  112. data/vendor/bundle/ruby/3.4.0/gems/loofah-2.24.0/CHANGELOG.md +591 -0
  113. data/vendor/bundle/ruby/3.4.0/gems/loofah-2.24.0/MIT-LICENSE.txt +23 -0
  114. data/vendor/bundle/ruby/3.4.0/gems/loofah-2.24.0/README.md +410 -0
  115. data/vendor/bundle/ruby/3.4.0/gems/minitest-5.25.4/README.rdoc +835 -0
  116. data/vendor/bundle/ruby/3.4.0/gems/multi_json-1.15.0/CHANGELOG.md +275 -0
  117. data/vendor/bundle/ruby/3.4.0/gems/multi_json-1.15.0/LICENSE.md +20 -0
  118. data/vendor/bundle/ruby/3.4.0/gems/multi_json-1.15.0/README.md +121 -0
  119. data/vendor/bundle/ruby/3.4.0/gems/nokogiri-1.18.1-x86_64-linux-gnu/LICENSE-DEPENDENCIES.md +2224 -0
  120. data/vendor/bundle/ruby/3.4.0/gems/nokogiri-1.18.1-x86_64-linux-gnu/LICENSE.md +9 -0
  121. data/vendor/bundle/ruby/3.4.0/gems/nokogiri-1.18.1-x86_64-linux-gnu/README.md +293 -0
  122. data/vendor/bundle/ruby/3.4.0/gems/public_suffix-6.0.1/CHANGELOG.md +491 -0
  123. data/vendor/bundle/ruby/3.4.0/gems/public_suffix-6.0.1/LICENSE.txt +22 -0
  124. data/vendor/bundle/ruby/3.4.0/gems/public_suffix-6.0.1/README.md +222 -0
  125. data/vendor/bundle/ruby/3.4.0/gems/racc-1.8.1/ChangeLog +846 -0
  126. data/vendor/bundle/ruby/3.4.0/gems/racc-1.8.1/README.ja.rdoc +58 -0
  127. data/vendor/bundle/ruby/3.4.0/gems/racc-1.8.1/README.rdoc +60 -0
  128. data/vendor/bundle/ruby/3.4.0/gems/rack-3.1.8/CHANGELOG.md +998 -0
  129. data/vendor/bundle/ruby/3.4.0/gems/rack-3.1.8/MIT-LICENSE +20 -0
  130. data/vendor/bundle/ruby/3.4.0/gems/rack-3.1.8/README.md +328 -0
  131. data/vendor/bundle/ruby/3.4.0/gems/rack-session-2.1.0/license.md +72 -0
  132. data/vendor/bundle/ruby/3.4.0/gems/rack-session-2.1.0/readme.md +47 -0
  133. data/vendor/bundle/ruby/3.4.0/gems/rack-test-2.2.0/MIT-LICENSE.txt +20 -0
  134. data/vendor/bundle/ruby/3.4.0/gems/rack-test-2.2.0/README.md +139 -0
  135. data/vendor/bundle/ruby/3.4.0/gems/rails-dom-testing-2.2.0/MIT-LICENSE +23 -0
  136. data/vendor/bundle/ruby/3.4.0/gems/rails-dom-testing-2.2.0/README.md +91 -0
  137. data/vendor/bundle/ruby/3.4.0/gems/rails-html-sanitizer-1.6.2/CHANGELOG.md +255 -0
  138. data/vendor/bundle/ruby/3.4.0/gems/rails-html-sanitizer-1.6.2/MIT-LICENSE +23 -0
  139. data/vendor/bundle/ruby/3.4.0/gems/rails-html-sanitizer-1.6.2/README.md +267 -0
  140. data/vendor/bundle/ruby/3.4.0/gems/rake-13.2.1/MIT-LICENSE +21 -0
  141. data/vendor/bundle/ruby/3.4.0/gems/rake-13.2.1/README.rdoc +155 -0
  142. data/vendor/bundle/ruby/3.4.0/gems/rake-13.2.1/rake.gemspec +101 -0
  143. data/vendor/bundle/ruby/3.4.0/gems/rake-release-1.3.0/LICENSE +21 -0
  144. data/vendor/bundle/ruby/3.4.0/gems/rake-release-1.3.0/README.md +107 -0
  145. data/vendor/bundle/ruby/3.4.0/gems/rake-release-1.3.0/rake-release.gemspec +23 -0
  146. data/vendor/bundle/ruby/3.4.0/gems/rexml-3.4.0/LICENSE.txt +22 -0
  147. data/vendor/bundle/ruby/3.4.0/gems/rexml-3.4.0/README.md +57 -0
  148. data/vendor/bundle/ruby/3.4.0/gems/rspec-3.13.0/LICENSE.md +27 -0
  149. data/vendor/bundle/ruby/3.4.0/gems/rspec-3.13.0/README.md +47 -0
  150. data/vendor/bundle/ruby/3.4.0/gems/rspec-collection_matchers-1.2.1/Changelog.md +68 -0
  151. data/vendor/bundle/ruby/3.4.0/gems/rspec-collection_matchers-1.2.1/LICENSE.txt +27 -0
  152. data/vendor/bundle/ruby/3.4.0/gems/rspec-collection_matchers-1.2.1/README.md +76 -0
  153. data/vendor/bundle/ruby/3.4.0/gems/rspec-collection_matchers-1.2.1/rspec-collection_matchers.gemspec +33 -0
  154. data/vendor/bundle/ruby/3.4.0/gems/rspec-core-3.13.2/Changelog.md +2415 -0
  155. data/vendor/bundle/ruby/3.4.0/gems/rspec-core-3.13.2/LICENSE.md +26 -0
  156. data/vendor/bundle/ruby/3.4.0/gems/rspec-core-3.13.2/README.md +389 -0
  157. data/vendor/bundle/ruby/3.4.0/gems/rspec-expectations-3.13.3/Changelog.md +1352 -0
  158. data/vendor/bundle/ruby/3.4.0/gems/rspec-expectations-3.13.3/LICENSE.md +25 -0
  159. data/vendor/bundle/ruby/3.4.0/gems/rspec-expectations-3.13.3/README.md +326 -0
  160. data/vendor/bundle/ruby/3.4.0/gems/rspec-its-2.0.0/Changelog.md +73 -0
  161. data/vendor/bundle/ruby/3.4.0/gems/rspec-its-2.0.0/LICENSE.txt +27 -0
  162. data/vendor/bundle/ruby/3.4.0/gems/rspec-its-2.0.0/README.md +104 -0
  163. data/vendor/bundle/ruby/3.4.0/gems/rspec-its-2.0.0/rspec-its.gemspec +31 -0
  164. data/vendor/bundle/ruby/3.4.0/gems/rspec-mocks-3.13.2/Changelog.md +1299 -0
  165. data/vendor/bundle/ruby/3.4.0/gems/rspec-mocks-3.13.2/LICENSE.md +25 -0
  166. data/vendor/bundle/ruby/3.4.0/gems/rspec-mocks-3.13.2/README.md +465 -0
  167. data/vendor/bundle/ruby/3.4.0/gems/rspec-support-3.13.2/Changelog.md +408 -0
  168. data/vendor/bundle/ruby/3.4.0/gems/rspec-support-3.13.2/LICENSE.md +23 -0
  169. data/vendor/bundle/ruby/3.4.0/gems/rspec-support-3.13.2/README.md +40 -0
  170. data/vendor/bundle/ruby/3.4.0/gems/securerandom-0.4.1/README.md +72 -0
  171. data/vendor/bundle/ruby/3.4.0/gems/thor-1.3.2/LICENSE.md +20 -0
  172. data/vendor/bundle/ruby/3.4.0/gems/thor-1.3.2/README.md +45 -0
  173. data/vendor/bundle/ruby/3.4.0/gems/thor-1.3.2/thor.gemspec +33 -0
  174. data/vendor/bundle/ruby/3.4.0/gems/typhoeus-1.4.1/CHANGELOG.md +410 -0
  175. data/vendor/bundle/ruby/3.4.0/gems/typhoeus-1.4.1/LICENSE +22 -0
  176. data/vendor/bundle/ruby/3.4.0/gems/typhoeus-1.4.1/README.md +588 -0
  177. data/vendor/bundle/ruby/3.4.0/gems/typhoeus-1.4.1/typhoeus.gemspec +25 -0
  178. data/vendor/bundle/ruby/3.4.0/gems/tzinfo-2.0.6/LICENSE +19 -0
  179. data/vendor/bundle/ruby/3.4.0/gems/tzinfo-2.0.6/README.md +406 -0
  180. data/vendor/bundle/ruby/3.4.0/gems/uri-1.0.2/README.md +55 -0
  181. data/vendor/bundle/ruby/3.4.0/gems/useragent-0.16.11/LICENSE +20 -0
  182. data/vendor/bundle/ruby/3.4.0/gems/useragent-0.16.11/README.md +42 -0
  183. data/vendor/bundle/ruby/3.4.0/gems/webmock-3.24.0/CHANGELOG.md +2104 -0
  184. data/vendor/bundle/ruby/3.4.0/gems/webmock-3.24.0/LICENSE +20 -0
  185. data/vendor/bundle/ruby/3.4.0/gems/webmock-3.24.0/README.md +1222 -0
  186. data/vendor/bundle/ruby/3.4.0/specifications/actionpack-8.0.1.gemspec +36 -0
  187. data/vendor/bundle/ruby/3.4.0/specifications/actionview-8.0.1.gemspec +33 -0
  188. data/vendor/bundle/ruby/3.4.0/specifications/activemodel-8.0.1.gemspec +26 -0
  189. data/vendor/bundle/ruby/3.4.0/specifications/activesupport-8.0.1.gemspec +38 -0
  190. data/vendor/bundle/ruby/3.4.0/specifications/addressable-2.8.7.gemspec +30 -0
  191. data/vendor/bundle/ruby/3.4.0/specifications/appraisal-2.5.0.gemspec +31 -0
  192. data/vendor/bundle/ruby/3.4.0/specifications/base64-0.2.0.gemspec +23 -0
  193. data/vendor/bundle/ruby/3.4.0/specifications/benchmark-0.4.0.gemspec +23 -0
  194. data/vendor/bundle/ruby/3.4.0/specifications/bigdecimal-3.1.9.gemspec +25 -0
  195. data/vendor/bundle/ruby/3.4.0/specifications/builder-3.3.0.gemspec +22 -0
  196. data/vendor/bundle/ruby/3.4.0/specifications/concurrent-ruby-1.3.5.gemspec +24 -0
  197. data/vendor/bundle/ruby/3.4.0/specifications/connection_pool-2.5.0.gemspec +28 -0
  198. data/vendor/bundle/ruby/3.4.0/specifications/crack-1.0.0.gemspec +27 -0
  199. data/vendor/bundle/ruby/3.4.0/specifications/crass-1.0.6.gemspec +27 -0
  200. data/vendor/bundle/ruby/3.4.0/specifications/diff-lcs-1.5.1.gemspec +37 -0
  201. data/vendor/bundle/ruby/3.4.0/specifications/drb-2.2.1.gemspec +22 -0
  202. data/vendor/bundle/ruby/3.4.0/specifications/erubi-1.13.1.gemspec +29 -0
  203. data/vendor/bundle/ruby/3.4.0/specifications/ethon-0.16.0.gemspec +24 -0
  204. data/vendor/bundle/ruby/3.4.0/specifications/ffi-1.17.1-x86_64-linux-gnu.gemspec +31 -0
  205. data/vendor/bundle/ruby/3.4.0/specifications/hashdiff-1.1.2.gemspec +30 -0
  206. data/vendor/bundle/ruby/3.4.0/specifications/i18n-1.14.6.gemspec +27 -0
  207. data/vendor/bundle/ruby/3.4.0/specifications/json-2.9.1.gemspec +0 -0
  208. data/vendor/bundle/ruby/3.4.0/specifications/logger-1.6.5.gemspec +22 -0
  209. data/vendor/bundle/ruby/3.4.0/specifications/loofah-2.24.0.gemspec +27 -0
  210. data/vendor/bundle/ruby/3.4.0/specifications/minitest-5.25.4.gemspec +31 -0
  211. data/vendor/bundle/ruby/3.4.0/specifications/multi_json-1.15.0.gemspec +26 -0
  212. data/vendor/bundle/ruby/3.4.0/specifications/nokogiri-1.18.1-x86_64-linux-gnu.gemspec +31 -0
  213. data/vendor/bundle/ruby/3.4.0/specifications/public_suffix-6.0.1.gemspec +24 -0
  214. data/vendor/bundle/ruby/3.4.0/specifications/racc-1.8.1.gemspec +28 -0
  215. data/vendor/bundle/ruby/3.4.0/specifications/rack-3.1.8.gemspec +31 -0
  216. data/vendor/bundle/ruby/3.4.0/specifications/rack-session-2.1.0.gemspec +30 -0
  217. data/vendor/bundle/ruby/3.4.0/specifications/rack-test-2.2.0.gemspec +29 -0
  218. data/vendor/bundle/ruby/3.4.0/specifications/rails-dom-testing-2.2.0.gemspec +28 -0
  219. data/vendor/bundle/ruby/3.4.0/specifications/rails-html-sanitizer-1.6.2.gemspec +27 -0
  220. data/vendor/bundle/ruby/3.4.0/specifications/rake-13.2.1.gemspec +26 -0
  221. data/vendor/bundle/ruby/3.4.0/specifications/rake-release-1.3.0.gemspec +26 -0
  222. data/vendor/bundle/ruby/3.4.0/specifications/rexml-3.4.0.gemspec +25 -0
  223. data/vendor/bundle/ruby/3.4.0/specifications/rspec-3.13.0.gemspec +31 -0
  224. data/vendor/bundle/ruby/3.4.0/specifications/rspec-collection_matchers-1.2.1.gemspec +27 -0
  225. data/vendor/bundle/ruby/3.4.0/specifications/rspec-core-3.13.2.gemspec +39 -0
  226. data/vendor/bundle/ruby/3.4.0/specifications/rspec-expectations-3.13.3.gemspec +33 -0
  227. data/vendor/bundle/ruby/3.4.0/specifications/rspec-its-2.0.0.gemspec +27 -0
  228. data/vendor/bundle/ruby/3.4.0/specifications/rspec-mocks-3.13.2.gemspec +33 -0
  229. data/vendor/bundle/ruby/3.4.0/specifications/rspec-support-3.13.2.gemspec +29 -0
  230. data/vendor/bundle/ruby/3.4.0/specifications/securerandom-0.4.1.gemspec +23 -0
  231. data/vendor/bundle/ruby/3.4.0/specifications/thor-1.3.2.gemspec +28 -0
  232. data/vendor/bundle/ruby/3.4.0/specifications/typhoeus-1.4.1.gemspec +24 -0
  233. data/vendor/bundle/ruby/3.4.0/specifications/tzinfo-2.0.6.gemspec +30 -0
  234. data/vendor/bundle/ruby/3.4.0/specifications/uri-1.0.2.gemspec +23 -0
  235. data/vendor/bundle/ruby/3.4.0/specifications/useragent-0.16.11.gemspec +25 -0
  236. data/vendor/bundle/ruby/3.4.0/specifications/webmock-3.24.0.gemspec +45 -0
  237. metadata +204 -67
@@ -0,0 +1,410 @@
1
+ # Loofah
2
+
3
+ * https://github.com/flavorjones/loofah
4
+ * Docs: http://rubydoc.info/github/flavorjones/loofah/main/frames
5
+ * Mailing list: [loofah-talk@googlegroups.com](https://groups.google.com/forum/#!forum/loofah-talk)
6
+
7
+ ## Status
8
+
9
+ [![ci](https://github.com/flavorjones/loofah/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/flavorjones/loofah/actions/workflows/ci.yml)
10
+ [![Tidelift dependencies](https://tidelift.com/badges/package/rubygems/loofah)](https://tidelift.com/subscription/pkg/rubygems-loofah?utm_source=rubygems-loofah&utm_medium=referral&utm_campaign=readme)
11
+
12
+
13
+ ## Description
14
+
15
+ Loofah is a general library for manipulating and transforming HTML/XML documents and fragments, built on top of Nokogiri.
16
+
17
+ Loofah also includes some HTML sanitizers based on `html5lib`'s safelist, which are a specific application of the general transformation functionality.
18
+
19
+ Active Record extensions for HTML sanitization are available in the [`loofah-activerecord` gem](https://github.com/flavorjones/loofah-activerecord).
20
+
21
+
22
+ ## Features
23
+
24
+ * Easily write custom transformations for HTML and XML
25
+ * Common HTML sanitizing transformations are built-in:
26
+ * _Strip_ unsafe tags, leaving behind only the inner text.
27
+ * _Prune_ unsafe tags and their subtrees, removing all traces that they ever existed.
28
+ * _Escape_ unsafe tags and their subtrees, leaving behind lots of <tt>&lt;</tt> and <tt>&gt;</tt> entities.
29
+ * _Whitewash_ the markup, removing all attributes and namespaced nodes.
30
+ * Other common HTML transformations are built-in:
31
+ * Add the _nofollow_ attribute to all hyperlinks.
32
+ * Add the _target=\_blank_ attribute to all hyperlinks.
33
+ * Remove _unprintable_ characters from text nodes.
34
+ * Some specialized HTML transformations are also built-in:
35
+ * Where `<br><br>` exists inside a `p` tag, close the `p` and open a new one.
36
+ * Format markup as plain text, with (or without) sensible whitespace handling around block elements.
37
+ * Replace Rails's `strip_tags` and `sanitize` view helper methods.
38
+
39
+
40
+ ## Compare and Contrast
41
+
42
+ Loofah is both:
43
+
44
+ - a general framework for transforming XML, XHTML, and HTML documents
45
+ - a specific toolkit for HTML sanitization
46
+
47
+ ### General document transformation
48
+
49
+ Loofah tries to make it easy to write your own custom scrubbers for whatever document transformation you need. You don't like the built-in scrubbers? Build your own, like a boss.
50
+
51
+
52
+ ### HTML sanitization
53
+
54
+ Another Ruby library that provides HTML sanitization is [`rgrove/sanitize`](https://github.com/rgrove/sanitize), another library built on top of Nokogiri, which provides a bit more flexibility on the tags and attributes being scrubbed.
55
+
56
+ You may also want to look at [`rails/rails-html-sanitizer`](https://github.com/rails/rails-html-sanitizer) which is built on top of Loofah and provides some useful extensions and additional flexibility in the HTML sanitization.
57
+
58
+
59
+ ## The Basics
60
+
61
+ Loofah wraps [Nokogiri](http://nokogiri.org) in a loving embrace. Nokogiri is a stable, well-maintained parser for XML, HTML4, and HTML5.
62
+
63
+ Loofah implements the following classes:
64
+
65
+ * `Loofah::HTML5::Document`
66
+ * `Loofah::HTML5::DocumentFragment`
67
+ * `Loofah::HTML4::Document` (aliased as `Loofah::HTML::Document` for now)
68
+ * `Loofah::HTML4::DocumentFragment` (aliased as `Loofah::HTML::DocumentFragment` for now)
69
+ * `Loofah::XML::Document`
70
+ * `Loofah::XML::DocumentFragment`
71
+
72
+ These document and fragment classes are subclasses of the similarly-named Nokogiri classes `Nokogiri::HTML5::Document` et al.
73
+
74
+ Loofah also implements `Loofah::Scrubber`, which represents the document transformation, either by wrapping
75
+ a block,
76
+
77
+ ``` ruby
78
+ span2div = Loofah::Scrubber.new do |node|
79
+ node.name = "div" if node.name == "span"
80
+ end
81
+ ```
82
+
83
+ or by implementing a method.
84
+
85
+
86
+ ### Side Note: Fragments vs Documents
87
+
88
+ Generally speaking, unless you expect to have a DOCTYPE and a single root node, you don't have a *document*, you have a *fragment*. For HTML, another rule of thumb is that *documents* have `html` and `body` tags, and *fragments* usually do not.
89
+
90
+ **HTML fragments** should be parsed with `Loofah.html5_fragment` or `Loofah.html4_fragment`. The result won't be wrapped in `html` or `body` tags, won't have a DOCTYPE declaration, `head` elements will be silently ignored, and multiple root nodes are allowed.
91
+
92
+ **HTML documents** should be parsed with `Loofah.html5_document` or `Loofah.html4_document`. The result will have a DOCTYPE declaration, along with `html`, `head` and `body` tags.
93
+
94
+ **XML fragments** should be parsed with `Loofah.xml_fragment`. The result won't have a DOCTYPE declaration, and multiple root nodes are allowed.
95
+
96
+ **XML documents** should be parsed with `Loofah.xml_document`. The result will have a DOCTYPE declaration and a single root node.
97
+
98
+
99
+ ### Side Note: HTML4 vs HTML5
100
+
101
+ ⚠ _HTML5 functionality is not available on JRuby, or with versions of Nokogiri `< 1.14.0`._
102
+
103
+ Currently, Loofah's methods `Loofah.document` and `Loofah.fragment` are aliases to `.html4_document` and `.html4_fragment`, which use Nokogiri's HTML4 parser. (Similarly, `Loofah::HTML::Document` and `Loofah::HTML::DocumentFragment` are aliased to `Loofah::HTML4::Document` and `Loofah::HTML4::DocumentFragment`.)
104
+
105
+ **Please note** that in a future version of Loofah, these methods and classes may switch to using Nokogiri's HTML5 parser and classes on platforms that support it [1].
106
+
107
+ **We strongly recommend that you explicitly use `.html5_document` or `.html5_fragment`** unless you know of a compelling reason not to. If you are sure that you need to use the HTML4 parser, you should explicitly call `.html4_document` or `.html4_fragment` to avoid breakage in a future version.
108
+
109
+ [1]: [[feature request] HTML5 parser for JRuby implementation · Issue #2227 · sparklemotion/nokogiri](https://github.com/sparklemotion/nokogiri/issues/2227)
110
+
111
+
112
+ ### `Loofah::HTML5::Document` and `Loofah::HTML5::DocumentFragment`
113
+
114
+ These classes are subclasses of `Nokogiri::HTML5::Document` and `Nokogiri::HTML5::DocumentFragment`.
115
+
116
+ The module methods `Loofah.html5_document` and `Loofah.html5_fragment` will parse either an HTML document and an HTML fragment, respectively.
117
+
118
+ ``` ruby
119
+ Loofah.html5_document(unsafe_html).is_a?(Nokogiri::HTML5::Document) # => true
120
+ Loofah.html5_fragment(unsafe_html).is_a?(Nokogiri::HTML5::DocumentFragment) # => true
121
+ ```
122
+
123
+ Loofah injects a `scrub!` method, which takes either a symbol (for built-in scrubbers) or a `Loofah::Scrubber` object (for custom scrubbers), and modifies the document in-place.
124
+
125
+ Loofah overrides `to_s` to return HTML:
126
+
127
+ ``` ruby
128
+ unsafe_html = "ohai! <div>div is safe</div> <script>but script is not</script>"
129
+
130
+ doc = Loofah.html5_fragment(unsafe_html).scrub!(:prune)
131
+ doc.to_s # => "ohai! <div>div is safe</div> "
132
+ ```
133
+
134
+ and `text` to return plain text:
135
+
136
+ ``` ruby
137
+ doc.text # => "ohai! div is safe "
138
+ ```
139
+
140
+ Also, `to_text` is available, which does the right thing with whitespace around block-level and line break elements.
141
+
142
+ ``` ruby
143
+ doc = Loofah.html5_fragment("<h1>Title</h1><div>Content<br>Next line</div>")
144
+ doc.text # => "TitleContentNext line" # probably not what you want
145
+ doc.to_text # => "\nTitle\n\nContent\nNext line\n" # better
146
+ ```
147
+
148
+ ### `Loofah::HTML4::Document` and `Loofah::HTML4::DocumentFragment`
149
+
150
+ These classes are subclasses of `Nokogiri::HTML4::Document` and `Nokogiri::HTML4::DocumentFragment`.
151
+
152
+ The module methods `Loofah.html4_document` and `Loofah.html4_fragment` will parse either an HTML document and an HTML fragment, respectively.
153
+
154
+ ``` ruby
155
+ Loofah.html4_document(unsafe_html).is_a?(Nokogiri::HTML4::Document) # => true
156
+ Loofah.html4_fragment(unsafe_html).is_a?(Nokogiri::HTML4::DocumentFragment) # => true
157
+ ```
158
+
159
+ ### `Loofah::XML::Document` and `Loofah::XML::DocumentFragment`
160
+
161
+ These classes are subclasses of `Nokogiri::XML::Document` and `Nokogiri::XML::DocumentFragment`.
162
+
163
+ The module methods `Loofah.xml_document` and `Loofah.xml_fragment` will parse an XML document and an XML fragment, respectively.
164
+
165
+ ``` ruby
166
+ Loofah.xml_document(bad_xml).is_a?(Nokogiri::XML::Document) # => true
167
+ Loofah.xml_fragment(bad_xml).is_a?(Nokogiri::XML::DocumentFragment) # => true
168
+ ```
169
+
170
+ ### Nodes and Node Sets
171
+
172
+ Nokogiri's `Node` and `NodeSet` classes also get a `scrub!` method, which makes it easy to scrub subtrees.
173
+
174
+ The following code will apply the `employee_scrubber` only to the `employee` nodes (and their subtrees) in the document:
175
+
176
+ ``` ruby
177
+ Loofah.xml_document(bad_xml).xpath("//employee").scrub!(employee_scrubber)
178
+ ```
179
+
180
+ And this code will only scrub the first `employee` node and its subtree:
181
+
182
+ ``` ruby
183
+ Loofah.xml_document(bad_xml).at_xpath("//employee").scrub!(employee_scrubber)
184
+ ```
185
+
186
+ ### `Loofah::Scrubber`
187
+
188
+ A Scrubber wraps up a block (or method) that is run on a document node:
189
+
190
+ ``` ruby
191
+ # change all <span> tags to <div> tags
192
+ span2div = Loofah::Scrubber.new do |node|
193
+ node.name = "div" if node.name == "span"
194
+ end
195
+ ```
196
+
197
+ This can then be run on a document:
198
+
199
+ ``` ruby
200
+ Loofah.html5_fragment("<span>foo</span><p>bar</p>").scrub!(span2div).to_s
201
+ # => "<div>foo</div><p>bar</p>"
202
+ ```
203
+
204
+ Scrubbers can be run on a document in either a top-down traversal (the default) or bottom-up. Top-down scrubbers can optionally return `Scrubber::STOP` to terminate the traversal of a subtree. Read below and in the `Loofah::Scrubber` class for more detailed usage.
205
+
206
+ Here's an XML example:
207
+
208
+ ``` ruby
209
+ # remove all <employee> tags that have a "deceased" attribute set to true
210
+ bring_out_your_dead = Loofah::Scrubber.new do |node|
211
+ if node.name == "employee" and node["deceased"] == "true"
212
+ node.remove
213
+ Loofah::Scrubber::STOP # don't bother with the rest of the subtree
214
+ end
215
+ end
216
+ Loofah.xml_document(File.read('plague.xml')).scrub!(bring_out_your_dead)
217
+ ```
218
+
219
+ ### Built-In HTML Scrubbers
220
+
221
+ Loofah comes with a set of sanitizing scrubbers that use `html5lib`'s safelist algorithm:
222
+
223
+ ``` ruby
224
+ doc = Loofah.html5_document(input)
225
+ doc.scrub!(:strip) # replaces unknown/unsafe tags with their inner text
226
+ doc.scrub!(:prune) # removes unknown/unsafe tags and their children
227
+ doc.scrub!(:escape) # escapes unknown/unsafe tags, like this: &lt;script&gt;
228
+ doc.scrub!(:whitewash) # removes unknown/unsafe/namespaced tags and their children,
229
+ # and strips all node attributes
230
+ ```
231
+
232
+ Loofah also comes with built-in scrubers for some common transformation tasks:
233
+
234
+ ``` ruby
235
+ doc.scrub!(:nofollow) # adds rel="nofollow" attribute to links
236
+ doc.scrub!(:noopener) # adds rel="noopener" attribute to links
237
+ doc.scrub!(:noreferrer) # adds rel="noreferrer" attribute to links
238
+ doc.scrub!(:unprintable) # removes unprintable characters from text nodes
239
+ doc.scrub!(:targetblank) # adds target="_blank" attribute to links
240
+ doc.scrub!(:double_breakpoint) # where `<br><br>` appears in a `p` tag, close the `p` and open a new one
241
+ ```
242
+
243
+ See `Loofah::Scrubbers` for more details and example usage.
244
+
245
+
246
+ ### Chaining Scrubbers
247
+
248
+ You can chain scrubbers:
249
+
250
+ ``` ruby
251
+ Loofah.html5_fragment("<span>hello</span> <script>alert('OHAI')</script>") \
252
+ .scrub!(:prune) \
253
+ .scrub!(span2div).to_s
254
+ # => "<div>hello</div> "
255
+ ```
256
+
257
+ ### Shorthand
258
+
259
+ The class methods `Loofah.scrub_html5_fragment` and `Loofah.scrub_html5_document` (and the corresponding HTML4 methods) are shorthand.
260
+
261
+ These methods:
262
+
263
+ ``` ruby
264
+ Loofah.scrub_html5_fragment(unsafe_html, :prune)
265
+ Loofah.scrub_html5_document(unsafe_html, :prune)
266
+ Loofah.scrub_html4_fragment(unsafe_html, :prune)
267
+ Loofah.scrub_html4_document(unsafe_html, :prune)
268
+ Loofah.scrub_xml_fragment(bad_xml, custom_scrubber)
269
+ Loofah.scrub_xml_document(bad_xml, custom_scrubber)
270
+ ```
271
+
272
+ do the same thing as (and arguably semantically clearer than):
273
+
274
+ ``` ruby
275
+ Loofah.html5_fragment(unsafe_html).scrub!(:prune)
276
+ Loofah.html5_document(unsafe_html).scrub!(:prune)
277
+ Loofah.html4_fragment(unsafe_html).scrub!(:prune)
278
+ Loofah.html4_document(unsafe_html).scrub!(:prune)
279
+ Loofah.xml_fragment(bad_xml).scrub!(custom_scrubber)
280
+ Loofah.xml_document(bad_xml).scrub!(custom_scrubber)
281
+ ```
282
+
283
+
284
+ ### View Helpers
285
+
286
+ Loofah has two "view helpers": `Loofah::Helpers.sanitize` and `Loofah::Helpers.strip_tags`, both of which are drop-in replacements for the Rails Action View helpers of the same name.
287
+
288
+ These are not required automatically. You must require `loofah/helpers` to use them.
289
+
290
+
291
+ ## Requirements
292
+
293
+ * Nokogiri >= 1.5.9
294
+
295
+
296
+ ## Installation
297
+
298
+ Unsurprisingly:
299
+
300
+ > gem install loofah
301
+
302
+ Requirements:
303
+
304
+ * Ruby >= 2.5
305
+
306
+
307
+ ## Support
308
+
309
+ The bug tracker is available here:
310
+
311
+ * https://github.com/flavorjones/loofah/issues
312
+
313
+ And the mailing list is on Google Groups:
314
+
315
+ * Mail: loofah-talk@googlegroups.com
316
+ * Archive: https://groups.google.com/forum/#!forum/loofah-talk
317
+
318
+ Consider subscribing to [Tidelift][tidelift] which provides license assurances and timely security notifications for your open source dependencies, including Loofah. [Tidelift][tidelift] subscriptions also help the Loofah maintainers fund our [automated testing](https://ci.nokogiri.org) which in turn allows us to ship releases, bugfixes, and security updates more often.
319
+
320
+ [tidelift]: https://tidelift.com/subscription/pkg/rubygems-loofah?utm_source=undefined&utm_medium=referral&utm_campaign=enterprise
321
+
322
+
323
+ ## Security
324
+
325
+ See [`SECURITY.md`](SECURITY.md) for vulnerability reporting details.
326
+
327
+
328
+ ## Related Links
329
+
330
+ * loofah-activerecord: https://github.com/flavorjones/loofah-activerecord
331
+ * Nokogiri: http://nokogiri.org
332
+ * libxml2: http://xmlsoft.org
333
+ * html5lib: https://github.com/html5lib/
334
+
335
+
336
+ ## Authors
337
+
338
+ * [Mike Dalessio](http://mike.daless.io) ([@flavorjones](https://twitter.com/flavorjones))
339
+ * Bryan Helmkamp
340
+
341
+ Featuring code contributed by:
342
+
343
+ * [@flavorjones](https://github.com/flavorjones)
344
+ * [@brynary](https://github.com/brynary)
345
+ * [@olleolleolle](https://github.com/olleolleolle)
346
+ * [@JuanitoFatas](https://github.com/JuanitoFatas)
347
+ * [@kaspth](https://github.com/kaspth)
348
+ * [@tenderlove](https://github.com/tenderlove)
349
+ * [@ktdreyer](https://github.com/ktdreyer)
350
+ * [@orien](https://github.com/orien)
351
+ * [@asok](https://github.com/asok)
352
+ * [@junaruga](https://github.com/junaruga)
353
+ * [@MothOnMars](https://github.com/MothOnMars)
354
+ * [@nick-desteffen](https://github.com/nick-desteffen)
355
+ * [@NikoRoberts](https://github.com/NikoRoberts)
356
+ * [@trans](https://github.com/trans)
357
+ * [@andreynering](https://github.com/andreynering)
358
+ * [@aried3r](https://github.com/aried3r)
359
+ * [@baopham](https://github.com/baopham)
360
+ * [@batter](https://github.com/batter)
361
+ * [@brendon](https://github.com/brendon)
362
+ * [@cjba7](https://github.com/cjba7)
363
+ * [@christiankisssner](https://github.com/christiankisssner)
364
+ * [@dacort](https://github.com/dacort)
365
+ * [@danfstucky](https://github.com/danfstucky)
366
+ * [@david-a-wheeler](https://github.com/david-a-wheeler)
367
+ * [@dharamgollapudi](https://github.com/dharamgollapudi)
368
+ * [@georgeclaghorn](https://github.com/georgeclaghorn)
369
+ * [@gogainda](https://github.com/gogainda)
370
+ * [@jaredbeck](https://github.com/jaredbeck)
371
+ * [@ThatHurleyGuy](https://github.com/ThatHurleyGuy)
372
+ * [@jstorimer](https://github.com/jstorimer)
373
+ * [@jbarnette](https://github.com/jbarnette)
374
+ * [@queso](https://github.com/queso)
375
+ * [@technicalpickles](https://github.com/technicalpickles)
376
+ * [@kyoshidajp](https://github.com/kyoshidajp)
377
+ * [@kristianfreeman](https://github.com/kristianfreeman)
378
+ * [@louim](https://github.com/louim)
379
+ * [@mrpasquini](https://github.com/mrpasquini)
380
+ * [@olivierlacan](https://github.com/olivierlacan)
381
+ * [@pauldix](https://github.com/pauldix)
382
+ * [@sampokuokkanen](https://github.com/sampokuokkanen)
383
+ * [@stefannibrasil](https://github.com/stefannibrasil)
384
+ * [@tastycode](https://github.com/tastycode)
385
+ * [@vipulnsward](https://github.com/vipulnsward)
386
+ * [@joncalhoun](https://github.com/joncalhoun)
387
+ * [@ahorek](https://github.com/ahorek)
388
+ * [@rmacklin](https://github.com/rmacklin)
389
+ * [@y-yagi](https://github.com/y-yagi)
390
+ * [@lazyatom](https://github.com/lazyatom)
391
+
392
+ And a big shout-out to Corey Innis for the name, and feedback on the API.
393
+
394
+
395
+ ## Thank You
396
+
397
+ The following people have generously funded Loofah with financial sponsorship:
398
+
399
+ * Bill Harding
400
+ * [Sentry](https://sentry.io/) @getsentry
401
+
402
+
403
+ ## Historical Note
404
+
405
+ This library was once named "Dryopteris", which was a very bad name that nobody could spell properly.
406
+
407
+
408
+ ## License
409
+
410
+ Distributed under the MIT License. See `MIT-LICENSE.txt` for details.