json-schema 0.9.3 → 0.9.4

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/README.textile CHANGED
@@ -22,7 +22,7 @@ From the git repo:
22
22
 
23
23
  <pre>
24
24
  $ gem build json-schema.gemspec
25
- $ gem install json-schema-0.9.3.gem
25
+ $ gem install json-schema-0.9.4.gem
26
26
  </pre>
27
27
 
28
28
 
@@ -118,7 +118,7 @@ JSON::Validator.validate(schema, data, :version => :draft2)
118
118
  </pre>
119
119
 
120
120
 
121
- h3. Extend an existing schema and validating against it
121
+ h3. Extend an existing schema and validate against it
122
122
 
123
123
  For this example, we are going to extend the "JSON Schema Draft 3":http://tools.ietf.org/html/draft-zyp-json-schema-03 specification by adding a 'bitwise-and' property for validation.
124
124
 
@@ -28,360 +28,256 @@ require 'digest/md5'
28
28
  require 'digest/sha1'
29
29
  require 'tmpdir'
30
30
 
31
- # Pure ruby UUID generator, which is compatible with RFC4122
32
- UUID = Struct.new :raw_bytes
33
-
34
- class UUID
35
- private_class_method :new
36
-
37
- class << self
38
- def mask19 v, str # :nodoc
39
- nstr = str.bytes.to_a
40
- version = [0, 16, 32, 48, 64, 80][v]
41
- nstr[6] &= 0b00001111
42
- nstr[6] |= version
43
- # nstr[7] &= 0b00001111
44
- # nstr[7] |= 0b01010000
45
- nstr[8] &= 0b00111111
46
- nstr[8] |= 0b10000000
47
- str = ''
48
- nstr.each { |s| str << s.chr }
49
- str
50
- end
51
-
52
- def mask18 v, str # :nodoc
53
- version = [0, 16, 32, 48, 64, 80][v]
54
- str[6] &= 0b00001111
55
- str[6] |= version
56
- # str[7] &= 0b00001111
57
- # str[7] |= 0b01010000
58
- str[8] &= 0b00111111
59
- str[8] |= 0b10000000
60
- str
61
- end
62
-
63
- def mask v, str
64
- if RUBY_VERSION >= "1.9.0"
65
- return mask19 v, str
66
- else
67
- return mask18 v, str
68
- end
69
- end
70
- private :mask, :mask18, :mask19
71
-
72
- # UUID generation using SHA1. Recommended over create_md5.
73
- # Namespace object is another UUID, some of them are pre-defined below.
74
- def create_sha1 str, namespace
75
- sha1 = Digest::SHA1.new
76
- sha1.update namespace.raw_bytes
77
- sha1.update str
78
- sum = sha1.digest
79
- raw = mask 5, sum[0..15]
80
- ret = new raw
81
- ret.freeze
82
- ret
83
- end
84
- alias :create_v5 :create_sha1
85
-
86
- # UUID generation using MD5 (for backward compat.)
87
- def create_md5 str, namespace
88
- md5 = Digest::MD5.new
89
- md5.update namespace.raw_bytes
90
- md5.update str
91
- sum = md5.digest
92
- raw = mask 3, sum[0..16]
93
- ret = new raw
94
- ret.freeze
95
- ret
96
- end
97
- alias :create_v3 :create_md5
98
-
99
- # UUID generation using random-number generator. From it's random
100
- # nature, there's no warranty that the created ID is really universaly
101
- # unique.
102
- def create_random
103
- rnd = [
104
- rand(0x100000000),
105
- rand(0x100000000),
106
- rand(0x100000000),
107
- rand(0x100000000),
108
- ].pack "N4"
109
- raw = mask 4, rnd
110
- ret = new raw
111
- ret.freeze
112
- ret
113
- end
114
- alias :create_v4 :create_random
115
-
116
- def read_state fp # :nodoc:
117
- fp.rewind
118
- Marshal.load fp.read
119
- end
120
-
121
- def write_state fp, c, m # :nodoc:
122
- fp.rewind
123
- str = Marshal.dump [c, m]
124
- fp.write str
125
- end
126
-
127
- private :read_state, :write_state
128
- STATE_FILE = 'ruby-uuid'
129
-
130
- # create the "version 1" UUID with current system clock, current UTC
131
- # timestamp, and the IEEE 802 address (so-called MAC address).
132
- #
133
- # Speed notice: it's slow. It writes some data into hard drive on every
134
- # invokation. If you want to speed this up, try remounting tmpdir with a
135
- # memory based filesystem (such as tmpfs). STILL slow? then no way but
136
- # rewrite it with c :)
137
- def create clock=nil, time=nil, mac_addr=nil
138
- c = t = m = nil
139
- Dir.chdir Dir.tmpdir do
140
- unless FileTest.exist? STATE_FILE then
141
- # Generate a pseudo MAC address because we have no pure-ruby way
142
- # to know the MAC address of the NIC this system uses. Note
143
- # that cheating with pseudo arresses here is completely legal:
144
- # see Section 4.5 of RFC4122 for details.
145
- sha1 = Digest::SHA1.new
146
- 256.times do
147
- r = [rand(0x100000000)].pack "N"
148
- sha1.update r
149
- end
150
- str = sha1.digest
151
- r = rand 14 # 20-6
152
- node = str[r, 6] || str
153
- if RUBY_VERSION >= "1.9.0"
154
- nnode = node.bytes.to_a
155
- nnode[0] |= 0x01
156
- node = ''
157
- nnode.each { |s| node << s.chr }
158
- else
159
- node[0] |= 0x01 # multicast bit
160
- end
161
- k = rand 0x40000
162
- open STATE_FILE, 'w' do |fp|
163
- fp.flock IO::LOCK_EX
164
- write_state fp, k, node
165
- fp.chmod 0o777 # must be world writable
166
- end
167
- end
168
- open STATE_FILE, 'r+' do |fp|
169
- fp.flock IO::LOCK_EX
170
- c, m = read_state fp
171
- c = clock % 0x4000 if clock
172
- m = mac_addr if mac_addr
173
- t = time
174
- if t.nil? then
175
- # UUID epoch is 1582/Oct/15
176
- tt = Time.now
177
- t = tt.to_i*10000000 + tt.tv_usec*10 + 0x01B21DD213814000
178
- end
179
- c = c.succ # important; increment here
180
- write_state fp, c, m
181
- end
182
- end
183
-
184
- tl = t & 0xFFFF_FFFF
185
- tm = t >> 32
186
- tm = tm & 0xFFFF
187
- th = t >> 48
188
- th = th & 0x0FFF
189
- th = th | 0x1000
190
- cl = c & 0xFF
191
- ch = c & 0x3F00
192
- ch = ch >> 8
193
- ch = ch | 0x80
194
- pack tl, tm, th, cl, ch, m
195
- end
196
- alias :create_v1 :create
197
-
198
- # A simple GUID parser: just ignores unknown characters and convert
199
- # hexadecimal dump into 16-octet object.
200
- def parse obj
201
- str = obj.to_s.sub %r/\Aurn:uuid:/, ''
202
- str.gsub! %r/[^0-9A-Fa-f]/, ''
203
- raw = str[0..31].lines.to_a.pack 'H*'
204
- ret = new raw
205
- ret.freeze
206
- ret
207
- end
208
-
209
- # The 'primitive constructor' of this class
210
- # Note UUID.pack(uuid.unpack) == uuid
211
- def pack tl, tm, th, ch, cl, n
212
- raw = [tl, tm, th, ch, cl, n].pack "NnnCCa6"
213
- ret = new raw
214
- ret.freeze
215
- ret
216
- end
217
- end
218
-
219
- # The 'primitive deconstructor', or the dual to pack.
220
- # Note UUID.pack(uuid.unpack) == uuid
221
- def unpack
222
- raw_bytes.unpack "NnnCCa6"
223
- end
224
-
225
- # Generate the string representation (a.k.a GUID) of this UUID
226
- def to_s
227
- a = unpack
228
- tmp = a[-1].unpack 'C*'
229
- a[-1] = sprintf '%02x%02x%02x%02x%02x%02x', *tmp
230
- "%08x-%04x-%04x-%02x%02x-%s" % a
231
- end
232
- alias guid to_s
233
-
234
- # Convert into a RFC4122-comforming URN representation
235
- def to_uri
236
- "urn:uuid:" + self.to_s
237
- end
238
- alias urn to_uri
239
-
240
- # Convert into 128-bit unsigned integer
241
- # Typically a Bignum instance, but can be a Fixnum.
242
- def to_int
243
- tmp = self.raw_bytes.unpack "C*"
244
- tmp.inject do |r, i|
245
- r * 256 | i
246
- end
247
- end
248
- alias to_i to_int
249
-
250
- # Gets the version of this UUID
251
- # returns nil if bad version
252
- def version
253
- a = unpack
254
- v = (a[2] & 0xF000).to_s(16)[0].chr.to_i
255
- return v if (1..5).include? v
256
- return nil
257
- end
258
-
259
- # Two UUIDs are said to be equal if and only if their (byte-order
260
- # canonicalized) integer representations are equivallent. Refer RFC4122 for
261
- # details.
262
- def == other
263
- to_i == other.to_i
264
- end
265
-
266
- include Comparable
267
- # UUIDs are comparable (don't know what benefits are there, though).
268
- def <=> other
269
- to_s <=> other.to_s
270
- end
271
-
272
- # Pre-defined UUID Namespaces described in RFC4122 Appendix C.
273
- NameSpace_DNS = parse "6ba7b810-9dad-11d1-80b4-00c04fd430c8"
274
- NameSpace_URL = parse "6ba7b811-9dad-11d1-80b4-00c04fd430c8"
275
- NameSpace_OID = parse "6ba7b812-9dad-11d1-80b4-00c04fd430c8"
276
- NameSpace_X500 = parse "6ba7b814-9dad-11d1-80b4-00c04fd430c8"
277
-
278
- # The Nil UUID in RFC4122 Section 4.1.7
279
- Nil = parse "00000000-0000-0000-0000-000000000000"
280
- end
281
-
282
- __END__
283
- if __FILE__ == $0 then
284
- require 'test/unit'
285
-
286
- class TC_UUID < Test::Unit::TestCase
287
- def test_v1
288
- u1 = UUID.create
289
- u2 = UUID.create
290
- assert_not_equal u1, u2
291
- end
292
-
293
- def test_v1_repeatability
294
- u1 = UUID.create 1, 2, "345678"
295
- u2 = UUID.create 1, 2, "345678"
296
- assert_equal u1, u2
297
- end
298
-
299
- def test_v3
300
- u1 = UUID.create_md5 "foo", UUID::NameSpace_DNS
301
- u2 = UUID.create_md5 "foo", UUID::NameSpace_DNS
302
- u3 = UUID.create_md5 "foo", UUID::NameSpace_URL
303
- assert_equal u1, u2
304
- assert_not_equal u1, u3
305
- end
306
-
307
- def test_v5
308
- u1 = UUID.create_sha1 "foo", UUID::NameSpace_DNS
309
- u2 = UUID.create_sha1 "foo", UUID::NameSpace_DNS
310
- u3 = UUID.create_sha1 "foo", UUID::NameSpace_URL
311
- assert_equal u1, u2
312
- assert_not_equal u1, u3
313
- end
314
-
315
- def test_v4
316
- # This test is not perfect, because the random nature of version 4
317
- # UUID it is not always true that the three objects below really
318
- # differ. But in real life it's enough to say we're OK when this
319
- # passes.
320
- u1 = UUID.create_random
321
- u2 = UUID.create_random
322
- u3 = UUID.create_random
323
- assert_not_equal u1.raw_bytes, u2.raw_bytes
324
- assert_not_equal u1.raw_bytes, u3.raw_bytes
325
- assert_not_equal u2.raw_bytes, u3.raw_bytes
326
- end
327
-
328
- def test_pack
329
- u1 = UUID.pack 0x6ba7b810, 0x9dad, 0x11d1, 0x80, 0xb4,
330
- "\000\300O\3240\310"
331
- assert_equal UUID::NameSpace_DNS, u1
332
- end
333
-
334
- def test_unpack
335
- tl, tm, th, cl, ch, m = UUID::NameSpace_DNS.unpack
336
- assert_equal 0x6ba7b810, tl
337
- assert_equal 0x9dad, tm
338
- assert_equal 0x11d1, th
339
- assert_equal 0x80, cl
340
- assert_equal 0xb4, ch
341
- assert_equal "\000\300O\3240\310", m
342
- end
343
-
344
- def test_parse
345
- u1 = UUID.pack 0x6ba7b810, 0x9dad, 0x11d1, 0x80, 0xb4,
346
- "\000\300O\3240\310"
347
- u2 = UUID.parse "6ba7b810-9dad-11d1-80b4-00c04fd430c8"
348
- u3 = UUID.parse "urn:uuid:6ba7b810-9dad-11d1-80b4-00c04fd430c8"
349
- assert_equal u1, u2
350
- assert_equal u1, u3
351
- end
352
-
353
- def test_to_s
354
- u1 = UUID.parse "6ba7b810-9dad-11d1-80b4-00c04fd430c8"
355
- assert_equal "6ba7b810-9dad-11d1-80b4-00c04fd430c8", u1.to_s
356
- end
357
-
358
- def test_to_i
359
- u1 = UUID.parse "6ba7b810-9dad-11d1-80b4-00c04fd430c8"
360
- assert_equal 0x6ba7b8109dad11d180b400c04fd430c8, u1.to_i
361
- end
362
-
363
- def test_version
364
- u1 = UUID.create_v1
365
- assert_equal 1, u1.version
366
- u3 = UUID.create_v3 "foo", UUID::NameSpace_DNS
367
- assert_equal 3, u3.version
368
- u4 = UUID.create_v4
369
- assert_equal 4, u4.version
370
- u5 = UUID.create_v5 "foo", UUID::NameSpace_DNS
371
- assert_equal 5, u5.version
372
- end
373
- end
374
- end
375
-
376
-
377
-
378
- # Local Variables:
379
- # mode: ruby
380
- # code: utf-8
381
- # indent-tabs-mode: t
382
- # tab-width: 3
383
- # ruby-indent-level: 3
384
- # fill-column: 79
385
- # default-justification: full
386
- # End:
387
- # vi: ts=3 sw=3
31
+ module SimpleUUID
32
+
33
+ # Pure ruby UUID generator, which is compatible with RFC4122
34
+ UUID = Struct.new :raw_bytes
35
+
36
+ class UUID
37
+ private_class_method :new
38
+
39
+ class << self
40
+ def mask19 v, str # :nodoc
41
+ nstr = str.bytes.to_a
42
+ version = [0, 16, 32, 48, 64, 80][v]
43
+ nstr[6] &= 0b00001111
44
+ nstr[6] |= version
45
+ # nstr[7] &= 0b00001111
46
+ # nstr[7] |= 0b01010000
47
+ nstr[8] &= 0b00111111
48
+ nstr[8] |= 0b10000000
49
+ str = ''
50
+ nstr.each { |s| str << s.chr }
51
+ str
52
+ end
53
+
54
+ def mask18 v, str # :nodoc
55
+ version = [0, 16, 32, 48, 64, 80][v]
56
+ str[6] &= 0b00001111
57
+ str[6] |= version
58
+ # str[7] &= 0b00001111
59
+ # str[7] |= 0b01010000
60
+ str[8] &= 0b00111111
61
+ str[8] |= 0b10000000
62
+ str
63
+ end
64
+
65
+ def mask v, str
66
+ if RUBY_VERSION >= "1.9.0"
67
+ return mask19 v, str
68
+ else
69
+ return mask18 v, str
70
+ end
71
+ end
72
+ private :mask, :mask18, :mask19
73
+
74
+ # UUID generation using SHA1. Recommended over create_md5.
75
+ # Namespace object is another UUID, some of them are pre-defined below.
76
+ def create_sha1 str, namespace
77
+ sha1 = Digest::SHA1.new
78
+ sha1.update namespace.raw_bytes
79
+ sha1.update str
80
+ sum = sha1.digest
81
+ raw = mask 5, sum[0..15]
82
+ ret = new raw
83
+ ret.freeze
84
+ ret
85
+ end
86
+ alias :create_v5 :create_sha1
87
+
88
+ # UUID generation using MD5 (for backward compat.)
89
+ def create_md5 str, namespace
90
+ md5 = Digest::MD5.new
91
+ md5.update namespace.raw_bytes
92
+ md5.update str
93
+ sum = md5.digest
94
+ raw = mask 3, sum[0..16]
95
+ ret = new raw
96
+ ret.freeze
97
+ ret
98
+ end
99
+ alias :create_v3 :create_md5
100
+
101
+ # UUID generation using random-number generator. From it's random
102
+ # nature, there's no warranty that the created ID is really universaly
103
+ # unique.
104
+ def create_random
105
+ rnd = [
106
+ rand(0x100000000),
107
+ rand(0x100000000),
108
+ rand(0x100000000),
109
+ rand(0x100000000),
110
+ ].pack "N4"
111
+ raw = mask 4, rnd
112
+ ret = new raw
113
+ ret.freeze
114
+ ret
115
+ end
116
+ alias :create_v4 :create_random
117
+
118
+ def read_state fp # :nodoc:
119
+ fp.rewind
120
+ Marshal.load fp.read
121
+ end
122
+
123
+ def write_state fp, c, m # :nodoc:
124
+ fp.rewind
125
+ str = Marshal.dump [c, m]
126
+ fp.write str
127
+ end
128
+
129
+ private :read_state, :write_state
130
+ STATE_FILE = 'ruby-uuid'
131
+
132
+ # create the "version 1" UUID with current system clock, current UTC
133
+ # timestamp, and the IEEE 802 address (so-called MAC address).
134
+ #
135
+ # Speed notice: it's slow. It writes some data into hard drive on every
136
+ # invokation. If you want to speed this up, try remounting tmpdir with a
137
+ # memory based filesystem (such as tmpfs). STILL slow? then no way but
138
+ # rewrite it with c :)
139
+ def create clock=nil, time=nil, mac_addr=nil
140
+ c = t = m = nil
141
+ Dir.chdir Dir.tmpdir do
142
+ unless FileTest.exist? STATE_FILE then
143
+ # Generate a pseudo MAC address because we have no pure-ruby way
144
+ # to know the MAC address of the NIC this system uses. Note
145
+ # that cheating with pseudo arresses here is completely legal:
146
+ # see Section 4.5 of RFC4122 for details.
147
+ sha1 = Digest::SHA1.new
148
+ 256.times do
149
+ r = [rand(0x100000000)].pack "N"
150
+ sha1.update r
151
+ end
152
+ str = sha1.digest
153
+ r = rand 14 # 20-6
154
+ node = str[r, 6] || str
155
+ if RUBY_VERSION >= "1.9.0"
156
+ nnode = node.bytes.to_a
157
+ nnode[0] |= 0x01
158
+ node = ''
159
+ nnode.each { |s| node << s.chr }
160
+ else
161
+ node[0] |= 0x01 # multicast bit
162
+ end
163
+ k = rand 0x40000
164
+ open STATE_FILE, 'w' do |fp|
165
+ fp.flock IO::LOCK_EX
166
+ write_state fp, k, node
167
+ fp.chmod 0o777 # must be world writable
168
+ end
169
+ end
170
+ open STATE_FILE, 'r+' do |fp|
171
+ fp.flock IO::LOCK_EX
172
+ c, m = read_state fp
173
+ c = clock % 0x4000 if clock
174
+ m = mac_addr if mac_addr
175
+ t = time
176
+ if t.nil? then
177
+ # UUID epoch is 1582/Oct/15
178
+ tt = Time.now
179
+ t = tt.to_i*10000000 + tt.tv_usec*10 + 0x01B21DD213814000
180
+ end
181
+ c = c.succ # important; increment here
182
+ write_state fp, c, m
183
+ end
184
+ end
185
+
186
+ tl = t & 0xFFFF_FFFF
187
+ tm = t >> 32
188
+ tm = tm & 0xFFFF
189
+ th = t >> 48
190
+ th = th & 0x0FFF
191
+ th = th | 0x1000
192
+ cl = c & 0xFF
193
+ ch = c & 0x3F00
194
+ ch = ch >> 8
195
+ ch = ch | 0x80
196
+ pack tl, tm, th, cl, ch, m
197
+ end
198
+ alias :create_v1 :create
199
+
200
+ # A simple GUID parser: just ignores unknown characters and convert
201
+ # hexadecimal dump into 16-octet object.
202
+ def parse obj
203
+ str = obj.to_s.sub %r/\Aurn:uuid:/, ''
204
+ str.gsub! %r/[^0-9A-Fa-f]/, ''
205
+ raw = str[0..31].lines.to_a.pack 'H*'
206
+ ret = new raw
207
+ ret.freeze
208
+ ret
209
+ end
210
+
211
+ # The 'primitive constructor' of this class
212
+ # Note UUID.pack(uuid.unpack) == uuid
213
+ def pack tl, tm, th, ch, cl, n
214
+ raw = [tl, tm, th, ch, cl, n].pack "NnnCCa6"
215
+ ret = new raw
216
+ ret.freeze
217
+ ret
218
+ end
219
+ end
220
+
221
+ # The 'primitive deconstructor', or the dual to pack.
222
+ # Note UUID.pack(uuid.unpack) == uuid
223
+ def unpack
224
+ raw_bytes.unpack "NnnCCa6"
225
+ end
226
+
227
+ # Generate the string representation (a.k.a GUID) of this UUID
228
+ def to_s
229
+ a = unpack
230
+ tmp = a[-1].unpack 'C*'
231
+ a[-1] = sprintf '%02x%02x%02x%02x%02x%02x', *tmp
232
+ "%08x-%04x-%04x-%02x%02x-%s" % a
233
+ end
234
+ alias guid to_s
235
+
236
+ # Convert into a RFC4122-comforming URN representation
237
+ def to_uri
238
+ "urn:uuid:" + self.to_s
239
+ end
240
+ alias urn to_uri
241
+
242
+ # Convert into 128-bit unsigned integer
243
+ # Typically a Bignum instance, but can be a Fixnum.
244
+ def to_int
245
+ tmp = self.raw_bytes.unpack "C*"
246
+ tmp.inject do |r, i|
247
+ r * 256 | i
248
+ end
249
+ end
250
+ alias to_i to_int
251
+
252
+ # Gets the version of this UUID
253
+ # returns nil if bad version
254
+ def version
255
+ a = unpack
256
+ v = (a[2] & 0xF000).to_s(16)[0].chr.to_i
257
+ return v if (1..5).include? v
258
+ return nil
259
+ end
260
+
261
+ # Two UUIDs are said to be equal if and only if their (byte-order
262
+ # canonicalized) integer representations are equivallent. Refer RFC4122 for
263
+ # details.
264
+ def == other
265
+ to_i == other.to_i
266
+ end
267
+
268
+ include Comparable
269
+ # UUIDs are comparable (don't know what benefits are there, though).
270
+ def <=> other
271
+ to_s <=> other.to_s
272
+ end
273
+
274
+ # Pre-defined UUID Namespaces described in RFC4122 Appendix C.
275
+ NameSpace_DNS = parse "6ba7b810-9dad-11d1-80b4-00c04fd430c8"
276
+ NameSpace_URL = parse "6ba7b811-9dad-11d1-80b4-00c04fd430c8"
277
+ NameSpace_OID = parse "6ba7b812-9dad-11d1-80b4-00c04fd430c8"
278
+ NameSpace_X500 = parse "6ba7b814-9dad-11d1-80b4-00c04fd430c8"
279
+
280
+ # The Nil UUID in RFC4122 Section 4.1.7
281
+ Nil = parse "00000000-0000-0000-0000-000000000000"
282
+ end
283
+ end
@@ -310,7 +310,7 @@ module JSON
310
310
  @@fake_uri_generator = lambda{|s| UUIDTools::UUID.sha1_create(UUIDTools::UUID_URL_NAMESPACE, s).to_s }
311
311
  else
312
312
  require 'uri/uuid'
313
- @@fake_uri_generator = lambda{|s| UUID.create_v5(s,UUID::Nil).to_s }
313
+ @@fake_uri_generator = lambda{|s| SimpleUUID::UUID.create_v5(s,SimpleUUID::UUID::Nil).to_s }
314
314
  end
315
315
 
316
316
  def fake_uri schema
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: json-schema
3
3
  version: !ruby/object:Gem::Version
4
- hash: 61
4
+ hash: 51
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 9
9
- - 3
10
- version: 0.9.3
9
+ - 4
10
+ version: 0.9.4
11
11
  platform: ruby
12
12
  authors:
13
13
  - Kenny Hoxworth
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-04-21 00:00:00 -04:00
18
+ date: 2011-05-03 00:00:00 -04:00
19
19
  default_executable:
20
20
  dependencies: []
21
21