uuidtools 1.0.0 → 1.0.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 +8 -1
- data/lib/uuidtools.rb +81 -66
- data/rakefile +43 -3
- data/test/mac_address_test.rb +13 -0
- metadata +25 -20
- data/install.rb +0 -30
    
        data/CHANGELOG
    CHANGED
    
    | @@ -1,9 +1,16 @@ | |
| 1 | 
            +
            == UUIDTools 1.0.1
         | 
| 2 | 
            +
             * improved code for obtaining a MAC address for Solaris and NetBSD
         | 
| 3 | 
            +
             * MAC addresses can now be set manually
         | 
| 4 | 
            +
             * replaced random number generator, less effective on Windows, but faster
         | 
| 5 | 
            +
             * fixed inheritance issues
         | 
| 6 | 
            +
             * changed UUID#to_uri method to return a string instead of a URI object
         | 
| 7 | 
            +
             * removed UUID#to_uri_string
         | 
| 1 8 | 
             
            == UUIDTools 1.0.0
         | 
| 2 9 | 
             
             * slight improvements to the random number generator
         | 
| 3 10 | 
             
             * fixed issue with failing to obtain mac address in certain environments
         | 
| 4 11 | 
             
            == UUIDTools 0.1.4
         | 
| 5 12 | 
             
             * improved speed when generating timestamp-based uuids
         | 
| 6 | 
            -
             * fixed bug with rapid generation of timestamp uuids leading to  | 
| 13 | 
            +
             * fixed bug with rapid generation of timestamp uuids leading to duplicates
         | 
| 7 14 | 
             
             * improved code for detection of mac address
         | 
| 8 15 | 
             
            == UUIDTools 0.1.3
         | 
| 9 16 | 
             
             * fixed issue with UUID#raw attempting to call protected class methods
         | 
    
        data/lib/uuidtools.rb
    CHANGED
    
    | @@ -21,7 +21,7 @@ | |
| 21 21 | 
             
            # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
         | 
| 22 22 | 
             
            #++
         | 
| 23 23 |  | 
| 24 | 
            -
            UUID_TOOLS_VERSION = "1.0. | 
| 24 | 
            +
            UUID_TOOLS_VERSION = "1.0.1"
         | 
| 25 25 |  | 
| 26 26 | 
             
            $:.unshift(File.dirname(__FILE__))
         | 
| 27 27 |  | 
| @@ -166,7 +166,7 @@ class UUID | |
| 166 166 | 
             
              attr_accessor :nodes
         | 
| 167 167 |  | 
| 168 168 | 
             
              # Parses a UUID from a string.
         | 
| 169 | 
            -
              def  | 
| 169 | 
            +
              def self.parse(uuid_string)
         | 
| 170 170 | 
             
                unless uuid_string.kind_of? String
         | 
| 171 171 | 
             
                  raise ArgumentError,
         | 
| 172 172 | 
             
                    "Expected String, got #{uuid_string.class.name} instead."
         | 
| @@ -184,17 +184,17 @@ class UUID | |
| 184 184 | 
             
                for i in 0..5
         | 
| 185 185 | 
             
                  nodes << uuid_components[5][(i * 2)..(i * 2) + 1].to_i(16)
         | 
| 186 186 | 
             
                end
         | 
| 187 | 
            -
                return  | 
| 187 | 
            +
                return self.new(time_low, time_mid, time_hi_and_version,
         | 
| 188 188 | 
             
                  clock_seq_hi_and_reserved, clock_seq_low, nodes)
         | 
| 189 189 | 
             
              end
         | 
| 190 190 |  | 
| 191 191 | 
             
              # Parses a UUID from a raw byte string.
         | 
| 192 | 
            -
              def  | 
| 192 | 
            +
              def self.parse_raw(raw_string)
         | 
| 193 193 | 
             
                unless raw_string.kind_of? String
         | 
| 194 194 | 
             
                  raise ArgumentError,
         | 
| 195 195 | 
             
                    "Expected String, got #{raw_string.class.name} instead."
         | 
| 196 196 | 
             
                end
         | 
| 197 | 
            -
                integer =  | 
| 197 | 
            +
                integer = self.convert_byte_string_to_int(raw_string)
         | 
| 198 198 |  | 
| 199 199 | 
             
                time_low = (integer >> 96) & 0xFFFFFFFF
         | 
| 200 200 | 
             
                time_mid = (integer >> 80) & 0xFFFF
         | 
| @@ -205,13 +205,13 @@ class UUID | |
| 205 205 | 
             
                for i in 0..5
         | 
| 206 206 | 
             
                  nodes << ((integer >> (40 - (i * 8))) & 0xFF)
         | 
| 207 207 | 
             
                end
         | 
| 208 | 
            -
                return  | 
| 208 | 
            +
                return self.new(time_low, time_mid, time_hi_and_version,
         | 
| 209 209 | 
             
                  clock_seq_hi_and_reserved, clock_seq_low, nodes)
         | 
| 210 210 | 
             
              end
         | 
| 211 211 |  | 
| 212 212 | 
             
              # Creates a UUID from a random value.
         | 
| 213 | 
            -
              def  | 
| 214 | 
            -
                new_uuid =  | 
| 213 | 
            +
              def self.random_create()
         | 
| 214 | 
            +
                new_uuid = self.parse_raw(self.random_128)
         | 
| 215 215 | 
             
                new_uuid.time_hi_and_version &= 0x0FFF
         | 
| 216 216 | 
             
                new_uuid.time_hi_and_version |= (4 << 12)
         | 
| 217 217 | 
             
                new_uuid.clock_seq_hi_and_reserved &= 0x3F
         | 
| @@ -220,7 +220,7 @@ class UUID | |
| 220 220 | 
             
              end
         | 
| 221 221 |  | 
| 222 222 | 
             
              # Creates a UUID from a timestamp.
         | 
| 223 | 
            -
              def  | 
| 223 | 
            +
              def self.timestamp_create(timestamp=nil)
         | 
| 224 224 | 
             
                # We need a lock here to prevent two threads from ever
         | 
| 225 225 | 
             
                # getting the same timestamp.
         | 
| 226 226 | 
             
                @@mutex.synchronize do
         | 
| @@ -233,7 +233,7 @@ class UUID | |
| 233 233 | 
             
                  # Convert to 100 nanosecond blocks
         | 
| 234 234 | 
             
                  gmt_timestamp_100_nanoseconds = (gmt_timestamp.tv_sec * 10000000) +
         | 
| 235 235 | 
             
                    (gmt_timestamp.tv_usec * 10) + 0x01B21DD213814000
         | 
| 236 | 
            -
                  nodes =  | 
| 236 | 
            +
                  nodes = self.get_mac_address.split(":").collect do |octet|
         | 
| 237 237 | 
             
                    octet.to_i(16)
         | 
| 238 238 | 
             
                  end
         | 
| 239 239 | 
             
                  node_id = 0
         | 
| @@ -242,11 +242,11 @@ class UUID | |
| 242 242 | 
             
                  end
         | 
| 243 243 | 
             
                  clock_sequence = @@last_clock_sequence
         | 
| 244 244 | 
             
                  if clock_sequence.nil?
         | 
| 245 | 
            -
                    clock_sequence =  | 
| 245 | 
            +
                    clock_sequence = self.convert_byte_string_to_int(self.random_128)
         | 
| 246 246 | 
             
                  end
         | 
| 247 247 | 
             
                  if @@last_node_id != nil && @@last_node_id != node_id
         | 
| 248 248 | 
             
                    # The node id has changed.  Change the clock id.
         | 
| 249 | 
            -
                    clock_sequence =  | 
| 249 | 
            +
                    clock_sequence = self.convert_byte_string_to_int(self.random_128)
         | 
| 250 250 | 
             
                  elsif @@last_timestamp != nil &&
         | 
| 251 251 | 
             
                      gmt_timestamp_100_nanoseconds <= @@last_timestamp
         | 
| 252 252 | 
             
                    clock_sequence = clock_sequence + 1
         | 
| @@ -263,19 +263,19 @@ class UUID | |
| 263 263 | 
             
                  clock_seq_hi_and_reserved = (clock_sequence & 0x3F00) >> 8
         | 
| 264 264 | 
             
                  clock_seq_hi_and_reserved |= 0x80
         | 
| 265 265 |  | 
| 266 | 
            -
                  return  | 
| 266 | 
            +
                  return self.new(time_low, time_mid, time_hi_and_version,
         | 
| 267 267 | 
             
                    clock_seq_hi_and_reserved, clock_seq_low, nodes)
         | 
| 268 268 | 
             
                end
         | 
| 269 269 | 
             
              end
         | 
| 270 270 |  | 
| 271 271 | 
             
              # Creates a UUID using the MD5 hash.  (Version 3)
         | 
| 272 | 
            -
              def  | 
| 273 | 
            -
                return  | 
| 272 | 
            +
              def self.md5_create(namespace, name)
         | 
| 273 | 
            +
                return self.create_from_hash(Digest::MD5, namespace, name)
         | 
| 274 274 | 
             
              end
         | 
| 275 275 |  | 
| 276 276 | 
             
              # Creates a UUID using the SHA1 hash.  (Version 5)
         | 
| 277 | 
            -
              def  | 
| 278 | 
            -
                return  | 
| 277 | 
            +
              def self.sha1_create(namespace, name)
         | 
| 278 | 
            +
                return self.create_from_hash(Digest::SHA1, namespace, name)
         | 
| 279 279 | 
             
              end
         | 
| 280 280 |  | 
| 281 281 | 
             
              # This method applies only to version 1 UUIDs.
         | 
| @@ -401,7 +401,7 @@ class UUID | |
| 401 401 |  | 
| 402 402 | 
             
              # Returns the raw bytes that represent this UUID.
         | 
| 403 403 | 
             
              def raw
         | 
| 404 | 
            -
                return  | 
| 404 | 
            +
                return self.class.convert_int_to_byte_string(self.to_i, 16)
         | 
| 405 405 | 
             
              end
         | 
| 406 406 |  | 
| 407 407 | 
             
              # Returns a string representation for this UUID.
         | 
| @@ -424,18 +424,13 @@ class UUID | |
| 424 424 | 
             
                end
         | 
| 425 425 | 
             
                return bytes
         | 
| 426 426 | 
             
              end
         | 
| 427 | 
            -
                
         | 
| 428 | 
            -
              # Returns a URI for this UUID.
         | 
| 429 | 
            -
              def to_uri
         | 
| 430 | 
            -
                return URI.parse(self.to_uri_string)
         | 
| 431 | 
            -
              end
         | 
| 432 427 |  | 
| 433 428 | 
             
              # Returns a URI string for this UUID.
         | 
| 434 | 
            -
              def  | 
| 429 | 
            +
              def to_uri
         | 
| 435 430 | 
             
                return "urn:uuid:#{self.to_s}"
         | 
| 436 431 | 
             
              end
         | 
| 437 432 |  | 
| 438 | 
            -
              def  | 
| 433 | 
            +
              def self.create_from_hash(hash_class, namespace, name) #:nodoc:
         | 
| 439 434 | 
             
                if hash_class == Digest::MD5
         | 
| 440 435 | 
             
                  version = 3
         | 
| 441 436 | 
             
                elsif hash_class == Digest::SHA1
         | 
| @@ -448,7 +443,7 @@ class UUID | |
| 448 443 | 
             
                hash.update(namespace.raw)
         | 
| 449 444 | 
             
                hash.update(name)
         | 
| 450 445 | 
             
                hash_string = hash.to_s[0..31]
         | 
| 451 | 
            -
                new_uuid =  | 
| 446 | 
            +
                new_uuid = self.parse("#{hash_string[0..7]}-#{hash_string[8..11]}-" +
         | 
| 452 447 | 
             
                  "#{hash_string[12..15]}-#{hash_string[16..19]}-#{hash_string[20..31]}")
         | 
| 453 448 |  | 
| 454 449 | 
             
                new_uuid.time_hi_and_version &= 0x0FFF
         | 
| @@ -460,9 +455,18 @@ class UUID | |
| 460 455 |  | 
| 461 456 | 
             
              # Returns the MAC address of the current computer's network card.
         | 
| 462 457 | 
             
              # Returns nil if a MAC address could not be found.
         | 
| 463 | 
            -
              def  | 
| 458 | 
            +
              def self.get_mac_address #:nodoc:
         | 
| 464 459 | 
             
                if @@mac_address.nil?
         | 
| 465 | 
            -
                  if RUBY_PLATFORM =~ / | 
| 460 | 
            +
                  if RUBY_PLATFORM =~ /solaris/
         | 
| 461 | 
            +
                    begin
         | 
| 462 | 
            +
                    	ifconfig_output = `/sbin/ifconfig -a`
         | 
| 463 | 
            +
                    	ip_addresses = ifconfig_output.scan(
         | 
| 464 | 
            +
                    	  /inet\s?(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})/)
         | 
| 465 | 
            +
                    	ip = ip_addresses.find {|addr| addr[0] != '127.0.0.1'}[0]
         | 
| 466 | 
            +
                    	@@mac_address = `/usr/sbin/arp #{ip}`.split(' ')[3]
         | 
| 467 | 
            +
                    rescue Exception
         | 
| 468 | 
            +
                    end
         | 
| 469 | 
            +
                  elsif RUBY_PLATFORM =~ /win/ && !(RUBY_PLATFORM =~ /darwin/)
         | 
| 466 470 | 
             
                    begin
         | 
| 467 471 | 
             
                      ifconfig_output = `ipconfig /all`
         | 
| 468 472 | 
             
                      mac_addresses = ifconfig_output.scan(
         | 
| @@ -475,11 +479,19 @@ class UUID | |
| 475 479 | 
             
                  else
         | 
| 476 480 | 
             
                    begin
         | 
| 477 481 | 
             
                      mac_addresses = []
         | 
| 478 | 
            -
                      if  | 
| 479 | 
            -
                        ifconfig_output =
         | 
| 480 | 
            -
             | 
| 482 | 
            +
                      if RUBY_PLATFORM =~ /netbsd/
         | 
| 483 | 
            +
                        ifconfig_output = `/sbin/ifconfig -a 2>&1`
         | 
| 484 | 
            +
                        mac_addresses = ifconfig_output.scan(
         | 
| 485 | 
            +
                          Regexp.new("address\: (#{(["[0-9a-fA-F]{2}"] * 6).join(":")})"))
         | 
| 486 | 
            +
                      elsif File.exists?('/sbin/ifconfig')
         | 
| 487 | 
            +
                        ifconfig_output = `/sbin/ifconfig 2>&1`
         | 
| 481 488 | 
             
                        mac_addresses = ifconfig_output.scan(
         | 
| 482 489 | 
             
                          Regexp.new("ether (#{(["[0-9a-fA-F]{2}"] * 6).join(":")})"))
         | 
| 490 | 
            +
                        if mac_addresses.size == 0
         | 
| 491 | 
            +
                          ifconfig_output = `/sbin/ifconfig -a 2>&1`
         | 
| 492 | 
            +
                          mac_addresses = ifconfig_output.scan(
         | 
| 493 | 
            +
                            Regexp.new("ether (#{(["[0-9a-fA-F]{2}"] * 6).join(":")})"))
         | 
| 494 | 
            +
                        end
         | 
| 483 495 | 
             
                        if mac_addresses.size == 0
         | 
| 484 496 | 
             
                          ifconfig_output =
         | 
| 485 497 | 
             
                            `/sbin/ifconfig | grep HWaddr | cut -c39- 2>&1`
         | 
| @@ -491,6 +503,12 @@ class UUID | |
| 491 503 | 
             
                          `ifconfig 2>&1`
         | 
| 492 504 | 
             
                        mac_addresses = ifconfig_output.scan(
         | 
| 493 505 | 
             
                          Regexp.new("ether (#{(["[0-9a-fA-F]{2}"] * 6).join(":")})"))
         | 
| 506 | 
            +
                        if mac_addresses.size == 0
         | 
| 507 | 
            +
                          ifconfig_output =
         | 
| 508 | 
            +
                            `ifconfig -a 2>&1`
         | 
| 509 | 
            +
                          mac_addresses = ifconfig_output.scan(
         | 
| 510 | 
            +
                            Regexp.new("ether (#{(["[0-9a-fA-F]{2}"] * 6).join(":")})"))
         | 
| 511 | 
            +
                        end
         | 
| 494 512 | 
             
                        if mac_addresses.size == 0
         | 
| 495 513 | 
             
                          ifconfig_output =
         | 
| 496 514 | 
             
                            `ifconfig | grep HWaddr | cut -c39- 2>&1`
         | 
| @@ -504,51 +522,48 @@ class UUID | |
| 504 522 | 
             
                    rescue
         | 
| 505 523 | 
             
                    end
         | 
| 506 524 | 
             
                  end
         | 
| 525 | 
            +
                  @@mac_address.downcase! if @@mac_address.respond_to?(:downcase!)
         | 
| 526 | 
            +
                  @@mac_address.strip! if @@mac_address.respond_to?(:strip!)
         | 
| 527 | 
            +
                  # Verify that the MAC address is in the right format.
         | 
| 528 | 
            +
                  # Nil it out if it isn't.
         | 
| 529 | 
            +
                  unless @@mac_address.respond_to?(:scan) &&
         | 
| 530 | 
            +
                      @@mac_address.scan(/#{(["[0-9a-f]{2}"] * 6).join(":")}/)
         | 
| 531 | 
            +
                    @@mac_address = nil
         | 
| 532 | 
            +
                  end
         | 
| 507 533 | 
             
                end
         | 
| 508 534 | 
             
                return @@mac_address
         | 
| 509 535 | 
             
              end
         | 
| 536 | 
            +
              class <<self
         | 
| 537 | 
            +
                alias_method :mac_address, :get_mac_address
         | 
| 538 | 
            +
              end
         | 
| 510 539 |  | 
| 511 | 
            -
              #  | 
| 512 | 
            -
              #  | 
| 513 | 
            -
               | 
| 514 | 
            -
             | 
| 515 | 
            -
             | 
| 516 | 
            -
             | 
| 517 | 
            -
             | 
| 518 | 
            -
             | 
| 519 | 
            -
             | 
| 520 | 
            -
                  hash.update(rand.to_s)
         | 
| 521 | 
            -
                  hash.update(srand.to_s)
         | 
| 522 | 
            -
                  hash.update(Time.now.to_s)
         | 
| 523 | 
            -
                  hash.update(rand.to_s)
         | 
| 524 | 
            -
                  hash.update(self.object_id.to_s)
         | 
| 525 | 
            -
                  hash.update(rand.to_s)
         | 
| 526 | 
            -
                  hash.update(hash.object_id.to_s)
         | 
| 527 | 
            -
                  hash.update(self.methods.inspect)
         | 
| 528 | 
            -
                  hash.update($:.to_s)
         | 
| 540 | 
            +
              # Allows users to set the MAC address manually in cases where the MAC
         | 
| 541 | 
            +
              # address cannot be obtained programatically.
         | 
| 542 | 
            +
              def self.mac_address=(new_mac_address)
         | 
| 543 | 
            +
                @@mac_address = new_mac_address
         | 
| 544 | 
            +
              end
         | 
| 545 | 
            +
              
         | 
| 546 | 
            +
              # 128 bits of unpredictable data.
         | 
| 547 | 
            +
              def self.random_128 #:nodoc:
         | 
| 548 | 
            +
                if !defined?(@random_device) || @random_device == nil
         | 
| 529 549 | 
             
                  begin
         | 
| 530 | 
            -
                    random_device = nil
         | 
| 550 | 
            +
                    @random_device = nil
         | 
| 531 551 | 
             
                    if File.exists? "/dev/urandom"
         | 
| 532 | 
            -
                      random_device = File.open "/dev/urandom", "r"
         | 
| 552 | 
            +
                      @random_device = File.open "/dev/urandom", "r"
         | 
| 533 553 | 
             
                    elsif File.exists? "/dev/random"
         | 
| 534 | 
            -
                      random_device = File.open "/dev/random", "r"
         | 
| 554 | 
            +
                      @random_device = File.open "/dev/random", "r"
         | 
| 535 555 | 
             
                    end
         | 
| 536 | 
            -
             | 
| 537 | 
            -
                  rescue
         | 
| 556 | 
            +
                  rescue Exception
         | 
| 538 557 | 
             
                  end
         | 
| 539 | 
            -
                  begin
         | 
| 540 | 
            -
                    srand(hash.to_s.to_i(16) >> 128)
         | 
| 541 | 
            -
                  rescue
         | 
| 542 | 
            -
                  end
         | 
| 543 | 
            -
                  hash.update(rand.to_s)
         | 
| 544 | 
            -
                  hash.update(UUID.true_random) if (rand(2) == 0)
         | 
| 545 558 | 
             
                end
         | 
| 546 | 
            -
                 | 
| 547 | 
            -
             | 
| 548 | 
            -
                 | 
| 559 | 
            +
                begin
         | 
| 560 | 
            +
                  return @random_device.read(16) if @random_device != nil
         | 
| 561 | 
            +
                rescue Exception
         | 
| 562 | 
            +
                end
         | 
| 563 | 
            +
                return (1..8).to_a.map { rand(0x10000) }.pack("n8")
         | 
| 549 564 | 
             
              end
         | 
| 550 565 |  | 
| 551 | 
            -
              def  | 
| 566 | 
            +
              def self.convert_int_to_byte_string(integer, size) #:nodoc:
         | 
| 552 567 | 
             
                byte_string = ""
         | 
| 553 568 | 
             
                for i in 0..(size - 1)
         | 
| 554 569 | 
             
                  byte_string << ((integer >> (((size - 1) - i) * 8)) & 0xFF)
         | 
| @@ -556,7 +571,7 @@ class UUID | |
| 556 571 | 
             
                return byte_string
         | 
| 557 572 | 
             
              end
         | 
| 558 573 |  | 
| 559 | 
            -
              def  | 
| 574 | 
            +
              def self.convert_byte_string_to_int(byte_string) #:nodoc:
         | 
| 560 575 | 
             
                integer = 0
         | 
| 561 576 | 
             
                size = byte_string.size
         | 
| 562 577 | 
             
                for i in 0..(size - 1)
         | 
| @@ -569,4 +584,4 @@ end | |
| 569 584 | 
             
            UUID_DNS_NAMESPACE = UUID.parse("6ba7b810-9dad-11d1-80b4-00c04fd430c8")
         | 
| 570 585 | 
             
            UUID_URL_NAMESPACE = UUID.parse("6ba7b811-9dad-11d1-80b4-00c04fd430c8")
         | 
| 571 586 | 
             
            UUID_OID_NAMESPACE = UUID.parse("6ba7b812-9dad-11d1-80b4-00c04fd430c8")
         | 
| 572 | 
            -
            UUID_X500_NAMESPACE = UUID.parse("6ba7b814-9dad-11d1-80b4-00c04fd430c8")
         | 
| 587 | 
            +
            UUID_X500_NAMESPACE = UUID.parse("6ba7b814-9dad-11d1-80b4-00c04fd430c8")
         | 
    
        data/rakefile
    CHANGED
    
    | @@ -7,7 +7,7 @@ require 'rake/gempackagetask' | |
| 7 7 | 
             
            require 'rake/contrib/rubyforgepublisher'
         | 
| 8 8 |  | 
| 9 9 | 
             
            PKG_NAME      = 'uuidtools'
         | 
| 10 | 
            -
            PKG_VERSION   = '1.0. | 
| 10 | 
            +
            PKG_VERSION   = '1.0.1'
         | 
| 11 11 | 
             
            PKG_FILE_NAME = "#{PKG_NAME}-#{PKG_VERSION}"
         | 
| 12 12 |  | 
| 13 13 | 
             
            RELEASE_NAME  = "REL #{PKG_VERSION}"
         | 
| @@ -16,7 +16,7 @@ RUBY_FORGE_PROJECT = "uuidtools" | |
| 16 16 | 
             
            RUBY_FORGE_USER    = "vacindak"
         | 
| 17 17 |  | 
| 18 18 | 
             
            PKG_FILES = FileList[
         | 
| 19 | 
            -
                "lib/**/*", "test/**/*", "examples/**/*", "doc/**/*", "[A-Z]*", " | 
| 19 | 
            +
                "lib/**/*", "test/**/*", "examples/**/*", "doc/**/*", "[A-Z]*", "rakefile"
         | 
| 20 20 | 
             
            ].exclude(/\bCVS\b|~$/).exclude(/database\.yml/)
         | 
| 21 21 |  | 
| 22 22 | 
             
            desc "Default Task"
         | 
| @@ -52,7 +52,7 @@ spec = Gem::Specification.new do |s| | |
| 52 52 | 
             
              s.summary = "Generation of UUIDs."
         | 
| 53 53 | 
             
              s.description = "Implements a simple system for generating UUIDs."
         | 
| 54 54 |  | 
| 55 | 
            -
              s.files = [ "rakefile", " | 
| 55 | 
            +
              s.files = [ "rakefile", "README", "CHANGELOG" ]
         | 
| 56 56 | 
             
              dist_dirs.each do |dir|
         | 
| 57 57 | 
             
                s.files = s.files + Dir.glob( "#{dir}/**/*" ).delete_if do |item|
         | 
| 58 58 | 
             
                  item.include?( "\.svn" ) || item.include?( "database\.yml" )
         | 
| @@ -101,6 +101,46 @@ task :lines do | |
| 101 101 | 
             
              puts "Total: Lines #{total_lines}, LOC #{total_codelines}"
         | 
| 102 102 | 
             
            end
         | 
| 103 103 |  | 
| 104 | 
            +
            task :benchmark do
         | 
| 105 | 
            +
              require 'lib/uuidtools'
         | 
| 106 | 
            +
              require 'benchmark'
         | 
| 107 | 
            +
              
         | 
| 108 | 
            +
              # Version 1
         | 
| 109 | 
            +
              result = Benchmark.measure do
         | 
| 110 | 
            +
                10000.times do
         | 
| 111 | 
            +
                  UUID.timestamp_create.to_s
         | 
| 112 | 
            +
                end
         | 
| 113 | 
            +
              end
         | 
| 114 | 
            +
              puts "#{(10000.0 / result.real)} version 1 per second."
         | 
| 115 | 
            +
             | 
| 116 | 
            +
              # Version 3
         | 
| 117 | 
            +
              result = Benchmark.measure do
         | 
| 118 | 
            +
                10000.times do
         | 
| 119 | 
            +
                  UUID.md5_create(UUID_URL_NAMESPACE,
         | 
| 120 | 
            +
                    "http://www.ietf.org/rfc/rfc4122.txt").to_s
         | 
| 121 | 
            +
                end
         | 
| 122 | 
            +
              end
         | 
| 123 | 
            +
              puts "#{(10000.0 / result.real)} version 3 per second."
         | 
| 124 | 
            +
             | 
| 125 | 
            +
              # Version 4
         | 
| 126 | 
            +
              result = Benchmark.measure do
         | 
| 127 | 
            +
                10000.times do
         | 
| 128 | 
            +
                  UUID.random_create.to_s
         | 
| 129 | 
            +
                end
         | 
| 130 | 
            +
              end
         | 
| 131 | 
            +
              puts "#{(10000.0 / result.real)} version 4 per second."
         | 
| 132 | 
            +
             | 
| 133 | 
            +
              # Version 5
         | 
| 134 | 
            +
              result = Benchmark.measure do
         | 
| 135 | 
            +
                10000.times do
         | 
| 136 | 
            +
                  UUID.sha1_create(UUID_URL_NAMESPACE,
         | 
| 137 | 
            +
                    "http://www.ietf.org/rfc/rfc4122.txt").to_s
         | 
| 138 | 
            +
                end
         | 
| 139 | 
            +
              end
         | 
| 140 | 
            +
              puts "#{(10000.0 / result.real)} version 5 per second."
         | 
| 141 | 
            +
              
         | 
| 142 | 
            +
            end
         | 
| 143 | 
            +
             | 
| 104 144 |  | 
| 105 145 | 
             
            # Publishing ------------------------------------------------------
         | 
| 106 146 |  | 
| @@ -0,0 +1,13 @@ | |
| 1 | 
            +
            require 'test/unit'
         | 
| 2 | 
            +
            require 'uuidtools'
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            class MacAddressTest < Test::Unit::TestCase
         | 
| 5 | 
            +
              def setup
         | 
| 6 | 
            +
              end
         | 
| 7 | 
            +
              
         | 
| 8 | 
            +
              def test_mac_address_object
         | 
| 9 | 
            +
                mac_address = UUID.mac_address
         | 
| 10 | 
            +
                assert_not_nil(mac_address)
         | 
| 11 | 
            +
                assert_equal(mac_address.object_id, UUID.mac_address.object_id)
         | 
| 12 | 
            +
              end
         | 
| 13 | 
            +
            end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,13 +1,13 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification 
         | 
| 2 | 
            -
            rubygems_version: 0. | 
| 2 | 
            +
            rubygems_version: 0.9.2
         | 
| 3 3 | 
             
            specification_version: 1
         | 
| 4 4 | 
             
            name: uuidtools
         | 
| 5 5 | 
             
            version: !ruby/object:Gem::Version 
         | 
| 6 | 
            -
              version: 1.0. | 
| 7 | 
            -
            date:  | 
| 6 | 
            +
              version: 1.0.1
         | 
| 7 | 
            +
            date: 2007-04-28 00:00:00 -04:00
         | 
| 8 8 | 
             
            summary: Generation of UUIDs.
         | 
| 9 9 | 
             
            require_paths: 
         | 
| 10 | 
            -
             | 
| 10 | 
            +
            - lib
         | 
| 11 11 | 
             
            email: bob@sporkmonger.com
         | 
| 12 12 | 
             
            homepage: http://sporkmonger.com/projects/uuidtools
         | 
| 13 13 | 
             
            rubyforge_project: uuidtools
         | 
| @@ -18,31 +18,36 @@ bindir: bin | |
| 18 18 | 
             
            has_rdoc: true
         | 
| 19 19 | 
             
            required_ruby_version: !ruby/object:Gem::Version::Requirement 
         | 
| 20 20 | 
             
              requirements: 
         | 
| 21 | 
            -
             | 
| 22 | 
            -
             | 
| 23 | 
            -
                   | 
| 24 | 
            -
                    version: 0.0.0
         | 
| 21 | 
            +
              - - ">"
         | 
| 22 | 
            +
                - !ruby/object:Gem::Version 
         | 
| 23 | 
            +
                  version: 0.0.0
         | 
| 25 24 | 
             
              version: 
         | 
| 26 25 | 
             
            platform: ruby
         | 
| 27 26 | 
             
            signing_key: 
         | 
| 28 27 | 
             
            cert_chain: 
         | 
| 28 | 
            +
            post_install_message: 
         | 
| 29 29 | 
             
            authors: 
         | 
| 30 | 
            -
             | 
| 30 | 
            +
            - Bob Aman
         | 
| 31 31 | 
             
            files: 
         | 
| 32 | 
            -
             | 
| 33 | 
            -
             | 
| 34 | 
            -
             | 
| 35 | 
            -
             | 
| 36 | 
            -
             | 
| 37 | 
            -
             | 
| 38 | 
            -
             | 
| 32 | 
            +
            - rakefile
         | 
| 33 | 
            +
            - README
         | 
| 34 | 
            +
            - CHANGELOG
         | 
| 35 | 
            +
            - lib/uuidtools.rb
         | 
| 36 | 
            +
            - test/create_test.rb
         | 
| 37 | 
            +
            - test/mac_address_test.rb
         | 
| 38 | 
            +
            - test/parse_test.rb
         | 
| 39 39 | 
             
            test_files: []
         | 
| 40 | 
            +
             | 
| 40 41 | 
             
            rdoc_options: 
         | 
| 41 | 
            -
             | 
| 42 | 
            -
             | 
| 42 | 
            +
            - --main
         | 
| 43 | 
            +
            - README
         | 
| 43 44 | 
             
            extra_rdoc_files: 
         | 
| 44 | 
            -
             | 
| 45 | 
            +
            - README
         | 
| 45 46 | 
             
            executables: []
         | 
| 47 | 
            +
             | 
| 46 48 | 
             
            extensions: []
         | 
| 49 | 
            +
             | 
| 47 50 | 
             
            requirements: []
         | 
| 48 | 
            -
             | 
| 51 | 
            +
             | 
| 52 | 
            +
            dependencies: []
         | 
| 53 | 
            +
             | 
    
        data/install.rb
    DELETED
    
    | @@ -1,30 +0,0 @@ | |
| 1 | 
            -
            require 'rbconfig'
         | 
| 2 | 
            -
            require 'find'
         | 
| 3 | 
            -
            require 'ftools'
         | 
| 4 | 
            -
             | 
| 5 | 
            -
            include Config
         | 
| 6 | 
            -
             | 
| 7 | 
            -
            # this was adapted from rdoc's install.rb by ways of Log4r
         | 
| 8 | 
            -
             | 
| 9 | 
            -
            $sitedir = CONFIG["sitelibdir"]
         | 
| 10 | 
            -
            unless $sitedir
         | 
| 11 | 
            -
              version = CONFIG["MAJOR"] + "." + CONFIG["MINOR"]
         | 
| 12 | 
            -
              $libdir = File.join(CONFIG["libdir"], "ruby", version)
         | 
| 13 | 
            -
              $sitedir = $:.find {|x| x =~ /site_ruby/ }
         | 
| 14 | 
            -
              if !$sitedir
         | 
| 15 | 
            -
                $sitedir = File.join($libdir, "site_ruby")
         | 
| 16 | 
            -
              elsif $sitedir !~ Regexp.quote(version)
         | 
| 17 | 
            -
                $sitedir = File.join($sitedir, version)
         | 
| 18 | 
            -
              end
         | 
| 19 | 
            -
            end
         | 
| 20 | 
            -
             | 
| 21 | 
            -
            # the acual gruntwork
         | 
| 22 | 
            -
            Dir.chdir("lib")
         | 
| 23 | 
            -
             | 
| 24 | 
            -
            Find.find("uuidtools.rb") { |f|
         | 
| 25 | 
            -
              if f[-3..-1] == ".rb"
         | 
| 26 | 
            -
                File::install(f, File.join($sitedir, *f.split(/\//)), 0644, true)
         | 
| 27 | 
            -
              else
         | 
| 28 | 
            -
                File::makedirs(File.join($sitedir, *f.split(/\//)))
         | 
| 29 | 
            -
              end
         | 
| 30 | 
            -
            }
         |