activesupport 3.2.22.5 → 4.0.0
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 +4 -4
- data/CHANGELOG.md +364 -135
- data/MIT-LICENSE +1 -1
- data/README.rdoc +6 -4
- data/lib/active_support/backtrace_cleaner.rb +33 -25
- data/lib/active_support/basic_object.rb +7 -17
- data/lib/active_support/benchmarkable.rb +19 -15
- data/lib/active_support/buffered_logger.rb +9 -113
- data/lib/active_support/cache/file_store.rb +14 -14
- data/lib/active_support/cache/mem_cache_store.rb +24 -30
- data/lib/active_support/cache/memory_store.rb +2 -0
- data/lib/active_support/cache/strategy/local_cache.rb +48 -37
- data/lib/active_support/cache.rb +228 -183
- data/lib/active_support/callbacks.rb +201 -253
- data/lib/active_support/concern.rb +16 -23
- data/lib/active_support/concurrency/latch.rb +27 -0
- data/lib/active_support/configurable.rb +69 -12
- data/lib/active_support/core_ext/array/access.rb +17 -9
- data/lib/active_support/core_ext/array/conversions.rb +115 -55
- data/lib/active_support/core_ext/array/extract_options.rb +2 -2
- data/lib/active_support/core_ext/array/grouping.rb +21 -22
- data/lib/active_support/core_ext/array/uniq_by.rb +12 -9
- data/lib/active_support/core_ext/array/wrap.rb +13 -16
- data/lib/active_support/core_ext/array.rb +0 -1
- data/lib/active_support/core_ext/benchmark.rb +7 -0
- data/lib/active_support/core_ext/big_decimal/conversions.rb +8 -24
- data/lib/active_support/core_ext/class/attribute.rb +40 -32
- data/lib/active_support/core_ext/class/attribute_accessors.rb +14 -12
- data/lib/active_support/core_ext/class/delegating_attributes.rb +15 -19
- data/lib/active_support/core_ext/class/subclasses.rb +11 -5
- data/lib/active_support/core_ext/date/calculations.rb +44 -187
- data/lib/active_support/core_ext/date/conversions.rb +16 -38
- data/lib/active_support/core_ext/date/zones.rb +25 -2
- data/lib/active_support/core_ext/date.rb +5 -0
- data/lib/active_support/core_ext/date_and_time/calculations.rb +232 -0
- data/lib/active_support/core_ext/date_time/acts_like.rb +0 -1
- data/lib/active_support/core_ext/date_time/calculations.rb +77 -62
- data/lib/active_support/core_ext/date_time/conversions.rb +21 -33
- data/lib/active_support/core_ext/date_time/zones.rb +11 -8
- data/lib/active_support/core_ext/date_time.rb +4 -0
- data/lib/active_support/core_ext/enumerable.rb +26 -73
- data/lib/active_support/core_ext/file/atomic.rb +27 -11
- data/lib/active_support/core_ext/file.rb +0 -1
- data/lib/active_support/core_ext/hash/conversions.rb +145 -79
- data/lib/active_support/core_ext/hash/deep_merge.rb +14 -8
- data/lib/active_support/core_ext/hash/diff.rb +5 -4
- data/lib/active_support/core_ext/hash/except.rb +1 -9
- data/lib/active_support/core_ext/hash/indifferent_access.rb +4 -5
- data/lib/active_support/core_ext/hash/keys.rb +108 -24
- data/lib/active_support/core_ext/hash/reverse_merge.rb +2 -3
- data/lib/active_support/core_ext/hash/slice.rb +12 -12
- data/lib/active_support/core_ext/hash.rb +0 -1
- data/lib/active_support/core_ext/integer/inflections.rb +13 -1
- data/lib/active_support/core_ext/integer/time.rb +17 -12
- data/lib/active_support/core_ext/kernel/debugger.rb +2 -2
- data/lib/active_support/core_ext/kernel/reporting.rb +36 -22
- data/lib/active_support/core_ext/kernel/singleton_class.rb +0 -7
- data/lib/active_support/core_ext/load_error.rb +7 -5
- data/lib/active_support/core_ext/logger.rb +7 -23
- data/lib/active_support/core_ext/marshal.rb +21 -0
- data/lib/active_support/core_ext/module/aliasing.rb +8 -9
- data/lib/active_support/core_ext/module/anonymous.rb +2 -7
- data/lib/active_support/core_ext/module/attr_internal.rb +0 -1
- data/lib/active_support/core_ext/module/attribute_accessors.rb +12 -10
- data/lib/active_support/core_ext/module/delegation.rb +92 -49
- data/lib/active_support/core_ext/module/deprecation.rb +19 -3
- data/lib/active_support/core_ext/module/introspection.rb +17 -27
- data/lib/active_support/core_ext/module/qualified_const.rb +8 -20
- data/lib/active_support/core_ext/module/remove_method.rb +1 -5
- data/lib/active_support/core_ext/module.rb +1 -3
- data/lib/active_support/core_ext/numeric/conversions.rb +135 -0
- data/lib/active_support/core_ext/numeric/time.rb +6 -6
- data/lib/active_support/core_ext/numeric.rb +1 -0
- data/lib/active_support/core_ext/object/acts_like.rb +4 -4
- data/lib/active_support/core_ext/object/blank.rb +7 -23
- data/lib/active_support/core_ext/object/deep_dup.rb +46 -0
- data/lib/active_support/core_ext/object/duplicable.rb +1 -30
- data/lib/active_support/core_ext/object/inclusion.rb +8 -7
- data/lib/active_support/core_ext/object/instance_variables.rb +7 -12
- data/lib/active_support/core_ext/object/to_json.rb +8 -0
- data/lib/active_support/core_ext/object/to_param.rb +5 -2
- data/lib/active_support/core_ext/object/try.rb +46 -25
- data/lib/active_support/core_ext/object/with_options.rb +7 -8
- data/lib/active_support/core_ext/object.rb +1 -0
- data/lib/active_support/core_ext/proc.rb +3 -0
- data/lib/active_support/core_ext/range/conversions.rb +0 -2
- data/lib/active_support/core_ext/range/include_range.rb +3 -1
- data/lib/active_support/core_ext/range/overlaps.rb +1 -1
- data/lib/active_support/core_ext/range.rb +0 -2
- data/lib/active_support/core_ext/string/access.rb +95 -90
- data/lib/active_support/core_ext/string/conversions.rb +27 -38
- data/lib/active_support/core_ext/string/encoding.rb +6 -9
- data/lib/active_support/core_ext/string/filters.rb +24 -18
- data/lib/active_support/core_ext/string/indent.rb +43 -0
- data/lib/active_support/core_ext/string/inflections.rb +70 -60
- data/lib/active_support/core_ext/string/inquiry.rb +2 -2
- data/lib/active_support/core_ext/string/multibyte.rb +41 -64
- data/lib/active_support/core_ext/string/output_safety.rb +59 -51
- data/lib/active_support/core_ext/string/zones.rb +13 -0
- data/lib/active_support/core_ext/string.rb +2 -3
- data/lib/active_support/core_ext/struct.rb +6 -0
- data/lib/active_support/core_ext/thread.rb +74 -0
- data/lib/active_support/core_ext/time/calculations.rb +108 -184
- data/lib/active_support/core_ext/time/conversions.rb +27 -51
- data/lib/active_support/core_ext/time/marshal.rb +0 -27
- data/lib/active_support/core_ext/time/zones.rb +27 -17
- data/lib/active_support/core_ext/time.rb +5 -0
- data/lib/active_support/core_ext/uri.rb +13 -17
- data/lib/active_support/core_ext.rb +3 -2
- data/lib/active_support/dependencies/autoload.rb +47 -20
- data/lib/active_support/dependencies.rb +160 -141
- data/lib/active_support/deprecation/behaviors.rb +44 -30
- data/lib/active_support/deprecation/instance_delegator.rb +24 -0
- data/lib/active_support/deprecation/method_wrappers.rb +33 -18
- data/lib/active_support/deprecation/proxy_wrappers.rb +58 -13
- data/lib/active_support/deprecation/reporting.rb +40 -11
- data/lib/active_support/deprecation.rb +39 -14
- data/lib/active_support/descendants_tracker.rb +34 -19
- data/lib/active_support/duration.rb +6 -8
- data/lib/active_support/file_update_checker.rb +63 -47
- data/lib/active_support/gzip.rb +11 -5
- data/lib/active_support/hash_with_indifferent_access.rb +127 -42
- data/lib/active_support/i18n.rb +4 -0
- data/lib/active_support/i18n_railtie.rb +5 -22
- data/lib/active_support/inflections.rb +14 -12
- data/lib/active_support/inflector/inflections.rb +108 -71
- data/lib/active_support/inflector/methods.rb +181 -160
- data/lib/active_support/inflector/transliterate.rb +16 -17
- data/lib/active_support/json/decoding.rb +18 -17
- data/lib/active_support/json/encoding.rb +93 -39
- data/lib/active_support/json/variable.rb +10 -1
- data/lib/active_support/key_generator.rb +75 -0
- data/lib/active_support/lazy_load_hooks.rb +21 -19
- data/lib/active_support/locale/en.yml +100 -3
- data/lib/active_support/log_subscriber/test_helper.rb +18 -15
- data/lib/active_support/log_subscriber.rb +35 -52
- data/lib/active_support/logger.rb +57 -0
- data/lib/active_support/logger_silence.rb +24 -0
- data/lib/active_support/message_encryptor.rb +38 -35
- data/lib/active_support/message_verifier.rb +9 -15
- data/lib/active_support/multibyte/chars.rb +80 -333
- data/lib/active_support/multibyte/unicode.rb +74 -64
- data/lib/active_support/multibyte.rb +5 -28
- data/lib/active_support/notifications/fanout.rb +112 -18
- data/lib/active_support/notifications/instrumenter.rb +33 -14
- data/lib/active_support/notifications.rb +79 -26
- data/lib/active_support/number_helper.rb +637 -0
- data/lib/active_support/ordered_hash.rb +8 -190
- data/lib/active_support/ordered_options.rb +21 -23
- data/lib/active_support/per_thread_registry.rb +52 -0
- data/lib/active_support/proxy_object.rb +13 -0
- data/lib/active_support/rails.rb +27 -0
- data/lib/active_support/railtie.rb +12 -32
- data/lib/active_support/rescuable.rb +9 -4
- data/lib/active_support/string_inquirer.rb +13 -8
- data/lib/active_support/subscriber.rb +93 -0
- data/lib/active_support/tagged_logging.rb +51 -73
- data/lib/active_support/test_case.rb +46 -17
- data/lib/active_support/testing/assertions.rb +56 -26
- data/lib/active_support/testing/autorun.rb +5 -0
- data/lib/active_support/testing/constant_lookup.rb +54 -0
- data/lib/active_support/testing/declarative.rb +1 -1
- data/lib/active_support/testing/deprecation.rb +0 -19
- data/lib/active_support/testing/isolation.rb +29 -58
- data/lib/active_support/testing/pending.rb +5 -43
- data/lib/active_support/testing/setup_and_teardown.rb +6 -92
- data/lib/active_support/testing/tagged_logging.rb +25 -0
- data/lib/active_support/time.rb +6 -21
- data/lib/active_support/time_with_zone.rb +80 -43
- data/lib/active_support/values/time_zone.rb +81 -60
- data/lib/active_support/values/unicode_tables.dat +0 -0
- data/lib/active_support/version.rb +7 -6
- data/lib/active_support/xml_mini/jdom.rb +9 -11
- data/lib/active_support/xml_mini/libxml.rb +1 -2
- data/lib/active_support/xml_mini/libxmlsax.rb +2 -3
- data/lib/active_support/xml_mini/nokogiri.rb +1 -2
- data/lib/active_support/xml_mini/nokogirisax.rb +2 -3
- data/lib/active_support/xml_mini/rexml.rb +6 -8
- data/lib/active_support/xml_mini.rb +35 -17
- data/lib/active_support.rb +8 -21
- metadata +104 -72
- data/lib/active_support/base64.rb +0 -54
- data/lib/active_support/core_ext/array/random_access.rb +0 -30
- data/lib/active_support/core_ext/date/freeze.rb +0 -33
- data/lib/active_support/core_ext/exception.rb +0 -3
- data/lib/active_support/core_ext/file/path.rb +0 -5
- data/lib/active_support/core_ext/float/rounding.rb +0 -19
- data/lib/active_support/core_ext/float.rb +0 -1
- data/lib/active_support/core_ext/hash/deep_dup.rb +0 -18
- data/lib/active_support/core_ext/io.rb +0 -15
- data/lib/active_support/core_ext/module/method_names.rb +0 -14
- data/lib/active_support/core_ext/module/synchronization.rb +0 -45
- data/lib/active_support/core_ext/process/daemon.rb +0 -23
- data/lib/active_support/core_ext/process.rb +0 -1
- data/lib/active_support/core_ext/range/blockless_step.rb +0 -29
- data/lib/active_support/core_ext/range/cover.rb +0 -3
- data/lib/active_support/core_ext/rexml.rb +0 -46
- data/lib/active_support/core_ext/string/interpolation.rb +0 -2
- data/lib/active_support/core_ext/string/xchar.rb +0 -18
- data/lib/active_support/core_ext/time/publicize_conversion_methods.rb +0 -10
- data/lib/active_support/memoizable.rb +0 -116
- data/lib/active_support/multibyte/exceptions.rb +0 -8
- data/lib/active_support/multibyte/utils.rb +0 -60
- data/lib/active_support/ruby/shim.rb +0 -22
- data/lib/active_support/security_utils.rb +0 -27
- data/lib/active_support/testing/mochaing.rb +0 -7
- data/lib/active_support/testing/performance/jruby.rb +0 -115
- data/lib/active_support/testing/performance/rubinius.rb +0 -113
- data/lib/active_support/testing/performance/ruby/mri.rb +0 -57
- data/lib/active_support/testing/performance/ruby/yarv.rb +0 -57
- data/lib/active_support/testing/performance/ruby.rb +0 -152
- data/lib/active_support/testing/performance.rb +0 -317
- data/lib/active_support/time/autoload.rb +0 -5
- data/lib/active_support/whiny_nil.rb +0 -24
|
@@ -8,6 +8,23 @@ module ActiveSupport
|
|
|
8
8
|
# duration of a block. Repeated calls to the cache for the same key will hit the
|
|
9
9
|
# in-memory cache for faster access.
|
|
10
10
|
module LocalCache
|
|
11
|
+
# Class for storing and registering the local caches.
|
|
12
|
+
class LocalCacheRegistry # :nodoc:
|
|
13
|
+
extend ActiveSupport::PerThreadRegistry
|
|
14
|
+
|
|
15
|
+
def initialize
|
|
16
|
+
@registry = {}
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def cache_for(local_cache_key)
|
|
20
|
+
@registry[local_cache_key]
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def set_cache_for(local_cache_key, value)
|
|
24
|
+
@registry[local_cache_key] = value
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
11
28
|
# Simple memory backed cache. This cache is not thread safe and is intended only
|
|
12
29
|
# for serving as a temporary memory cache for a single thread.
|
|
13
30
|
class LocalStore < Store
|
|
@@ -41,24 +58,18 @@ module ActiveSupport
|
|
|
41
58
|
|
|
42
59
|
# Use a local cache for the duration of block.
|
|
43
60
|
def with_local_cache
|
|
44
|
-
|
|
45
|
-
begin
|
|
46
|
-
Thread.current[thread_local_key] = LocalStore.new
|
|
47
|
-
yield
|
|
48
|
-
ensure
|
|
49
|
-
Thread.current[thread_local_key] = save_val
|
|
50
|
-
end
|
|
61
|
+
use_temporary_local_cache(LocalStore.new) { yield }
|
|
51
62
|
end
|
|
52
63
|
|
|
53
64
|
#--
|
|
54
65
|
# This class wraps up local storage for middlewares. Only the middleware method should
|
|
55
66
|
# construct them.
|
|
56
67
|
class Middleware # :nodoc:
|
|
57
|
-
attr_reader :name, :
|
|
68
|
+
attr_reader :name, :local_cache_key
|
|
58
69
|
|
|
59
|
-
def initialize(name,
|
|
70
|
+
def initialize(name, local_cache_key)
|
|
60
71
|
@name = name
|
|
61
|
-
@
|
|
72
|
+
@local_cache_key = local_cache_key
|
|
62
73
|
@app = nil
|
|
63
74
|
end
|
|
64
75
|
|
|
@@ -68,10 +79,10 @@ module ActiveSupport
|
|
|
68
79
|
end
|
|
69
80
|
|
|
70
81
|
def call(env)
|
|
71
|
-
|
|
82
|
+
LocalCacheRegistry.set_cache_for(local_cache_key, LocalStore.new)
|
|
72
83
|
@app.call(env)
|
|
73
84
|
ensure
|
|
74
|
-
|
|
85
|
+
LocalCacheRegistry.set_cache_for(local_cache_key, nil)
|
|
75
86
|
end
|
|
76
87
|
end
|
|
77
88
|
|
|
@@ -80,7 +91,7 @@ module ActiveSupport
|
|
|
80
91
|
def middleware
|
|
81
92
|
@middleware ||= Middleware.new(
|
|
82
93
|
"ActiveSupport::Cache::Strategy::LocalCache",
|
|
83
|
-
|
|
94
|
+
local_cache_key)
|
|
84
95
|
end
|
|
85
96
|
|
|
86
97
|
def clear(options = nil) # :nodoc:
|
|
@@ -95,29 +106,13 @@ module ActiveSupport
|
|
|
95
106
|
|
|
96
107
|
def increment(name, amount = 1, options = nil) # :nodoc:
|
|
97
108
|
value = bypass_local_cache{super}
|
|
98
|
-
|
|
99
|
-
local_cache.mute do
|
|
100
|
-
if value
|
|
101
|
-
local_cache.write(name, value, options)
|
|
102
|
-
else
|
|
103
|
-
local_cache.delete(name, options)
|
|
104
|
-
end
|
|
105
|
-
end
|
|
106
|
-
end
|
|
109
|
+
increment_or_decrement(value, name, amount, options)
|
|
107
110
|
value
|
|
108
111
|
end
|
|
109
112
|
|
|
110
113
|
def decrement(name, amount = 1, options = nil) # :nodoc:
|
|
111
114
|
value = bypass_local_cache{super}
|
|
112
|
-
|
|
113
|
-
local_cache.mute do
|
|
114
|
-
if value
|
|
115
|
-
local_cache.write(name, value, options)
|
|
116
|
-
else
|
|
117
|
-
local_cache.delete(name, options)
|
|
118
|
-
end
|
|
119
|
-
end
|
|
120
|
-
end
|
|
115
|
+
increment_or_decrement(value, name, amount, options)
|
|
121
116
|
value
|
|
122
117
|
end
|
|
123
118
|
|
|
@@ -146,21 +141,37 @@ module ActiveSupport
|
|
|
146
141
|
end
|
|
147
142
|
|
|
148
143
|
private
|
|
149
|
-
def
|
|
150
|
-
|
|
144
|
+
def increment_or_decrement(value, name, amount, options)
|
|
145
|
+
if local_cache
|
|
146
|
+
local_cache.mute do
|
|
147
|
+
if value
|
|
148
|
+
local_cache.write(name, value, options)
|
|
149
|
+
else
|
|
150
|
+
local_cache.delete(name, options)
|
|
151
|
+
end
|
|
152
|
+
end
|
|
153
|
+
end
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
def local_cache_key
|
|
157
|
+
@local_cache_key ||= "#{self.class.name.underscore}_local_cache_#{object_id}".gsub(/[\/-]/, '_').to_sym
|
|
151
158
|
end
|
|
152
159
|
|
|
153
160
|
def local_cache
|
|
154
|
-
|
|
161
|
+
LocalCacheRegistry.cache_for(local_cache_key)
|
|
155
162
|
end
|
|
156
163
|
|
|
157
164
|
def bypass_local_cache
|
|
158
|
-
|
|
165
|
+
use_temporary_local_cache(nil) { yield }
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
def use_temporary_local_cache(temporary_cache)
|
|
169
|
+
save_cache = LocalCacheRegistry.cache_for(local_cache_key)
|
|
159
170
|
begin
|
|
160
|
-
|
|
171
|
+
LocalCacheRegistry.set_cache_for(local_cache_key, temporary_cache)
|
|
161
172
|
yield
|
|
162
173
|
ensure
|
|
163
|
-
|
|
174
|
+
LocalCacheRegistry.set_cache_for(local_cache_key, save_cache)
|
|
164
175
|
end
|
|
165
176
|
end
|
|
166
177
|
end
|