activesupport 4.2.11.1 → 6.0.3.1
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of activesupport might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/CHANGELOG.md +399 -411
- data/MIT-LICENSE +2 -2
- data/README.rdoc +7 -7
- data/lib/active_support/actionable_error.rb +48 -0
- data/lib/active_support/all.rb +5 -3
- data/lib/active_support/array_inquirer.rb +48 -0
- data/lib/active_support/backtrace_cleaner.rb +34 -6
- data/lib/active_support/benchmarkable.rb +6 -4
- data/lib/active_support/builder.rb +3 -1
- data/lib/active_support/cache/file_store.rb +58 -53
- data/lib/active_support/cache/mem_cache_store.rb +95 -91
- data/lib/active_support/cache/memory_store.rb +39 -36
- data/lib/active_support/cache/null_store.rb +11 -7
- data/lib/active_support/cache/redis_cache_store.rb +493 -0
- data/lib/active_support/cache/strategy/local_cache.rb +75 -42
- data/lib/active_support/cache/strategy/local_cache_middleware.rb +10 -9
- data/lib/active_support/cache.rb +331 -217
- data/lib/active_support/callbacks.rb +650 -592
- data/lib/active_support/concern.rb +35 -6
- data/lib/active_support/concurrency/load_interlock_aware_monitor.rb +35 -0
- data/lib/active_support/concurrency/share_lock.rb +226 -0
- data/lib/active_support/configurable.rb +13 -14
- data/lib/active_support/core_ext/array/access.rb +41 -1
- data/lib/active_support/core_ext/array/conversions.rb +24 -20
- data/lib/active_support/core_ext/array/extract.rb +21 -0
- data/lib/active_support/core_ext/array/extract_options.rb +2 -0
- data/lib/active_support/core_ext/array/grouping.rb +11 -18
- data/lib/active_support/core_ext/array/inquiry.rb +19 -0
- data/lib/active_support/core_ext/array/prepend_and_append.rb +4 -6
- data/lib/active_support/core_ext/array/wrap.rb +7 -4
- data/lib/active_support/core_ext/array.rb +9 -6
- data/lib/active_support/core_ext/benchmark.rb +3 -1
- data/lib/active_support/core_ext/big_decimal/conversions.rb +10 -12
- data/lib/active_support/core_ext/big_decimal.rb +3 -1
- data/lib/active_support/core_ext/class/attribute.rb +45 -31
- data/lib/active_support/core_ext/class/attribute_accessors.rb +3 -1
- data/lib/active_support/core_ext/class/subclasses.rb +20 -6
- data/lib/active_support/core_ext/class.rb +4 -3
- data/lib/active_support/core_ext/date/acts_like.rb +3 -1
- data/lib/active_support/core_ext/date/blank.rb +14 -0
- data/lib/active_support/core_ext/date/calculations.rb +17 -14
- data/lib/active_support/core_ext/date/conversions.rb +25 -23
- data/lib/active_support/core_ext/date/zones.rb +4 -2
- data/lib/active_support/core_ext/date.rb +6 -4
- data/lib/active_support/core_ext/date_and_time/calculations.rb +154 -65
- data/lib/active_support/core_ext/date_and_time/compatibility.rb +4 -3
- data/lib/active_support/core_ext/date_and_time/zones.rb +12 -13
- data/lib/active_support/core_ext/date_time/acts_like.rb +4 -2
- data/lib/active_support/core_ext/date_time/blank.rb +14 -0
- data/lib/active_support/core_ext/date_time/calculations.rb +37 -19
- data/lib/active_support/core_ext/date_time/compatibility.rb +8 -6
- data/lib/active_support/core_ext/date_time/conversions.rb +16 -13
- data/lib/active_support/core_ext/date_time.rb +7 -5
- data/lib/active_support/core_ext/digest/uuid.rb +7 -5
- data/lib/active_support/core_ext/digest.rb +3 -0
- data/lib/active_support/core_ext/enumerable.rb +114 -22
- data/lib/active_support/core_ext/file/atomic.rb +38 -31
- data/lib/active_support/core_ext/file.rb +3 -1
- data/lib/active_support/core_ext/hash/compact.rb +4 -23
- data/lib/active_support/core_ext/hash/conversions.rb +62 -41
- data/lib/active_support/core_ext/hash/deep_merge.rb +9 -13
- data/lib/active_support/core_ext/hash/deep_transform_values.rb +46 -0
- data/lib/active_support/core_ext/hash/except.rb +12 -9
- data/lib/active_support/core_ext/hash/indifferent_access.rb +4 -3
- data/lib/active_support/core_ext/hash/keys.rb +19 -42
- data/lib/active_support/core_ext/hash/reverse_merge.rb +5 -2
- data/lib/active_support/core_ext/hash/slice.rb +5 -27
- data/lib/active_support/core_ext/hash/transform_values.rb +4 -22
- data/lib/active_support/core_ext/hash.rb +10 -9
- data/lib/active_support/core_ext/integer/inflections.rb +3 -1
- data/lib/active_support/core_ext/integer/multiple.rb +3 -1
- data/lib/active_support/core_ext/integer/time.rb +11 -18
- data/lib/active_support/core_ext/integer.rb +5 -3
- data/lib/active_support/core_ext/kernel/concern.rb +5 -1
- data/lib/active_support/core_ext/kernel/reporting.rb +4 -84
- data/lib/active_support/core_ext/kernel/singleton_class.rb +2 -0
- data/lib/active_support/core_ext/kernel.rb +5 -5
- data/lib/active_support/core_ext/load_error.rb +3 -22
- data/lib/active_support/core_ext/marshal.rb +8 -8
- data/lib/active_support/core_ext/module/aliasing.rb +6 -44
- data/lib/active_support/core_ext/module/anonymous.rb +12 -1
- data/lib/active_support/core_ext/module/attr_internal.rb +8 -9
- data/lib/active_support/core_ext/module/attribute_accessors.rb +46 -46
- data/lib/active_support/core_ext/module/attribute_accessors_per_thread.rb +144 -0
- data/lib/active_support/core_ext/module/concerning.rb +11 -12
- data/lib/active_support/core_ext/module/delegation.rb +133 -30
- data/lib/active_support/core_ext/module/deprecation.rb +4 -2
- data/lib/active_support/core_ext/module/introspection.rb +44 -19
- data/lib/active_support/core_ext/module/reachable.rb +5 -7
- data/lib/active_support/core_ext/module/redefine_method.rb +40 -0
- data/lib/active_support/core_ext/module/remove_method.rb +8 -3
- data/lib/active_support/core_ext/module.rb +13 -11
- data/lib/active_support/core_ext/name_error.rb +22 -2
- data/lib/active_support/core_ext/numeric/bytes.rb +22 -0
- data/lib/active_support/core_ext/numeric/conversions.rb +129 -136
- data/lib/active_support/core_ext/numeric/inquiry.rb +5 -0
- data/lib/active_support/core_ext/numeric/time.rb +35 -23
- data/lib/active_support/core_ext/numeric.rb +5 -3
- data/lib/active_support/core_ext/object/acts_like.rb +12 -1
- data/lib/active_support/core_ext/object/blank.rb +27 -3
- data/lib/active_support/core_ext/object/conversions.rb +6 -4
- data/lib/active_support/core_ext/object/deep_dup.rb +13 -4
- data/lib/active_support/core_ext/object/duplicable.rb +13 -93
- data/lib/active_support/core_ext/object/inclusion.rb +5 -3
- data/lib/active_support/core_ext/object/instance_variables.rb +3 -1
- data/lib/active_support/core_ext/object/json.rb +51 -20
- data/lib/active_support/core_ext/object/to_param.rb +3 -1
- data/lib/active_support/core_ext/object/to_query.rb +10 -5
- data/lib/active_support/core_ext/object/try.rb +81 -23
- data/lib/active_support/core_ext/object/with_options.rb +16 -3
- data/lib/active_support/core_ext/object.rb +14 -13
- data/lib/active_support/core_ext/range/compare_range.rb +76 -0
- data/lib/active_support/core_ext/range/conversions.rb +37 -15
- data/lib/active_support/core_ext/range/each.rb +18 -17
- data/lib/active_support/core_ext/range/include_range.rb +7 -21
- data/lib/active_support/core_ext/range/include_time_with_zone.rb +23 -0
- data/lib/active_support/core_ext/range/overlaps.rb +2 -0
- data/lib/active_support/core_ext/range.rb +7 -4
- data/lib/active_support/core_ext/regexp.rb +2 -0
- data/lib/active_support/core_ext/securerandom.rb +45 -0
- data/lib/active_support/core_ext/string/access.rb +16 -6
- data/lib/active_support/core_ext/string/behavior.rb +3 -1
- data/lib/active_support/core_ext/string/conversions.rb +7 -4
- data/lib/active_support/core_ext/string/exclude.rb +2 -0
- data/lib/active_support/core_ext/string/filters.rb +48 -6
- data/lib/active_support/core_ext/string/indent.rb +6 -4
- data/lib/active_support/core_ext/string/inflections.rb +66 -24
- data/lib/active_support/core_ext/string/inquiry.rb +3 -1
- data/lib/active_support/core_ext/string/multibyte.rb +16 -7
- data/lib/active_support/core_ext/string/output_safety.rb +93 -40
- data/lib/active_support/core_ext/string/starts_ends_with.rb +2 -0
- data/lib/active_support/core_ext/string/strip.rb +6 -5
- data/lib/active_support/core_ext/string/zones.rb +4 -2
- data/lib/active_support/core_ext/string.rb +15 -13
- data/lib/active_support/core_ext/time/acts_like.rb +3 -1
- data/lib/active_support/core_ext/time/calculations.rb +115 -52
- data/lib/active_support/core_ext/time/compatibility.rb +4 -2
- data/lib/active_support/core_ext/time/conversions.rb +20 -13
- data/lib/active_support/core_ext/time/zones.rb +41 -7
- data/lib/active_support/core_ext/time.rb +7 -6
- data/lib/active_support/core_ext/uri.rb +6 -7
- data/lib/active_support/core_ext.rb +3 -1
- data/lib/active_support/current_attributes.rb +203 -0
- data/lib/active_support/dependencies/autoload.rb +2 -0
- data/lib/active_support/dependencies/interlock.rb +57 -0
- data/lib/active_support/dependencies/zeitwerk_integration.rb +117 -0
- data/lib/active_support/dependencies.rb +208 -166
- data/lib/active_support/deprecation/behaviors.rb +44 -11
- data/lib/active_support/deprecation/constant_accessor.rb +52 -0
- data/lib/active_support/deprecation/instance_delegator.rb +17 -2
- data/lib/active_support/deprecation/method_wrappers.rb +61 -21
- data/lib/active_support/deprecation/proxy_wrappers.rb +81 -30
- data/lib/active_support/deprecation/reporting.rb +32 -12
- data/lib/active_support/deprecation.rb +12 -9
- data/lib/active_support/descendants_tracker.rb +57 -9
- data/lib/active_support/digest.rb +20 -0
- data/lib/active_support/duration/iso8601_parser.rb +123 -0
- data/lib/active_support/duration/iso8601_serializer.rb +53 -0
- data/lib/active_support/duration.rb +315 -40
- data/lib/active_support/encrypted_configuration.rb +45 -0
- data/lib/active_support/encrypted_file.rb +100 -0
- data/lib/active_support/evented_file_update_checker.rb +234 -0
- data/lib/active_support/execution_wrapper.rb +129 -0
- data/lib/active_support/executor.rb +8 -0
- data/lib/active_support/file_update_checker.rb +62 -37
- data/lib/active_support/gem_version.rb +6 -4
- data/lib/active_support/gzip.rb +7 -5
- data/lib/active_support/hash_with_indifferent_access.rb +129 -30
- data/lib/active_support/i18n.rb +9 -6
- data/lib/active_support/i18n_railtie.rb +50 -14
- data/lib/active_support/inflections.rb +13 -11
- data/lib/active_support/inflector/inflections.rb +58 -13
- data/lib/active_support/inflector/methods.rb +159 -145
- data/lib/active_support/inflector/transliterate.rb +84 -34
- data/lib/active_support/inflector.rb +7 -5
- data/lib/active_support/json/decoding.rb +32 -30
- data/lib/active_support/json/encoding.rb +17 -60
- data/lib/active_support/json.rb +4 -2
- data/lib/active_support/key_generator.rb +11 -43
- data/lib/active_support/lazy_load_hooks.rb +53 -20
- data/lib/active_support/locale/en.rb +33 -0
- data/lib/active_support/locale/en.yml +2 -0
- data/lib/active_support/log_subscriber/test_helper.rb +14 -12
- data/lib/active_support/log_subscriber.rb +44 -19
- data/lib/active_support/logger.rb +9 -23
- data/lib/active_support/logger_silence.rb +32 -14
- data/lib/active_support/logger_thread_safe_level.rb +32 -8
- data/lib/active_support/message_encryptor.rb +166 -53
- data/lib/active_support/message_verifier.rb +149 -16
- data/lib/active_support/messages/metadata.rb +72 -0
- data/lib/active_support/messages/rotation_configuration.rb +22 -0
- data/lib/active_support/messages/rotator.rb +56 -0
- data/lib/active_support/multibyte/chars.rb +56 -63
- data/lib/active_support/multibyte/unicode.rb +56 -290
- data/lib/active_support/multibyte.rb +4 -2
- data/lib/active_support/notifications/fanout.rb +109 -22
- data/lib/active_support/notifications/instrumenter.rb +107 -16
- data/lib/active_support/notifications.rb +51 -10
- data/lib/active_support/number_helper/number_converter.rb +16 -15
- data/lib/active_support/number_helper/number_to_currency_converter.rb +14 -15
- data/lib/active_support/number_helper/number_to_delimited_converter.rb +11 -4
- data/lib/active_support/number_helper/number_to_human_converter.rb +13 -10
- data/lib/active_support/number_helper/number_to_human_size_converter.rb +11 -9
- data/lib/active_support/number_helper/number_to_percentage_converter.rb +5 -1
- data/lib/active_support/number_helper/number_to_phone_converter.rb +15 -5
- data/lib/active_support/number_helper/number_to_rounded_converter.rb +25 -57
- data/lib/active_support/number_helper/rounding_helper.rb +66 -0
- data/lib/active_support/number_helper.rb +105 -68
- data/lib/active_support/option_merger.rb +24 -4
- data/lib/active_support/ordered_hash.rb +7 -5
- data/lib/active_support/ordered_options.rb +27 -5
- data/lib/active_support/parameter_filter.rb +128 -0
- data/lib/active_support/per_thread_registry.rb +9 -4
- data/lib/active_support/proxy_object.rb +2 -0
- data/lib/active_support/rails.rb +10 -8
- data/lib/active_support/railtie.rb +43 -9
- data/lib/active_support/reloader.rb +130 -0
- data/lib/active_support/rescuable.rb +108 -53
- data/lib/active_support/security_utils.rb +15 -11
- data/lib/active_support/string_inquirer.rb +11 -4
- data/lib/active_support/subscriber.rb +74 -30
- data/lib/active_support/tagged_logging.rb +25 -13
- data/lib/active_support/test_case.rb +107 -44
- data/lib/active_support/testing/assertions.rb +151 -20
- data/lib/active_support/testing/autorun.rb +4 -2
- data/lib/active_support/testing/constant_lookup.rb +2 -1
- data/lib/active_support/testing/declarative.rb +3 -1
- data/lib/active_support/testing/deprecation.rb +13 -10
- data/lib/active_support/testing/file_fixtures.rb +38 -0
- data/lib/active_support/testing/isolation.rb +35 -26
- data/lib/active_support/testing/method_call_assertions.rb +70 -0
- data/lib/active_support/testing/parallelization.rb +134 -0
- data/lib/active_support/testing/setup_and_teardown.rb +13 -8
- data/lib/active_support/testing/stream.rb +43 -0
- data/lib/active_support/testing/tagged_logging.rb +3 -1
- data/lib/active_support/testing/time_helpers.rb +84 -20
- data/lib/active_support/time.rb +14 -12
- data/lib/active_support/time_with_zone.rb +179 -39
- data/lib/active_support/values/time_zone.rb +203 -63
- data/lib/active_support/version.rb +3 -1
- data/lib/active_support/xml_mini/jdom.rb +116 -115
- data/lib/active_support/xml_mini/libxml.rb +16 -13
- data/lib/active_support/xml_mini/libxmlsax.rb +15 -14
- data/lib/active_support/xml_mini/nokogiri.rb +14 -12
- data/lib/active_support/xml_mini/nokogirisax.rb +14 -13
- data/lib/active_support/xml_mini/rexml.rb +11 -9
- data/lib/active_support/xml_mini.rb +38 -46
- data/lib/active_support.rb +13 -11
- metadata +84 -26
- data/lib/active_support/concurrency/latch.rb +0 -27
- data/lib/active_support/core_ext/big_decimal/yaml_conversions.rb +0 -16
- data/lib/active_support/core_ext/class/delegating_attributes.rb +0 -45
- data/lib/active_support/core_ext/date_time/zones.rb +0 -6
- data/lib/active_support/core_ext/kernel/agnostics.rb +0 -11
- data/lib/active_support/core_ext/kernel/debugger.rb +0 -10
- data/lib/active_support/core_ext/module/method_transplanting.rb +0 -13
- data/lib/active_support/core_ext/module/qualified_const.rb +0 -52
- data/lib/active_support/core_ext/object/itself.rb +0 -15
- data/lib/active_support/core_ext/struct.rb +0 -6
- data/lib/active_support/core_ext/thread.rb +0 -86
- data/lib/active_support/core_ext/time/marshal.rb +0 -30
- data/lib/active_support/values/unicode_tables.dat +0 -0
@@ -1,13 +0,0 @@
|
|
1
|
-
class Module
|
2
|
-
###
|
3
|
-
# TODO: remove this after 1.9 support is dropped
|
4
|
-
def methods_transplantable? # :nodoc:
|
5
|
-
x = Module.new {
|
6
|
-
def foo; end # :nodoc:
|
7
|
-
}
|
8
|
-
Module.new { define_method :bar, x.instance_method(:foo) }
|
9
|
-
true
|
10
|
-
rescue TypeError
|
11
|
-
false
|
12
|
-
end
|
13
|
-
end
|
@@ -1,52 +0,0 @@
|
|
1
|
-
require 'active_support/core_ext/string/inflections'
|
2
|
-
|
3
|
-
#--
|
4
|
-
# Allows code reuse in the methods below without polluting Module.
|
5
|
-
#++
|
6
|
-
module QualifiedConstUtils
|
7
|
-
def self.raise_if_absolute(path)
|
8
|
-
raise NameError.new("wrong constant name #$&") if path =~ /\A::[^:]+/
|
9
|
-
end
|
10
|
-
|
11
|
-
def self.names(path)
|
12
|
-
path.split('::')
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
##
|
17
|
-
# Extends the API for constants to be able to deal with qualified names. Arguments
|
18
|
-
# are assumed to be relative to the receiver.
|
19
|
-
#
|
20
|
-
#--
|
21
|
-
# Qualified names are required to be relative because we are extending existing
|
22
|
-
# methods that expect constant names, ie, relative paths of length 1. For example,
|
23
|
-
# Object.const_get('::String') raises NameError and so does qualified_const_get.
|
24
|
-
#++
|
25
|
-
class Module
|
26
|
-
def qualified_const_defined?(path, search_parents=true)
|
27
|
-
QualifiedConstUtils.raise_if_absolute(path)
|
28
|
-
|
29
|
-
QualifiedConstUtils.names(path).inject(self) do |mod, name|
|
30
|
-
return unless mod.const_defined?(name, search_parents)
|
31
|
-
mod.const_get(name)
|
32
|
-
end
|
33
|
-
return true
|
34
|
-
end
|
35
|
-
|
36
|
-
def qualified_const_get(path)
|
37
|
-
QualifiedConstUtils.raise_if_absolute(path)
|
38
|
-
|
39
|
-
QualifiedConstUtils.names(path).inject(self) do |mod, name|
|
40
|
-
mod.const_get(name)
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
def qualified_const_set(path, value)
|
45
|
-
QualifiedConstUtils.raise_if_absolute(path)
|
46
|
-
|
47
|
-
const_name = path.demodulize
|
48
|
-
mod_name = path.deconstantize
|
49
|
-
mod = mod_name.empty? ? self : qualified_const_get(mod_name)
|
50
|
-
mod.const_set(const_name, value)
|
51
|
-
end
|
52
|
-
end
|
@@ -1,15 +0,0 @@
|
|
1
|
-
class Object
|
2
|
-
# TODO: Remove this file when we drop support for Ruby < 2.2
|
3
|
-
unless respond_to?(:itself)
|
4
|
-
# Returns the object itself.
|
5
|
-
#
|
6
|
-
# Useful for chaining methods, such as Active Record scopes:
|
7
|
-
#
|
8
|
-
# Event.public_send(state.presence_in([ :trashed, :drafted ]) || :itself).order(:created_at)
|
9
|
-
#
|
10
|
-
# @return Object
|
11
|
-
def itself
|
12
|
-
self
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
@@ -1,86 +0,0 @@
|
|
1
|
-
class Thread
|
2
|
-
LOCK = Mutex.new # :nodoc:
|
3
|
-
|
4
|
-
# Returns the value of a thread local variable that has been set. Note that
|
5
|
-
# these are different than fiber local values.
|
6
|
-
#
|
7
|
-
# Thread local values are carried along with threads, and do not respect
|
8
|
-
# fibers. For example:
|
9
|
-
#
|
10
|
-
# Thread.new {
|
11
|
-
# Thread.current.thread_variable_set("foo", "bar") # set a thread local
|
12
|
-
# Thread.current["foo"] = "bar" # set a fiber local
|
13
|
-
#
|
14
|
-
# Fiber.new {
|
15
|
-
# Fiber.yield [
|
16
|
-
# Thread.current.thread_variable_get("foo"), # get the thread local
|
17
|
-
# Thread.current["foo"], # get the fiber local
|
18
|
-
# ]
|
19
|
-
# }.resume
|
20
|
-
# }.join.value # => ['bar', nil]
|
21
|
-
#
|
22
|
-
# The value <tt>"bar"</tt> is returned for the thread local, where +nil+ is returned
|
23
|
-
# for the fiber local. The fiber is executed in the same thread, so the
|
24
|
-
# thread local values are available.
|
25
|
-
def thread_variable_get(key)
|
26
|
-
_locals[key.to_sym]
|
27
|
-
end
|
28
|
-
|
29
|
-
# Sets a thread local with +key+ to +value+. Note that these are local to
|
30
|
-
# threads, and not to fibers. Please see Thread#thread_variable_get for
|
31
|
-
# more information.
|
32
|
-
def thread_variable_set(key, value)
|
33
|
-
_locals[key.to_sym] = value
|
34
|
-
end
|
35
|
-
|
36
|
-
# Returns an array of the names of the thread-local variables (as Symbols).
|
37
|
-
#
|
38
|
-
# thr = Thread.new do
|
39
|
-
# Thread.current.thread_variable_set(:cat, 'meow')
|
40
|
-
# Thread.current.thread_variable_set("dog", 'woof')
|
41
|
-
# end
|
42
|
-
# thr.join # => #<Thread:0x401b3f10 dead>
|
43
|
-
# thr.thread_variables # => [:dog, :cat]
|
44
|
-
#
|
45
|
-
# Note that these are not fiber local variables. Please see Thread#thread_variable_get
|
46
|
-
# for more details.
|
47
|
-
def thread_variables
|
48
|
-
_locals.keys
|
49
|
-
end
|
50
|
-
|
51
|
-
# Returns <tt>true</tt> if the given string (or symbol) exists as a
|
52
|
-
# thread-local variable.
|
53
|
-
#
|
54
|
-
# me = Thread.current
|
55
|
-
# me.thread_variable_set(:oliver, "a")
|
56
|
-
# me.thread_variable?(:oliver) # => true
|
57
|
-
# me.thread_variable?(:stanley) # => false
|
58
|
-
#
|
59
|
-
# Note that these are not fiber local variables. Please see Thread#thread_variable_get
|
60
|
-
# for more details.
|
61
|
-
def thread_variable?(key)
|
62
|
-
_locals.has_key?(key.to_sym)
|
63
|
-
end
|
64
|
-
|
65
|
-
# Freezes the thread so that thread local variables cannot be set via
|
66
|
-
# Thread#thread_variable_set, nor can fiber local variables be set.
|
67
|
-
#
|
68
|
-
# me = Thread.current
|
69
|
-
# me.freeze
|
70
|
-
# me.thread_variable_set(:oliver, "a") #=> RuntimeError: can't modify frozen thread locals
|
71
|
-
# me[:oliver] = "a" #=> RuntimeError: can't modify frozen thread locals
|
72
|
-
def freeze
|
73
|
-
_locals.freeze
|
74
|
-
super
|
75
|
-
end
|
76
|
-
|
77
|
-
private
|
78
|
-
|
79
|
-
def _locals
|
80
|
-
if defined?(@_locals)
|
81
|
-
@_locals
|
82
|
-
else
|
83
|
-
LOCK.synchronize { @_locals ||= {} }
|
84
|
-
end
|
85
|
-
end
|
86
|
-
end unless Thread.instance_methods.include?(:thread_variable_set)
|
@@ -1,30 +0,0 @@
|
|
1
|
-
# Ruby 1.9.2 adds utc_offset and zone to Time, but marshaling only
|
2
|
-
# preserves utc_offset. Preserve zone also, even though it may not
|
3
|
-
# work in some edge cases.
|
4
|
-
if Time.local(2010).zone != Marshal.load(Marshal.dump(Time.local(2010))).zone
|
5
|
-
class Time
|
6
|
-
class << self
|
7
|
-
alias_method :_load_without_zone, :_load
|
8
|
-
def _load(marshaled_time)
|
9
|
-
time = _load_without_zone(marshaled_time)
|
10
|
-
time.instance_eval do
|
11
|
-
if zone = defined?(@_zone) && remove_instance_variable('@_zone')
|
12
|
-
ary = to_a
|
13
|
-
ary[0] += subsec if ary[0] == sec
|
14
|
-
ary[-1] = zone
|
15
|
-
utc? ? Time.utc(*ary) : Time.local(*ary)
|
16
|
-
else
|
17
|
-
self
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
alias_method :_dump_without_zone, :_dump
|
24
|
-
def _dump(*args)
|
25
|
-
obj = dup
|
26
|
-
obj.instance_variable_set('@_zone', zone)
|
27
|
-
obj.send :_dump_without_zone, *args
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
Binary file
|