json-schema 0.9.3 → 0.9.4

Sign up to get free protection for your applications and to get access to all the features.
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