activesupport 1.2.4 → 8.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/CHANGELOG.md +505 -0
- data/MIT-LICENSE +20 -0
- data/README.rdoc +40 -0
- data/lib/active_support/actionable_error.rb +50 -0
- data/lib/active_support/all.rb +5 -0
- data/lib/active_support/array_inquirer.rb +50 -0
- data/lib/active_support/backtrace_cleaner.rb +234 -0
- data/lib/active_support/benchmark.rb +21 -0
- data/lib/active_support/benchmarkable.rb +53 -0
- data/lib/active_support/broadcast_logger.rb +238 -0
- data/lib/active_support/builder.rb +8 -0
- data/lib/active_support/cache/coder.rb +153 -0
- data/lib/active_support/cache/entry.rb +134 -0
- data/lib/active_support/cache/file_store.rb +244 -0
- data/lib/active_support/cache/mem_cache_store.rb +288 -0
- data/lib/active_support/cache/memory_store.rb +264 -0
- data/lib/active_support/cache/null_store.rb +62 -0
- data/lib/active_support/cache/redis_cache_store.rb +498 -0
- data/lib/active_support/cache/serializer_with_fallback.rb +152 -0
- data/lib/active_support/cache/strategy/local_cache.rb +246 -0
- data/lib/active_support/cache/strategy/local_cache_middleware.rb +45 -0
- data/lib/active_support/cache.rb +1170 -0
- data/lib/active_support/callbacks.rb +960 -0
- data/lib/active_support/class_attribute.rb +33 -0
- data/lib/active_support/code_generator.rb +79 -0
- data/lib/active_support/concern.rb +217 -0
- data/lib/active_support/concurrency/load_interlock_aware_monitor.rb +18 -0
- data/lib/active_support/concurrency/null_lock.rb +13 -0
- data/lib/active_support/concurrency/share_lock.rb +225 -0
- data/lib/active_support/concurrency/thread_monitor.rb +55 -0
- data/lib/active_support/configurable.rb +193 -0
- data/lib/active_support/configuration_file.rb +60 -0
- data/lib/active_support/continuous_integration.rb +145 -0
- data/lib/active_support/core_ext/array/access.rb +100 -0
- data/lib/active_support/core_ext/array/conversions.rb +209 -26
- data/lib/active_support/core_ext/array/extract.rb +21 -0
- data/lib/active_support/core_ext/array/extract_options.rb +31 -0
- data/lib/active_support/core_ext/array/grouping.rb +109 -0
- data/lib/active_support/core_ext/array/inquiry.rb +19 -0
- data/lib/active_support/core_ext/array/wrap.rb +48 -0
- data/lib/active_support/core_ext/array.rb +8 -4
- data/lib/active_support/core_ext/benchmark.rb +6 -0
- data/lib/active_support/core_ext/big_decimal/conversions.rb +14 -0
- data/lib/active_support/core_ext/big_decimal.rb +3 -0
- data/lib/active_support/core_ext/class/attribute.rb +137 -0
- data/lib/active_support/core_ext/class/attribute_accessors.rb +6 -0
- data/lib/active_support/core_ext/class/subclasses.rb +24 -0
- data/lib/active_support/core_ext/class.rb +4 -0
- data/lib/active_support/core_ext/date/acts_like.rb +10 -0
- data/lib/active_support/core_ext/date/blank.rb +18 -0
- data/lib/active_support/core_ext/date/calculations.rb +161 -0
- data/lib/active_support/core_ext/date/conversions.rb +95 -28
- data/lib/active_support/core_ext/date/zones.rb +8 -0
- data/lib/active_support/core_ext/date.rb +6 -5
- data/lib/active_support/core_ext/date_and_time/calculations.rb +374 -0
- data/lib/active_support/core_ext/date_and_time/compatibility.rb +23 -0
- data/lib/active_support/core_ext/date_and_time/zones.rb +40 -0
- data/lib/active_support/core_ext/date_time/acts_like.rb +16 -0
- data/lib/active_support/core_ext/date_time/blank.rb +18 -0
- data/lib/active_support/core_ext/date_time/calculations.rb +215 -0
- data/lib/active_support/core_ext/date_time/compatibility.rb +16 -0
- data/lib/active_support/core_ext/date_time/conversions.rb +108 -0
- data/lib/active_support/core_ext/date_time.rb +7 -0
- data/lib/active_support/core_ext/digest/uuid.rb +76 -0
- data/lib/active_support/core_ext/digest.rb +3 -0
- data/lib/active_support/core_ext/enumerable.rb +277 -7
- data/lib/active_support/core_ext/erb/util.rb +201 -0
- data/lib/active_support/core_ext/file/atomic.rb +72 -0
- data/lib/active_support/core_ext/file.rb +3 -0
- data/lib/active_support/core_ext/hash/conversions.rb +262 -0
- data/lib/active_support/core_ext/hash/deep_merge.rb +43 -0
- data/lib/active_support/core_ext/hash/deep_transform_values.rb +46 -0
- data/lib/active_support/core_ext/hash/except.rb +12 -0
- data/lib/active_support/core_ext/hash/indifferent_access.rb +19 -55
- data/lib/active_support/core_ext/hash/keys.rb +134 -44
- data/lib/active_support/core_ext/hash/reverse_merge.rb +22 -22
- data/lib/active_support/core_ext/hash/slice.rb +27 -0
- data/lib/active_support/core_ext/hash.rb +9 -8
- data/lib/active_support/core_ext/integer/inflections.rb +29 -13
- data/lib/active_support/core_ext/integer/multiple.rb +12 -0
- data/lib/active_support/core_ext/integer/time.rb +22 -0
- data/lib/active_support/core_ext/integer.rb +4 -6
- data/lib/active_support/core_ext/kernel/concern.rb +14 -0
- data/lib/active_support/core_ext/kernel/reporting.rb +45 -0
- data/lib/active_support/core_ext/kernel/singleton_class.rb +8 -0
- data/lib/active_support/core_ext/kernel.rb +4 -78
- data/lib/active_support/core_ext/load_error.rb +6 -35
- data/lib/active_support/core_ext/module/aliasing.rb +31 -0
- data/lib/active_support/core_ext/module/anonymous.rb +30 -0
- data/lib/active_support/core_ext/module/attr_internal.rb +48 -0
- data/lib/active_support/core_ext/module/attribute_accessors.rb +214 -0
- data/lib/active_support/core_ext/module/attribute_accessors_per_thread.rb +175 -0
- data/lib/active_support/core_ext/module/concerning.rb +140 -0
- data/lib/active_support/core_ext/module/delegation.rb +225 -0
- data/lib/active_support/core_ext/module/deprecation.rb +25 -0
- data/lib/active_support/core_ext/module/introspection.rb +65 -0
- data/lib/active_support/core_ext/module/redefine_method.rb +40 -0
- data/lib/active_support/core_ext/module/remove_method.rb +17 -0
- data/lib/active_support/core_ext/module.rb +13 -0
- data/lib/active_support/core_ext/name_error.rb +59 -0
- data/lib/active_support/core_ext/numeric/bytes.rb +73 -42
- data/lib/active_support/core_ext/numeric/conversions.rb +145 -0
- data/lib/active_support/core_ext/numeric/time.rb +64 -57
- data/lib/active_support/core_ext/numeric.rb +4 -6
- data/lib/active_support/core_ext/object/acts_like.rb +45 -0
- data/lib/active_support/core_ext/object/blank.rb +199 -0
- data/lib/active_support/core_ext/object/conversions.rb +6 -0
- data/lib/active_support/core_ext/object/deep_dup.rb +71 -0
- data/lib/active_support/core_ext/object/duplicable.rb +69 -0
- data/lib/active_support/core_ext/object/inclusion.rb +37 -0
- data/lib/active_support/core_ext/object/instance_variables.rb +32 -0
- data/lib/active_support/core_ext/object/json.rb +267 -0
- data/lib/active_support/core_ext/object/to_param.rb +3 -0
- data/lib/active_support/core_ext/object/to_query.rb +93 -0
- data/lib/active_support/core_ext/object/try.rb +158 -0
- data/lib/active_support/core_ext/object/with.rb +46 -0
- data/lib/active_support/core_ext/object/with_options.rb +101 -0
- data/lib/active_support/core_ext/object.rb +17 -0
- data/lib/active_support/core_ext/pathname/blank.rb +20 -0
- data/lib/active_support/core_ext/pathname/existence.rb +23 -0
- data/lib/active_support/core_ext/pathname.rb +4 -0
- data/lib/active_support/core_ext/range/compare_range.rb +57 -0
- data/lib/active_support/core_ext/range/conversions.rb +58 -17
- data/lib/active_support/core_ext/range/overlap.rb +40 -0
- data/lib/active_support/core_ext/range/sole.rb +17 -0
- data/lib/active_support/core_ext/range.rb +5 -4
- data/lib/active_support/core_ext/regexp.rb +14 -0
- data/lib/active_support/core_ext/securerandom.rb +57 -0
- data/lib/active_support/core_ext/string/access.rb +93 -56
- data/lib/active_support/core_ext/string/behavior.rb +8 -0
- data/lib/active_support/core_ext/string/conversions.rb +57 -16
- data/lib/active_support/core_ext/string/exclude.rb +13 -0
- data/lib/active_support/core_ext/string/filters.rb +151 -0
- data/lib/active_support/core_ext/string/indent.rb +45 -0
- data/lib/active_support/core_ext/string/inflections.rb +297 -54
- data/lib/active_support/core_ext/string/inquiry.rb +16 -0
- data/lib/active_support/core_ext/string/multibyte.rb +67 -0
- data/lib/active_support/core_ext/string/output_safety.rb +235 -0
- data/lib/active_support/core_ext/string/starts_ends_with.rb +4 -18
- data/lib/active_support/core_ext/string/strip.rb +27 -0
- data/lib/active_support/core_ext/string/zones.rb +16 -0
- data/lib/active_support/core_ext/string.rb +14 -10
- data/lib/active_support/core_ext/symbol/starts_ends_with.rb +6 -0
- data/lib/active_support/core_ext/symbol.rb +3 -0
- data/lib/active_support/core_ext/thread/backtrace/location.rb +7 -0
- data/lib/active_support/core_ext/time/acts_like.rb +10 -0
- data/lib/active_support/core_ext/time/calculations.rb +358 -153
- data/lib/active_support/core_ext/time/compatibility.rb +15 -0
- data/lib/active_support/core_ext/time/conversions.rb +69 -30
- data/lib/active_support/core_ext/time/zones.rb +97 -0
- data/lib/active_support/core_ext/time.rb +6 -6
- data/lib/active_support/core_ext.rb +5 -1
- data/lib/active_support/current_attributes/test_helper.rb +13 -0
- data/lib/active_support/current_attributes.rb +243 -0
- data/lib/active_support/deep_mergeable.rb +53 -0
- data/lib/active_support/delegation.rb +183 -0
- data/lib/active_support/dependencies/autoload.rb +72 -0
- data/lib/active_support/dependencies/interlock.rb +55 -0
- data/lib/active_support/dependencies/require_dependency.rb +28 -0
- data/lib/active_support/dependencies.rb +84 -222
- data/lib/active_support/deprecation/behaviors.rb +148 -0
- data/lib/active_support/deprecation/constant_accessor.rb +74 -0
- data/lib/active_support/deprecation/deprecators.rb +104 -0
- data/lib/active_support/deprecation/disallowed.rb +54 -0
- data/lib/active_support/deprecation/method_wrappers.rb +68 -0
- data/lib/active_support/deprecation/proxy_wrappers.rb +189 -0
- data/lib/active_support/deprecation/reporting.rb +162 -0
- data/lib/active_support/deprecation.rb +81 -0
- data/lib/active_support/deprecator.rb +7 -0
- data/lib/active_support/descendants_tracker.rb +112 -0
- data/lib/active_support/digest.rb +22 -0
- data/lib/active_support/duration/iso8601_parser.rb +123 -0
- data/lib/active_support/duration/iso8601_serializer.rb +64 -0
- data/lib/active_support/duration.rb +524 -0
- data/lib/active_support/editor.rb +70 -0
- data/lib/active_support/encrypted_configuration.rb +126 -0
- data/lib/active_support/encrypted_file.rb +133 -0
- data/lib/active_support/environment_inquirer.rb +40 -0
- data/lib/active_support/error_reporter/test_helper.rb +15 -0
- data/lib/active_support/error_reporter.rb +318 -0
- data/lib/active_support/event_reporter/test_helper.rb +32 -0
- data/lib/active_support/event_reporter.rb +592 -0
- data/lib/active_support/evented_file_update_checker.rb +185 -0
- data/lib/active_support/execution_context/test_helper.rb +13 -0
- data/lib/active_support/execution_context.rb +110 -0
- data/lib/active_support/execution_wrapper.rb +150 -0
- data/lib/active_support/executor/test_helper.rb +7 -0
- data/lib/active_support/executor.rb +8 -0
- data/lib/active_support/file_update_checker.rb +166 -0
- data/lib/active_support/fork_tracker.rb +43 -0
- data/lib/active_support/gem_version.rb +17 -0
- data/lib/active_support/gzip.rb +41 -0
- data/lib/active_support/hash_with_indifferent_access.rb +464 -0
- data/lib/active_support/html_safe_translation.rb +56 -0
- data/lib/active_support/i18n.rb +17 -0
- data/lib/active_support/i18n_railtie.rb +140 -0
- data/lib/active_support/inflections.rb +68 -49
- data/lib/active_support/inflector/inflections.rb +290 -0
- data/lib/active_support/inflector/methods.rb +387 -0
- data/lib/active_support/inflector/transliterate.rb +147 -0
- data/lib/active_support/inflector.rb +7 -164
- data/lib/active_support/isolated_execution_state.rb +76 -0
- data/lib/active_support/json/decoding.rb +78 -0
- data/lib/active_support/json/encoding.rb +256 -0
- data/lib/active_support/json.rb +4 -0
- data/lib/active_support/key_generator.rb +66 -0
- data/lib/active_support/lazy_load_hooks.rb +107 -0
- data/lib/active_support/locale/en.rb +33 -0
- data/lib/active_support/locale/en.yml +141 -0
- data/lib/active_support/log_subscriber/test_helper.rb +106 -0
- data/lib/active_support/log_subscriber.rb +188 -0
- data/lib/active_support/logger.rb +55 -0
- data/lib/active_support/logger_silence.rb +21 -0
- data/lib/active_support/logger_thread_safe_level.rb +50 -0
- data/lib/active_support/message_encryptor.rb +374 -0
- data/lib/active_support/message_encryptors.rb +193 -0
- data/lib/active_support/message_pack/cache_serializer.rb +23 -0
- data/lib/active_support/message_pack/extensions.rb +310 -0
- data/lib/active_support/message_pack/serializer.rb +63 -0
- data/lib/active_support/message_pack.rb +50 -0
- data/lib/active_support/message_verifier.rb +377 -0
- data/lib/active_support/message_verifiers.rb +189 -0
- data/lib/active_support/messages/codec.rb +65 -0
- data/lib/active_support/messages/metadata.rb +146 -0
- data/lib/active_support/messages/rotation_configuration.rb +23 -0
- data/lib/active_support/messages/rotation_coordinator.rb +102 -0
- data/lib/active_support/messages/rotator.rb +69 -0
- data/lib/active_support/messages/serializer_with_fallback.rb +158 -0
- data/lib/active_support/multibyte/chars.rb +188 -0
- data/lib/active_support/multibyte/unicode.rb +42 -0
- data/lib/active_support/multibyte.rb +27 -0
- data/lib/active_support/notifications/fanout.rb +467 -0
- data/lib/active_support/notifications/instrumenter.rb +240 -0
- data/lib/active_support/notifications.rb +281 -0
- data/lib/active_support/number_helper/number_converter.rb +190 -0
- data/lib/active_support/number_helper/number_to_currency_converter.rb +46 -0
- data/lib/active_support/number_helper/number_to_delimited_converter.rb +30 -0
- data/lib/active_support/number_helper/number_to_human_converter.rb +69 -0
- data/lib/active_support/number_helper/number_to_human_size_converter.rb +60 -0
- data/lib/active_support/number_helper/number_to_percentage_converter.rb +16 -0
- data/lib/active_support/number_helper/number_to_phone_converter.rb +60 -0
- data/lib/active_support/number_helper/number_to_rounded_converter.rb +59 -0
- data/lib/active_support/number_helper/rounding_helper.rb +46 -0
- data/lib/active_support/number_helper.rb +479 -0
- data/lib/active_support/option_merger.rb +38 -0
- data/lib/active_support/ordered_hash.rb +50 -0
- data/lib/active_support/ordered_options.rb +141 -25
- data/lib/active_support/parameter_filter.rb +157 -0
- data/lib/active_support/rails.rb +26 -0
- data/lib/active_support/railtie.rb +180 -0
- data/lib/active_support/reloader.rb +138 -0
- data/lib/active_support/rescuable.rb +176 -0
- data/lib/active_support/secure_compare_rotator.rb +58 -0
- data/lib/active_support/security_utils.rb +38 -0
- data/lib/active_support/string_inquirer.rb +35 -0
- data/lib/active_support/structured_event_subscriber.rb +99 -0
- data/lib/active_support/subscriber.rb +141 -0
- data/lib/active_support/syntax_error_proxy.rb +67 -0
- data/lib/active_support/tagged_logging.rb +157 -0
- data/lib/active_support/test_case.rb +365 -0
- data/lib/active_support/testing/assertions.rb +369 -0
- data/lib/active_support/testing/autorun.rb +10 -0
- data/lib/active_support/testing/constant_lookup.rb +51 -0
- data/lib/active_support/testing/constant_stubbing.rb +54 -0
- data/lib/active_support/testing/declarative.rb +28 -0
- data/lib/active_support/testing/deprecation.rb +82 -0
- data/lib/active_support/testing/error_reporter_assertions.rb +124 -0
- data/lib/active_support/testing/event_reporter_assertions.rb +227 -0
- data/lib/active_support/testing/file_fixtures.rb +38 -0
- data/lib/active_support/testing/isolation.rb +121 -0
- data/lib/active_support/testing/method_call_assertions.rb +69 -0
- data/lib/active_support/testing/notification_assertions.rb +92 -0
- data/lib/active_support/testing/parallelization/server.rb +98 -0
- data/lib/active_support/testing/parallelization/worker.rb +107 -0
- data/lib/active_support/testing/parallelization.rb +79 -0
- data/lib/active_support/testing/parallelize_executor.rb +81 -0
- data/lib/active_support/testing/setup_and_teardown.rb +57 -0
- data/lib/active_support/testing/stream.rb +41 -0
- data/lib/active_support/testing/tagged_logging.rb +27 -0
- data/lib/active_support/testing/tests_without_assertions.rb +19 -0
- data/lib/active_support/testing/time_helpers.rb +273 -0
- data/lib/active_support/time.rb +20 -0
- data/lib/active_support/time_with_zone.rb +613 -0
- data/lib/active_support/values/time_zone.rb +599 -158
- data/lib/active_support/version.rb +7 -6
- data/lib/active_support/xml_mini/jdom.rb +175 -0
- data/lib/active_support/xml_mini/libxml.rb +80 -0
- data/lib/active_support/xml_mini/libxmlsax.rb +83 -0
- data/lib/active_support/xml_mini/nokogiri.rb +83 -0
- data/lib/active_support/xml_mini/nokogirisax.rb +86 -0
- data/lib/active_support/xml_mini/rexml.rb +137 -0
- data/lib/active_support/xml_mini.rb +212 -0
- data/lib/active_support.rb +122 -10
- metadata +524 -93
- data/CHANGELOG +0 -283
- data/lib/active_support/binding_of_caller.rb +0 -84
- data/lib/active_support/breakpoint.rb +0 -523
- data/lib/active_support/class_attribute_accessors.rb +0 -57
- data/lib/active_support/class_inheritable_attributes.rb +0 -117
- data/lib/active_support/clean_logger.rb +0 -36
- data/lib/active_support/core_ext/blank.rb +0 -38
- data/lib/active_support/core_ext/cgi/escape_skipping_slashes.rb +0 -14
- data/lib/active_support/core_ext/cgi.rb +0 -5
- data/lib/active_support/core_ext/exception.rb +0 -29
- data/lib/active_support/core_ext/integer/even_odd.rb +0 -24
- data/lib/active_support/core_ext/object_and_class.rb +0 -44
- data/lib/active_support/module_attribute_accessors.rb +0 -57
- data/lib/active_support/whiny_nil.rb +0 -38
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "date"
|
|
4
|
+
require "active_support/duration"
|
|
5
|
+
require "active_support/core_ext/object/acts_like"
|
|
6
|
+
require "active_support/core_ext/date/zones"
|
|
7
|
+
require "active_support/core_ext/time/zones"
|
|
8
|
+
require "active_support/core_ext/date_and_time/calculations"
|
|
9
|
+
|
|
10
|
+
class Date
|
|
11
|
+
include DateAndTime::Calculations
|
|
12
|
+
|
|
13
|
+
class << self
|
|
14
|
+
attr_accessor :beginning_of_week_default
|
|
15
|
+
|
|
16
|
+
# Returns the week start (e.g. +:monday+) for the current request, if this has been set (via Date.beginning_of_week=).
|
|
17
|
+
# If <tt>Date.beginning_of_week</tt> has not been set for the current request, returns the week start specified in <tt>config.beginning_of_week</tt>.
|
|
18
|
+
# If no +config.beginning_of_week+ was specified, returns +:monday+.
|
|
19
|
+
def beginning_of_week
|
|
20
|
+
::ActiveSupport::IsolatedExecutionState[:beginning_of_week] || beginning_of_week_default || :monday
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# Sets <tt>Date.beginning_of_week</tt> to a week start (e.g. +:monday+) for current request/thread.
|
|
24
|
+
#
|
|
25
|
+
# This method accepts any of the following day symbols:
|
|
26
|
+
# +:monday+, +:tuesday+, +:wednesday+, +:thursday+, +:friday+, +:saturday+, +:sunday+
|
|
27
|
+
def beginning_of_week=(week_start)
|
|
28
|
+
::ActiveSupport::IsolatedExecutionState[:beginning_of_week] = find_beginning_of_week!(week_start)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
# Returns week start day symbol (e.g. +:monday+), or raises an +ArgumentError+ for invalid day symbol.
|
|
32
|
+
def find_beginning_of_week!(week_start)
|
|
33
|
+
raise ArgumentError, "Invalid beginning of week: #{week_start}" unless ::Date::DAYS_INTO_WEEK.key?(week_start)
|
|
34
|
+
week_start
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
# Returns a new Date representing the date 1 day ago (i.e. yesterday's date).
|
|
38
|
+
def yesterday
|
|
39
|
+
::Date.current.yesterday
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
# Returns a new Date representing the date 1 day after today (i.e. tomorrow's date).
|
|
43
|
+
def tomorrow
|
|
44
|
+
::Date.current.tomorrow
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
# Returns Time.zone.today when <tt>Time.zone</tt> or <tt>config.time_zone</tt> are set, otherwise just returns Date.today.
|
|
48
|
+
def current
|
|
49
|
+
::Time.zone ? ::Time.zone.today : ::Date.today
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
# Converts Date to a Time (or DateTime if necessary) with the time portion set to the beginning of the day (0:00)
|
|
54
|
+
# and then subtracts the specified number of seconds.
|
|
55
|
+
def ago(seconds)
|
|
56
|
+
in_time_zone.since(-seconds)
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
# Converts Date to a Time (or DateTime if necessary) with the time portion set to the beginning of the day (0:00)
|
|
60
|
+
# and then adds the specified number of seconds
|
|
61
|
+
def since(seconds)
|
|
62
|
+
in_time_zone.since(seconds)
|
|
63
|
+
end
|
|
64
|
+
alias :in :since
|
|
65
|
+
|
|
66
|
+
# Converts Date to a Time (or DateTime if necessary) with the time portion set to the beginning of the day (0:00)
|
|
67
|
+
def beginning_of_day
|
|
68
|
+
in_time_zone
|
|
69
|
+
end
|
|
70
|
+
alias :midnight :beginning_of_day
|
|
71
|
+
alias :at_midnight :beginning_of_day
|
|
72
|
+
alias :at_beginning_of_day :beginning_of_day
|
|
73
|
+
|
|
74
|
+
# Converts Date to a Time (or DateTime if necessary) with the time portion set to the middle of the day (12:00)
|
|
75
|
+
def middle_of_day
|
|
76
|
+
in_time_zone.middle_of_day
|
|
77
|
+
end
|
|
78
|
+
alias :midday :middle_of_day
|
|
79
|
+
alias :noon :middle_of_day
|
|
80
|
+
alias :at_midday :middle_of_day
|
|
81
|
+
alias :at_noon :middle_of_day
|
|
82
|
+
alias :at_middle_of_day :middle_of_day
|
|
83
|
+
|
|
84
|
+
# Converts Date to a Time (or DateTime if necessary) with the time portion set to the end of the day (23:59:59)
|
|
85
|
+
def end_of_day
|
|
86
|
+
in_time_zone.end_of_day
|
|
87
|
+
end
|
|
88
|
+
alias :at_end_of_day :end_of_day
|
|
89
|
+
|
|
90
|
+
def plus_with_duration(other) # :nodoc:
|
|
91
|
+
if ActiveSupport::Duration === other
|
|
92
|
+
other.since(self)
|
|
93
|
+
else
|
|
94
|
+
plus_without_duration(other)
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
alias_method :plus_without_duration, :+
|
|
98
|
+
alias_method :+, :plus_with_duration
|
|
99
|
+
|
|
100
|
+
def minus_with_duration(other) # :nodoc:
|
|
101
|
+
if ActiveSupport::Duration === other
|
|
102
|
+
plus_with_duration(-other)
|
|
103
|
+
else
|
|
104
|
+
minus_without_duration(other)
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
alias_method :minus_without_duration, :-
|
|
108
|
+
alias_method :-, :minus_with_duration
|
|
109
|
+
|
|
110
|
+
# Provides precise Date calculations for years, months, and days. The +options+ parameter takes a hash with
|
|
111
|
+
# any of these keys: <tt>:years</tt>, <tt>:months</tt>, <tt>:weeks</tt>, <tt>:days</tt>.
|
|
112
|
+
#
|
|
113
|
+
# The increments are applied in order of time units from largest to smallest.
|
|
114
|
+
# In other words, the date is incremented first by +:years+, then by
|
|
115
|
+
# +:months+, then by +:weeks+, then by +:days+. This order can affect the
|
|
116
|
+
# result around the end of a month. For example, incrementing first by months
|
|
117
|
+
# then by days:
|
|
118
|
+
#
|
|
119
|
+
# Date.new(2004, 9, 30).advance(months: 1, days: 1)
|
|
120
|
+
# # => Sun, 31 Oct 2004
|
|
121
|
+
#
|
|
122
|
+
# Whereas incrementing first by days then by months yields a different result:
|
|
123
|
+
#
|
|
124
|
+
# Date.new(2004, 9, 30).advance(days: 1).advance(months: 1)
|
|
125
|
+
# # => Mon, 01 Nov 2004
|
|
126
|
+
#
|
|
127
|
+
def advance(options)
|
|
128
|
+
d = self
|
|
129
|
+
|
|
130
|
+
d = d >> options[:years] * 12 if options[:years]
|
|
131
|
+
d = d >> options[:months] if options[:months]
|
|
132
|
+
d = d + options[:weeks] * 7 if options[:weeks]
|
|
133
|
+
d = d + options[:days] if options[:days]
|
|
134
|
+
|
|
135
|
+
d
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
# Returns a new Date where one or more of the elements have been changed according to the +options+ parameter.
|
|
139
|
+
# The +options+ parameter is a hash with a combination of these keys: <tt>:year</tt>, <tt>:month</tt>, <tt>:day</tt>.
|
|
140
|
+
#
|
|
141
|
+
# Date.new(2007, 5, 12).change(day: 1) # => Date.new(2007, 5, 1)
|
|
142
|
+
# Date.new(2007, 5, 12).change(year: 2005, month: 1) # => Date.new(2005, 1, 12)
|
|
143
|
+
def change(options)
|
|
144
|
+
::Date.new(
|
|
145
|
+
options.fetch(:year, year),
|
|
146
|
+
options.fetch(:month, month),
|
|
147
|
+
options.fetch(:day, day)
|
|
148
|
+
)
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
# Allow Date to be compared with Time by converting to DateTime and relying on the <=> from there.
|
|
152
|
+
def compare_with_coercion(other)
|
|
153
|
+
if other.is_a?(Time)
|
|
154
|
+
to_datetime <=> other
|
|
155
|
+
else
|
|
156
|
+
compare_without_coercion(other)
|
|
157
|
+
end
|
|
158
|
+
end
|
|
159
|
+
alias_method :compare_without_coercion, :<=>
|
|
160
|
+
alias_method :<=>, :compare_with_coercion
|
|
161
|
+
end
|
|
@@ -1,31 +1,98 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "date"
|
|
4
|
+
require "active_support/inflector/methods"
|
|
5
|
+
require "active_support/core_ext/date/zones"
|
|
6
|
+
require "active_support/core_ext/module/redefine_method"
|
|
7
|
+
|
|
8
|
+
class Date
|
|
9
|
+
DATE_FORMATS = {
|
|
10
|
+
short: "%d %b",
|
|
11
|
+
long: "%B %d, %Y",
|
|
12
|
+
db: "%Y-%m-%d",
|
|
13
|
+
inspect: "%Y-%m-%d",
|
|
14
|
+
number: "%Y%m%d",
|
|
15
|
+
long_ordinal: lambda { |date|
|
|
16
|
+
day_format = ActiveSupport::Inflector.ordinalize(date.day)
|
|
17
|
+
date.strftime("%B #{day_format}, %Y") # => "April 25th, 2007"
|
|
18
|
+
},
|
|
19
|
+
rfc822: "%d %b %Y",
|
|
20
|
+
rfc2822: "%d %b %Y",
|
|
21
|
+
iso8601: lambda { |date| date.iso8601 }
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
# Convert to a formatted string. See DATE_FORMATS for predefined formats.
|
|
25
|
+
#
|
|
26
|
+
# This method is aliased to <tt>to_formatted_s</tt>.
|
|
27
|
+
#
|
|
28
|
+
# date = Date.new(2007, 11, 10) # => Sat, 10 Nov 2007
|
|
29
|
+
#
|
|
30
|
+
# date.to_fs(:db) # => "2007-11-10"
|
|
31
|
+
# date.to_formatted_s(:db) # => "2007-11-10"
|
|
32
|
+
#
|
|
33
|
+
# date.to_fs(:short) # => "10 Nov"
|
|
34
|
+
# date.to_fs(:number) # => "20071110"
|
|
35
|
+
# date.to_fs(:long) # => "November 10, 2007"
|
|
36
|
+
# date.to_fs(:long_ordinal) # => "November 10th, 2007"
|
|
37
|
+
# date.to_fs(:rfc822) # => "10 Nov 2007"
|
|
38
|
+
# date.to_fs(:rfc2822) # => "10 Nov 2007"
|
|
39
|
+
# date.to_fs(:iso8601) # => "2007-11-10"
|
|
40
|
+
#
|
|
41
|
+
# == Adding your own date formats to to_fs
|
|
42
|
+
# You can add your own formats to the Date::DATE_FORMATS hash.
|
|
43
|
+
# Use the format name as the hash key and either a strftime string
|
|
44
|
+
# or Proc instance that takes a date argument as the value.
|
|
45
|
+
#
|
|
46
|
+
# # config/initializers/date_formats.rb
|
|
47
|
+
# Date::DATE_FORMATS[:month_and_year] = '%B %Y'
|
|
48
|
+
# Date::DATE_FORMATS[:short_ordinal] = ->(date) { date.strftime("%B #{date.day.ordinalize}") }
|
|
49
|
+
def to_fs(format = :default)
|
|
50
|
+
if formatter = DATE_FORMATS[format]
|
|
51
|
+
if formatter.respond_to?(:call)
|
|
52
|
+
formatter.call(self).to_s
|
|
53
|
+
else
|
|
54
|
+
strftime(formatter)
|
|
28
55
|
end
|
|
56
|
+
else
|
|
57
|
+
to_s
|
|
29
58
|
end
|
|
30
59
|
end
|
|
31
|
-
|
|
60
|
+
alias_method :to_formatted_s, :to_fs
|
|
61
|
+
|
|
62
|
+
# Overrides the default inspect method with a human readable one, e.g., "Mon, 21 Feb 2005"
|
|
63
|
+
def readable_inspect
|
|
64
|
+
strftime("%a, %d %b %Y")
|
|
65
|
+
end
|
|
66
|
+
alias_method :default_inspect, :inspect
|
|
67
|
+
alias_method :inspect, :readable_inspect
|
|
68
|
+
|
|
69
|
+
silence_redefinition_of_method :to_time
|
|
70
|
+
|
|
71
|
+
# Converts a Date instance to a Time, where the time is set to the beginning of the day.
|
|
72
|
+
# The timezone can be either +:local+ or +:utc+ (default +:local+).
|
|
73
|
+
#
|
|
74
|
+
# date = Date.new(2007, 11, 10) # => Sat, 10 Nov 2007
|
|
75
|
+
#
|
|
76
|
+
# date.to_time # => 2007-11-10 00:00:00 0800
|
|
77
|
+
# date.to_time(:local) # => 2007-11-10 00:00:00 0800
|
|
78
|
+
#
|
|
79
|
+
# date.to_time(:utc) # => 2007-11-10 00:00:00 UTC
|
|
80
|
+
#
|
|
81
|
+
# NOTE: The +:local+ timezone is Ruby's *process* timezone, i.e. <tt>ENV['TZ']</tt>.
|
|
82
|
+
# If the <b>application's</b> timezone is needed, then use +in_time_zone+ instead.
|
|
83
|
+
def to_time(form = :local)
|
|
84
|
+
raise ArgumentError, "Expected :local or :utc, got #{form.inspect}." unless [:local, :utc].include?(form)
|
|
85
|
+
::Time.public_send(form, year, month, day)
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
silence_redefinition_of_method :xmlschema
|
|
89
|
+
|
|
90
|
+
# Returns a string which represents the time in used time zone as DateTime
|
|
91
|
+
# defined by XML Schema:
|
|
92
|
+
#
|
|
93
|
+
# date = Date.new(2015, 05, 23) # => Sat, 23 May 2015
|
|
94
|
+
# date.xmlschema # => "2015-05-23T00:00:00+04:00"
|
|
95
|
+
def xmlschema
|
|
96
|
+
in_time_zone.xmlschema
|
|
97
|
+
end
|
|
98
|
+
end
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
require File.dirname(__FILE__) + '/date/conversions'
|
|
1
|
+
# frozen_string_literal: true
|
|
3
2
|
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
3
|
+
require_relative "date/acts_like"
|
|
4
|
+
require_relative "date/blank"
|
|
5
|
+
require_relative "date/calculations"
|
|
6
|
+
require_relative "date/conversions"
|
|
7
|
+
require_relative "date/zones"
|