blob: d3193af555cbc8505af8e65c6533d34bf3f31f88 (
plain) (
blame)
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
|
module ActiveSupport
module JSON #:nodoc:
module Encoders
define_encoder Object do |object|
object.instance_values.to_json
end
define_encoder TrueClass do
'true'
end
define_encoder FalseClass do
'false'
end
define_encoder NilClass do
'null'
end
define_encoder String do |string|
returning value = '"' do
string.each_char do |char|
value << case
when char == "\010": '\b'
when char == "\f": '\f'
when char == "\n": '\n'
when char == "\r": '\r'
when char == "\t": '\t'
when char == '"': '\"'
when char == '\\': '\\\\'
when char.length > 1: "\\u#{'%04x' % char.unpack('U').first}"
else; char
end
end
value << '"'
end
end
define_encoder Numeric do |numeric|
numeric.to_s
end
define_encoder Symbol do |symbol|
symbol.to_s.to_json
end
define_encoder Enumerable do |enumerable|
"[#{enumerable.map { |value| value.to_json } * ', '}]"
end
define_encoder Hash do |hash|
returning result = '{' do
result << hash.map do |pair|
pair.map { |value| value.to_json } * ': '
end * ', '
result << '}'
end
end
define_encoder Regexp do |regexp|
regexp.inspect
end
end
end
end
|