Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
张重言
rails
提交
6a6fc4e1
R
rails
项目概览
张重言
/
rails
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
rails
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
6a6fc4e1
编写于
12月 20, 2011
作者:
J
José Valim
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Remove deprecations from Active Support.
上级
6c57177f
变更
9
隐藏空白更改
内联
并排
Showing
9 changed file
with
0 addition
and
491 deletion
+0
-491
activesupport/lib/active_support.rb
activesupport/lib/active_support.rb
+0
-1
activesupport/lib/active_support/concern.rb
activesupport/lib/active_support/concern.rb
+0
-5
activesupport/lib/active_support/memoizable.rb
activesupport/lib/active_support/memoizable.rb
+0
-116
activesupport/lib/active_support/message_encryptor.rb
activesupport/lib/active_support/message_encryptor.rb
+0
-17
activesupport/lib/active_support/message_verifier.rb
activesupport/lib/active_support/message_verifier.rb
+0
-5
activesupport/test/flush_cache_on_private_memoization_test.rb
...vesupport/test/flush_cache_on_private_memoization_test.rb
+0
-45
activesupport/test/memoizable_test.rb
activesupport/test/memoizable_test.rb
+0
-290
activesupport/test/message_encryptor_test.rb
activesupport/test/message_encryptor_test.rb
+0
-6
activesupport/test/message_verifier_test.rb
activesupport/test/message_verifier_test.rb
+0
-6
未找到文件。
activesupport/lib/active_support.rb
浏览文件 @
6a6fc4e1
...
...
@@ -62,7 +62,6 @@ module ActiveSupport
autoload
:Gzip
autoload
:Inflector
autoload
:JSON
autoload
:Memoizable
autoload
:MessageEncryptor
autoload
:MessageVerifier
autoload
:Multibyte
...
...
activesupport/lib/active_support/concern.rb
浏览文件 @
6a6fc4e1
...
...
@@ -109,11 +109,6 @@ def append_features(base)
@_dependencies
.
each
{
|
dep
|
base
.
send
(
:include
,
dep
)
}
super
base
.
extend
const_get
(
"ClassMethods"
)
if
const_defined?
(
"ClassMethods"
)
if
const_defined?
(
"InstanceMethods"
)
base
.
send
:include
,
const_get
(
"InstanceMethods"
)
ActiveSupport
::
Deprecation
.
warn
"The InstanceMethods module inside ActiveSupport::Concern will be "
\
"no longer included automatically. Please define instance methods directly in
#{
base
}
instead."
,
caller
end
base
.
class_eval
(
&
@_included_block
)
if
instance_variable_defined?
(
"@_included_block"
)
end
end
...
...
activesupport/lib/active_support/memoizable.rb
已删除
100644 → 0
浏览文件 @
6c57177f
require
'active_support/core_ext/kernel/singleton_class'
require
'active_support/core_ext/module/aliasing'
require
'active_support/deprecation'
module
ActiveSupport
module
Memoizable
def
self
.
extended
(
base
)
ActiveSupport
::
Deprecation
.
warn
"ActiveSupport::Memoizable is deprecated and will be removed in future releases,"
\
"simply use Ruby memoization pattern instead."
,
caller
super
end
def
self
.
memoized_ivar_for
(
symbol
)
"@_memoized_
#{
symbol
.
to_s
.
sub
(
/\?\Z/
,
'_query'
).
sub
(
/!\Z/
,
'_bang'
)
}
"
.
to_sym
end
module
InstanceMethods
def
self
.
included
(
base
)
base
.
class_eval
do
unless
base
.
method_defined?
(
:freeze_without_memoizable
)
alias_method_chain
:freeze
,
:memoizable
end
end
end
def
freeze_with_memoizable
memoize_all
unless
frozen?
freeze_without_memoizable
end
def
memoize_all
prime_cache
".*"
end
def
unmemoize_all
flush_cache
".*"
end
def
prime_cache
(
*
syms
)
syms
.
each
do
|
sym
|
methods
.
each
do
|
m
|
if
m
.
to_s
=~
/^_unmemoized_(
#{
sym
}
)/
if
method
(
m
).
arity
==
0
__send__
(
$1
)
else
ivar
=
ActiveSupport
::
Memoizable
.
memoized_ivar_for
(
$1
)
instance_variable_set
(
ivar
,
{})
end
end
end
end
end
def
flush_cache
(
*
syms
)
syms
.
each
do
|
sym
|
(
methods
+
private_methods
+
protected_methods
).
each
do
|
m
|
if
m
.
to_s
=~
/^_unmemoized_(
#{
sym
.
to_s
.
gsub
(
/\?\Z/
,
'\?'
)
}
)/
ivar
=
ActiveSupport
::
Memoizable
.
memoized_ivar_for
(
$1
)
instance_variable_get
(
ivar
).
clear
if
instance_variable_defined?
(
ivar
)
end
end
end
end
end
def
memoize
(
*
symbols
)
symbols
.
each
do
|
symbol
|
original_method
=
:"_unmemoized_
#{
symbol
}
"
memoized_ivar
=
ActiveSupport
::
Memoizable
.
memoized_ivar_for
(
symbol
)
class_eval
<<-
EOS
,
__FILE__
,
__LINE__
+
1
include InstanceMethods # include InstanceMethods
#
if method_defined?(:
#{
original_method
}
) # if method_defined?(:_unmemoized_mime_type)
raise "Already memoized
#{
symbol
}
" # raise "Already memoized mime_type"
end # end
alias
#{
original_method
}
#{
symbol
}
# alias _unmemoized_mime_type mime_type
#
if instance_method(:
#{
symbol
}
).arity == 0 # if instance_method(:mime_type).arity == 0
def
#{
symbol
}
(reload = false) # def mime_type(reload = false)
if reload || !defined?(
#{
memoized_ivar
}
) ||
#{
memoized_ivar
}
.empty? # if reload || !defined?(@_memoized_mime_type) || @_memoized_mime_type.empty?
#{
memoized_ivar
}
= [
#{
original_method
}
] # @_memoized_mime_type = [_unmemoized_mime_type]
end # end
#{
memoized_ivar
}
[0] # @_memoized_mime_type[0]
end # end
else # else
def
#{
symbol
}
(*args) # def mime_type(*args)
#{
memoized_ivar
}
||= {} unless frozen? # @_memoized_mime_type ||= {} unless frozen?
args_length = method(:
#{
original_method
}
).arity # args_length = method(:_unmemoized_mime_type).arity
if args.length == args_length + 1 && # if args.length == args_length + 1 &&
(args.last == true || args.last == :reload) # (args.last == true || args.last == :reload)
reload = args.pop # reload = args.pop
end # end
#
if defined?(
#{
memoized_ivar
}
) &&
#{
memoized_ivar
}
# if defined?(@_memoized_mime_type) && @_memoized_mime_type
if !reload &&
#{
memoized_ivar
}
.has_key?(args) # if !reload && @_memoized_mime_type.has_key?(args)
#{
memoized_ivar
}
[args] # @_memoized_mime_type[args]
elsif
#{
memoized_ivar
}
# elsif @_memoized_mime_type
#{
memoized_ivar
}
[args] =
#{
original_method
}
(*args) # @_memoized_mime_type[args] = _unmemoized_mime_type(*args)
end # end
else # else
#{
original_method
}
(*args) # _unmemoized_mime_type(*args)
end # end
end # end
end # end
#
if private_method_defined?(
#{
original_method
.
inspect
}
) # if private_method_defined?(:_unmemoized_mime_type)
private
#{
symbol
.
inspect
}
# private :mime_type
elsif protected_method_defined?(
#{
original_method
.
inspect
}
) # elsif protected_method_defined?(:_unmemoized_mime_type)
protected
#{
symbol
.
inspect
}
# protected :mime_type
end # end
EOS
end
end
end
end
activesupport/lib/active_support/message_encryptor.rb
浏览文件 @
6a6fc4e1
...
...
@@ -24,29 +24,12 @@ class InvalidMessage < StandardError; end
OpenSSLCipherError
=
OpenSSL
::
Cipher
.
const_defined?
(
:CipherError
)
?
OpenSSL
::
Cipher
::
CipherError
:
OpenSSL
::
CipherError
def
initialize
(
secret
,
options
=
{})
unless
options
.
is_a?
(
Hash
)
ActiveSupport
::
Deprecation
.
warn
"The second parameter should be an options hash. Use :cipher => 'algorithm' to specify the cipher algorithm."
options
=
{
:cipher
=>
options
}
end
@secret
=
secret
@cipher
=
options
[
:cipher
]
||
'aes-256-cbc'
@verifier
=
MessageVerifier
.
new
(
@secret
,
:serializer
=>
NullSerializer
)
@serializer
=
options
[
:serializer
]
||
Marshal
end
def
encrypt
(
value
)
ActiveSupport
::
Deprecation
.
warn
"MessageEncryptor#encrypt is deprecated as it is not safe without a signature. "
\
"Please use MessageEncryptor#encrypt_and_sign instead."
_encrypt
(
value
)
end
def
decrypt
(
value
)
ActiveSupport
::
Deprecation
.
warn
"MessageEncryptor#decrypt is deprecated as it is not safe without a signature. "
\
"Please use MessageEncryptor#decrypt_and_verify instead."
_decrypt
(
value
)
end
# Encrypt and sign a message. We need to sign the message in order to avoid padding attacks.
# Reference: http://www.limited-entropy.com/padding-oracle-attacks
def
encrypt_and_sign
(
value
)
...
...
activesupport/lib/active_support/message_verifier.rb
浏览文件 @
6a6fc4e1
...
...
@@ -27,11 +27,6 @@ class MessageVerifier
class
InvalidSignature
<
StandardError
;
end
def
initialize
(
secret
,
options
=
{})
unless
options
.
is_a?
(
Hash
)
ActiveSupport
::
Deprecation
.
warn
"The second parameter should be an options hash. Use :digest => 'algorithm' to specify the digest algorithm."
options
=
{
:digest
=>
options
}
end
@secret
=
secret
@digest
=
options
[
:digest
]
||
'SHA1'
@serializer
=
options
[
:serializer
]
||
Marshal
...
...
activesupport/test/flush_cache_on_private_memoization_test.rb
已删除
100644 → 0
浏览文件 @
6c57177f
require
'abstract_unit'
require
'test/unit'
class
FlushCacheOnPrivateMemoizationTest
<
Test
::
Unit
::
TestCase
ActiveSupport
::
Deprecation
.
silence
do
extend
ActiveSupport
::
Memoizable
end
def
test_public
assert_method_unmemoizable
:pub
end
def
test_protected
assert_method_unmemoizable
:prot
end
def
test_private
assert_method_unmemoizable
:priv
end
def
pub
;
rand
end
memoize
:pub
protected
def
prot
;
rand
end
memoize
:prot
private
def
priv
;
rand
end
memoize
:priv
def
assert_method_unmemoizable
(
meth
,
message
=
nil
)
full_message
=
build_message
(
message
,
"<?> not unmemoizable.
\n
"
,
meth
)
assert_block
(
full_message
)
do
a
=
send
meth
b
=
send
meth
unmemoize_all
c
=
send
meth
a
==
b
&&
a
!=
c
end
end
end
activesupport/test/memoizable_test.rb
已删除
100644 → 0
浏览文件 @
6c57177f
require
'abstract_unit'
class
MemoizableTest
<
ActiveSupport
::
TestCase
class
Person
ActiveSupport
::
Deprecation
.
silence
do
extend
ActiveSupport
::
Memoizable
end
attr_reader
:name_calls
,
:age_calls
,
:is_developer_calls
,
:name_query_calls
def
initialize
@name_calls
=
0
@age_calls
=
0
@is_developer_calls
=
0
@name_query_calls
=
0
end
def
name
@name_calls
+=
1
"Josh"
end
def
name?
@name_query_calls
+=
1
true
end
memoize
:name?
def
update
(
name
)
"Joshua"
end
memoize
:update
def
age
@age_calls
+=
1
nil
end
memoize
:name
,
:age
protected
def
memoize_protected_test
'protected'
end
memoize
:memoize_protected_test
private
def
is_developer?
@is_developer_calls
+=
1
"Yes"
end
memoize
:is_developer?
end
class
Company
attr_reader
:name_calls
def
initialize
@name_calls
=
0
end
def
name
@name_calls
+=
1
"37signals"
end
end
module
Rates
ActiveSupport
::
Deprecation
.
silence
do
extend
ActiveSupport
::
Memoizable
end
attr_reader
:sales_tax_calls
def
sales_tax
(
price
)
@sales_tax_calls
||=
0
@sales_tax_calls
+=
1
price
*
0.1025
end
memoize
:sales_tax
end
class
Calculator
ActiveSupport
::
Deprecation
.
silence
do
extend
ActiveSupport
::
Memoizable
end
include
Rates
attr_reader
:fib_calls
def
initialize
@fib_calls
=
0
end
def
fib
(
n
)
@fib_calls
+=
1
if
n
==
0
||
n
==
1
n
else
fib
(
n
-
1
)
+
fib
(
n
-
2
)
end
end
memoize
:fib
def
add_or_subtract
(
i
,
j
,
add
)
if
add
i
+
j
else
i
-
j
end
end
memoize
:add_or_subtract
def
counter
@count
||=
0
@count
+=
1
end
memoize
:counter
end
def
setup
@person
=
Person
.
new
@calculator
=
Calculator
.
new
end
def
test_memoization
assert_equal
"Josh"
,
@person
.
name
assert_equal
1
,
@person
.
name_calls
3
.
times
{
assert_equal
"Josh"
,
@person
.
name
}
assert_equal
1
,
@person
.
name_calls
end
def
test_memoization_with_punctuation
assert_equal
true
,
@person
.
name?
assert_nothing_raised
(
NameError
)
do
@person
.
memoize_all
@person
.
unmemoize_all
end
end
def
test_memoization_flush_with_punctuation
assert_equal
true
,
@person
.
name?
@person
.
flush_cache
(
:name?
)
3
.
times
{
assert_equal
true
,
@person
.
name?
}
assert_equal
2
,
@person
.
name_query_calls
end
def
test_memoization_with_nil_value
assert_equal
nil
,
@person
.
age
assert_equal
1
,
@person
.
age_calls
3
.
times
{
assert_equal
nil
,
@person
.
age
}
assert_equal
1
,
@person
.
age_calls
end
def
test_reloadable
assert_equal
1
,
@calculator
.
counter
assert_equal
2
,
@calculator
.
counter
(
:reload
)
assert_equal
2
,
@calculator
.
counter
assert_equal
3
,
@calculator
.
counter
(
true
)
assert_equal
3
,
@calculator
.
counter
end
def
test_flush_cache
assert_equal
1
,
@calculator
.
counter
assert
@calculator
.
instance_variable_get
(
:@_memoized_counter
).
any?
@calculator
.
flush_cache
(
:counter
)
assert
@calculator
.
instance_variable_get
(
:@_memoized_counter
).
empty?
assert_equal
2
,
@calculator
.
counter
end
def
test_unmemoize_all
assert_equal
1
,
@calculator
.
counter
assert
@calculator
.
instance_variable_get
(
:@_memoized_counter
).
any?
@calculator
.
unmemoize_all
assert
@calculator
.
instance_variable_get
(
:@_memoized_counter
).
empty?
assert_equal
2
,
@calculator
.
counter
end
def
test_memoize_all
@calculator
.
memoize_all
assert
@calculator
.
instance_variable_defined?
(
:@_memoized_counter
)
end
def
test_memoization_cache_is_different_for_each_instance
assert_equal
1
,
@calculator
.
counter
assert_equal
2
,
@calculator
.
counter
(
:reload
)
assert_equal
1
,
Calculator
.
new
.
counter
end
def
test_memoized_is_not_affected_by_freeze
@person
.
freeze
assert_equal
"Josh"
,
@person
.
name
assert_equal
"Joshua"
,
@person
.
update
(
"Joshua"
)
end
def
test_memoization_with_args
assert_equal
55
,
@calculator
.
fib
(
10
)
assert_equal
11
,
@calculator
.
fib_calls
end
def
test_reloadable_with_args
assert_equal
55
,
@calculator
.
fib
(
10
)
assert_equal
11
,
@calculator
.
fib_calls
assert_equal
55
,
@calculator
.
fib
(
10
,
:reload
)
assert_equal
12
,
@calculator
.
fib_calls
assert_equal
55
,
@calculator
.
fib
(
10
,
true
)
assert_equal
13
,
@calculator
.
fib_calls
end
def
test_memoization_with_boolean_arg
assert_equal
4
,
@calculator
.
add_or_subtract
(
2
,
2
,
true
)
assert_equal
2
,
@calculator
.
add_or_subtract
(
4
,
2
,
false
)
end
def
test_object_memoization
[
Company
.
new
,
Company
.
new
,
Company
.
new
].
each
do
|
company
|
ActiveSupport
::
Deprecation
.
silence
do
company
.
extend
ActiveSupport
::
Memoizable
end
company
.
memoize
:name
assert_equal
"37signals"
,
company
.
name
assert_equal
1
,
company
.
name_calls
assert_equal
"37signals"
,
company
.
name
assert_equal
1
,
company
.
name_calls
end
end
def
test_memoized_module_methods
assert_equal
1.025
,
@calculator
.
sales_tax
(
10
)
assert_equal
1
,
@calculator
.
sales_tax_calls
assert_equal
1.025
,
@calculator
.
sales_tax
(
10
)
assert_equal
1
,
@calculator
.
sales_tax_calls
assert_equal
2.5625
,
@calculator
.
sales_tax
(
25
)
assert_equal
2
,
@calculator
.
sales_tax_calls
end
def
test_object_memoized_module_methods
company
=
Company
.
new
company
.
extend
(
Rates
)
assert_equal
1.025
,
company
.
sales_tax
(
10
)
assert_equal
1
,
company
.
sales_tax_calls
assert_equal
1.025
,
company
.
sales_tax
(
10
)
assert_equal
1
,
company
.
sales_tax_calls
assert_equal
2.5625
,
company
.
sales_tax
(
25
)
assert_equal
2
,
company
.
sales_tax_calls
end
def
test_double_memoization
assert_raise
(
RuntimeError
)
{
Person
.
memoize
:name
}
person
=
Person
.
new
ActiveSupport
::
Deprecation
.
silence
do
person
.
extend
ActiveSupport
::
Memoizable
end
assert_raise
(
RuntimeError
)
{
person
.
memoize
:name
}
company
=
Company
.
new
ActiveSupport
::
Deprecation
.
silence
do
company
.
extend
ActiveSupport
::
Memoizable
end
company
.
memoize
:name
assert_raise
(
RuntimeError
)
{
company
.
memoize
:name
}
end
def
test_protected_method_memoization
person
=
Person
.
new
assert_raise
(
NoMethodError
)
{
person
.
memoize_protected_test
}
assert_equal
"protected"
,
person
.
send
(
:memoize_protected_test
)
end
def
test_private_method_memoization
person
=
Person
.
new
assert_raise
(
NoMethodError
)
{
person
.
is_developer?
}
assert_equal
"Yes"
,
person
.
send
(
:is_developer?
)
assert_equal
1
,
person
.
is_developer_calls
assert_equal
"Yes"
,
person
.
send
(
:is_developer?
)
assert_equal
1
,
person
.
is_developer_calls
end
end
activesupport/test/message_encryptor_test.rb
浏览文件 @
6a6fc4e1
...
...
@@ -61,12 +61,6 @@ def test_alternative_serialization_method
assert_equal
encryptor
.
decrypt_and_verify
(
message
),
{
"foo"
=>
123
,
"bar"
=>
"2010-01-01T00:00:00Z"
}
end
def
test_digest_algorithm_as_second_parameter_deprecation
assert_deprecated
(
/options hash/
)
do
ActiveSupport
::
MessageEncryptor
.
new
(
SecureRandom
.
hex
(
64
),
'aes-256-cbc'
)
end
end
private
def
assert_not_decrypted
(
value
)
...
...
activesupport/test/message_verifier_test.rb
浏览文件 @
6a6fc4e1
...
...
@@ -50,12 +50,6 @@ def test_alternative_serialization_method
assert_equal
verifier
.
verify
(
message
),
{
"foo"
=>
123
,
"bar"
=>
"2010-01-01T00:00:00Z"
}
end
def
test_digest_algorithm_as_second_parameter_deprecation
assert_deprecated
(
/options hash/
)
do
ActiveSupport
::
MessageVerifier
.
new
(
"secret"
,
"SHA1"
)
end
end
def
assert_not_verified
(
message
)
assert_raise
(
ActiveSupport
::
MessageVerifier
::
InvalidSignature
)
do
@verifier
.
verify
(
message
)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录