gn0m30-uuid 2.2.1 → 2.2.2

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/gn0m30-uuid.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  spec = Gem::Specification.new do |spec|
2
2
  spec.name = 'gn0m30-uuid'
3
- spec.version = '2.2.1'
3
+ spec.version = '2.2.2'
4
4
  spec.summary = "UUID generator with teenie format"
5
5
  spec.description = <<-EOF
6
6
  UUID generator for producing universally unique identifiers based on RFC 4122
data/lib/uuid.rb CHANGED
@@ -13,7 +13,7 @@ require 'tmpdir'
13
13
  require 'rubygems'
14
14
  require 'macaddr'
15
15
  require 'base62'
16
-
16
+ require 'scanf'
17
17
 
18
18
  ##
19
19
  # = Generating UUIDs
@@ -186,6 +186,36 @@ class UUID
186
186
  def self.validate_teenie(uuid)
187
187
  return true if uuid =~ /\A[\da-fA-f]{24}\z/i
188
188
  end
189
+
190
+ ##
191
+ # translate one format uuid to another
192
+ def self.translate(uuid, source_format, target_format)
193
+ if source_format == :teenie
194
+ raise "invalid uuid passed in for translation" unless UUID.validate_teenie(uuid)
195
+ else
196
+ raise "invalid uuid passed in for translation" unless UUID.validate(uuid)
197
+ end
198
+
199
+ raise "invalid source format passed in for tranlation" unless FORMATS[source_format]
200
+ raise "invalid target format passed in for tranlation" unless FORMATS[target_format]
201
+ raise "it's a waste of time to translate one format to another" unless source_format != target_format
202
+
203
+ parts = Array.new
204
+
205
+ if source_format != :teenie
206
+ parts = uuid.scanf(FORMATS[source_format])
207
+ else
208
+ # this has to stay in synch with the :teenie format
209
+ parts[0] = uuid[0..5].base62_decode
210
+ parts[1] = uuid[6..8].base62_decode
211
+ parts[2] = uuid[9..11].base62_decode
212
+ parts[3] = uuid[12..14].base62_decode
213
+ parts[4] = uuid[15..23].base62_decode
214
+ end
215
+
216
+ @uuid ||= new
217
+ @uuid.generate_from_parts(target_format, parts[0], parts[1], parts[2], parts[3], parts[4])
218
+ end
189
219
 
190
220
  ##
191
221
  # Create a new UUID generator. You really only need to do this once.
@@ -214,9 +244,6 @@ class UUID
214
244
  # Generates a new UUID string using +format+. See FORMATS for a list of
215
245
  # supported formats.
216
246
  def generate(format = :default)
217
- template = FORMATS[format]
218
-
219
- raise ArgumentError, "invalid UUID format #{format.inspect}" unless template
220
247
 
221
248
  # The clock must be monotonically increasing. The clock resolution is at
222
249
  # best 100 ns (UUID spec), but practically may be lower (on my setup,
@@ -255,18 +282,7 @@ class UUID
255
282
  part4 = @sequence & 0xFFFF
256
283
  part5 = @mac & 0xFFFFFFFFFFFF
257
284
 
258
- # for this special case, the parts are going to be strings which we will 0 pad
259
- if format == :teenie
260
- part1 = part1.base62_encode
261
- part2 = part2.base62_encode
262
- part3 = part3.base62_encode
263
- part4 = part4.base62_encode
264
- part5 = part5.base62_encode
265
-
266
- (template % [part1, part2, part3, part4, part5]).gsub(' ', '0')
267
- else
268
- template % [part1, part2, part3, part4, part5]
269
- end
285
+ generate_from_parts(format, part1, part2, part3, part4, part5)
270
286
  end
271
287
 
272
288
  ##
@@ -300,6 +316,28 @@ class UUID
300
316
  "MAC: #{mac} Sequence: #{@sequence}"
301
317
  end
302
318
 
319
+ ##
320
+ # this is used both for generation and translation
321
+ def generate_from_parts(format, part1, part2, part3, part4, part5)
322
+
323
+ template = FORMATS[format]
324
+
325
+ raise ArgumentError, "invalid UUID format #{format.inspect}" unless template
326
+
327
+ # for this special case, the parts are going to be strings which we will 0 pad
328
+ if format == :teenie
329
+ part1 = part1.base62_encode
330
+ part2 = part2.base62_encode
331
+ part3 = part3.base62_encode
332
+ part4 = part4.base62_encode
333
+ part5 = part5.base62_encode
334
+
335
+ (template % [part1, part2, part3, part4, part5]).gsub(' ', '0')
336
+ else
337
+ template % [part1, part2, part3, part4, part5]
338
+ end
339
+ end
340
+
303
341
  protected
304
342
 
305
343
  ##
@@ -0,0 +1,40 @@
1
+ ###
2
+ # test the translate method
3
+ #
4
+ require "test/unit"
5
+ require "uuid"
6
+
7
+ class TestTranslate < Test::Unit::TestCase
8
+
9
+ def test_default_to_teenie_and_back
10
+
11
+ 11.times do
12
+ uuid = UUID.new
13
+ original_uuid = uuid.generate()
14
+
15
+ teenie_uuid = UUID.translate(original_uuid, :default, :teenie)
16
+ assert UUID.validate_teenie(teenie_uuid), 'teenie'
17
+
18
+ default_uuid = UUID.translate(teenie_uuid, :teenie, :default)
19
+ assert UUID.validate(default_uuid), 'default'
20
+
21
+ assert default_uuid == original_uuid, 'got back what we started with'
22
+ end
23
+ end
24
+
25
+ def test_teenie_to_compact_and_back
26
+
27
+ 7.times do
28
+ uuid = UUID.new
29
+ original_uuid = uuid.generate(:teenie)
30
+
31
+ compact_uuid = UUID.translate(original_uuid, :teenie, :compact)
32
+ assert UUID.validate(compact_uuid), 'compact'
33
+
34
+ teenie_uuid = UUID.translate(compact_uuid, :compact, :teenie)
35
+ assert UUID.validate_teenie(teenie_uuid), 'teenie'
36
+
37
+ assert teenie_uuid == original_uuid, 'got back what we started with'
38
+ end
39
+ end
40
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gn0m30-uuid
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.2.1
4
+ version: 2.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Assaf Arkin
@@ -11,7 +11,7 @@ autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
13
 
14
- date: 2010-02-18 00:00:00 -05:00
14
+ date: 2010-04-05 00:00:00 -04:00
15
15
  default_executable:
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency
@@ -47,6 +47,7 @@ extra_rdoc_files:
47
47
  - README.rdoc
48
48
  - MIT-LICENSE
49
49
  files:
50
+ - test/test-translate.rb
50
51
  - test/test-uuid.rb
51
52
  - lib/uuid.rb
52
53
  - README.rdoc