mack-javascript 0.8.1 → 0.8.2
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.
- data/lib/gems/json_pure-1.1.3/VERSION +1 -0
- data/lib/gems/json_pure-1.1.3/bin/edit_json.rb +10 -0
- data/lib/gems/json_pure-1.1.3/bin/prettify_json.rb +76 -0
- data/lib/gems/json_pure-1.1.3/lib/json/Array.xpm +21 -0
- data/lib/gems/json_pure-1.1.3/lib/json/FalseClass.xpm +21 -0
- data/lib/gems/json_pure-1.1.3/lib/json/Hash.xpm +21 -0
- data/lib/gems/json_pure-1.1.3/lib/json/Key.xpm +73 -0
- data/lib/gems/json_pure-1.1.3/lib/json/NilClass.xpm +21 -0
- data/lib/gems/json_pure-1.1.3/lib/json/Numeric.xpm +28 -0
- data/lib/gems/json_pure-1.1.3/lib/json/String.xpm +96 -0
- data/lib/gems/json_pure-1.1.3/lib/json/TrueClass.xpm +21 -0
- data/lib/gems/json_pure-1.1.3/lib/json/add/core.rb +135 -0
- data/lib/gems/json_pure-1.1.3/lib/json/add/rails.rb +58 -0
- data/lib/gems/json_pure-1.1.3/lib/json/common.rb +354 -0
- data/lib/gems/json_pure-1.1.3/lib/json/editor.rb +1362 -0
- data/lib/gems/json_pure-1.1.3/lib/json/ext.rb +13 -0
- data/lib/gems/json_pure-1.1.3/lib/json/json.xpm +1499 -0
- data/lib/gems/json_pure-1.1.3/lib/json/pure/generator.rb +394 -0
- data/lib/gems/json_pure-1.1.3/lib/json/pure/parser.rb +259 -0
- data/lib/gems/json_pure-1.1.3/lib/json/pure.rb +75 -0
- data/lib/gems/json_pure-1.1.3/lib/json/version.rb +9 -0
- data/lib/gems/json_pure-1.1.3/lib/json.rb +235 -0
- data/lib/gems.rb +13 -0
- data/lib/mack-javascript/generators/templates/javascripts/prototype.js.template +1 -1
- data/lib/mack-javascript/rendering/engine/rjs.rb +3 -0
- data/lib/mack-javascript/rendering/type/js.rb +7 -3
- data/lib/mack-javascript/view_helpers/html_helpers.rb +11 -0
- data/lib/mack-javascript.rb +2 -0
- metadata +50 -16
@@ -0,0 +1 @@
|
|
1
|
+
1.1.3
|
@@ -0,0 +1,76 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
$KCODE = 'U'
|
4
|
+
require 'json'
|
5
|
+
require 'fileutils'
|
6
|
+
include FileUtils
|
7
|
+
|
8
|
+
# Parses the argument array _args_, according to the pattern _s_, to
|
9
|
+
# retrieve the single character command line options from it. If _s_ is
|
10
|
+
# 'xy:' an option '-x' without an option argument is searched, and an
|
11
|
+
# option '-y foo' with an option argument ('foo').
|
12
|
+
#
|
13
|
+
# An option hash is returned with all found options set to true or the
|
14
|
+
# found option argument.
|
15
|
+
def go(s, args = ARGV)
|
16
|
+
b, v = s.scan(/(.)(:?)/).inject([{},{}]) { |t,(o,a)|
|
17
|
+
t[a.empty? ? 0 : 1][o] = a.empty? ? false : nil
|
18
|
+
t
|
19
|
+
}
|
20
|
+
while a = args.shift
|
21
|
+
a !~ /\A-(.+)/ and args.unshift a and break
|
22
|
+
p = $1
|
23
|
+
until p == ''
|
24
|
+
o = p.slice!(0, 1)
|
25
|
+
if v.key?(o)
|
26
|
+
v[o] = if p == '' then args.shift or break 1 else p end
|
27
|
+
break
|
28
|
+
elsif b.key?(o)
|
29
|
+
b[o] = true
|
30
|
+
else
|
31
|
+
args.unshift a
|
32
|
+
break 1
|
33
|
+
end
|
34
|
+
end and break
|
35
|
+
end
|
36
|
+
b.merge(v)
|
37
|
+
end
|
38
|
+
|
39
|
+
opts = go 'slhi:', args = ARGV.dup
|
40
|
+
if opts['h'] || opts['l'] && opts['s']
|
41
|
+
puts <<EOT
|
42
|
+
Usage: #{File.basename($0)} [OPTION] [FILE]
|
43
|
+
|
44
|
+
If FILE is skipped, this scripts waits for input from STDIN. Otherwise
|
45
|
+
FILE is opened, read, and used as input for the prettifier.
|
46
|
+
|
47
|
+
OPTION can be
|
48
|
+
-s to output the shortest possible JSON (precludes -l)
|
49
|
+
-l to output a longer, better formatted JSON (precludes -s)
|
50
|
+
-i EXT prettifies FILE in place, saving a backup to FILE.EXT
|
51
|
+
-h this help
|
52
|
+
EOT
|
53
|
+
exit 0
|
54
|
+
end
|
55
|
+
|
56
|
+
filename = nil
|
57
|
+
json = JSON[
|
58
|
+
if args.empty?
|
59
|
+
STDIN.read
|
60
|
+
else
|
61
|
+
File.read filename = args.first
|
62
|
+
end
|
63
|
+
]
|
64
|
+
|
65
|
+
output = if opts['s']
|
66
|
+
JSON.fast_generate json
|
67
|
+
else # default is -l
|
68
|
+
JSON.pretty_generate json
|
69
|
+
end
|
70
|
+
|
71
|
+
if opts['i'] && filename
|
72
|
+
cp filename, "#{filename}.#{opts['i']}"
|
73
|
+
File.open(filename, 'w') { |f| f.puts output }
|
74
|
+
else
|
75
|
+
puts output
|
76
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
/* XPM */
|
2
|
+
static char * Array_xpm[] = {
|
3
|
+
"16 16 2 1",
|
4
|
+
" c None",
|
5
|
+
". c #000000",
|
6
|
+
" ",
|
7
|
+
" ",
|
8
|
+
" ",
|
9
|
+
" .......... ",
|
10
|
+
" . . ",
|
11
|
+
" . . ",
|
12
|
+
" . . ",
|
13
|
+
" . . ",
|
14
|
+
" . . ",
|
15
|
+
" . . ",
|
16
|
+
" . . ",
|
17
|
+
" . . ",
|
18
|
+
" .......... ",
|
19
|
+
" ",
|
20
|
+
" ",
|
21
|
+
" "};
|
@@ -0,0 +1,21 @@
|
|
1
|
+
/* XPM */
|
2
|
+
static char * False_xpm[] = {
|
3
|
+
"16 16 2 1",
|
4
|
+
" c None",
|
5
|
+
". c #FF0000",
|
6
|
+
" ",
|
7
|
+
" ",
|
8
|
+
" ",
|
9
|
+
" ...... ",
|
10
|
+
" . ",
|
11
|
+
" . ",
|
12
|
+
" . ",
|
13
|
+
" ...... ",
|
14
|
+
" . ",
|
15
|
+
" . ",
|
16
|
+
" . ",
|
17
|
+
" . ",
|
18
|
+
" . ",
|
19
|
+
" ",
|
20
|
+
" ",
|
21
|
+
" "};
|
@@ -0,0 +1,21 @@
|
|
1
|
+
/* XPM */
|
2
|
+
static char * Hash_xpm[] = {
|
3
|
+
"16 16 2 1",
|
4
|
+
" c None",
|
5
|
+
". c #000000",
|
6
|
+
" ",
|
7
|
+
" ",
|
8
|
+
" ",
|
9
|
+
" . . ",
|
10
|
+
" . . ",
|
11
|
+
" . . ",
|
12
|
+
" ......... ",
|
13
|
+
" . . ",
|
14
|
+
" . . ",
|
15
|
+
" ......... ",
|
16
|
+
" . . ",
|
17
|
+
" . . ",
|
18
|
+
" . . ",
|
19
|
+
" ",
|
20
|
+
" ",
|
21
|
+
" "};
|
@@ -0,0 +1,73 @@
|
|
1
|
+
/* XPM */
|
2
|
+
static char * Key_xpm[] = {
|
3
|
+
"16 16 54 1",
|
4
|
+
" c None",
|
5
|
+
". c #110007",
|
6
|
+
"+ c #0E0900",
|
7
|
+
"@ c #000013",
|
8
|
+
"# c #070600",
|
9
|
+
"$ c #F6F006",
|
10
|
+
"% c #ECE711",
|
11
|
+
"& c #E5EE00",
|
12
|
+
"* c #16021E",
|
13
|
+
"= c #120900",
|
14
|
+
"- c #EDF12B",
|
15
|
+
"; c #000033",
|
16
|
+
"> c #0F0000",
|
17
|
+
", c #FFFE03",
|
18
|
+
"' c #E6E500",
|
19
|
+
") c #16021B",
|
20
|
+
"! c #F7F502",
|
21
|
+
"~ c #000E00",
|
22
|
+
"{ c #130000",
|
23
|
+
"] c #FFF000",
|
24
|
+
"^ c #FFE711",
|
25
|
+
"/ c #140005",
|
26
|
+
"( c #190025",
|
27
|
+
"_ c #E9DD27",
|
28
|
+
": c #E7DC04",
|
29
|
+
"< c #FFEC09",
|
30
|
+
"[ c #FFE707",
|
31
|
+
"} c #FFDE10",
|
32
|
+
"| c #150021",
|
33
|
+
"1 c #160700",
|
34
|
+
"2 c #FAF60E",
|
35
|
+
"3 c #EFE301",
|
36
|
+
"4 c #FEF300",
|
37
|
+
"5 c #E7E000",
|
38
|
+
"6 c #FFFF08",
|
39
|
+
"7 c #0E0206",
|
40
|
+
"8 c #040000",
|
41
|
+
"9 c #03052E",
|
42
|
+
"0 c #041212",
|
43
|
+
"a c #070300",
|
44
|
+
"b c #F2E713",
|
45
|
+
"c c #F9DE13",
|
46
|
+
"d c #36091E",
|
47
|
+
"e c #00001C",
|
48
|
+
"f c #1F0010",
|
49
|
+
"g c #FFF500",
|
50
|
+
"h c #DEDE00",
|
51
|
+
"i c #050A00",
|
52
|
+
"j c #FAF14A",
|
53
|
+
"k c #F5F200",
|
54
|
+
"l c #040404",
|
55
|
+
"m c #1A0D00",
|
56
|
+
"n c #EDE43D",
|
57
|
+
"o c #ECE007",
|
58
|
+
" ",
|
59
|
+
" ",
|
60
|
+
" .+@ ",
|
61
|
+
" #$%&* ",
|
62
|
+
" =-;>,') ",
|
63
|
+
" >!~{]^/ ",
|
64
|
+
" (_:<[}| ",
|
65
|
+
" 1234567 ",
|
66
|
+
" 890abcd ",
|
67
|
+
" efghi ",
|
68
|
+
" >jkl ",
|
69
|
+
" mnol ",
|
70
|
+
" >kl ",
|
71
|
+
" ll ",
|
72
|
+
" ",
|
73
|
+
" "};
|
@@ -0,0 +1,21 @@
|
|
1
|
+
/* XPM */
|
2
|
+
static char * False_xpm[] = {
|
3
|
+
"16 16 2 1",
|
4
|
+
" c None",
|
5
|
+
". c #000000",
|
6
|
+
" ",
|
7
|
+
" ",
|
8
|
+
" ",
|
9
|
+
" ... ",
|
10
|
+
" . . ",
|
11
|
+
" . . ",
|
12
|
+
" . . ",
|
13
|
+
" . . ",
|
14
|
+
" . . ",
|
15
|
+
" . . ",
|
16
|
+
" . . ",
|
17
|
+
" . . ",
|
18
|
+
" ... ",
|
19
|
+
" ",
|
20
|
+
" ",
|
21
|
+
" "};
|
@@ -0,0 +1,28 @@
|
|
1
|
+
/* XPM */
|
2
|
+
static char * Numeric_xpm[] = {
|
3
|
+
"16 16 9 1",
|
4
|
+
" c None",
|
5
|
+
". c #FF0000",
|
6
|
+
"+ c #0000FF",
|
7
|
+
"@ c #0023DB",
|
8
|
+
"# c #00EA14",
|
9
|
+
"$ c #00FF00",
|
10
|
+
"% c #004FAF",
|
11
|
+
"& c #0028D6",
|
12
|
+
"* c #00F20C",
|
13
|
+
" ",
|
14
|
+
" ",
|
15
|
+
" ",
|
16
|
+
" ... +++@#$$$$ ",
|
17
|
+
" .+ %& $$ ",
|
18
|
+
" . + $ ",
|
19
|
+
" . + $$ ",
|
20
|
+
" . ++$$$$ ",
|
21
|
+
" . + $$ ",
|
22
|
+
" . + $ ",
|
23
|
+
" . + $ ",
|
24
|
+
" . + $ $$ ",
|
25
|
+
" .....++++*$$ ",
|
26
|
+
" ",
|
27
|
+
" ",
|
28
|
+
" "};
|
@@ -0,0 +1,96 @@
|
|
1
|
+
/* XPM */
|
2
|
+
static char * String_xpm[] = {
|
3
|
+
"16 16 77 1",
|
4
|
+
" c None",
|
5
|
+
". c #000000",
|
6
|
+
"+ c #040404",
|
7
|
+
"@ c #080806",
|
8
|
+
"# c #090606",
|
9
|
+
"$ c #EEEAE1",
|
10
|
+
"% c #E7E3DA",
|
11
|
+
"& c #E0DBD1",
|
12
|
+
"* c #D4B46F",
|
13
|
+
"= c #0C0906",
|
14
|
+
"- c #E3C072",
|
15
|
+
"; c #E4C072",
|
16
|
+
"> c #060505",
|
17
|
+
", c #0B0A08",
|
18
|
+
"' c #D5B264",
|
19
|
+
") c #D3AF5A",
|
20
|
+
"! c #080602",
|
21
|
+
"~ c #E1B863",
|
22
|
+
"{ c #DDB151",
|
23
|
+
"] c #DBAE4A",
|
24
|
+
"^ c #DDB152",
|
25
|
+
"/ c #DDB252",
|
26
|
+
"( c #070705",
|
27
|
+
"_ c #0C0A07",
|
28
|
+
": c #D3A33B",
|
29
|
+
"< c #020201",
|
30
|
+
"[ c #DAAA41",
|
31
|
+
"} c #040302",
|
32
|
+
"| c #E4D9BF",
|
33
|
+
"1 c #0B0907",
|
34
|
+
"2 c #030201",
|
35
|
+
"3 c #020200",
|
36
|
+
"4 c #C99115",
|
37
|
+
"5 c #080704",
|
38
|
+
"6 c #DBC8A2",
|
39
|
+
"7 c #E7D7B4",
|
40
|
+
"8 c #E0CD9E",
|
41
|
+
"9 c #080601",
|
42
|
+
"0 c #040400",
|
43
|
+
"a c #010100",
|
44
|
+
"b c #0B0B08",
|
45
|
+
"c c #DCBF83",
|
46
|
+
"d c #DCBC75",
|
47
|
+
"e c #DEB559",
|
48
|
+
"f c #040301",
|
49
|
+
"g c #BC8815",
|
50
|
+
"h c #120E07",
|
51
|
+
"i c #060402",
|
52
|
+
"j c #0A0804",
|
53
|
+
"k c #D4A747",
|
54
|
+
"l c #D6A12F",
|
55
|
+
"m c #0E0C05",
|
56
|
+
"n c #C8C1B0",
|
57
|
+
"o c #1D1B15",
|
58
|
+
"p c #D7AD51",
|
59
|
+
"q c #070502",
|
60
|
+
"r c #080804",
|
61
|
+
"s c #BC953B",
|
62
|
+
"t c #C4BDAD",
|
63
|
+
"u c #0B0807",
|
64
|
+
"v c #DBAC47",
|
65
|
+
"w c #1B150A",
|
66
|
+
"x c #B78A2C",
|
67
|
+
"y c #D8A83C",
|
68
|
+
"z c #D4A338",
|
69
|
+
"A c #0F0B03",
|
70
|
+
"B c #181105",
|
71
|
+
"C c #C59325",
|
72
|
+
"D c #C18E1F",
|
73
|
+
"E c #060600",
|
74
|
+
"F c #CC992D",
|
75
|
+
"G c #B98B25",
|
76
|
+
"H c #B3831F",
|
77
|
+
"I c #C08C1C",
|
78
|
+
"J c #060500",
|
79
|
+
"K c #0E0C03",
|
80
|
+
"L c #0D0A00",
|
81
|
+
" ",
|
82
|
+
" .+@# ",
|
83
|
+
" .$%&*= ",
|
84
|
+
" .-;>,')! ",
|
85
|
+
" .~. .{]. ",
|
86
|
+
" .^/. (_:< ",
|
87
|
+
" .[.}|$12 ",
|
88
|
+
" 345678}90 ",
|
89
|
+
" a2bcdefgh ",
|
90
|
+
" ijkl.mno ",
|
91
|
+
" <pq. rstu ",
|
92
|
+
" .]v. wx= ",
|
93
|
+
" .yzABCDE ",
|
94
|
+
" .FGHIJ ",
|
95
|
+
" 0KL0 ",
|
96
|
+
" "};
|
@@ -0,0 +1,21 @@
|
|
1
|
+
/* XPM */
|
2
|
+
static char * TrueClass_xpm[] = {
|
3
|
+
"16 16 2 1",
|
4
|
+
" c None",
|
5
|
+
". c #0BF311",
|
6
|
+
" ",
|
7
|
+
" ",
|
8
|
+
" ",
|
9
|
+
" ......... ",
|
10
|
+
" . ",
|
11
|
+
" . ",
|
12
|
+
" . ",
|
13
|
+
" . ",
|
14
|
+
" . ",
|
15
|
+
" . ",
|
16
|
+
" . ",
|
17
|
+
" . ",
|
18
|
+
" . ",
|
19
|
+
" ",
|
20
|
+
" ",
|
21
|
+
" "};
|
@@ -0,0 +1,135 @@
|
|
1
|
+
# This file contains implementations of ruby core's custom objects for
|
2
|
+
# serialisation/deserialisation.
|
3
|
+
|
4
|
+
unless Object.const_defined?(:JSON) and ::JSON.const_defined?(:JSON_LOADED) and
|
5
|
+
::JSON::JSON_LOADED
|
6
|
+
require 'json'
|
7
|
+
end
|
8
|
+
require 'date'
|
9
|
+
|
10
|
+
class Time
|
11
|
+
def self.json_create(object)
|
12
|
+
if usec = object.delete('u') # used to be tv_usec -> tv_nsec
|
13
|
+
object['n'] = usec * 1000
|
14
|
+
end
|
15
|
+
if respond_to?(:tv_nsec)
|
16
|
+
at(*object.values_at('s', 'n'))
|
17
|
+
else
|
18
|
+
at(object['s'], object['n'] / 1000)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def to_json(*args)
|
23
|
+
{
|
24
|
+
'json_class' => self.class.name,
|
25
|
+
's' => tv_sec,
|
26
|
+
'n' => respond_to?(:tv_nsec) ? tv_nsec : tv_usec * 1000
|
27
|
+
}.to_json(*args)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
class Date
|
32
|
+
def self.json_create(object)
|
33
|
+
civil(*object.values_at('y', 'm', 'd', 'sg'))
|
34
|
+
end
|
35
|
+
|
36
|
+
alias start sg unless method_defined?(:start)
|
37
|
+
|
38
|
+
def to_json(*args)
|
39
|
+
{
|
40
|
+
'json_class' => self.class.name,
|
41
|
+
'y' => year,
|
42
|
+
'm' => month,
|
43
|
+
'd' => day,
|
44
|
+
'sg' => start,
|
45
|
+
}.to_json(*args)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
class DateTime
|
50
|
+
def self.json_create(object)
|
51
|
+
args = object.values_at('y', 'm', 'd', 'H', 'M', 'S')
|
52
|
+
of_a, of_b = object['of'].split('/')
|
53
|
+
if of_b and of_b != '0'
|
54
|
+
args << Rational(of_a.to_i, of_b.to_i)
|
55
|
+
else
|
56
|
+
args << of_a
|
57
|
+
end
|
58
|
+
args << object['sg']
|
59
|
+
civil(*args)
|
60
|
+
end
|
61
|
+
|
62
|
+
alias start sg unless method_defined?(:start)
|
63
|
+
|
64
|
+
def to_json(*args)
|
65
|
+
{
|
66
|
+
'json_class' => self.class.name,
|
67
|
+
'y' => year,
|
68
|
+
'm' => month,
|
69
|
+
'd' => day,
|
70
|
+
'H' => hour,
|
71
|
+
'M' => min,
|
72
|
+
'S' => sec,
|
73
|
+
'of' => offset.to_s,
|
74
|
+
'sg' => start,
|
75
|
+
}.to_json(*args)
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
class Range
|
80
|
+
def self.json_create(object)
|
81
|
+
new(*object['a'])
|
82
|
+
end
|
83
|
+
|
84
|
+
def to_json(*args)
|
85
|
+
{
|
86
|
+
'json_class' => self.class.name,
|
87
|
+
'a' => [ first, last, exclude_end? ]
|
88
|
+
}.to_json(*args)
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
class Struct
|
93
|
+
def self.json_create(object)
|
94
|
+
new(*object['v'])
|
95
|
+
end
|
96
|
+
|
97
|
+
def to_json(*args)
|
98
|
+
klass = self.class.name
|
99
|
+
klass.empty? and raise JSON::JSONError, "Only named structs are supported!"
|
100
|
+
{
|
101
|
+
'json_class' => klass,
|
102
|
+
'v' => values,
|
103
|
+
}.to_json(*args)
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
class Exception
|
108
|
+
def self.json_create(object)
|
109
|
+
result = new(object['m'])
|
110
|
+
result.set_backtrace object['b']
|
111
|
+
result
|
112
|
+
end
|
113
|
+
|
114
|
+
def to_json(*args)
|
115
|
+
{
|
116
|
+
'json_class' => self.class.name,
|
117
|
+
'm' => message,
|
118
|
+
'b' => backtrace,
|
119
|
+
}.to_json(*args)
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
class Regexp
|
124
|
+
def self.json_create(object)
|
125
|
+
new(object['s'], object['o'])
|
126
|
+
end
|
127
|
+
|
128
|
+
def to_json(*)
|
129
|
+
{
|
130
|
+
'json_class' => self.class.name,
|
131
|
+
'o' => options,
|
132
|
+
's' => source,
|
133
|
+
}.to_json
|
134
|
+
end
|
135
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
# This file contains implementations of rails custom objects for
|
2
|
+
# serialisation/deserialisation.
|
3
|
+
|
4
|
+
unless Object.const_defined?(:JSON) and ::JSON.const_defined?(:JSON_LOADED) and
|
5
|
+
::JSON::JSON_LOADED
|
6
|
+
require 'json'
|
7
|
+
end
|
8
|
+
|
9
|
+
class Object
|
10
|
+
def self.json_create(object)
|
11
|
+
obj = new
|
12
|
+
for key, value in object
|
13
|
+
next if key == 'json_class'
|
14
|
+
instance_variable_set "@#{key}", value
|
15
|
+
end
|
16
|
+
obj
|
17
|
+
end
|
18
|
+
|
19
|
+
def to_json(*a)
|
20
|
+
result = {
|
21
|
+
'json_class' => self.class.name
|
22
|
+
}
|
23
|
+
instance_variables.inject(result) do |r, name|
|
24
|
+
r[name[1..-1]] = instance_variable_get name
|
25
|
+
r
|
26
|
+
end
|
27
|
+
result.to_json(*a)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
class Symbol
|
32
|
+
def to_json(*a)
|
33
|
+
to_s.to_json(*a)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
module Enumerable
|
38
|
+
def to_json(*a)
|
39
|
+
to_a.to_json(*a)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
# class Regexp
|
44
|
+
# def to_json(*)
|
45
|
+
# inspect
|
46
|
+
# end
|
47
|
+
# end
|
48
|
+
#
|
49
|
+
# The above rails definition has some problems:
|
50
|
+
#
|
51
|
+
# 1. { 'foo' => /bar/ }.to_json # => "{foo: /bar/}"
|
52
|
+
# This isn't valid JSON, because the regular expression syntax is not
|
53
|
+
# defined in RFC 4627. (And unquoted strings are disallowed there, too.)
|
54
|
+
# Though it is valid Javascript.
|
55
|
+
#
|
56
|
+
# 2. { 'foo' => /bar/mix }.to_json # => "{foo: /bar/mix}"
|
57
|
+
# This isn't even valid Javascript.
|
58
|
+
|