based_uuid 0.5.2 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 12b33dff554590869533e56e76997cf63cd436acd9bd0d95a86c574ea1419d63
4
- data.tar.gz: 2b98906ea6459f21d32c9ec0170cd443333a2529570f6cf8d9731d117792d529
3
+ metadata.gz: 44d2023b06834d9043fc245f4df1a8963a360337dfdde32f8bb99b579f4ab317
4
+ data.tar.gz: 7a5c34de026288973f1a41bb7a49f176ec2bdb77b6ed2d3ff68096311b3f1715
5
5
  SHA512:
6
- metadata.gz: 1592b674765c4230b53adac6071197d812cef83ea8237523e713db4e64dbc2c1d0e9f383d20c2f132bd3c64f702b4b0ad112977b44e87e8501c7c5d92febdce0
7
- data.tar.gz: a9b2f1c4d393c7c8c84b21b76f1d3b54c2df4582b237738dd9f6ecfc0339339ddf1333739d5b4ce399da01b8306411c870f4b1c9c7a6217de5777a46c9d76546
6
+ metadata.gz: 3369d39151be720015bbdc9a330631405b5d90e9021755500d933cfd60dd9b432eda9d25de220e612d4393a4bcb71d057ba82c31cc5da83054828d7c34648283
7
+ data.tar.gz: 982f29d49439441ede750b3fa1c6cb06a09aec805a4745ac8ae0b2ef3f9f2cd5cdf96a4a8c3394c4617333e536dbaff2e01810d77dd8a6b00bd34e2fe2b89a5e
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # BasedUUID: double-clickable, URL-friendly UUIDs for your Rails models
1
+ # BasedUUID: URL-friendly UUIDs for Rails models
2
2
 
3
3
  [![Build Status](https://github.com/pch/based_uuid/workflows/Tests/badge.svg)](https://github.com/pch/based_uuid/actions) [![Gem Version](https://badge.fury.io/rb/based_uuid.svg)](https://badge.fury.io/rb/based_uuid)
4
4
 
@@ -6,13 +6,13 @@
6
6
  Generate “double-clickable”, URL-friendly UUIDs with (optional) prefixes:
7
7
 
8
8
  ```
9
- user_4yoiald3wfbvpeu2sbsk7cssdi
10
- acc_ejwqg7b3gvaphiylb25xq545tm
9
+ user_763j02ryxh8dbs56mgcjqrmmgt #=> e61c802c-7bb1-4357-929a-9064af8a521a
10
+ bpo_12dm1qresn83st62reqdw7f7cv #=> 226d037c-3b35-40f3-a30b-0ebb78779d9b
11
11
  ```
12
12
 
13
- This gem works by encoding UUIDs into 26-character lowercase strings using [Crockford’s base32](https://www.crockford.com/base32.html) encoding. The optional prefix helps you identify the model it represents.
13
+ This gem encodes UUID primary keys into 26-character lowercase strings using [Crockford’s base32](https://www.crockford.com/base32.html) encoding. The optional prefix helps you identify the model it represents.
14
14
 
15
- BasedUUID doesn’t affect how your ActiveRecord primary key UUIDs are stored in the database. Prefix and base32 encoding are only used for presentation.
15
+ BasedUUID assumes that you have a [UUID primary key](https://guides.rubyonrails.org/v5.0/active_record_postgresql.html#uuid) (`id`) in your ActiveRecord model. It doesn’t affect how your primary key UUIDs are stored in the database. Prefixes and base32-encoded strings are only used for presentation.
16
16
 
17
17
  ## Installation
18
18
 
@@ -24,7 +24,7 @@ gem "based_uuid"
24
24
 
25
25
  ## Usage
26
26
 
27
- BasedUUID assumes that you have a [UUID primary key](https://guides.rubyonrails.org/v5.0/active_record_postgresql.html#uuid) in your ActiveRecord model.
27
+ Add the following line to your model class:
28
28
 
29
29
  ```ruby
30
30
  class BlogPost < ApplicationRecord
@@ -32,8 +32,8 @@ class BlogPost < ApplicationRecord
32
32
  end
33
33
 
34
34
  post = BlogPost.last
35
- post.based_uuid #=> bpo_3ah4veflijgy7de6bflk7k4ld4
36
- post.based_uuid(prefix: false) #=> 3ah4veflijgy7de6bflk7k4ld4
35
+ post.based_uuid #=> bpo_12dm1qresn83st62reqdw7f7cv
36
+ post.based_uuid(prefix: false) #=> 12dm1qresn83st62reqdw7f7cv
37
37
  ```
38
38
 
39
39
  ### Lookup
@@ -41,13 +41,13 @@ post.based_uuid(prefix: false) #=> 3ah4veflijgy7de6bflk7k4ld4
41
41
  BasedUUID includes a `find_by_based_uuid` model method to look up records:
42
42
 
43
43
  ```ruby
44
- BlogPost.find_by_based_uuid("bpo_3ah4veflijgy7de6bflk7k4ld4")
44
+ BlogPost.find_by_based_uuid("bpo_12dm1qresn83st62reqdw7f7cv")
45
45
 
46
46
  # or without the prefix:
47
- BlogPost.find_by_based_uuid("3ah4veflijgy7de6bflk7k4ld4")
47
+ BlogPost.find_by_based_uuid("12dm1qresn83st62reqdw7f7cv")
48
48
 
49
49
  # there’s also the bang version:
50
- BlogPost.find_by_based_uuid!("3ah4veflijgy7de6bflk7k4ld4")
50
+ BlogPost.find_by_based_uuid!("12dm1qresn83st62reqdw7f7cv")
51
51
  ```
52
52
 
53
53
  ### Generic lookup
@@ -55,17 +55,17 @@ BlogPost.find_by_based_uuid!("3ah4veflijgy7de6bflk7k4ld4")
55
55
  The gem provides a generic lookup method to help you find the correct model for the UUID, based on prefix:
56
56
 
57
57
  ```ruby
58
- BasedUUID.find("bpo_3ah4veflijgy7de6bflk7k4ld4")
58
+ BasedUUID.find("bpo_12dm1qresn83st62reqdw7f7cv")
59
59
  #=> #<BlogPost>
60
- BasedUUID.find("acc_ejwqg7b3gvaphiylb25xq545tm")
61
- #=> #<Account>
60
+ BasedUUID.find("user_763j02ryxh8dbs56mgcjqrmmgt")
61
+ #=> #<User>
62
62
  ```
63
63
 
64
64
  **⚠️ NOTE:** Rails lazy-loads models in the development environment, so this method won’t know about your models until you’ve referenced them at least once. If you’re using this method in a Rails console, you’ll need to run `BlogPost` (or any other model) before you can use it.
65
65
 
66
66
  ### BasedUUID as default URL identifiers
67
67
 
68
- BasedUUID aims to be unintrusive and it doesn’t affect how Rails URLs are generated, so if you want to use it as default URL param, add this to your model:
68
+ BasedUUID aims to be non-intrusive and it doesn’t affect how Rails URLs are generated, so if you want to use it as default URL param, add this to your model:
69
69
 
70
70
  ```ruby
71
71
  def to_param
@@ -73,6 +73,15 @@ def to_param
73
73
  end
74
74
  ```
75
75
 
76
+ ### Use outside ActiveRecord
77
+
78
+ BasedUUID can be used outside ActiveRecord, too. You can encode any UUID with it:
79
+
80
+ ```ruby
81
+ BasedUUID.encode(uuid: "226d037c-3b35-40f3-a30b-0ebb78779d9b", prefix: :bpo)
82
+ BasedUUID.decode("bpo_12dm1qresn83st62reqdw7f7cv")
83
+ ```
84
+
76
85
  * * *
77
86
 
78
87
  ## Development
@@ -89,4 +98,4 @@ Bug reports and pull requests are welcome on GitHub at https://github.com/pch/ba
89
98
 
90
99
  This gem is heavily inspired by [Stripe IDs](https://stripe.com/docs/api) and the [prefixed_ids](https://github.com/excid3/prefixed_ids/tree/master) gem by Chris Oliver.
91
100
 
92
- Parts of the base32 encoding code are borrowed from the [ulid gem](https://github.com/rafaelsales/ulid) by Rafael Sales.
101
+ Parts of the base32 encoding code are borrowed from the [ulid](https://github.com/rafaelsales/ulid) gem by Rafael Sales.
@@ -41,7 +41,7 @@ module BasedUUID
41
41
  def based_uuid(prefix: true)
42
42
  raise ArgumentError, "UUID is empty" if _primary_key_value.blank?
43
43
 
44
- BasedUUID.based_uuid(uuid: _primary_key_value, prefix: prefix ? self.class._based_uuid_prefix : nil)
44
+ BasedUUID.encode(uuid: _primary_key_value, prefix: prefix ? self.class._based_uuid_prefix : nil)
45
45
  end
46
46
 
47
47
  private
@@ -1,3 +1,3 @@
1
1
  module BasedUUID
2
- VERSION = "0.5.2".freeze
2
+ VERSION = "0.6.0".freeze
3
3
  end
data/lib/based_uuid.rb CHANGED
@@ -30,11 +30,16 @@ module BasedUUID
30
30
  [prefix.presence, uuid_base32]
31
31
  end
32
32
 
33
- def based_uuid(uuid:, prefix:)
33
+ def encode(uuid:, prefix:)
34
34
  uuid_base32 = Base32UUID.encode(uuid)
35
35
  return uuid_base32 unless prefix
36
36
 
37
37
  "#{prefix}#{delimiter}#{uuid_base32}"
38
38
  end
39
+
40
+ def decode(token)
41
+ _, uuid_base32 = split(token)
42
+ Base32UUID.decode(uuid_base32)
43
+ end
39
44
  end
40
45
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: based_uuid
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.2
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Piotr Chmolowski