gn0m30-uuid 2.1.2 → 2.2.1
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 +11 -1
- data/MIT-LICENSE +1 -1
- data/README.rdoc +6 -0
- data/gn0m30-uuid.gemspec +1 -1
- data/lib/uuid.rb +23 -12
- data/test/test-uuid.rb +10 -0
- metadata +1 -1
data/CHANGELOG
CHANGED
@@ -1,6 +1,16 @@
|
|
1
|
-
|
1
|
+
|
2
|
+
2.2.1 (2010-02-18)
|
3
|
+
* merged changes from assaf/uuid
|
4
|
+
|
5
|
+
2.2.0 (2010-02-18)
|
6
|
+
* Added: set UUID.state_file = false if you cannot use a state file (e.g. shared hosting environment)
|
7
|
+
|
8
|
+
2.1.2 (2010-01-25)
|
2
9
|
* added the :teenie format
|
3
10
|
|
11
|
+
2.1.1 (2010-01-27)
|
12
|
+
* Fixed bug which caused UUID.new to fail if the state file was somehow extant but empty
|
13
|
+
|
4
14
|
2.1.0 (2009-12-16)
|
5
15
|
* Added uuid.validate -- easier to implement than explain why it's wrong.
|
6
16
|
|
data/MIT-LICENSE
CHANGED
data/README.rdoc
CHANGED
@@ -73,6 +73,12 @@ writable, the file is created as <tt>.ruby-uuid</tt> in the home directory.
|
|
73
73
|
If you need to create the file with a different mode, use UUID#state_file
|
74
74
|
before running the UUID generator.
|
75
75
|
|
76
|
+
Note: If you are running on a shared host where the state file is not shared
|
77
|
+
between processes, or persisted across restarts (e.g. Heroku, Google App
|
78
|
+
Engine) you can simple turn it off:
|
79
|
+
|
80
|
+
UUID.state_file = false
|
81
|
+
|
76
82
|
State files are not portable across machines.
|
77
83
|
|
78
84
|
|
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.1
|
3
|
+
spec.version = '2.2.1'
|
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
@@ -3,7 +3,7 @@
|
|
3
3
|
#
|
4
4
|
# Author:: Assaf Arkin assaf@labnotes.org
|
5
5
|
# Eric Hodel drbrain@segment7.net
|
6
|
-
# Copyright:: Copyright (c) 2005-
|
6
|
+
# Copyright:: Copyright (c) 2005-2010 Assaf Arkin, Eric Hodel
|
7
7
|
# License:: MIT and/or Creative Commons Attribution-ShareAlike
|
8
8
|
|
9
9
|
require 'fileutils'
|
@@ -135,7 +135,7 @@ class UUID
|
|
135
135
|
#
|
136
136
|
# State files are not portable across machines.
|
137
137
|
def self.state_file(mode = 0644)
|
138
|
-
return @state_file
|
138
|
+
return @state_file unless @state_file.nil?
|
139
139
|
|
140
140
|
@mode = mode
|
141
141
|
|
@@ -162,7 +162,11 @@ class UUID
|
|
162
162
|
end
|
163
163
|
|
164
164
|
##
|
165
|
-
# Specify the path of the state file.
|
165
|
+
# Specify the path of the state file. Use this if you need a different
|
166
|
+
# location for your state file.
|
167
|
+
#
|
168
|
+
# Set to false if your system cannot use a state file (e.g. many shared
|
169
|
+
# hosts).
|
166
170
|
def self.state_file=(path)
|
167
171
|
@state_file = path
|
168
172
|
end
|
@@ -190,15 +194,18 @@ class UUID
|
|
190
194
|
@last_clock = (Time.now.to_f * CLOCK_MULTIPLIER).to_i
|
191
195
|
@mutex = Mutex.new
|
192
196
|
|
193
|
-
|
197
|
+
state_file = self.class.state_file
|
198
|
+
if state_file && File.size?(state_file) then
|
194
199
|
next_sequence
|
195
200
|
else
|
196
201
|
@mac = Mac.addr.gsub(/:|-/, '').hex & 0x7FFFFFFFFFFF
|
197
202
|
fail "Cannot determine MAC address from any available interface, tried with #{Mac.addr}" if @mac == 0
|
198
203
|
@sequence = rand 0x10000
|
199
204
|
|
200
|
-
|
201
|
-
|
205
|
+
if state_file
|
206
|
+
open_lock 'w' do |io|
|
207
|
+
write_state io
|
208
|
+
end
|
202
209
|
end
|
203
210
|
end
|
204
211
|
end
|
@@ -265,15 +272,19 @@ class UUID
|
|
265
272
|
##
|
266
273
|
# Updates the state file with a new sequence number.
|
267
274
|
def next_sequence
|
268
|
-
|
269
|
-
|
275
|
+
if self.class.state_file
|
276
|
+
open_lock 'r+' do |io|
|
277
|
+
@mac, @sequence, @last_clock = read_state(io)
|
270
278
|
|
271
|
-
|
272
|
-
|
279
|
+
io.rewind
|
280
|
+
io.truncate 0
|
273
281
|
|
274
|
-
|
282
|
+
@sequence += 1
|
275
283
|
|
276
|
-
|
284
|
+
write_state io
|
285
|
+
end
|
286
|
+
else
|
287
|
+
@sequence += 1
|
277
288
|
end
|
278
289
|
rescue Errno::ENOENT
|
279
290
|
open_lock 'w' do |io|
|
data/test/test-uuid.rb
CHANGED
@@ -21,6 +21,16 @@ class TestUUID < Test::Unit::TestCase
|
|
21
21
|
assert_equal path, UUID.state_file
|
22
22
|
end
|
23
23
|
|
24
|
+
def test_with_no_state_file
|
25
|
+
UUID.state_file = false
|
26
|
+
assert !UUID.state_file
|
27
|
+
uuid = UUID.new
|
28
|
+
assert_match(/\A[\da-f]{32}\z/i, uuid.generate(:compact))
|
29
|
+
seq = uuid.next_sequence
|
30
|
+
assert_equal seq + 1, uuid.next_sequence
|
31
|
+
assert !UUID.state_file
|
32
|
+
end
|
33
|
+
|
24
34
|
def test_instance_generate
|
25
35
|
uuid = UUID.new
|
26
36
|
assert_match(/\A[\da-f]{32}\z/i, uuid.generate(:compact))
|