mack-javascript 0.8.1 → 0.8.2
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
+
|