rufus-json 1.0.5 → 1.0.6
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/CHANGELOG.txt +5 -0
- data/CREDITS.txt +6 -1
- data/README.md +93 -0
- data/lib/rufus/json.rb +53 -20
- data/rufus-json.gemspec +3 -1
- data/test/backend_test.rb +7 -2
- data/test/do_test.rb +1 -1
- data/test/test.rb +1 -0
- metadata +7 -6
- data/README.rdoc +0 -100
data/CHANGELOG.txt
CHANGED
data/CREDITS.txt
CHANGED
data/README.md
ADDED
@@ -0,0 +1,93 @@
|
|
1
|
+
|
2
|
+
# rufus-json
|
3
|
+
|
4
|
+
One interface for various JSON Ruby backends.
|
5
|
+
|
6
|
+
```ruby
|
7
|
+
require 'rubygems'
|
8
|
+
|
9
|
+
# load your favourite JSON backend
|
10
|
+
require 'yajl'
|
11
|
+
#require 'json'
|
12
|
+
#require 'active_support'
|
13
|
+
|
14
|
+
require 'rufus-json' # gem install rufus-json
|
15
|
+
|
16
|
+
p Rufus::Json.decode('{"a":2,"b":true}')
|
17
|
+
p Rufus::Json.load('{"a":2,"b":true}')
|
18
|
+
# => { 'a' => 2, 'b' => true }
|
19
|
+
|
20
|
+
p Rufus::Json.encode({ 'a' => 2, 'b' => true })
|
21
|
+
p Rufus::Json.dump({ 'a' => 2, 'b' => true })
|
22
|
+
# => '{"a":2,"b":true}'
|
23
|
+
```
|
24
|
+
|
25
|
+
If multiple libs are present, it will favour yajl-ruby and json, and then active_support. It's OK to force a backend.
|
26
|
+
|
27
|
+
```
|
28
|
+
Rufus::Json.backend = :yajl
|
29
|
+
#Rufus::Json.backend = :json
|
30
|
+
#Rufus::Json.backend = :active
|
31
|
+
```
|
32
|
+
|
33
|
+
To know if there is currently a backend set :
|
34
|
+
|
35
|
+
```ruby
|
36
|
+
Rufus::Json.has_backend?
|
37
|
+
```
|
38
|
+
|
39
|
+
It's OK to load a lib and force detection :
|
40
|
+
|
41
|
+
```ruby
|
42
|
+
require 'json'
|
43
|
+
Rufus::Json.detect_backend
|
44
|
+
|
45
|
+
p Rufus::Json.backend
|
46
|
+
# => :json
|
47
|
+
```
|
48
|
+
|
49
|
+
|
50
|
+
There is a dup method, it may be useful in an all JSON system (flattening stuff that will anyway get flattened later).
|
51
|
+
|
52
|
+
```ruby
|
53
|
+
o = Rufus::Json.dup(o)
|
54
|
+
```
|
55
|
+
|
56
|
+
|
57
|
+
### require 'rufus-json/automatic'
|
58
|
+
|
59
|
+
```ruby
|
60
|
+
require 'rufus-json/automatic'
|
61
|
+
```
|
62
|
+
|
63
|
+
will require 'rufus-json' and load the first JSON lib available (in the order yajl, oj, jrjackson, active_support, json, json/pure.
|
64
|
+
|
65
|
+
It is equivalent to
|
66
|
+
|
67
|
+
```ruby
|
68
|
+
require 'rufus-json'
|
69
|
+
Rufus::Json.load_backend
|
70
|
+
```
|
71
|
+
|
72
|
+
(the .load_backend method accepts a list/order of backends to try).
|
73
|
+
|
74
|
+
|
75
|
+
## issue tracker
|
76
|
+
|
77
|
+
http://github.com/jmettraux/rufus-json/issues
|
78
|
+
|
79
|
+
|
80
|
+
## irc
|
81
|
+
|
82
|
+
irc.freenode.net #ruote
|
83
|
+
|
84
|
+
|
85
|
+
## authors
|
86
|
+
|
87
|
+
see [CREDITS.txt](CREDITS.txt)
|
88
|
+
|
89
|
+
|
90
|
+
## license
|
91
|
+
|
92
|
+
MIT, see [LICENSE.txt](LICENSE.txt)
|
93
|
+
|
data/lib/rufus/json.rb
CHANGED
@@ -26,7 +26,7 @@
|
|
26
26
|
module Rufus
|
27
27
|
module Json
|
28
28
|
|
29
|
-
VERSION = '1.0.
|
29
|
+
VERSION = '1.0.6'
|
30
30
|
|
31
31
|
# The JSON / JSON pure decoder
|
32
32
|
#
|
@@ -94,6 +94,19 @@ module Json
|
|
94
94
|
::Oj::ParseError }
|
95
95
|
}
|
96
96
|
|
97
|
+
# https://github.com/guyboertje/jrjackson
|
98
|
+
#
|
99
|
+
JRJACKSON = {
|
100
|
+
:encode => lambda { |o, opts|
|
101
|
+
fix_raw_value(::JrJackson::Json.dump(syms_to_s(o))) },
|
102
|
+
:pretty_encode => lambda { |o|
|
103
|
+
fix_raw_value(::JrJackson::Json.dump(syms_to_s(o))) },
|
104
|
+
:decode => lambda { |s|
|
105
|
+
::JrJackson::Json.load(s) },
|
106
|
+
:error => lambda {
|
107
|
+
::JrJackson::ParseError }
|
108
|
+
}
|
109
|
+
|
97
110
|
# The "raise an exception because there's no backend" backend
|
98
111
|
#
|
99
112
|
NONE = {
|
@@ -116,7 +129,8 @@ module Json
|
|
116
129
|
#
|
117
130
|
def self.load_backend(*order)
|
118
131
|
|
119
|
-
order =
|
132
|
+
order =
|
133
|
+
%w[ yajl oj jrjackson active_support json json/pure ] if order.empty?
|
120
134
|
|
121
135
|
order.each do |lib|
|
122
136
|
begin
|
@@ -134,17 +148,20 @@ module Json
|
|
134
148
|
#
|
135
149
|
def self.detect_backend
|
136
150
|
|
137
|
-
@backend =
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
151
|
+
@backend =
|
152
|
+
if defined?(::JrJackson)
|
153
|
+
JRJACKSON
|
154
|
+
elsif defined?(::Oj)
|
155
|
+
OJ
|
156
|
+
elsif defined?(::Yajl)
|
157
|
+
YAJL
|
158
|
+
elsif defined?(::JSON)
|
159
|
+
JSON
|
160
|
+
elsif defined?(ActiveSupport::JSON)
|
161
|
+
ACTIVE_SUPPORT
|
162
|
+
else
|
163
|
+
NONE
|
164
|
+
end
|
148
165
|
end
|
149
166
|
|
150
167
|
detect_backend
|
@@ -161,7 +178,7 @@ module Json
|
|
161
178
|
#
|
162
179
|
def self.backend
|
163
180
|
|
164
|
-
%w[ yajl json active oj none ].find { |b|
|
181
|
+
%w[ yajl json active oj jrjackson none ].find { |b|
|
165
182
|
Rufus::Json.const_get(b.upcase) == @backend
|
166
183
|
}.to_sym
|
167
184
|
end
|
@@ -173,12 +190,13 @@ module Json
|
|
173
190
|
#
|
174
191
|
def self.backend=(b)
|
175
192
|
|
176
|
-
b =
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
193
|
+
b =
|
194
|
+
{
|
195
|
+
'yajl' => YAJL, 'yajl-ruby' => YAJL,
|
196
|
+
'json' => JSON, 'json-pure' => JSON,
|
197
|
+
'active' => ACTIVE, 'active-support' => ACTIVE,
|
198
|
+
'oj' => OJ, 'jrjackson' => JRJACKSON, 'none' => NONE
|
199
|
+
}[b.to_s.gsub(/[_\/]/, '-')] if b.is_a?(String) or b.is_a?(Symbol)
|
182
200
|
|
183
201
|
@backend = b
|
184
202
|
end
|
@@ -253,6 +271,21 @@ module Json
|
|
253
271
|
o.inject({}) { |h, (k, v)| h[k.to_s] = syms_to_s(v); h }
|
254
272
|
end
|
255
273
|
|
274
|
+
# Used to handle parsers that do not support raw value encoding
|
275
|
+
# (i.e. JrJackson)
|
276
|
+
#
|
277
|
+
def self.fix_raw_value(o)
|
278
|
+
|
279
|
+
case o
|
280
|
+
when FalseClass, TrueClass, Fixnum, Float
|
281
|
+
o.to_s
|
282
|
+
when NilClass
|
283
|
+
'null'
|
284
|
+
else
|
285
|
+
o
|
286
|
+
end
|
287
|
+
end
|
288
|
+
|
256
289
|
# Wraps parser errors during decode
|
257
290
|
#
|
258
291
|
class ParserError < StandardError; end
|
data/rufus-json.gemspec
CHANGED
@@ -12,10 +12,11 @@ Gem::Specification.new do |s|
|
|
12
12
|
s.email = [ 'jmettraux@gmail.com' ]
|
13
13
|
s.homepage = 'http://github.com/jmettraux/rufus-json'
|
14
14
|
s.rubyforge_project = 'rufus'
|
15
|
+
s.license = 'MIT'
|
15
16
|
s.summary = 'One interface to various JSON ruby libs, with a preference for yajl.'
|
16
17
|
|
17
18
|
s.description = %{
|
18
|
-
One interface to various JSON ruby libs (yajl, oj, json, json_pure, json-jruby, active_support). Has a preference for yajl.
|
19
|
+
One interface to various JSON ruby libs (yajl, oj, jrjackson, json, json_pure, json-jruby, active_support). Has a preference for yajl.
|
19
20
|
}.strip
|
20
21
|
|
21
22
|
#s.files = `git ls-files`.split("\n")
|
@@ -25,6 +26,7 @@ One interface to various JSON ruby libs (yajl, oj, json, json_pure, json-jruby,
|
|
25
26
|
'*.gemspec', '*.txt', '*.rdoc', '*.md'
|
26
27
|
]
|
27
28
|
|
29
|
+
#s.add_development_dependency 'jrjackson'
|
28
30
|
#s.add_development_dependency 'oj'
|
29
31
|
#s.add_development_dependency 'json'
|
30
32
|
#s.add_development_dependency 'json_pure'
|
data/test/backend_test.rb
CHANGED
@@ -59,8 +59,13 @@ class BackendTest < Test::Unit::TestCase
|
|
59
59
|
|
60
60
|
r = Rufus::Json.load_backend
|
61
61
|
|
62
|
-
|
63
|
-
|
62
|
+
if RUBY_PLATFORM == 'ruby'
|
63
|
+
assert_equal 'yajl', r
|
64
|
+
assert_equal :yajl, Rufus::Json.backend
|
65
|
+
elsif RUBY_PLATFORM == 'jruby'
|
66
|
+
assert_equal 'active_support', r
|
67
|
+
assert_equal :active, Rufus::Json.backend
|
68
|
+
end
|
64
69
|
end
|
65
70
|
|
66
71
|
def test_load_backend_with_different_order
|
data/test/do_test.rb
CHANGED
@@ -128,7 +128,7 @@ class DoTest < Test::Unit::TestCase
|
|
128
128
|
s = Rufus::Json.pretty_encode(
|
129
129
|
{ 'a' => 'b', 'e' => [ 1, 2, 3 ], 'c' => { 'd' => true } })
|
130
130
|
|
131
|
-
assert(s.index("\n")) if JSON_LIB != 'active_support'
|
131
|
+
assert(s.index("\n")) if JSON_LIB != 'active_support' && JSON_LIB != 'jrjackson' #no pretty encoding supported
|
132
132
|
end
|
133
133
|
end
|
134
134
|
|
data/test/test.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rufus-json
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.6
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2013-
|
13
|
+
date: 2013-09-05 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rake
|
@@ -28,8 +28,8 @@ dependencies:
|
|
28
28
|
- - ! '>='
|
29
29
|
- !ruby/object:Gem::Version
|
30
30
|
version: '0'
|
31
|
-
description: One interface to various JSON ruby libs (yajl, oj, json, json_pure,
|
32
|
-
active_support). Has a preference for yajl.
|
31
|
+
description: One interface to various JSON ruby libs (yajl, oj, jrjackson, json, json_pure,
|
32
|
+
json-jruby, active_support). Has a preference for yajl.
|
33
33
|
email:
|
34
34
|
- jmettraux@gmail.com
|
35
35
|
executables: []
|
@@ -50,9 +50,10 @@ files:
|
|
50
50
|
- CHANGELOG.txt
|
51
51
|
- LICENSE.txt
|
52
52
|
- CREDITS.txt
|
53
|
-
- README.
|
53
|
+
- README.md
|
54
54
|
homepage: http://github.com/jmettraux/rufus-json
|
55
|
-
licenses:
|
55
|
+
licenses:
|
56
|
+
- MIT
|
56
57
|
post_install_message:
|
57
58
|
rdoc_options: []
|
58
59
|
require_paths:
|
data/README.rdoc
DELETED
@@ -1,100 +0,0 @@
|
|
1
|
-
|
2
|
-
= rufus-json
|
3
|
-
|
4
|
-
One interface for various JSON Ruby backends.
|
5
|
-
|
6
|
-
require 'rubygems'
|
7
|
-
|
8
|
-
# load your favourite JSON backend
|
9
|
-
require 'yajl'
|
10
|
-
#require 'json'
|
11
|
-
#require 'active_support'
|
12
|
-
|
13
|
-
require 'rufus-json' # gem install rufus-json
|
14
|
-
|
15
|
-
p Rufus::Json.decode('{"a":2,"b":true}')
|
16
|
-
p Rufus::Json.load('{"a":2,"b":true}')
|
17
|
-
# => { 'a' => 2, 'b' => true }
|
18
|
-
|
19
|
-
p Rufus::Json.encode({ 'a' => 2, 'b' => true })
|
20
|
-
p Rufus::Json.dump({ 'a' => 2, 'b' => true })
|
21
|
-
# => '{"a":2,"b":true}'
|
22
|
-
|
23
|
-
|
24
|
-
If multiple libs are present, it will favour yajl-ruby and json, and then active_support. It's OK to force a backend.
|
25
|
-
|
26
|
-
Rufus::Json.backend = :yajl
|
27
|
-
#Rufus::Json.backend = :json
|
28
|
-
#Rufus::Json.backend = :active
|
29
|
-
|
30
|
-
|
31
|
-
To know if there is currently a backend set :
|
32
|
-
|
33
|
-
Rufus::Json.has_backend?
|
34
|
-
|
35
|
-
|
36
|
-
It's OK to load a lib and force detection :
|
37
|
-
|
38
|
-
require 'json'
|
39
|
-
Rufus::Json.detect_backend
|
40
|
-
|
41
|
-
p Rufus::Json.backend
|
42
|
-
# => :json
|
43
|
-
|
44
|
-
|
45
|
-
There is a dup method, it may be useful in an all JSON system (flattening stuff that will anyway get flattened later).
|
46
|
-
|
47
|
-
o = Rufus::Json.dup(o)
|
48
|
-
|
49
|
-
|
50
|
-
=== require 'rufus-json/automatic'
|
51
|
-
|
52
|
-
require 'rufus-json/automatic'
|
53
|
-
|
54
|
-
will require 'rufus-json' and load the first JSON lib available (in the order yajl, active_support, json, json/pure.
|
55
|
-
|
56
|
-
It is equivalent to
|
57
|
-
|
58
|
-
require 'rufus-json'
|
59
|
-
Rufus::Json.load_backend
|
60
|
-
|
61
|
-
(the .load_backend method accepts a list/order of backends to try).
|
62
|
-
|
63
|
-
|
64
|
-
== rdoc
|
65
|
-
|
66
|
-
http://rufus.rubyforge.org/rufus-json/
|
67
|
-
|
68
|
-
|
69
|
-
== mailing list
|
70
|
-
|
71
|
-
On the rufus-ruby list :
|
72
|
-
|
73
|
-
http://groups.google.com/group/rufus-ruby
|
74
|
-
|
75
|
-
|
76
|
-
== issue tracker
|
77
|
-
|
78
|
-
http://github.com/jmettraux/rufus-json/issues
|
79
|
-
|
80
|
-
|
81
|
-
== irc
|
82
|
-
|
83
|
-
irc.freenode.net #ruote
|
84
|
-
|
85
|
-
|
86
|
-
== the rest of Rufus
|
87
|
-
|
88
|
-
http://rufus.rubyforge.org
|
89
|
-
|
90
|
-
|
91
|
-
== authors
|
92
|
-
|
93
|
-
* John Mettraux, http://jmettraux.wordpress.com/
|
94
|
-
* Torsten Schoenebaum, https://github.com/tosch
|
95
|
-
|
96
|
-
|
97
|
-
== license
|
98
|
-
|
99
|
-
MIT
|
100
|
-
|