From 1241c40c8b750b542226a9598625a7dad5720cd3 Mon Sep 17 00:00:00 2001 From: Mike McQuaid Date: Tue, 5 Nov 2019 19:30:35 +0000 Subject: [PATCH] brew vendor-gems: commit updates. --- .../Homebrew/vendor/bundle/bundler/setup.rb | 23 +- .../core_ext/array/prepend_and_append.rb | 9 - .../lib/active_support/core_ext/enumerable.rb | 164 ---- .../active_support/core_ext/hash/compact.rb | 29 - .../lib/active_support/core_ext/hash/slice.rb | 48 -- .../core_ext/hash/transform_values.rb | 32 - .../core_ext/kernel/agnostics.rb | 13 - .../core_ext/module/introspection.rb | 62 -- .../core_ext/numeric/conversions.rb | 140 ---- .../core_ext/numeric/inquiry.rb | 28 - .../core_ext/object/duplicable.rb | 156 ---- .../core_ext/range/conversions.rb | 39 - .../core_ext/range/include_range.rb | 3 - .../active_support/core_ext/securerandom.rb | 25 - .../lib/active_support/descendants_tracker.rb | 62 -- .../lib/active_support/logger_silence.rb | 29 - .../logger_thread_safe_level.rb | 33 - .../notifications/instrumenter.rb | 93 --- .../lib/active_support/test_case.rb | 72 -- .../active_support/values/unicode_tables.dat | Bin 1116857 -> 0 bytes .../lib/active_support/actionable_error.rb | 48 ++ .../lib/active_support/array_inquirer.rb | 0 .../lib/active_support/backtrace_cleaner.rb | 29 +- .../lib/active_support/benchmarkable.rb | 0 .../lib/active_support/builder.rb | 0 .../lib/active_support/callbacks.rb | 21 +- .../lib/active_support/concern.rb | 25 +- .../lib/active_support/configurable.rb | 18 +- .../lib/active_support/core_ext.rb | 0 .../lib/active_support/core_ext/array.rb | 2 +- .../active_support/core_ext/array/access.rb | 24 +- .../core_ext/array/conversions.rb | 0 .../active_support/core_ext/array/extract.rb | 21 + .../core_ext/array/extract_options.rb | 0 .../active_support/core_ext/array/grouping.rb | 0 .../active_support/core_ext/array/inquiry.rb | 0 .../core_ext/array/prepend_and_append.rb | 5 + .../lib/active_support/core_ext/array/wrap.rb | 0 .../lib/active_support/core_ext/benchmark.rb | 0 .../active_support/core_ext/big_decimal.rb | 0 .../core_ext/big_decimal/conversions.rb | 0 .../lib/active_support/core_ext/class.rb | 0 .../core_ext/class/attribute.rb | 27 +- .../core_ext/class/attribute_accessors.rb | 0 .../core_ext/class/subclasses.rb | 2 +- .../lib/active_support/core_ext/date.rb | 0 .../active_support/core_ext/date/acts_like.rb | 0 .../lib/active_support/core_ext/date/blank.rb | 0 .../core_ext/date/calculations.rb | 11 +- .../core_ext/date/conversions.rb | 0 .../lib/active_support/core_ext/date/zones.rb | 0 .../core_ext/date_and_time/calculations.rb | 71 +- .../core_ext/date_and_time/compatibility.rb | 0 .../core_ext/date_and_time/zones.rb | 0 .../lib/active_support/core_ext/date_time.rb | 0 .../core_ext/date_time/acts_like.rb | 0 .../core_ext/date_time/blank.rb | 0 .../core_ext/date_time/calculations.rb | 2 +- .../core_ext/date_time/compatibility.rb | 0 .../core_ext/date_time/conversions.rb | 0 .../lib/active_support/core_ext/digest.rb | 3 + .../active_support/core_ext/digest/uuid.rb | 0 .../lib/active_support/core_ext/enumerable.rb | 188 +++++ .../lib/active_support/core_ext/file.rb | 0 .../active_support/core_ext/file/atomic.rb | 0 .../lib/active_support/core_ext/hash.rb | 3 +- .../active_support/core_ext/hash/compact.rb | 5 + .../core_ext/hash/conversions.rb | 0 .../core_ext/hash/deep_merge.rb | 0 .../core_ext/hash/deep_transform_values.rb | 46 ++ .../active_support/core_ext/hash/except.rb | 2 +- .../core_ext/hash/indifferent_access.rb | 0 .../lib/active_support/core_ext/hash/keys.rb | 29 - .../core_ext/hash/reverse_merge.rb | 0 .../lib/active_support/core_ext/hash/slice.rb | 26 + .../core_ext/hash/transform_values.rb | 5 + .../lib/active_support/core_ext/integer.rb | 0 .../core_ext/integer/inflections.rb | 0 .../core_ext/integer/multiple.rb | 2 +- .../active_support/core_ext/integer/time.rb | 0 .../lib/active_support/core_ext/kernel.rb | 1 - .../active_support/core_ext/kernel/concern.rb | 0 .../core_ext/kernel/reporting.rb | 0 .../core_ext/kernel/singleton_class.rb | 0 .../lib/active_support/core_ext/load_error.rb | 2 +- .../lib/active_support/core_ext/marshal.rb | 0 .../lib/active_support/core_ext/module.rb | 1 - .../core_ext/module/aliasing.rb | 0 .../core_ext/module/anonymous.rb | 0 .../core_ext/module/attr_internal.rb | 0 .../core_ext/module/attribute_accessors.rb | 17 +- .../module/attribute_accessors_per_thread.rb | 32 +- .../core_ext/module/concerning.rb | 0 .../core_ext/module/delegation.rb | 40 +- .../core_ext/module/deprecation.rb | 0 .../core_ext/module/introspection.rb | 86 ++ .../core_ext/module/reachable.rb | 7 +- .../core_ext/module/redefine_method.rb | 25 +- .../core_ext/module/remove_method.rb | 0 .../lib/active_support/core_ext/name_error.rb | 0 .../lib/active_support/core_ext/numeric.rb | 1 - .../active_support/core_ext/numeric/bytes.rb | 0 .../core_ext/numeric/conversions.rb | 136 ++++ .../core_ext/numeric/inquiry.rb | 5 + .../active_support/core_ext/numeric/time.rb | 0 .../lib/active_support/core_ext/object.rb | 0 .../core_ext/object/acts_like.rb | 0 .../active_support/core_ext/object/blank.rb | 3 +- .../core_ext/object/conversions.rb | 0 .../core_ext/object/deep_dup.rb | 0 .../core_ext/object/duplicable.rb | 49 ++ .../core_ext/object/inclusion.rb | 0 .../core_ext/object/instance_variables.rb | 0 .../active_support/core_ext/object/json.rb | 1 + .../core_ext/object/to_param.rb | 0 .../core_ext/object/to_query.rb | 0 .../lib/active_support/core_ext/object/try.rb | 22 +- .../core_ext/object/with_options.rb | 2 +- .../lib/active_support/core_ext/range.rb | 0 .../core_ext/range/compare_range.rb | 41 +- .../core_ext/range/conversions.rb | 41 + .../lib/active_support/core_ext/range/each.rb | 0 .../core_ext/range/include_range.rb | 9 + .../core_ext/range/include_time_with_zone.rb | 4 +- .../active_support/core_ext/range/overlaps.rb | 0 .../lib/active_support/core_ext/regexp.rb | 4 - .../active_support/core_ext/securerandom.rb | 45 ++ .../lib/active_support/core_ext/string.rb | 0 .../active_support/core_ext/string/access.rb | 8 + .../core_ext/string/behavior.rb | 0 .../core_ext/string/conversions.rb | 0 .../active_support/core_ext/string/exclude.rb | 0 .../active_support/core_ext/string/filters.rb | 43 +- .../active_support/core_ext/string/indent.rb | 0 .../core_ext/string/inflections.rb | 9 +- .../active_support/core_ext/string/inquiry.rb | 0 .../core_ext/string/multibyte.rb | 7 +- .../core_ext/string/output_safety.rb | 68 +- .../core_ext/string/starts_ends_with.rb | 0 .../active_support/core_ext/string/strip.rb | 4 +- .../active_support/core_ext/string/zones.rb | 0 .../lib/active_support/core_ext/time.rb | 0 .../active_support/core_ext/time/acts_like.rb | 0 .../core_ext/time/calculations.rb | 33 +- .../core_ext/time/compatibility.rb | 0 .../core_ext/time/conversions.rb | 0 .../lib/active_support/core_ext/time/zones.rb | 0 .../lib/active_support/core_ext/uri.rb | 1 + .../lib/active_support/current_attributes.rb | 8 + .../lib/active_support/deprecation.rb | 2 +- .../active_support/deprecation/behaviors.rb | 2 +- .../deprecation/constant_accessor.rb | 0 .../deprecation/instance_delegator.rb | 0 .../deprecation/method_wrappers.rb | 28 +- .../deprecation/proxy_wrappers.rb | 29 +- .../active_support/deprecation/reporting.rb | 0 .../lib/active_support/descendants_tracker.rb | 109 +++ .../lib/active_support/digest.rb | 0 .../lib/active_support/duration.rb | 11 +- .../active_support/encrypted_configuration.rb | 4 - .../lib/active_support/encrypted_file.rb | 3 +- .../evented_file_update_checker.rb | 48 +- .../lib/active_support/execution_wrapper.rb | 1 + .../lib/active_support/executor.rb | 0 .../lib/active_support/file_update_checker.rb | 0 .../lib/active_support/gem_version.rb | 6 +- .../lib/active_support/gzip.rb | 0 .../hash_with_indifferent_access.rb | 40 +- .../lib/active_support/i18n.rb | 1 + .../lib/active_support/i18n_railtie.rb | 10 +- .../lib/active_support/inflections.rb | 0 .../lib/active_support/inflector.rb | 0 .../active_support/inflector/inflections.rb | 5 +- .../lib/active_support/inflector/methods.rb | 42 +- .../active_support/inflector/transliterate.rb | 65 +- .../lib/active_support/key_generator.rb | 32 - .../lib/active_support/lazy_load_hooks.rb | 6 +- .../lib/active_support/locale/en.rb | 31 + .../lib/active_support/locale/en.yml | 0 .../lib/active_support/logger.rb | 15 - .../lib/active_support/logger_silence.rb | 45 ++ .../logger_thread_safe_level.rb | 56 ++ .../lib/active_support/message_encryptor.rb | 8 +- .../lib/active_support/message_verifier.rb | 6 +- .../lib/active_support/multibyte.rb | 0 .../lib/active_support/notifications.rb | 45 +- .../active_support/notifications/fanout.rb | 117 ++- .../notifications/instrumenter.rb | 165 ++++ .../lib/active_support/option_merger.rb | 0 .../lib/active_support/ordered_hash.rb | 2 +- .../lib/active_support/ordered_options.rb | 2 +- .../lib/active_support/parameter_filter.rb | 129 +++ .../lib/active_support/per_thread_registry.rb | 0 .../lib/active_support/proxy_object.rb | 0 .../lib/active_support/rails.rb | 6 - .../lib/active_support/railtie.rb | 0 .../lib/active_support/reloader.rb | 9 +- .../lib/active_support/rescuable.rb | 0 .../lib/active_support/security_utils.rb | 2 +- .../lib/active_support/string_inquirer.rb | 0 .../lib/active_support/subscriber.rb | 93 ++- .../lib/active_support/tagged_logging.rb | 17 +- .../lib/active_support/test_case.rb | 163 ++++ .../lib/active_support/time.rb | 0 .../lib/active_support/time_with_zone.rb | 20 +- .../lib/active_support/values/time_zone.rb | 19 +- .../lib/active_support/version.rb | 0 .../lib/active_support/xml_mini.rb | 11 +- .../lib/active_support/xml_mini/jdom.rb | 4 +- .../lib/active_support/xml_mini/libxml.rb | 4 +- .../lib/active_support/xml_mini/libxmlsax.rb | 8 +- .../lib/active_support/xml_mini/nokogiri.rb | 4 +- .../active_support/xml_mini/nokogirisax.rb | 6 +- .../lib/active_support/xml_mini/rexml.rb | 4 +- .../2.6.0/gems/zeitwerk-2.2.1/lib/zeitwerk.rb | 12 + .../gems/zeitwerk-2.2.1/lib/zeitwerk/error.rb | 10 + .../lib/zeitwerk/explicit_namespace.rb | 80 ++ .../lib/zeitwerk/gem_inflector.rb | 19 + .../zeitwerk-2.2.1/lib/zeitwerk/inflector.rb | 49 ++ .../zeitwerk-2.2.1/lib/zeitwerk/kernel.rb | 33 + .../zeitwerk-2.2.1/lib/zeitwerk/loader.rb | 765 ++++++++++++++++++ .../lib/zeitwerk/loader/callbacks.rb | 71 ++ .../lib/zeitwerk/real_mod_name.rb | 21 + .../zeitwerk-2.2.1/lib/zeitwerk/registry.rb | 147 ++++ .../zeitwerk-2.2.1/lib/zeitwerk/version.rb | 5 + 225 files changed, 3521 insertions(+), 1556 deletions(-) delete mode 100644 Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/array/prepend_and_append.rb delete mode 100644 Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/enumerable.rb delete mode 100644 Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/hash/compact.rb delete mode 100644 Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/hash/slice.rb delete mode 100644 Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/hash/transform_values.rb delete mode 100644 Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/kernel/agnostics.rb delete mode 100644 Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/module/introspection.rb delete mode 100644 Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/numeric/conversions.rb delete mode 100644 Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/numeric/inquiry.rb delete mode 100644 Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/object/duplicable.rb delete mode 100644 Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/range/conversions.rb delete mode 100644 Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/range/include_range.rb delete mode 100644 Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/securerandom.rb delete mode 100644 Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/descendants_tracker.rb delete mode 100644 Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/logger_silence.rb delete mode 100644 Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/logger_thread_safe_level.rb delete mode 100644 Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/notifications/instrumenter.rb delete mode 100644 Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/test_case.rb delete mode 100644 Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/values/unicode_tables.dat create mode 100644 Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/actionable_error.rb rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/array_inquirer.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/backtrace_cleaner.rb (82%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/benchmarkable.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/builder.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/callbacks.rb (97%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/concern.rb (83%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/configurable.rb (86%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/core_ext.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/core_ext/array.rb (84%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/core_ext/array/access.rb (71%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/core_ext/array/conversions.rb (100%) create mode 100644 Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/array/extract.rb rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/core_ext/array/extract_options.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/core_ext/array/grouping.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/core_ext/array/inquiry.rb (100%) create mode 100644 Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/array/prepend_and_append.rb rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/core_ext/array/wrap.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/core_ext/benchmark.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/core_ext/big_decimal.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/core_ext/big_decimal/conversions.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/core_ext/class.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/core_ext/class/attribute.rb (87%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/core_ext/class/attribute_accessors.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/core_ext/class/subclasses.rb (95%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/core_ext/date.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/core_ext/date/acts_like.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/core_ext/date/blank.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/core_ext/date/calculations.rb (94%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/core_ext/date/conversions.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/core_ext/date/zones.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/core_ext/date_and_time/calculations.rb (87%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/core_ext/date_and_time/compatibility.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/core_ext/date_and_time/zones.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/core_ext/date_time.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/core_ext/date_time/acts_like.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/core_ext/date_time/blank.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/core_ext/date_time/calculations.rb (99%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/core_ext/date_time/compatibility.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/core_ext/date_time/conversions.rb (100%) create mode 100644 Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/digest.rb rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/core_ext/digest/uuid.rb (100%) create mode 100644 Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/enumerable.rb rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/core_ext/file.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/core_ext/file/atomic.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/core_ext/hash.rb (78%) create mode 100644 Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/hash/compact.rb rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/core_ext/hash/conversions.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/core_ext/hash/deep_merge.rb (100%) create mode 100644 Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/hash/deep_transform_values.rb rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/core_ext/hash/except.rb (96%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/core_ext/hash/indifferent_access.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/core_ext/hash/keys.rb (82%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/core_ext/hash/reverse_merge.rb (100%) create mode 100644 Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/hash/slice.rb create mode 100644 Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/hash/transform_values.rb rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/core_ext/integer.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/core_ext/integer/inflections.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/core_ext/integer/multiple.rb (84%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/core_ext/integer/time.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/core_ext/kernel.rb (78%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/core_ext/kernel/concern.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/core_ext/kernel/reporting.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/core_ext/kernel/singleton_class.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/core_ext/load_error.rb (77%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/core_ext/marshal.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/core_ext/module.rb (92%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/core_ext/module/aliasing.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/core_ext/module/anonymous.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/core_ext/module/attr_internal.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/core_ext/module/attribute_accessors.rb (92%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/core_ext/module/attribute_accessors_per_thread.rb (79%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/core_ext/module/concerning.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/core_ext/module/delegation.rb (86%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/core_ext/module/deprecation.rb (100%) create mode 100644 Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/module/introspection.rb rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/core_ext/module/reachable.rb (51%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/core_ext/module/redefine_method.rb (51%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/core_ext/module/remove_method.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/core_ext/name_error.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/core_ext/numeric.rb (78%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/core_ext/numeric/bytes.rb (100%) create mode 100644 Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/numeric/conversions.rb create mode 100644 Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/numeric/inquiry.rb rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/core_ext/numeric/time.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/core_ext/object.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/core_ext/object/acts_like.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/core_ext/object/blank.rb (96%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/core_ext/object/conversions.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/core_ext/object/deep_dup.rb (100%) create mode 100644 Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/object/duplicable.rb rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/core_ext/object/inclusion.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/core_ext/object/instance_variables.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/core_ext/object/json.rb (99%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/core_ext/object/to_param.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/core_ext/object/to_query.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/core_ext/object/try.rb (87%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/core_ext/object/with_options.rb (97%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/core_ext/range.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/core_ext/range/compare_range.rb (50%) create mode 100644 Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/range/conversions.rb rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/core_ext/range/each.rb (100%) create mode 100644 Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/range/include_range.rb rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/core_ext/range/include_time_with_zone.rb (85%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/core_ext/range/overlaps.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/core_ext/regexp.rb (55%) create mode 100644 Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/securerandom.rb rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/core_ext/string.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/core_ext/string/access.rb (90%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/core_ext/string/behavior.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/core_ext/string/conversions.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/core_ext/string/exclude.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/core_ext/string/filters.rb (71%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/core_ext/string/indent.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/core_ext/string/inflections.rb (96%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/core_ext/string/inquiry.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/core_ext/string/multibyte.rb (94%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/core_ext/string/output_safety.rb (74%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/core_ext/string/starts_ends_with.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/core_ext/string/strip.rb (84%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/core_ext/string/zones.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/core_ext/time.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/core_ext/time/acts_like.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/core_ext/time/calculations.rb (93%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/core_ext/time/compatibility.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/core_ext/time/conversions.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/core_ext/time/zones.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/core_ext/uri.rb (99%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/current_attributes.rb (95%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/deprecation.rb (96%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/deprecation/behaviors.rb (99%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/deprecation/constant_accessor.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/deprecation/instance_delegator.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/deprecation/method_wrappers.rb (71%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/deprecation/proxy_wrappers.rb (87%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/deprecation/reporting.rb (100%) create mode 100644 Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/descendants_tracker.rb rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/digest.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/duration.rb (97%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/encrypted_configuration.rb (92%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/encrypted_file.rb (97%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/evented_file_update_checker.rb (84%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/execution_wrapper.rb (99%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/executor.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/file_update_checker.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/gem_version.rb (88%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/gzip.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/hash_with_indifferent_access.rb (93%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/i18n.rb (88%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/i18n_railtie.rb (85%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/inflections.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/inflector.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/inflector/inflections.rb (98%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/inflector/methods.rb (94%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/inflector/transliterate.rb (58%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/key_generator.rb (58%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/lazy_load_hooks.rb (94%) create mode 100644 Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/locale/en.rb rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/locale/en.yml (100%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/logger.rb (81%) create mode 100644 Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/logger_silence.rb create mode 100644 Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/logger_thread_safe_level.rb rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/message_encryptor.rb (98%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/message_verifier.rb (97%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/multibyte.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/notifications.rb (77%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/notifications/fanout.rb (51%) create mode 100644 Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/notifications/instrumenter.rb rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/option_merger.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/ordered_hash.rb (94%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/ordered_options.rb (98%) create mode 100644 Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/parameter_filter.rb rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/per_thread_registry.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/proxy_object.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/rails.rb (82%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/railtie.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/reloader.rb (96%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/rescuable.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/security_utils.rb (89%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/string_inquirer.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/subscriber.rb (55%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/tagged_logging.rb (86%) create mode 100644 Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/test_case.rb rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/time.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/time_with_zone.rb (97%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/values/time_zone.rb (97%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/version.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/xml_mini.rb (95%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/xml_mini/jdom.rb (98%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/xml_mini/libxml.rb (95%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/xml_mini/libxmlsax.rb (90%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/xml_mini/nokogiri.rb (95%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/xml_mini/nokogirisax.rb (92%) rename Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/{activesupport-5.2.3 => activesupport-6.0.1}/lib/active_support/xml_mini/rexml.rb (98%) create mode 100644 Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/zeitwerk-2.2.1/lib/zeitwerk.rb create mode 100644 Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/zeitwerk-2.2.1/lib/zeitwerk/error.rb create mode 100644 Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/zeitwerk-2.2.1/lib/zeitwerk/explicit_namespace.rb create mode 100644 Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/zeitwerk-2.2.1/lib/zeitwerk/gem_inflector.rb create mode 100644 Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/zeitwerk-2.2.1/lib/zeitwerk/inflector.rb create mode 100644 Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/zeitwerk-2.2.1/lib/zeitwerk/kernel.rb create mode 100644 Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/zeitwerk-2.2.1/lib/zeitwerk/loader.rb create mode 100644 Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/zeitwerk-2.2.1/lib/zeitwerk/loader/callbacks.rb create mode 100644 Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/zeitwerk-2.2.1/lib/zeitwerk/real_mod_name.rb create mode 100644 Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/zeitwerk-2.2.1/lib/zeitwerk/registry.rb create mode 100644 Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/zeitwerk-2.2.1/lib/zeitwerk/version.rb diff --git a/Library/Homebrew/vendor/bundle/bundler/setup.rb b/Library/Homebrew/vendor/bundle/bundler/setup.rb index ee3320916f..377dc5b1cb 100644 --- a/Library/Homebrew/vendor/bundle/bundler/setup.rb +++ b/Library/Homebrew/vendor/bundle/bundler/setup.rb @@ -5,14 +5,15 @@ ruby_version = RbConfig::CONFIG["ruby_version"] path = File.expand_path('..', __FILE__) $:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/concurrent-ruby-1.1.5/lib" $:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/i18n-1.7.0/lib" -$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/minitest-5.12.2/lib" +$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/minitest-5.13.0/lib" $:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/thread_safe-0.3.6/lib" $:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/tzinfo-1.2.5/lib" -$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/activesupport-5.2.3/lib" +$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/zeitwerk-2.2.1/lib" +$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/activesupport-6.0.1/lib" $:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/ast-2.4.0/lib" $:.unshift "#{path}/" $:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/connection_pool-2.2.2/lib" -$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/extensions/x86_64-darwin-13/2.6.0-static/json-2.2.0" +$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/extensions/universal-darwin-19/2.6.0/json-2.2.0" $:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/json-2.2.0/lib" $:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/docile-1.3.2/lib" $:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/simplecov-html-0.10.2/lib" @@ -22,22 +23,22 @@ $:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/term-ansicolor-1.7.1/ $:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/thor-0.20.3/lib" $:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/coveralls-0.8.23/lib" $:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/diff-lcs-1.3/lib" -$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/extensions/x86_64-darwin-13/2.6.0-static/unf_ext-0.0.7.6" +$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/extensions/universal-darwin-19/2.6.0/unf_ext-0.0.7.6" $:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/unf_ext-0.0.7.6/lib" $:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/unf-0.1.4/lib" $:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/domain_name-0.5.20190701/lib" -$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/extensions/x86_64-darwin-13/2.6.0-static/hpricot-0.8.6" +$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/extensions/universal-darwin-19/2.6.0/hpricot-0.8.6" $:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/hpricot-0.8.6/lib" $:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/http-cookie-1.0.3/lib" -$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/extensions/x86_64-darwin-13/2.6.0-static/jaro_winkler-1.5.3" -$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/jaro_winkler-1.5.3/lib" +$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/extensions/universal-darwin-19/2.6.0/jaro_winkler-1.5.4" +$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/jaro_winkler-1.5.4/lib" $:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/mime-types-data-3.2019.1009/lib" $:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/mime-types-3.3/lib" $:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/net-http-digest_auth-1.4.1/lib" $:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/net-http-persistent-3.1.0/lib" $:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/mini_portile2-2.4.0/lib" -$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/extensions/x86_64-darwin-13/2.6.0-static/nokogiri-1.10.4" -$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/nokogiri-1.10.4/lib" +$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/extensions/universal-darwin-19/2.6.0/nokogiri-1.10.5" +$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/nokogiri-1.10.5/lib" $:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/ntlm-http-0.1.1/lib" $:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/webrobots-0.1.2/lib" $:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/mechanize-2.7.6/lib" @@ -47,7 +48,7 @@ $:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/parallel_tests-2.29.2 $:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/parser-2.6.5.0/lib" $:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/plist-3.5.0/lib" $:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/rainbow-3.0.0/lib" -$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/extensions/x86_64-darwin-13/2.6.0-static/rdiscount-2.2.0.1" +$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/extensions/universal-darwin-19/2.6.0/rdiscount-2.2.0.1" $:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/rdiscount-2.2.0.1/lib" $:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/ronn-0.7.3/lib" $:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/rspec-support-3.9.0/lib" @@ -60,7 +61,7 @@ $:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/rspec-retry-0.6.1/lib $:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/rspec-wait-0.0.9/lib" $:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/ruby-progressbar-1.10.1/lib" $:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/unicode-display_width-1.6.0/lib" -$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/rubocop-0.75.0/lib" +$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/rubocop-0.76.0/lib" $:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/rubocop-performance-1.5.0/lib" $:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/rubocop-rspec-1.36.0/lib" $:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/ruby-macho-2.2.0/lib" diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/array/prepend_and_append.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/array/prepend_and_append.rb deleted file mode 100644 index 661971d7cd..0000000000 --- a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/array/prepend_and_append.rb +++ /dev/null @@ -1,9 +0,0 @@ -# frozen_string_literal: true - -class Array - # The human way of thinking about adding stuff to the end of a list is with append. - alias_method :append, :push unless [].respond_to?(:append) - - # The human way of thinking about adding stuff to the beginning of a list is with prepend. - alias_method :prepend, :unshift unless [].respond_to?(:prepend) -end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/enumerable.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/enumerable.rb deleted file mode 100644 index cea6f98cfa..0000000000 --- a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/enumerable.rb +++ /dev/null @@ -1,164 +0,0 @@ -# frozen_string_literal: true - -module Enumerable - # Enumerable#sum was added in Ruby 2.4, but it only works with Numeric elements - # when we omit an identity. - # - # We tried shimming it to attempt the fast native method, rescue TypeError, - # and fall back to the compatible implementation, but that's much slower than - # just calling the compat method in the first place. - if Enumerable.instance_methods(false).include?(:sum) && !((?a..?b).sum rescue false) - # :stopdoc: - - # We can't use Refinements here because Refinements with Module which will be prepended - # doesn't work well https://bugs.ruby-lang.org/issues/13446 - alias :_original_sum_with_required_identity :sum - private :_original_sum_with_required_identity - - # :startdoc: - - # Calculates a sum from the elements. - # - # payments.sum { |p| p.price * p.tax_rate } - # payments.sum(&:price) - # - # The latter is a shortcut for: - # - # payments.inject(0) { |sum, p| sum + p.price } - # - # It can also calculate the sum without the use of a block. - # - # [5, 15, 10].sum # => 30 - # ['foo', 'bar'].sum # => "foobar" - # [[1, 2], [3, 1, 5]].sum # => [1, 2, 3, 1, 5] - # - # The default sum of an empty list is zero. You can override this default: - # - # [].sum(Payment.new(0)) { |i| i.amount } # => Payment.new(0) - def sum(identity = nil, &block) - if identity - _original_sum_with_required_identity(identity, &block) - elsif block_given? - map(&block).sum(identity) - else - inject(:+) || 0 - end - end - else - def sum(identity = nil, &block) - if block_given? - map(&block).sum(identity) - else - sum = identity ? inject(identity, :+) : inject(:+) - sum || identity || 0 - end - end - end - - # Convert an enumerable to a hash. - # - # people.index_by(&:login) - # # => { "nextangle" => , "chade-" => , ...} - # people.index_by { |person| "#{person.first_name} #{person.last_name}" } - # # => { "Chade- Fowlersburg-e" => , "David Heinemeier Hansson" => , ...} - def index_by - if block_given? - result = {} - each { |elem| result[yield(elem)] = elem } - result - else - to_enum(:index_by) { size if respond_to?(:size) } - end - end - - # Returns +true+ if the enumerable has more than 1 element. Functionally - # equivalent to enum.to_a.size > 1. Can be called with a block too, - # much like any?, so people.many? { |p| p.age > 26 } returns +true+ - # if more than one person is over 26. - def many? - cnt = 0 - if block_given? - any? do |element| - cnt += 1 if yield element - cnt > 1 - end - else - any? { (cnt += 1) > 1 } - end - end - - # The negative of the Enumerable#include?. Returns +true+ if the - # collection does not include the object. - def exclude?(object) - !include?(object) - end - - # Returns a copy of the enumerable without the specified elements. - # - # ["David", "Rafael", "Aaron", "Todd"].without "Aaron", "Todd" - # # => ["David", "Rafael"] - # - # {foo: 1, bar: 2, baz: 3}.without :bar - # # => {foo: 1, baz: 3} - def without(*elements) - reject { |element| elements.include?(element) } - end - - # Convert an enumerable to an array based on the given key. - # - # [{ name: "David" }, { name: "Rafael" }, { name: "Aaron" }].pluck(:name) - # # => ["David", "Rafael", "Aaron"] - # - # [{ id: 1, name: "David" }, { id: 2, name: "Rafael" }].pluck(:id, :name) - # # => [[1, "David"], [2, "Rafael"]] - def pluck(*keys) - if keys.many? - map { |element| keys.map { |key| element[key] } } - else - map { |element| element[keys.first] } - end - end -end - -class Range #:nodoc: - # Optimize range sum to use arithmetic progression if a block is not given and - # we have a range of numeric values. - def sum(identity = nil) - if block_given? || !(first.is_a?(Integer) && last.is_a?(Integer)) - super - else - actual_last = exclude_end? ? (last - 1) : last - if actual_last >= first - sum = identity || 0 - sum + (actual_last - first + 1) * (actual_last + first) / 2 - else - identity || 0 - end - end - end -end - -# Array#sum was added in Ruby 2.4 but it only works with Numeric elements. -# -# We tried shimming it to attempt the fast native method, rescue TypeError, -# and fall back to the compatible implementation, but that's much slower than -# just calling the compat method in the first place. -if Array.instance_methods(false).include?(:sum) && !(%w[a].sum rescue false) - # Using Refinements here in order not to expose our internal method - using Module.new { - refine Array do - alias :orig_sum :sum - end - } - - class Array - def sum(init = nil, &block) #:nodoc: - if init.is_a?(Numeric) || first.is_a?(Numeric) - init ||= 0 - orig_sum(init, &block) - else - super - end - end - end -end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/hash/compact.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/hash/compact.rb deleted file mode 100644 index d6364dd9f3..0000000000 --- a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/hash/compact.rb +++ /dev/null @@ -1,29 +0,0 @@ -# frozen_string_literal: true - -class Hash - unless Hash.instance_methods(false).include?(:compact) - # Returns a hash with non +nil+ values. - # - # hash = { a: true, b: false, c: nil } - # hash.compact # => { a: true, b: false } - # hash # => { a: true, b: false, c: nil } - # { c: nil }.compact # => {} - # { c: true }.compact # => { c: true } - def compact - select { |_, value| !value.nil? } - end - end - - unless Hash.instance_methods(false).include?(:compact!) - # Replaces current hash with non +nil+ values. - # Returns +nil+ if no changes were made, otherwise returns the hash. - # - # hash = { a: true, b: false, c: nil } - # hash.compact! # => { a: true, b: false } - # hash # => { a: true, b: false } - # { c: true }.compact! # => nil - def compact! - reject! { |_, value| value.nil? } - end - end -end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/hash/slice.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/hash/slice.rb deleted file mode 100644 index 2bd0a56ea4..0000000000 --- a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/hash/slice.rb +++ /dev/null @@ -1,48 +0,0 @@ -# frozen_string_literal: true - -class Hash - # Slices a hash to include only the given keys. Returns a hash containing - # the given keys. - # - # { a: 1, b: 2, c: 3, d: 4 }.slice(:a, :b) - # # => {:a=>1, :b=>2} - # - # This is useful for limiting an options hash to valid keys before - # passing to a method: - # - # def search(criteria = {}) - # criteria.assert_valid_keys(:mass, :velocity, :time) - # end - # - # search(options.slice(:mass, :velocity, :time)) - # - # If you have an array of keys you want to limit to, you should splat them: - # - # valid_keys = [:mass, :velocity, :time] - # search(options.slice(*valid_keys)) - def slice(*keys) - keys.each_with_object(Hash.new) { |k, hash| hash[k] = self[k] if has_key?(k) } - end unless method_defined?(:slice) - - # Replaces the hash with only the given keys. - # Returns a hash containing the removed key/value pairs. - # - # { a: 1, b: 2, c: 3, d: 4 }.slice!(:a, :b) - # # => {:c=>3, :d=>4} - def slice!(*keys) - omit = slice(*self.keys - keys) - hash = slice(*keys) - hash.default = default - hash.default_proc = default_proc if default_proc - replace(hash) - omit - end - - # Removes and returns the key/value pairs matching the given keys. - # - # { a: 1, b: 2, c: 3, d: 4 }.extract!(:a, :b) # => {:a=>1, :b=>2} - # { a: 1, b: 2 }.extract!(:a, :x) # => {:a=>1} - def extract!(*keys) - keys.each_with_object(self.class.new) { |key, result| result[key] = delete(key) if has_key?(key) } - end -end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/hash/transform_values.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/hash/transform_values.rb deleted file mode 100644 index 4b19c9fc1f..0000000000 --- a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/hash/transform_values.rb +++ /dev/null @@ -1,32 +0,0 @@ -# frozen_string_literal: true - -class Hash - # Returns a new hash with the results of running +block+ once for every value. - # The keys are unchanged. - # - # { a: 1, b: 2, c: 3 }.transform_values { |x| x * 2 } # => { a: 2, b: 4, c: 6 } - # - # If you do not provide a +block+, it will return an Enumerator - # for chaining with other methods: - # - # { a: 1, b: 2 }.transform_values.with_index { |v, i| [v, i].join.to_i } # => { a: 10, b: 21 } - def transform_values - return enum_for(:transform_values) { size } unless block_given? - return {} if empty? - result = self.class.new - each do |key, value| - result[key] = yield(value) - end - result - end unless method_defined? :transform_values - - # Destructively converts all values using the +block+ operations. - # Same as +transform_values+ but modifies +self+. - def transform_values! - return enum_for(:transform_values!) { size } unless block_given? - each do |key, value| - self[key] = yield(value) - end - end unless method_defined? :transform_values! - # TODO: Remove this file when supporting only Ruby 2.4+. -end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/kernel/agnostics.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/kernel/agnostics.rb deleted file mode 100644 index 403b5f31f0..0000000000 --- a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/kernel/agnostics.rb +++ /dev/null @@ -1,13 +0,0 @@ -# frozen_string_literal: true - -class Object - # Makes backticks behave (somewhat more) similarly on all platforms. - # On win32 `nonexistent_command` raises Errno::ENOENT; on Unix, the - # spawned shell prints a message to stderr and sets $?. We emulate - # Unix on the former but not the latter. - def `(command) #:nodoc: - super - rescue Errno::ENOENT => e - STDERR.puts "#$0: #{e}" - end -end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/module/introspection.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/module/introspection.rb deleted file mode 100644 index c5bb598bd1..0000000000 --- a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/module/introspection.rb +++ /dev/null @@ -1,62 +0,0 @@ -# frozen_string_literal: true - -require "active_support/inflector" - -class Module - # Returns the name of the module containing this one. - # - # M::N.parent_name # => "M" - def parent_name - if defined?(@parent_name) - @parent_name - else - parent_name = name =~ /::[^:]+\Z/ ? $`.freeze : nil - @parent_name = parent_name unless frozen? - parent_name - end - end - - # Returns the module which contains this one according to its name. - # - # module M - # module N - # end - # end - # X = M::N - # - # M::N.parent # => M - # X.parent # => M - # - # The parent of top-level and anonymous modules is Object. - # - # M.parent # => Object - # Module.new.parent # => Object - def parent - parent_name ? ActiveSupport::Inflector.constantize(parent_name) : Object - end - - # Returns all the parents of this module according to its name, ordered from - # nested outwards. The receiver is not contained within the result. - # - # module M - # module N - # end - # end - # X = M::N - # - # M.parents # => [Object] - # M::N.parents # => [M, Object] - # X.parents # => [M, Object] - def parents - parents = [] - if parent_name - parts = parent_name.split("::") - until parts.empty? - parents << ActiveSupport::Inflector.constantize(parts * "::") - parts.pop - end - end - parents << Object unless parents.include? Object - parents - end -end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/numeric/conversions.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/numeric/conversions.rb deleted file mode 100644 index f6c2713986..0000000000 --- a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/numeric/conversions.rb +++ /dev/null @@ -1,140 +0,0 @@ -# frozen_string_literal: true - -require "active_support/core_ext/big_decimal/conversions" -require "active_support/number_helper" -require "active_support/core_ext/module/deprecation" - -module ActiveSupport::NumericWithFormat - # Provides options for converting numbers into formatted strings. - # Options are provided for phone numbers, currency, percentage, - # precision, positional notation, file size and pretty printing. - # - # ==== Options - # - # For details on which formats use which options, see ActiveSupport::NumberHelper - # - # ==== Examples - # - # Phone Numbers: - # 5551234.to_s(:phone) # => "555-1234" - # 1235551234.to_s(:phone) # => "123-555-1234" - # 1235551234.to_s(:phone, area_code: true) # => "(123) 555-1234" - # 1235551234.to_s(:phone, delimiter: ' ') # => "123 555 1234" - # 1235551234.to_s(:phone, area_code: true, extension: 555) # => "(123) 555-1234 x 555" - # 1235551234.to_s(:phone, country_code: 1) # => "+1-123-555-1234" - # 1235551234.to_s(:phone, country_code: 1, extension: 1343, delimiter: '.') - # # => "+1.123.555.1234 x 1343" - # - # Currency: - # 1234567890.50.to_s(:currency) # => "$1,234,567,890.50" - # 1234567890.506.to_s(:currency) # => "$1,234,567,890.51" - # 1234567890.506.to_s(:currency, precision: 3) # => "$1,234,567,890.506" - # 1234567890.506.to_s(:currency, locale: :fr) # => "1 234 567 890,51 €" - # -1234567890.50.to_s(:currency, negative_format: '(%u%n)') - # # => "($1,234,567,890.50)" - # 1234567890.50.to_s(:currency, unit: '£', separator: ',', delimiter: '') - # # => "£1234567890,50" - # 1234567890.50.to_s(:currency, unit: '£', separator: ',', delimiter: '', format: '%n %u') - # # => "1234567890,50 £" - # - # Percentage: - # 100.to_s(:percentage) # => "100.000%" - # 100.to_s(:percentage, precision: 0) # => "100%" - # 1000.to_s(:percentage, delimiter: '.', separator: ',') # => "1.000,000%" - # 302.24398923423.to_s(:percentage, precision: 5) # => "302.24399%" - # 1000.to_s(:percentage, locale: :fr) # => "1 000,000%" - # 100.to_s(:percentage, format: '%n %') # => "100.000 %" - # - # Delimited: - # 12345678.to_s(:delimited) # => "12,345,678" - # 12345678.05.to_s(:delimited) # => "12,345,678.05" - # 12345678.to_s(:delimited, delimiter: '.') # => "12.345.678" - # 12345678.to_s(:delimited, delimiter: ',') # => "12,345,678" - # 12345678.05.to_s(:delimited, separator: ' ') # => "12,345,678 05" - # 12345678.05.to_s(:delimited, locale: :fr) # => "12 345 678,05" - # 98765432.98.to_s(:delimited, delimiter: ' ', separator: ',') - # # => "98 765 432,98" - # - # Rounded: - # 111.2345.to_s(:rounded) # => "111.235" - # 111.2345.to_s(:rounded, precision: 2) # => "111.23" - # 13.to_s(:rounded, precision: 5) # => "13.00000" - # 389.32314.to_s(:rounded, precision: 0) # => "389" - # 111.2345.to_s(:rounded, significant: true) # => "111" - # 111.2345.to_s(:rounded, precision: 1, significant: true) # => "100" - # 13.to_s(:rounded, precision: 5, significant: true) # => "13.000" - # 111.234.to_s(:rounded, locale: :fr) # => "111,234" - # 13.to_s(:rounded, precision: 5, significant: true, strip_insignificant_zeros: true) - # # => "13" - # 389.32314.to_s(:rounded, precision: 4, significant: true) # => "389.3" - # 1111.2345.to_s(:rounded, precision: 2, separator: ',', delimiter: '.') - # # => "1.111,23" - # - # Human-friendly size in Bytes: - # 123.to_s(:human_size) # => "123 Bytes" - # 1234.to_s(:human_size) # => "1.21 KB" - # 12345.to_s(:human_size) # => "12.1 KB" - # 1234567.to_s(:human_size) # => "1.18 MB" - # 1234567890.to_s(:human_size) # => "1.15 GB" - # 1234567890123.to_s(:human_size) # => "1.12 TB" - # 1234567890123456.to_s(:human_size) # => "1.1 PB" - # 1234567890123456789.to_s(:human_size) # => "1.07 EB" - # 1234567.to_s(:human_size, precision: 2) # => "1.2 MB" - # 483989.to_s(:human_size, precision: 2) # => "470 KB" - # 1234567.to_s(:human_size, precision: 2, separator: ',') # => "1,2 MB" - # 1234567890123.to_s(:human_size, precision: 5) # => "1.1228 TB" - # 524288000.to_s(:human_size, precision: 5) # => "500 MB" - # - # Human-friendly format: - # 123.to_s(:human) # => "123" - # 1234.to_s(:human) # => "1.23 Thousand" - # 12345.to_s(:human) # => "12.3 Thousand" - # 1234567.to_s(:human) # => "1.23 Million" - # 1234567890.to_s(:human) # => "1.23 Billion" - # 1234567890123.to_s(:human) # => "1.23 Trillion" - # 1234567890123456.to_s(:human) # => "1.23 Quadrillion" - # 1234567890123456789.to_s(:human) # => "1230 Quadrillion" - # 489939.to_s(:human, precision: 2) # => "490 Thousand" - # 489939.to_s(:human, precision: 4) # => "489.9 Thousand" - # 1234567.to_s(:human, precision: 4, - # significant: false) # => "1.2346 Million" - # 1234567.to_s(:human, precision: 1, - # separator: ',', - # significant: false) # => "1,2 Million" - def to_s(format = nil, options = nil) - case format - when nil - super() - when Integer, String - super(format) - when :phone - ActiveSupport::NumberHelper.number_to_phone(self, options || {}) - when :currency - ActiveSupport::NumberHelper.number_to_currency(self, options || {}) - when :percentage - ActiveSupport::NumberHelper.number_to_percentage(self, options || {}) - when :delimited - ActiveSupport::NumberHelper.number_to_delimited(self, options || {}) - when :rounded - ActiveSupport::NumberHelper.number_to_rounded(self, options || {}) - when :human - ActiveSupport::NumberHelper.number_to_human(self, options || {}) - when :human_size - ActiveSupport::NumberHelper.number_to_human_size(self, options || {}) - when Symbol - super() - else - super(format) - end - end -end - -# Ruby 2.4+ unifies Fixnum & Bignum into Integer. -if 0.class == Integer - Integer.prepend ActiveSupport::NumericWithFormat -else - Fixnum.prepend ActiveSupport::NumericWithFormat - Bignum.prepend ActiveSupport::NumericWithFormat -end -Float.prepend ActiveSupport::NumericWithFormat -BigDecimal.prepend ActiveSupport::NumericWithFormat diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/numeric/inquiry.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/numeric/inquiry.rb deleted file mode 100644 index 15334c91f1..0000000000 --- a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/numeric/inquiry.rb +++ /dev/null @@ -1,28 +0,0 @@ -# frozen_string_literal: true - -unless 1.respond_to?(:positive?) # TODO: Remove this file when we drop support to ruby < 2.3 - class Numeric - # Returns true if the number is positive. - # - # 1.positive? # => true - # 0.positive? # => false - # -1.positive? # => false - def positive? - self > 0 - end - - # Returns true if the number is negative. - # - # -1.negative? # => true - # 0.negative? # => false - # 1.negative? # => false - def negative? - self < 0 - end - end - - class Complex - undef :positive? - undef :negative? - end -end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/object/duplicable.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/object/duplicable.rb deleted file mode 100644 index 9bb99087bc..0000000000 --- a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/object/duplicable.rb +++ /dev/null @@ -1,156 +0,0 @@ -# frozen_string_literal: true - -#-- -# Most objects are cloneable, but not all. For example you can't dup methods: -# -# method(:puts).dup # => TypeError: allocator undefined for Method -# -# Classes may signal their instances are not duplicable removing +dup+/+clone+ -# or raising exceptions from them. So, to dup an arbitrary object you normally -# use an optimistic approach and are ready to catch an exception, say: -# -# arbitrary_object.dup rescue object -# -# Rails dups objects in a few critical spots where they are not that arbitrary. -# That rescue is very expensive (like 40 times slower than a predicate), and it -# is often triggered. -# -# That's why we hardcode the following cases and check duplicable? instead of -# using that rescue idiom. -#++ -class Object - # Can you safely dup this object? - # - # False for method objects; - # true otherwise. - def duplicable? - true - end -end - -class NilClass - begin - nil.dup - rescue TypeError - - # +nil+ is not duplicable: - # - # nil.duplicable? # => false - # nil.dup # => TypeError: can't dup NilClass - def duplicable? - false - end - end -end - -class FalseClass - begin - false.dup - rescue TypeError - - # +false+ is not duplicable: - # - # false.duplicable? # => false - # false.dup # => TypeError: can't dup FalseClass - def duplicable? - false - end - end -end - -class TrueClass - begin - true.dup - rescue TypeError - - # +true+ is not duplicable: - # - # true.duplicable? # => false - # true.dup # => TypeError: can't dup TrueClass - def duplicable? - false - end - end -end - -class Symbol - begin - :symbol.dup # Ruby 2.4.x. - "symbol_from_string".to_sym.dup # Some symbols can't `dup` in Ruby 2.4.0. - rescue TypeError - - # Symbols are not duplicable: - # - # :my_symbol.duplicable? # => false - # :my_symbol.dup # => TypeError: can't dup Symbol - def duplicable? - false - end - end -end - -class Numeric - begin - 1.dup - rescue TypeError - - # Numbers are not duplicable: - # - # 3.duplicable? # => false - # 3.dup # => TypeError: can't dup Integer - def duplicable? - false - end - end -end - -require "bigdecimal" -class BigDecimal - # BigDecimals are duplicable: - # - # BigDecimal("1.2").duplicable? # => true - # BigDecimal("1.2").dup # => # - def duplicable? - true - end -end - -class Method - # Methods are not duplicable: - # - # method(:puts).duplicable? # => false - # method(:puts).dup # => TypeError: allocator undefined for Method - def duplicable? - false - end -end - -class Complex - begin - Complex(1).dup - rescue TypeError - - # Complexes are not duplicable: - # - # Complex(1).duplicable? # => false - # Complex(1).dup # => TypeError: can't copy Complex - def duplicable? - false - end - end -end - -class Rational - begin - Rational(1).dup - rescue TypeError - - # Rationals are not duplicable: - # - # Rational(1).duplicable? # => false - # Rational(1).dup # => TypeError: can't copy Rational - def duplicable? - false - end - end -end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/range/conversions.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/range/conversions.rb deleted file mode 100644 index 8832fbcb3c..0000000000 --- a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/range/conversions.rb +++ /dev/null @@ -1,39 +0,0 @@ -# frozen_string_literal: true - -module ActiveSupport::RangeWithFormat - RANGE_FORMATS = { - db: -> (start, stop) do - case start - when String then "BETWEEN '#{start}' AND '#{stop}'" - else - "BETWEEN '#{start.to_s(:db)}' AND '#{stop.to_s(:db)}'" - end - end - } - - # Convert range to a formatted string. See RANGE_FORMATS for predefined formats. - # - # range = (1..100) # => 1..100 - # - # range.to_s # => "1..100" - # range.to_s(:db) # => "BETWEEN '1' AND '100'" - # - # == Adding your own range formats to to_s - # You can add your own formats to the Range::RANGE_FORMATS hash. - # Use the format name as the hash key and a Proc instance. - # - # # config/initializers/range_formats.rb - # Range::RANGE_FORMATS[:short] = ->(start, stop) { "Between #{start.to_s(:db)} and #{stop.to_s(:db)}" } - def to_s(format = :default) - if formatter = RANGE_FORMATS[format] - formatter.call(first, last) - else - super() - end - end - - alias_method :to_default_s, :to_s - alias_method :to_formatted_s, :to_s -end - -Range.prepend(ActiveSupport::RangeWithFormat) diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/range/include_range.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/range/include_range.rb deleted file mode 100644 index 4812e274a3..0000000000 --- a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/range/include_range.rb +++ /dev/null @@ -1,3 +0,0 @@ -# frozen_string_literal: true - -require "active_support/core_ext/range/compare_range" diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/securerandom.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/securerandom.rb deleted file mode 100644 index b4a491f5fd..0000000000 --- a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/securerandom.rb +++ /dev/null @@ -1,25 +0,0 @@ -# frozen_string_literal: true - -require "securerandom" - -module SecureRandom - BASE58_ALPHABET = ("0".."9").to_a + ("A".."Z").to_a + ("a".."z").to_a - ["0", "O", "I", "l"] - # SecureRandom.base58 generates a random base58 string. - # - # The argument _n_ specifies the length, of the random string to be generated. - # - # If _n_ is not specified or is +nil+, 16 is assumed. It may be larger in the future. - # - # The result may contain alphanumeric characters except 0, O, I and l - # - # p SecureRandom.base58 # => "4kUgL2pdQMSCQtjE" - # p SecureRandom.base58(24) # => "77TMHrHJFvFDwodq8w7Ev2m7" - # - def self.base58(n = 16) - SecureRandom.random_bytes(n).unpack("C*").map do |byte| - idx = byte % 64 - idx = SecureRandom.random_number(58) if idx >= 58 - BASE58_ALPHABET[idx] - end.join - end -end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/descendants_tracker.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/descendants_tracker.rb deleted file mode 100644 index a4cee788b6..0000000000 --- a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/descendants_tracker.rb +++ /dev/null @@ -1,62 +0,0 @@ -# frozen_string_literal: true - -module ActiveSupport - # This module provides an internal implementation to track descendants - # which is faster than iterating through ObjectSpace. - module DescendantsTracker - @@direct_descendants = {} - - class << self - def direct_descendants(klass) - @@direct_descendants[klass] || [] - end - - def descendants(klass) - arr = [] - accumulate_descendants(klass, arr) - arr - end - - def clear - if defined? ActiveSupport::Dependencies - @@direct_descendants.each do |klass, descendants| - if ActiveSupport::Dependencies.autoloaded?(klass) - @@direct_descendants.delete(klass) - else - descendants.reject! { |v| ActiveSupport::Dependencies.autoloaded?(v) } - end - end - else - @@direct_descendants.clear - end - end - - # This is the only method that is not thread safe, but is only ever called - # during the eager loading phase. - def store_inherited(klass, descendant) - (@@direct_descendants[klass] ||= []) << descendant - end - - private - def accumulate_descendants(klass, acc) - if direct_descendants = @@direct_descendants[klass] - acc.concat(direct_descendants) - direct_descendants.each { |direct_descendant| accumulate_descendants(direct_descendant, acc) } - end - end - end - - def inherited(base) - DescendantsTracker.store_inherited(self, base) - super - end - - def direct_descendants - DescendantsTracker.direct_descendants(self) - end - - def descendants - DescendantsTracker.descendants(self) - end - end -end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/logger_silence.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/logger_silence.rb deleted file mode 100644 index 89f32b6782..0000000000 --- a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/logger_silence.rb +++ /dev/null @@ -1,29 +0,0 @@ -# frozen_string_literal: true - -require "active_support/concern" -require "active_support/core_ext/module/attribute_accessors" -require "concurrent" - -module LoggerSilence - extend ActiveSupport::Concern - - included do - cattr_accessor :silencer, default: true - end - - # Silences the logger for the duration of the block. - def silence(temporary_level = Logger::ERROR) - if silencer - begin - old_local_level = local_level - self.local_level = temporary_level - - yield self - ensure - self.local_level = old_local_level - end - else - yield self - end - end -end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/logger_thread_safe_level.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/logger_thread_safe_level.rb deleted file mode 100644 index ba32813d3d..0000000000 --- a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/logger_thread_safe_level.rb +++ /dev/null @@ -1,33 +0,0 @@ -# frozen_string_literal: true - -require "active_support/concern" - -module ActiveSupport - module LoggerThreadSafeLevel # :nodoc: - extend ActiveSupport::Concern - - def after_initialize - @local_levels = Concurrent::Map.new(initial_capacity: 2) - end - - def local_log_id - Thread.current.__id__ - end - - def local_level - @local_levels[local_log_id] - end - - def local_level=(level) - if level - @local_levels[local_log_id] = level - else - @local_levels.delete(local_log_id) - end - end - - def level - local_level || super - end - end -end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/notifications/instrumenter.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/notifications/instrumenter.rb deleted file mode 100644 index e99f5ee688..0000000000 --- a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/notifications/instrumenter.rb +++ /dev/null @@ -1,93 +0,0 @@ -# frozen_string_literal: true - -require "securerandom" - -module ActiveSupport - module Notifications - # Instrumenters are stored in a thread local. - class Instrumenter - attr_reader :id - - def initialize(notifier) - @id = unique_id - @notifier = notifier - end - - # Instrument the given block by measuring the time taken to execute it - # and publish it. Notice that events get sent even if an error occurs - # in the passed-in block. - def instrument(name, payload = {}) - # some of the listeners might have state - listeners_state = start name, payload - begin - yield payload - rescue Exception => e - payload[:exception] = [e.class.name, e.message] - payload[:exception_object] = e - raise e - ensure - finish_with_state listeners_state, name, payload - end - end - - # Send a start notification with +name+ and +payload+. - def start(name, payload) - @notifier.start name, @id, payload - end - - # Send a finish notification with +name+ and +payload+. - def finish(name, payload) - @notifier.finish name, @id, payload - end - - def finish_with_state(listeners_state, name, payload) - @notifier.finish name, @id, payload, listeners_state - end - - private - - def unique_id - SecureRandom.hex(10) - end - end - - class Event - attr_reader :name, :time, :transaction_id, :payload, :children - attr_accessor :end - - def initialize(name, start, ending, transaction_id, payload) - @name = name - @payload = payload.dup - @time = start - @transaction_id = transaction_id - @end = ending - @children = [] - @duration = nil - end - - # Returns the difference in milliseconds between when the execution of the - # event started and when it ended. - # - # ActiveSupport::Notifications.subscribe('wait') do |*args| - # @event = ActiveSupport::Notifications::Event.new(*args) - # end - # - # ActiveSupport::Notifications.instrument('wait') do - # sleep 1 - # end - # - # @event.duration # => 1000.138 - def duration - @duration ||= 1000.0 * (self.end - time) - end - - def <<(event) - @children << event - end - - def parent_of?(event) - @children.include? event - end - end - end -end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/test_case.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/test_case.rb deleted file mode 100644 index 69d69c84ef..0000000000 --- a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/test_case.rb +++ /dev/null @@ -1,72 +0,0 @@ -# frozen_string_literal: true - -gem "minitest" # make sure we get the gem, not stdlib -require "minitest" -require "active_support/testing/tagged_logging" -require "active_support/testing/setup_and_teardown" -require "active_support/testing/assertions" -require "active_support/testing/deprecation" -require "active_support/testing/declarative" -require "active_support/testing/isolation" -require "active_support/testing/constant_lookup" -require "active_support/testing/time_helpers" -require "active_support/testing/file_fixtures" - -module ActiveSupport - class TestCase < ::Minitest::Test - Assertion = Minitest::Assertion - - class << self - # Sets the order in which test cases are run. - # - # ActiveSupport::TestCase.test_order = :random # => :random - # - # Valid values are: - # * +:random+ (to run tests in random order) - # * +:parallel+ (to run tests in parallel) - # * +:sorted+ (to run tests alphabetically by method name) - # * +:alpha+ (equivalent to +:sorted+) - def test_order=(new_order) - ActiveSupport.test_order = new_order - end - - # Returns the order in which test cases are run. - # - # ActiveSupport::TestCase.test_order # => :random - # - # Possible values are +:random+, +:parallel+, +:alpha+, +:sorted+. - # Defaults to +:random+. - def test_order - ActiveSupport.test_order ||= :random - end - end - - alias_method :method_name, :name - - include ActiveSupport::Testing::TaggedLogging - prepend ActiveSupport::Testing::SetupAndTeardown - include ActiveSupport::Testing::Assertions - include ActiveSupport::Testing::Deprecation - include ActiveSupport::Testing::TimeHelpers - include ActiveSupport::Testing::FileFixtures - extend ActiveSupport::Testing::Declarative - - # test/unit backwards compatibility methods - alias :assert_raise :assert_raises - alias :assert_not_empty :refute_empty - alias :assert_not_equal :refute_equal - alias :assert_not_in_delta :refute_in_delta - alias :assert_not_in_epsilon :refute_in_epsilon - alias :assert_not_includes :refute_includes - alias :assert_not_instance_of :refute_instance_of - alias :assert_not_kind_of :refute_kind_of - alias :assert_no_match :refute_match - alias :assert_not_nil :refute_nil - alias :assert_not_operator :refute_operator - alias :assert_not_predicate :refute_predicate - alias :assert_not_respond_to :refute_respond_to - alias :assert_not_same :refute_same - - ActiveSupport.run_load_hooks(:active_support_test_case, self) - end -end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/values/unicode_tables.dat b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/values/unicode_tables.dat deleted file mode 100644 index f7d9c48bbe80b850c449cc42a89071055186f042..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1116857 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
Vx`{0LQYMTYFg=#Je$`-sg{+@ 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

1rfES|OxuF2n63p`F?|cNVuluE#f&Y; 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 =PT5r?}VM;zgT9C4%za>P+C$Pq`oAV(bIf*f(I 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 diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/actionable_error.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/actionable_error.rb new file mode 100644 index 0000000000..7db14cd178 --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/actionable_error.rb @@ -0,0 +1,48 @@ +# frozen_string_literal: true + +module ActiveSupport + # Actionable errors let's you define actions to resolve an error. + # + # To make an error actionable, include the ActiveSupport::ActionableError + # module and invoke the +action+ class macro to define the action. An action + # needs a name and a block to execute. + module ActionableError + extend Concern + + class NonActionable < StandardError; end + + included do + class_attribute :_actions, default: {} + end + + def self.actions(error) # :nodoc: + case error + when ActionableError, -> it { Class === it && it < ActionableError } + error._actions + else + {} + end + end + + def self.dispatch(error, name) # :nodoc: + actions(error).fetch(name).call + rescue KeyError + raise NonActionable, "Cannot find action \"#{name}\"" + end + + module ClassMethods + # Defines an action that can resolve the error. + # + # class PendingMigrationError < MigrationError + # include ActiveSupport::ActionableError + # + # action "Run pending migrations" do + # ActiveRecord::Tasks::DatabaseTasks.migrate + # end + # end + def action(name, &block) + _actions[name] = block + end + end + end +end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/array_inquirer.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/array_inquirer.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/array_inquirer.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/array_inquirer.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/backtrace_cleaner.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/backtrace_cleaner.rb similarity index 82% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/backtrace_cleaner.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/backtrace_cleaner.rb index 16dd733ddb..02cbfbaee6 100644 --- a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/backtrace_cleaner.rb +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/backtrace_cleaner.rb @@ -31,6 +31,9 @@ module ActiveSupport class BacktraceCleaner def initialize @filters, @silencers = [], [] + add_gem_filter + add_gem_silencer + add_stdlib_silencer end # Returns the backtrace after all filters and silencers have been run @@ -82,6 +85,26 @@ module ActiveSupport end private + + FORMATTED_GEMS_PATTERN = /\A[^\/]+ \([\w.]+\) / + + def add_gem_filter + gems_paths = (Gem.path | [Gem.default_dir]).map { |p| Regexp.escape(p) } + return if gems_paths.empty? + + gems_regexp = %r{(#{gems_paths.join('|')})/(bundler/)?gems/([^/]+)-([\w.]+)/(.*)} + gems_result = '\3 (\4) \5' + add_filter { |line| line.sub(gems_regexp, gems_result) } + end + + def add_gem_silencer + add_silencer { |line| FORMATTED_GEMS_PATTERN.match?(line) } + end + + def add_stdlib_silencer + add_silencer { |line| line.start_with?(RbConfig::CONFIG["rubylibdir"]) } + end + def filter_backtrace(backtrace) @filters.each do |f| backtrace = backtrace.map { |line| f.call(line) } @@ -99,7 +122,11 @@ module ActiveSupport end def noise(backtrace) - backtrace - silence(backtrace) + backtrace.select do |line| + @silencers.any? do |s| + s.call(line) + end + end end end end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/benchmarkable.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/benchmarkable.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/benchmarkable.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/benchmarkable.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/builder.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/builder.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/builder.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/builder.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/callbacks.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/callbacks.rb similarity index 97% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/callbacks.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/callbacks.rb index 9a3728d986..d0644a0f7e 100644 --- a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/callbacks.rb +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/callbacks.rb @@ -23,6 +23,9 @@ module ActiveSupport # +ClassMethods.set_callback+), and run the installed callbacks at the # appropriate times (via +run_callbacks+). # + # By default callbacks are halted by throwing +:abort+. + # See +ClassMethods.define_callbacks+ for details. + # # Three kinds of callbacks are supported: before callbacks, run before a # certain event; after callbacks, run after the event; and around callbacks, # blocks that surround the event, triggering it when they yield. Callback code @@ -497,9 +500,7 @@ module ActiveSupport arg.halted || !@user_conditions.all? { |c| c.call(arg.target, arg.value) } end - def nested - @nested - end + attr_reader :nested def final? !@call_template @@ -578,7 +579,7 @@ module ActiveSupport end protected - def chain; @chain; end + attr_reader :chain private @@ -659,9 +660,17 @@ module ActiveSupport # * :if - A symbol or an array of symbols, each naming an instance # method or a proc; the callback will be called only when they all return # a true value. + # + # If a proc is given, its body is evaluated in the context of the + # current object. It can also optionally accept the current object as + # an argument. # * :unless - A symbol or an array of symbols, each naming an # instance method or a proc; the callback will be called only when they # all return a false value. + # + # If a proc is given, its body is evaluated in the context of the + # current object. It can also optionally accept the current object as + # an argument. # * :prepend - If +true+, the callback will be prepended to the # existing chain rather than appended. def set_callback(name, *filter_list, &block) @@ -809,7 +818,9 @@ module ActiveSupport names.each do |name| name = name.to_sym - set_callbacks name, CallbackChain.new(name, options) + ([self] + ActiveSupport::DescendantsTracker.descendants(self)).each do |target| + target.set_callbacks name, CallbackChain.new(name, options) + end module_eval <<-RUBY, __FILE__, __LINE__ + 1 def _run_#{name}_callbacks(&block) diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/concern.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/concern.rb similarity index 83% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/concern.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/concern.rb index 5d356a0ab6..708c445031 100644 --- a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/concern.rb +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/concern.rb @@ -110,7 +110,7 @@ module ActiveSupport base.instance_variable_set(:@_dependencies, []) end - def append_features(base) + def append_features(base) #:nodoc: if base.instance_variable_defined?(:@_dependencies) base.instance_variable_get(:@_dependencies) << self false @@ -123,6 +123,9 @@ module ActiveSupport end end + # Evaluate given block in context of base class, + # so that you can write class macros here. + # When you define more than one +included+ block, it raises an exception. def included(base = nil, &block) if base.nil? if instance_variable_defined?(:@_included_block) @@ -137,6 +140,26 @@ module ActiveSupport end end + # Define class methods from given block. + # You can define private class methods as well. + # + # module Example + # extend ActiveSupport::Concern + # + # class_methods do + # def foo; puts 'foo'; end + # + # private + # def bar; puts 'bar'; end + # end + # end + # + # class Buzz + # include Example + # end + # + # Buzz.foo # => "foo" + # Buzz.bar # => private method 'bar' called for Buzz:Class(NoMethodError) def class_methods(&class_methods_module_definition) mod = const_defined?(:ClassMethods, false) ? const_get(:ClassMethods) : diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/configurable.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/configurable.rb similarity index 86% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/configurable.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/configurable.rb index 4d6f7819bb..71c23dae9b 100644 --- a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/configurable.rb +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/configurable.rb @@ -2,8 +2,6 @@ require "active_support/concern" require "active_support/ordered_options" -require "active_support/core_ext/array/extract_options" -require "active_support/core_ext/regexp" module ActiveSupport # Configurable provides a config method to store and retrieve @@ -69,8 +67,8 @@ module ActiveSupport # end # # => NameError: invalid config attribute name # - # To opt out of the instance writer method, pass instance_writer: false. - # To opt out of the instance reader method, pass instance_reader: false. + # To omit the instance writer method, pass instance_writer: false. + # To omit the instance reader method, pass instance_reader: false. # # class User # include ActiveSupport::Configurable @@ -83,7 +81,7 @@ module ActiveSupport # User.new.allowed_access = true # => NoMethodError # User.new.allowed_access # => NoMethodError # - # Or pass instance_accessor: false, to opt out both instance methods. + # Or pass instance_accessor: false, to omit both instance methods. # # class User # include ActiveSupport::Configurable @@ -106,9 +104,7 @@ module ActiveSupport # end # # User.hair_colors # => [:brown, :black, :blonde, :red] - def config_accessor(*names) - options = names.extract_options! - + def config_accessor(*names, instance_reader: true, instance_writer: true, instance_accessor: true) # :doc: names.each do |name| raise NameError.new("invalid config attribute name") unless /\A[_A-Za-z]\w*\z/.match?(name) @@ -118,9 +114,9 @@ module ActiveSupport singleton_class.class_eval reader, __FILE__, reader_line singleton_class.class_eval writer, __FILE__, writer_line - unless options[:instance_accessor] == false - class_eval reader, __FILE__, reader_line unless options[:instance_reader] == false - class_eval writer, __FILE__, writer_line unless options[:instance_writer] == false + if instance_accessor + class_eval reader, __FILE__, reader_line if instance_reader + class_eval writer, __FILE__, writer_line if instance_writer end send("#{name}=", yield) if block_given? end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/array.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/array.rb similarity index 84% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/array.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/array.rb index 6d83b76882..88b6567712 100644 --- a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/array.rb +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/array.rb @@ -3,7 +3,7 @@ require "active_support/core_ext/array/wrap" require "active_support/core_ext/array/access" require "active_support/core_ext/array/conversions" +require "active_support/core_ext/array/extract" require "active_support/core_ext/array/extract_options" require "active_support/core_ext/array/grouping" -require "active_support/core_ext/array/prepend_and_append" require "active_support/core_ext/array/inquiry" diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/array/access.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/array/access.rb similarity index 71% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/array/access.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/array/access.rb index b7ff7a3907..ea01e5891c 100644 --- a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/array/access.rb +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/array/access.rb @@ -29,16 +29,28 @@ class Array end end - # Returns a copy of the Array without the specified elements. + # Returns a new array that includes the passed elements. # - # people = ["David", "Rafael", "Aaron", "Todd"] - # people.without "Aaron", "Todd" - # # => ["David", "Rafael"] + # [ 1, 2, 3 ].including(4, 5) # => [ 1, 2, 3, 4, 5 ] + # [ [ 0, 1 ] ].including([ [ 1, 0 ] ]) # => [ [ 0, 1 ], [ 1, 0 ] ] + def including(*elements) + self + elements.flatten(1) + end + + # Returns a copy of the Array excluding the specified elements. # - # Note: This is an optimization of Enumerable#without that uses Array#- + # ["David", "Rafael", "Aaron", "Todd"].excluding("Aaron", "Todd") # => ["David", "Rafael"] + # [ [ 0, 1 ], [ 1, 0 ] ].excluding([ [ 1, 0 ] ]) # => [ [ 0, 1 ] ] + # + # Note: This is an optimization of Enumerable#excluding that uses Array#- # instead of Array#reject for performance reasons. + def excluding(*elements) + self - elements.flatten(1) + end + + # Alias for #excluding. def without(*elements) - self - elements + excluding(*elements) end # Equal to self[1]. diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/array/conversions.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/array/conversions.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/array/conversions.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/array/conversions.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/array/extract.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/array/extract.rb new file mode 100644 index 0000000000..cc5a8a3f88 --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/array/extract.rb @@ -0,0 +1,21 @@ +# frozen_string_literal: true + +class Array + # Removes and returns the elements for which the block returns a true value. + # If no block is given, an Enumerator is returned instead. + # + # numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] + # odd_numbers = numbers.extract! { |number| number.odd? } # => [1, 3, 5, 7, 9] + # numbers # => [0, 2, 4, 6, 8] + def extract! + return to_enum(:extract!) { size } unless block_given? + + extracted_elements = [] + + reject! do |element| + extracted_elements << element if yield(element) + end + + extracted_elements + end +end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/array/extract_options.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/array/extract_options.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/array/extract_options.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/array/extract_options.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/array/grouping.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/array/grouping.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/array/grouping.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/array/grouping.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/array/inquiry.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/array/inquiry.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/array/inquiry.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/array/inquiry.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/array/prepend_and_append.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/array/prepend_and_append.rb new file mode 100644 index 0000000000..ba3739f640 --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/array/prepend_and_append.rb @@ -0,0 +1,5 @@ +# frozen_string_literal: true + +require "active_support/deprecation" + +ActiveSupport::Deprecation.warn "Ruby 2.5+ (required by Rails 6) provides Array#append and Array#prepend natively, so requiring active_support/core_ext/array/prepend_and_append is no longer necessary. Requiring it will raise LoadError in Rails 6.1." diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/array/wrap.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/array/wrap.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/array/wrap.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/array/wrap.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/benchmark.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/benchmark.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/benchmark.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/benchmark.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/big_decimal.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/big_decimal.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/big_decimal.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/big_decimal.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/big_decimal/conversions.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/big_decimal/conversions.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/big_decimal/conversions.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/big_decimal/conversions.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/class.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/class.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/class.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/class.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/class/attribute.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/class/attribute.rb similarity index 87% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/class/attribute.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/class/attribute.rb index 7928efb871..255cbee55c 100644 --- a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/class/attribute.rb +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/class/attribute.rb @@ -84,27 +84,26 @@ class Class # To set a default value for the attribute, pass default:, like so: # # class_attribute :settings, default: {} - def class_attribute(*attrs) - options = attrs.extract_options! - instance_reader = options.fetch(:instance_accessor, true) && options.fetch(:instance_reader, true) - instance_writer = options.fetch(:instance_accessor, true) && options.fetch(:instance_writer, true) - instance_predicate = options.fetch(:instance_predicate, true) - default_value = options.fetch(:default, nil) - + def class_attribute( + *attrs, + instance_accessor: true, + instance_reader: instance_accessor, + instance_writer: instance_accessor, + instance_predicate: true, + default: nil + ) attrs.each do |name| singleton_class.silence_redefinition_of_method(name) - define_singleton_method(name) { nil } + define_singleton_method(name) { default } singleton_class.silence_redefinition_of_method("#{name}?") define_singleton_method("#{name}?") { !!public_send(name) } if instance_predicate - ivar = "@#{name}" + ivar = "@#{name}".to_sym singleton_class.silence_redefinition_of_method("#{name}=") define_singleton_method("#{name}=") do |val| - singleton_class.class_eval do - redefine_method(name) { val } - end + redefine_singleton_method(name) { val } if singleton_class? class_eval do @@ -137,10 +136,6 @@ class Class instance_variable_set ivar, val end end - - unless default_value.nil? - self.send("#{name}=", default_value) - end end end end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/class/attribute_accessors.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/class/attribute_accessors.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/class/attribute_accessors.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/class/attribute_accessors.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/class/subclasses.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/class/subclasses.rb similarity index 95% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/class/subclasses.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/class/subclasses.rb index 75e65337b7..56fb46a88d 100644 --- a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/class/subclasses.rb +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/class/subclasses.rb @@ -3,7 +3,7 @@ class Class begin # Test if this Ruby supports each_object against singleton_class - ObjectSpace.each_object(Numeric.singleton_class) {} + ObjectSpace.each_object(Numeric.singleton_class) { } # Returns an array with all classes that are < than its receiver. # diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/date.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/date.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/date.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/date.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/date/acts_like.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/date/acts_like.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/date/acts_like.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/date/acts_like.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/date/blank.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/date/blank.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/date/blank.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/date/blank.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/date/calculations.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/date/calculations.rb similarity index 94% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/date/calculations.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/date/calculations.rb index 1cd7acb05d..d03a8d3997 100644 --- a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/date/calculations.rb +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/date/calculations.rb @@ -110,12 +110,13 @@ class Date # Provides precise Date calculations for years, months, and days. The +options+ parameter takes a hash with # any of these keys: :years, :months, :weeks, :days. def advance(options) - options = options.dup d = self - d = d >> options.delete(:years) * 12 if options[:years] - d = d >> options.delete(:months) if options[:months] - d = d + options.delete(:weeks) * 7 if options[:weeks] - d = d + options.delete(:days) if options[:days] + + d = d >> options[:years] * 12 if options[:years] + d = d >> options[:months] if options[:months] + d = d + options[:weeks] * 7 if options[:weeks] + d = d + options[:days] if options[:days] + d end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/date/conversions.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/date/conversions.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/date/conversions.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/date/conversions.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/date/zones.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/date/zones.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/date/zones.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/date/zones.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/date_and_time/calculations.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/date_and_time/calculations.rb similarity index 87% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/date_and_time/calculations.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/date_and_time/calculations.rb index f6cb1a384c..c7a2378e41 100644 --- a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/date_and_time/calculations.rb +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/date_and_time/calculations.rb @@ -5,13 +5,13 @@ require "active_support/core_ext/object/try" module DateAndTime module Calculations DAYS_INTO_WEEK = { - monday: 0, - tuesday: 1, - wednesday: 2, - thursday: 3, - friday: 4, - saturday: 5, - sunday: 6 + sunday: 0, + monday: 1, + tuesday: 2, + wednesday: 3, + thursday: 4, + friday: 5, + saturday: 6 } WEEKEND_DAYS = [ 6, 0 ] @@ -20,21 +20,11 @@ module DateAndTime advance(days: -1) end - # Returns a new date/time the specified number of days ago. - def prev_day(days = 1) - advance(days: -days) - end - # Returns a new date/time representing tomorrow. def tomorrow advance(days: 1) end - # Returns a new date/time the specified number of days in the future. - def next_day(days = 1) - advance(days: days) - end - # Returns true if the date/time is today. def today? to_date == ::Date.current @@ -60,6 +50,16 @@ module DateAndTime !WEEKEND_DAYS.include?(wday) end + # Returns true if the date/time falls before date_or_time. + def before?(date_or_time) + self < date_or_time + end + + # Returns true if the date/time falls after date_or_time. + def after?(date_or_time) + self > date_or_time + end + # Returns a new date/time the specified number of days ago. def days_ago(days) advance(days: -days) @@ -124,7 +124,7 @@ module DateAndTime # now = DateTime.current # => Fri, 10 Jul 2015 18:41:29 +0000 # now.beginning_of_quarter # => Wed, 01 Jul 2015 00:00:00 +0000 def beginning_of_quarter - first_quarter_month = [10, 7, 4, 1].detect { |m| m <= month } + first_quarter_month = month - (2 + month) % 3 beginning_of_month.change(month: first_quarter_month) end alias :at_beginning_of_quarter :beginning_of_quarter @@ -139,7 +139,7 @@ module DateAndTime # now = DateTime.current # => Fri, 10 Jul 2015 18:41:29 +0000 # now.end_of_quarter # => Wed, 30 Sep 2015 23:59:59 +0000 def end_of_quarter - last_quarter_month = [3, 6, 9, 12].detect { |m| m >= month } + last_quarter_month = month + (12 - month) % 3 beginning_of_month.change(month: last_quarter_month).end_of_month end alias :at_end_of_quarter :end_of_quarter @@ -188,21 +188,11 @@ module DateAndTime end end - # Returns a new date/time the specified number of months in the future. - def next_month(months = 1) - advance(months: months) - end - # Short-hand for months_since(3) def next_quarter months_since(3) end - # Returns a new date/time the specified number of years in the future. - def next_year(years = 1) - advance(years: years) - end - # Returns a new date/time representing the given day in the previous week. # Week is assumed to start on +start_day+, default is # +Date.beginning_of_week+ or +config.beginning_of_week+ when set. @@ -223,11 +213,6 @@ module DateAndTime end alias_method :last_weekday, :prev_weekday - # Returns a new date/time the specified number of months ago. - def prev_month(months = 1) - advance(months: -months) - end - # Short-hand for months_ago(1). def last_month months_ago(1) @@ -239,11 +224,6 @@ module DateAndTime end alias_method :last_quarter, :prev_quarter - # Returns a new date/time the specified number of years ago. - def prev_year(years = 1) - advance(years: -years) - end - # Short-hand for years_ago(1). def last_year years_ago(1) @@ -253,9 +233,8 @@ module DateAndTime # Week is assumed to start on +start_day+, default is # +Date.beginning_of_week+ or +config.beginning_of_week+ when set. def days_to_week_start(start_day = Date.beginning_of_week) - start_day_number = DAYS_INTO_WEEK[start_day] - current_day_number = wday != 0 ? wday - 1 : 6 - (current_day_number - start_day_number) % 7 + start_day_number = DAYS_INTO_WEEK.fetch(start_day) + (wday - start_day_number) % 7 end # Returns a new date/time representing the start of this week on the given day. @@ -336,8 +315,7 @@ module DateAndTime # today.next_occurring(:monday) # => Mon, 18 Dec 2017 # today.next_occurring(:thursday) # => Thu, 21 Dec 2017 def next_occurring(day_of_week) - current_day_number = wday != 0 ? wday - 1 : 6 - from_now = DAYS_INTO_WEEK.fetch(day_of_week) - current_day_number + from_now = DAYS_INTO_WEEK.fetch(day_of_week) - wday from_now += 7 unless from_now > 0 advance(days: from_now) end @@ -348,8 +326,7 @@ module DateAndTime # today.prev_occurring(:monday) # => Mon, 11 Dec 2017 # today.prev_occurring(:thursday) # => Thu, 07 Dec 2017 def prev_occurring(day_of_week) - current_day_number = wday != 0 ? wday - 1 : 6 - ago = current_day_number - DAYS_INTO_WEEK.fetch(day_of_week) + ago = wday - DAYS_INTO_WEEK.fetch(day_of_week) ago += 7 unless ago > 0 advance(days: -ago) end @@ -364,7 +341,7 @@ module DateAndTime end def days_span(day) - (DAYS_INTO_WEEK[day] - DAYS_INTO_WEEK[Date.beginning_of_week]) % 7 + (DAYS_INTO_WEEK.fetch(day) - DAYS_INTO_WEEK.fetch(Date.beginning_of_week)) % 7 end def copy_time_to(other) diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/date_and_time/compatibility.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/date_and_time/compatibility.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/date_and_time/compatibility.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/date_and_time/compatibility.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/date_and_time/zones.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/date_and_time/zones.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/date_and_time/zones.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/date_and_time/zones.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/date_time.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/date_time.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/date_time.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/date_time.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/date_time/acts_like.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/date_time/acts_like.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/date_time/acts_like.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/date_time/acts_like.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/date_time/blank.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/date_time/blank.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/date_time/blank.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/date_time/blank.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/date_time/calculations.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/date_time/calculations.rb similarity index 99% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/date_time/calculations.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/date_time/calculations.rb index e61b23f842..bc670c3e76 100644 --- a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/date_time/calculations.rb +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/date_time/calculations.rb @@ -110,7 +110,7 @@ class DateTime # instance time. Do not use this method in combination with x.months, use # months_since instead! def since(seconds) - self + Rational(seconds.round, 86400) + self + Rational(seconds, 86400) end alias :in :since diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/date_time/compatibility.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/date_time/compatibility.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/date_time/compatibility.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/date_time/compatibility.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/date_time/conversions.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/date_time/conversions.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/date_time/conversions.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/date_time/conversions.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/digest.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/digest.rb new file mode 100644 index 0000000000..ce1427e13a --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/digest.rb @@ -0,0 +1,3 @@ +# frozen_string_literal: true + +require "active_support/core_ext/digest/uuid" diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/digest/uuid.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/digest/uuid.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/digest/uuid.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/digest/uuid.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/enumerable.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/enumerable.rb new file mode 100644 index 0000000000..4675c41936 --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/enumerable.rb @@ -0,0 +1,188 @@ +# frozen_string_literal: true + +module Enumerable + INDEX_WITH_DEFAULT = Object.new + private_constant :INDEX_WITH_DEFAULT + + # Enumerable#sum was added in Ruby 2.4, but it only works with Numeric elements + # when we omit an identity. + + # :stopdoc: + + # We can't use Refinements here because Refinements with Module which will be prepended + # doesn't work well https://bugs.ruby-lang.org/issues/13446 + alias :_original_sum_with_required_identity :sum + private :_original_sum_with_required_identity + + # :startdoc: + + # Calculates a sum from the elements. + # + # payments.sum { |p| p.price * p.tax_rate } + # payments.sum(&:price) + # + # The latter is a shortcut for: + # + # payments.inject(0) { |sum, p| sum + p.price } + # + # It can also calculate the sum without the use of a block. + # + # [5, 15, 10].sum # => 30 + # ['foo', 'bar'].sum # => "foobar" + # [[1, 2], [3, 1, 5]].sum # => [1, 2, 3, 1, 5] + # + # The default sum of an empty list is zero. You can override this default: + # + # [].sum(Payment.new(0)) { |i| i.amount } # => Payment.new(0) + def sum(identity = nil, &block) + if identity + _original_sum_with_required_identity(identity, &block) + elsif block_given? + map(&block).sum(identity) + else + inject(:+) || 0 + end + end + + # Convert an enumerable to a hash keying it by the block return value. + # + # people.index_by(&:login) + # # => { "nextangle" => , "chade-" => , ...} + # + # people.index_by { |person| "#{person.first_name} #{person.last_name}" } + # # => { "Chade- Fowlersburg-e" => , "David Heinemeier Hansson" => , ...} + def index_by + if block_given? + result = {} + each { |elem| result[yield(elem)] = elem } + result + else + to_enum(:index_by) { size if respond_to?(:size) } + end + end + + # Convert an enumerable to a hash keying it with the enumerable items and with the values returned in the block. + # + # post = Post.new(title: "hey there", body: "what's up?") + # + # %i( title body ).index_with { |attr_name| post.public_send(attr_name) } + # # => { title: "hey there", body: "what's up?" } + def index_with(default = INDEX_WITH_DEFAULT) + if block_given? + result = {} + each { |elem| result[elem] = yield(elem) } + result + elsif default != INDEX_WITH_DEFAULT + result = {} + each { |elem| result[elem] = default } + result + else + to_enum(:index_with) { size if respond_to?(:size) } + end + end + + # Returns +true+ if the enumerable has more than 1 element. Functionally + # equivalent to enum.to_a.size > 1. Can be called with a block too, + # much like any?, so people.many? { |p| p.age > 26 } returns +true+ + # if more than one person is over 26. + def many? + cnt = 0 + if block_given? + any? do |element| + cnt += 1 if yield element + cnt > 1 + end + else + any? { (cnt += 1) > 1 } + end + end + + # Returns a new array that includes the passed elements. + # + # [ 1, 2, 3 ].including(4, 5) + # # => [ 1, 2, 3, 4, 5 ] + # + # ["David", "Rafael"].including %w[ Aaron Todd ] + # # => ["David", "Rafael", "Aaron", "Todd"] + def including(*elements) + to_a.including(*elements) + end + + # The negative of the Enumerable#include?. Returns +true+ if the + # collection does not include the object. + def exclude?(object) + !include?(object) + end + + # Returns a copy of the enumerable excluding the specified elements. + # + # ["David", "Rafael", "Aaron", "Todd"].excluding "Aaron", "Todd" + # # => ["David", "Rafael"] + # + # ["David", "Rafael", "Aaron", "Todd"].excluding %w[ Aaron Todd ] + # # => ["David", "Rafael"] + # + # {foo: 1, bar: 2, baz: 3}.excluding :bar + # # => {foo: 1, baz: 3} + def excluding(*elements) + elements.flatten!(1) + reject { |element| elements.include?(element) } + end + + # Alias for #excluding. + def without(*elements) + excluding(*elements) + end + + # Convert an enumerable to an array based on the given key. + # + # [{ name: "David" }, { name: "Rafael" }, { name: "Aaron" }].pluck(:name) + # # => ["David", "Rafael", "Aaron"] + # + # [{ id: 1, name: "David" }, { id: 2, name: "Rafael" }].pluck(:id, :name) + # # => [[1, "David"], [2, "Rafael"]] + def pluck(*keys) + if keys.many? + map { |element| keys.map { |key| element[key] } } + else + map { |element| element[keys.first] } + end + end +end + +class Range #:nodoc: + # Optimize range sum to use arithmetic progression if a block is not given and + # we have a range of numeric values. + def sum(identity = nil) + if block_given? || !(first.is_a?(Integer) && last.is_a?(Integer)) + super + else + actual_last = exclude_end? ? (last - 1) : last + if actual_last >= first + sum = identity || 0 + sum + (actual_last - first + 1) * (actual_last + first) / 2 + else + identity || 0 + end + end + end +end + +# Using Refinements here in order not to expose our internal method +using Module.new { + refine Array do + alias :orig_sum :sum + end +} + +class Array #:nodoc: + # Array#sum was added in Ruby 2.4 but it only works with Numeric elements. + def sum(init = nil, &block) + if init.is_a?(Numeric) || first.is_a?(Numeric) + init ||= 0 + orig_sum(init, &block) + else + super + end + end +end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/file.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/file.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/file.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/file.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/file/atomic.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/file/atomic.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/file/atomic.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/file/atomic.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/hash.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/hash.rb similarity index 78% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/hash.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/hash.rb index e19aeaa983..2f0901d853 100644 --- a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/hash.rb +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/hash.rb @@ -1,11 +1,10 @@ # frozen_string_literal: true -require "active_support/core_ext/hash/compact" require "active_support/core_ext/hash/conversions" require "active_support/core_ext/hash/deep_merge" +require "active_support/core_ext/hash/deep_transform_values" require "active_support/core_ext/hash/except" require "active_support/core_ext/hash/indifferent_access" require "active_support/core_ext/hash/keys" require "active_support/core_ext/hash/reverse_merge" require "active_support/core_ext/hash/slice" -require "active_support/core_ext/hash/transform_values" diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/hash/compact.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/hash/compact.rb new file mode 100644 index 0000000000..5cb858af5c --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/hash/compact.rb @@ -0,0 +1,5 @@ +# frozen_string_literal: true + +require "active_support/deprecation" + +ActiveSupport::Deprecation.warn "Ruby 2.5+ (required by Rails 6) provides Hash#compact and Hash#compact! natively, so requiring active_support/core_ext/hash/compact is no longer necessary. Requiring it will raise LoadError in Rails 6.1." diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/hash/conversions.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/hash/conversions.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/hash/conversions.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/hash/conversions.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/hash/deep_merge.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/hash/deep_merge.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/hash/deep_merge.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/hash/deep_merge.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/hash/deep_transform_values.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/hash/deep_transform_values.rb new file mode 100644 index 0000000000..18acb1e70c --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/hash/deep_transform_values.rb @@ -0,0 +1,46 @@ +# frozen_string_literal: true + +class Hash + # Returns a new hash with all values converted by the block operation. + # This includes the values from the root hash and from all + # nested hashes and arrays. + # + # hash = { person: { name: 'Rob', age: '28' } } + # + # hash.deep_transform_values{ |value| value.to_s.upcase } + # # => {person: {name: "ROB", age: "28"}} + def deep_transform_values(&block) + _deep_transform_values_in_object(self, &block) + end + + # Destructively converts all values by using the block operation. + # This includes the values from the root hash and from all + # nested hashes and arrays. + def deep_transform_values!(&block) + _deep_transform_values_in_object!(self, &block) + end + + private + # support methods for deep transforming nested hashes and arrays + def _deep_transform_values_in_object(object, &block) + case object + when Hash + object.transform_values { |value| _deep_transform_values_in_object(value, &block) } + when Array + object.map { |e| _deep_transform_values_in_object(e, &block) } + else + yield(object) + end + end + + def _deep_transform_values_in_object!(object, &block) + case object + when Hash + object.transform_values! { |value| _deep_transform_values_in_object!(value, &block) } + when Array + object.map! { |e| _deep_transform_values_in_object!(e, &block) } + else + yield(object) + end + end +end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/hash/except.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/hash/except.rb similarity index 96% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/hash/except.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/hash/except.rb index 6258610c98..5013812460 100644 --- a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/hash/except.rb +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/hash/except.rb @@ -10,7 +10,7 @@ class Hash # This is useful for limiting a set of parameters to everything but a few known toggles: # @person.update(params[:person].except(:admin)) def except(*keys) - dup.except!(*keys) + slice(*self.keys - keys) end # Removes the given keys from hash and returns it. diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/hash/indifferent_access.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/hash/indifferent_access.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/hash/indifferent_access.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/hash/indifferent_access.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/hash/keys.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/hash/keys.rb similarity index 82% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/hash/keys.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/hash/keys.rb index bdf196ec3d..7d3495db2c 100644 --- a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/hash/keys.rb +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/hash/keys.rb @@ -1,35 +1,6 @@ # frozen_string_literal: true class Hash - # Returns a new hash with all keys converted using the +block+ operation. - # - # hash = { name: 'Rob', age: '28' } - # - # hash.transform_keys { |key| key.to_s.upcase } # => {"NAME"=>"Rob", "AGE"=>"28"} - # - # If you do not provide a +block+, it will return an Enumerator - # for chaining with other methods: - # - # hash.transform_keys.with_index { |k, i| [k, i].join } # => {"name0"=>"Rob", "age1"=>"28"} - def transform_keys - return enum_for(:transform_keys) { size } unless block_given? - result = {} - each_key do |key| - result[yield(key)] = self[key] - end - result - end unless method_defined? :transform_keys - - # Destructively converts all keys using the +block+ operations. - # Same as +transform_keys+ but modifies +self+. - def transform_keys! - return enum_for(:transform_keys!) { size } unless block_given? - keys.each do |key| - self[yield(key)] = delete(key) - end - self - end unless method_defined? :transform_keys! - # Returns a new hash with all keys converted to strings. # # hash = { name: 'Rob', age: '28' } diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/hash/reverse_merge.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/hash/reverse_merge.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/hash/reverse_merge.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/hash/reverse_merge.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/hash/slice.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/hash/slice.rb new file mode 100644 index 0000000000..3d0f8a1e62 --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/hash/slice.rb @@ -0,0 +1,26 @@ +# frozen_string_literal: true + +class Hash + # Replaces the hash with only the given keys. + # Returns a hash containing the removed key/value pairs. + # + # hash = { a: 1, b: 2, c: 3, d: 4 } + # hash.slice!(:a, :b) # => {:c=>3, :d=>4} + # hash # => {:a=>1, :b=>2} + def slice!(*keys) + omit = slice(*self.keys - keys) + hash = slice(*keys) + hash.default = default + hash.default_proc = default_proc if default_proc + replace(hash) + omit + end + + # Removes and returns the key/value pairs matching the given keys. + # + # { a: 1, b: 2, c: 3, d: 4 }.extract!(:a, :b) # => {:a=>1, :b=>2} + # { a: 1, b: 2 }.extract!(:a, :x) # => {:a=>1} + def extract!(*keys) + keys.each_with_object(self.class.new) { |key, result| result[key] = delete(key) if has_key?(key) } + end +end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/hash/transform_values.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/hash/transform_values.rb new file mode 100644 index 0000000000..e4aeb0e891 --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/hash/transform_values.rb @@ -0,0 +1,5 @@ +# frozen_string_literal: true + +require "active_support/deprecation" + +ActiveSupport::Deprecation.warn "Ruby 2.5+ (required by Rails 6) provides Hash#transform_values natively, so requiring active_support/core_ext/hash/transform_values is no longer necessary. Requiring it will raise LoadError in Rails 6.1." diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/integer.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/integer.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/integer.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/integer.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/integer/inflections.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/integer/inflections.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/integer/inflections.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/integer/inflections.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/integer/multiple.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/integer/multiple.rb similarity index 84% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/integer/multiple.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/integer/multiple.rb index e7606662d3..bd57a909c5 100644 --- a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/integer/multiple.rb +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/integer/multiple.rb @@ -7,6 +7,6 @@ class Integer # 6.multiple_of?(5) # => false # 10.multiple_of?(2) # => true def multiple_of?(number) - number != 0 ? self % number == 0 : zero? + number == 0 ? self == 0 : self % number == 0 end end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/integer/time.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/integer/time.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/integer/time.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/integer/time.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/kernel.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/kernel.rb similarity index 78% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/kernel.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/kernel.rb index 0f4356fbdd..7708069301 100644 --- a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/kernel.rb +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/kernel.rb @@ -1,6 +1,5 @@ # frozen_string_literal: true -require "active_support/core_ext/kernel/agnostics" require "active_support/core_ext/kernel/concern" require "active_support/core_ext/kernel/reporting" require "active_support/core_ext/kernel/singleton_class" diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/kernel/concern.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/kernel/concern.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/kernel/concern.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/kernel/concern.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/kernel/reporting.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/kernel/reporting.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/kernel/reporting.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/kernel/reporting.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/kernel/singleton_class.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/kernel/singleton_class.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/kernel/singleton_class.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/kernel/singleton_class.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/load_error.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/load_error.rb similarity index 77% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/load_error.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/load_error.rb index 750f858fcc..b81ed0605e 100644 --- a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/load_error.rb +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/load_error.rb @@ -4,6 +4,6 @@ class LoadError # Returns true if the given path name (except perhaps for the ".rb" # extension) is the missing file which caused the exception to be raised. def is_missing?(location) - location.sub(/\.rb$/, "".freeze) == path.sub(/\.rb$/, "".freeze) + location.sub(/\.rb$/, "") == path.to_s.sub(/\.rb$/, "") end end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/marshal.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/marshal.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/marshal.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/marshal.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/module.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/module.rb similarity index 92% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/module.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/module.rb index d91e3fba6a..542af98c04 100644 --- a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/module.rb +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/module.rb @@ -3,7 +3,6 @@ require "active_support/core_ext/module/aliasing" require "active_support/core_ext/module/introspection" require "active_support/core_ext/module/anonymous" -require "active_support/core_ext/module/reachable" require "active_support/core_ext/module/attribute_accessors" require "active_support/core_ext/module/attribute_accessors_per_thread" require "active_support/core_ext/module/attr_internal" diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/module/aliasing.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/module/aliasing.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/module/aliasing.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/module/aliasing.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/module/anonymous.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/module/anonymous.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/module/anonymous.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/module/anonymous.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/module/attr_internal.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/module/attr_internal.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/module/attr_internal.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/module/attr_internal.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/module/attribute_accessors.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/module/attribute_accessors.rb similarity index 92% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/module/attribute_accessors.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/module/attribute_accessors.rb index 580baffa2b..cc1926e022 100644 --- a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/module/attribute_accessors.rb +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/module/attribute_accessors.rb @@ -1,8 +1,5 @@ # frozen_string_literal: true -require "active_support/core_ext/array/extract_options" -require "active_support/core_ext/regexp" - # Extends the module object with class/module and instance accessors for # class/module attributes, just like the native attr* accessors for instance # attributes. @@ -27,7 +24,7 @@ class Module # end # # => NameError: invalid attribute name: 1_Badname # - # If you want to opt out the creation on the instance reader method, pass + # To omit the instance reader method, pass # instance_reader: false or instance_accessor: false. # # module HairColors @@ -94,7 +91,7 @@ class Module # Person.new.hair_colors = [:blonde, :red] # HairColors.class_variable_get("@@hair_colors") # => [:blonde, :red] # - # If you want to opt out the instance writer method, pass + # To omit the instance writer method, pass # instance_writer: false or instance_accessor: false. # # module HairColors @@ -163,14 +160,14 @@ class Module # parent class. Similarly if parent class changes the value then that would # change the value of subclasses too. # - # class Male < Person + # class Citizen < Person # end # - # Male.new.hair_colors << :blue + # Citizen.new.hair_colors << :blue # Person.new.hair_colors # => [:brown, :black, :blonde, :red, :blue] # - # To opt out of the instance writer method, pass instance_writer: false. - # To opt out of the instance reader method, pass instance_reader: false. + # To omit the instance writer method, pass instance_writer: false. + # To omit the instance reader method, pass instance_reader: false. # # module HairColors # mattr_accessor :hair_colors, instance_writer: false, instance_reader: false @@ -183,7 +180,7 @@ class Module # Person.new.hair_colors = [:brown] # => NoMethodError # Person.new.hair_colors # => NoMethodError # - # Or pass instance_accessor: false, to opt out both instance methods. + # Or pass instance_accessor: false, to omit both instance methods. # # module HairColors # mattr_accessor :hair_colors, instance_accessor: false diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/module/attribute_accessors_per_thread.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/module/attribute_accessors_per_thread.rb similarity index 79% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/module/attribute_accessors_per_thread.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/module/attribute_accessors_per_thread.rb index 4b9b6ea9bd..a6e87aeb68 100644 --- a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/module/attribute_accessors_per_thread.rb +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/module/attribute_accessors_per_thread.rb @@ -1,8 +1,5 @@ # frozen_string_literal: true -require "active_support/core_ext/array/extract_options" -require "active_support/core_ext/regexp" - # Extends the module object with class/module and instance accessors for # class/module attributes, just like the native attr* accessors for instance # attributes, but does so on a per-thread basis. @@ -28,7 +25,7 @@ class Module # end # # => NameError: invalid attribute name: 1_Badname # - # If you want to opt out of the creation of the instance reader method, pass + # To omit the instance reader method, pass # instance_reader: false or instance_accessor: false. # # class Current @@ -36,9 +33,7 @@ class Module # end # # Current.new.user # => NoMethodError - def thread_mattr_reader(*syms) # :nodoc: - options = syms.extract_options! - + def thread_mattr_reader(*syms, instance_reader: true, instance_accessor: true) # :nodoc: syms.each do |sym| raise NameError.new("invalid attribute name: #{sym}") unless /^[_A-Za-z]\w*$/.match?(sym) @@ -50,7 +45,7 @@ class Module end EOS - unless options[:instance_reader] == false || options[:instance_accessor] == false + if instance_reader && instance_accessor class_eval(<<-EOS, __FILE__, __LINE__ + 1) def #{sym} self.class.#{sym} @@ -71,7 +66,7 @@ class Module # Current.user = "DHH" # Thread.current[:attr_Current_user] # => "DHH" # - # If you want to opt out of the creation of the instance writer method, pass + # To omit the instance writer method, pass # instance_writer: false or instance_accessor: false. # # class Current @@ -79,8 +74,7 @@ class Module # end # # Current.new.user = "DHH" # => NoMethodError - def thread_mattr_writer(*syms) # :nodoc: - options = syms.extract_options! + def thread_mattr_writer(*syms, instance_writer: true, instance_accessor: true) # :nodoc: syms.each do |sym| raise NameError.new("invalid attribute name: #{sym}") unless /^[_A-Za-z]\w*$/.match?(sym) @@ -92,7 +86,7 @@ class Module end EOS - unless options[:instance_writer] == false || options[:instance_accessor] == false + if instance_writer && instance_accessor class_eval(<<-EOS, __FILE__, __LINE__ + 1) def #{sym}=(obj) self.class.#{sym} = obj @@ -124,8 +118,8 @@ class Module # Customer.user # => "Rafael" # Account.user # => "DHH" # - # To opt out of the instance writer method, pass instance_writer: false. - # To opt out of the instance reader method, pass instance_reader: false. + # To omit the instance writer method, pass instance_writer: false. + # To omit the instance reader method, pass instance_reader: false. # # class Current # thread_mattr_accessor :user, instance_writer: false, instance_reader: false @@ -134,17 +128,17 @@ class Module # Current.new.user = "DHH" # => NoMethodError # Current.new.user # => NoMethodError # - # Or pass instance_accessor: false, to opt out both instance methods. + # Or pass instance_accessor: false, to omit both instance methods. # # class Current - # mattr_accessor :user, instance_accessor: false + # thread_mattr_accessor :user, instance_accessor: false # end # # Current.new.user = "DHH" # => NoMethodError # Current.new.user # => NoMethodError - def thread_mattr_accessor(*syms) - thread_mattr_reader(*syms) - thread_mattr_writer(*syms) + def thread_mattr_accessor(*syms, instance_reader: true, instance_writer: true, instance_accessor: true) + thread_mattr_reader(*syms, instance_reader: instance_reader, instance_accessor: instance_accessor) + thread_mattr_writer(*syms, instance_writer: instance_writer, instance_accessor: instance_accessor) end alias :thread_cattr_accessor :thread_mattr_accessor end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/module/concerning.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/module/concerning.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/module/concerning.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/module/concerning.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/module/delegation.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/module/delegation.rb similarity index 86% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/module/delegation.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/module/delegation.rb index 4310df3024..ccdb6f0a7f 100644 --- a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/module/delegation.rb +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/module/delegation.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require "set" -require "active_support/core_ext/regexp" class Module # Error generated by +delegate+ when a method is called on +nil+ and +allow_nil+ @@ -20,10 +19,11 @@ class Module # public methods as your own. # # ==== Options - # * :to - Specifies the target object + # * :to - Specifies the target object name as a symbol or string # * :prefix - Prefixes the new method with the target name or a custom prefix - # * :allow_nil - if set to true, prevents a +Module::DelegationError+ + # * :allow_nil - If set to true, prevents a +Module::DelegationError+ # from being raised + # * :private - If set to true, changes method visibility to private # # The macro receives one or more method names (specified as symbols or # strings) and the name of the target object via the :to option @@ -114,6 +114,23 @@ class Module # invoice.customer_name # => 'John Doe' # invoice.customer_address # => 'Vimmersvej 13' # + # The delegated methods are public by default. + # Pass private: true to change that. + # + # class User < ActiveRecord::Base + # has_one :profile + # delegate :first_name, to: :profile + # delegate :date_of_birth, to: :profile, private: true + # + # def age + # Date.today.year - date_of_birth.year + # end + # end + # + # User.new.first_name # => "Tomas" + # User.new.date_of_birth # => NoMethodError: private method `date_of_birth' called for # + # User.new.age # => 2 + # # If the target is +nil+ and does not respond to the delegated method a # +Module::DelegationError+ is raised. If you wish to instead return +nil+, # use the :allow_nil option. @@ -151,7 +168,7 @@ class Module # Foo.new("Bar").name # raises NoMethodError: undefined method `name' # # The target method must be public, otherwise it will raise +NoMethodError+. - def delegate(*methods, to: nil, prefix: nil, allow_nil: nil) + def delegate(*methods, to: nil, prefix: nil, allow_nil: nil, private: nil) unless to raise ArgumentError, "Delegation needs a target. Supply an options hash with a :to key as the last argument (e.g. delegate :hello, to: :greeter)." end @@ -173,7 +190,7 @@ class Module to = to.to_s to = "self.#{to}" if DELEGATION_RESERVED_METHOD_NAMES.include?(to) - methods.map do |method| + method_names = methods.map do |method| # Attribute writer methods only accept one argument. Makes sure []= # methods still accept two arguments. definition = /[^\]]=$/.match?(method) ? "arg" : "*args, &block" @@ -213,6 +230,9 @@ class Module module_eval(method_def, file, line) end + + private(*method_names) if private + method_names end # When building decorators, a common pattern may emerge: @@ -223,7 +243,7 @@ class Module # end # # def person - # @event.detail.person || @event.creator + # detail.person || creator # end # # private @@ -246,7 +266,7 @@ class Module # end # # def person - # @event.detail.person || @event.creator + # detail.person || creator # end # end # @@ -255,6 +275,11 @@ class Module # # The delegated method must be public on the target, otherwise it will # raise +NoMethodError+. + # + # The marshal_dump and _dump methods are exempt from + # delegation due to possible interference when calling + # Marshal.dump(object), should the delegation target method + # of object add or remove instance variables. def delegate_missing_to(target) target = target.to_s target = "self.#{target}" if DELEGATION_RESERVED_METHOD_NAMES.include?(target) @@ -264,6 +289,7 @@ class Module # It may look like an oversight, but we deliberately do not pass # +include_private+, because they do not get delegated. + return false if name == :marshal_dump || name == :_dump #{target}.respond_to?(name) || super end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/module/deprecation.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/module/deprecation.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/module/deprecation.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/module/deprecation.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/module/introspection.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/module/introspection.rb new file mode 100644 index 0000000000..9b6df40596 --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/module/introspection.rb @@ -0,0 +1,86 @@ +# frozen_string_literal: true + +require "active_support/inflector" + +class Module + # Returns the name of the module containing this one. + # + # M::N.module_parent_name # => "M" + def module_parent_name + if defined?(@parent_name) + @parent_name + else + parent_name = name =~ /::[^:]+\Z/ ? $`.freeze : nil + @parent_name = parent_name unless frozen? + parent_name + end + end + + def parent_name + ActiveSupport::Deprecation.warn(<<-MSG.squish) + `Module#parent_name` has been renamed to `module_parent_name`. + `parent_name` is deprecated and will be removed in Rails 6.1. + MSG + module_parent_name + end + + # Returns the module which contains this one according to its name. + # + # module M + # module N + # end + # end + # X = M::N + # + # M::N.module_parent # => M + # X.module_parent # => M + # + # The parent of top-level and anonymous modules is Object. + # + # M.module_parent # => Object + # Module.new.module_parent # => Object + def module_parent + module_parent_name ? ActiveSupport::Inflector.constantize(module_parent_name) : Object + end + + def parent + ActiveSupport::Deprecation.warn(<<-MSG.squish) + `Module#parent` has been renamed to `module_parent`. + `parent` is deprecated and will be removed in Rails 6.1. + MSG + module_parent + end + + # Returns all the parents of this module according to its name, ordered from + # nested outwards. The receiver is not contained within the result. + # + # module M + # module N + # end + # end + # X = M::N + # + # M.module_parents # => [Object] + # M::N.module_parents # => [M, Object] + # X.module_parents # => [M, Object] + def module_parents + parents = [] + if module_parent_name + parts = module_parent_name.split("::") + until parts.empty? + parents << ActiveSupport::Inflector.constantize(parts * "::") + parts.pop + end + end + parents << Object unless parents.include? Object + parents + end + + def parents + ActiveSupport::Deprecation.warn(<<-MSG.squish) + `Module#parents` has been renamed to `module_parents`. + `parents` is deprecated and will be removed in Rails 6.1. + MSG + module_parents + end +end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/module/reachable.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/module/reachable.rb similarity index 51% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/module/reachable.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/module/reachable.rb index e9cbda5245..2020f5204c 100644 --- a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/module/reachable.rb +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/module/reachable.rb @@ -3,9 +3,4 @@ require "active_support/core_ext/module/anonymous" require "active_support/core_ext/string/inflections" -class Module - def reachable? #:nodoc: - !anonymous? && name.safe_constantize.equal?(self) - end - deprecate :reachable? -end +ActiveSupport::Deprecation.warn("reachable is deprecated and will be removed from the framework.") diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/module/redefine_method.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/module/redefine_method.rb similarity index 51% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/module/redefine_method.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/module/redefine_method.rb index a0a6622ca4..5bd8e6e973 100644 --- a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/module/redefine_method.rb +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/module/redefine_method.rb @@ -1,23 +1,14 @@ # frozen_string_literal: true class Module - if RUBY_VERSION >= "2.3" - # Marks the named method as intended to be redefined, if it exists. - # Suppresses the Ruby method redefinition warning. Prefer - # #redefine_method where possible. - def silence_redefinition_of_method(method) - if method_defined?(method) || private_method_defined?(method) - # This suppresses the "method redefined" warning; the self-alias - # looks odd, but means we don't need to generate a unique name - alias_method method, method - end - end - else - def silence_redefinition_of_method(method) - if method_defined?(method) || private_method_defined?(method) - alias_method :__rails_redefine, method - remove_method :__rails_redefine - end + # Marks the named method as intended to be redefined, if it exists. + # Suppresses the Ruby method redefinition warning. Prefer + # #redefine_method where possible. + def silence_redefinition_of_method(method) + if method_defined?(method) || private_method_defined?(method) + # This suppresses the "method redefined" warning; the self-alias + # looks odd, but means we don't need to generate a unique name + alias_method method, method end end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/module/remove_method.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/module/remove_method.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/module/remove_method.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/module/remove_method.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/name_error.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/name_error.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/name_error.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/name_error.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/numeric.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/numeric.rb similarity index 78% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/numeric.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/numeric.rb index 0b04e359f9..fe778470f1 100644 --- a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/numeric.rb +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/numeric.rb @@ -2,5 +2,4 @@ require "active_support/core_ext/numeric/bytes" require "active_support/core_ext/numeric/time" -require "active_support/core_ext/numeric/inquiry" require "active_support/core_ext/numeric/conversions" diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/numeric/bytes.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/numeric/bytes.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/numeric/bytes.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/numeric/bytes.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/numeric/conversions.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/numeric/conversions.rb new file mode 100644 index 0000000000..8acad6164a --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/numeric/conversions.rb @@ -0,0 +1,136 @@ +# frozen_string_literal: true + +require "active_support/core_ext/big_decimal/conversions" +require "active_support/number_helper" +require "active_support/core_ext/module/deprecation" + +module ActiveSupport + module NumericWithFormat + # Provides options for converting numbers into formatted strings. + # Options are provided for phone numbers, currency, percentage, + # precision, positional notation, file size and pretty printing. + # + # ==== Options + # + # For details on which formats use which options, see ActiveSupport::NumberHelper + # + # ==== Examples + # + # Phone Numbers: + # 5551234.to_s(:phone) # => "555-1234" + # 1235551234.to_s(:phone) # => "123-555-1234" + # 1235551234.to_s(:phone, area_code: true) # => "(123) 555-1234" + # 1235551234.to_s(:phone, delimiter: ' ') # => "123 555 1234" + # 1235551234.to_s(:phone, area_code: true, extension: 555) # => "(123) 555-1234 x 555" + # 1235551234.to_s(:phone, country_code: 1) # => "+1-123-555-1234" + # 1235551234.to_s(:phone, country_code: 1, extension: 1343, delimiter: '.') + # # => "+1.123.555.1234 x 1343" + # + # Currency: + # 1234567890.50.to_s(:currency) # => "$1,234,567,890.50" + # 1234567890.506.to_s(:currency) # => "$1,234,567,890.51" + # 1234567890.506.to_s(:currency, precision: 3) # => "$1,234,567,890.506" + # 1234567890.506.to_s(:currency, locale: :fr) # => "1 234 567 890,51 €" + # -1234567890.50.to_s(:currency, negative_format: '(%u%n)') + # # => "($1,234,567,890.50)" + # 1234567890.50.to_s(:currency, unit: '£', separator: ',', delimiter: '') + # # => "£1234567890,50" + # 1234567890.50.to_s(:currency, unit: '£', separator: ',', delimiter: '', format: '%n %u') + # # => "1234567890,50 £" + # + # Percentage: + # 100.to_s(:percentage) # => "100.000%" + # 100.to_s(:percentage, precision: 0) # => "100%" + # 1000.to_s(:percentage, delimiter: '.', separator: ',') # => "1.000,000%" + # 302.24398923423.to_s(:percentage, precision: 5) # => "302.24399%" + # 1000.to_s(:percentage, locale: :fr) # => "1 000,000%" + # 100.to_s(:percentage, format: '%n %') # => "100.000 %" + # + # Delimited: + # 12345678.to_s(:delimited) # => "12,345,678" + # 12345678.05.to_s(:delimited) # => "12,345,678.05" + # 12345678.to_s(:delimited, delimiter: '.') # => "12.345.678" + # 12345678.to_s(:delimited, delimiter: ',') # => "12,345,678" + # 12345678.05.to_s(:delimited, separator: ' ') # => "12,345,678 05" + # 12345678.05.to_s(:delimited, locale: :fr) # => "12 345 678,05" + # 98765432.98.to_s(:delimited, delimiter: ' ', separator: ',') + # # => "98 765 432,98" + # + # Rounded: + # 111.2345.to_s(:rounded) # => "111.235" + # 111.2345.to_s(:rounded, precision: 2) # => "111.23" + # 13.to_s(:rounded, precision: 5) # => "13.00000" + # 389.32314.to_s(:rounded, precision: 0) # => "389" + # 111.2345.to_s(:rounded, significant: true) # => "111" + # 111.2345.to_s(:rounded, precision: 1, significant: true) # => "100" + # 13.to_s(:rounded, precision: 5, significant: true) # => "13.000" + # 111.234.to_s(:rounded, locale: :fr) # => "111,234" + # 13.to_s(:rounded, precision: 5, significant: true, strip_insignificant_zeros: true) + # # => "13" + # 389.32314.to_s(:rounded, precision: 4, significant: true) # => "389.3" + # 1111.2345.to_s(:rounded, precision: 2, separator: ',', delimiter: '.') + # # => "1.111,23" + # + # Human-friendly size in Bytes: + # 123.to_s(:human_size) # => "123 Bytes" + # 1234.to_s(:human_size) # => "1.21 KB" + # 12345.to_s(:human_size) # => "12.1 KB" + # 1234567.to_s(:human_size) # => "1.18 MB" + # 1234567890.to_s(:human_size) # => "1.15 GB" + # 1234567890123.to_s(:human_size) # => "1.12 TB" + # 1234567890123456.to_s(:human_size) # => "1.1 PB" + # 1234567890123456789.to_s(:human_size) # => "1.07 EB" + # 1234567.to_s(:human_size, precision: 2) # => "1.2 MB" + # 483989.to_s(:human_size, precision: 2) # => "470 KB" + # 1234567.to_s(:human_size, precision: 2, separator: ',') # => "1,2 MB" + # 1234567890123.to_s(:human_size, precision: 5) # => "1.1228 TB" + # 524288000.to_s(:human_size, precision: 5) # => "500 MB" + # + # Human-friendly format: + # 123.to_s(:human) # => "123" + # 1234.to_s(:human) # => "1.23 Thousand" + # 12345.to_s(:human) # => "12.3 Thousand" + # 1234567.to_s(:human) # => "1.23 Million" + # 1234567890.to_s(:human) # => "1.23 Billion" + # 1234567890123.to_s(:human) # => "1.23 Trillion" + # 1234567890123456.to_s(:human) # => "1.23 Quadrillion" + # 1234567890123456789.to_s(:human) # => "1230 Quadrillion" + # 489939.to_s(:human, precision: 2) # => "490 Thousand" + # 489939.to_s(:human, precision: 4) # => "489.9 Thousand" + # 1234567.to_s(:human, precision: 4, + # significant: false) # => "1.2346 Million" + # 1234567.to_s(:human, precision: 1, + # separator: ',', + # significant: false) # => "1,2 Million" + def to_s(format = nil, options = nil) + case format + when nil + super() + when Integer, String + super(format) + when :phone + ActiveSupport::NumberHelper.number_to_phone(self, options || {}) + when :currency + ActiveSupport::NumberHelper.number_to_currency(self, options || {}) + when :percentage + ActiveSupport::NumberHelper.number_to_percentage(self, options || {}) + when :delimited + ActiveSupport::NumberHelper.number_to_delimited(self, options || {}) + when :rounded + ActiveSupport::NumberHelper.number_to_rounded(self, options || {}) + when :human + ActiveSupport::NumberHelper.number_to_human(self, options || {}) + when :human_size + ActiveSupport::NumberHelper.number_to_human_size(self, options || {}) + when Symbol + super() + else + super(format) + end + end + end +end + +Integer.prepend ActiveSupport::NumericWithFormat +Float.prepend ActiveSupport::NumericWithFormat +BigDecimal.prepend ActiveSupport::NumericWithFormat diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/numeric/inquiry.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/numeric/inquiry.rb new file mode 100644 index 0000000000..6b5240d051 --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/numeric/inquiry.rb @@ -0,0 +1,5 @@ +# frozen_string_literal: true + +require "active_support/deprecation" + +ActiveSupport::Deprecation.warn "Ruby 2.5+ (required by Rails 6) provides Numeric#positive? and Numeric#negative? natively, so requiring active_support/core_ext/numeric/inquiry is no longer necessary. Requiring it will raise LoadError in Rails 6.1." diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/numeric/time.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/numeric/time.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/numeric/time.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/numeric/time.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/object.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/object.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/object.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/object.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/object/acts_like.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/object/acts_like.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/object/acts_like.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/object/acts_like.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/object/blank.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/object/blank.rb similarity index 96% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/object/blank.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/object/blank.rb index 2ca431ab10..f36fef6cc9 100644 --- a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/object/blank.rb +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/object/blank.rb @@ -1,11 +1,10 @@ # frozen_string_literal: true -require "active_support/core_ext/regexp" require "concurrent/map" class Object # An object is blank if it's false, empty, or a whitespace string. - # For example, +false+, '', ' ', +nil+, [], and {} are all blank. + # For example, +nil+, '', ' ', [], {}, and +false+ are all blank. # # This simplifies # diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/object/conversions.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/object/conversions.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/object/conversions.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/object/conversions.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/object/deep_dup.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/object/deep_dup.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/object/deep_dup.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/object/deep_dup.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/object/duplicable.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/object/duplicable.rb new file mode 100644 index 0000000000..3ebcdca02b --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/object/duplicable.rb @@ -0,0 +1,49 @@ +# frozen_string_literal: true + +#-- +# Most objects are cloneable, but not all. For example you can't dup methods: +# +# method(:puts).dup # => TypeError: allocator undefined for Method +# +# Classes may signal their instances are not duplicable removing +dup+/+clone+ +# or raising exceptions from them. So, to dup an arbitrary object you normally +# use an optimistic approach and are ready to catch an exception, say: +# +# arbitrary_object.dup rescue object +# +# Rails dups objects in a few critical spots where they are not that arbitrary. +# That rescue is very expensive (like 40 times slower than a predicate), and it +# is often triggered. +# +# That's why we hardcode the following cases and check duplicable? instead of +# using that rescue idiom. +#++ +class Object + # Can you safely dup this object? + # + # False for method objects; + # true otherwise. + def duplicable? + true + end +end + +class Method + # Methods are not duplicable: + # + # method(:puts).duplicable? # => false + # method(:puts).dup # => TypeError: allocator undefined for Method + def duplicable? + false + end +end + +class UnboundMethod + # Unbound methods are not duplicable: + # + # method(:puts).unbind.duplicable? # => false + # method(:puts).unbind.dup # => TypeError: allocator undefined for UnboundMethod + def duplicable? + false + end +end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/object/inclusion.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/object/inclusion.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/object/inclusion.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/object/inclusion.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/object/instance_variables.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/object/instance_variables.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/object/instance_variables.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/object/instance_variables.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/object/json.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/object/json.rb similarity index 99% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/object/json.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/object/json.rb index f7c623fe13..416059d17b 100644 --- a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/object/json.rb +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/object/json.rb @@ -14,6 +14,7 @@ require "active_support/core_ext/time/conversions" require "active_support/core_ext/date_time/conversions" require "active_support/core_ext/date/conversions" +#-- # The JSON gem adds a few modules to Ruby core classes containing :to_json definition, overwriting # their default behavior. That said, we need to define the basic to_json method in all of them, # otherwise they will always use to_json gem implementation, which is backwards incompatible in diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/object/to_param.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/object/to_param.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/object/to_param.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/object/to_param.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/object/to_query.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/object/to_query.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/object/to_query.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/object/to_query.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/object/try.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/object/try.rb similarity index 87% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/object/try.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/object/try.rb index c874691629..ef8a1f476d 100644 --- a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/object/try.rb +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/object/try.rb @@ -4,19 +4,27 @@ require "delegate" module ActiveSupport module Tryable #:nodoc: - def try(*a, &b) - try!(*a, &b) if a.empty? || respond_to?(a.first) + def try(method_name = nil, *args, &b) + if method_name.nil? && block_given? + if b.arity == 0 + instance_eval(&b) + else + yield self + end + elsif respond_to?(method_name) + public_send(method_name, *args, &b) + end end - def try!(*a, &b) - if a.empty? && block_given? + def try!(method_name = nil, *args, &b) + if method_name.nil? && block_given? if b.arity == 0 instance_eval(&b) else yield self end else - public_send(*a, &b) + public_send(method_name, *args, &b) end end end @@ -135,14 +143,14 @@ class NilClass # # With +try+ # @person.try(:children).try(:first).try(:name) - def try(*args) + def try(method_name = nil, *args) nil end # Calling +try!+ on +nil+ always returns +nil+. # # nil.try!(:name) # => nil - def try!(*args) + def try!(method_name = nil, *args) nil end end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/object/with_options.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/object/with_options.rb similarity index 97% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/object/with_options.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/object/with_options.rb index 2838fd76be..1d46add6e0 100644 --- a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/object/with_options.rb +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/object/with_options.rb @@ -68,7 +68,7 @@ class Object # You can access these methods using the class name instead: # # class Phone < ActiveRecord::Base - # enum phone_number_type: [home: 0, office: 1, mobile: 2] + # enum phone_number_type: { home: 0, office: 1, mobile: 2 } # # with_options presence: true do # validates :phone_number_type, inclusion: { in: Phone.phone_number_types.keys } diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/range.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/range.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/range.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/range.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/range/compare_range.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/range/compare_range.rb similarity index 50% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/range/compare_range.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/range/compare_range.rb index 704041f6de..d2c85d7679 100644 --- a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/range/compare_range.rb +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/range/compare_range.rb @@ -1,56 +1,71 @@ # frozen_string_literal: true module ActiveSupport - module CompareWithRange #:nodoc: + module CompareWithRange # Extends the default Range#=== to support range comparisons. - # (1..5) === (1..5) # => true - # (1..5) === (2..3) # => true - # (1..5) === (2..6) # => false + # (1..5) === (1..5) # => true + # (1..5) === (2..3) # => true + # (1..5) === (1...6) # => true + # (1..5) === (2..6) # => false # # The native Range#=== behavior is untouched. # ('a'..'f') === ('c') # => true # (5..9) === (11) # => false + # + # The given range must be fully bounded, with both start and end. def ===(value) if value.is_a?(::Range) # 1...10 includes 1..9 but it does not include 1..10. + # 1..10 includes 1...11 but it does not include 1...12. operator = exclude_end? && !value.exclude_end? ? :< : :<= - super(value.first) && value.last.send(operator, last) + value_max = !exclude_end? && value.exclude_end? ? value.max : value.last + super(value.first) && (self.end.nil? || value_max.send(operator, last)) else super end end # Extends the default Range#include? to support range comparisons. - # (1..5).include?(1..5) # => true - # (1..5).include?(2..3) # => true - # (1..5).include?(2..6) # => false + # (1..5).include?(1..5) # => true + # (1..5).include?(2..3) # => true + # (1..5).include?(1...6) # => true + # (1..5).include?(2..6) # => false # # The native Range#include? behavior is untouched. # ('a'..'f').include?('c') # => true # (5..9).include?(11) # => false + # + # The given range must be fully bounded, with both start and end. def include?(value) if value.is_a?(::Range) # 1...10 includes 1..9 but it does not include 1..10. + # 1..10 includes 1...11 but it does not include 1...12. operator = exclude_end? && !value.exclude_end? ? :< : :<= - super(value.first) && value.last.send(operator, last) + value_max = !exclude_end? && value.exclude_end? ? value.max : value.last + super(value.first) && (self.end.nil? || value_max.send(operator, last)) else super end end # Extends the default Range#cover? to support range comparisons. - # (1..5).cover?(1..5) # => true - # (1..5).cover?(2..3) # => true - # (1..5).cover?(2..6) # => false + # (1..5).cover?(1..5) # => true + # (1..5).cover?(2..3) # => true + # (1..5).cover?(1...6) # => true + # (1..5).cover?(2..6) # => false # # The native Range#cover? behavior is untouched. # ('a'..'f').cover?('c') # => true # (5..9).cover?(11) # => false + # + # The given range must be fully bounded, with both start and end. def cover?(value) if value.is_a?(::Range) # 1...10 covers 1..9 but it does not cover 1..10. + # 1..10 covers 1...11 but it does not cover 1...12. operator = exclude_end? && !value.exclude_end? ? :< : :<= - super(value.first) && value.last.send(operator, last) + value_max = !exclude_end? && value.exclude_end? ? value.max : value.last + super(value.first) && (self.end.nil? || value_max.send(operator, last)) else super end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/range/conversions.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/range/conversions.rb new file mode 100644 index 0000000000..024e32db40 --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/range/conversions.rb @@ -0,0 +1,41 @@ +# frozen_string_literal: true + +module ActiveSupport + module RangeWithFormat + RANGE_FORMATS = { + db: -> (start, stop) do + case start + when String then "BETWEEN '#{start}' AND '#{stop}'" + else + "BETWEEN '#{start.to_s(:db)}' AND '#{stop.to_s(:db)}'" + end + end + } + + # Convert range to a formatted string. See RANGE_FORMATS for predefined formats. + # + # range = (1..100) # => 1..100 + # + # range.to_s # => "1..100" + # range.to_s(:db) # => "BETWEEN '1' AND '100'" + # + # == Adding your own range formats to to_s + # You can add your own formats to the Range::RANGE_FORMATS hash. + # Use the format name as the hash key and a Proc instance. + # + # # config/initializers/range_formats.rb + # Range::RANGE_FORMATS[:short] = ->(start, stop) { "Between #{start.to_s(:db)} and #{stop.to_s(:db)}" } + def to_s(format = :default) + if formatter = RANGE_FORMATS[format] + formatter.call(first, last) + else + super() + end + end + + alias_method :to_default_s, :to_s + alias_method :to_formatted_s, :to_s + end +end + +Range.prepend(ActiveSupport::RangeWithFormat) diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/range/each.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/range/each.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/range/each.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/range/each.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/range/include_range.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/range/include_range.rb new file mode 100644 index 0000000000..2da2c587a3 --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/range/include_range.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true + +require "active_support/deprecation" + +ActiveSupport::Deprecation.warn "You have required `active_support/core_ext/range/include_range`. " \ +"This file will be removed in Rails 6.1. You should require `active_support/core_ext/range/compare_range` " \ + "instead." + +require "active_support/core_ext/range/compare_range" diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/range/include_time_with_zone.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/range/include_time_with_zone.rb similarity index 85% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/range/include_time_with_zone.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/range/include_time_with_zone.rb index 5f80acf68e..2b458717ec 100644 --- a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/range/include_time_with_zone.rb +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/range/include_time_with_zone.rb @@ -9,9 +9,9 @@ module ActiveSupport # (1.hour.ago..1.hour.from_now).include?(Time.current) # => true # def include?(value) - if first.is_a?(TimeWithZone) + if self.begin.is_a?(TimeWithZone) cover?(value) - elsif last.is_a?(TimeWithZone) + elsif self.end.is_a?(TimeWithZone) cover?(value) else super diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/range/overlaps.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/range/overlaps.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/range/overlaps.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/range/overlaps.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/regexp.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/regexp.rb similarity index 55% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/regexp.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/regexp.rb index efbd708aee..d92943c7ae 100644 --- a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/regexp.rb +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/regexp.rb @@ -4,8 +4,4 @@ class Regexp #:nodoc: def multiline? options & MULTILINE == MULTILINE end - - def match?(string, pos = 0) - !!match(string, pos) - end unless //.respond_to?(:match?) end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/securerandom.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/securerandom.rb new file mode 100644 index 0000000000..ef812f7e1a --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/securerandom.rb @@ -0,0 +1,45 @@ +# frozen_string_literal: true + +require "securerandom" + +module SecureRandom + BASE58_ALPHABET = ("0".."9").to_a + ("A".."Z").to_a + ("a".."z").to_a - ["0", "O", "I", "l"] + BASE36_ALPHABET = ("0".."9").to_a + ("a".."z").to_a + + # SecureRandom.base58 generates a random base58 string. + # + # The argument _n_ specifies the length of the random string to be generated. + # + # If _n_ is not specified or is +nil+, 16 is assumed. It may be larger in the future. + # + # The result may contain alphanumeric characters except 0, O, I and l. + # + # p SecureRandom.base58 # => "4kUgL2pdQMSCQtjE" + # p SecureRandom.base58(24) # => "77TMHrHJFvFDwodq8w7Ev2m7" + def self.base58(n = 16) + SecureRandom.random_bytes(n).unpack("C*").map do |byte| + idx = byte % 64 + idx = SecureRandom.random_number(58) if idx >= 58 + BASE58_ALPHABET[idx] + end.join + end + + # SecureRandom.base36 generates a random base36 string in lowercase. + # + # The argument _n_ specifies the length of the random string to be generated. + # + # If _n_ is not specified or is +nil+, 16 is assumed. It may be larger in the future. + # This method can be used over +base58+ if a deterministic case key is necessary. + # + # The result will contain alphanumeric characters in lowercase. + # + # p SecureRandom.base36 # => "4kugl2pdqmscqtje" + # p SecureRandom.base36(24) # => "77tmhrhjfvfdwodq8w7ev2m7" + def self.base36(n = 16) + SecureRandom.random_bytes(n).unpack("C*").map do |byte| + idx = byte % 64 + idx = SecureRandom.random_number(36) if idx >= 36 + BASE36_ALPHABET[idx] + end.join + end +end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/string.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/string.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/string.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/string.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/string/access.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/string/access.rb similarity index 90% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/string/access.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/string/access.rb index 58591bbaaf..4ca24028b0 100644 --- a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/string/access.rb +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/string/access.rb @@ -75,6 +75,10 @@ class String # str.first(0) # => "" # str.first(6) # => "hello" def first(limit = 1) + ActiveSupport::Deprecation.warn( + "Calling String#first with a negative integer limit " \ + "will raise an ArgumentError in Rails 6.1." + ) if limit < 0 if limit == 0 "" elsif limit >= size @@ -95,6 +99,10 @@ class String # str.last(0) # => "" # str.last(6) # => "hello" def last(limit = 1) + ActiveSupport::Deprecation.warn( + "Calling String#last with a negative integer limit " \ + "will raise an ArgumentError in Rails 6.1." + ) if limit < 0 if limit == 0 "" elsif limit >= size diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/string/behavior.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/string/behavior.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/string/behavior.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/string/behavior.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/string/conversions.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/string/conversions.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/string/conversions.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/string/conversions.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/string/exclude.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/string/exclude.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/string/exclude.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/string/exclude.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/string/filters.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/string/filters.rb similarity index 71% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/string/filters.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/string/filters.rb index 66e721eea3..7f28bd52f2 100644 --- a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/string/filters.rb +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/string/filters.rb @@ -75,7 +75,48 @@ class String length_with_room_for_omission end - "#{self[0, stop]}#{omission}" + +"#{self[0, stop]}#{omission}" + end + + # Truncates +text+ to at most bytesize bytes in length without + # breaking string encoding by splitting multibyte characters or breaking + # grapheme clusters ("perceptual characters") by truncating at combining + # characters. + # + # >> "🔪🔪🔪🔪🔪🔪🔪🔪🔪🔪🔪🔪🔪🔪🔪🔪🔪🔪🔪🔪".size + # => 20 + # >> "🔪🔪🔪🔪🔪🔪🔪🔪🔪🔪🔪🔪🔪🔪🔪🔪🔪🔪🔪🔪".bytesize + # => 80 + # >> "🔪🔪🔪🔪🔪🔪🔪🔪🔪🔪🔪🔪🔪🔪🔪🔪🔪🔪🔪🔪".truncate_bytes(20) + # => "🔪🔪🔪🔪…" + # + # The truncated text ends with the :omission string, defaulting + # to "…", for a total length not exceeding bytesize. + def truncate_bytes(truncate_at, omission: "…") + omission ||= "" + + case + when bytesize <= truncate_at + dup + when omission.bytesize > truncate_at + raise ArgumentError, "Omission #{omission.inspect} is #{omission.bytesize}, larger than the truncation length of #{truncate_at} bytes" + when omission.bytesize == truncate_at + omission.dup + else + self.class.new.tap do |cut| + cut_at = truncate_at - omission.bytesize + + scan(/\X/) do |grapheme| + if cut.bytesize + grapheme.bytesize <= cut_at + cut << grapheme + else + break + end + end + + cut << omission + end + end end # Truncates a given +text+ after a given number of words (words_count): diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/string/indent.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/string/indent.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/string/indent.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/string/indent.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/string/inflections.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/string/inflections.rb similarity index 96% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/string/inflections.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/string/inflections.rb index 8af301734a..5eb8d9f99b 100644 --- a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/string/inflections.rb +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/string/inflections.rb @@ -162,6 +162,11 @@ class String # Replaces special characters in a string so that it may be used as part of a 'pretty' URL. # + # If the optional parameter +locale+ is specified, + # the word will be parameterized as a word of that language. + # By default, this parameter is set to nil and it will use + # the configured I18n.locale. + # # class Person # def to_param # "#{id}-#{name.parameterize}" @@ -187,8 +192,8 @@ class String # # <%= link_to(@person.name, person_path) %> # # => Donald E. Knuth - def parameterize(separator: "-", preserve_case: false) - ActiveSupport::Inflector.parameterize(self, separator: separator, preserve_case: preserve_case) + def parameterize(separator: "-", preserve_case: false, locale: nil) + ActiveSupport::Inflector.parameterize(self, separator: separator, preserve_case: preserve_case, locale: locale) end # Creates the name of a table like Rails does for models to table names. This method diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/string/inquiry.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/string/inquiry.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/string/inquiry.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/string/inquiry.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/string/multibyte.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/string/multibyte.rb similarity index 94% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/string/multibyte.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/string/multibyte.rb index 07c0d16398..6cceb46507 100644 --- a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/string/multibyte.rb +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/string/multibyte.rb @@ -11,12 +11,13 @@ class String # encapsulates the original string. A Unicode safe version of all the String methods are defined on this proxy # class. If the proxy class doesn't respond to a certain method, it's forwarded to the encapsulated string. # - # >> "lj".upcase - # => "lj" # >> "lj".mb_chars.upcase.to_s # => "LJ" # - # NOTE: An above example is useful for pre Ruby 2.4. Ruby 2.4 supports Unicode case mappings. + # NOTE: Ruby 2.4 and later support native Unicode case mappings: + # + # >> "lj".upcase + # => "LJ" # # == Method chaining # diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/string/output_safety.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/string/output_safety.rb similarity index 74% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/string/output_safety.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/string/output_safety.rb index f3bdc2977e..62c628e23f 100644 --- a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/string/output_safety.rb +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/string/output_safety.rb @@ -134,10 +134,13 @@ end module ActiveSupport #:nodoc: class SafeBuffer < String UNSAFE_STRING_METHODS = %w( - capitalize chomp chop delete downcase gsub lstrip next reverse rstrip - slice squeeze strip sub succ swapcase tr tr_s upcase + capitalize chomp chop delete delete_prefix delete_suffix + downcase lstrip next reverse rstrip slice squeeze strip + succ swapcase tr tr_s unicode_normalize upcase ) + UNSAFE_STRING_METHODS_WITH_BACKREF = %w(gsub sub) + alias_method :original_concat, :concat private :original_concat @@ -149,9 +152,7 @@ module ActiveSupport #:nodoc: end def [](*args) - if args.size < 2 - super - elsif html_safe? + if html_safe? new_safe_buffer = super if new_safe_buffer @@ -188,14 +189,36 @@ module ActiveSupport #:nodoc: end alias << concat + def insert(index, value) + super(index, html_escape_interpolated_argument(value)) + end + def prepend(value) super(html_escape_interpolated_argument(value)) end + def replace(value) + super(html_escape_interpolated_argument(value)) + end + + def []=(*args) + if args.count == 3 + super(args[0], args[1], html_escape_interpolated_argument(args[2])) + else + super(args[0], html_escape_interpolated_argument(args[1])) + end + end + def +(other) dup.concat(other) end + def *(*) + new_safe_buffer = super + new_safe_buffer.instance_variable_set(:@html_safe, @html_safe) + new_safe_buffer + end + def %(args) case args when Hash @@ -238,11 +261,46 @@ module ActiveSupport #:nodoc: end end + UNSAFE_STRING_METHODS_WITH_BACKREF.each do |unsafe_method| + if unsafe_method.respond_to?(unsafe_method) + class_eval <<-EOT, __FILE__, __LINE__ + 1 + def #{unsafe_method}(*args, &block) # def gsub(*args, &block) + if block # if block + to_str.#{unsafe_method}(*args) { |*params| # to_str.gsub(*args) { |*params| + set_block_back_references(block, $~) # set_block_back_references(block, $~) + block.call(*params) # block.call(*params) + } # } + else # else + to_str.#{unsafe_method}(*args) # to_str.gsub(*args) + end # end + end # end + + def #{unsafe_method}!(*args, &block) # def gsub!(*args, &block) + @html_safe = false # @html_safe = false + if block # if block + super(*args) { |*params| # super(*args) { |*params| + set_block_back_references(block, $~) # set_block_back_references(block, $~) + block.call(*params) # block.call(*params) + } # } + else # else + super # super + end # end + end # end + EOT + end + end + private def html_escape_interpolated_argument(arg) (!html_safe? || arg.html_safe?) ? arg : CGI.escapeHTML(arg.to_s) end + + def set_block_back_references(block, match_data) + block.binding.eval("proc { |m| $~ = m }").call(match_data) + rescue ArgumentError + # Can't create binding from C level Proc + end end end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/string/starts_ends_with.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/string/starts_ends_with.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/string/starts_ends_with.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/string/starts_ends_with.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/string/strip.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/string/strip.rb similarity index 84% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/string/strip.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/string/strip.rb index cc26274e4a..60e9952ee6 100644 --- a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/string/strip.rb +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/string/strip.rb @@ -20,6 +20,8 @@ class String # Technically, it looks for the least indented non-empty line # in the whole string, and removes that amount of leading whitespace. def strip_heredoc - gsub(/^#{scan(/^[ \t]*(?=\S)/).min}/, "".freeze) + gsub(/^#{scan(/^[ \t]*(?=\S)/).min}/, "").tap do |stripped| + stripped.freeze if frozen? + end end end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/string/zones.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/string/zones.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/string/zones.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/string/zones.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/time.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/time.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/time.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/time.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/time/acts_like.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/time/acts_like.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/time/acts_like.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/time/acts_like.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/time/calculations.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/time/calculations.rb similarity index 93% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/time/calculations.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/time/calculations.rb index 120768dec5..eed34965e3 100644 --- a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/time/calculations.rb +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/time/calculations.rb @@ -170,8 +170,7 @@ class Time options[:hours] = options.fetch(:hours, 0) + 24 * partial_days end - d = to_date.advance(options) - d = d.gregorian if d.julian? + d = to_date.gregorian.advance(options) time_advanced_by_date = change(year: d.year, month: d.month, day: d.day) seconds_to_advance = \ options.fetch(:seconds, 0) + @@ -312,4 +311,34 @@ class Time end alias_method :eql_without_coercion, :eql? alias_method :eql?, :eql_with_coercion + + # Returns a new time the specified number of days ago. + def prev_day(days = 1) + advance(days: -days) + end + + # Returns a new time the specified number of days in the future. + def next_day(days = 1) + advance(days: days) + end + + # Returns a new time the specified number of months ago. + def prev_month(months = 1) + advance(months: -months) + end + + # Returns a new time the specified number of months in the future. + def next_month(months = 1) + advance(months: months) + end + + # Returns a new time the specified number of years ago. + def prev_year(years = 1) + advance(years: -years) + end + + # Returns a new time the specified number of years in the future. + def next_year(years = 1) + advance(years: years) + end end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/time/compatibility.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/time/compatibility.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/time/compatibility.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/time/compatibility.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/time/conversions.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/time/conversions.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/time/conversions.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/time/conversions.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/time/zones.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/time/zones.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/time/zones.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/time/zones.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/uri.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/uri.rb similarity index 99% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/uri.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/uri.rb index 9def947f8e..cdd81ae562 100644 --- a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/uri.rb +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/uri.rb @@ -1,6 +1,7 @@ # frozen_string_literal: true require "uri" + if RUBY_VERSION < "2.6.0" require "active_support/core_ext/module/redefine_method" URI::Parser.class_eval do diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/current_attributes.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/current_attributes.rb similarity index 95% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/current_attributes.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/current_attributes.rb index 4e6d8e4585..67ebe102d7 100644 --- a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/current_attributes.rb +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/current_attributes.rb @@ -1,5 +1,7 @@ # frozen_string_literal: true +require "active_support/callbacks" + module ActiveSupport # Abstract super class that provides a thread-isolated attributes singleton, which resets automatically # before and after each request. This allows you to keep all the per-request attributes easily @@ -117,10 +119,16 @@ module ActiveSupport end end + # Calls this block before #reset is called on the instance. Used for resetting external collaborators that depend on current values. + def before_reset(&block) + set_callback :reset, :before, &block + end + # Calls this block after #reset is called on the instance. Used for resetting external collaborators, like Time.zone. def resets(&block) set_callback :reset, :after, &block end + alias_method :after_reset, :resets delegate :set, :reset, to: :instance diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/deprecation.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/deprecation.rb similarity index 96% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/deprecation.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/deprecation.rb index a1ad2ca465..7271ab565b 100644 --- a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/deprecation.rb +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/deprecation.rb @@ -35,7 +35,7 @@ module ActiveSupport # and the second is a library name. # # ActiveSupport::Deprecation.new('2.0', 'MyLibrary') - def initialize(deprecation_horizon = "6.0", gem_name = "Rails") + def initialize(deprecation_horizon = "6.1", gem_name = "Rails") self.gem_name = gem_name self.deprecation_horizon = deprecation_horizon # By default, warnings are not silenced and debugging is off. diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/deprecation/behaviors.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/deprecation/behaviors.rb similarity index 99% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/deprecation/behaviors.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/deprecation/behaviors.rb index 3abd25aa85..725667d139 100644 --- a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/deprecation/behaviors.rb +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/deprecation/behaviors.rb @@ -43,7 +43,7 @@ module ActiveSupport deprecation_horizon: deprecation_horizon) }, - silence: ->(message, callstack, deprecation_horizon, gem_name) {}, + silence: ->(message, callstack, deprecation_horizon, gem_name) { }, } # Behavior module allows to determine how to display deprecation messages. diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/deprecation/constant_accessor.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/deprecation/constant_accessor.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/deprecation/constant_accessor.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/deprecation/constant_accessor.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/deprecation/instance_delegator.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/deprecation/instance_delegator.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/deprecation/instance_delegator.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/deprecation/instance_delegator.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/deprecation/method_wrappers.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/deprecation/method_wrappers.rb similarity index 71% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/deprecation/method_wrappers.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/deprecation/method_wrappers.rb index 3c5d9cef26..7c0a54a1d0 100644 --- a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/deprecation/method_wrappers.rb +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/deprecation/method_wrappers.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true -require "active_support/core_ext/module/aliasing" require "active_support/core_ext/array/extract_options" +require "active_support/core_ext/module/redefine_method" module ActiveSupport class Deprecation @@ -53,37 +53,25 @@ module ActiveSupport options = method_names.extract_options! deprecator = options.delete(:deprecator) || self method_names += options.keys - mod = Module.new + mod = nil method_names.each do |method_name| if target_module.method_defined?(method_name) || target_module.private_method_defined?(method_name) - aliased_method, punctuation = method_name.to_s.sub(/([?!=])$/, ""), $1 - with_method = "#{aliased_method}_with_deprecation#{punctuation}" - without_method = "#{aliased_method}_without_deprecation#{punctuation}" - - target_module.send(:define_method, with_method) do |*args, &block| + method = target_module.instance_method(method_name) + target_module.redefine_method(method_name) do |*args, &block| deprecator.deprecation_warning(method_name, options[method_name]) - send(without_method, *args, &block) - end - - target_module.send(:alias_method, without_method, method_name) - target_module.send(:alias_method, method_name, with_method) - - case - when target_module.protected_method_defined?(without_method) - target_module.send(:protected, method_name) - when target_module.private_method_defined?(without_method) - target_module.send(:private, method_name) + method.bind(self).call(*args, &block) end else - mod.send(:define_method, method_name) do |*args, &block| + mod ||= Module.new + mod.define_method(method_name) do |*args, &block| deprecator.deprecation_warning(method_name, options[method_name]) super(*args, &block) end end end - target_module.prepend(mod) unless mod.instance_methods(false).empty? + target_module.prepend(mod) if mod end end end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/deprecation/proxy_wrappers.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/deprecation/proxy_wrappers.rb similarity index 87% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/deprecation/proxy_wrappers.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/deprecation/proxy_wrappers.rb index 896c0d2d8e..24c75b5661 100644 --- a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/deprecation/proxy_wrappers.rb +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/deprecation/proxy_wrappers.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require "active_support/core_ext/regexp" - module ActiveSupport class Deprecation class DeprecationProxy #:nodoc: @@ -122,7 +120,14 @@ module ActiveSupport # # => DEPRECATION WARNING: PLANETS is deprecated! Use PLANETS_POST_2006 instead. # (Backtrace information…) # ["Mercury", "Venus", "Earth", "Mars", "Jupiter", "Saturn", "Uranus", "Neptune"] - class DeprecatedConstantProxy < DeprecationProxy + class DeprecatedConstantProxy < Module + def self.new(*args, &block) + object = args.first + + return object unless object + super + end + def initialize(old_const, new_const, deprecator = ActiveSupport::Deprecation.instance, message: "#{old_const} is deprecated! Use #{new_const} instead.") require "active_support/inflector/methods" @@ -132,6 +137,14 @@ module ActiveSupport @message = message end + instance_methods.each { |m| undef_method m unless /^__|^object_id$/.match?(m) } + + # Don't give a deprecation warning on inspect since test/unit and error + # logs rely on it for diagnostics. + def inspect + target.inspect + end + # Returns the class of the new constant. # # PLANETS_POST_2006 = %w(mercury venus earth mars jupiter saturn uranus neptune) @@ -146,8 +159,14 @@ module ActiveSupport ActiveSupport::Inflector.constantize(@new_const.to_s) end - def warn(callstack, called, args) - @deprecator.warn(@message, callstack) + def const_missing(name) + @deprecator.warn(@message, caller_locations) + target.const_get(name) + end + + def method_missing(called, *args, &block) + @deprecator.warn(@message, caller_locations) + target.__send__(called, *args, &block) end end end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/deprecation/reporting.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/deprecation/reporting.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/deprecation/reporting.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/deprecation/reporting.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/descendants_tracker.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/descendants_tracker.rb new file mode 100644 index 0000000000..21565138a7 --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/descendants_tracker.rb @@ -0,0 +1,109 @@ +# frozen_string_literal: true + +require "weakref" + +module ActiveSupport + # This module provides an internal implementation to track descendants + # which is faster than iterating through ObjectSpace. + module DescendantsTracker + @@direct_descendants = {} + + class << self + def direct_descendants(klass) + descendants = @@direct_descendants[klass] + descendants ? descendants.to_a : [] + end + + def descendants(klass) + arr = [] + accumulate_descendants(klass, arr) + arr + end + + def clear + if defined? ActiveSupport::Dependencies + @@direct_descendants.each do |klass, descendants| + if Dependencies.autoloaded?(klass) + @@direct_descendants.delete(klass) + else + descendants.reject! { |v| Dependencies.autoloaded?(v) } + end + end + else + @@direct_descendants.clear + end + end + + # This is the only method that is not thread safe, but is only ever called + # during the eager loading phase. + def store_inherited(klass, descendant) + (@@direct_descendants[klass] ||= DescendantsArray.new) << descendant + end + + private + + def accumulate_descendants(klass, acc) + if direct_descendants = @@direct_descendants[klass] + direct_descendants.each do |direct_descendant| + acc << direct_descendant + accumulate_descendants(direct_descendant, acc) + end + end + end + end + + def inherited(base) + DescendantsTracker.store_inherited(self, base) + super + end + + def direct_descendants + DescendantsTracker.direct_descendants(self) + end + + def descendants + DescendantsTracker.descendants(self) + end + + # DescendantsArray is an array that contains weak references to classes. + class DescendantsArray # :nodoc: + include Enumerable + + def initialize + @refs = [] + end + + def initialize_copy(orig) + @refs = @refs.dup + end + + def <<(klass) + cleanup! + @refs << WeakRef.new(klass) + end + + def each + @refs.each do |ref| + yield ref.__getobj__ + rescue WeakRef::RefError + end + end + + def refs_size + @refs.size + end + + def cleanup! + @refs.delete_if { |ref| !ref.weakref_alive? } + end + + def reject! + @refs.reject! do |ref| + yield ref.__getobj__ + rescue WeakRef::RefError + true + end + end + end + end +end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/digest.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/digest.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/digest.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/digest.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/duration.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/duration.rb similarity index 97% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/duration.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/duration.rb index 88897f811e..4ab7b827bb 100644 --- a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/duration.rb +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/duration.rb @@ -4,7 +4,6 @@ require "active_support/core_ext/array/conversions" require "active_support/core_ext/module/delegation" require "active_support/core_ext/object/acts_like" require "active_support/core_ext/string/filters" -require "active_support/deprecation" module ActiveSupport # Provides accurate date and time measurements using Date#advance and @@ -214,8 +213,11 @@ module ActiveSupport end def coerce(other) #:nodoc: - if Scalar === other + case other + when Scalar [other, self] + when Duration + [Scalar.new(other.value), self] else [Scalar.new(other), self] end @@ -336,8 +338,8 @@ module ActiveSupport # 1.year.to_i # => 31556952 # # In such cases, Ruby's core - # Date[http://ruby-doc.org/stdlib/libdoc/date/rdoc/Date.html] and - # Time[http://ruby-doc.org/stdlib/libdoc/time/rdoc/Time.html] should be used for precision + # Date[https://ruby-doc.org/stdlib/libdoc/date/rdoc/Date.html] and + # Time[https://ruby-doc.org/stdlib/libdoc/time/rdoc/Time.html] should be used for precision # date and time arithmetic. def to_i @value.to_i @@ -373,7 +375,6 @@ module ActiveSupport return "0 seconds" if parts.empty? parts. - reduce(::Hash.new(0)) { |h, (l, r)| h[l] += r; h }. sort_by { |unit, _ | PARTS.index(unit) }. map { |unit, val| "#{val} #{val == 1 ? unit.to_s.chop : unit.to_s}" }. to_sentence(locale: ::I18n.default_locale) diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/encrypted_configuration.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/encrypted_configuration.rb similarity index 92% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/encrypted_configuration.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/encrypted_configuration.rb index b17695fe82..cc1d026737 100644 --- a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/encrypted_configuration.rb +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/encrypted_configuration.rb @@ -38,10 +38,6 @@ module ActiveSupport @options ||= ActiveSupport::InheritableOptions.new(config) end - def serialize(config) - config.present? ? YAML.dump(config) : "" - end - def deserialize(config) YAML.load(config).presence || {} end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/encrypted_file.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/encrypted_file.rb similarity index 97% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/encrypted_file.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/encrypted_file.rb index c66f1b557e..2b7db568a5 100644 --- a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/encrypted_file.rb +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/encrypted_file.rb @@ -1,6 +1,7 @@ # frozen_string_literal: true require "pathname" +require "tmpdir" require "active_support/message_encryptor" module ActiveSupport @@ -67,7 +68,7 @@ module ActiveSupport write(updated_contents) if updated_contents != contents ensure - FileUtils.rm(tmp_path) if tmp_path.exist? + FileUtils.rm(tmp_path) if tmp_path&.exist? end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/evented_file_update_checker.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/evented_file_update_checker.rb similarity index 84% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/evented_file_update_checker.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/evented_file_update_checker.rb index 97e982eb05..98f9508071 100644 --- a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/evented_file_update_checker.rb +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/evented_file_update_checker.rb @@ -52,16 +52,17 @@ module ActiveSupport @pid = Process.pid @boot_mutex = Mutex.new - if (@dtw = directories_to_watch).any? + dtw = directories_to_watch + @dtw, @missing = dtw.partition(&:exist?) + + if @dtw.any? # Loading listen triggers warnings. These are originated by a legit # usage of attr_* macros for private attributes, but adds a lot of noise # to our test suite. Thus, we lazy load it and disable warnings locally. silence_warnings do - begin - require "listen" - rescue LoadError => e - raise LoadError, "Could not load the 'listen' gem. Add `gem 'listen'` to the development group of your Gemfile", e.backtrace - end + require "listen" + rescue LoadError => e + raise LoadError, "Could not load the 'listen' gem. Add `gem 'listen'` to the development group of your Gemfile", e.backtrace end end boot! @@ -75,6 +76,19 @@ module ActiveSupport @updated.make_true end end + + if @missing.any?(&:exist?) + @boot_mutex.synchronize do + appeared, @missing = @missing.partition(&:exist?) + shutdown! + + @dtw += appeared + boot! + + @updated.make_true + end + end + @updated.true? end @@ -93,7 +107,21 @@ module ActiveSupport private def boot! - Listen.to(*@dtw, &method(:changed)).start + normalize_dirs! + + unless @dtw.empty? + Listen.to(*@dtw, &method(:changed)).start + end + end + + def shutdown! + Listen.stop + end + + def normalize_dirs! + @dirs.transform_keys! do |dir| + dir.exist? ? dir.realpath : dir + end end def changed(modified, added, removed) @@ -113,7 +141,9 @@ module ActiveSupport ext = @ph.normalize_extension(file.extname) file.dirname.ascend do |dir| - if @dirs.fetch(dir, []).include?(ext) + matching = @dirs[dir] + + if matching && (matching.empty? || matching.include?(ext)) break true elsif dir == @lcsp || dir.root? break false @@ -123,7 +153,7 @@ module ActiveSupport end def directories_to_watch - dtw = (@files + @dirs.keys).map { |f| @ph.existing_parent(f) } + dtw = @files.map(&:dirname) + @dirs.keys dtw.compact! dtw.uniq! diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/execution_wrapper.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/execution_wrapper.rb similarity index 99% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/execution_wrapper.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/execution_wrapper.rb index f48c586cad..ca810db584 100644 --- a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/execution_wrapper.rb +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/execution_wrapper.rb @@ -1,6 +1,7 @@ # frozen_string_literal: true require "active_support/callbacks" +require "concurrent/hash" module ActiveSupport class ExecutionWrapper diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/executor.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/executor.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/executor.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/executor.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/file_update_checker.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/file_update_checker.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/file_update_checker.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/file_update_checker.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/gem_version.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/gem_version.rb similarity index 88% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/gem_version.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/gem_version.rb index e7b802d773..1736cc0ff8 100644 --- a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/gem_version.rb +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/gem_version.rb @@ -7,9 +7,9 @@ module ActiveSupport end module VERSION - MAJOR = 5 - MINOR = 2 - TINY = 3 + MAJOR = 6 + MINOR = 0 + TINY = 1 PRE = nil STRING = [MAJOR, MINOR, TINY, PRE].compact.join(".") diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/gzip.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/gzip.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/gzip.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/gzip.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/hash_with_indifferent_access.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/hash_with_indifferent_access.rb similarity index 93% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/hash_with_indifferent_access.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/hash_with_indifferent_access.rb index 24d3aed419..42ae7e9b7b 100644 --- a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/hash_with_indifferent_access.rb +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/hash_with_indifferent_access.rb @@ -2,6 +2,7 @@ require "active_support/core_ext/hash/keys" require "active_support/core_ext/hash/reverse_merge" +require "active_support/core_ext/hash/except" module ActiveSupport # Implements a hash where keys :foo and "foo" are considered @@ -190,20 +191,18 @@ module ActiveSupport super(convert_key(key), *extras) end - if Hash.new.respond_to?(:dig) - # Same as Hash#dig where the key passed as argument can be - # either a string or a symbol: - # - # counters = ActiveSupport::HashWithIndifferentAccess.new - # counters[:foo] = { bar: 1 } - # - # counters.dig('foo', 'bar') # => 1 - # counters.dig(:foo, :bar) # => 1 - # counters.dig(:zoo) # => nil - def dig(*args) - args[0] = convert_key(args[0]) if args.size > 0 - super(*args) - end + # Same as Hash#dig where the key passed as argument can be + # either a string or a symbol: + # + # counters = ActiveSupport::HashWithIndifferentAccess.new + # counters[:foo] = { bar: 1 } + # + # counters.dig('foo', 'bar') # => 1 + # counters.dig(:foo, :bar) # => 1 + # counters.dig(:zoo) # => nil + def dig(*args) + args[0] = convert_key(args[0]) if args.size > 0 + super(*args) end # Same as Hash#default where the key passed as argument can be @@ -226,8 +225,8 @@ module ActiveSupport # hash[:a] = 'x' # hash[:b] = 'y' # hash.values_at('a', 'b') # => ["x", "y"] - def values_at(*indices) - indices.collect { |key| self[convert_key(key)] } + def values_at(*keys) + super(*keys.map { |key| convert_key(key) }) end # Returns an array of the values at the specified indices, but also @@ -240,8 +239,8 @@ module ActiveSupport # hash.fetch_values('a', 'c') { |key| 'z' } # => ["x", "z"] # hash.fetch_values('a', 'c') # => KeyError: key not found: "c" def fetch_values(*indices, &block) - indices.collect { |key| fetch(key, &block) } - end if Hash.method_defined?(:fetch_values) + super(*indices.map { |key| convert_key(key) }, &block) + end # Returns a shallow copy of the hash. # @@ -294,6 +293,11 @@ module ActiveSupport super(convert_key(key)) end + def except(*keys) + slice(*self.keys - keys.map { |key| convert_key(key) }) + end + alias_method :without, :except + def stringify_keys!; self end def deep_stringify_keys!; self end def stringify_keys; dup end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/i18n.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/i18n.rb similarity index 88% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/i18n.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/i18n.rb index d60b3eff30..39dab1cc71 100644 --- a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/i18n.rb +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/i18n.rb @@ -13,3 +13,4 @@ require "active_support/lazy_load_hooks" ActiveSupport.run_load_hooks(:i18n) I18n.load_path << File.expand_path("locale/en.yml", __dir__) +I18n.load_path << File.expand_path("locale/en.rb", __dir__) diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/i18n_railtie.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/i18n_railtie.rb similarity index 85% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/i18n_railtie.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/i18n_railtie.rb index ee24ebd68c..8faa93a3e4 100644 --- a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/i18n_railtie.rb +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/i18n_railtie.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require "active_support" -require "active_support/file_update_checker" require "active_support/core_ext/array/wrap" # :enddoc: @@ -92,6 +91,15 @@ module I18n end if args.empty? || args.first.is_a?(Hash) + ActiveSupport::Deprecation.warn(<<-MSG.squish) + Using I18n fallbacks with an empty `defaults` sets the defaults to + include the `default_locale`. This behavior will change in Rails 6.1. + If you desire the default locale to be included in the defaults, please + explicitly configure it with `config.i18n.fallbacks.defaults = + [I18n.default_locale]` or `config.i18n.fallbacks = [I18n.default_locale, + {...}]`. If you want to opt-in to the new behavior, use + `config.i18n.fallbacks.defaults = [nil, {...}]`. + MSG args.unshift I18n.default_locale end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/inflections.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/inflections.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/inflections.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/inflections.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/inflector.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/inflector.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/inflector.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/inflector.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/inflector/inflections.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/inflector/inflections.rb similarity index 98% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/inflector/inflections.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/inflector/inflections.rb index 7e5dff1d6d..88cdd99dbd 100644 --- a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/inflector/inflections.rb +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/inflector/inflections.rb @@ -1,8 +1,6 @@ # frozen_string_literal: true require "concurrent/map" -require "active_support/core_ext/array/prepend_and_append" -require "active_support/core_ext/regexp" require "active_support/i18n" require "active_support/deprecation" @@ -67,8 +65,7 @@ module ActiveSupport @__instance__[locale] ||= new end - attr_reader :plurals, :singulars, :uncountables, :humans, :acronyms, :acronym_regex - deprecate :acronym_regex + attr_reader :plurals, :singulars, :uncountables, :humans, :acronyms attr_reader :acronyms_camelize_regex, :acronyms_underscore_regex # :nodoc: diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/inflector/methods.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/inflector/methods.rb similarity index 94% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/inflector/methods.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/inflector/methods.rb index ad90a0b7bf..ee193add6f 100644 --- a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/inflector/methods.rb +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/inflector/methods.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require "active_support/inflections" -require "active_support/core_ext/regexp" module ActiveSupport # The Inflector transforms words from singular to plural, class names to table @@ -74,7 +73,7 @@ module ActiveSupport string = string.sub(inflections.acronyms_camelize_regex) { |match| match.downcase } end string.gsub!(/(?:_|(\/))([a-z\d]*)/i) { "#{$1}#{inflections.acronyms[$2] || $2.capitalize}" } - string.gsub!("/".freeze, "::".freeze) + string.gsub!("/", "::") string end @@ -91,11 +90,11 @@ module ActiveSupport # camelize(underscore('SSLError')) # => "SslError" def underscore(camel_cased_word) return camel_cased_word unless /[A-Z-]|::/.match?(camel_cased_word) - word = camel_cased_word.to_s.gsub("::".freeze, "/".freeze) - word.gsub!(inflections.acronyms_underscore_regex) { "#{$1 && '_'.freeze }#{$2.downcase}" } - word.gsub!(/([A-Z\d]+)([A-Z][a-z])/, '\1_\2'.freeze) - word.gsub!(/([a-z\d])([A-Z])/, '\1_\2'.freeze) - word.tr!("-".freeze, "_".freeze) + word = camel_cased_word.to_s.gsub("::", "/") + word.gsub!(inflections.acronyms_underscore_regex) { "#{$1 && '_' }#{$2.downcase}" } + word.gsub!(/([A-Z\d]+)([A-Z][a-z])/, '\1_\2') + word.gsub!(/([a-z\d])([A-Z])/, '\1_\2') + word.tr!("-", "_") word.downcase! word end @@ -131,11 +130,11 @@ module ActiveSupport inflections.humans.each { |(rule, replacement)| break if result.sub!(rule, replacement) } - result.sub!(/\A_+/, "".freeze) + result.sub!(/\A_+/, "") unless keep_id_suffix - result.sub!(/_id\z/, "".freeze) + result.sub!(/_id\z/, "") end - result.tr!("_".freeze, " ".freeze) + result.tr!("_", " ") result.gsub!(/([a-z\d]*)/i) do |match| "#{inflections.acronyms[match.downcase] || match.downcase}" @@ -200,14 +199,14 @@ module ActiveSupport # classify('calculus') # => "Calculus" def classify(table_name) # strip out any leading schema name - camelize(singularize(table_name.to_s.sub(/.*\./, "".freeze))) + camelize(singularize(table_name.to_s.sub(/.*\./, ""))) end # Replaces underscores with dashes in the string. # # dasherize('puni_puni') # => "puni-puni" def dasherize(underscored_word) - underscored_word.tr("_".freeze, "-".freeze) + underscored_word.tr("_", "-") end # Removes the module part from the expression in the string. @@ -270,7 +269,7 @@ module ActiveSupport # NameError is raised when the name is not in CamelCase or the constant is # unknown. def constantize(camel_cased_word) - names = camel_cased_word.split("::".freeze) + names = camel_cased_word.split("::") # Trigger a built-in NameError exception including the ill-formed constant in the message. Object.const_get(camel_cased_word) if names.empty? @@ -343,18 +342,7 @@ module ActiveSupport # ordinal(-11) # => "th" # ordinal(-1021) # => "st" def ordinal(number) - abs_number = number.to_i.abs - - if (11..13).include?(abs_number % 100) - "th" - else - case abs_number % 10 - when 1; "st" - when 2; "nd" - when 3; "rd" - else "th" - end - end + I18n.translate("number.nth.ordinals", number: number) end # Turns a number into an ordinal string used to denote the position in an @@ -367,7 +355,7 @@ module ActiveSupport # ordinalize(-11) # => "-11th" # ordinalize(-1021) # => "-1021st" def ordinalize(number) - "#{number}#{ordinal(number)}" + I18n.translate("number.nth.ordinalized", number: number) end private @@ -378,7 +366,7 @@ module ActiveSupport # const_regexp("Foo::Bar::Baz") # => "Foo(::Bar(::Baz)?)?" # const_regexp("::") # => "::" def const_regexp(camel_cased_word) - parts = camel_cased_word.split("::".freeze) + parts = camel_cased_word.split("::") return Regexp.escape(camel_cased_word) if parts.blank? diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/inflector/transliterate.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/inflector/transliterate.rb similarity index 58% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/inflector/transliterate.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/inflector/transliterate.rb index 6f2ca4999c..3e8ffd46a0 100644 --- a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/inflector/transliterate.rb +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/inflector/transliterate.rb @@ -51,20 +51,45 @@ module ActiveSupport # # Now you can have different transliterations for each locale: # - # I18n.locale = :en - # transliterate('Jürgen') + # transliterate('Jürgen', locale: :en) # # => "Jurgen" # - # I18n.locale = :de - # transliterate('Jürgen') + # transliterate('Jürgen', locale: :de) # # => "Juergen" - def transliterate(string, replacement = "?".freeze) + # + # Transliteration is restricted to UTF-8, US-ASCII and GB18030 strings + # Other encodings will raise an ArgumentError. + def transliterate(string, replacement = "?", locale: nil) + string = string.dup if string.frozen? raise ArgumentError, "Can only transliterate strings. Received #{string.class.name}" unless string.is_a?(String) - I18n.transliterate( - ActiveSupport::Multibyte::Unicode.normalize( - ActiveSupport::Multibyte::Unicode.tidy_bytes(string), :c), - replacement: replacement) + allowed_encodings = [Encoding::UTF_8, Encoding::US_ASCII, Encoding::GB18030] + raise ArgumentError, "Can not transliterate strings with #{string.encoding} encoding" unless allowed_encodings.include?(string.encoding) + + input_encoding = string.encoding + + # US-ASCII is a subset of UTF-8 so we'll force encoding as UTF-8 if + # US-ASCII is given. This way we can let tidy_bytes handle the string + # in the same way as we do for UTF-8 + string.force_encoding(Encoding::UTF_8) if string.encoding == Encoding::US_ASCII + + # GB18030 is Unicode compatible but is not a direct mapping so needs to be + # transcoded. Using invalid/undef :replace will result in loss of data in + # the event of invalid characters, but since tidy_bytes will replace + # invalid/undef with a "?" we're safe to do the same beforehand + string.encode!(Encoding::UTF_8, invalid: :replace, undef: :replace) if string.encoding == Encoding::GB18030 + + transliterated = I18n.transliterate( + ActiveSupport::Multibyte::Unicode.tidy_bytes(string).unicode_normalize(:nfc), + replacement: replacement, + locale: locale + ) + + # Restore the string encoding of the input if it was not UTF-8. + # Apply invalid/undef :replace as tidy_bytes does + transliterated.encode!(input_encoding, invalid: :replace, undef: :replace) if input_encoding != transliterated.encoding + + transliterated end # Replaces special characters in a string so that it may be used as part of @@ -75,8 +100,8 @@ module ActiveSupport # # To use a custom separator, override the +separator+ argument. # - # parameterize("Donald E. Knuth", separator: '_') # => "donald_e_knuth" - # parameterize("^très|Jolie__ ", separator: '_') # => "tres_jolie" + # parameterize("Donald E. Knuth", separator: '_') # => "donald_e_knuth" + # parameterize("^très|Jolie__ ", separator: '_') # => "tres_jolie" # # To preserve the case of the characters in a string, use the +preserve_case+ argument. # @@ -85,19 +110,23 @@ module ActiveSupport # # It preserves dashes and underscores unless they are used as separators: # - # parameterize("^très|Jolie__ ") # => "tres-jolie__" - # parameterize("^très|Jolie-- ", separator: "_") # => "tres_jolie--" - # parameterize("^très_Jolie-- ", separator: ".") # => "tres_jolie--" + # parameterize("^très|Jolie__ ") # => "tres-jolie__" + # parameterize("^très|Jolie-- ", separator: "_") # => "tres_jolie--" + # parameterize("^très_Jolie-- ", separator: ".") # => "tres_jolie--" # - def parameterize(string, separator: "-", preserve_case: false) + # If the optional parameter +locale+ is specified, + # the word will be parameterized as a word of that language. + # By default, this parameter is set to nil and it will use + # the configured I18n.locale. + def parameterize(string, separator: "-", preserve_case: false, locale: nil) # Replace accented chars with their ASCII equivalents. - parameterized_string = transliterate(string) + parameterized_string = transliterate(string, locale: locale) # Turn unwanted chars into the separator. parameterized_string.gsub!(/[^a-z0-9\-_]+/i, separator) unless separator.nil? || separator.empty? - if separator == "-".freeze + if separator == "-" re_duplicate_separator = /-{2,}/ re_leading_trailing_separator = /^-|-$/i else @@ -108,7 +137,7 @@ module ActiveSupport # No more than one of the separator in a row. parameterized_string.gsub!(re_duplicate_separator, separator) # Remove leading/trailing separator. - parameterized_string.gsub!(re_leading_trailing_separator, "".freeze) + parameterized_string.gsub!(re_leading_trailing_separator, "") end parameterized_string.downcase! unless preserve_case diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/key_generator.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/key_generator.rb similarity index 58% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/key_generator.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/key_generator.rb index 78f7d7ca8d..8b61982883 100644 --- a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/key_generator.rb +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/key_generator.rb @@ -38,36 +38,4 @@ module ActiveSupport @cache_keys[args.join] ||= @key_generator.generate_key(*args) end end - - class LegacyKeyGenerator # :nodoc: - SECRET_MIN_LENGTH = 30 # Characters - - def initialize(secret) - ensure_secret_secure(secret) - @secret = secret - end - - def generate_key(salt) - @secret - end - - private - - # To prevent users from using something insecure like "Password" we make sure that the - # secret they've provided is at least 30 characters in length. - def ensure_secret_secure(secret) - if secret.blank? - raise ArgumentError, "A secret is required to generate an integrity hash " \ - "for cookie session data. Set a secret_key_base of at least " \ - "#{SECRET_MIN_LENGTH} characters in via `bin/rails credentials:edit`." - end - - if secret.length < SECRET_MIN_LENGTH - raise ArgumentError, "Secret should be something secure, " \ - "like \"#{SecureRandom.hex(16)}\". The value you " \ - "provided, \"#{secret}\", is shorter than the minimum length " \ - "of #{SECRET_MIN_LENGTH} characters." - end - end - end end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/lazy_load_hooks.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/lazy_load_hooks.rb similarity index 94% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/lazy_load_hooks.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/lazy_load_hooks.rb index dc8080c469..a6b096a973 100644 --- a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/lazy_load_hooks.rb +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/lazy_load_hooks.rb @@ -68,7 +68,11 @@ module ActiveSupport if options[:yield] block.call(base) else - base.instance_eval(&block) + if base.is_a?(Module) + base.class_eval(&block) + else + base.instance_eval(&block) + end end end end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/locale/en.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/locale/en.rb new file mode 100644 index 0000000000..a2a7ea7ae1 --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/locale/en.rb @@ -0,0 +1,31 @@ +# frozen_string_literal: true + +{ + en: { + number: { + nth: { + ordinals: lambda do |_key, number:, **_options| + case number + when 1; "st" + when 2; "nd" + when 3; "rd" + when 4, 5, 6, 7, 8, 9, 10, 11, 12, 13; "th" + else + num_modulo = number.to_i.abs % 100 + num_modulo %= 10 if num_modulo > 13 + case num_modulo + when 1; "st" + when 2; "nd" + when 3; "rd" + else "th" + end + end + end, + + ordinalized: lambda do |_key, number:, **_options| + "#{number}#{ActiveSupport::Inflector.ordinal(number)}" + end + } + } + } +} diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/locale/en.yml b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/locale/en.yml similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/locale/en.yml rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/locale/en.yml diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/logger.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/logger.rb similarity index 81% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/logger.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/logger.rb index 8152a182b4..b8555c887b 100644 --- a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/logger.rb +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/logger.rb @@ -6,7 +6,6 @@ require "logger" module ActiveSupport class Logger < ::Logger - include ActiveSupport::LoggerThreadSafeLevel include LoggerSilence # Returns true if the logger destination matches one of the sources @@ -81,20 +80,6 @@ module ActiveSupport def initialize(*args) super @formatter = SimpleFormatter.new - after_initialize if respond_to? :after_initialize - end - - def add(severity, message = nil, progname = nil, &block) - return true if @logdev.nil? || (severity || UNKNOWN) < level - super - end - - Logger::Severity.constants.each do |severity| - class_eval(<<-EOT, __FILE__, __LINE__ + 1) - def #{severity.downcase}? # def debug? - Logger::#{severity} >= level # DEBUG >= level - end # end - EOT end # Simple formatter which only displays the message. diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/logger_silence.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/logger_silence.rb new file mode 100644 index 0000000000..b2444c1e34 --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/logger_silence.rb @@ -0,0 +1,45 @@ +# frozen_string_literal: true + +require "active_support/concern" +require "active_support/core_ext/module/attribute_accessors" +require "active_support/logger_thread_safe_level" + +module LoggerSilence + extend ActiveSupport::Concern + + included do + ActiveSupport::Deprecation.warn( + "Including LoggerSilence is deprecated and will be removed in Rails 6.1. " \ + "Please use `ActiveSupport::LoggerSilence` instead" + ) + + include ActiveSupport::LoggerSilence + end +end + +module ActiveSupport + module LoggerSilence + extend ActiveSupport::Concern + + included do + cattr_accessor :silencer, default: true + include ActiveSupport::LoggerThreadSafeLevel + end + + # Silences the logger for the duration of the block. + def silence(temporary_level = Logger::ERROR) + if silencer + begin + old_local_level = local_level + self.local_level = temporary_level + + yield self + ensure + self.local_level = old_local_level + end + else + yield self + end + end + end +end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/logger_thread_safe_level.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/logger_thread_safe_level.rb new file mode 100644 index 0000000000..1775a41492 --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/logger_thread_safe_level.rb @@ -0,0 +1,56 @@ +# frozen_string_literal: true + +require "active_support/concern" +require "active_support/core_ext/module/attribute_accessors" +require "concurrent" +require "fiber" + +module ActiveSupport + module LoggerThreadSafeLevel # :nodoc: + extend ActiveSupport::Concern + + included do + cattr_accessor :local_levels, default: Concurrent::Map.new(initial_capacity: 2), instance_accessor: false + end + + Logger::Severity.constants.each do |severity| + class_eval(<<-EOT, __FILE__, __LINE__ + 1) + def #{severity.downcase}? # def debug? + Logger::#{severity} >= level # DEBUG >= level + end # end + EOT + end + + def after_initialize + ActiveSupport::Deprecation.warn( + "Logger don't need to call #after_initialize directly anymore. It will be deprecated without replacement in " \ + "Rails 6.1." + ) + end + + def local_log_id + Fiber.current.__id__ + end + + def local_level + self.class.local_levels[local_log_id] + end + + def local_level=(level) + if level + self.class.local_levels[local_log_id] = level + else + self.class.local_levels.delete(local_log_id) + end + end + + def level + local_level || super + end + + def add(severity, message = nil, progname = nil, &block) # :nodoc: + return true if @logdev.nil? || (severity || UNKNOWN) < level + super + end + end +end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/message_encryptor.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/message_encryptor.rb similarity index 98% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/message_encryptor.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/message_encryptor.rb index 8b73270894..7d6f8937f0 100644 --- a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/message_encryptor.rb +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/message_encryptor.rb @@ -53,7 +53,7 @@ module ActiveSupport # crypt.encrypt_and_sign(parcel, expires_in: 1.month) # crypt.encrypt_and_sign(doowad, expires_at: Time.now.end_of_year) # - # Then the messages can be verified and returned upto the expire time. + # Then the messages can be verified and returned up to the expire time. # Thereafter, verifying returns +nil+. # # === Rotating keys @@ -182,7 +182,7 @@ module ActiveSupport def _decrypt(encrypted_message, purpose) cipher = new_cipher - encrypted_data, iv, auth_tag = encrypted_message.split("--".freeze).map { |v| ::Base64.strict_decode64(v) } + encrypted_data, iv, auth_tag = encrypted_message.split("--").map { |v| ::Base64.strict_decode64(v) } # Currently the OpenSSL bindings do not raise an error if auth_tag is # truncated, which would allow an attacker to easily forge it. See @@ -210,9 +210,7 @@ module ActiveSupport OpenSSL::Cipher.new(@cipher) end - def verifier - @verifier - end + attr_reader :verifier def aead_mode? @aead_mode ||= new_cipher.authenticated? diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/message_verifier.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/message_verifier.rb similarity index 97% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/message_verifier.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/message_verifier.rb index 83c39c0a86..c4a4afe95f 100644 --- a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/message_verifier.rb +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/message_verifier.rb @@ -71,7 +71,7 @@ module ActiveSupport # @verifier.generate(parcel, expires_in: 1.month) # @verifier.generate(doowad, expires_at: Time.now.end_of_year) # - # Then the messages can be verified and returned upto the expire time. + # Then the messages can be verified and returned up to the expire time. # Thereafter, the +verified+ method returns +nil+ while +verify+ raises # ActiveSupport::MessageVerifier::InvalidSignature. # @@ -122,7 +122,7 @@ module ActiveSupport def valid_message?(signed_message) return if signed_message.nil? || !signed_message.valid_encoding? || signed_message.blank? - data, digest = signed_message.split("--".freeze) + data, digest = signed_message.split("--") data.present? && digest.present? && ActiveSupport::SecurityUtils.secure_compare(digest, generate_digest(data)) end @@ -150,7 +150,7 @@ module ActiveSupport def verified(signed_message, purpose: nil, **) if valid_message?(signed_message) begin - data = signed_message.split("--".freeze)[0] + data = signed_message.split("--")[0] message = Messages::Metadata.verify(decode(data), purpose) @serializer.load(message) if message rescue ArgumentError => argument_error diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/multibyte.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/multibyte.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/multibyte.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/multibyte.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/notifications.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/notifications.rb similarity index 77% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/notifications.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/notifications.rb index 6207de8094..d9e93b530c 100644 --- a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/notifications.rb +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/notifications.rb @@ -34,7 +34,7 @@ module ActiveSupport # name # => String, name of the event (such as 'render' from above) # start # => Time, when the instrumented block started execution # finish # => Time, when the instrumented block ended execution - # id # => String, unique ID for this notification + # id # => String, unique ID for the instrumenter that fired the event # payload # => Hash, the payload # end # @@ -59,7 +59,7 @@ module ActiveSupport # event.payload # => { extra: :information } # # The block in the subscribe call gets the name of the event, start - # timestamp, end timestamp, a string with a unique identifier for that event + # timestamp, end timestamp, a string with a unique identifier for that event's instrumenter # (something like "535801666f04d0298cd6"), and a hash with the payload, in # that order. # @@ -67,9 +67,12 @@ module ActiveSupport # have a key :exception with an array of two elements as value: a string with # the name of the exception class, and the exception message. # The :exception_object key of the payload will have the exception - # itself as the value. + # itself as the value: # - # As the previous example depicts, the class ActiveSupport::Notifications::Event + # event.payload[:exception] # => ["ArgumentError", "Invalid value"] + # event.payload[:exception_object] # => # + # + # As the earlier example depicts, the class ActiveSupport::Notifications::Event # is able to take the arguments as they come and provide an object-oriented # interface to that data. # @@ -150,6 +153,15 @@ module ActiveSupport # # ActiveSupport::Notifications.unsubscribe("render") # + # Subscribers using a regexp or other pattern-matching object will remain subscribed + # to all events that match their original pattern, unless those events match a string + # passed to `unsubscribe`: + # + # subscriber = ActiveSupport::Notifications.subscribe(/render/) { } + # ActiveSupport::Notifications.unsubscribe('render_template.action_view') + # subscriber.matches?('render_template.action_view') # => false + # subscriber.matches?('render_partial.action_view') # => true + # # == Default Queue # # Notifications ships with a queue implementation that consumes and publishes events @@ -171,6 +183,31 @@ module ActiveSupport end end + # Subscribe to a given event name with the passed +block+. + # + # You can subscribe to events by passing a String to match exact event + # names, or by passing a Regexp to match all events that match a pattern. + # + # ActiveSupport::Notifications.subscribe(/render/) do |*args| + # @event = ActiveSupport::Notifications::Event.new(*args) + # end + # + # The +block+ will receive five parameters with information about the event: + # + # ActiveSupport::Notifications.subscribe('render') do |name, start, finish, id, payload| + # name # => String, name of the event (such as 'render' from above) + # start # => Time, when the instrumented block started execution + # finish # => Time, when the instrumented block ended execution + # id # => String, unique ID for the instrumenter that fired the event + # payload # => Hash, the payload + # end + # + # If the block passed to the method only takes one parameter, + # it will yield an event object to the block: + # + # ActiveSupport::Notifications.subscribe(/render/) do |event| + # @event = event + # end def subscribe(*args, &block) notifier.subscribe(*args, &block) end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/notifications/fanout.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/notifications/fanout.rb similarity index 51% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/notifications/fanout.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/notifications/fanout.rb index 25aab175b4..c506b35b1e 100644 --- a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/notifications/fanout.rb +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/notifications/fanout.rb @@ -2,6 +2,7 @@ require "mutex_m" require "concurrent/map" +require "set" module ActiveSupport module Notifications @@ -13,16 +14,22 @@ module ActiveSupport include Mutex_m def initialize - @subscribers = [] + @string_subscribers = Hash.new { |h, k| h[k] = [] } + @other_subscribers = [] @listeners_for = Concurrent::Map.new super end - def subscribe(pattern = nil, block = Proc.new) - subscriber = Subscribers.new pattern, block + def subscribe(pattern = nil, callable = nil, &block) + subscriber = Subscribers.new(pattern, callable || block) synchronize do - @subscribers << subscriber - @listeners_for.clear + if String === pattern + @string_subscribers[pattern] << subscriber + @listeners_for.delete(pattern) + else + @other_subscribers << subscriber + @listeners_for.clear + end end subscriber end @@ -31,12 +38,19 @@ module ActiveSupport synchronize do case subscriber_or_name when String - @subscribers.reject! { |s| s.matches?(subscriber_or_name) } + @string_subscribers[subscriber_or_name].clear + @listeners_for.delete(subscriber_or_name) + @other_subscribers.each { |sub| sub.unsubscribe!(subscriber_or_name) } else - @subscribers.delete(subscriber_or_name) + pattern = subscriber_or_name.try(:pattern) + if String === pattern + @string_subscribers[pattern].delete(subscriber_or_name) + @listeners_for.delete(pattern) + else + @other_subscribers.delete(subscriber_or_name) + @listeners_for.clear + end end - - @listeners_for.clear end end @@ -56,7 +70,8 @@ module ActiveSupport # this is correctly done double-checked locking (Concurrent::Map's lookups have volatile semantics) @listeners_for[name] || synchronize do # use synchronisation when accessing @subscribers - @listeners_for[name] ||= @subscribers.select { |s| s.subscribed_to?(name) } + @listeners_for[name] ||= + @string_subscribers[name] + @other_subscribers.select { |s| s.subscribed_to?(name) } end end @@ -70,12 +85,29 @@ module ActiveSupport module Subscribers # :nodoc: def self.new(pattern, listener) + subscriber_class = Timed + if listener.respond_to?(:start) && listener.respond_to?(:finish) - subscriber = Evented.new pattern, listener + subscriber_class = Evented else - subscriber = Timed.new pattern, listener + # Doing all this to detect a block like `proc { |x| }` vs + # `proc { |*x| }` or `proc { |**x| }` + if listener.respond_to?(:parameters) + params = listener.parameters + if params.length == 1 && params.first.first == :opt + subscriber_class = EventObject + end + end end + wrap_all pattern, subscriber_class.new(pattern, listener) + end + + def self.event_object_subscriber(pattern, block) + wrap_all pattern, EventObject.new(pattern, block) + end + + def self.wrap_all(pattern, subscriber) unless pattern AllMessages.new(subscriber) else @@ -83,9 +115,33 @@ module ActiveSupport end end - class Evented #:nodoc: - def initialize(pattern, delegate) + class Matcher #:nodoc: + attr_reader :pattern, :exclusions + + def self.wrap(pattern) + return pattern if String === pattern + new(pattern) + end + + def initialize(pattern) @pattern = pattern + @exclusions = Set.new + end + + def unsubscribe!(name) + exclusions << -name if pattern === name + end + + def ===(name) + pattern === name && !exclusions.include?(name) + end + end + + class Evented #:nodoc: + attr_reader :pattern + + def initialize(pattern, delegate) + @pattern = Matcher.wrap(pattern) @delegate = delegate @can_publish = delegate.respond_to?(:publish) end @@ -105,11 +161,15 @@ module ActiveSupport end def subscribed_to?(name) - @pattern === name + pattern === name end def matches?(name) - @pattern && @pattern === name + pattern && pattern === name + end + + def unsubscribe!(name) + pattern.unsubscribe!(name) end end @@ -130,6 +190,27 @@ module ActiveSupport end end + class EventObject < Evented + def start(name, id, payload) + stack = Thread.current[:_event_stack] ||= [] + event = build_event name, id, payload + event.start! + stack.push event + end + + def finish(name, id, payload) + stack = Thread.current[:_event_stack] + event = stack.pop + event.finish! + @delegate.call event + end + + private + def build_event(name, id, payload) + ActiveSupport::Notifications::Event.new name, nil, nil, id, payload + end + end + class AllMessages # :nodoc: def initialize(delegate) @delegate = delegate @@ -151,6 +232,10 @@ module ActiveSupport true end + def unsubscribe!(*) + false + end + alias :matches? :=== end end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/notifications/instrumenter.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/notifications/instrumenter.rb new file mode 100644 index 0000000000..70de376452 --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/notifications/instrumenter.rb @@ -0,0 +1,165 @@ +# frozen_string_literal: true + +require "securerandom" + +module ActiveSupport + module Notifications + # Instrumenters are stored in a thread local. + class Instrumenter + attr_reader :id + + def initialize(notifier) + @id = unique_id + @notifier = notifier + end + + # Given a block, instrument it by measuring the time taken to execute + # and publish it. Without a block, simply send a message via the + # notifier. Notice that events get sent even if an error occurs in the + # passed-in block. + def instrument(name, payload = {}) + # some of the listeners might have state + listeners_state = start name, payload + begin + yield payload if block_given? + rescue Exception => e + payload[:exception] = [e.class.name, e.message] + payload[:exception_object] = e + raise e + ensure + finish_with_state listeners_state, name, payload + end + end + + # Send a start notification with +name+ and +payload+. + def start(name, payload) + @notifier.start name, @id, payload + end + + # Send a finish notification with +name+ and +payload+. + def finish(name, payload) + @notifier.finish name, @id, payload + end + + def finish_with_state(listeners_state, name, payload) + @notifier.finish name, @id, payload, listeners_state + end + + private + + def unique_id + SecureRandom.hex(10) + end + end + + class Event + attr_reader :name, :time, :end, :transaction_id, :payload, :children + + def self.clock_gettime_supported? # :nodoc: + defined?(Process::CLOCK_PROCESS_CPUTIME_ID) && + !Gem.win_platform? && + !RUBY_PLATFORM.match?(/solaris/i) + end + private_class_method :clock_gettime_supported? + + def initialize(name, start, ending, transaction_id, payload) + @name = name + @payload = payload.dup + @time = start + @transaction_id = transaction_id + @end = ending + @children = [] + @cpu_time_start = 0 + @cpu_time_finish = 0 + @allocation_count_start = 0 + @allocation_count_finish = 0 + end + + # Record information at the time this event starts + def start! + @time = now + @cpu_time_start = now_cpu + @allocation_count_start = now_allocations + end + + # Record information at the time this event finishes + def finish! + @cpu_time_finish = now_cpu + @end = now + @allocation_count_finish = now_allocations + end + + def end=(ending) + ActiveSupport::Deprecation.deprecation_warning(:end=, :finish!) + @end = ending + end + + # Returns the CPU time (in milliseconds) passed since the call to + # +start!+ and the call to +finish!+ + def cpu_time + (@cpu_time_finish - @cpu_time_start) * 1000 + end + + # Returns the idle time time (in milliseconds) passed since the call to + # +start!+ and the call to +finish!+ + def idle_time + duration - cpu_time + end + + # Returns the number of allocations made since the call to +start!+ and + # the call to +finish!+ + def allocations + @allocation_count_finish - @allocation_count_start + end + + # Returns the difference in milliseconds between when the execution of the + # event started and when it ended. + # + # ActiveSupport::Notifications.subscribe('wait') do |*args| + # @event = ActiveSupport::Notifications::Event.new(*args) + # end + # + # ActiveSupport::Notifications.instrument('wait') do + # sleep 1 + # end + # + # @event.duration # => 1000.138 + def duration + 1000.0 * (self.end - time) + end + + def <<(event) + @children << event + end + + def parent_of?(event) + @children.include? event + end + + private + def now + Concurrent.monotonic_time + end + + if clock_gettime_supported? + def now_cpu + Process.clock_gettime(Process::CLOCK_PROCESS_CPUTIME_ID) + end + else + def now_cpu + 0 + end + end + + if defined?(JRUBY_VERSION) + def now_allocations + 0 + end + else + def now_allocations + GC.stat :total_allocated_objects + end + end + end + end +end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/option_merger.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/option_merger.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/option_merger.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/option_merger.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/ordered_hash.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/ordered_hash.rb similarity index 94% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/ordered_hash.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/ordered_hash.rb index 5758513021..ad11524137 100644 --- a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/ordered_hash.rb +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/ordered_hash.rb @@ -16,7 +16,7 @@ module ActiveSupport # oh.keys # => [:a, :b], this order is guaranteed # # Also, maps the +omap+ feature for YAML files - # (See http://yaml.org/type/omap.html) to support ordered items + # (See https://yaml.org/type/omap.html) to support ordered items # when loading from yaml. # # ActiveSupport::OrderedHash is namespaced to prevent conflicts diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/ordered_options.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/ordered_options.rb similarity index 98% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/ordered_options.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/ordered_options.rb index c4e419f546..ea822706e8 100644 --- a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/ordered_options.rb +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/ordered_options.rb @@ -39,7 +39,7 @@ module ActiveSupport end def method_missing(name, *args) - name_string = name.to_s + name_string = +name.to_s if name_string.chomp!("=") self[name_string] = args.first else diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/parameter_filter.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/parameter_filter.rb new file mode 100644 index 0000000000..7114cc8efb --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/parameter_filter.rb @@ -0,0 +1,129 @@ +# frozen_string_literal: true + +require "active_support/core_ext/object/duplicable" +require "active_support/core_ext/array/extract" + +module ActiveSupport + # +ParameterFilter+ allows you to specify keys for sensitive data from + # hash-like object and replace corresponding value. Filtering only certain + # sub-keys from a hash is possible by using the dot notation: + # 'credit_card.number'. If a proc is given, each key and value of a hash and + # all sub-hashes are passed to it, where the value or the key can be replaced + # using String#replace or similar methods. + # + # ActiveSupport::ParameterFilter.new([:password]) + # => replaces the value to all keys matching /password/i with "[FILTERED]" + # + # ActiveSupport::ParameterFilter.new([:foo, "bar"]) + # => replaces the value to all keys matching /foo|bar/i with "[FILTERED]" + # + # ActiveSupport::ParameterFilter.new(["credit_card.code"]) + # => replaces { credit_card: {code: "xxxx"} } with "[FILTERED]", does not + # change { file: { code: "xxxx"} } + # + # ActiveSupport::ParameterFilter.new([-> (k, v) do + # v.reverse! if k =~ /secret/i + # end]) + # => reverses the value to all keys matching /secret/i + class ParameterFilter + FILTERED = "[FILTERED]" # :nodoc: + + # Create instance with given filters. Supported type of filters are +String+, +Regexp+, and +Proc+. + # Other types of filters are treated as +String+ using +to_s+. + # For +Proc+ filters, key, value, and optional original hash is passed to block arguments. + # + # ==== Options + # + # * :mask - A replaced object when filtered. Defaults to +"[FILTERED]"+ + def initialize(filters = [], mask: FILTERED) + @filters = filters + @mask = mask + end + + # Mask value of +params+ if key matches one of filters. + def filter(params) + compiled_filter.call(params) + end + + # Returns filtered value for given key. For +Proc+ filters, third block argument is not populated. + def filter_param(key, value) + @filters.empty? ? value : compiled_filter.value_for_key(key, value) + end + + private + + def compiled_filter + @compiled_filter ||= CompiledFilter.compile(@filters, mask: @mask) + end + + class CompiledFilter # :nodoc: + def self.compile(filters, mask:) + return lambda { |params| params.dup } if filters.empty? + + strings, regexps, blocks = [], [], [] + + filters.each do |item| + case item + when Proc + blocks << item + when Regexp + regexps << item + else + strings << Regexp.escape(item.to_s) + end + end + + deep_regexps = regexps.extract! { |r| r.to_s.include?("\\.") } + deep_strings = strings.extract! { |s| s.include?("\\.") } + + regexps << Regexp.new(strings.join("|"), true) unless strings.empty? + deep_regexps << Regexp.new(deep_strings.join("|"), true) unless deep_strings.empty? + + new regexps, deep_regexps, blocks, mask: mask + end + + attr_reader :regexps, :deep_regexps, :blocks + + def initialize(regexps, deep_regexps, blocks, mask:) + @regexps = regexps + @deep_regexps = deep_regexps.any? ? deep_regexps : nil + @blocks = blocks + @mask = mask + end + + def call(params, parents = [], original_params = params) + filtered_params = params.class.new + + params.each do |key, value| + filtered_params[key] = value_for_key(key, value, parents, original_params) + end + + filtered_params + end + + def value_for_key(key, value, parents = [], original_params = nil) + parents.push(key) if deep_regexps + if regexps.any? { |r| r.match?(key) } + value = @mask + elsif deep_regexps && (joined = parents.join(".")) && deep_regexps.any? { |r| r.match?(joined) } + value = @mask + elsif value.is_a?(Hash) + value = call(value, parents, original_params) + elsif value.is_a?(Array) + # If we don't pop the current parent it will be duplicated as we + # process each array value. + parents.pop if deep_regexps + value = value.map { |v| value_for_key(key, v, parents, original_params) } + # Restore the parent stack after processing the array. + parents.push(key) if deep_regexps + elsif blocks.any? + key = key.dup if key.duplicable? + value = value.dup if value.duplicable? + blocks.each { |b| b.arity == 2 ? b.call(key, value) : b.call(key, value, original_params) } + end + parents.pop if deep_regexps + value + end + end + end +end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/per_thread_registry.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/per_thread_registry.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/per_thread_registry.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/per_thread_registry.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/proxy_object.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/proxy_object.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/proxy_object.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/proxy_object.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/rails.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/rails.rb similarity index 82% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/rails.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/rails.rb index 5c34a0abb3..8b727a69ec 100644 --- a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/rails.rb +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/rails.rb @@ -27,9 +27,3 @@ require "active_support/core_ext/module/delegation" # Defines ActiveSupport::Deprecation. require "active_support/deprecation" - -# Defines Regexp#match?. -# -# This should be removed when Rails needs Ruby 2.4 or later, and the require -# added where other Regexp extensions are being used (easy to grep). -require "active_support/core_ext/regexp" diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/railtie.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/railtie.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/railtie.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/railtie.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/reloader.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/reloader.rb similarity index 96% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/reloader.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/reloader.rb index b26d9c3665..2f81cd4f80 100644 --- a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/reloader.rb +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/reloader.rb @@ -1,6 +1,7 @@ # frozen_string_literal: true require "active_support/execution_wrapper" +require "active_support/executor" module ActiveSupport #-- @@ -49,11 +50,9 @@ module ActiveSupport def self.reload! executor.wrap do new.tap do |instance| - begin - instance.run! - ensure - instance.complete! - end + instance.run! + ensure + instance.complete! end end prepare! diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/rescuable.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/rescuable.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/rescuable.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/rescuable.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/security_utils.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/security_utils.rb similarity index 89% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/security_utils.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/security_utils.rb index 20b6b9cd3f..5e455fca57 100644 --- a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/security_utils.rb +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/security_utils.rb @@ -24,7 +24,7 @@ module ActiveSupport # The values are first processed by SHA256, so that we don't leak length info # via timing attacks. def secure_compare(a, b) - fixed_length_secure_compare(::Digest::SHA256.hexdigest(a), ::Digest::SHA256.hexdigest(b)) && a == b + fixed_length_secure_compare(::Digest::SHA256.digest(a), ::Digest::SHA256.digest(b)) && a == b end module_function :secure_compare end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/string_inquirer.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/string_inquirer.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/string_inquirer.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/string_inquirer.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/subscriber.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/subscriber.rb similarity index 55% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/subscriber.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/subscriber.rb index 9291b48ce8..c3cd175a52 100644 --- a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/subscriber.rb +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/subscriber.rb @@ -24,6 +24,10 @@ module ActiveSupport # After configured, whenever a "sql.active_record" notification is published, # it will properly dispatch the event (ActiveSupport::Notifications::Event) to # the +sql+ method. + # + # We can detach a subscriber as well: + # + # ActiveRecord::StatsSubscriber.detach_from(:active_record) class Subscriber class << self # Attach the subscriber to a namespace. @@ -40,6 +44,25 @@ module ActiveSupport end end + # Detach the subscriber from a namespace. + def detach_from(namespace, notifier = ActiveSupport::Notifications) + @namespace = namespace + @subscriber = find_attached_subscriber + @notifier = notifier + + return unless subscriber + + subscribers.delete(subscriber) + + # Remove event subscribers of all existing methods on the class. + subscriber.public_methods(false).each do |event| + remove_event_subscriber(event) + end + + # Reset notifier so that event subscribers will not add for new methods added to the class. + @notifier = nil + end + # Adds event subscribers for all new methods added to the class. def method_added(event) # Only public methods are added as subscribers, and only if a notifier @@ -54,62 +77,78 @@ module ActiveSupport @@subscribers ||= [] end - # TODO Change this to private once we've dropped Ruby 2.2 support. - # Workaround for Ruby 2.2 "private attribute?" warning. - protected - - attr_reader :subscriber, :notifier, :namespace - private + attr_reader :subscriber, :notifier, :namespace - def add_event_subscriber(event) # :doc: - return if %w{ start finish }.include?(event.to_s) + def add_event_subscriber(event) # :doc: + return if invalid_event?(event.to_s) - pattern = "#{event}.#{namespace}" + pattern = prepare_pattern(event) - # Don't add multiple subscribers (eg. if methods are redefined). - return if subscriber.patterns.include?(pattern) + # Don't add multiple subscribers (eg. if methods are redefined). + return if pattern_subscribed?(pattern) - subscriber.patterns << pattern - notifier.subscribe(pattern, subscriber) - end + subscriber.patterns[pattern] = notifier.subscribe(pattern, subscriber) + end + + def remove_event_subscriber(event) # :doc: + return if invalid_event?(event.to_s) + + pattern = prepare_pattern(event) + + return unless pattern_subscribed?(pattern) + + notifier.unsubscribe(subscriber.patterns[pattern]) + subscriber.patterns.delete(pattern) + end + + def find_attached_subscriber + subscribers.find { |attached_subscriber| attached_subscriber.instance_of?(self) } + end + + def invalid_event?(event) + %w{ start finish }.include?(event.to_s) + end + + def prepare_pattern(event) + "#{event}.#{namespace}" + end + + def pattern_subscribed?(pattern) + subscriber.patterns.key?(pattern) + end end attr_reader :patterns # :nodoc: def initialize @queue_key = [self.class.name, object_id].join "-" - @patterns = [] + @patterns = {} super end def start(name, id, payload) - e = ActiveSupport::Notifications::Event.new(name, now, nil, id, payload) + event = ActiveSupport::Notifications::Event.new(name, nil, nil, id, payload) + event.start! parent = event_stack.last - parent << e if parent + parent << event if parent - event_stack.push e + event_stack.push event end def finish(name, id, payload) - finished = now - event = event_stack.pop - event.end = finished + event = event_stack.pop + event.finish! event.payload.merge!(payload) - method = name.split(".".freeze).first + method = name.split(".").first send(method, event) end private - def event_stack SubscriberQueueRegistry.instance.get_queue(@queue_key) end - - def now - Process.clock_gettime(Process::CLOCK_MONOTONIC) - end end # This is a registry for all the event stacks kept for subscribers. diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/tagged_logging.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/tagged_logging.rb similarity index 86% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/tagged_logging.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/tagged_logging.rb index 8561cba9f1..d8a86d997e 100644 --- a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/tagged_logging.rb +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/tagged_logging.rb @@ -46,21 +46,30 @@ module ActiveSupport def current_tags # We use our object ID here to avoid conflicting with other instances - thread_key = @thread_key ||= "activesupport_tagged_logging_tags:#{object_id}".freeze + thread_key = @thread_key ||= "activesupport_tagged_logging_tags:#{object_id}" Thread.current[thread_key] ||= [] end def tags_text tags = current_tags - if tags.any? + if tags.one? + "[#{tags[0]}] " + elsif tags.any? tags.collect { |tag| "[#{tag}] " }.join end end end def self.new(logger) - # Ensure we set a default formatter so we aren't extending nil! - logger.formatter ||= ActiveSupport::Logger::SimpleFormatter.new + logger = logger.dup + + if logger.formatter + logger.formatter = logger.formatter.dup + else + # Ensure we set a default formatter so we aren't extending nil! + logger.formatter = ActiveSupport::Logger::SimpleFormatter.new + end + logger.formatter.extend Formatter logger.extend(self) end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/test_case.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/test_case.rb new file mode 100644 index 0000000000..7be4108ed7 --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/test_case.rb @@ -0,0 +1,163 @@ +# frozen_string_literal: true + +gem "minitest" # make sure we get the gem, not stdlib +require "minitest" +require "active_support/testing/tagged_logging" +require "active_support/testing/setup_and_teardown" +require "active_support/testing/assertions" +require "active_support/testing/deprecation" +require "active_support/testing/declarative" +require "active_support/testing/isolation" +require "active_support/testing/constant_lookup" +require "active_support/testing/time_helpers" +require "active_support/testing/file_fixtures" +require "active_support/testing/parallelization" +require "concurrent/utility/processor_counter" + +module ActiveSupport + class TestCase < ::Minitest::Test + Assertion = Minitest::Assertion + + class << self + # Sets the order in which test cases are run. + # + # ActiveSupport::TestCase.test_order = :random # => :random + # + # Valid values are: + # * +:random+ (to run tests in random order) + # * +:parallel+ (to run tests in parallel) + # * +:sorted+ (to run tests alphabetically by method name) + # * +:alpha+ (equivalent to +:sorted+) + def test_order=(new_order) + ActiveSupport.test_order = new_order + end + + # Returns the order in which test cases are run. + # + # ActiveSupport::TestCase.test_order # => :random + # + # Possible values are +:random+, +:parallel+, +:alpha+, +:sorted+. + # Defaults to +:random+. + def test_order + ActiveSupport.test_order ||= :random + end + + # Parallelizes the test suite. + # + # Takes a +workers+ argument that controls how many times the process + # is forked. For each process a new database will be created suffixed + # with the worker number. + # + # test-database-0 + # test-database-1 + # + # If ENV["PARALLEL_WORKERS"] is set the workers argument will be ignored + # and the environment variable will be used instead. This is useful for CI + # environments, or other environments where you may need more workers than + # you do for local testing. + # + # If the number of workers is set to +1+ or fewer, the tests will not be + # parallelized. + # + # If +workers+ is set to +:number_of_processors+, the number of workers will be + # set to the actual core count on the machine you are on. + # + # The default parallelization method is to fork processes. If you'd like to + # use threads instead you can pass with: :threads to the +parallelize+ + # method. Note the threaded parallelization does not create multiple + # database and will not work with system tests at this time. + # + # parallelize(workers: :number_of_processors, with: :threads) + # + # The threaded parallelization uses minitest's parallel executor directly. + # The processes parallelization uses a Ruby DRb server. + def parallelize(workers: :number_of_processors, with: :processes) + workers = Concurrent.physical_processor_count if workers == :number_of_processors + workers = ENV["PARALLEL_WORKERS"].to_i if ENV["PARALLEL_WORKERS"] + + return if workers <= 1 + + executor = case with + when :processes + Testing::Parallelization.new(workers) + when :threads + Minitest::Parallel::Executor.new(workers) + else + raise ArgumentError, "#{with} is not a supported parallelization executor." + end + + self.lock_threads = false if defined?(self.lock_threads) && with == :threads + + Minitest.parallel_executor = executor + + parallelize_me! + end + + # Set up hook for parallel testing. This can be used if you have multiple + # databases or any behavior that needs to be run after the process is forked + # but before the tests run. + # + # Note: this feature is not available with the threaded parallelization. + # + # In your +test_helper.rb+ add the following: + # + # class ActiveSupport::TestCase + # parallelize_setup do + # # create databases + # end + # end + def parallelize_setup(&block) + ActiveSupport::Testing::Parallelization.after_fork_hook do |worker| + yield worker + end + end + + # Clean up hook for parallel testing. This can be used to drop databases + # if your app uses multiple write/read databases or other clean up before + # the tests finish. This runs before the forked process is closed. + # + # Note: this feature is not available with the threaded parallelization. + # + # In your +test_helper.rb+ add the following: + # + # class ActiveSupport::TestCase + # parallelize_teardown do + # # drop databases + # end + # end + def parallelize_teardown(&block) + ActiveSupport::Testing::Parallelization.run_cleanup_hook do |worker| + yield worker + end + end + end + + alias_method :method_name, :name + + include ActiveSupport::Testing::TaggedLogging + prepend ActiveSupport::Testing::SetupAndTeardown + include ActiveSupport::Testing::Assertions + include ActiveSupport::Testing::Deprecation + include ActiveSupport::Testing::TimeHelpers + include ActiveSupport::Testing::FileFixtures + extend ActiveSupport::Testing::Declarative + + # test/unit backwards compatibility methods + alias :assert_raise :assert_raises + alias :assert_not_empty :refute_empty + alias :assert_not_equal :refute_equal + alias :assert_not_in_delta :refute_in_delta + alias :assert_not_in_epsilon :refute_in_epsilon + alias :assert_not_includes :refute_includes + alias :assert_not_instance_of :refute_instance_of + alias :assert_not_kind_of :refute_kind_of + alias :assert_no_match :refute_match + alias :assert_not_nil :refute_nil + alias :assert_not_operator :refute_operator + alias :assert_not_predicate :refute_predicate + alias :assert_not_respond_to :refute_respond_to + alias :assert_not_same :refute_same + + ActiveSupport.run_load_hooks(:active_support_test_case, self) + end +end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/time.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/time.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/time.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/time.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/time_with_zone.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/time_with_zone.rb similarity index 97% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/time_with_zone.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/time_with_zone.rb index 20650ce714..3be5f6f7b5 100644 --- a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/time_with_zone.rb +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/time_with_zone.rb @@ -43,8 +43,8 @@ module ActiveSupport "Time" end - PRECISIONS = Hash.new { |h, n| h[n] = "%FT%T.%#{n}N".freeze } - PRECISIONS[0] = "%FT%T".freeze + PRECISIONS = Hash.new { |h, n| h[n] = "%FT%T.%#{n}N" } + PRECISIONS[0] = "%FT%T" include Comparable, DateAndTime::Compatibility attr_reader :time_zone @@ -147,7 +147,7 @@ module ActiveSupport # # Time.zone.now.xmlschema # => "2014-12-04T11:02:37-05:00" def xmlschema(fraction_digits = 0) - "#{time.strftime(PRECISIONS[fraction_digits.to_i])}#{formatted_offset(true, 'Z'.freeze)}" + "#{time.strftime(PRECISIONS[fraction_digits.to_i])}#{formatted_offset(true, 'Z')}" end alias_method :iso8601, :xmlschema alias_method :rfc3339, :xmlschema @@ -225,6 +225,8 @@ module ActiveSupport def <=>(other) utc <=> other end + alias_method :before?, :< + alias_method :after?, :> # Returns true if the current object's time is within the specified # +min+ and +max+ time. @@ -284,8 +286,10 @@ module ActiveSupport alias_method :since, :+ alias_method :in, :+ - # Returns a new TimeWithZone object that represents the difference between - # the current object's time and the +other+ time. + # Subtracts an interval of time and returns a new TimeWithZone object unless + # the other value `acts_like?` time. Then it will return a Float of the difference + # between the two times that represents the difference between the current + # object's time and the +other+ time. # # Time.zone = 'Eastern Time (US & Canada)' # => 'Eastern Time (US & Canada)' # now = Time.zone.now # => Mon, 03 Nov 2014 00:26:28 EST -05:00 @@ -300,6 +304,12 @@ module ActiveSupport # # now - 24.hours # => Sun, 02 Nov 2014 01:26:28 EDT -04:00 # now - 1.day # => Sun, 02 Nov 2014 00:26:28 EDT -04:00 + # + # If both the TimeWithZone object and the other value act like Time, a Float + # will be returned. + # + # Time.zone.now - 1.day.ago # => 86399.999967 + # def -(other) if other.acts_like?(:time) to_time - other.to_time diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/values/time_zone.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/values/time_zone.rb similarity index 97% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/values/time_zone.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/values/time_zone.rb index 90501bc5f7..d9e033e23b 100644 --- a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/values/time_zone.rb +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/values/time_zone.rb @@ -2,7 +2,6 @@ require "tzinfo" require "concurrent/map" -require "active_support/core_ext/object/blank" module ActiveSupport # The TimeZone class serves as a wrapper around TZInfo::Timezone instances. @@ -183,8 +182,9 @@ module ActiveSupport "Samoa" => "Pacific/Apia" } - UTC_OFFSET_WITH_COLON = "%s%02d:%02d" - UTC_OFFSET_WITHOUT_COLON = UTC_OFFSET_WITH_COLON.tr(":", "") + UTC_OFFSET_WITH_COLON = "%s%02d:%02d" # :nodoc: + UTC_OFFSET_WITHOUT_COLON = UTC_OFFSET_WITH_COLON.tr(":", "") # :nodoc: + private_constant :UTC_OFFSET_WITH_COLON, :UTC_OFFSET_WITHOUT_COLON @lazy_zones_map = Concurrent::Map.new @country_zones = Concurrent::Map.new @@ -266,7 +266,7 @@ module ActiveSupport private def load_country_zones(code) country = TZInfo::Country.get(code) - country.zone_identifiers.map do |tz_id| + country.zone_identifiers.flat_map do |tz_id| if MAPPING.value?(tz_id) MAPPING.inject([]) do |memo, (key, value)| memo << self[key] if value == tz_id @@ -275,7 +275,7 @@ module ActiveSupport else create(tz_id, nil, TZInfo::Timezone.new(tz_id)) end - end.flatten(1).sort! + end.sort! end def zones_map @@ -355,8 +355,13 @@ module ActiveSupport # Time.zone = 'Hawaii' # => "Hawaii" # Time.utc(2000).to_f # => 946684800.0 # Time.zone.at(946684800.0) # => Fri, 31 Dec 1999 14:00:00 HST -10:00 - def at(secs) - Time.at(secs).utc.in_time_zone(self) + # + # A second argument can be supplied to specify sub-second precision. + # + # Time.zone = 'Hawaii' # => "Hawaii" + # Time.at(946684800, 123456.789).nsec # => 123456789 + def at(*args) + Time.at(*args).utc.in_time_zone(self) end # Method for creating new ActiveSupport::TimeWithZone instance in time zone diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/version.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/version.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/version.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/version.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/xml_mini.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/xml_mini.rb similarity index 95% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/xml_mini.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/xml_mini.rb index f087e2ce48..075cd4ed8b 100644 --- a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/xml_mini.rb +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/xml_mini.rb @@ -3,6 +3,7 @@ require "time" require "base64" require "bigdecimal" +require "bigdecimal/util" require "active_support/core_ext/module/delegation" require "active_support/core_ext/string/inflections" require "active_support/core_ext/date_time/calculations" @@ -48,10 +49,6 @@ module ActiveSupport "Array" => "array", "Hash" => "hash" } - - # No need to map these on Ruby 2.4+ - TYPE_NAMES["Fixnum"] = "integer" unless 0.class == Integer - TYPE_NAMES["Bignum"] = "integer" unless 0.class == Integer end FORMATTING = { @@ -72,11 +69,7 @@ module ActiveSupport "float" => Proc.new { |float| float.to_f }, "decimal" => Proc.new do |number| if String === number - begin - BigDecimal(number) - rescue ArgumentError - BigDecimal(number.to_f.to_s) - end + number.to_d else BigDecimal(number) end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/xml_mini/jdom.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/xml_mini/jdom.rb similarity index 98% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/xml_mini/jdom.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/xml_mini/jdom.rb index 7f94a64016..32fe6ade28 100644 --- a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/xml_mini/jdom.rb +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/xml_mini/jdom.rb @@ -18,7 +18,7 @@ module ActiveSupport module XmlMini_JDOM #:nodoc: extend self - CONTENT_KEY = "__content__".freeze + CONTENT_KEY = "__content__" NODE_TYPE_NAMES = %w{ATTRIBUTE_NODE CDATA_SECTION_NODE COMMENT_NODE DOCUMENT_FRAGMENT_NODE DOCUMENT_NODE DOCUMENT_TYPE_NODE ELEMENT_NODE ENTITY_NODE ENTITY_REFERENCE_NODE NOTATION_NODE @@ -169,7 +169,7 @@ module ActiveSupport # element:: # XML element to be checked. def empty_content?(element) - text = "".dup + text = +"" child_nodes = element.child_nodes (0...child_nodes.length).each do |i| item = child_nodes.item(i) diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/xml_mini/libxml.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/xml_mini/libxml.rb similarity index 95% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/xml_mini/libxml.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/xml_mini/libxml.rb index 0b000fea60..c2e999ef6c 100644 --- a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/xml_mini/libxml.rb +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/xml_mini/libxml.rb @@ -34,7 +34,7 @@ module LibXML #:nodoc: end module Node #:nodoc: - CONTENT_ROOT = "__content__".freeze + CONTENT_ROOT = "__content__" # Convert XML document to hash. # @@ -55,7 +55,7 @@ module LibXML #:nodoc: if c.element? c.to_hash(node_hash) elsif c.text? || c.cdata? - node_hash[CONTENT_ROOT] ||= "".dup + node_hash[CONTENT_ROOT] ||= +"" node_hash[CONTENT_ROOT] << c.content end end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/xml_mini/libxmlsax.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/xml_mini/libxmlsax.rb similarity index 90% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/xml_mini/libxmlsax.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/xml_mini/libxmlsax.rb index dcf16e6084..ac8acdfc3c 100644 --- a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/xml_mini/libxmlsax.rb +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/xml_mini/libxmlsax.rb @@ -13,8 +13,8 @@ module ActiveSupport class HashBuilder include LibXML::XML::SaxParser::Callbacks - CONTENT_KEY = "__content__".freeze - HASH_SIZE_KEY = "__hash_size__".freeze + CONTENT_KEY = "__content__" + HASH_SIZE_KEY = "__hash_size__" attr_reader :hash @@ -23,7 +23,7 @@ module ActiveSupport end def on_start_document - @hash = { CONTENT_KEY => "".dup } + @hash = { CONTENT_KEY => +"" } @hash_stack = [@hash] end @@ -33,7 +33,7 @@ module ActiveSupport end def on_start_element(name, attrs = {}) - new_hash = { CONTENT_KEY => "".dup }.merge!(attrs) + new_hash = { CONTENT_KEY => +"" }.merge!(attrs) new_hash[HASH_SIZE_KEY] = new_hash.size + 1 case current_hash[name] diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/xml_mini/nokogiri.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/xml_mini/nokogiri.rb similarity index 95% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/xml_mini/nokogiri.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/xml_mini/nokogiri.rb index 5ee6fc8159..f76513f48b 100644 --- a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/xml_mini/nokogiri.rb +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/xml_mini/nokogiri.rb @@ -38,7 +38,7 @@ module ActiveSupport end module Node #:nodoc: - CONTENT_ROOT = "__content__".freeze + CONTENT_ROOT = "__content__" # Convert XML document to hash. # @@ -59,7 +59,7 @@ module ActiveSupport if c.element? c.to_hash(node_hash) elsif c.text? || c.cdata? - node_hash[CONTENT_ROOT] ||= "".dup + node_hash[CONTENT_ROOT] ||= +"" node_hash[CONTENT_ROOT] << c.content end end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/xml_mini/nokogirisax.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/xml_mini/nokogirisax.rb similarity index 92% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/xml_mini/nokogirisax.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/xml_mini/nokogirisax.rb index b01ed00a14..55cd72e093 100644 --- a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/xml_mini/nokogirisax.rb +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/xml_mini/nokogirisax.rb @@ -16,8 +16,8 @@ module ActiveSupport # Class that will build the hash while the XML document # is being parsed using SAX events. class HashBuilder < Nokogiri::XML::SAX::Document - CONTENT_KEY = "__content__".freeze - HASH_SIZE_KEY = "__hash_size__".freeze + CONTENT_KEY = "__content__" + HASH_SIZE_KEY = "__hash_size__" attr_reader :hash @@ -39,7 +39,7 @@ module ActiveSupport end def start_element(name, attrs = []) - new_hash = { CONTENT_KEY => "".dup }.merge!(Hash[attrs]) + new_hash = { CONTENT_KEY => +"" }.merge!(Hash[attrs]) new_hash[HASH_SIZE_KEY] = new_hash.size + 1 case current_hash[name] diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/xml_mini/rexml.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/xml_mini/rexml.rb similarity index 98% rename from Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/xml_mini/rexml.rb rename to Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/xml_mini/rexml.rb index 32458d5b0d..8d6e3af066 100644 --- a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/xml_mini/rexml.rb +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/xml_mini/rexml.rb @@ -8,7 +8,7 @@ module ActiveSupport module XmlMini_REXML #:nodoc: extend self - CONTENT_KEY = "__content__".freeze + CONTENT_KEY = "__content__" # Parse an XML Document string or IO into a simple hash. # @@ -76,7 +76,7 @@ module ActiveSupport hash else # must use value to prevent double-escaping - texts = "".dup + texts = +"" element.texts.each { |t| texts << t.value } merge!(hash, CONTENT_KEY, texts) end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/zeitwerk-2.2.1/lib/zeitwerk.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/zeitwerk-2.2.1/lib/zeitwerk.rb new file mode 100644 index 0000000000..f3bb471a01 --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/zeitwerk-2.2.1/lib/zeitwerk.rb @@ -0,0 +1,12 @@ +# frozen_string_literal: true + +module Zeitwerk + require_relative "zeitwerk/real_mod_name" + require_relative "zeitwerk/loader" + require_relative "zeitwerk/registry" + require_relative "zeitwerk/explicit_namespace" + require_relative "zeitwerk/inflector" + require_relative "zeitwerk/gem_inflector" + require_relative "zeitwerk/kernel" + require_relative "zeitwerk/error" +end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/zeitwerk-2.2.1/lib/zeitwerk/error.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/zeitwerk-2.2.1/lib/zeitwerk/error.rb new file mode 100644 index 0000000000..9b8ef27e2b --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/zeitwerk-2.2.1/lib/zeitwerk/error.rb @@ -0,0 +1,10 @@ +module Zeitwerk + class Error < StandardError + end + + class ReloadingDisabledError < Error + end + + class NameError < ::NameError + end +end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/zeitwerk-2.2.1/lib/zeitwerk/explicit_namespace.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/zeitwerk-2.2.1/lib/zeitwerk/explicit_namespace.rb new file mode 100644 index 0000000000..2d4f015a0d --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/zeitwerk-2.2.1/lib/zeitwerk/explicit_namespace.rb @@ -0,0 +1,80 @@ +module Zeitwerk + # Centralizes the logic for the trace point used to detect the creation of + # explicit namespaces, needed to descend into matching subdirectories right + # after the constant has been defined. + # + # The implementation assumes an explicit namespace is managed by one loader. + # Loaders that reopen namespaces owned by other projects are responsible for + # loading their constant before setup. This is documented. + module ExplicitNamespace # :nodoc: all + class << self + include RealModName + + # Maps constant paths that correspond to explicit namespaces according to + # the file system, to the loader responsible for them. + # + # @private + # @return [{String => Zeitwerk::Loader}] + attr_reader :cpaths + + # @private + # @return [Mutex] + attr_reader :mutex + + # @private + # @return [TracePoint] + attr_reader :tracer + + # Asserts `cpath` corresponds to an explicit namespace for which `loader` + # is responsible. + # + # @private + # @param cpath [String] + # @param loader [Zeitwerk::Loader] + # @return [void] + def register(cpath, loader) + mutex.synchronize do + cpaths[cpath] = loader + # We check enabled? because, looking at the C source code, enabling an + # enabled tracer does not seem to be a simple no-op. + tracer.enable unless tracer.enabled? + end + end + + # @private + # @param loader [Zeitwerk::Loader] + # @return [void] + def unregister(loader) + cpaths.delete_if { |_cpath, l| l == loader } + disable_tracer_if_unneeded + end + + def disable_tracer_if_unneeded + mutex.synchronize do + tracer.disable if cpaths.empty? + end + end + + def tracepoint_class_callback(event) + # If the class is a singleton class, we won't do anything with it so we + # can bail out immediately. This is several orders of magnitude faster + # than accessing its name. + return if event.self.singleton_class? + + # Note that it makes sense to compute the hash code unconditionally, + # because the trace point is disabled if cpaths is empty. + if loader = cpaths.delete(real_mod_name(event.self)) + loader.on_namespace_loaded(event.self) + disable_tracer_if_unneeded + end + end + end + + @cpaths = {} + @mutex = Mutex.new + + # We go through a method instead of defining a block mainly to have a better + # label when profiling. + @tracer = TracePoint.new(:class, &method(:tracepoint_class_callback)) + end +end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/zeitwerk-2.2.1/lib/zeitwerk/gem_inflector.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/zeitwerk-2.2.1/lib/zeitwerk/gem_inflector.rb new file mode 100644 index 0000000000..e104fb9811 --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/zeitwerk-2.2.1/lib/zeitwerk/gem_inflector.rb @@ -0,0 +1,19 @@ +# frozen_string_literal: true + +module Zeitwerk + class GemInflector < Inflector + # @param root_file [String] + def initialize(root_file) + namespace = File.basename(root_file, ".rb") + lib_dir = File.dirname(root_file) + @version_file = File.join(lib_dir, namespace, "version.rb") + end + + # @param basename [String] + # @param abspath [String] + # @return [String] + def camelize(basename, abspath) + abspath == @version_file ? "VERSION" : super + end + end +end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/zeitwerk-2.2.1/lib/zeitwerk/inflector.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/zeitwerk-2.2.1/lib/zeitwerk/inflector.rb new file mode 100644 index 0000000000..b04bb74d02 --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/zeitwerk-2.2.1/lib/zeitwerk/inflector.rb @@ -0,0 +1,49 @@ +# frozen_string_literal: true + +module Zeitwerk + class Inflector + # Very basic snake case -> camel case conversion. + # + # inflector = Zeitwerk::Inflector.new + # inflector.camelize("post", ...) # => "Post" + # inflector.camelize("users_controller", ...) # => "UsersController" + # inflector.camelize("api", ...) # => "Api" + # + # Takes into account hard-coded mappings configured with `inflect`. + # + # @param basename [String] + # @param _abspath [String] + # @return [String] + def camelize(basename, _abspath) + overrides[basename] || basename.split('_').map!(&:capitalize).join + end + + # Configures hard-coded inflections: + # + # inflector = Zeitwerk::Inflector.new + # inflector.inflect( + # "html_parser" => "HTMLParser", + # "mysql_adapter" => "MySQLAdapter" + # ) + # + # inflector.camelize("html_parser", abspath) # => "HTMLParser" + # inflector.camelize("mysql_adapter", abspath) # => "MySQLAdapter" + # inflector.camelize("users_controller", abspath) # => "UsersController" + # + # @param inflections [{String => String}] + # @return [void] + def inflect(inflections) + overrides.merge!(inflections) + end + + private + + # Hard-coded basename to constant name user maps that override the default + # inflection logic. + # + # @return [{String => String}] + def overrides + @overrides ||= {} + end + end +end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/zeitwerk-2.2.1/lib/zeitwerk/kernel.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/zeitwerk-2.2.1/lib/zeitwerk/kernel.rb new file mode 100644 index 0000000000..728b444a42 --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/zeitwerk-2.2.1/lib/zeitwerk/kernel.rb @@ -0,0 +1,33 @@ +# frozen_string_literal: true + +module Kernel + module_function + + # We cannot decorate with prepend + super because Kernel has already been + # included in Object, and changes in ancestors don't get propagated into + # already existing ancestor chains. + alias_method :zeitwerk_original_require, :require + + # @param path [String] + # @return [Boolean] + def require(path) + if loader = Zeitwerk::Registry.loader_for(path) + if path.end_with?(".rb") + zeitwerk_original_require(path).tap do |required| + loader.on_file_autoloaded(path) if required + end + else + loader.on_dir_autoloaded(path) + end + else + zeitwerk_original_require(path).tap do |required| + if required + realpath = $LOADED_FEATURES.last + if loader = Zeitwerk::Registry.loader_for(realpath) + loader.on_file_autoloaded(realpath) + end + end + end + end + end +end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/zeitwerk-2.2.1/lib/zeitwerk/loader.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/zeitwerk-2.2.1/lib/zeitwerk/loader.rb new file mode 100644 index 0000000000..e47f44b13c --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/zeitwerk-2.2.1/lib/zeitwerk/loader.rb @@ -0,0 +1,765 @@ +# frozen_string_literal: true + +require "set" +require "securerandom" + +module Zeitwerk + class Loader + require_relative "loader/callbacks" + include Callbacks + include RealModName + + # @return [String] + attr_reader :tag + + # @return [#camelize] + attr_accessor :inflector + + # @return [#call, #debug, nil] + attr_accessor :logger + + # Absolute paths of the root directories. Stored in a hash to preserve + # order, easily handle duplicates, and also be able to have a fast lookup, + # needed for detecting nested paths. + # + # "/Users/fxn/blog/app/assets" => true, + # "/Users/fxn/blog/app/channels" => true, + # ... + # + # This is a private collection maintained by the loader. The public + # interface for it is `push_dir` and `dirs`. + # + # @private + # @return [{String => true}] + attr_reader :root_dirs + + # Absolute paths of files or directories that have to be preloaded. + # + # @private + # @return [] + attr_reader :preloads + + # Absolute paths of files, directories, of glob patterns to be totally + # ignored. + # + # @private + # @return [Set] + attr_reader :ignored_glob_patterns + + # The actual collection of absolute file and directory names at the time the + # ignored glob patterns were expanded. Computed on setup, and recomputed on + # reload. + # + # @private + # @return [Set] + attr_reader :ignored_paths + + # Maps real absolute paths for which an autoload has been set ---and not + # executed--- to their corresponding parent class or module and constant + # name. + # + # "/Users/fxn/blog/app/models/user.rb" => [Object, :User], + # "/Users/fxn/blog/app/models/hotel/pricing.rb" => [Hotel, :Pricing] + # ... + # + # @private + # @return [{String => (Module, Symbol)}] + attr_reader :autoloads + + # We keep track of autoloaded directories to remove them from the registry + # at the end of eager loading. + # + # Files are removed as they are autoloaded, but directories need to wait due + # to concurrency (see why in Zeitwerk::Loader::Callbacks#on_dir_autoloaded). + # + # @private + # @return [] + attr_reader :autoloaded_dirs + + # Stores metadata needed for unloading. Its entries look like this: + # + # "Admin::Role" => [".../admin/role.rb", [Admin, :Role]] + # + # The cpath as key helps implementing unloadable_cpath? The real file name + # is stored in order to be able to delete it from $LOADED_FEATURES, and the + # pair [Module, Symbol] is used to remove_const the constant from the class + # or module object. + # + # If reloading is enabled, this hash is filled as constants are autoloaded + # or eager loaded. Otherwise, the collection remains empty. + # + # @private + # @return [{String => (String, (Module, Symbol))}] + attr_reader :to_unload + + # Maps constant paths of namespaces to arrays of corresponding directories. + # + # For example, given this mapping: + # + # "Admin" => [ + # "/Users/fxn/blog/app/controllers/admin", + # "/Users/fxn/blog/app/models/admin", + # ... + # ] + # + # when `Admin` gets defined we know that it plays the role of a namespace and + # that its children are spread over those directories. We'll visit them to set + # up the corresponding autoloads. + # + # @private + # @return [{String => }] + attr_reader :lazy_subdirs + + # Absolute paths of files or directories not to be eager loaded. + # + # @private + # @return [Set] + attr_reader :eager_load_exclusions + + # @private + # @return [Mutex] + attr_reader :mutex + + # @private + # @return [Mutex] + attr_reader :mutex2 + + def initialize + @initialized_at = Time.now + + @tag = SecureRandom.hex(3) + @inflector = Inflector.new + @logger = self.class.default_logger + + @root_dirs = {} + @preloads = [] + @ignored_glob_patterns = Set.new + @ignored_paths = Set.new + @autoloads = {} + @autoloaded_dirs = [] + @to_unload = {} + @lazy_subdirs = {} + @eager_load_exclusions = Set.new + + # TODO: find a better name for these mutexes. + @mutex = Mutex.new + @mutex2 = Mutex.new + @setup = false + @eager_loaded = false + + @reloading_enabled = false + + Registry.register_loader(self) + end + + # Sets a tag for the loader, useful for logging. + # + # @return [void] + def tag=(tag) + @tag = tag.to_s + end + + # Absolute paths of the root directories. This is a read-only collection, + # please push here via `push_dir`. + # + # @return [] + def dirs + root_dirs.keys.freeze + end + + # Pushes `path` to the list of root directories. + # + # Raises `Zeitwerk::Error` if `path` does not exist, or if another loader in + # the same process already manages that directory or one of its ascendants + # or descendants. + # + # @param path [] + # @raise [Zeitwerk::Error] + # @return [void] + def push_dir(path) + abspath = File.expand_path(path) + if dir?(abspath) + raise_if_conflicting_directory(abspath) + root_dirs[abspath] = true + else + raise Error, "the root directory #{abspath} does not exist" + end + end + + # You need to call this method before setup in order to be able to reload. + # There is no way to undo this, either you want to reload or you don't. + # + # @raise [Zeitwerk::Error] + # @return [void] + def enable_reloading + mutex.synchronize do + break if @reloading_enabled + + if @setup + raise Error, "cannot enable reloading after setup" + else + @reloading_enabled = true + end + end + end + + # @return [Boolean] + def reloading_enabled? + @reloading_enabled + end + + # Files or directories to be preloaded instead of lazy loaded. + # + # @param paths [>] + # @return [void] + def preload(*paths) + mutex.synchronize do + expand_paths(paths).each do |abspath| + preloads << abspath + do_preload_abspath(abspath) if @setup + end + end + end + + # Configure files, directories, or glob patterns to be totally ignored. + # + # @param paths [>] + # @return [void] + def ignore(*glob_patterns) + glob_patterns = expand_paths(glob_patterns) + mutex.synchronize do + ignored_glob_patterns.merge(glob_patterns) + ignored_paths.merge(expand_glob_patterns(glob_patterns)) + end + end + + # Sets autoloads in the root namespace and preloads files, if any. + # + # @return [void] + def setup + mutex.synchronize do + break if @setup + + actual_root_dirs.each { |root_dir| set_autoloads_in_dir(root_dir, Object) } + do_preload + + @setup = true + end + end + + # Removes loaded constants and configured autoloads. + # + # The objects the constants stored are no longer reachable through them. In + # addition, since said objects are normally not referenced from anywhere + # else, they are eligible for garbage collection, which would effectively + # unload them. + # + # @private + # @return [void] + def unload + mutex.synchronize do + # We are going to keep track of the files that were required by our + # autoloads to later remove them from $LOADED_FEATURES, thus making them + # loadable by Kernel#require again. + # + # Directories are not stored in $LOADED_FEATURES, keeping track of files + # is enough. + unloaded_files = Set.new + + autoloads.each do |realpath, (parent, cname)| + if parent.autoload?(cname) + unload_autoload(parent, cname) + else + # Could happen if loaded with require_relative. That is unsupported, + # and the constant path would escape unloadable_cpath? This is just + # defensive code to clean things up as much as we are able to. + unload_cref(parent, cname) if cdef?(parent, cname) + unloaded_files.add(realpath) if ruby?(realpath) + end + end + + to_unload.each_value do |(realpath, (parent, cname))| + unload_cref(parent, cname) if cdef?(parent, cname) + unloaded_files.add(realpath) if ruby?(realpath) + end + + unless unloaded_files.empty? + # Bootsnap decorates Kernel#require to speed it up using a cache and + # this optimization does not check if $LOADED_FEATURES has the file. + # + # To make it aware of changes, the gem defines singleton methods in + # $LOADED_FEATURES: + # + # https://github.com/Shopify/bootsnap/blob/master/lib/bootsnap/load_path_cache/core_ext/loaded_features.rb + # + # Rails applications may depend on bootsnap, so for unloading to work + # in that setting it is preferable that we restrict our API choice to + # one of those methods. + $LOADED_FEATURES.reject! { |file| unloaded_files.member?(file) } + end + + autoloads.clear + autoloaded_dirs.clear + to_unload.clear + lazy_subdirs.clear + + Registry.on_unload(self) + ExplicitNamespace.unregister(self) + + @setup = false + end + end + + # Unloads all loaded code, and calls setup again so that the loader is able + # to pick any changes in the file system. + # + # This method is not thread-safe, please see how this can be achieved by + # client code in the README of the project. + # + # @raise [Zeitwerk::Error] + # @return [void] + def reload + if reloading_enabled? + unload + recompute_ignored_paths + setup + else + raise ReloadingDisabledError, "can't reload, please call loader.enable_reloading before setup" + end + end + + # Eager loads all files in the root directories, recursively. Files do not + # need to be in `$LOAD_PATH`, absolute file names are used. Ignored files + # are not eager loaded. You can opt-out specifically in specific files and + # directories with `do_not_eager_load`. + # + # @return [void] + def eager_load + mutex.synchronize do + break if @eager_loaded + + queue = actual_root_dirs.reject { |dir| eager_load_exclusions.member?(dir) } + queue.map! { |dir| [Object, dir] } + while to_eager_load = queue.shift + namespace, dir = to_eager_load + + ls(dir) do |basename, abspath| + next if eager_load_exclusions.member?(abspath) + + if ruby?(abspath) + if cref = autoloads[File.realpath(abspath)] + cref[0].const_get(cref[1], false) + end + elsif dir?(abspath) && !root_dirs.key?(abspath) + cname = inflector.camelize(basename, abspath) + queue << [namespace.const_get(cname, false), abspath] + end + end + end + + autoloaded_dirs.each do |autoloaded_dir| + Registry.unregister_autoload(autoloaded_dir) + end + autoloaded_dirs.clear + + @eager_loaded = true + end + end + + # Let eager load ignore the given files or directories. The constants + # defined in those files are still autoloadable. + # + # @param paths [>] + # @return [void] + def do_not_eager_load(*paths) + mutex.synchronize { eager_load_exclusions.merge(expand_paths(paths)) } + end + + # Says if the given constant path would be unloaded on reload. This + # predicate returns `false` if reloading is disabled. + # + # @param cpath [String] + # @return [Boolean] + def unloadable_cpath?(cpath) + to_unload.key?(cpath) + end + + # Returns an array with the constant paths that would be unloaded on reload. + # This predicate returns an empty array if reloading is disabled. + # + # @return [] + def unloadable_cpaths + to_unload.keys.freeze + end + + # Logs to `$stdout`, handy shortcut for debugging. + # + # @return [void] + def log! + @logger = ->(msg) { puts msg } + end + + # @private + # @param dir [String] + # @return [Boolean] + def manages?(dir) + dir = dir + "/" + ignored_paths.each do |ignored_path| + return false if dir.start_with?(ignored_path + "/") + end + + root_dirs.each_key do |root_dir| + return true if root_dir.start_with?(dir) || dir.start_with?(root_dir + "/") + end + + false + end + + # --- Class methods --------------------------------------------------------------------------- + + class << self + # @return [#call, #debug, nil] + attr_accessor :default_logger + + # @private + # @return [Mutex] + attr_accessor :mutex + + # This is a shortcut for + # + # require "zeitwerk" + # loader = Zeitwerk::Loader.new + # loader.tag = File.basename(__FILE__, ".rb") + # loader.inflector = Zeitwerk::GemInflector.new + # loader.push_dir(__dir__) + # + # except that this method returns the same object in subsequent calls from + # the same file, in the unlikely case the gem wants to be able to reload. + # + # @return [Zeitwerk::Loader] + def for_gem + called_from = caller_locations(1, 1).first.path + Registry.loader_for_gem(called_from) + end + + # Broadcasts `eager_load` to all loaders. + # + # @return [void] + def eager_load_all + Registry.loaders.each(&:eager_load) + end + + # Returns an array with the absolute paths of the root directories of all + # registered loaders. This is a read-only collection. + # + # @return [] + def all_dirs + Registry.loaders.flat_map(&:dirs).freeze + end + end + + self.mutex = Mutex.new + + private # ------------------------------------------------------------------------------------- + + # @return [] + def actual_root_dirs + root_dirs.keys.delete_if do |root_dir| + !dir?(root_dir) || ignored_paths.member?(root_dir) + end + end + + # @param dir [String] + # @param parent [Module] + # @return [void] + def set_autoloads_in_dir(dir, parent) + ls(dir) do |basename, abspath| + begin + if ruby?(basename) + basename.slice!(-3, 3) + cname = inflector.camelize(basename, abspath).to_sym + autoload_file(parent, cname, abspath) + elsif dir?(abspath) + # In a Rails application, `app/models/concerns` is a subdirectory of + # `app/models`, but both of them are root directories. + # + # To resolve the ambiguity file name -> constant path this introduces, + # the `app/models/concerns` directory is totally ignored as a namespace, + # it counts only as root. The guard checks that. + unless root_dirs.key?(abspath) + cname = inflector.camelize(basename, abspath).to_sym + autoload_subdir(parent, cname, abspath) + end + end + rescue ::NameError => error + path_type = ruby?(abspath) ? "file" : "directory" + + raise NameError, <<~MESSAGE + #{error.message} inferred by #{inflector.class} from #{path_type} + + #{abspath} + + Possible ways to address this: + + * Tell Zeitwerk to ignore this particular #{path_type}. + * Tell Zeitwerk to ignore one of its parent directories. + * Rename the #{path_type} to comply with the naming conventions. + * Modify the inflector to handle this case. + MESSAGE + end + end + end + + # @param parent [Module] + # @param cname [Symbol] + # @param subdir [String] + # @return [void] + def autoload_subdir(parent, cname, subdir) + if autoload_path = autoload_for?(parent, cname) + cpath = cpath(parent, cname) + register_explicit_namespace(cpath) if ruby?(autoload_path) + # We do not need to issue another autoload, the existing one is enough + # no matter if it is for a file or a directory. Just remember the + # subdirectory has to be visited if the namespace is used. + (lazy_subdirs[cpath] ||= []) << subdir + elsif !cdef?(parent, cname) + # First time we find this namespace, set an autoload for it. + (lazy_subdirs[cpath(parent, cname)] ||= []) << subdir + set_autoload(parent, cname, subdir) + else + # For whatever reason the constant that corresponds to this namespace has + # already been defined, we have to recurse. + set_autoloads_in_dir(subdir, parent.const_get(cname)) + end + end + + # @param parent [Module] + # @param cname [Symbol] + # @param file [String] + # @return [void] + def autoload_file(parent, cname, file) + if autoload_path = autoload_for?(parent, cname) + # First autoload for a Ruby file wins, just ignore subsequent ones. + if ruby?(autoload_path) + log("file #{file} is ignored because #{autoload_path} has precedence") if logger + else + promote_namespace_from_implicit_to_explicit( + dir: autoload_path, + file: file, + parent: parent, + cname: cname + ) + end + elsif cdef?(parent, cname) + log("file #{file} is ignored because #{cpath(parent, cname)} is already defined") if logger + else + set_autoload(parent, cname, file) + end + end + + # @param dir [String] directory that would have autovivified a module + # @param file [String] the file where the namespace is explictly defined + # @param parent [Module] + # @param cname [Symbol] + # @return [void] + def promote_namespace_from_implicit_to_explicit(dir:, file:, parent:, cname:) + autoloads.delete(dir) + Registry.unregister_autoload(dir) + + set_autoload(parent, cname, file) + register_explicit_namespace(cpath(parent, cname)) + end + + # @param parent [Module] + # @param cname [Symbol] + # @param abspath [String] + # @return [void] + def set_autoload(parent, cname, abspath) + # $LOADED_FEATURES stores real paths since Ruby 2.4.4. We set and save the + # real path to be able to delete it from $LOADED_FEATURES on unload, and to + # be able to do a lookup later in Kernel#require for manual require calls. + realpath = File.realpath(abspath) + parent.autoload(cname, realpath) + if logger + if ruby?(realpath) + log("autoload set for #{cpath(parent, cname)}, to be loaded from #{realpath}") + else + log("autoload set for #{cpath(parent, cname)}, to be autovivified from #{realpath}") + end + end + + autoloads[realpath] = [parent, cname] + Registry.register_autoload(self, realpath) + + # See why in the documentation of Zeitwerk::Registry.inceptions. + unless parent.autoload?(cname) + Registry.register_inception(cpath(parent, cname), realpath, self) + end + end + + # @param parent [Module] + # @param cname [Symbol] + # @return [String, nil] + def autoload_for?(parent, cname) + strict_autoload_path(parent, cname) || Registry.inception?(cpath(parent, cname)) + end + + # The autoload? predicate takes into account the ancestor chain of the + # receiver, like const_defined? and other methods in the constants API do. + # + # For example, given + # + # class A + # autoload :X, "x.rb" + # end + # + # class B < A + # end + # + # B.autoload?(:X) returns "x.rb". + # + # We need a way to strictly check in parent ignoring ancestors. + # + # @param parent [Module] + # @param cname [Symbol] + # @return [String, nil] + if method(:autoload?).arity == 1 + def strict_autoload_path(parent, cname) + parent.autoload?(cname) if cdef?(parent, cname) + end + else + def strict_autoload_path(parent, cname) + parent.autoload?(cname, false) + end + end + + # This method is called this way because I prefer `preload` to be the method + # name to configure preloads in the public interface. + # + # @return [void] + def do_preload + preloads.each do |abspath| + do_preload_abspath(abspath) + end + end + + # @param abspath [String] + # @return [void] + def do_preload_abspath(abspath) + if ruby?(abspath) + do_preload_file(abspath) + elsif dir?(abspath) + do_preload_dir(abspath) + end + end + + # @param dir [String] + # @return [void] + def do_preload_dir(dir) + ls(dir) do |_basename, abspath| + do_preload_abspath(abspath) + end + end + + # @param file [String] + # @return [Boolean] + def do_preload_file(file) + log("preloading #{file}") if logger + require file + end + + # @param parent [Module] + # @param cname [Symbol] + # @return [String] + def cpath(parent, cname) + parent.equal?(Object) ? cname.to_s : "#{real_mod_name(parent)}::#{cname}" + end + + # @param dir [String] + # @yieldparam path [String, String] + # @return [void] + def ls(dir) + Dir.foreach(dir) do |basename| + next if basename.start_with?(".") + abspath = File.join(dir, basename) + yield basename, abspath unless ignored_paths.member?(abspath) + end + end + + # @param path [String] + # @return [Boolean] + def ruby?(path) + path.end_with?(".rb") + end + + # @param path [String] + # @return [Boolean] + def dir?(path) + File.directory?(path) + end + + # @param paths [>] + # @return [] + def expand_paths(paths) + paths.flatten.map! { |path| File.expand_path(path) } + end + + # @param glob_patterns [] + # @return [] + def expand_glob_patterns(glob_patterns) + # Note that Dir.glob works with regular file names just fine. That is, + # glob patterns technically need no wildcards. + glob_patterns.flat_map { |glob_pattern| Dir.glob(glob_pattern) } + end + + # @return [void] + def recompute_ignored_paths + ignored_paths.replace(expand_glob_patterns(ignored_glob_patterns)) + end + + # @param message [String] + # @return [void] + def log(message) + method_name = logger.respond_to?(:debug) ? :debug : :call + logger.send(method_name, "Zeitwerk@#{tag}: #{message}") + end + + def cdef?(parent, cname) + parent.const_defined?(cname, false) + end + + def register_explicit_namespace(cpath) + ExplicitNamespace.register(cpath, self) + end + + def raise_if_conflicting_directory(dir) + self.class.mutex.synchronize do + Registry.loaders.each do |loader| + if loader != self && loader.manages?(dir) + require "pp" + raise Error, + "loader\n\n#{pretty_inspect}\n\nwants to manage directory #{dir}," \ + " which is already managed by\n\n#{loader.pretty_inspect}\n" + EOS + end + end + end + end + + # @param parent [Module] + # @param cname [Symbol] + # @return [void] + def unload_autoload(parent, cname) + parent.send(:remove_const, cname) + log("autoload for #{cpath(parent, cname)} removed") if logger + end + + # @param parent [Module] + # @param cname [Symbol] + # @return [void] + def unload_cref(parent, cname) + parent.send(:remove_const, cname) + log("#{cpath(parent, cname)} unloaded") if logger + end + end +end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/zeitwerk-2.2.1/lib/zeitwerk/loader/callbacks.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/zeitwerk-2.2.1/lib/zeitwerk/loader/callbacks.rb new file mode 100644 index 0000000000..f46f60a01b --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/zeitwerk-2.2.1/lib/zeitwerk/loader/callbacks.rb @@ -0,0 +1,71 @@ +module Zeitwerk::Loader::Callbacks + include Zeitwerk::RealModName + + # Invoked from our decorated Kernel#require when a managed file is autoloaded. + # + # @private + # @param file [String] + # @return [void] + def on_file_autoloaded(file) + cref = autoloads.delete(file) + to_unload[cpath(*cref)] = [file, cref] if reloading_enabled? + Zeitwerk::Registry.unregister_autoload(file) + + if logger && cdef?(*cref) + log("constant #{cpath(*cref)} loaded from file #{file}") + elsif !cdef?(*cref) + raise Zeitwerk::NameError, "expected file #{file} to define constant #{cpath(*cref)}, but didn't" + end + end + + # Invoked from our decorated Kernel#require when a managed directory is + # autoloaded. + # + # @private + # @param dir [String] + # @return [void] + def on_dir_autoloaded(dir) + # Module#autoload does not serialize concurrent requires, and we handle + # directories ourselves, so the callback needs to account for concurrency. + # + # Multi-threading would introduce a race condition here in which thread t1 + # autovivifies the module, and while autoloads for its children are being + # set, thread t2 autoloads the same namespace. + # + # Without the mutex and subsequent delete call, t2 would reset the module. + # That not only would reassign the constant (undesirable per se) but, worse, + # the module object created by t2 wouldn't have any of the autoloads for its + # children, since t1 would have correctly deleted its lazy_subdirs entry. + mutex2.synchronize do + if cref = autoloads.delete(dir) + autovivified_module = cref[0].const_set(cref[1], Module.new) + log("module #{autovivified_module.name} autovivified from directory #{dir}") if logger + + to_unload[autovivified_module.name] = [dir, cref] if reloading_enabled? + + # We don't unregister `dir` in the registry because concurrent threads + # wouldn't find a loader associated to it in Kernel#require and would + # try to require the directory. Instead, we are going to keep track of + # these to be able to unregister later if eager loading. + autoloaded_dirs << dir + + on_namespace_loaded(autovivified_module) + end + end + end + + # Invoked when a class or module is created or reopened, either from the + # tracer or from module autovivification. If the namespace has matching + # subdirectories, we descend into them now. + # + # @private + # @param namespace [Module] + # @return [void] + def on_namespace_loaded(namespace) + if subdirs = lazy_subdirs.delete(real_mod_name(namespace)) + subdirs.each do |subdir| + set_autoloads_in_dir(subdir, namespace) + end + end + end +end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/zeitwerk-2.2.1/lib/zeitwerk/real_mod_name.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/zeitwerk-2.2.1/lib/zeitwerk/real_mod_name.rb new file mode 100644 index 0000000000..cfd6c44fa7 --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/zeitwerk-2.2.1/lib/zeitwerk/real_mod_name.rb @@ -0,0 +1,21 @@ +module Zeitwerk::RealModName + UNBOUND_METHOD_MODULE_NAME = Module.instance_method(:name) + private_constant :UNBOUND_METHOD_MODULE_NAME + + # Returns the real name of the class or module, as set after the first + # constant to which it was assigned (or nil). + # + # The name method can be overridden, hence the indirection in this method. + # + # @param mod [Class, Module] + # @return [String, nil] + if UnboundMethod.method_defined?(:bind_call) + def real_mod_name(mod) + UNBOUND_METHOD_MODULE_NAME.bind_call(mod) + end + else + def real_mod_name(mod) + UNBOUND_METHOD_MODULE_NAME.bind(mod).call + end + end +end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/zeitwerk-2.2.1/lib/zeitwerk/registry.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/zeitwerk-2.2.1/lib/zeitwerk/registry.rb new file mode 100644 index 0000000000..3f8e1d43dd --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/zeitwerk-2.2.1/lib/zeitwerk/registry.rb @@ -0,0 +1,147 @@ +# frozen_string_literal: true + +module Zeitwerk + module Registry # :nodoc: all + class << self + # Keeps track of all loaders. Useful to broadcast messages and to prevent + # them from being garbage collected. + # + # @private + # @return [] + attr_reader :loaders + + # Registers loaders created with `for_gem` to make the method idempotent + # in case of reload. + # + # @private + # @return [{String => Zeitwerk::Loader}] + attr_reader :loaders_managing_gems + + # Maps real paths to the loaders responsible for them. + # + # This information is used by our decorated `Kernel#require` to be able to + # invoke callbacks and autovivify modules. + # + # @private + # @return [{String => Zeitwerk::Loader}] + attr_reader :autoloads + + # This hash table addresses an edge case in which an autoload is ignored. + # + # For example, let's suppose we want to autoload in a gem like this: + # + # # lib/my_gem.rb + # loader = Zeitwerk::Loader.new + # loader.push_dir(__dir__) + # loader.setup + # + # module MyGem + # end + # + # if you require "my_gem", as Bundler would do, this happens while setting + # up autoloads: + # + # 1. Object.autoload?(:MyGem) returns `nil` because the autoload for + # the constant is issued by Zeitwerk while the same file is being + # required. + # 2. The constant `MyGem` is undefined while setup runs. + # + # Therefore, a directory `lib/my_gem` would autovivify a module according to + # the existing information. But that would be wrong. + # + # To overcome this fundamental limitation, we keep track of the constant + # paths that are in this situation ---in the example above, "MyGem"--- and + # take this collection into account for the autovivification logic. + # + # Note that you cannot generally address this by moving the setup code + # below the constant definition, because we want libraries to be able to + # use managed constants in the module body: + # + # module MyGem + # include MyConcern + # end + # + # @private + # @return [{String => (String, Zeitwerk::Loader)}] + attr_reader :inceptions + + # Registers a loader. + # + # @private + # @param loader [Zeitwerk::Loader] + # @return [void] + def register_loader(loader) + loaders << loader + end + + # This method returns always a loader, the same instance for the same root + # file. That is how Zeitwerk::Loader.for_gem is idempotent. + # + # @private + # @param root_file [String] + # @return [Zeitwerk::Loader] + def loader_for_gem(root_file) + loaders_managing_gems[root_file] ||= begin + Loader.new.tap do |loader| + loader.tag = File.basename(root_file, ".rb") + loader.inflector = GemInflector.new(root_file) + loader.push_dir(File.dirname(root_file)) + end + end + end + + # @private + # @param loader [Zeitwerk::Loader] + # @param realpath [String] + # @return [void] + def register_autoload(loader, realpath) + autoloads[realpath] = loader + end + + # @private + # @param realpath [String] + # @return [void] + def unregister_autoload(realpath) + autoloads.delete(realpath) + end + + # @private + # @param cpath [String] + # @param realpath [String] + # @param loader [Zeitwerk::Loader] + # @return [void] + def register_inception(cpath, realpath, loader) + inceptions[cpath] = [realpath, loader] + end + + # @private + # @param cpath [String] + # @return [String, nil] + def inception?(cpath) + if pair = inceptions[cpath] + pair.first + end + end + + # @private + # @param path [String] + # @return [Zeitwerk::Loader, nil] + def loader_for(path) + autoloads[path] + end + + # @private + # @param loader [Zeitwerk::Loader] + # @return [void] + def on_unload(loader) + autoloads.delete_if { |_path, object| object == loader } + inceptions.delete_if { |_cpath, (_path, object)| object == loader } + end + end + + @loaders = [] + @loaders_managing_gems = {} + @autoloads = {} + @inceptions = {} + end +end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/zeitwerk-2.2.1/lib/zeitwerk/version.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/zeitwerk-2.2.1/lib/zeitwerk/version.rb new file mode 100644 index 0000000000..9bc6e3ca36 --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/zeitwerk-2.2.1/lib/zeitwerk/version.rb @@ -0,0 +1,5 @@ +# frozen_string_literal: true + +module Zeitwerk + VERSION = "2.2.1" +end