json-maglev- 1.5.4 → 1.6.1

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.
Files changed (57) hide show
  1. data/CHANGES +11 -1
  2. data/Rakefile +14 -12
  3. data/VERSION +1 -1
  4. data/ext/json/ext/generator/extconf.rb +0 -7
  5. data/ext/json/ext/generator/generator.c +55 -10
  6. data/ext/json/ext/generator/generator.h +7 -5
  7. data/ext/json/ext/parser/extconf.rb +0 -3
  8. data/ext/json/ext/parser/parser.c +418 -207
  9. data/ext/json/ext/parser/parser.h +11 -10
  10. data/ext/json/ext/parser/parser.rl +178 -104
  11. data/install.rb +1 -8
  12. data/java/src/json/ext/Generator.java +3 -3
  13. data/java/src/json/ext/GeneratorMethods.java +2 -2
  14. data/java/src/json/ext/GeneratorService.java +1 -1
  15. data/java/src/json/ext/GeneratorState.java +41 -13
  16. data/java/src/json/ext/OptionsReader.java +1 -1
  17. data/java/src/json/ext/Parser.java +382 -107
  18. data/java/src/json/ext/Parser.rl +97 -28
  19. data/java/src/json/ext/ParserService.java +1 -1
  20. data/java/src/json/ext/Utils.java +1 -1
  21. data/json.gemspec +5 -6
  22. data/json_pure.gemspec +5 -9
  23. data/lib/json.rb +4 -4
  24. data/lib/json/add/complex.rb +22 -0
  25. data/lib/json/add/core.rb +9 -241
  26. data/lib/json/add/date.rb +34 -0
  27. data/lib/json/add/date_time.rb +50 -0
  28. data/lib/json/add/exception.rb +31 -0
  29. data/lib/json/add/range.rb +29 -0
  30. data/lib/json/add/rational.rb +22 -0
  31. data/lib/json/add/regexp.rb +30 -0
  32. data/lib/json/add/struct.rb +30 -0
  33. data/lib/json/add/symbol.rb +25 -0
  34. data/lib/json/add/time.rb +35 -0
  35. data/lib/json/common.rb +47 -35
  36. data/lib/json/ext.rb +2 -15
  37. data/lib/json/pure/generator.rb +17 -2
  38. data/lib/json/pure/parser.rb +89 -55
  39. data/lib/json/version.rb +1 -1
  40. data/tests/test_json.rb +36 -0
  41. data/tests/test_json_addition.rb +8 -1
  42. data/tests/test_json_generate.rb +34 -1
  43. data/tools/server.rb +1 -0
  44. metadata +20 -24
  45. data/bin/edit_json.rb +0 -9
  46. data/bin/prettify_json.rb +0 -48
  47. data/lib/json/Array.xpm +0 -21
  48. data/lib/json/FalseClass.xpm +0 -21
  49. data/lib/json/Hash.xpm +0 -21
  50. data/lib/json/Key.xpm +0 -73
  51. data/lib/json/NilClass.xpm +0 -21
  52. data/lib/json/Numeric.xpm +0 -28
  53. data/lib/json/String.xpm +0 -96
  54. data/lib/json/TrueClass.xpm +0 -21
  55. data/lib/json/add/rails.rb +0 -8
  56. data/lib/json/editor.rb +0 -1369
  57. data/lib/json/json.xpm +0 -1499
data/lib/json/ext.rb CHANGED
@@ -4,21 +4,8 @@ module JSON
4
4
  # This module holds all the modules/classes that implement JSON's
5
5
  # functionality as C extensions.
6
6
  module Ext
7
- begin
8
- if defined?(RUBY_ENGINE) == 'constant' and RUBY_ENGINE == 'ruby' and RUBY_VERSION =~ /\A1\.9\./
9
- require 'json/ext/1.9/parser'
10
- require 'json/ext/1.9/generator'
11
- elsif !defined?(RUBY_ENGINE) && RUBY_VERSION =~ /\A1\.8\./
12
- require 'json/ext/1.8/parser'
13
- require 'json/ext/1.8/generator'
14
- else
15
- require 'json/ext/parser'
16
- require 'json/ext/generator'
17
- end
18
- rescue LoadError
19
- require 'json/ext/parser'
20
- require 'json/ext/generator'
21
- end
7
+ require 'json/ext/parser'
8
+ require 'json/ext/generator'
22
9
  $DEBUG and warn "Using Ext extension for JSON."
23
10
  JSON.parser = Parser
24
11
  JSON.generator = Generator
@@ -133,6 +133,8 @@ module JSON
133
133
  # * *allow_nan*: true if NaN, Infinity, and -Infinity should be
134
134
  # generated, otherwise an exception is thrown, if these values are
135
135
  # encountered. This options defaults to false.
136
+ # * *quirks_mode*: Enables quirks_mode for parser, that is for example
137
+ # generating single JSON values instead of documents is possible.
136
138
  def initialize(opts = {})
137
139
  @indent = ''
138
140
  @space = ''
@@ -141,6 +143,7 @@ module JSON
141
143
  @array_nl = ''
142
144
  @allow_nan = false
143
145
  @ascii_only = false
146
+ @quirks_mode = false
144
147
  configure opts
145
148
  end
146
149
 
@@ -165,6 +168,10 @@ module JSON
165
168
  # the generated JSON, max_nesting = 0 if no maximum is checked.
166
169
  attr_accessor :max_nesting
167
170
 
171
+ # If this attribute is set to true, quirks mode is enabled, otherwise
172
+ # it's disabled.
173
+ attr_accessor :quirks_mode
174
+
168
175
  # This integer returns the current depth data structure nesting in the
169
176
  # generated JSON.
170
177
  attr_accessor :depth
@@ -188,10 +195,17 @@ module JSON
188
195
  @allow_nan
189
196
  end
190
197
 
198
+ # Returns true, if only ASCII characters should be generated. Otherwise
199
+ # returns false.
191
200
  def ascii_only?
192
201
  @ascii_only
193
202
  end
194
203
 
204
+ # Returns true, if quirks mode is enabled. Otherwise returns false.
205
+ def quirks_mode?
206
+ @quirks_mode
207
+ end
208
+
195
209
  # Configure this State instance with the Hash _opts_, and return
196
210
  # itself.
197
211
  def configure(opts)
@@ -203,6 +217,7 @@ module JSON
203
217
  @allow_nan = !!opts[:allow_nan] if opts.key?(:allow_nan)
204
218
  @ascii_only = opts[:ascii_only] if opts.key?(:ascii_only)
205
219
  @depth = opts[:depth] || 0
220
+ @quirks_mode = opts[:quirks_mode] if opts.key?(:quirks_mode)
206
221
  if !opts.key?(:max_nesting) # defaults to 19
207
222
  @max_nesting = 19
208
223
  elsif opts[:max_nesting]
@@ -218,7 +233,7 @@ module JSON
218
233
  # passed to the configure method.
219
234
  def to_h
220
235
  result = {}
221
- for iv in %w[indent space space_before object_nl array_nl allow_nan max_nesting ascii_only depth]
236
+ for iv in %w[indent space space_before object_nl array_nl allow_nan max_nesting ascii_only quirks_mode depth]
222
237
  result[iv.intern] = instance_variable_get("@#{iv}")
223
238
  end
224
239
  result
@@ -229,7 +244,7 @@ module JSON
229
244
  # GeneratorError exception.
230
245
  def generate(obj)
231
246
  result = obj.to_json(self)
232
- if result !~ /\A\s*(?:\[.*\]|\{.*\})\s*\Z/m
247
+ if !@quirks_mode && result !~ /\A\s*(?:\[.*\]|\{.*\})\s*\Z/m
233
248
  raise GeneratorError, "only generation of JSON objects or arrays allowed"
234
249
  end
235
250
  result
@@ -68,42 +68,12 @@ module JSON
68
68
  # defaults to true.
69
69
  # * *object_class*: Defaults to Hash
70
70
  # * *array_class*: Defaults to Array
71
+ # * *quirks_mode*: Enables quirks_mode for parser, that is for example
72
+ # parsing single JSON values instead of documents is possible.
71
73
  def initialize(source, opts = {})
72
74
  opts ||= {}
73
- if defined?(::Encoding)
74
- if source.encoding == ::Encoding::ASCII_8BIT
75
- b = source[0, 4].bytes.to_a
76
- source = case
77
- when b.size >= 4 && b[0] == 0 && b[1] == 0 && b[2] == 0
78
- source.dup.force_encoding(::Encoding::UTF_32BE).encode!(::Encoding::UTF_8)
79
- when b.size >= 4 && b[0] == 0 && b[2] == 0
80
- source.dup.force_encoding(::Encoding::UTF_16BE).encode!(::Encoding::UTF_8)
81
- when b.size >= 4 && b[1] == 0 && b[2] == 0 && b[3] == 0
82
- source.dup.force_encoding(::Encoding::UTF_32LE).encode!(::Encoding::UTF_8)
83
-
84
- when b.size >= 4 && b[1] == 0 && b[3] == 0
85
- source.dup.force_encoding(::Encoding::UTF_16LE).encode!(::Encoding::UTF_8)
86
- else
87
- source.dup
88
- end
89
- else
90
- source = source.encode(::Encoding::UTF_8)
91
- end
92
- source.force_encoding(::Encoding::ASCII_8BIT)
93
- else
94
- b = source
95
- source = case
96
- when b.size >= 4 && b[0] == 0 && b[1] == 0 && b[2] == 0
97
- JSON.iconv('utf-8', 'utf-32be', b)
98
- when b.size >= 4 && b[0] == 0 && b[2] == 0
99
- JSON.iconv('utf-8', 'utf-16be', b)
100
- when b.size >= 4 && b[1] == 0 && b[2] == 0 && b[3] == 0
101
- JSON.iconv('utf-8', 'utf-32le', b)
102
- when b.size >= 4 && b[1] == 0 && b[3] == 0
103
- JSON.iconv('utf-8', 'utf-16le', b)
104
- else
105
- b
106
- end
75
+ unless @quirks_mode = opts[:quirks_mode]
76
+ source = determine_encoding source
107
77
  end
108
78
  super source
109
79
  if !opts.key?(:max_nesting) # defaults to 19
@@ -113,44 +83,108 @@ module JSON
113
83
  else
114
84
  @max_nesting = 0
115
85
  end
116
- @allow_nan = !!opts[:allow_nan]
117
- @symbolize_names = !!opts[:symbolize_names]
118
- @create_additions = opts.key?(:create_additions) ? !!opts[:create_additions] : true
119
- @create_id = opts[:create_id] || JSON.create_id
120
- @object_class = opts[:object_class] || Hash
121
- @array_class = opts[:array_class] || Array
122
- @match_string = opts[:match_string]
86
+ @allow_nan = !!opts[:allow_nan]
87
+ @symbolize_names = !!opts[:symbolize_names]
88
+ if opts.key?(:create_additions)
89
+ @create_additions = !!opts[:create_additions]
90
+ else
91
+ @create_additions = true
92
+ end
93
+ @create_id = @create_additions ? JSON.create_id : nil
94
+ @object_class = opts[:object_class] || Hash
95
+ @array_class = opts[:array_class] || Array
96
+ @match_string = opts[:match_string]
123
97
  end
124
98
 
125
99
  alias source string
126
100
 
101
+ def quirks_mode?
102
+ !!@quirks_mode
103
+ end
104
+
105
+ def reset
106
+ super
107
+ @current_nesting = 0
108
+ end
109
+
127
110
  # Parses the current JSON string _source_ and returns the complete data
128
111
  # structure as a result.
129
112
  def parse
130
113
  reset
131
114
  obj = nil
132
- until eos?
133
- case
134
- when scan(OBJECT_OPEN)
135
- obj and raise ParserError, "source '#{peek(20)}' not in JSON!"
136
- @current_nesting = 1
137
- obj = parse_object
138
- when scan(ARRAY_OPEN)
139
- obj and raise ParserError, "source '#{peek(20)}' not in JSON!"
140
- @current_nesting = 1
141
- obj = parse_array
142
- when skip(IGNORE)
143
- ;
115
+ if @quirks_mode
116
+ while !eos? && skip(IGNORE)
117
+ end
118
+ if eos?
119
+ raise ParserError, "source did not contain any JSON!"
144
120
  else
145
- raise ParserError, "source '#{peek(20)}' not in JSON!"
121
+ obj = parse_value
122
+ obj == UNPARSED and raise ParserError, "source did not contain any JSON!"
146
123
  end
124
+ else
125
+ until eos?
126
+ case
127
+ when scan(OBJECT_OPEN)
128
+ obj and raise ParserError, "source '#{peek(20)}' not in JSON!"
129
+ @current_nesting = 1
130
+ obj = parse_object
131
+ when scan(ARRAY_OPEN)
132
+ obj and raise ParserError, "source '#{peek(20)}' not in JSON!"
133
+ @current_nesting = 1
134
+ obj = parse_array
135
+ when skip(IGNORE)
136
+ ;
137
+ else
138
+ raise ParserError, "source '#{peek(20)}' not in JSON!"
139
+ end
140
+ end
141
+ obj or raise ParserError, "source did not contain any JSON!"
147
142
  end
148
- obj or raise ParserError, "source did not contain any JSON!"
149
143
  obj
150
144
  end
151
145
 
152
146
  private
153
147
 
148
+ def determine_encoding(source)
149
+ if defined?(::Encoding)
150
+ if source.encoding == ::Encoding::ASCII_8BIT
151
+ b = source[0, 4].bytes.to_a
152
+ source =
153
+ case
154
+ when b.size >= 4 && b[0] == 0 && b[1] == 0 && b[2] == 0
155
+ source.dup.force_encoding(::Encoding::UTF_32BE).encode!(::Encoding::UTF_8)
156
+ when b.size >= 4 && b[0] == 0 && b[2] == 0
157
+ source.dup.force_encoding(::Encoding::UTF_16BE).encode!(::Encoding::UTF_8)
158
+ when b.size >= 4 && b[1] == 0 && b[2] == 0 && b[3] == 0
159
+ source.dup.force_encoding(::Encoding::UTF_32LE).encode!(::Encoding::UTF_8)
160
+ when b.size >= 4 && b[1] == 0 && b[3] == 0
161
+ source.dup.force_encoding(::Encoding::UTF_16LE).encode!(::Encoding::UTF_8)
162
+ else
163
+ source.dup
164
+ end
165
+ else
166
+ source = source.encode(::Encoding::UTF_8)
167
+ end
168
+ source.force_encoding(::Encoding::ASCII_8BIT)
169
+ else
170
+ b = source
171
+ source =
172
+ case
173
+ when b.size >= 4 && b[0] == 0 && b[1] == 0 && b[2] == 0
174
+ JSON.iconv('utf-8', 'utf-32be', b)
175
+ when b.size >= 4 && b[0] == 0 && b[2] == 0
176
+ JSON.iconv('utf-8', 'utf-16be', b)
177
+ when b.size >= 4 && b[1] == 0 && b[2] == 0 && b[3] == 0
178
+ JSON.iconv('utf-8', 'utf-32le', b)
179
+ when b.size >= 4 && b[1] == 0 && b[3] == 0
180
+ JSON.iconv('utf-8', 'utf-16le', b)
181
+ else
182
+ b
183
+ end
184
+ end
185
+ source
186
+ end
187
+
154
188
  # Unescape characters in strings.
155
189
  UNESCAPE_MAP = Hash.new { |h, k| h[k] = k.chr }
156
190
  UNESCAPE_MAP.update({
data/lib/json/version.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  module JSON
2
2
  # JSON version
3
- VERSION = '1.5.4'
3
+ VERSION = '1.6.1'
4
4
  VERSION_ARRAY = VERSION.split(/\./).map { |x| x.to_i } # :nodoc:
5
5
  VERSION_MAJOR = VERSION_ARRAY[0] # :nodoc:
6
6
  VERSION_MINOR = VERSION_ARRAY[1] # :nodoc:
data/tests/test_json.rb CHANGED
@@ -104,6 +104,42 @@ class TC_JSON < Test::Unit::TestCase
104
104
  assert_equal({ "a" => 0.23 }, parse(' { "a" : 0.23 } '))
105
105
  end
106
106
 
107
+ def test_parse_json_primitive_values
108
+ assert_raise(JSON::ParserError) { JSON.parse('') }
109
+ assert_raise(JSON::ParserError) { JSON.parse('', :quirks_mode => true) }
110
+ assert_raise(JSON::ParserError) { JSON.parse(' /* foo */ ') }
111
+ assert_raise(JSON::ParserError) { JSON.parse(' /* foo */ ', :quirks_mode => true) }
112
+ parser = JSON::Parser.new('null')
113
+ assert_equal false, parser.quirks_mode?
114
+ assert_raise(JSON::ParserError) { parser.parse }
115
+ assert_raise(JSON::ParserError) { JSON.parse('null') }
116
+ assert_equal nil, JSON.parse('null', :quirks_mode => true)
117
+ parser = JSON::Parser.new('null', :quirks_mode => true)
118
+ assert_equal true, parser.quirks_mode?
119
+ assert_equal nil, parser.parse
120
+ assert_raise(JSON::ParserError) { JSON.parse('false') }
121
+ assert_equal false, JSON.parse('false', :quirks_mode => true)
122
+ assert_raise(JSON::ParserError) { JSON.parse('true') }
123
+ assert_equal true, JSON.parse('true', :quirks_mode => true)
124
+ assert_raise(JSON::ParserError) { JSON.parse('23') }
125
+ assert_equal 23, JSON.parse('23', :quirks_mode => true)
126
+ assert_raise(JSON::ParserError) { JSON.parse('1') }
127
+ assert_equal 1, JSON.parse('1', :quirks_mode => true)
128
+ assert_raise(JSON::ParserError) { JSON.parse('3.141') }
129
+ assert_in_delta 3.141, JSON.parse('3.141', :quirks_mode => true), 1E-3
130
+ assert_raise(JSON::ParserError) { JSON.parse('18446744073709551616') }
131
+ assert_equal 2 ** 64, JSON.parse('18446744073709551616', :quirks_mode => true)
132
+ assert_raise(JSON::ParserError) { JSON.parse('"foo"') }
133
+ assert_equal 'foo', JSON.parse('"foo"', :quirks_mode => true)
134
+ assert_raise(JSON::ParserError) { JSON.parse('NaN', :allow_nan => true) }
135
+ assert JSON.parse('NaN', :quirks_mode => true, :allow_nan => true).nan?
136
+ assert_raise(JSON::ParserError) { JSON.parse('Infinity', :allow_nan => true) }
137
+ assert JSON.parse('Infinity', :quirks_mode => true, :allow_nan => true).infinite?
138
+ assert_raise(JSON::ParserError) { JSON.parse('-Infinity', :allow_nan => true) }
139
+ assert JSON.parse('-Infinity', :quirks_mode => true, :allow_nan => true).infinite?
140
+ assert_raise(JSON::ParserError) { JSON.parse('[ 1, ]', :quirks_mode => true) }
141
+ end
142
+
107
143
  if Array.method_defined?(:permutation)
108
144
  def test_parse_more_complex_arrays
109
145
  a = [ nil, false, true, "foßbar", [ "n€st€d", true ], { "nested" => true, "n€ßt€ð2" => {} }]
@@ -3,7 +3,9 @@
3
3
 
4
4
  require 'test/unit'
5
5
  require File.join(File.dirname(__FILE__), 'setup_variant')
6
- load 'json/add/core.rb'
6
+ require 'json/add/core'
7
+ require 'json/add/complex'
8
+ require 'json/add/rational'
7
9
  require 'date'
8
10
 
9
11
  class TC_JSONAddition < Test::Unit::TestCase
@@ -164,4 +166,9 @@ class TC_JSONAddition < Test::Unit::TestCase
164
166
  d = DateTime.civil(2008, 6, 17, 11, 48, 32, Rational(12,24))
165
167
  assert_equal d, JSON.parse(d.to_json)
166
168
  end
169
+
170
+ def test_rational_complex
171
+ assert_equal Rational(2, 9), JSON(JSON(Rational(2, 9)))
172
+ assert_equal Complex(2, 9), JSON(JSON(Complex(2, 9)))
173
+ end
167
174
  end
@@ -50,6 +50,7 @@ EOT
50
50
  parsed_json = parse(json)
51
51
  assert_equal({"1"=>2}, parsed_json)
52
52
  assert_raise(GeneratorError) { generate(666) }
53
+ assert_equal '666', generate(666, :quirks_mode => true)
53
54
  end
54
55
 
55
56
  def test_generate_pretty
@@ -67,6 +68,7 @@ EOT
67
68
  parsed_json = parse(json)
68
69
  assert_equal({"1"=>2}, parsed_json)
69
70
  assert_raise(GeneratorError) { pretty_generate(666) }
71
+ assert_equal '666', pretty_generate(666, :quirks_mode => true)
70
72
  end
71
73
 
72
74
  def test_fast_generate
@@ -79,9 +81,24 @@ EOT
79
81
  parsed_json = parse(json)
80
82
  assert_equal({"1"=>2}, parsed_json)
81
83
  assert_raise(GeneratorError) { fast_generate(666) }
84
+ assert_equal '666', fast_generate(666, :quirks_mode => true)
82
85
  end
83
86
 
84
-
87
+ def test_own_state
88
+ state = State.new
89
+ json = generate(@hash, state)
90
+ assert_equal(JSON.parse(@json2), JSON.parse(json))
91
+ parsed_json = parse(json)
92
+ assert_equal(@hash, parsed_json)
93
+ json = generate({1=>2}, state)
94
+ assert_equal('{"1":2}', json)
95
+ parsed_json = parse(json)
96
+ assert_equal({"1"=>2}, parsed_json)
97
+ assert_raise(GeneratorError) { generate(666, state) }
98
+ state.quirks_mode = true
99
+ assert state.quirks_mode?
100
+ assert_equal '666', generate(666, state)
101
+ end
85
102
 
86
103
  def test_states
87
104
  json = generate({1=>2}, nil)
@@ -107,6 +124,7 @@ EOT
107
124
  :allow_nan => false,
108
125
  :array_nl => "\n",
109
126
  :ascii_only => false,
127
+ :quirks_mode => false,
110
128
  :depth => 0,
111
129
  :indent => " ",
112
130
  :max_nesting => 19,
@@ -122,6 +140,7 @@ EOT
122
140
  :allow_nan => false,
123
141
  :array_nl => "",
124
142
  :ascii_only => false,
143
+ :quirks_mode => false,
125
144
  :depth => 0,
126
145
  :indent => "",
127
146
  :max_nesting => 19,
@@ -137,6 +156,7 @@ EOT
137
156
  :allow_nan => false,
138
157
  :array_nl => "",
139
158
  :ascii_only => false,
159
+ :quirks_mode => false,
140
160
  :depth => 0,
141
161
  :indent => "",
142
162
  :max_nesting => 0,
@@ -177,4 +197,17 @@ EOT
177
197
  assert_raises(JSON::NestingError) { ary.to_json(s) }
178
198
  assert_equal 19, s.depth
179
199
  end
200
+
201
+ def test_gc
202
+ bignum_too_long_to_embed_as_string = 1234567890123456789012345
203
+ expect = bignum_too_long_to_embed_as_string.to_s
204
+ stress, GC.stress = GC.stress, true
205
+
206
+ 10.times do |i|
207
+ tmp = bignum_too_long_to_embed_as_string.to_json
208
+ assert_equal expect, tmp
209
+ end
210
+ ensure
211
+ GC.stress = stress
212
+ end if GC.respond_to?(:stress=)
180
213
  end
data/tools/server.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
+ # encoding: utf-8
2
3
 
3
4
  require 'webrick'
4
5
  include WEBrick
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: json-maglev-
3
3
  version: !ruby/object:Gem::Version
4
- hash: 11
5
- prerelease:
4
+ hash: 13
5
+ prerelease: false
6
6
  segments:
7
7
  - 1
8
- - 5
9
- - 4
10
- version: 1.5.4
8
+ - 6
9
+ - 1
10
+ version: 1.6.1
11
11
  platform: ruby
12
12
  authors:
13
13
  - Florian Frank
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-07-08 00:00:00 -07:00
18
+ date: 2011-09-18 00:00:00 -07:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -62,9 +62,8 @@ dependencies:
62
62
  version_requirements: *id003
63
63
  description: This is a JSON implementation as a Ruby extension in C.
64
64
  email: flori@ping.de
65
- executables:
66
- - edit_json.rb
67
- - prettify_json.rb
65
+ executables: []
66
+
68
67
  extensions:
69
68
  - ext/json/ext/parser/extconf.rb
70
69
  - ext/json/ext/generator/extconf.rb
@@ -150,32 +149,29 @@ files:
150
149
  - benchmarks/generator_benchmark.rb
151
150
  - benchmarks/ohai.ruby
152
151
  - benchmarks/ohai.json
153
- - lib/json/json.xpm
154
- - lib/json/TrueClass.xpm
155
152
  - lib/json/version.rb
156
- - lib/json/Array.xpm
153
+ - lib/json/add/symbol.rb
154
+ - lib/json/add/struct.rb
155
+ - lib/json/add/complex.rb
156
+ - lib/json/add/rational.rb
157
+ - lib/json/add/exception.rb
158
+ - lib/json/add/time.rb
159
+ - lib/json/add/date_time.rb
157
160
  - lib/json/add/core.rb
158
- - lib/json/add/rails.rb
161
+ - lib/json/add/range.rb
162
+ - lib/json/add/date.rb
163
+ - lib/json/add/regexp.rb
159
164
  - lib/json/common.rb
160
165
  - lib/json/pure/generator.rb
161
166
  - lib/json/pure/parser.rb
162
167
  - lib/json/ext.rb
163
168
  - lib/json/pure.rb
164
- - lib/json/Key.xpm
165
- - lib/json/FalseClass.xpm
166
- - lib/json/editor.rb
167
- - lib/json/Numeric.xpm
168
- - lib/json/NilClass.xpm
169
- - lib/json/String.xpm
170
- - lib/json/Hash.xpm
171
169
  - lib/json.rb
172
170
  - Gemfile
173
171
  - README.rdoc
174
172
  - json_pure.gemspec
175
173
  - GPL
176
174
  - CHANGES
177
- - bin/prettify_json.rb
178
- - bin/edit_json.rb
179
175
  - COPYING-json-jruby
180
176
  - ext/json/ext/parser/parser.h
181
177
  - ext/json/ext/parser/extconf.rb
@@ -251,9 +247,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
251
247
  requirements: []
252
248
 
253
249
  rubyforge_project: json
254
- rubygems_version: 1.6.2
250
+ rubygems_version: 1.3.7
255
251
  signing_key:
256
- specification_version: 4
252
+ specification_version: 3
257
253
  summary: JSON Implementation for Ruby
258
254
  test_files:
259
255
  - ./tests/test_json_string_matching.rb