typed_uuid 4.0.rc2 → 4.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.
- checksums.yaml +4 -4
- data/.github/workflows/ci.yml +28 -0
- data/README.md +14 -6
- data/lib/typed_uuid.rb +60 -43
- data/lib/typed_uuid/railtie.rb +5 -4
- data/lib/typed_uuid/version.rb +1 -1
- data/test/test_helper.rb +13 -12
- data/test/typed_uuid_test.rb +41 -38
- data/typed_uuid.gemspec +3 -3
- metadata +5 -4
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: eb375ca568f121a2a996b9afd41123e18b820621e4417b2bce05024364eef414
         | 
| 4 | 
            +
              data.tar.gz: 15d885d11a1dbcb19ca60733312ad0b21bcf77a0f9ce165ce8b25fa24f43cecf
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 38c295658ce41fac5b51c27fdb4df1922ef426e71c2bb234e7af0e0b87abdb11e8110c3e4604e84909f30aa4a3fd2782b740b443aae9ee926fc7ad567a31a8f6
         | 
| 7 | 
            +
              data.tar.gz: 42139374aa96e9a43b5f0f7d749a410617fa14c1affd0fa334e1fe59661189fb58d911b26056aa9e5cc6092709db6ab62541c88f788be54cfe946f45bca5868c
         | 
| @@ -0,0 +1,28 @@ | |
| 1 | 
            +
            name: CI
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            on:
         | 
| 4 | 
            +
              push:
         | 
| 5 | 
            +
                branches: [ master ]
         | 
| 6 | 
            +
              pull_request:
         | 
| 7 | 
            +
                branches: [ master ]
         | 
| 8 | 
            +
             | 
| 9 | 
            +
            jobs:
         | 
| 10 | 
            +
              test:
         | 
| 11 | 
            +
                name: TypedUUID Test
         | 
| 12 | 
            +
                runs-on: ubuntu-20.04
         | 
| 13 | 
            +
             | 
| 14 | 
            +
                steps:
         | 
| 15 | 
            +
                  - uses: ruby/setup-ruby@v1
         | 
| 16 | 
            +
                    with:
         | 
| 17 | 
            +
                      ruby-version: 3.0
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                  - uses: actions/checkout@v2
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                  - run: |
         | 
| 22 | 
            +
                      sudo systemctl start postgresql.service
         | 
| 23 | 
            +
                      sudo -u postgres createuser runner --superuser
         | 
| 24 | 
            +
                      sudo -u postgres createdb uuid-types-test
         | 
| 25 | 
            +
             | 
| 26 | 
            +
                  - run: bundle
         | 
| 27 | 
            +
             | 
| 28 | 
            +
                  - run: bundle exec rake test
         | 
    
        data/README.md
    CHANGED
    
    | @@ -35,9 +35,17 @@ As with regular UUID Typed UUIDs come in multiple version. The current versions | |
| 35 35 | 
             
                         bits or a sequence counter. Then 8 random bits followed by 16 bits
         | 
| 36 36 | 
             
                         which are the UUID type.
         | 
| 37 37 |  | 
| 38 | 
            +
            - Version 3: A name-based UUID where the first 112 bits are based off the MD5
         | 
| 39 | 
            +
                         digest of the namespace and name. The following 16 bits are the
         | 
| 40 | 
            +
                         UUID type.
         | 
| 41 | 
            +
             | 
| 38 42 | 
             
            - Version 4: A random UUID where the first 112 bits are random. The following
         | 
| 39 43 | 
             
                         16 bits are the UUID type.
         | 
| 40 44 |  | 
| 45 | 
            +
            - Version 5: A name-based UUID where the first 112 bits are based off the SHA1
         | 
| 46 | 
            +
                         digest of the namespace and name. The following 16 bits are the
         | 
| 47 | 
            +
                         UUID type.
         | 
| 48 | 
            +
             | 
| 41 49 | 
             
            ## Install
         | 
| 42 50 |  | 
| 43 51 | 
             
            Add this to your Gemfile:
         | 
| @@ -74,7 +82,7 @@ a table. | |
| 74 82 |  | 
| 75 83 | 
             
            ```ruby
         | 
| 76 84 | 
             
            class CreateProperties < ActiveRecord::Migration[5.2]
         | 
| 77 | 
            -
              def change | 
| 85 | 
            +
              def change
         | 
| 78 86 | 
             
            	create_table :properties, id: :typed_uuid do |t|
         | 
| 79 87 | 
             
                  t.string "name", limit: 255
         | 
| 80 88 | 
             
                end
         | 
| @@ -88,19 +96,19 @@ To add a typed UUID to an existing table: | |
| 88 96 | 
             
            class UpdateProperties < ActiveRecord::Migration[6.1]
         | 
| 89 97 | 
             
              def change
         | 
| 90 98 | 
             
                klass_enum = ::ActiveRecord::Base.uuid_type_from_table_name(:properties)
         | 
| 91 | 
            -
             | 
| 99 | 
            +
             | 
| 92 100 | 
             
                # Add the column
         | 
| 93 101 | 
             
                add_column :properties, :typed_uuid, :uuid, default: -> { "typed_uuid('\\x#{klass_enum.to_s(16).rjust(4, '0')}')" }
         | 
| 94 | 
            -
             | 
| 102 | 
            +
             | 
| 95 103 | 
             
                # Update existing properties with a new typed UUID
         | 
| 96 104 | 
             
                execute "UPDATE properties SET id = typed_uuid('\\x#{klass_enum.to_s(16).rjust(4, '0')}');"
         | 
| 97 | 
            -
             | 
| 105 | 
            +
             | 
| 98 106 | 
             
                # Add null constraint since we'll swap these out for the primary key
         | 
| 99 107 | 
             
                change_column_null :properties, :typed_uuid, false
         | 
| 100 | 
            -
             | 
| 108 | 
            +
             | 
| 101 109 | 
             
                # TODO: Here you will want to update any reference to the old primary key
         | 
| 102 110 | 
             
                # with the new typed_uuid that will be the new primary key.
         | 
| 103 | 
            -
             | 
| 111 | 
            +
             | 
| 104 112 | 
             
                # Replace the old primary key with the typed_uuid
         | 
| 105 113 | 
             
                execute "ALTER TABLE properties DROP CONSTRAINT properties_pkey;"
         | 
| 106 114 | 
             
                rename_column :properties, :typed_uuid, :id
         | 
    
        data/lib/typed_uuid.rb
    CHANGED
    
    | @@ -1,52 +1,69 @@ | |
| 1 | 
            +
            require 'digest/sha1'
         | 
| 2 | 
            +
             | 
| 1 3 | 
             
            module TypedUUID
         | 
| 2 4 | 
             
              autoload :ActiveRecord, 'typed_uuid/active_record'
         | 
| 3 5 | 
             
              autoload :PsqlColumnMethods, 'typed_uuid/psql_column_methods'
         | 
| 4 6 | 
             
              autoload :PsqlSchemaDumper, 'typed_uuid/psql_schema_dumper'
         | 
| 5 | 
            -
             | 
| 6 | 
            -
               | 
| 7 | 
            -
             | 
| 8 | 
            -
             | 
| 7 | 
            +
             | 
| 8 | 
            +
              class << self
         | 
| 9 | 
            +
             | 
| 10 | 
            +
                def uuid(enum, version = 4, **options)
         | 
| 11 | 
            +
                  if enum < 0 || enum > 8_191
         | 
| 12 | 
            +
                    raise ArgumentError, "UUID type must be between 0 and 8,191"
         | 
| 13 | 
            +
                  end
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                  case version
         | 
| 16 | 
            +
                  when 1
         | 
| 17 | 
            +
                    timestamp_uuid(enum, **options)
         | 
| 18 | 
            +
                  when 3
         | 
| 19 | 
            +
                    namebased_uuid(enum, digester: Digest::MD5, **options)
         | 
| 20 | 
            +
                  when 4
         | 
| 21 | 
            +
                    random_uuid(enum, **options)
         | 
| 22 | 
            +
                  when 5
         | 
| 23 | 
            +
                    namebased_uuid(enum, digester: Digest::SHA1, **options)
         | 
| 24 | 
            +
                  end
         | 
| 9 25 | 
             
                end
         | 
| 10 | 
            -
             | 
| 11 | 
            -
                 | 
| 12 | 
            -
                   | 
| 13 | 
            -
             | 
| 14 | 
            -
                   | 
| 26 | 
            +
             | 
| 27 | 
            +
                def random_uuid(enum)
         | 
| 28 | 
            +
                  uuid = SecureRandom.random_bytes(16).unpack("nnnnnnnn")
         | 
| 29 | 
            +
             | 
| 30 | 
            +
                  uuid[7] = (uuid[2] ^ uuid[6]) ^ ((enum << 3) | 4)
         | 
| 31 | 
            +
                  "%04x%04x-%04x-%04x-%04x-%04x%04x%04x" % uuid
         | 
| 15 32 | 
             
                end
         | 
| 16 | 
            -
             | 
| 17 | 
            -
             | 
| 18 | 
            -
               | 
| 19 | 
            -
             | 
| 20 | 
            -
             | 
| 21 | 
            -
             | 
| 22 | 
            -
             | 
| 23 | 
            -
             | 
| 24 | 
            -
             | 
| 25 | 
            -
             | 
| 26 | 
            -
                 | 
| 27 | 
            -
             | 
| 28 | 
            -
                 | 
| 29 | 
            -
             | 
| 30 | 
            -
             | 
| 31 | 
            -
             | 
| 32 | 
            -
                 | 
| 33 | 
            -
             | 
| 34 | 
            -
             | 
| 35 | 
            -
             | 
| 36 | 
            -
             | 
| 37 | 
            -
                 | 
| 38 | 
            -
             | 
| 39 | 
            -
             | 
| 40 | 
            -
             | 
| 41 | 
            -
             | 
| 42 | 
            -
                 | 
| 43 | 
            -
             | 
| 44 | 
            -
             | 
| 45 | 
            -
             | 
| 46 | 
            -
             | 
| 47 | 
            -
                 | 
| 48 | 
            -
             | 
| 33 | 
            +
             | 
| 34 | 
            +
                def timestamp_uuid(enum, timestamp: nil, sequence: nil)
         | 
| 35 | 
            +
                  timestamp  ||= Time.now
         | 
| 36 | 
            +
             | 
| 37 | 
            +
                  uuid = [timestamp.to_i * 1_000_000 + timestamp.usec].pack('Q>')[1..-1]
         | 
| 38 | 
            +
                  uuid << (sequence&.pack('Q>') || SecureRandom.random_bytes(10))
         | 
| 39 | 
            +
             | 
| 40 | 
            +
                  uuid = uuid.unpack("nnnnnnnn")
         | 
| 41 | 
            +
                  uuid[7] = (uuid[2] ^ uuid[6]) ^ ((enum << 3) | 1)
         | 
| 42 | 
            +
                  "%04x%04x-%04x-%04x-%04x-%04x%04x%04x" % uuid
         | 
| 43 | 
            +
                end
         | 
| 44 | 
            +
             | 
| 45 | 
            +
                def namebased_uuid(enum, digester:, name:, namespace: "")
         | 
| 46 | 
            +
                  uuid = digester.digest(name + namespace).unpack("nnnnnnnn")
         | 
| 47 | 
            +
                  uuid[7] = (uuid[2] ^ uuid[6]) ^ ((enum << 3) | 5)
         | 
| 48 | 
            +
                  "%04x%04x-%04x-%04x-%04x-%04x%04x%04x" % uuid
         | 
| 49 | 
            +
                end
         | 
| 50 | 
            +
             | 
| 51 | 
            +
                def enum(uuid)
         | 
| 52 | 
            +
                  uuid = uuid.gsub('-', '')
         | 
| 53 | 
            +
                  ((uuid[8..11].to_i(16) ^ uuid[24..27].to_i(16)) ^ uuid[28..31].to_i(16)) >> 3
         | 
| 54 | 
            +
                end
         | 
| 55 | 
            +
             | 
| 56 | 
            +
                def version(uuid)
         | 
| 57 | 
            +
                  uuid = uuid.gsub('-', '')
         | 
| 58 | 
            +
                  ((uuid[8..11].to_i(16) ^ uuid[24..27].to_i(16)) ^ uuid[28..31].to_i(16)) & 0b0000000000000111
         | 
| 59 | 
            +
                end
         | 
| 60 | 
            +
             | 
| 61 | 
            +
                def timestamp(uuid)
         | 
| 62 | 
            +
                  uuid = uuid.gsub('-', '')
         | 
| 63 | 
            +
                  Time.at(*uuid[0..13].to_i(16).divmod(1_000_000), :usec)
         | 
| 64 | 
            +
                end
         | 
| 65 | 
            +
             | 
| 49 66 | 
             
              end
         | 
| 50 67 | 
             
            end
         | 
| 51 68 |  | 
| 52 | 
            -
            require 'typed_uuid/railtie' if defined? Rails
         | 
| 69 | 
            +
            require 'typed_uuid/railtie' if defined? Rails
         | 
    
        data/lib/typed_uuid/railtie.rb
    CHANGED
    
    | @@ -2,16 +2,17 @@ class TypedUUID::Railtie < Rails::Railtie | |
| 2 2 |  | 
| 3 3 | 
             
              initializer :typed_uuid do |app|
         | 
| 4 4 | 
             
                ActiveRecord::Tasks::DatabaseTasks.migrations_paths << File.expand_path('../../../db/migrate', __FILE__)
         | 
| 5 | 
            -
             | 
| 5 | 
            +
             | 
| 6 6 | 
             
                ActiveSupport.on_load(:active_record) do
         | 
| 7 7 | 
             
                  ActiveRecord::Base.include TypedUUID::ActiveRecord
         | 
| 8 8 | 
             
                end
         | 
| 9 | 
            -
             | 
| 9 | 
            +
             | 
| 10 10 | 
             
                require 'active_record/connection_adapters/postgresql/schema_definitions'
         | 
| 11 11 | 
             
                ActiveRecord::ConnectionAdapters::PostgreSQL::TableDefinition.include(TypedUUID::PsqlColumnMethods)
         | 
| 12 | 
            -
             | 
| 12 | 
            +
             | 
| 13 | 
            +
                require 'active_record/connection_adapters/abstract/schema_dumper'
         | 
| 13 14 | 
             
                require 'active_record/connection_adapters/postgresql/schema_dumper'
         | 
| 14 15 | 
             
                ActiveRecord::ConnectionAdapters::PostgreSQL::SchemaDumper.prepend(TypedUUID::PsqlSchemaDumper)
         | 
| 15 16 | 
             
              end
         | 
| 16 17 |  | 
| 17 | 
            -
            end
         | 
| 18 | 
            +
            end
         | 
    
        data/lib/typed_uuid/version.rb
    CHANGED
    
    
    
        data/test/test_helper.rb
    CHANGED
    
    | @@ -32,7 +32,7 @@ def MiniTest.filter_backtrace(bt) | |
| 32 32 | 
             
              bt
         | 
| 33 33 | 
             
            end
         | 
| 34 34 | 
             
            class ActiveSupport::TestCase
         | 
| 35 | 
            -
             | 
| 35 | 
            +
             | 
| 36 36 | 
             
              # File 'lib/active_support/testing/declarative.rb'
         | 
| 37 37 | 
             
              def self.test(name, &block)
         | 
| 38 38 | 
             
                test_name = "test_#{name.gsub(/\s+/, '_')}".to_sym
         | 
| @@ -46,31 +46,32 @@ class ActiveSupport::TestCase | |
| 46 46 | 
             
                  end
         | 
| 47 47 | 
             
                end
         | 
| 48 48 | 
             
              end
         | 
| 49 | 
            -
             | 
| 49 | 
            +
             | 
| 50 50 | 
             
              def self.schema(&block)
         | 
| 51 51 | 
             
                self.class_variable_set(:@@schema, block)
         | 
| 52 52 | 
             
              end
         | 
| 53 | 
            -
             | 
| 53 | 
            +
             | 
| 54 54 | 
             
              set_callback(:setup, :before) do
         | 
| 55 55 | 
             
                Rails.stubs(:application).returns(stub(config: stub(eager_load: true)))
         | 
| 56 56 | 
             
                if !self.class.class_variable_defined?(:@@suite_setup_run)
         | 
| 57 57 | 
             
                  ActiveRecord::Base.defined_uuid_types.clear
         | 
| 58 58 | 
             
                  ActiveRecord::Base.uuid_enum_to_class_cache.clear
         | 
| 59 59 | 
             
                  ActiveRecord::Base.class_to_uuid_type_cache.clear
         | 
| 60 | 
            -
             | 
| 60 | 
            +
             | 
| 61 61 | 
             
                  configuration = {
         | 
| 62 62 | 
             
                    adapter:  "postgresql",
         | 
| 63 63 | 
             
                    database: "uuid-types-test",
         | 
| 64 64 | 
             
                    encoding: "utf8"
         | 
| 65 65 | 
             
                  }.stringify_keys
         | 
| 66 | 
            -
             | 
| 67 | 
            -
                  db_tasks = ActiveRecord::Tasks::PostgreSQLDatabaseTasks.new(configuration)
         | 
| 68 | 
            -
                  db_tasks.purge
         | 
| 69 | 
            -
                
         | 
| 66 | 
            +
             | 
| 70 67 | 
             
                  ActiveRecord::Base.establish_connection(configuration)
         | 
| 68 | 
            +
             | 
| 69 | 
            +
                  db_tasks = ActiveRecord::Tasks::PostgreSQLDatabaseTasks.new(ActiveRecord::Base.connection_db_config)
         | 
| 70 | 
            +
                  db_tasks.purge
         | 
| 71 | 
            +
             | 
| 71 72 | 
             
                  ActiveRecord::Migration.suppress_messages do
         | 
| 72 73 | 
             
                    AddTypedUuidFunction.migrate :up
         | 
| 73 | 
            -
             | 
| 74 | 
            +
             | 
| 74 75 | 
             
                    if self.class.class_variable_defined?(:@@schema)
         | 
| 75 76 | 
             
                      ActiveRecord::Schema.define(&self.class.class_variable_get(:@@schema))
         | 
| 76 77 | 
             
                      ActiveRecord::Migration.execute("SELECT c.relname FROM pg_class c WHERE c.relkind = 'S'").each_row do |row|
         | 
| @@ -134,7 +135,7 @@ class ActiveSupport::TestCase | |
| 134 135 | 
             
                  end
         | 
| 135 136 | 
             
                end
         | 
| 136 137 | 
             
              end
         | 
| 137 | 
            -
             | 
| 138 | 
            +
             | 
| 138 139 | 
             
              class SQLLogger
         | 
| 139 140 | 
             
                class << self
         | 
| 140 141 | 
             
                  attr_accessor :ignored_sql, :log, :log_all
         | 
| @@ -197,5 +198,5 @@ class ActiveSupport::TestCase | |
| 197 198 | 
             
              alias :assert_not_predicate :refute_predicate
         | 
| 198 199 | 
             
              alias :assert_not_respond_to :refute_respond_to
         | 
| 199 200 | 
             
              alias :assert_not_same :refute_same
         | 
| 200 | 
            -
             | 
| 201 | 
            -
            end
         | 
| 201 | 
            +
             | 
| 202 | 
            +
            end
         | 
    
        data/test/typed_uuid_test.rb
    CHANGED
    
    | @@ -1,45 +1,45 @@ | |
| 1 1 | 
             
            require 'test_helper'
         | 
| 2 2 |  | 
| 3 | 
            -
            class  | 
| 3 | 
            +
            class UUIDTest < ActiveSupport::TestCase
         | 
| 4 4 |  | 
| 5 5 | 
             
              schema do
         | 
| 6 6 | 
             
                ActiveRecord::Base.register_uuid_types({
         | 
| 7 | 
            -
                  ' | 
| 8 | 
            -
                  ' | 
| 9 | 
            -
                  ' | 
| 7 | 
            +
                  'UUIDTest::Listing'  => {enum: 0, version: 1},
         | 
| 8 | 
            +
                  'UUIDTest::Building' => 592,
         | 
| 9 | 
            +
                  'UUIDTest::SkyScraper' => {enum: 1_952}
         | 
| 10 10 | 
             
                })
         | 
| 11 | 
            -
             | 
| 11 | 
            +
             | 
| 12 12 | 
             
                create_table :listings, id: :typed_uuid do |t|
         | 
| 13 13 | 
             
                  t.string   "name", limit: 255
         | 
| 14 14 | 
             
                end
         | 
| 15 | 
            -
             | 
| 15 | 
            +
             | 
| 16 16 | 
             
                create_table :buildings, id: :typed_uuid do |t|
         | 
| 17 17 | 
             
                  t.string   "name", limit: 255
         | 
| 18 18 | 
             
                  t.string   "type", limit: 255
         | 
| 19 19 | 
             
                end
         | 
| 20 20 | 
             
              end
         | 
| 21 | 
            -
             | 
| 21 | 
            +
             | 
| 22 22 | 
             
              class Listing < ActiveRecord::Base
         | 
| 23 23 | 
             
              end
         | 
| 24 | 
            -
             | 
| 24 | 
            +
             | 
| 25 25 | 
             
              class Building < ActiveRecord::Base
         | 
| 26 26 | 
             
              end
         | 
| 27 | 
            -
             | 
| 27 | 
            +
             | 
| 28 28 | 
             
              class SkyScraper < Building
         | 
| 29 29 | 
             
              end
         | 
| 30 30 |  | 
| 31 31 | 
             
              class SingleFamilyHome < Building
         | 
| 32 32 | 
             
              end
         | 
| 33 | 
            -
             | 
| 33 | 
            +
             | 
| 34 34 | 
             
              class Property < ActiveRecord::Base
         | 
| 35 35 | 
             
              end
         | 
| 36 | 
            -
             | 
| 36 | 
            +
             | 
| 37 37 | 
             
              class Lot < ActiveRecord::Base
         | 
| 38 38 | 
             
              end
         | 
| 39 | 
            -
             | 
| 39 | 
            +
             | 
| 40 40 | 
             
              test 'adding primary key as a typed_uuid in a migration' do
         | 
| 41 41 | 
             
                ActiveRecord::Base.register_uuid_types({
         | 
| 42 | 
            -
                  1 => ' | 
| 42 | 
            +
                  1 => 'UUIDTest::Property'
         | 
| 43 43 | 
             
                })
         | 
| 44 44 |  | 
| 45 45 | 
             
                exprexted_sql = <<-SQL
         | 
| @@ -57,7 +57,7 @@ class FilterTest < ActiveSupport::TestCase | |
| 57 57 |  | 
| 58 58 | 
             
              test 'adding primary key as a typed_uuid in a migration with a version' do
         | 
| 59 59 | 
             
                ActiveRecord::Base.register_uuid_types({
         | 
| 60 | 
            -
                  ' | 
| 60 | 
            +
                  'UUIDTest::Lot' => {version: 1, enum: 512}
         | 
| 61 61 | 
             
                })
         | 
| 62 62 |  | 
| 63 63 | 
             
                exprexted_sql = <<-SQL
         | 
| @@ -75,58 +75,61 @@ class FilterTest < ActiveSupport::TestCase | |
| 75 75 |  | 
| 76 76 | 
             
              test 'typed_uuid' do
         | 
| 77 77 | 
             
                assert_equal 512, TypedUUID.enum(TypedUUID.uuid(512))
         | 
| 78 | 
            -
                assert_equal  | 
| 79 | 
            -
                assert_equal  | 
| 80 | 
            -
                assert_equal  | 
| 81 | 
            -
                
         | 
| 78 | 
            +
                assert_equal 512, TypedUUID.enum(TypedUUID.uuid(512, 1))
         | 
| 79 | 
            +
                assert_equal 512, TypedUUID.enum(TypedUUID.uuid(512, 3, name: "test"))
         | 
| 80 | 
            +
                assert_equal 512, TypedUUID.enum(TypedUUID.uuid(512, 5, name: "test"))
         | 
| 81 | 
            +
                assert_equal UUIDTest::Listing,    ::ActiveRecord::Base.class_from_uuid(Listing.typed_uuid)
         | 
| 82 | 
            +
                assert_equal UUIDTest::Building,   ::ActiveRecord::Base.class_from_uuid(Building.typed_uuid)
         | 
| 83 | 
            +
                assert_equal UUIDTest::SkyScraper, ::ActiveRecord::Base.class_from_uuid(SkyScraper.typed_uuid)
         | 
| 84 | 
            +
             | 
| 82 85 | 
             
                assert_raises ArgumentError do
         | 
| 83 86 | 
             
                  ::ActiveRecord::Base.class_from_uuid(SingleFamilyHome.typed_uuid)
         | 
| 84 87 | 
             
                end
         | 
| 85 88 | 
             
              end
         | 
| 86 | 
            -
             | 
| 89 | 
            +
             | 
| 87 90 | 
             
              test 'typed_uuid v1' do
         | 
| 88 91 | 
             
                time = Time.at(1606612254, 370979, :usec)
         | 
| 89 92 | 
             
                Time.stubs(:now).returns(time)
         | 
| 90 93 |  | 
| 91 94 | 
             
                uuid = TypedUUID.uuid(592, 1)
         | 
| 92 | 
            -
             | 
| 95 | 
            +
             | 
| 93 96 | 
             
                assert_equal 1, TypedUUID.version(uuid)
         | 
| 94 97 | 
             
                assert_equal 592, TypedUUID.enum(uuid)
         | 
| 95 | 
            -
             | 
| 98 | 
            +
             | 
| 96 99 | 
             
                assert_equal time, TypedUUID.timestamp(uuid)
         | 
| 97 100 | 
             
                assert_equal time.to_i, TypedUUID.timestamp(uuid).to_i
         | 
| 98 101 | 
             
                assert_equal time.nsec, TypedUUID.timestamp(uuid).nsec
         | 
| 99 | 
            -
             | 
| 102 | 
            +
             | 
| 100 103 | 
             
                assert_equal Listing, ::ActiveRecord::Base.class_from_uuid(Listing.typed_uuid)
         | 
| 101 104 | 
             
              end
         | 
| 102 | 
            -
             | 
| 105 | 
            +
             | 
| 103 106 | 
             
              test 'class_from uuid generated bye PostgresQL' do
         | 
| 104 107 | 
             
                listing = Listing.create
         | 
| 105 108 | 
             
                building = Building.create
         | 
| 106 109 | 
             
                skyscraper = SkyScraper.create
         | 
| 107 | 
            -
             | 
| 108 | 
            -
                assert_equal  | 
| 109 | 
            -
                assert_equal  | 
| 110 | 
            -
                assert_equal  | 
| 110 | 
            +
             | 
| 111 | 
            +
                assert_equal UUIDTest::Listing, ::ActiveRecord::Base.class_from_uuid(listing.id)
         | 
| 112 | 
            +
                assert_equal UUIDTest::Building, ::ActiveRecord::Base.class_from_uuid(building.id)
         | 
| 113 | 
            +
                assert_equal UUIDTest::SkyScraper, ::ActiveRecord::Base.class_from_uuid(skyscraper.id)
         | 
| 111 114 |  | 
| 112 115 | 
             
                assert_raises ArgumentError do
         | 
| 113 116 | 
             
                  SingleFamilyHome.create
         | 
| 114 117 | 
             
                end
         | 
| 115 118 | 
             
              end
         | 
| 116 | 
            -
             | 
| 119 | 
            +
             | 
| 117 120 | 
             
              test 'class_from v1 uuid generated bye PostgresQL' do
         | 
| 118 121 | 
             
                listing = Listing.create
         | 
| 119 | 
            -
             | 
| 122 | 
            +
             | 
| 120 123 | 
             
                assert_equal Listing, ::ActiveRecord::Base.class_from_uuid(listing.id)
         | 
| 121 124 | 
             
              end
         | 
| 122 | 
            -
             | 
| 125 | 
            +
             | 
| 123 126 | 
             
              test 'uuid_enum from table_name' do
         | 
| 124 127 | 
             
                assert_equal 0, ::ActiveRecord::Base.uuid_enum_from_table_name(:listings)
         | 
| 125 128 | 
             
                assert_equal 0, ::ActiveRecord::Base.uuid_enum_from_table_name('listings')
         | 
| 126 | 
            -
             | 
| 129 | 
            +
             | 
| 127 130 | 
             
                assert_equal 592, ::ActiveRecord::Base.uuid_enum_from_table_name(:buildings)
         | 
| 128 131 | 
             
              end
         | 
| 129 | 
            -
             | 
| 132 | 
            +
             | 
| 130 133 | 
             
              test 'uuid_version from table_name' do
         | 
| 131 134 | 
             
                assert_equal 1, ::ActiveRecord::Base.uuid_version_from_table_name(:listings)
         | 
| 132 135 | 
             
                assert_equal 1, ::ActiveRecord::Base.uuid_version_from_table_name('listings')
         | 
| @@ -144,11 +147,11 @@ class FilterTest < ActiveSupport::TestCase | |
| 144 147 | 
             
                assert_equal 4, ::ActiveRecord::Base.uuid_version_from_class(Building)
         | 
| 145 148 | 
             
                assert_equal 4, ::ActiveRecord::Base.uuid_version_from_class(SkyScraper)
         | 
| 146 149 | 
             
              end
         | 
| 147 | 
            -
             | 
| 150 | 
            +
             | 
| 148 151 | 
             
              test 'class from uuid_enum' do
         | 
| 149 | 
            -
                assert_equal  | 
| 150 | 
            -
                assert_equal  | 
| 151 | 
            -
                assert_equal  | 
| 152 | 
            +
                assert_equal UUIDTest::Listing, ::ActiveRecord::Base.class_from_uuid_enum(0)
         | 
| 153 | 
            +
                assert_equal UUIDTest::Building, ::ActiveRecord::Base.class_from_uuid_enum(592)
         | 
| 154 | 
            +
                assert_equal UUIDTest::SkyScraper, ::ActiveRecord::Base.class_from_uuid_enum(1_952)
         | 
| 152 155 | 
             
              end
         | 
| 153 | 
            -
             | 
| 154 | 
            -
            end
         | 
| 156 | 
            +
             | 
| 157 | 
            +
            end
         | 
    
        data/typed_uuid.gemspec
    CHANGED
    
    | @@ -14,7 +14,7 @@ Gem::Specification.new do |s| | |
| 14 14 | 
             
              s.executables   = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
         | 
| 15 15 | 
             
              s.require_paths = ["lib"]
         | 
| 16 16 |  | 
| 17 | 
            -
              # Developoment | 
| 17 | 
            +
              # Developoment
         | 
| 18 18 | 
             
              s.add_development_dependency 'rake'
         | 
| 19 19 | 
             
              s.add_development_dependency 'bundler'
         | 
| 20 20 | 
             
              s.add_development_dependency 'minitest'
         | 
| @@ -25,7 +25,7 @@ Gem::Specification.new do |s| | |
| 25 25 | 
             
              s.add_development_dependency 'activesupport', '>= 6.0.0'
         | 
| 26 26 | 
             
              s.add_development_dependency 'rails', '>= 6.0.0'
         | 
| 27 27 | 
             
              s.add_development_dependency 'pg'
         | 
| 28 | 
            -
             | 
| 28 | 
            +
             | 
| 29 29 | 
             
              # Runtime
         | 
| 30 30 | 
             
              s.add_runtime_dependency 'activerecord', '>= 6.0.0'
         | 
| 31 | 
            -
            end
         | 
| 31 | 
            +
            end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: typed_uuid
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 4.0 | 
| 4 | 
            +
              version: '4.0'
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Jon Bracy
         | 
| 8 8 | 
             
            autorequire:
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2021- | 
| 11 | 
            +
            date: 2021-08-02 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: rake
         | 
| @@ -171,6 +171,7 @@ executables: [] | |
| 171 171 | 
             
            extensions: []
         | 
| 172 172 | 
             
            extra_rdoc_files: []
         | 
| 173 173 | 
             
            files:
         | 
| 174 | 
            +
            - ".github/workflows/ci.yml"
         | 
| 174 175 | 
             
            - ".gitignore"
         | 
| 175 176 | 
             
            - ".tm_properties"
         | 
| 176 177 | 
             
            - Gemfile
         | 
| @@ -201,9 +202,9 @@ required_ruby_version: !ruby/object:Gem::Requirement | |
| 201 202 | 
             
                  version: '0'
         | 
| 202 203 | 
             
            required_rubygems_version: !ruby/object:Gem::Requirement
         | 
| 203 204 | 
             
              requirements:
         | 
| 204 | 
            -
              - - " | 
| 205 | 
            +
              - - ">="
         | 
| 205 206 | 
             
                - !ruby/object:Gem::Version
         | 
| 206 | 
            -
                  version:  | 
| 207 | 
            +
                  version: '0'
         | 
| 207 208 | 
             
            requirements: []
         | 
| 208 209 | 
             
            rubygems_version: 3.2.3
         | 
| 209 210 | 
             
            signing_key:
         |