Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
张重言
rails
提交
aadb8c96
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,发现更多精彩内容 >>
提交
aadb8c96
编写于
11月 05, 2013
作者:
J
Jeremy Kemper
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #12782 from chancancode/fix_object_and_struct_as_json
Fixed Object#as_json and Struct#as_json with options
上级
44406d1e
134c1156
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
40 addition
and
5 deletion
+40
-5
activesupport/CHANGELOG.md
activesupport/CHANGELOG.md
+10
-0
activesupport/lib/active_support/core_ext/object/json.rb
activesupport/lib/active_support/core_ext/object/json.rb
+3
-3
activesupport/test/json/encoding_test.rb
activesupport/test/json/encoding_test.rb
+27
-2
未找到文件。
activesupport/CHANGELOG.md
浏览文件 @
aadb8c96
*
Fixed Object#as_json and Struct#as_json not working properly with options. They now take
the same options as Hash#as_json:
struct = Struct.new(:foo, :bar).new
struct.foo = "hello"
struct.bar = "world"
json = struct.as_json(only: [:foo]) # => {foo: "hello"}
*Sergio Campamá*, *Godfrey Chan*
*
Added Numeric#in_milliseconds, like 1.hour.in_milliseconds, so we can feed them to JavaScript functions like getTime().
*DHH*
...
...
activesupport/lib/active_support/core_ext/object/json.rb
浏览文件 @
aadb8c96
...
...
@@ -20,16 +20,16 @@ def to_json(options = nil)
class
Object
def
as_json
(
options
=
nil
)
#:nodoc:
if
respond_to?
(
:to_hash
)
to_hash
to_hash
.
as_json
(
options
)
else
instance_values
instance_values
.
as_json
(
options
)
end
end
end
class
Struct
#:nodoc:
def
as_json
(
options
=
nil
)
Hash
[
members
.
zip
(
values
)]
Hash
[
members
.
zip
(
values
)]
.
as_json
(
options
)
end
end
...
...
activesupport/test/json/encoding_test.rb
浏览文件 @
aadb8c96
...
...
@@ -13,7 +13,7 @@ def initialize(a, b)
class
Hashlike
def
to_hash
{
:
a
=>
1
}
{
:
foo
=>
"hello"
,
:bar
=>
"world"
}
end
end
...
...
@@ -61,7 +61,7 @@ def as_json(options={})
[
:"a b"
,
%("a b")
]]
ObjectTests
=
[[
Foo
.
new
(
1
,
2
),
%({\"a\":1,\"b\":2})
]]
HashlikeTests
=
[[
Hashlike
.
new
,
%({\"
a\":1
})
]]
HashlikeTests
=
[[
Hashlike
.
new
,
%({\"
bar\":\"world\",\"foo\":\"hello\"
})
]]
CustomTests
=
[[
Custom
.
new
,
'"custom"'
]]
RegexpTests
=
[[
/^a/
,
'"(?-mix:^a)"'
],
[
/^\w{1,2}[a-z]+/ix
,
'"(?ix-m:^\\\\w{1,2}[a-z]+)"'
]]
...
...
@@ -204,6 +204,31 @@ def test_nested_hash_with_float
end
end
def
test_hash_like_with_options
h
=
Hashlike
.
new
json
=
h
.
to_json
:only
=>
[
:foo
]
assert_equal
({
"foo"
=>
"hello"
},
JSON
.
parse
(
json
))
end
def
test_object_to_json_with_options
obj
=
Object
.
new
obj
.
instance_variable_set
:@foo
,
"hello"
obj
.
instance_variable_set
:@bar
,
"world"
json
=
obj
.
to_json
:only
=>
[
"foo"
]
assert_equal
({
"foo"
=>
"hello"
},
JSON
.
parse
(
json
))
end
def
test_struct_to_json_with_options
struct
=
Struct
.
new
(
:foo
,
:bar
).
new
struct
.
foo
=
"hello"
struct
.
bar
=
"world"
json
=
struct
.
to_json
:only
=>
[
:foo
]
assert_equal
({
"foo"
=>
"hello"
},
JSON
.
parse
(
json
))
end
def
test_hash_should_pass_encoding_options_to_children_in_as_json
person
=
{
:name
=>
'John'
,
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录