gravitext-util 1.6.b.0-java → 1.6.b.1-java
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/History.rdoc +6 -0
- data/Manifest.txt +1 -1
- data/Rakefile +4 -1
- data/lib/gravitext-util/{gravitext-util-1.6.b.0.jar → gravitext-util-1.6.b.1.jar} +0 -0
- data/lib/gravitext-util/unimap.rb +188 -31
- data/lib/gravitext-util/version.rb +1 -1
- data/pom.xml +1 -1
- data/test/test_ioutils.rb +25 -13
- data/test/test_unimap.rb +121 -21
- metadata +4 -4
data/History.rdoc
CHANGED
@@ -1,3 +1,9 @@
|
|
1
|
+
=== 1.6.b.1 (2012-2-7)
|
2
|
+
* Reworked UniMap Ruby extension: UniMap.is_a?( Hash ) with Hash
|
3
|
+
behavior including interop with string or symbol keys, to_json
|
4
|
+
support, improved performance.
|
5
|
+
* IOUtils, tests fixes for 1.9 mode
|
6
|
+
|
1
7
|
=== 1.6.b.0 (2012-1-29)
|
2
8
|
* New jruby IOUtils, sample extension, and perf test for optimizing
|
3
9
|
text-intensive interop.
|
data/Manifest.txt
CHANGED
data/Rakefile
CHANGED
@@ -4,4 +4,7 @@ require 'rubygems'
|
|
4
4
|
require 'bundler/setup'
|
5
5
|
require 'rjack-tarpit'
|
6
6
|
|
7
|
-
RJack::TarPit.new( 'gravitext-util' )
|
7
|
+
RJack::TarPit.new( 'gravitext-util' ) do |tp|
|
8
|
+
tp.rdoc_destinations <<
|
9
|
+
'dekellum@rubyforge.org:/var/www/gforge-projects/gravitext/gravitext-util'
|
10
|
+
end
|
Binary file
|
@@ -14,22 +14,22 @@
|
|
14
14
|
# permissions and limitations under the License.
|
15
15
|
#++
|
16
16
|
|
17
|
-
|
17
|
+
require 'gravitext-util/version'
|
18
18
|
|
19
|
-
|
19
|
+
# Magic loader hook -> HTMapService
|
20
|
+
require 'com/gravitext/jruby/HTMap'
|
20
21
|
|
21
|
-
|
22
|
-
import 'com.gravitext.htmap.UniMap'
|
22
|
+
module Gravitext::HTMap
|
23
23
|
|
24
|
-
|
25
|
-
|
26
|
-
# UniMap::KEY_SPACE
|
27
|
-
class UniMap
|
24
|
+
import 'com.gravitext.htmap.Key'
|
25
|
+
import 'com.gravitext.htmap.UniMap'
|
28
26
|
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
27
|
+
# Extension to com.gravitext.htmap.UniMap providing convenience
|
28
|
+
# methods, including ruby accessors for keys registered in
|
29
|
+
# UniMap::KEY_SPACE, and for ruby Hash and JSON compatibility.
|
30
|
+
class UniMap
|
31
|
+
|
32
|
+
class << self
|
33
33
|
|
34
34
|
# Create a new key in UniMap::KEY_SPACE. Useful for ruby-only keys
|
35
35
|
# or for keys passed as parameters to Java.
|
@@ -38,42 +38,199 @@ module Gravitext
|
|
38
38
|
# :vtype<~java_class>:: Java class value type (default: java.lang.Object)
|
39
39
|
# ==== Returns
|
40
40
|
# com.gravitext.htmap.Key
|
41
|
-
def
|
41
|
+
def create_key( name, vtype = Java::java.lang.Object )
|
42
42
|
KEY_SPACE.create_generic( name, vtype.java_class )
|
43
43
|
end
|
44
44
|
|
45
|
-
# Define accessors for each key currently in
|
46
|
-
#
|
47
|
-
#
|
48
|
-
#
|
49
|
-
#
|
50
|
-
#
|
51
|
-
|
45
|
+
# Define class constants and accessors for each key currently in
|
46
|
+
# the KEY_SPACE.
|
47
|
+
#
|
48
|
+
# To define accessors for keys defined in java, statically
|
49
|
+
# reference the containing class before calling this method. As
|
50
|
+
# Ruby's define_method is not likely thread safe, invoke during
|
51
|
+
# initialization in advance of starting threaded execution.
|
52
|
+
# May be called multiple times.
|
53
|
+
def define_accessors
|
54
|
+
|
55
|
+
klist = []
|
56
|
+
khash = {}
|
52
57
|
KEY_SPACE.keys.each do |key|
|
53
58
|
|
59
|
+
klist[ key.id ] = key.name.to_sym
|
60
|
+
|
61
|
+
khash[ key.name ] = key
|
62
|
+
khash[ key.name.to_sym ] = key
|
63
|
+
|
64
|
+
const = key.name.upcase
|
65
|
+
if const_defined?( const )
|
66
|
+
cval = const_get( const )
|
67
|
+
if cval != key
|
68
|
+
fail "Constant #{key} already set to incompatible value #{cval}"
|
69
|
+
end
|
70
|
+
else
|
71
|
+
const_set( const, key )
|
72
|
+
end
|
73
|
+
|
54
74
|
getter = key.name.downcase
|
55
75
|
unless method_defined?( getter )
|
56
|
-
|
76
|
+
class_eval <<-RUBY
|
77
|
+
def #{getter}
|
78
|
+
get_k( #{const} )
|
79
|
+
end
|
80
|
+
RUBY
|
57
81
|
end
|
58
82
|
|
59
83
|
setter = getter + '='
|
60
84
|
unless method_defined?( setter )
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
define_method( setter ) do |value|
|
65
|
-
set( key, ( ctype.new( value ) if value ) )
|
85
|
+
class_eval <<-RUBY
|
86
|
+
def #{setter}( value )
|
87
|
+
set_k( #{const}, value )
|
66
88
|
end
|
67
|
-
|
68
|
-
define_method( setter ) do |value|
|
69
|
-
set( key, value )
|
70
|
-
end
|
71
|
-
end
|
89
|
+
RUBY
|
72
90
|
end
|
73
91
|
|
74
92
|
end
|
93
|
+
|
94
|
+
@key_list = klist.freeze # key name symbols array indexed by key.id
|
95
|
+
@key_hash = khash.freeze # Hash of symbols,strings to Key
|
96
|
+
end
|
97
|
+
|
98
|
+
# Return cached symbol for the specified key (8bit optimized).
|
99
|
+
# Must have define_accessors for the key first.
|
100
|
+
def key_to_symbol( key )
|
101
|
+
@key_list.at( key.id )
|
102
|
+
end
|
103
|
+
|
104
|
+
# Return Key for specified string name or symbol (8bit optimized)
|
105
|
+
# Must have define_accessors for the key first.
|
106
|
+
def str_to_key( str )
|
107
|
+
@key_hash[ str ]
|
75
108
|
end
|
76
109
|
|
110
|
+
# Recursive UniMap#deep_hash implementation
|
111
|
+
def deep_hash( m )
|
112
|
+
case m
|
113
|
+
when UniMap
|
114
|
+
m.inject( {} ) do |o, (k, v)|
|
115
|
+
o[ key_to_symbol( k ) ] = deep_hash( v )
|
116
|
+
o
|
117
|
+
end
|
118
|
+
when Array
|
119
|
+
m.map { |v| deep_hash( v ) }
|
120
|
+
else
|
121
|
+
m
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
end
|
126
|
+
|
127
|
+
# Set key to value, where key may be a Key, String, or Symbol.
|
128
|
+
# Returns prior value or nil.
|
129
|
+
def set( key, value )
|
130
|
+
unless key.is_a?( Key )
|
131
|
+
k = UniMap.str_to_key( key )
|
132
|
+
unless k
|
133
|
+
raise IndexError, "No Key named #{key.inspect} in UniMap.KEY_SPACE"
|
134
|
+
end
|
135
|
+
key = k
|
136
|
+
end
|
137
|
+
set_k( key, value )
|
138
|
+
end
|
139
|
+
|
140
|
+
# Set key<Key> to value, returning prior value or nil.
|
141
|
+
def set_k( key, value )
|
142
|
+
HTMapHelper.set_map( self, key, value )
|
143
|
+
end
|
144
|
+
|
145
|
+
alias :[]= :set
|
146
|
+
|
147
|
+
# Get key value or nil, where key may be a Key, String, or Symbol
|
148
|
+
def get( key )
|
149
|
+
key = UniMap.str_to_key( key ) unless key.is_a?( Key )
|
150
|
+
key && get_k( key )
|
151
|
+
end
|
152
|
+
|
153
|
+
# Get Key value or nil
|
154
|
+
def get_k( key )
|
155
|
+
HTMapHelper.get_map( self, key )
|
156
|
+
end
|
157
|
+
|
158
|
+
alias :[] :get
|
159
|
+
|
160
|
+
# Remove the specified key, where key may be a Key, String, or
|
161
|
+
# Symbol. Returning old value or nil.
|
162
|
+
def remove( key )
|
163
|
+
key = UniMap.str_to_key( key ) unless key.is_a?( Key )
|
164
|
+
key && HTMapHelper.remove_map( self, key )
|
165
|
+
end
|
166
|
+
|
167
|
+
alias :delete :remove
|
168
|
+
|
169
|
+
# Is this key set, not nil, where key may be a Key, String, or
|
170
|
+
# Symbol.
|
171
|
+
def has_key?( key )
|
172
|
+
key = UniMap.str_to_key( key ) unless key.is_a?( Key )
|
173
|
+
key && contains_key( key )
|
174
|
+
end
|
175
|
+
|
176
|
+
alias :include? :has_key?
|
177
|
+
alias :key? :has_key?
|
178
|
+
alias :member? :has_key?
|
179
|
+
|
180
|
+
# Calls block with (Key, value) for each non-nil value
|
181
|
+
def each( &block )
|
182
|
+
HTMapHelper.unimap_each( self, &block )
|
183
|
+
end
|
184
|
+
|
185
|
+
# Return self as array of [ key.to_sym, value ] arrays
|
186
|
+
def to_a
|
187
|
+
map { |key,val| [ UniMap.key_to_symbol( key ), val ] }
|
188
|
+
end
|
189
|
+
|
190
|
+
# Returns self as Hash, with symbols for keys
|
191
|
+
def to_hash
|
192
|
+
h = {}
|
193
|
+
each do |key,val|
|
194
|
+
h[ UniMap.key_to_symbol( key ) ] = val
|
195
|
+
end
|
196
|
+
h
|
197
|
+
end
|
198
|
+
|
199
|
+
# Like to_hash but converts all nested UniMaps to hashes as well.
|
200
|
+
def deep_hash
|
201
|
+
UniMap.deep_hash( self )
|
202
|
+
end
|
203
|
+
|
204
|
+
# Merge other (Hash or UniMap) and return new UniMap. Any nil
|
205
|
+
# values from other Hash will result in removing the associated
|
206
|
+
# key.
|
207
|
+
def merge( other )
|
208
|
+
clone.merge!( other )
|
209
|
+
end
|
210
|
+
|
211
|
+
# Merge other (Hash or UniMap) values to self. Any nil values from
|
212
|
+
# other Hash will result in removing key from self.
|
213
|
+
def merge!( other )
|
214
|
+
other.each do |k,v|
|
215
|
+
set( k, v )
|
216
|
+
end
|
217
|
+
self
|
218
|
+
end
|
219
|
+
|
220
|
+
# To JSON, in form supported by JSON module. Note that this only
|
221
|
+
# works if you also require 'json' yourself.
|
222
|
+
def to_json(*args)
|
223
|
+
to_hash.to_json(*args)
|
224
|
+
end
|
225
|
+
|
226
|
+
# Override: this is a Hash as well.
|
227
|
+
def kind_of?( klass )
|
228
|
+
( klass == Hash ) || super
|
229
|
+
end
|
230
|
+
|
231
|
+
# Override: this is a Hash as well.
|
232
|
+
def is_a?( klass )
|
233
|
+
( klass == Hash ) || super
|
77
234
|
end
|
78
235
|
|
79
236
|
end
|
data/pom.xml
CHANGED
data/test/test_ioutils.rb
CHANGED
@@ -35,14 +35,16 @@ class TestIOUtils < MiniTest::Unit::TestCase
|
|
35
35
|
|
36
36
|
assert_instance_of( String, ts.string )
|
37
37
|
# IF to UTF-8 bytes, will be longer than 300
|
38
|
-
|
38
|
+
assert_length( ts.string, 300 )
|
39
39
|
|
40
40
|
assert_instance_of( String, ts.string_sequence )
|
41
|
-
|
41
|
+
assert_length( ts.string_sequence, 300 )
|
42
42
|
|
43
|
-
if JRUBY_VERSION =~ /^1.7/
|
44
|
-
|
45
|
-
|
43
|
+
if JRUBY_VERSION =~ /^1.7/ && RUBY_VERSION =~ /^1.9/
|
44
|
+
# Skipping these due to changing nature (have seen these asserts
|
45
|
+
# work, and not)
|
46
|
+
# assert_instance_of( String, ts.char_buffer )
|
47
|
+
# assert_instance_of( String, ts.char_buffer_sequence )
|
46
48
|
else
|
47
49
|
# In Jruby < 1.7, CharBuffer isn't converted to String until
|
48
50
|
# to_s
|
@@ -51,23 +53,24 @@ class TestIOUtils < MiniTest::Unit::TestCase
|
|
51
53
|
assert_equal( 'java.nio.HeapCharBuffer',
|
52
54
|
ts.char_buffer_sequence.java_class.name )
|
53
55
|
end
|
54
|
-
|
55
|
-
|
56
|
+
assert_length( ts.char_buffer.to_s, 300 )
|
57
|
+
assert_length( ts.char_buffer_sequence.to_s, 300 )
|
56
58
|
|
57
|
-
|
59
|
+
assert_length( ts.byte_list.to_s, 300 )
|
58
60
|
|
59
61
|
s = String.from_java_bytes( ts.bytes )
|
60
62
|
assert_instance_of( String, s )
|
61
|
-
|
63
|
+
s.force_encoding( "UTF-8" ) if s.respond_to?( :force_encoding )
|
64
|
+
assert_length( s.to_s, 300 )
|
62
65
|
end
|
63
66
|
|
64
67
|
def test_ruby_sampler
|
65
68
|
rs = RubySampler.new( 300, 2 )
|
66
69
|
assert_instance_of( String, rs.char_buffer_to_ruby )
|
67
|
-
|
70
|
+
assert_length( rs.char_buffer_to_ruby, 300 )
|
68
71
|
|
69
72
|
assert_instance_of( String, rs.string_to_ruby )
|
70
|
-
|
73
|
+
assert_length( rs.string_to_ruby, 300 )
|
71
74
|
end
|
72
75
|
|
73
76
|
def test_ruby_sample_helper
|
@@ -75,10 +78,19 @@ class TestIOUtils < MiniTest::Unit::TestCase
|
|
75
78
|
rs = RubySampleHelper
|
76
79
|
|
77
80
|
assert_instance_of( String, rs.char_buffer_to_ruby( ts ) )
|
78
|
-
|
81
|
+
assert_length( rs.char_buffer_to_ruby( ts ), 300 )
|
79
82
|
|
80
83
|
assert_instance_of( String, rs.string_to_ruby( ts ) )
|
81
|
-
|
84
|
+
assert_length( rs.string_to_ruby( ts ), 300 )
|
85
|
+
end
|
86
|
+
|
87
|
+
def assert_length( str, char_length )
|
88
|
+
if RUBY_VERSION =~ /^1.9/
|
89
|
+
assert_operator( str.bytesize, :>, char_length )
|
90
|
+
assert_operator( str.length , :==, char_length )
|
91
|
+
else
|
92
|
+
assert_operator( str.length , :>, char_length )
|
93
|
+
end
|
82
94
|
end
|
83
95
|
|
84
96
|
end
|
data/test/test_unimap.rb
CHANGED
@@ -20,17 +20,20 @@
|
|
20
20
|
require File.join( File.dirname( __FILE__ ), "setup" )
|
21
21
|
|
22
22
|
require 'gravitext-util'
|
23
|
+
require 'json'
|
23
24
|
|
24
25
|
class TestUniMap < MiniTest::Unit::TestCase
|
25
26
|
include Gravitext::HTMap
|
26
27
|
|
27
|
-
TEST_KEYS = [ [ '
|
28
|
-
[ '
|
29
|
-
[ '
|
30
|
-
[ '
|
31
|
-
[ '
|
32
|
-
[ '
|
33
|
-
[ '
|
28
|
+
TEST_KEYS = [ [ 'int', Java::java.lang.Integer, 33 ],
|
29
|
+
[ 'str', Java::java.lang.String, "string" ],
|
30
|
+
[ 'cseq', Java::java.lang.CharSequence, "other" ],
|
31
|
+
[ 'date', Java::java.util.Date, Time.now ],
|
32
|
+
[ 'dbl', Java::java.lang.Double, 3.1415 ],
|
33
|
+
[ 'flt', Java::java.lang.Float, 1.5625 ], #exact
|
34
|
+
[ 'list', Java::java.util.List, [ 1, 2, 3 ] ],
|
35
|
+
[ 'sub', Java::com.gravitext.htmap.UniMap, UniMap.new ],
|
36
|
+
[ 'any', Java::java.lang.Object, { :foo => 'bar' } ] ]
|
34
37
|
|
35
38
|
WRONG_TYPE_VALUE = Java::java.lang.RuntimeException.new
|
36
39
|
|
@@ -42,29 +45,34 @@ class TestUniMap < MiniTest::Unit::TestCase
|
|
42
45
|
|
43
46
|
LOG = RJack::SLF4J[ name ]
|
44
47
|
|
48
|
+
def test_define_accessors
|
49
|
+
UniMap.define_accessors
|
50
|
+
pass( "define accessors can be called repeatedly." )
|
51
|
+
end
|
52
|
+
|
45
53
|
## Manual tests
|
46
54
|
|
47
55
|
# Full integer test for demonstration
|
48
|
-
def
|
56
|
+
def test_int
|
49
57
|
c = UniMap.new
|
50
|
-
assert_nil( c.
|
51
|
-
c.
|
52
|
-
assert_equal( 7, c.
|
53
|
-
c.
|
54
|
-
assert_nil( c.
|
55
|
-
assert_raises
|
56
|
-
c.
|
58
|
+
assert_nil( c.int )
|
59
|
+
c.int = 7
|
60
|
+
assert_equal( 7, c.int )
|
61
|
+
c.int = nil
|
62
|
+
assert_nil( c.int )
|
63
|
+
assert_raises( TypeError ) do
|
64
|
+
c.int = WRONG_TYPE_VALUE
|
57
65
|
end
|
58
66
|
end
|
59
67
|
|
60
68
|
# Java.util.Date comparison is tricky
|
61
|
-
def
|
69
|
+
def test_date
|
62
70
|
c = UniMap.new
|
63
|
-
c.
|
64
|
-
assert( c.
|
71
|
+
c.date = now = Time.now
|
72
|
+
assert( c.date.equals( now ) )
|
65
73
|
end
|
66
74
|
|
67
|
-
# Define test_<
|
75
|
+
# Define test_<key> for all not manually defined above
|
68
76
|
TEST_KEYS.each do |name, vtype, test_value, key|
|
69
77
|
get = name
|
70
78
|
set = name + '='
|
@@ -74,13 +82,14 @@ class TestUniMap < MiniTest::Unit::TestCase
|
|
74
82
|
c = UniMap.new
|
75
83
|
assert_nil( c.send( get ) )
|
76
84
|
assert_nil( c.send( set, test_value ) )
|
85
|
+
assert_equal( test_value, c.set( key, test_value ) )
|
77
86
|
assert_equal( test_value, c.send( get ) )
|
78
87
|
assert_equal( test_value, c.get( key ) )
|
79
88
|
assert_equal( test_value, c.send( set, nil ) )
|
80
89
|
assert_nil( c.send( get ) )
|
81
|
-
assert_raises
|
90
|
+
assert_raises( TypeError ) do
|
82
91
|
c.send( set, WRONG_TYPE_VALUE )
|
83
|
-
end
|
92
|
+
end unless key.name == 'any'
|
84
93
|
assert_nil( c.send( get ) )
|
85
94
|
end
|
86
95
|
end
|
@@ -92,4 +101,95 @@ class TestUniMap < MiniTest::Unit::TestCase
|
|
92
101
|
c.methods.sort.select { |m| m =~ /[^=]=$/ }.join( " " ) )
|
93
102
|
end
|
94
103
|
|
104
|
+
# Only tests below use this setup of a nested @sample structure.
|
105
|
+
def setup
|
106
|
+
@sample = UniMap.new
|
107
|
+
TEST_KEYS.each do |k,_,v|
|
108
|
+
@sample.send( "#{k}=", v ) if v
|
109
|
+
end
|
110
|
+
@sample.list = (1..2).map do |i|
|
111
|
+
UniMap.new.tap do |m|
|
112
|
+
m.int = i
|
113
|
+
m.str = i.to_s
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
@sample.sub = @sample.dup
|
118
|
+
end
|
119
|
+
|
120
|
+
def test_to_hash
|
121
|
+
h = @sample.to_hash
|
122
|
+
|
123
|
+
assert_equal( 33, h[ :int ], "to_hash should have symbol keys" )
|
124
|
+
assert_nil( h[ 'int' ], "to_hash should not have string keys" )
|
125
|
+
assert_equal( Hash[ @sample.to_a ], h, "to_a, to_hash agree" )
|
126
|
+
end
|
127
|
+
|
128
|
+
def test_is_a_hash
|
129
|
+
assert_kind_of( Hash, @sample )
|
130
|
+
assert( @sample.is_a?( Hash ) )
|
131
|
+
end
|
132
|
+
|
133
|
+
def test_membership
|
134
|
+
assert( @sample.has_key?( :int ) )
|
135
|
+
assert( @sample.include?( 'int' ) )
|
136
|
+
assert( @sample.key?( :str ) )
|
137
|
+
assert( @sample.member?( :str ) )
|
138
|
+
end
|
139
|
+
|
140
|
+
def test_unmapped_keys
|
141
|
+
refute( @sample.has_key?( :non_existing ) )
|
142
|
+
refute( @sample.has_key?( 'non_existing' ) )
|
143
|
+
assert_nil( @sample.remove( :non_existing ) )
|
144
|
+
assert_nil( @sample.get( :non_existing ) )
|
145
|
+
assert_raises( IndexError ) do
|
146
|
+
@sample.set( :non_existing, 'value' )
|
147
|
+
end
|
148
|
+
end
|
149
|
+
|
150
|
+
def test_brackets
|
151
|
+
assert_equal( 33, @sample[ 'int' ] )
|
152
|
+
assert_equal( 33, @sample[ :int ] )
|
153
|
+
|
154
|
+
assert_equal( 66, @sample[ :int ] = 66 )
|
155
|
+
assert_equal( 66, @sample[ :int ] )
|
156
|
+
end
|
157
|
+
|
158
|
+
def test_merge
|
159
|
+
m = @sample.merge( :int => 66, 'str' => "new" )
|
160
|
+
assert_equal( 33, @sample.int )
|
161
|
+
assert_equal( "string", @sample.str )
|
162
|
+
assert_equal( 66, m.int )
|
163
|
+
assert_equal( "new", m.str )
|
164
|
+
|
165
|
+
n = @sample.merge( m )
|
166
|
+
assert_equal( 66, n.int )
|
167
|
+
assert_equal( "new", n.str )
|
168
|
+
end
|
169
|
+
|
170
|
+
def test_merge_bang
|
171
|
+
@sample.merge!( :int => 66, :str => "new" )
|
172
|
+
assert_equal( 66, @sample.int )
|
173
|
+
assert_equal( "new", @sample.str )
|
174
|
+
end
|
175
|
+
|
176
|
+
def test_json
|
177
|
+
|
178
|
+
assert_equal( @sample.deep_hash.to_json, @sample.to_json )
|
179
|
+
refute_match( /int1/, @sample.to_json )
|
180
|
+
|
181
|
+
json = JSON.pretty_generate( @sample )
|
182
|
+
pass
|
183
|
+
|
184
|
+
LOG.debug { "JSON.pretty_generate:\n#{json}" }
|
185
|
+
|
186
|
+
s = @sample.clone
|
187
|
+
s.remove( :date ) #would otherwise roundtrip as string
|
188
|
+
s.delete( :sub ) #also has a date
|
189
|
+
|
190
|
+
assert_equal( s.deep_hash,
|
191
|
+
JSON.parse( s.to_json, :symbolize_names => true ) )
|
192
|
+
|
193
|
+
end
|
194
|
+
|
95
195
|
end
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: gravitext-util
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease: 4
|
5
|
-
version: 1.6.b.
|
5
|
+
version: 1.6.b.1
|
6
6
|
platform: java
|
7
7
|
authors:
|
8
8
|
- David Kellum
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2012-
|
13
|
+
date: 2012-02-08 00:00:00 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rjack-slf4j
|
@@ -86,7 +86,7 @@ files:
|
|
86
86
|
- test/test_ioutils.rb
|
87
87
|
- test/test_perftest.rb
|
88
88
|
- test/test_unimap.rb
|
89
|
-
- lib/gravitext-util/gravitext-util-1.6.b.
|
89
|
+
- lib/gravitext-util/gravitext-util-1.6.b.1.jar
|
90
90
|
homepage: http://gravitext.rubyforge.org
|
91
91
|
licenses: []
|
92
92
|
|
@@ -114,7 +114,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
114
114
|
requirements: []
|
115
115
|
|
116
116
|
rubyforge_project:
|
117
|
-
rubygems_version: 1.8.
|
117
|
+
rubygems_version: 1.8.15
|
118
118
|
signing_key:
|
119
119
|
specification_version: 3
|
120
120
|
summary: A collection of core java utilities, many with jruby adaptions.
|