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.
- checksums.yaml +7 -0
- data/CHANGELOG.md +86 -0
- data/MIT-LICENSE +20 -0
- data/README.rdoc +40 -0
- data/lib/active_support/actionable_error.rb +50 -0
- data/lib/active_support/all.rb +5 -0
- data/lib/active_support/array_inquirer.rb +50 -0
- data/lib/active_support/backtrace_cleaner.rb +163 -0
- data/lib/active_support/benchmark.rb +21 -0
- data/lib/active_support/benchmarkable.rb +53 -0
- data/lib/active_support/broadcast_logger.rb +251 -0
- data/lib/active_support/builder.rb +8 -0
- data/lib/active_support/cache/coder.rb +153 -0
- data/lib/active_support/cache/entry.rb +134 -0
- data/lib/active_support/cache/file_store.rb +244 -0
- data/lib/active_support/cache/mem_cache_store.rb +290 -0
- data/lib/active_support/cache/memory_store.rb +262 -0
- data/lib/active_support/cache/null_store.rb +62 -0
- data/lib/active_support/cache/redis_cache_store.rb +492 -0
- data/lib/active_support/cache/serializer_with_fallback.rb +152 -0
- data/lib/active_support/cache/strategy/local_cache.rb +201 -0
- data/lib/active_support/cache/strategy/local_cache_middleware.rb +45 -0
- data/lib/active_support/cache.rb +1104 -0
- data/lib/active_support/callbacks.rb +944 -0
- data/lib/active_support/class_attribute.rb +26 -0
- data/lib/active_support/code_generator.rb +79 -0
- data/lib/active_support/concern.rb +217 -0
- data/lib/active_support/concurrency/load_interlock_aware_monitor.rb +72 -0
- data/lib/active_support/concurrency/null_lock.rb +13 -0
- data/lib/active_support/concurrency/share_lock.rb +225 -0
- data/lib/active_support/configurable.rb +159 -0
- data/lib/active_support/configuration_file.rb +60 -0
- data/lib/active_support/core_ext/array/access.rb +100 -0
- data/lib/active_support/core_ext/array/conversions.rb +213 -0
- data/lib/active_support/core_ext/array/extract.rb +21 -0
- data/lib/active_support/core_ext/array/extract_options.rb +31 -0
- data/lib/active_support/core_ext/array/grouping.rb +109 -0
- data/lib/active_support/core_ext/array/inquiry.rb +19 -0
- data/lib/active_support/core_ext/array/wrap.rb +48 -0
- data/lib/active_support/core_ext/array.rb +9 -0
- data/lib/active_support/core_ext/benchmark.rb +13 -0
- data/lib/active_support/core_ext/big_decimal/conversions.rb +14 -0
- data/lib/active_support/core_ext/big_decimal.rb +3 -0
- data/lib/active_support/core_ext/class/attribute.rb +122 -0
- data/lib/active_support/core_ext/class/attribute_accessors.rb +6 -0
- data/lib/active_support/core_ext/class/subclasses.rb +24 -0
- data/lib/active_support/core_ext/class.rb +4 -0
- data/lib/active_support/core_ext/date/acts_like.rb +10 -0
- data/lib/active_support/core_ext/date/blank.rb +18 -0
- data/lib/active_support/core_ext/date/calculations.rb +161 -0
- data/lib/active_support/core_ext/date/conversions.rb +98 -0
- data/lib/active_support/core_ext/date/zones.rb +8 -0
- data/lib/active_support/core_ext/date.rb +7 -0
- data/lib/active_support/core_ext/date_and_time/calculations.rb +374 -0
- data/lib/active_support/core_ext/date_and_time/compatibility.rb +58 -0
- data/lib/active_support/core_ext/date_and_time/zones.rb +40 -0
- data/lib/active_support/core_ext/date_time/acts_like.rb +16 -0
- data/lib/active_support/core_ext/date_time/blank.rb +18 -0
- data/lib/active_support/core_ext/date_time/calculations.rb +215 -0
- data/lib/active_support/core_ext/date_time/compatibility.rb +18 -0
- data/lib/active_support/core_ext/date_time/conversions.rb +106 -0
- data/lib/active_support/core_ext/date_time.rb +7 -0
- data/lib/active_support/core_ext/digest/uuid.rb +76 -0
- data/lib/active_support/core_ext/digest.rb +3 -0
- data/lib/active_support/core_ext/enumerable.rb +267 -0
- data/lib/active_support/core_ext/erb/util.rb +201 -0
- data/lib/active_support/core_ext/file/atomic.rb +72 -0
- data/lib/active_support/core_ext/file.rb +3 -0
- data/lib/active_support/core_ext/hash/conversions.rb +262 -0
- data/lib/active_support/core_ext/hash/deep_merge.rb +42 -0
- data/lib/active_support/core_ext/hash/deep_transform_values.rb +46 -0
- data/lib/active_support/core_ext/hash/except.rb +12 -0
- data/lib/active_support/core_ext/hash/indifferent_access.rb +24 -0
- data/lib/active_support/core_ext/hash/keys.rb +143 -0
- data/lib/active_support/core_ext/hash/reverse_merge.rb +25 -0
- data/lib/active_support/core_ext/hash/slice.rb +27 -0
- data/lib/active_support/core_ext/hash.rb +10 -0
- data/lib/active_support/core_ext/integer/inflections.rb +31 -0
- data/lib/active_support/core_ext/integer/multiple.rb +12 -0
- data/lib/active_support/core_ext/integer/time.rb +22 -0
- data/lib/active_support/core_ext/integer.rb +5 -0
- data/lib/active_support/core_ext/kernel/concern.rb +14 -0
- data/lib/active_support/core_ext/kernel/reporting.rb +45 -0
- data/lib/active_support/core_ext/kernel/singleton_class.rb +8 -0
- data/lib/active_support/core_ext/kernel.rb +5 -0
- data/lib/active_support/core_ext/load_error.rb +9 -0
- data/lib/active_support/core_ext/module/aliasing.rb +31 -0
- data/lib/active_support/core_ext/module/anonymous.rb +30 -0
- data/lib/active_support/core_ext/module/attr_internal.rb +49 -0
- data/lib/active_support/core_ext/module/attribute_accessors.rb +214 -0
- data/lib/active_support/core_ext/module/attribute_accessors_per_thread.rb +175 -0
- data/lib/active_support/core_ext/module/concerning.rb +140 -0
- data/lib/active_support/core_ext/module/delegation.rb +225 -0
- data/lib/active_support/core_ext/module/deprecation.rb +25 -0
- data/lib/active_support/core_ext/module/introspection.rb +62 -0
- data/lib/active_support/core_ext/module/redefine_method.rb +40 -0
- data/lib/active_support/core_ext/module/remove_method.rb +17 -0
- data/lib/active_support/core_ext/module.rb +13 -0
- data/lib/active_support/core_ext/name_error.rb +59 -0
- data/lib/active_support/core_ext/numeric/bytes.rb +75 -0
- data/lib/active_support/core_ext/numeric/conversions.rb +145 -0
- data/lib/active_support/core_ext/numeric/time.rb +66 -0
- data/lib/active_support/core_ext/numeric.rb +5 -0
- data/lib/active_support/core_ext/object/acts_like.rb +45 -0
- data/lib/active_support/core_ext/object/blank.rb +199 -0
- data/lib/active_support/core_ext/object/conversions.rb +6 -0
- data/lib/active_support/core_ext/object/deep_dup.rb +71 -0
- data/lib/active_support/core_ext/object/duplicable.rb +69 -0
- data/lib/active_support/core_ext/object/inclusion.rb +37 -0
- data/lib/active_support/core_ext/object/instance_variables.rb +32 -0
- data/lib/active_support/core_ext/object/json.rb +260 -0
- data/lib/active_support/core_ext/object/to_param.rb +3 -0
- data/lib/active_support/core_ext/object/to_query.rb +87 -0
- data/lib/active_support/core_ext/object/try.rb +158 -0
- data/lib/active_support/core_ext/object/with.rb +46 -0
- data/lib/active_support/core_ext/object/with_options.rb +101 -0
- data/lib/active_support/core_ext/object.rb +17 -0
- data/lib/active_support/core_ext/pathname/blank.rb +20 -0
- data/lib/active_support/core_ext/pathname/existence.rb +23 -0
- data/lib/active_support/core_ext/pathname.rb +4 -0
- data/lib/active_support/core_ext/range/compare_range.rb +57 -0
- data/lib/active_support/core_ext/range/conversions.rb +62 -0
- data/lib/active_support/core_ext/range/each.rb +24 -0
- data/lib/active_support/core_ext/range/overlap.rb +40 -0
- data/lib/active_support/core_ext/range.rb +6 -0
- data/lib/active_support/core_ext/regexp.rb +14 -0
- data/lib/active_support/core_ext/securerandom.rb +41 -0
- data/lib/active_support/core_ext/string/access.rb +95 -0
- data/lib/active_support/core_ext/string/behavior.rb +8 -0
- data/lib/active_support/core_ext/string/conversions.rb +60 -0
- data/lib/active_support/core_ext/string/exclude.rb +13 -0
- data/lib/active_support/core_ext/string/filters.rb +151 -0
- data/lib/active_support/core_ext/string/indent.rb +45 -0
- data/lib/active_support/core_ext/string/inflections.rb +300 -0
- data/lib/active_support/core_ext/string/inquiry.rb +16 -0
- data/lib/active_support/core_ext/string/multibyte.rb +58 -0
- data/lib/active_support/core_ext/string/output_safety.rb +228 -0
- data/lib/active_support/core_ext/string/starts_ends_with.rb +6 -0
- data/lib/active_support/core_ext/string/strip.rb +27 -0
- data/lib/active_support/core_ext/string/zones.rb +16 -0
- data/lib/active_support/core_ext/string.rb +15 -0
- data/lib/active_support/core_ext/symbol/starts_ends_with.rb +6 -0
- data/lib/active_support/core_ext/symbol.rb +3 -0
- data/lib/active_support/core_ext/thread/backtrace/location.rb +12 -0
- data/lib/active_support/core_ext/time/acts_like.rb +10 -0
- data/lib/active_support/core_ext/time/calculations.rb +386 -0
- data/lib/active_support/core_ext/time/compatibility.rb +32 -0
- data/lib/active_support/core_ext/time/conversions.rb +75 -0
- data/lib/active_support/core_ext/time/zones.rb +97 -0
- data/lib/active_support/core_ext/time.rb +7 -0
- data/lib/active_support/core_ext.rb +5 -0
- data/lib/active_support/current_attributes/test_helper.rb +13 -0
- data/lib/active_support/current_attributes.rb +233 -0
- data/lib/active_support/deep_mergeable.rb +53 -0
- data/lib/active_support/delegation.rb +202 -0
- data/lib/active_support/dependencies/autoload.rb +72 -0
- data/lib/active_support/dependencies/interlock.rb +49 -0
- data/lib/active_support/dependencies/require_dependency.rb +28 -0
- data/lib/active_support/dependencies.rb +98 -0
- data/lib/active_support/deprecation/behaviors.rb +148 -0
- data/lib/active_support/deprecation/constant_accessor.rb +74 -0
- data/lib/active_support/deprecation/deprecators.rb +104 -0
- data/lib/active_support/deprecation/disallowed.rb +54 -0
- data/lib/active_support/deprecation/method_wrappers.rb +68 -0
- data/lib/active_support/deprecation/proxy_wrappers.rb +189 -0
- data/lib/active_support/deprecation/reporting.rb +179 -0
- data/lib/active_support/deprecation.rb +81 -0
- data/lib/active_support/deprecator.rb +7 -0
- data/lib/active_support/descendants_tracker.rb +112 -0
- data/lib/active_support/digest.rb +22 -0
- data/lib/active_support/duration/iso8601_parser.rb +123 -0
- data/lib/active_support/duration/iso8601_serializer.rb +64 -0
- data/lib/active_support/duration.rb +520 -0
- data/lib/active_support/encrypted_configuration.rb +126 -0
- data/lib/active_support/encrypted_file.rb +133 -0
- data/lib/active_support/environment_inquirer.rb +40 -0
- data/lib/active_support/error_reporter/test_helper.rb +15 -0
- data/lib/active_support/error_reporter.rb +265 -0
- data/lib/active_support/evented_file_update_checker.rb +182 -0
- data/lib/active_support/execution_context/test_helper.rb +13 -0
- data/lib/active_support/execution_context.rb +53 -0
- data/lib/active_support/execution_wrapper.rb +150 -0
- data/lib/active_support/executor/test_helper.rb +7 -0
- data/lib/active_support/executor.rb +8 -0
- data/lib/active_support/file_update_checker.rb +164 -0
- data/lib/active_support/fork_tracker.rb +43 -0
- data/lib/active_support/gem_version.rb +17 -0
- data/lib/active_support/gzip.rb +40 -0
- data/lib/active_support/hash_with_indifferent_access.rb +445 -0
- data/lib/active_support/html_safe_translation.rb +56 -0
- data/lib/active_support/i18n.rb +17 -0
- data/lib/active_support/i18n_railtie.rb +138 -0
- data/lib/active_support/inflections.rb +72 -0
- data/lib/active_support/inflector/inflections.rb +273 -0
- data/lib/active_support/inflector/methods.rb +387 -0
- data/lib/active_support/inflector/transliterate.rb +149 -0
- data/lib/active_support/inflector.rb +9 -0
- data/lib/active_support/isolated_execution_state.rb +75 -0
- data/lib/active_support/json/decoding.rb +76 -0
- data/lib/active_support/json/encoding.rb +120 -0
- data/lib/active_support/json.rb +4 -0
- data/lib/active_support/key_generator.rb +66 -0
- data/lib/active_support/lazy_load_hooks.rb +107 -0
- data/lib/active_support/locale/en.rb +33 -0
- data/lib/active_support/locale/en.yml +141 -0
- data/lib/active_support/log_subscriber/test_helper.rb +106 -0
- data/lib/active_support/log_subscriber.rb +192 -0
- data/lib/active_support/logger.rb +55 -0
- data/lib/active_support/logger_silence.rb +21 -0
- data/lib/active_support/logger_thread_safe_level.rb +47 -0
- data/lib/active_support/message_encryptor.rb +374 -0
- data/lib/active_support/message_encryptors.rb +141 -0
- data/lib/active_support/message_pack/cache_serializer.rb +23 -0
- data/lib/active_support/message_pack/extensions.rb +305 -0
- data/lib/active_support/message_pack/serializer.rb +63 -0
- data/lib/active_support/message_pack.rb +50 -0
- data/lib/active_support/message_verifier.rb +368 -0
- data/lib/active_support/message_verifiers.rb +135 -0
- data/lib/active_support/messages/codec.rb +65 -0
- data/lib/active_support/messages/metadata.rb +146 -0
- data/lib/active_support/messages/rotation_configuration.rb +23 -0
- data/lib/active_support/messages/rotation_coordinator.rb +93 -0
- data/lib/active_support/messages/rotator.rb +59 -0
- data/lib/active_support/messages/serializer_with_fallback.rb +158 -0
- data/lib/active_support/multibyte/chars.rb +178 -0
- data/lib/active_support/multibyte/unicode.rb +42 -0
- data/lib/active_support/multibyte.rb +23 -0
- data/lib/active_support/notifications/fanout.rb +446 -0
- data/lib/active_support/notifications/instrumenter.rb +240 -0
- data/lib/active_support/notifications.rb +281 -0
- data/lib/active_support/number_helper/number_converter.rb +190 -0
- data/lib/active_support/number_helper/number_to_currency_converter.rb +46 -0
- data/lib/active_support/number_helper/number_to_delimited_converter.rb +30 -0
- data/lib/active_support/number_helper/number_to_human_converter.rb +69 -0
- data/lib/active_support/number_helper/number_to_human_size_converter.rb +60 -0
- data/lib/active_support/number_helper/number_to_percentage_converter.rb +16 -0
- data/lib/active_support/number_helper/number_to_phone_converter.rb +60 -0
- data/lib/active_support/number_helper/number_to_rounded_converter.rb +59 -0
- data/lib/active_support/number_helper/rounding_helper.rb +46 -0
- data/lib/active_support/number_helper.rb +479 -0
- data/lib/active_support/option_merger.rb +38 -0
- data/lib/active_support/ordered_hash.rb +50 -0
- data/lib/active_support/ordered_options.rb +147 -0
- data/lib/active_support/parameter_filter.rb +157 -0
- data/lib/active_support/proxy_object.rb +20 -0
- data/lib/active_support/rails.rb +26 -0
- data/lib/active_support/railtie.rb +161 -0
- data/lib/active_support/reloader.rb +138 -0
- data/lib/active_support/rescuable.rb +176 -0
- data/lib/active_support/secure_compare_rotator.rb +58 -0
- data/lib/active_support/security_utils.rb +38 -0
- data/lib/active_support/string_inquirer.rb +35 -0
- data/lib/active_support/subscriber.rb +146 -0
- data/lib/active_support/syntax_error_proxy.rb +60 -0
- data/lib/active_support/tagged_logging.rb +152 -0
- data/lib/active_support/test_case.rb +304 -0
- data/lib/active_support/testing/assertions.rb +332 -0
- data/lib/active_support/testing/autorun.rb +5 -0
- data/lib/active_support/testing/constant_lookup.rb +51 -0
- data/lib/active_support/testing/constant_stubbing.rb +54 -0
- data/lib/active_support/testing/declarative.rb +28 -0
- data/lib/active_support/testing/deprecation.rb +82 -0
- data/lib/active_support/testing/error_reporter_assertions.rb +107 -0
- data/lib/active_support/testing/file_fixtures.rb +38 -0
- data/lib/active_support/testing/isolation.rb +121 -0
- data/lib/active_support/testing/method_call_assertions.rb +69 -0
- data/lib/active_support/testing/parallelization/server.rb +85 -0
- data/lib/active_support/testing/parallelization/worker.rb +103 -0
- data/lib/active_support/testing/parallelization.rb +55 -0
- data/lib/active_support/testing/parallelize_executor.rb +81 -0
- data/lib/active_support/testing/setup_and_teardown.rb +57 -0
- data/lib/active_support/testing/stream.rb +41 -0
- data/lib/active_support/testing/strict_warnings.rb +43 -0
- data/lib/active_support/testing/tagged_logging.rb +27 -0
- data/lib/active_support/testing/tests_without_assertions.rb +19 -0
- data/lib/active_support/testing/time_helpers.rb +269 -0
- data/lib/active_support/time.rb +20 -0
- data/lib/active_support/time_with_zone.rb +609 -0
- data/lib/active_support/values/time_zone.rb +614 -0
- data/lib/active_support/version.rb +10 -0
- data/lib/active_support/xml_mini/jdom.rb +175 -0
- data/lib/active_support/xml_mini/libxml.rb +80 -0
- data/lib/active_support/xml_mini/libxmlsax.rb +83 -0
- data/lib/active_support/xml_mini/nokogiri.rb +83 -0
- data/lib/active_support/xml_mini/nokogirisax.rb +86 -0
- data/lib/active_support/xml_mini/rexml.rb +137 -0
- data/lib/active_support/xml_mini.rb +211 -0
- data/lib/active_support.rb +144 -0
- 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,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
|