simple_uuid 0.3.0 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +18 -7
- data/README.rdoc +1 -1
- data/Rakefile +0 -2
- data/lib/simple_uuid.rb +23 -11
- data/simple_uuid.gemspec +3 -5
- data/test/test_uuid.rb +44 -2
- metadata +12 -15
data/CHANGELOG
CHANGED
@@ -1,13 +1,24 @@
|
|
1
|
-
v0.
|
1
|
+
v0.4.0
|
2
|
+
- Fix comparison of time UUIDs (@muirmanders, #13)
|
3
|
+
- Moved to the cassandra-rb github project
|
2
4
|
|
3
|
-
v0.
|
5
|
+
v0.3.0
|
6
|
+
- Add option `:randomize` to turn off the random part of the UUID
|
4
7
|
|
5
|
-
v0.
|
8
|
+
v0.2.0
|
9
|
+
- perf optimizations for cassandra cql
|
6
10
|
|
7
|
-
v0.1.
|
11
|
+
v0.1.2
|
12
|
+
- add license file
|
8
13
|
|
9
|
-
v0.1.
|
14
|
+
v0.1.1
|
15
|
+
- fix problem with ruby 1.9 [Aanand Prasad]
|
10
16
|
|
11
|
-
v0.0
|
17
|
+
v0.1.0
|
18
|
+
- move UUID class into a SimpleUUID module
|
12
19
|
|
13
|
-
v0.0.
|
20
|
+
v0.0.2
|
21
|
+
- Update equality test for compatibility with Cassandra gem.
|
22
|
+
|
23
|
+
v0.0.1
|
24
|
+
- Initial extraction from the cassandra gem.
|
data/README.rdoc
CHANGED
data/Rakefile
CHANGED
data/lib/simple_uuid.rb
CHANGED
@@ -27,7 +27,7 @@ module SimpleUUID
|
|
27
27
|
when String
|
28
28
|
case bytes.size
|
29
29
|
when 16 # Raw byte array
|
30
|
-
@bytes = bytes
|
30
|
+
@bytes = bytes.respond_to?(:force_encoding) ? bytes.force_encoding("ASCII-8BIT") : bytes
|
31
31
|
when 36 # Human-readable UUID representation; inverse of #to_guid
|
32
32
|
elements = bytes.split("-")
|
33
33
|
raise TypeError, "Expected #{bytes.inspect} to cast to a #{self.class} (malformed UUID representation)" if elements.size != 5
|
@@ -56,11 +56,19 @@ module SimpleUUID
|
|
56
56
|
|
57
57
|
# Top 3 bytes reserved
|
58
58
|
if opts[:randomize] == false
|
59
|
-
byte_array += [
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
59
|
+
byte_array += if !opts[:salt].nil?
|
60
|
+
clock_h, clock_l, node_h, node_l =
|
61
|
+
opts[:salt].to_s.unpack("CCnN")
|
62
|
+
|
63
|
+
clock = [
|
64
|
+
clock_h | VARIANT,
|
65
|
+
clock_l
|
66
|
+
].pack("n").unpack("n").first
|
67
|
+
|
68
|
+
[ clock, node_h, node_l ]
|
69
|
+
else
|
70
|
+
[ 0 | VARIANT, 0, 0 ]
|
71
|
+
end
|
64
72
|
else
|
65
73
|
byte_array += [
|
66
74
|
rand(2**13) | VARIANT,
|
@@ -109,11 +117,15 @@ module SimpleUUID
|
|
109
117
|
end
|
110
118
|
|
111
119
|
def <=>(other)
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
120
|
+
me = to_s.unpack('Nn2C*')
|
121
|
+
him = other.to_s.unpack('Nn2C*')
|
122
|
+
# swap most significant time bits to front
|
123
|
+
me[0], me[2], him[0], him[2] = me[2], me[0], him[2], him[0]
|
124
|
+
me.zip(him) do |m, h|
|
125
|
+
comp = m <=> h
|
126
|
+
return comp if comp != 0
|
127
|
+
end
|
128
|
+
return 0
|
117
129
|
end
|
118
130
|
|
119
131
|
def inspect(long = false)
|
data/simple_uuid.gemspec
CHANGED
@@ -2,22 +2,20 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = "simple_uuid"
|
5
|
-
s.version = "0.
|
5
|
+
s.version = "0.4.0"
|
6
6
|
|
7
7
|
s.required_rubygems_version = Gem::Requirement.new(">= 0.8") if s.respond_to? :required_rubygems_version=
|
8
8
|
s.authors = ["Ryan King, Evan Weaver"]
|
9
|
-
s.date = "2012-11-27"
|
10
9
|
s.description = "Simple, scalable UUID generation."
|
11
|
-
s.email = "ryan@twitter.com"
|
12
10
|
s.extra_rdoc_files = ["CHANGELOG", "LICENSE", "README.rdoc", "lib/simple_uuid.rb"]
|
13
11
|
s.files = ["CHANGELOG", "LICENSE", "Manifest", "README.rdoc", "Rakefile", "lib/simple_uuid.rb", "simple_uuid.gemspec", "test/test_uuid.rb"]
|
14
|
-
s.homepage = "
|
12
|
+
s.homepage = "https://github.com/cassandra-rb/simple_uuid"
|
15
13
|
s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Simple_uuid", "--main", "README.rdoc"]
|
16
14
|
s.require_paths = ["lib"]
|
17
|
-
s.rubyforge_project = "fauna"
|
18
15
|
s.rubygems_version = "1.8.24"
|
19
16
|
s.summary = "Simple, scalable UUID generation."
|
20
17
|
s.test_files = ["test/test_uuid.rb"]
|
18
|
+
s.licenses = ['Apache']
|
21
19
|
|
22
20
|
if s.respond_to? :specification_version then
|
23
21
|
s.specification_version = 3
|
data/test/test_uuid.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
require 'test/unit'
|
2
|
+
require 'digest/md5'
|
2
3
|
require 'simple_uuid'
|
4
|
+
|
3
5
|
include SimpleUUID
|
4
6
|
|
5
7
|
class UUIDTest < Test::Unit::TestCase
|
@@ -18,6 +20,29 @@ class UUIDTest < Test::Unit::TestCase
|
|
18
20
|
assert_equal uuid, UUID.new(uuid.to_guid)
|
19
21
|
end
|
20
22
|
|
23
|
+
def test_equality_with_encoding
|
24
|
+
return unless "".respond_to? :force_encoding
|
25
|
+
|
26
|
+
utf8_uuid_bytes = "\xFD\x17\x1F\xA6=O\x11\xE2\x92\x13pV\x81\xBB\x05\x87".force_encoding("UTF-8")
|
27
|
+
binary_uuid_bytes = "\xFD\x17\x1F\xA6=O\x11\xE2\x92\x13pV\x81\xBB\x05\x87".force_encoding("ASCII-8BIT")
|
28
|
+
|
29
|
+
assert_equal UUID.new(utf8_uuid_bytes), UUID.new(binary_uuid_bytes)
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_salt
|
33
|
+
tnow = Time.now
|
34
|
+
salt = Digest::MD5.new.update("some salt")
|
35
|
+
tthen = Time.now
|
36
|
+
|
37
|
+
uuid1 = UUID.new(tnow, :randomize => false, :salt => salt.digest)
|
38
|
+
uuid2 = UUID.new(tthen, :randomize => false, :salt => salt.digest)
|
39
|
+
|
40
|
+
assert_equal uuid1.to_time, tnow
|
41
|
+
assert_equal uuid2.to_time, tthen
|
42
|
+
assert_equal uuid1.bytes[8..-1], uuid2.bytes[8..-1]
|
43
|
+
assert uuid2 > uuid1
|
44
|
+
end
|
45
|
+
|
21
46
|
def test_uuid_error
|
22
47
|
assert_raises(TypeError) do
|
23
48
|
UUID.new("bogus")
|
@@ -48,13 +73,13 @@ class UUIDTest < Test::Unit::TestCase
|
|
48
73
|
assert current_uuid >= current_uuid
|
49
74
|
assert future_uuid >= current_uuid
|
50
75
|
end
|
51
|
-
|
76
|
+
|
52
77
|
def test_to_time
|
53
78
|
ts = Time.new
|
54
79
|
uuid = UUID.new(ts)
|
55
80
|
assert_equal ts, uuid.to_time
|
56
81
|
end
|
57
|
-
|
82
|
+
|
58
83
|
def test_total_usecs
|
59
84
|
uuid = UUID.new
|
60
85
|
assert_equal uuid.send(:total_usecs), UUID.total_usecs(uuid.bytes)
|
@@ -66,4 +91,21 @@ class UUIDTest < Test::Unit::TestCase
|
|
66
91
|
assert_not_equal UUID.new(t), UUID.new(t)
|
67
92
|
assert_equal UUID.new(t, randomize: false), UUID.new(t, randomize: false)
|
68
93
|
end
|
94
|
+
|
95
|
+
def test_identical_times
|
96
|
+
t = Time.now
|
97
|
+
u1 = UUID.new(t)
|
98
|
+
u2 = UUID.new(t)
|
99
|
+
|
100
|
+
assert_not_equal u1, u2
|
101
|
+
assert_equal u1, UUID.new(u1) # sanity
|
102
|
+
assert_not_equal 0, u1 <=> u2
|
103
|
+
assert_equal u1.to_time, u2.to_time
|
104
|
+
|
105
|
+
if u1.to_s[-8, 8] > u2.to_s[-8, 8]
|
106
|
+
assert u1 > u2
|
107
|
+
else
|
108
|
+
assert u2 > u1
|
109
|
+
end
|
110
|
+
end
|
69
111
|
end
|
metadata
CHANGED
@@ -1,13 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: simple_uuid
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
prerelease:
|
4
|
+
prerelease: false
|
6
5
|
segments:
|
7
6
|
- 0
|
8
|
-
-
|
7
|
+
- 4
|
9
8
|
- 0
|
10
|
-
version: 0.
|
9
|
+
version: 0.4.0
|
11
10
|
platform: ruby
|
12
11
|
authors:
|
13
12
|
- Ryan King, Evan Weaver
|
@@ -15,11 +14,12 @@ autorequire:
|
|
15
14
|
bindir: bin
|
16
15
|
cert_chain: []
|
17
16
|
|
18
|
-
date:
|
17
|
+
date: 2013-10-10 00:00:00 -07:00
|
18
|
+
default_executable:
|
19
19
|
dependencies: []
|
20
20
|
|
21
21
|
description: Simple, scalable UUID generation.
|
22
|
-
email:
|
22
|
+
email:
|
23
23
|
executables: []
|
24
24
|
|
25
25
|
extensions: []
|
@@ -38,9 +38,10 @@ files:
|
|
38
38
|
- lib/simple_uuid.rb
|
39
39
|
- simple_uuid.gemspec
|
40
40
|
- test/test_uuid.rb
|
41
|
-
|
42
|
-
|
43
|
-
|
41
|
+
has_rdoc: true
|
42
|
+
homepage: https://github.com/cassandra-rb/simple_uuid
|
43
|
+
licenses:
|
44
|
+
- Apache
|
44
45
|
post_install_message:
|
45
46
|
rdoc_options:
|
46
47
|
- --line-numbers
|
@@ -52,28 +53,24 @@ rdoc_options:
|
|
52
53
|
require_paths:
|
53
54
|
- lib
|
54
55
|
required_ruby_version: !ruby/object:Gem::Requirement
|
55
|
-
none: false
|
56
56
|
requirements:
|
57
57
|
- - ">="
|
58
58
|
- !ruby/object:Gem::Version
|
59
|
-
hash: 3
|
60
59
|
segments:
|
61
60
|
- 0
|
62
61
|
version: "0"
|
63
62
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
64
|
-
none: false
|
65
63
|
requirements:
|
66
64
|
- - ">="
|
67
65
|
- !ruby/object:Gem::Version
|
68
|
-
hash: 27
|
69
66
|
segments:
|
70
67
|
- 0
|
71
68
|
- 8
|
72
69
|
version: "0.8"
|
73
70
|
requirements: []
|
74
71
|
|
75
|
-
rubyforge_project:
|
76
|
-
rubygems_version: 1.
|
72
|
+
rubyforge_project:
|
73
|
+
rubygems_version: 1.3.6
|
77
74
|
signing_key:
|
78
75
|
specification_version: 3
|
79
76
|
summary: Simple, scalable UUID generation.
|