omg-activesupport 8.0.0.alpha1

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 (289) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +86 -0
  3. data/MIT-LICENSE +20 -0
  4. data/README.rdoc +40 -0
  5. data/lib/active_support/actionable_error.rb +50 -0
  6. data/lib/active_support/all.rb +5 -0
  7. data/lib/active_support/array_inquirer.rb +50 -0
  8. data/lib/active_support/backtrace_cleaner.rb +163 -0
  9. data/lib/active_support/benchmark.rb +21 -0
  10. data/lib/active_support/benchmarkable.rb +53 -0
  11. data/lib/active_support/broadcast_logger.rb +251 -0
  12. data/lib/active_support/builder.rb +8 -0
  13. data/lib/active_support/cache/coder.rb +153 -0
  14. data/lib/active_support/cache/entry.rb +134 -0
  15. data/lib/active_support/cache/file_store.rb +244 -0
  16. data/lib/active_support/cache/mem_cache_store.rb +290 -0
  17. data/lib/active_support/cache/memory_store.rb +262 -0
  18. data/lib/active_support/cache/null_store.rb +62 -0
  19. data/lib/active_support/cache/redis_cache_store.rb +492 -0
  20. data/lib/active_support/cache/serializer_with_fallback.rb +152 -0
  21. data/lib/active_support/cache/strategy/local_cache.rb +201 -0
  22. data/lib/active_support/cache/strategy/local_cache_middleware.rb +45 -0
  23. data/lib/active_support/cache.rb +1104 -0
  24. data/lib/active_support/callbacks.rb +944 -0
  25. data/lib/active_support/class_attribute.rb +26 -0
  26. data/lib/active_support/code_generator.rb +79 -0
  27. data/lib/active_support/concern.rb +217 -0
  28. data/lib/active_support/concurrency/load_interlock_aware_monitor.rb +72 -0
  29. data/lib/active_support/concurrency/null_lock.rb +13 -0
  30. data/lib/active_support/concurrency/share_lock.rb +225 -0
  31. data/lib/active_support/configurable.rb +159 -0
  32. data/lib/active_support/configuration_file.rb +60 -0
  33. data/lib/active_support/core_ext/array/access.rb +100 -0
  34. data/lib/active_support/core_ext/array/conversions.rb +213 -0
  35. data/lib/active_support/core_ext/array/extract.rb +21 -0
  36. data/lib/active_support/core_ext/array/extract_options.rb +31 -0
  37. data/lib/active_support/core_ext/array/grouping.rb +109 -0
  38. data/lib/active_support/core_ext/array/inquiry.rb +19 -0
  39. data/lib/active_support/core_ext/array/wrap.rb +48 -0
  40. data/lib/active_support/core_ext/array.rb +9 -0
  41. data/lib/active_support/core_ext/benchmark.rb +13 -0
  42. data/lib/active_support/core_ext/big_decimal/conversions.rb +14 -0
  43. data/lib/active_support/core_ext/big_decimal.rb +3 -0
  44. data/lib/active_support/core_ext/class/attribute.rb +122 -0
  45. data/lib/active_support/core_ext/class/attribute_accessors.rb +6 -0
  46. data/lib/active_support/core_ext/class/subclasses.rb +24 -0
  47. data/lib/active_support/core_ext/class.rb +4 -0
  48. data/lib/active_support/core_ext/date/acts_like.rb +10 -0
  49. data/lib/active_support/core_ext/date/blank.rb +18 -0
  50. data/lib/active_support/core_ext/date/calculations.rb +161 -0
  51. data/lib/active_support/core_ext/date/conversions.rb +98 -0
  52. data/lib/active_support/core_ext/date/zones.rb +8 -0
  53. data/lib/active_support/core_ext/date.rb +7 -0
  54. data/lib/active_support/core_ext/date_and_time/calculations.rb +374 -0
  55. data/lib/active_support/core_ext/date_and_time/compatibility.rb +58 -0
  56. data/lib/active_support/core_ext/date_and_time/zones.rb +40 -0
  57. data/lib/active_support/core_ext/date_time/acts_like.rb +16 -0
  58. data/lib/active_support/core_ext/date_time/blank.rb +18 -0
  59. data/lib/active_support/core_ext/date_time/calculations.rb +215 -0
  60. data/lib/active_support/core_ext/date_time/compatibility.rb +18 -0
  61. data/lib/active_support/core_ext/date_time/conversions.rb +106 -0
  62. data/lib/active_support/core_ext/date_time.rb +7 -0
  63. data/lib/active_support/core_ext/digest/uuid.rb +76 -0
  64. data/lib/active_support/core_ext/digest.rb +3 -0
  65. data/lib/active_support/core_ext/enumerable.rb +267 -0
  66. data/lib/active_support/core_ext/erb/util.rb +201 -0
  67. data/lib/active_support/core_ext/file/atomic.rb +72 -0
  68. data/lib/active_support/core_ext/file.rb +3 -0
  69. data/lib/active_support/core_ext/hash/conversions.rb +262 -0
  70. data/lib/active_support/core_ext/hash/deep_merge.rb +42 -0
  71. data/lib/active_support/core_ext/hash/deep_transform_values.rb +46 -0
  72. data/lib/active_support/core_ext/hash/except.rb +12 -0
  73. data/lib/active_support/core_ext/hash/indifferent_access.rb +24 -0
  74. data/lib/active_support/core_ext/hash/keys.rb +143 -0
  75. data/lib/active_support/core_ext/hash/reverse_merge.rb +25 -0
  76. data/lib/active_support/core_ext/hash/slice.rb +27 -0
  77. data/lib/active_support/core_ext/hash.rb +10 -0
  78. data/lib/active_support/core_ext/integer/inflections.rb +31 -0
  79. data/lib/active_support/core_ext/integer/multiple.rb +12 -0
  80. data/lib/active_support/core_ext/integer/time.rb +22 -0
  81. data/lib/active_support/core_ext/integer.rb +5 -0
  82. data/lib/active_support/core_ext/kernel/concern.rb +14 -0
  83. data/lib/active_support/core_ext/kernel/reporting.rb +45 -0
  84. data/lib/active_support/core_ext/kernel/singleton_class.rb +8 -0
  85. data/lib/active_support/core_ext/kernel.rb +5 -0
  86. data/lib/active_support/core_ext/load_error.rb +9 -0
  87. data/lib/active_support/core_ext/module/aliasing.rb +31 -0
  88. data/lib/active_support/core_ext/module/anonymous.rb +30 -0
  89. data/lib/active_support/core_ext/module/attr_internal.rb +49 -0
  90. data/lib/active_support/core_ext/module/attribute_accessors.rb +214 -0
  91. data/lib/active_support/core_ext/module/attribute_accessors_per_thread.rb +175 -0
  92. data/lib/active_support/core_ext/module/concerning.rb +140 -0
  93. data/lib/active_support/core_ext/module/delegation.rb +225 -0
  94. data/lib/active_support/core_ext/module/deprecation.rb +25 -0
  95. data/lib/active_support/core_ext/module/introspection.rb +62 -0
  96. data/lib/active_support/core_ext/module/redefine_method.rb +40 -0
  97. data/lib/active_support/core_ext/module/remove_method.rb +17 -0
  98. data/lib/active_support/core_ext/module.rb +13 -0
  99. data/lib/active_support/core_ext/name_error.rb +59 -0
  100. data/lib/active_support/core_ext/numeric/bytes.rb +75 -0
  101. data/lib/active_support/core_ext/numeric/conversions.rb +145 -0
  102. data/lib/active_support/core_ext/numeric/time.rb +66 -0
  103. data/lib/active_support/core_ext/numeric.rb +5 -0
  104. data/lib/active_support/core_ext/object/acts_like.rb +45 -0
  105. data/lib/active_support/core_ext/object/blank.rb +199 -0
  106. data/lib/active_support/core_ext/object/conversions.rb +6 -0
  107. data/lib/active_support/core_ext/object/deep_dup.rb +71 -0
  108. data/lib/active_support/core_ext/object/duplicable.rb +69 -0
  109. data/lib/active_support/core_ext/object/inclusion.rb +37 -0
  110. data/lib/active_support/core_ext/object/instance_variables.rb +32 -0
  111. data/lib/active_support/core_ext/object/json.rb +260 -0
  112. data/lib/active_support/core_ext/object/to_param.rb +3 -0
  113. data/lib/active_support/core_ext/object/to_query.rb +87 -0
  114. data/lib/active_support/core_ext/object/try.rb +158 -0
  115. data/lib/active_support/core_ext/object/with.rb +46 -0
  116. data/lib/active_support/core_ext/object/with_options.rb +101 -0
  117. data/lib/active_support/core_ext/object.rb +17 -0
  118. data/lib/active_support/core_ext/pathname/blank.rb +20 -0
  119. data/lib/active_support/core_ext/pathname/existence.rb +23 -0
  120. data/lib/active_support/core_ext/pathname.rb +4 -0
  121. data/lib/active_support/core_ext/range/compare_range.rb +57 -0
  122. data/lib/active_support/core_ext/range/conversions.rb +62 -0
  123. data/lib/active_support/core_ext/range/each.rb +24 -0
  124. data/lib/active_support/core_ext/range/overlap.rb +40 -0
  125. data/lib/active_support/core_ext/range.rb +6 -0
  126. data/lib/active_support/core_ext/regexp.rb +14 -0
  127. data/lib/active_support/core_ext/securerandom.rb +41 -0
  128. data/lib/active_support/core_ext/string/access.rb +95 -0
  129. data/lib/active_support/core_ext/string/behavior.rb +8 -0
  130. data/lib/active_support/core_ext/string/conversions.rb +60 -0
  131. data/lib/active_support/core_ext/string/exclude.rb +13 -0
  132. data/lib/active_support/core_ext/string/filters.rb +151 -0
  133. data/lib/active_support/core_ext/string/indent.rb +45 -0
  134. data/lib/active_support/core_ext/string/inflections.rb +300 -0
  135. data/lib/active_support/core_ext/string/inquiry.rb +16 -0
  136. data/lib/active_support/core_ext/string/multibyte.rb +58 -0
  137. data/lib/active_support/core_ext/string/output_safety.rb +228 -0
  138. data/lib/active_support/core_ext/string/starts_ends_with.rb +6 -0
  139. data/lib/active_support/core_ext/string/strip.rb +27 -0
  140. data/lib/active_support/core_ext/string/zones.rb +16 -0
  141. data/lib/active_support/core_ext/string.rb +15 -0
  142. data/lib/active_support/core_ext/symbol/starts_ends_with.rb +6 -0
  143. data/lib/active_support/core_ext/symbol.rb +3 -0
  144. data/lib/active_support/core_ext/thread/backtrace/location.rb +12 -0
  145. data/lib/active_support/core_ext/time/acts_like.rb +10 -0
  146. data/lib/active_support/core_ext/time/calculations.rb +386 -0
  147. data/lib/active_support/core_ext/time/compatibility.rb +32 -0
  148. data/lib/active_support/core_ext/time/conversions.rb +75 -0
  149. data/lib/active_support/core_ext/time/zones.rb +97 -0
  150. data/lib/active_support/core_ext/time.rb +7 -0
  151. data/lib/active_support/core_ext.rb +5 -0
  152. data/lib/active_support/current_attributes/test_helper.rb +13 -0
  153. data/lib/active_support/current_attributes.rb +233 -0
  154. data/lib/active_support/deep_mergeable.rb +53 -0
  155. data/lib/active_support/delegation.rb +202 -0
  156. data/lib/active_support/dependencies/autoload.rb +72 -0
  157. data/lib/active_support/dependencies/interlock.rb +49 -0
  158. data/lib/active_support/dependencies/require_dependency.rb +28 -0
  159. data/lib/active_support/dependencies.rb +98 -0
  160. data/lib/active_support/deprecation/behaviors.rb +148 -0
  161. data/lib/active_support/deprecation/constant_accessor.rb +74 -0
  162. data/lib/active_support/deprecation/deprecators.rb +104 -0
  163. data/lib/active_support/deprecation/disallowed.rb +54 -0
  164. data/lib/active_support/deprecation/method_wrappers.rb +68 -0
  165. data/lib/active_support/deprecation/proxy_wrappers.rb +189 -0
  166. data/lib/active_support/deprecation/reporting.rb +179 -0
  167. data/lib/active_support/deprecation.rb +81 -0
  168. data/lib/active_support/deprecator.rb +7 -0
  169. data/lib/active_support/descendants_tracker.rb +112 -0
  170. data/lib/active_support/digest.rb +22 -0
  171. data/lib/active_support/duration/iso8601_parser.rb +123 -0
  172. data/lib/active_support/duration/iso8601_serializer.rb +64 -0
  173. data/lib/active_support/duration.rb +520 -0
  174. data/lib/active_support/encrypted_configuration.rb +126 -0
  175. data/lib/active_support/encrypted_file.rb +133 -0
  176. data/lib/active_support/environment_inquirer.rb +40 -0
  177. data/lib/active_support/error_reporter/test_helper.rb +15 -0
  178. data/lib/active_support/error_reporter.rb +265 -0
  179. data/lib/active_support/evented_file_update_checker.rb +182 -0
  180. data/lib/active_support/execution_context/test_helper.rb +13 -0
  181. data/lib/active_support/execution_context.rb +53 -0
  182. data/lib/active_support/execution_wrapper.rb +150 -0
  183. data/lib/active_support/executor/test_helper.rb +7 -0
  184. data/lib/active_support/executor.rb +8 -0
  185. data/lib/active_support/file_update_checker.rb +164 -0
  186. data/lib/active_support/fork_tracker.rb +43 -0
  187. data/lib/active_support/gem_version.rb +17 -0
  188. data/lib/active_support/gzip.rb +40 -0
  189. data/lib/active_support/hash_with_indifferent_access.rb +445 -0
  190. data/lib/active_support/html_safe_translation.rb +56 -0
  191. data/lib/active_support/i18n.rb +17 -0
  192. data/lib/active_support/i18n_railtie.rb +138 -0
  193. data/lib/active_support/inflections.rb +72 -0
  194. data/lib/active_support/inflector/inflections.rb +273 -0
  195. data/lib/active_support/inflector/methods.rb +387 -0
  196. data/lib/active_support/inflector/transliterate.rb +149 -0
  197. data/lib/active_support/inflector.rb +9 -0
  198. data/lib/active_support/isolated_execution_state.rb +75 -0
  199. data/lib/active_support/json/decoding.rb +76 -0
  200. data/lib/active_support/json/encoding.rb +120 -0
  201. data/lib/active_support/json.rb +4 -0
  202. data/lib/active_support/key_generator.rb +66 -0
  203. data/lib/active_support/lazy_load_hooks.rb +107 -0
  204. data/lib/active_support/locale/en.rb +33 -0
  205. data/lib/active_support/locale/en.yml +141 -0
  206. data/lib/active_support/log_subscriber/test_helper.rb +106 -0
  207. data/lib/active_support/log_subscriber.rb +192 -0
  208. data/lib/active_support/logger.rb +55 -0
  209. data/lib/active_support/logger_silence.rb +21 -0
  210. data/lib/active_support/logger_thread_safe_level.rb +47 -0
  211. data/lib/active_support/message_encryptor.rb +374 -0
  212. data/lib/active_support/message_encryptors.rb +141 -0
  213. data/lib/active_support/message_pack/cache_serializer.rb +23 -0
  214. data/lib/active_support/message_pack/extensions.rb +305 -0
  215. data/lib/active_support/message_pack/serializer.rb +63 -0
  216. data/lib/active_support/message_pack.rb +50 -0
  217. data/lib/active_support/message_verifier.rb +368 -0
  218. data/lib/active_support/message_verifiers.rb +135 -0
  219. data/lib/active_support/messages/codec.rb +65 -0
  220. data/lib/active_support/messages/metadata.rb +146 -0
  221. data/lib/active_support/messages/rotation_configuration.rb +23 -0
  222. data/lib/active_support/messages/rotation_coordinator.rb +93 -0
  223. data/lib/active_support/messages/rotator.rb +59 -0
  224. data/lib/active_support/messages/serializer_with_fallback.rb +158 -0
  225. data/lib/active_support/multibyte/chars.rb +178 -0
  226. data/lib/active_support/multibyte/unicode.rb +42 -0
  227. data/lib/active_support/multibyte.rb +23 -0
  228. data/lib/active_support/notifications/fanout.rb +446 -0
  229. data/lib/active_support/notifications/instrumenter.rb +240 -0
  230. data/lib/active_support/notifications.rb +281 -0
  231. data/lib/active_support/number_helper/number_converter.rb +190 -0
  232. data/lib/active_support/number_helper/number_to_currency_converter.rb +46 -0
  233. data/lib/active_support/number_helper/number_to_delimited_converter.rb +30 -0
  234. data/lib/active_support/number_helper/number_to_human_converter.rb +69 -0
  235. data/lib/active_support/number_helper/number_to_human_size_converter.rb +60 -0
  236. data/lib/active_support/number_helper/number_to_percentage_converter.rb +16 -0
  237. data/lib/active_support/number_helper/number_to_phone_converter.rb +60 -0
  238. data/lib/active_support/number_helper/number_to_rounded_converter.rb +59 -0
  239. data/lib/active_support/number_helper/rounding_helper.rb +46 -0
  240. data/lib/active_support/number_helper.rb +479 -0
  241. data/lib/active_support/option_merger.rb +38 -0
  242. data/lib/active_support/ordered_hash.rb +50 -0
  243. data/lib/active_support/ordered_options.rb +147 -0
  244. data/lib/active_support/parameter_filter.rb +157 -0
  245. data/lib/active_support/proxy_object.rb +20 -0
  246. data/lib/active_support/rails.rb +26 -0
  247. data/lib/active_support/railtie.rb +161 -0
  248. data/lib/active_support/reloader.rb +138 -0
  249. data/lib/active_support/rescuable.rb +176 -0
  250. data/lib/active_support/secure_compare_rotator.rb +58 -0
  251. data/lib/active_support/security_utils.rb +38 -0
  252. data/lib/active_support/string_inquirer.rb +35 -0
  253. data/lib/active_support/subscriber.rb +146 -0
  254. data/lib/active_support/syntax_error_proxy.rb +60 -0
  255. data/lib/active_support/tagged_logging.rb +152 -0
  256. data/lib/active_support/test_case.rb +304 -0
  257. data/lib/active_support/testing/assertions.rb +332 -0
  258. data/lib/active_support/testing/autorun.rb +5 -0
  259. data/lib/active_support/testing/constant_lookup.rb +51 -0
  260. data/lib/active_support/testing/constant_stubbing.rb +54 -0
  261. data/lib/active_support/testing/declarative.rb +28 -0
  262. data/lib/active_support/testing/deprecation.rb +82 -0
  263. data/lib/active_support/testing/error_reporter_assertions.rb +107 -0
  264. data/lib/active_support/testing/file_fixtures.rb +38 -0
  265. data/lib/active_support/testing/isolation.rb +121 -0
  266. data/lib/active_support/testing/method_call_assertions.rb +69 -0
  267. data/lib/active_support/testing/parallelization/server.rb +85 -0
  268. data/lib/active_support/testing/parallelization/worker.rb +103 -0
  269. data/lib/active_support/testing/parallelization.rb +55 -0
  270. data/lib/active_support/testing/parallelize_executor.rb +81 -0
  271. data/lib/active_support/testing/setup_and_teardown.rb +57 -0
  272. data/lib/active_support/testing/stream.rb +41 -0
  273. data/lib/active_support/testing/strict_warnings.rb +43 -0
  274. data/lib/active_support/testing/tagged_logging.rb +27 -0
  275. data/lib/active_support/testing/tests_without_assertions.rb +19 -0
  276. data/lib/active_support/testing/time_helpers.rb +269 -0
  277. data/lib/active_support/time.rb +20 -0
  278. data/lib/active_support/time_with_zone.rb +609 -0
  279. data/lib/active_support/values/time_zone.rb +614 -0
  280. data/lib/active_support/version.rb +10 -0
  281. data/lib/active_support/xml_mini/jdom.rb +175 -0
  282. data/lib/active_support/xml_mini/libxml.rb +80 -0
  283. data/lib/active_support/xml_mini/libxmlsax.rb +83 -0
  284. data/lib/active_support/xml_mini/nokogiri.rb +83 -0
  285. data/lib/active_support/xml_mini/nokogirisax.rb +86 -0
  286. data/lib/active_support/xml_mini/rexml.rb +137 -0
  287. data/lib/active_support/xml_mini.rb +211 -0
  288. data/lib/active_support.rb +144 -0
  289. metadata +526 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 9aba8f3b7501b1abd6da91de66d68e13a9af49994ecf2bf2f5c978fb827d4440
4
+ data.tar.gz: a6a2b21de1973cff21fc2a2fa2a7ac57bc4f7021ecc17c49e1def16025718f2f
5
+ SHA512:
6
+ metadata.gz: 2cb0b7b415f1e3186f005c2de1b1102e7a3cc537ae3e2ce20b4c19b139cfd68409c9a80cba568e0cb457893a224afff0becc8307582d7585f5922d9d5f0e328c
7
+ data.tar.gz: 7957f92ce6501b11b6cfba5fbcd1e82e12d798c1a47989d39d820956d2626f29a85075f24517e1c7934066474ee9cc1d4aaa195d25f8e771fb838292dd76d694
data/CHANGELOG.md ADDED
@@ -0,0 +1,86 @@
1
+ * Include options when instrumenting `ActiveSupport::Cache::Store#delete` and `ActiveSupport::Cache::Store#delete_multi`.
2
+
3
+ *Adam Renberg Tamm*
4
+
5
+ * Print test names when running `rails test -v` for parallel tests.
6
+
7
+ *John Hawthorn*, *Abeid Ahmed*
8
+
9
+ * Deprecate `Benchmark.ms` core extension.
10
+
11
+ The `benchmark` gem will become bundled in Ruby 3.5
12
+
13
+ *Earlopain*
14
+
15
+ * `ActiveSupport::TimeWithZone#inspect` now uses ISO 8601 style time like `Time#inspect`
16
+
17
+ *John Hawthorn*
18
+
19
+ * `ActiveSupport::ErrorReporter#report` now assigns a backtrace to unraised exceptions.
20
+
21
+ Previously reporting an un-raised exception would result in an error report without
22
+ a backtrace. Now it automatically generates one.
23
+
24
+ *Jean Boussier*
25
+
26
+ * Add `escape_html_entities` option to `ActiveSupport::JSON.encode`.
27
+
28
+ This allows for overriding the global configuration found at
29
+ `ActiveSupport.escape_html_entities_in_json` for specific calls to `to_json`.
30
+
31
+ This should be usable from controllers in the following manner:
32
+ ```ruby
33
+ class MyController < ApplicationController
34
+ def index
35
+ render json: { hello: "world" }, escape_html_entities: false
36
+ end
37
+ end
38
+ ```
39
+
40
+ *Nigel Baillie*
41
+
42
+ * Raise when using key which can't respond to `#to_sym` in `EncryptedConfiguration`.
43
+
44
+ As is the case when trying to use an Integer or Float as a key, which is unsupported.
45
+
46
+ *zzak*
47
+
48
+ * Deprecate addition and since between two `Time` and `ActiveSupport::TimeWithZone`.
49
+
50
+ Previously adding time instances together such as `10.days.ago + 10.days.ago` or `10.days.ago.since(10.days.ago)` produced a nonsensical future date. This behavior is deprecated and will be removed in Rails 8.1.
51
+
52
+ *Nick Schwaderer*
53
+
54
+ * Support rfc2822 format for Time#to_fs & Date#to_fs.
55
+
56
+ *Akshay Birajdar*
57
+
58
+ * Optimize load time for `Railtie#initialize_i18n`. Filter `I18n.load_path`s passed to the file watcher to only those
59
+ under `Rails.root`. Previously the watcher would grab all available locales, including those in gems
60
+ which do not require a watcher because they won't change.
61
+
62
+ *Nick Schwaderer*
63
+
64
+ * Add a `filter` option to `in_order_of` to prioritize certain values in the sorting without filtering the results
65
+ by these values.
66
+
67
+ *Igor Depolli*
68
+
69
+ * Improve error message when using `assert_difference` or `assert_changes` with a
70
+ proc by printing the proc's source code (MRI only).
71
+
72
+ *Richard Böhme*, *Jean Boussier*
73
+
74
+ * Add a new configuration value `:zone` for `ActiveSupport.to_time_preserves_timezone` and rename the previous `true` value to `:offset`. The new default value is `:zone`.
75
+
76
+ *Jason Kim*, *John Hawthorn*
77
+
78
+ * Align instrumentation `payload[:key]` in ActiveSupport::Cache to follow the same pattern, with namespaced and normalized keys.
79
+
80
+ *Frederik Erbs Spang Thomsen*
81
+
82
+ * Fix `travel_to` to set usec 0 when `with_usec` is `false` and the given argument String or DateTime.
83
+
84
+ *mopp*
85
+
86
+ Please check [7-2-stable](https://github.com/rails/rails/blob/7-2-stable/activesupport/CHANGELOG.md) for previous changes.
data/MIT-LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) David Heinemeier Hansson
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.rdoc ADDED
@@ -0,0 +1,40 @@
1
+ = Active Support -- Utility classes and Ruby extensions from \Rails
2
+
3
+ Active Support is a collection of utility classes and standard library
4
+ extensions that were found useful for the \Rails framework. These additions
5
+ reside in this package so they can be loaded as needed in Ruby projects
6
+ outside of \Rails.
7
+
8
+ You can read more about the extensions in the {Active Support Core Extensions}[https://guides.rubyonrails.org/active_support_core_extensions.html] guide.
9
+
10
+ == Download and installation
11
+
12
+ The latest version of Active Support can be installed with RubyGems:
13
+
14
+ $ gem install activesupport
15
+
16
+ Source code can be downloaded as part of the \Rails project on GitHub:
17
+
18
+ * https://github.com/rails/rails/tree/main/activesupport
19
+
20
+
21
+ == License
22
+
23
+ Active Support is released under the MIT license:
24
+
25
+ * https://opensource.org/licenses/MIT
26
+
27
+
28
+ == Support
29
+
30
+ API documentation is at:
31
+
32
+ * https://api.rubyonrails.org
33
+
34
+ Bug reports for the Ruby on \Rails project can be filed here:
35
+
36
+ * https://github.com/rails/rails/issues
37
+
38
+ Feature requests should be discussed on the rails-core mailing list here:
39
+
40
+ * https://discuss.rubyonrails.org/c/rubyonrails-core
@@ -0,0 +1,50 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ActiveSupport
4
+ # = Actionable Errors
5
+ #
6
+ # Actionable errors lets you define actions to resolve an error.
7
+ #
8
+ # To make an error actionable, include the +ActiveSupport::ActionableError+
9
+ # module and invoke the +action+ class macro to define the action. An action
10
+ # needs a name and a block to execute.
11
+ module ActionableError
12
+ extend Concern
13
+
14
+ class NonActionable < StandardError; end
15
+
16
+ included do
17
+ class_attribute :_actions, default: {}
18
+ end
19
+
20
+ def self.actions(error) # :nodoc:
21
+ case error
22
+ when ActionableError, -> it { Class === it && it < ActionableError }
23
+ error._actions
24
+ else
25
+ {}
26
+ end
27
+ end
28
+
29
+ def self.dispatch(error, name) # :nodoc:
30
+ actions(error).fetch(name).call
31
+ rescue KeyError
32
+ raise NonActionable, "Cannot find action \"#{name}\""
33
+ end
34
+
35
+ module ClassMethods
36
+ # Defines an action that can resolve the error.
37
+ #
38
+ # class PendingMigrationError < MigrationError
39
+ # include ActiveSupport::ActionableError
40
+ #
41
+ # action "Run pending migrations" do
42
+ # ActiveRecord::Tasks::DatabaseTasks.migrate
43
+ # end
44
+ # end
45
+ def action(name, &block)
46
+ _actions[name] = block
47
+ end
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "active_support"
4
+ require "active_support/time"
5
+ require "active_support/core_ext"
@@ -0,0 +1,50 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ActiveSupport
4
+ # = \Array Inquirer
5
+ #
6
+ # Wrapping an array in an +ArrayInquirer+ gives a friendlier way to check
7
+ # its string-like contents:
8
+ #
9
+ # variants = ActiveSupport::ArrayInquirer.new([:phone, :tablet])
10
+ #
11
+ # variants.phone? # => true
12
+ # variants.tablet? # => true
13
+ # variants.desktop? # => false
14
+ class ArrayInquirer < Array
15
+ # Passes each element of +candidates+ collection to ArrayInquirer collection.
16
+ # The method returns true if any element from the ArrayInquirer collection
17
+ # is equal to the stringified or symbolized form of any element in the +candidates+ collection.
18
+ #
19
+ # If +candidates+ collection is not given, method returns true.
20
+ #
21
+ # variants = ActiveSupport::ArrayInquirer.new([:phone, :tablet])
22
+ #
23
+ # variants.any? # => true
24
+ # variants.any?(:phone, :tablet) # => true
25
+ # variants.any?('phone', 'desktop') # => true
26
+ # variants.any?(:desktop, :watch) # => false
27
+ def any?(*candidates)
28
+ if candidates.none?
29
+ super
30
+ else
31
+ candidates.any? do |candidate|
32
+ include?(candidate.to_sym) || include?(candidate.to_s)
33
+ end
34
+ end
35
+ end
36
+
37
+ private
38
+ def respond_to_missing?(name, include_private = false)
39
+ name.end_with?("?") || super
40
+ end
41
+
42
+ def method_missing(name, ...)
43
+ if name.end_with?("?")
44
+ any?(name[0..-2])
45
+ else
46
+ super
47
+ end
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,163 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ActiveSupport
4
+ # = Backtrace Cleaner
5
+ #
6
+ # Backtraces often include many lines that are not relevant for the context
7
+ # under review. This makes it hard to find the signal amongst the backtrace
8
+ # noise, and adds debugging time. With a BacktraceCleaner, filters and
9
+ # silencers are used to remove the noisy lines, so that only the most relevant
10
+ # lines remain.
11
+ #
12
+ # Filters are used to modify lines of data, while silencers are used to remove
13
+ # lines entirely. The typical filter use case is to remove lengthy path
14
+ # information from the start of each line, and view file paths relevant to the
15
+ # app directory instead of the file system root. The typical silencer use case
16
+ # is to exclude the output of a noisy library from the backtrace, so that you
17
+ # can focus on the rest.
18
+ #
19
+ # bc = ActiveSupport::BacktraceCleaner.new
20
+ # root = "#{Rails.root}/"
21
+ # bc.add_filter { |line| line.delete_prefix(root) } # strip the Rails.root prefix
22
+ # bc.add_silencer { |line| /puma|rubygems/.match?(line) } # skip any lines from puma or rubygems
23
+ # bc.clean(exception.backtrace) # perform the cleanup
24
+ #
25
+ # To reconfigure an existing BacktraceCleaner (like the default one in \Rails)
26
+ # and show as much data as possible, you can always call
27
+ # BacktraceCleaner#remove_silencers!, which will restore the
28
+ # backtrace to a pristine state. If you need to reconfigure an existing
29
+ # BacktraceCleaner so that it does not filter or modify the paths of any lines
30
+ # of the backtrace, you can call BacktraceCleaner#remove_filters!
31
+ # These two methods will give you a completely untouched backtrace.
32
+ #
33
+ # Inspired by the Quiet Backtrace gem by thoughtbot.
34
+ class BacktraceCleaner
35
+ def initialize
36
+ @filters, @silencers = [], []
37
+ add_core_silencer
38
+ add_gem_filter
39
+ add_gem_silencer
40
+ add_stdlib_silencer
41
+ end
42
+
43
+ # Returns the backtrace after all filters and silencers have been run
44
+ # against it. Filters run first, then silencers.
45
+ def clean(backtrace, kind = :silent)
46
+ filtered = filter_backtrace(backtrace)
47
+
48
+ case kind
49
+ when :silent
50
+ silence(filtered)
51
+ when :noise
52
+ noise(filtered)
53
+ else
54
+ filtered
55
+ end
56
+ end
57
+ alias :filter :clean
58
+
59
+ # Returns the frame with all filters applied.
60
+ # returns +nil+ if the frame was silenced.
61
+ def clean_frame(frame, kind = :silent)
62
+ frame = frame.to_s
63
+ @filters.each do |f|
64
+ frame = f.call(frame.to_s)
65
+ end
66
+
67
+ case kind
68
+ when :silent
69
+ frame unless @silencers.any? { |s| s.call(frame) }
70
+ when :noise
71
+ frame if @silencers.any? { |s| s.call(frame) }
72
+ else
73
+ frame
74
+ end
75
+ end
76
+
77
+ # Adds a filter from the block provided. Each line in the backtrace will be
78
+ # mapped against this filter.
79
+ #
80
+ # # Will turn "/my/rails/root/app/models/person.rb" into "app/models/person.rb"
81
+ # root = "#{Rails.root}/"
82
+ # backtrace_cleaner.add_filter { |line| line.start_with?(root) ? line.from(root.size) : line }
83
+ def add_filter(&block)
84
+ @filters << block
85
+ end
86
+
87
+ # Adds a silencer from the block provided. If the silencer returns +true+
88
+ # for a given line, it will be excluded from the clean backtrace.
89
+ #
90
+ # # Will reject all lines that include the word "puma", like "/gems/puma/server.rb" or "/app/my_puma_server/rb"
91
+ # backtrace_cleaner.add_silencer { |line| /puma/.match?(line) }
92
+ def add_silencer(&block)
93
+ @silencers << block
94
+ end
95
+
96
+ # Removes all silencers, but leaves in the filters. Useful if your
97
+ # context of debugging suddenly expands as you suspect a bug in one of
98
+ # the libraries you use.
99
+ def remove_silencers!
100
+ @silencers = []
101
+ end
102
+
103
+ # Removes all filters, but leaves in the silencers. Useful if you suddenly
104
+ # need to see entire filepaths in the backtrace that you had already
105
+ # filtered out.
106
+ def remove_filters!
107
+ @filters = []
108
+ end
109
+
110
+ private
111
+ FORMATTED_GEMS_PATTERN = /\A[^\/]+ \([\w.]+\) /
112
+
113
+ def initialize_copy(_other)
114
+ @filters = @filters.dup
115
+ @silencers = @silencers.dup
116
+ end
117
+
118
+ def add_gem_filter
119
+ gems_paths = (Gem.path | [Gem.default_dir]).map { |p| Regexp.escape(p) }
120
+ return if gems_paths.empty?
121
+
122
+ gems_regexp = %r{\A(#{gems_paths.join('|')})/(bundler/)?gems/([^/]+)-([\w.]+)/(.*)}
123
+ gems_result = '\3 (\4) \5'
124
+ add_filter { |line| line.sub(gems_regexp, gems_result) }
125
+ end
126
+
127
+ def add_core_silencer
128
+ add_silencer { |line| line.include?("<internal:") }
129
+ end
130
+
131
+ def add_gem_silencer
132
+ add_silencer { |line| FORMATTED_GEMS_PATTERN.match?(line) }
133
+ end
134
+
135
+ def add_stdlib_silencer
136
+ add_silencer { |line| line.start_with?(RbConfig::CONFIG["rubylibdir"]) }
137
+ end
138
+
139
+ def filter_backtrace(backtrace)
140
+ @filters.each do |f|
141
+ backtrace = backtrace.map { |line| f.call(line.to_s) }
142
+ end
143
+
144
+ backtrace
145
+ end
146
+
147
+ def silence(backtrace)
148
+ @silencers.each do |s|
149
+ backtrace = backtrace.reject { |line| s.call(line.to_s) }
150
+ end
151
+
152
+ backtrace
153
+ end
154
+
155
+ def noise(backtrace)
156
+ backtrace.select do |line|
157
+ @silencers.any? do |s|
158
+ s.call(line.to_s)
159
+ end
160
+ end
161
+ end
162
+ end
163
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ActiveSupport
4
+ module Benchmark # :nodoc:
5
+ # Benchmark realtime in the specified time unit. By default,
6
+ # the returned unit is in seconds.
7
+ #
8
+ # ActiveSupport::Benchmark.realtime { sleep 0.1 }
9
+ # # => 0.10007
10
+ #
11
+ # ActiveSupport::Benchmark.realtime(:float_millisecond) { sleep 0.1 }
12
+ # # => 100.07
13
+ #
14
+ # `unit` can be any of the values accepted by Ruby's `Process.clock_gettime`.
15
+ def self.realtime(unit = :float_second, &block)
16
+ time_start = Process.clock_gettime(Process::CLOCK_MONOTONIC, unit)
17
+ yield
18
+ Process.clock_gettime(Process::CLOCK_MONOTONIC, unit) - time_start
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,53 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "active_support/core_ext/hash/keys"
4
+
5
+ module ActiveSupport
6
+ # = \Benchmarkable
7
+ module Benchmarkable
8
+ # Allows you to measure the execution time of a block in a template and
9
+ # records the result to the log. Wrap this block around expensive operations
10
+ # or possible bottlenecks to get a time reading for the operation. For
11
+ # example, let's say you thought your file processing method was taking too
12
+ # long; you could wrap it in a benchmark block.
13
+ #
14
+ # <% benchmark 'Process data files' do %>
15
+ # <%= expensive_files_operation %>
16
+ # <% end %>
17
+ #
18
+ # That would add something like "Process data files (345.2ms)" to the log,
19
+ # which you can then use to compare timings when optimizing your code.
20
+ #
21
+ # You may give an optional logger level (<tt>:debug</tt>, <tt>:info</tt>,
22
+ # <tt>:warn</tt>, <tt>:error</tt>) as the <tt>:level</tt> option. The
23
+ # default logger level value is <tt>:info</tt>.
24
+ #
25
+ # <% benchmark 'Low-level files', level: :debug do %>
26
+ # <%= lowlevel_files_operation %>
27
+ # <% end %>
28
+ #
29
+ # Finally, you can pass true as the third argument to silence all log
30
+ # activity (other than the timing information) from inside the block. This
31
+ # is great for boiling down a noisy block to just a single statement that
32
+ # produces one log line:
33
+ #
34
+ # <% benchmark 'Process data files', level: :info, silence: true do %>
35
+ # <%= expensive_and_chatty_files_operation %>
36
+ # <% end %>
37
+ def benchmark(message = "Benchmarking", options = {}, &block)
38
+ if logger
39
+ options.assert_valid_keys(:level, :silence)
40
+ options[:level] ||= :info
41
+
42
+ result = nil
43
+ ms = ActiveSupport::Benchmark.realtime(:float_millisecond) do
44
+ result = options[:silence] ? logger.silence(&block) : yield
45
+ end
46
+ logger.public_send(options[:level], "%s (%.1fms)" % [ message, ms ])
47
+ result
48
+ else
49
+ yield
50
+ end
51
+ end
52
+ end
53
+ end