simple_uuid 0.1.2 → 0.2.0

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 CHANGED
@@ -1,3 +1,5 @@
1
+ v0.2.0 perf optimizations for cassandra cql
2
+
1
3
  v0.1.2 add license file
2
4
 
3
5
  v0.1.1 fix problem with ruby 1.9 [Aanand Prasad]
data/Manifest CHANGED
@@ -4,5 +4,4 @@ Manifest
4
4
  README.rdoc
5
5
  Rakefile
6
6
  lib/simple_uuid.rb
7
- simple_uuid.gemspec
8
7
  test/test_uuid.rb
data/README.rdoc CHANGED
@@ -22,7 +22,13 @@ Install the gem:
22
22
 
23
23
  == Usage
24
24
 
25
- TBD...
25
+ # Creating and getting a timestamp from the UUID
26
+ uuid = SimpleUUID::UUID.new => <UUID#2278170300 .... >
27
+ uuid.to_time => Thu Aug 18 19:15:16 -0400 2011
28
+
29
+ # Given raw bytes from a source such as cassandra (using bytes from an existing UUID as an example)
30
+ bytes = SimpleUUID::UUID.new.bytes
31
+ SimpleUUID::UUID.to_time(bytes) => Thu Aug 18 19:15:16 -0400 2011
26
32
 
27
33
  == Reporting problems
28
34
 
data/Rakefile CHANGED
@@ -1,4 +1,3 @@
1
-
2
1
  require 'echoe'
3
2
 
4
3
  Echoe.new('simple_uuid') do |e|
@@ -7,6 +6,5 @@ Echoe.new('simple_uuid') do |e|
7
6
  e.email = 'ryan@twitter.com'
8
7
  e.rubygems_version = ">= 0.8"
9
8
  e.project = "fauna"
10
- e.url = "http://blog.evanweaver.com/files/doc/fauna/simple_uuid/"
11
- e.docs_host = "blog.evanweaver.com:~/www/bax/public/files/doc/"
9
+ e.retain_gemspec = true
12
10
  end
data/lib/simple_uuid.rb CHANGED
@@ -11,6 +11,7 @@ end
11
11
  module SimpleUUID
12
12
  # UUID format version 1, as specified in RFC 4122, with jitter in place of the mac address and sequence counter.
13
13
  class UUID
14
+ include Comparable
14
15
 
15
16
  class InvalidVersion < StandardError #:nodoc:
16
17
  end
@@ -105,7 +106,7 @@ module SimpleUUID
105
106
 
106
107
  def inspect(long = false)
107
108
  "<UUID##{object_id} time: #{
108
- Time.at(seconds).inspect
109
+ to_time.inspect
109
110
  }, usecs: #{
110
111
  usecs
111
112
  } jitter: #{
@@ -126,11 +127,27 @@ module SimpleUUID
126
127
  other.respond_to?(:bytes) && bytes == other.bytes
127
128
  end
128
129
 
129
- private
130
+ # Given raw bytes, return a time object
131
+ def self.to_time(bytes)
132
+ usecs = total_usecs(bytes)
133
+ Time.at(usecs / 1_000_000, usecs % 1_000_000)
134
+ end
135
+
136
+ # Return a time object
137
+ def to_time
138
+ Time.at(total_usecs / 1_000_000, total_usecs % 1_000_000)
139
+ end
140
+
141
+ # Given raw bytes, return the total_usecs
142
+ def self.total_usecs(bytes)
143
+ elements = bytes.unpack("Nnn")
144
+ (elements[0] + (elements[1] << 32) + ((elements[2] & 0x0FFF) << 48) - GREGORIAN_EPOCH_OFFSET) / 10
145
+ end
130
146
 
147
+ private
148
+
131
149
  def total_usecs
132
- elements = @bytes.unpack("NnnQ")
133
- (elements[0] + (elements[1] << 32) + ((elements[2] & 0x0FFF) << 48) - GREGORIAN_EPOCH_OFFSET) / 10
150
+ @total_usecs ||= self.class.total_usecs(@bytes)
134
151
  end
135
152
  end
136
- end
153
+ end
data/simple_uuid.gemspec CHANGED
@@ -2,25 +2,24 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{simple_uuid}
5
- s.version = "0.1.2"
5
+ s.version = "0.2.0"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 0.8") if s.respond_to? :required_rubygems_version=
8
- s.authors = ["Ryan King, Evan Weaver"]
9
- s.date = %q{2011-01-19}
8
+ s.authors = [%q{Ryan King, Evan Weaver}]
9
+ s.date = %q{2011-08-19}
10
10
  s.description = %q{Simple, scalable UUID generation.}
11
11
  s.email = %q{ryan@twitter.com}
12
- s.extra_rdoc_files = ["CHANGELOG", "LICENSE", "README.rdoc", "lib/simple_uuid.rb"]
13
- s.files = ["CHANGELOG", "LICENSE", "Manifest", "README.rdoc", "Rakefile", "lib/simple_uuid.rb", "simple_uuid.gemspec", "test/test_uuid.rb"]
14
- s.homepage = %q{http://blog.evanweaver.com/files/doc/fauna/simple_uuid/}
15
- s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Simple_uuid", "--main", "README.rdoc"]
16
- s.require_paths = ["lib"]
12
+ s.extra_rdoc_files = [%q{CHANGELOG}, %q{LICENSE}, %q{README.rdoc}, %q{lib/simple_uuid.rb}]
13
+ s.files = [%q{CHANGELOG}, %q{LICENSE}, %q{Manifest}, %q{README.rdoc}, %q{Rakefile}, %q{lib/simple_uuid.rb}, %q{test/test_uuid.rb}, %q{simple_uuid.gemspec}]
14
+ s.homepage = %q{http://fauna.github.com/fauna/simple_uuid/}
15
+ s.rdoc_options = [%q{--line-numbers}, %q{--inline-source}, %q{--title}, %q{Simple_uuid}, %q{--main}, %q{README.rdoc}]
16
+ s.require_paths = [%q{lib}]
17
17
  s.rubyforge_project = %q{fauna}
18
- s.rubygems_version = %q{1.3.7}
18
+ s.rubygems_version = %q{1.8.5}
19
19
  s.summary = %q{Simple, scalable UUID generation.}
20
- s.test_files = ["test/test_uuid.rb"]
20
+ s.test_files = [%q{test/test_uuid.rb}]
21
21
 
22
22
  if s.respond_to? :specification_version then
23
- current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
24
23
  s.specification_version = 3
25
24
 
26
25
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
data/test/test_uuid.rb CHANGED
@@ -39,4 +39,24 @@ class UUIDTest < Test::Unit::TestCase
39
39
  b = a.dup
40
40
  assert_equal a, b
41
41
  end
42
- end
42
+
43
+ def test_comparison
44
+ current_uuid = UUID.new(Time.now)
45
+ future_uuid = UUID.new(Time.now + rand(60))
46
+
47
+ assert current_uuid < future_uuid
48
+ assert current_uuid >= current_uuid
49
+ assert future_uuid >= current_uuid
50
+ end
51
+
52
+ def test_to_time
53
+ ts = Time.new
54
+ uuid = UUID.new(ts)
55
+ assert_equal ts, uuid.to_time
56
+ end
57
+
58
+ def test_total_usecs
59
+ uuid = UUID.new
60
+ assert_equal uuid.send(:total_usecs), UUID.total_usecs(uuid.bytes)
61
+ end
62
+ end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: simple_uuid
3
3
  version: !ruby/object:Gem::Version
4
- hash: 31
5
- prerelease: false
4
+ hash: 23
5
+ prerelease:
6
6
  segments:
7
7
  - 0
8
- - 1
9
8
  - 2
10
- version: 0.1.2
9
+ - 0
10
+ version: 0.2.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Ryan King, Evan Weaver
@@ -15,8 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-01-19 00:00:00 -08:00
19
- default_executable:
18
+ date: 2011-08-19 00:00:00 Z
20
19
  dependencies: []
21
20
 
22
21
  description: Simple, scalable UUID generation.
@@ -37,10 +36,9 @@ files:
37
36
  - README.rdoc
38
37
  - Rakefile
39
38
  - lib/simple_uuid.rb
40
- - simple_uuid.gemspec
41
39
  - test/test_uuid.rb
42
- has_rdoc: true
43
- homepage: http://blog.evanweaver.com/files/doc/fauna/simple_uuid/
40
+ - simple_uuid.gemspec
41
+ homepage: http://fauna.github.com/fauna/simple_uuid/
44
42
  licenses: []
45
43
 
46
44
  post_install_message:
@@ -75,7 +73,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
75
73
  requirements: []
76
74
 
77
75
  rubyforge_project: fauna
78
- rubygems_version: 1.3.7
76
+ rubygems_version: 1.8.5
79
77
  signing_key:
80
78
  specification_version: 3
81
79
  summary: Simple, scalable UUID generation.