public_id 0.5.0 → 1.0.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/README.md
CHANGED
@@ -24,7 +24,7 @@ rails generate migration add_ident_to_users ident:string
|
|
24
24
|
Tell your activerecord object that ident is your new public identifier.
|
25
25
|
```ruby
|
26
26
|
class User < ActiveRecord::Base
|
27
|
-
|
27
|
+
has_public_id :ident
|
28
28
|
# Automatically defines to_param as :ident
|
29
29
|
end
|
30
30
|
User.new.ident
|
@@ -56,7 +56,7 @@ There's a few other convenience methods that you may find useful.
|
|
56
56
|
|
57
57
|
* Get a new random ID for your own nefarious purposes:
|
58
58
|
|
59
|
-
``` User.
|
59
|
+
``` User.new_public_id ```
|
60
60
|
|
61
61
|
### Configuration
|
62
62
|
|
@@ -66,11 +66,11 @@ The suffix and prefix are joined by a dash.
|
|
66
66
|
|
67
67
|
You can skip the prefix alltogether:
|
68
68
|
```ruby
|
69
|
-
|
69
|
+
has_public_id column_name, length: 10, prefix: false
|
70
70
|
```
|
71
71
|
or set it directly:
|
72
72
|
```
|
73
|
-
|
73
|
+
has_public_id other_column_name, length: 15, prefix: 'user_'
|
74
74
|
```
|
75
75
|
The "length" option refers to the length argument passed to SecureRandom. The actual length
|
76
76
|
of the random base64 string will be about 4/3's this length. The defaults to 10, for a
|
@@ -0,0 +1,55 @@
|
|
1
|
+
module PublicId
|
2
|
+
module ActiveRecord
|
3
|
+
module InstanceMethods
|
4
|
+
def to_param
|
5
|
+
self.send(public_id_attr)
|
6
|
+
end
|
7
|
+
def public_id_attr
|
8
|
+
self.class.public_id_attr
|
9
|
+
end
|
10
|
+
def initialize_public_id
|
11
|
+
self.send(public_id_attr) or
|
12
|
+
self.send("#{public_id_attr}=", self.class.new_public_id)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
module PublicallyIdentifiedBy
|
16
|
+
extend ActiveSupport::Concern
|
17
|
+
included do
|
18
|
+
end
|
19
|
+
module ClassMethods
|
20
|
+
def has_public_id(attribute_name, *args)
|
21
|
+
return if respond_to?(:public_id_attribute)
|
22
|
+
options = args.extract_options!
|
23
|
+
class << self
|
24
|
+
attr_accessor :public_id_attr, :public_id_options
|
25
|
+
# def public_identifier
|
26
|
+
# @public_identifier
|
27
|
+
# end
|
28
|
+
# def public_identifier=(attribute_name)
|
29
|
+
# @public_identifier = attribute_name
|
30
|
+
# end
|
31
|
+
def initialize_public_ids!
|
32
|
+
self.where(self.public_id_attr => nil).find_each do |obj|
|
33
|
+
obj.update_attribute(self.public_id_attr, self.new_public_id)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
def find_by_public_id(public_id)
|
37
|
+
where(self.public_id_attr => public_id).first
|
38
|
+
end
|
39
|
+
def new_public_id
|
40
|
+
while(true)
|
41
|
+
new_id = ::PublicId::Util.new_public_id(self, self.public_id_options)
|
42
|
+
break unless where(self.public_id_attr => new_id).exists?
|
43
|
+
end
|
44
|
+
return new_id
|
45
|
+
end
|
46
|
+
end
|
47
|
+
self.public_id_attr = attribute_name
|
48
|
+
self.public_id_options = options
|
49
|
+
include ::PublicId::ActiveRecord::InstanceMethods
|
50
|
+
after_initialize :initialize_public_id
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
data/lib/public_id/util.rb
CHANGED
@@ -6,7 +6,7 @@ module PublicId
|
|
6
6
|
def self.generate_prefix(klass, joiner)
|
7
7
|
klass.to_s.demodulize.underscore.first(3) + joiner
|
8
8
|
end
|
9
|
-
def self.
|
9
|
+
def self.new_public_id(klass, options = {})
|
10
10
|
length = options[:length] || 10
|
11
11
|
prefix = options.fetch(:prefix, generate_prefix(klass, options.fetch(:joiner, '-') ))
|
12
12
|
suffix = generate_random_suffix(length)
|
data/lib/public_id/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: public_id
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -52,7 +52,7 @@ executables: []
|
|
52
52
|
extensions: []
|
53
53
|
extra_rdoc_files: []
|
54
54
|
files:
|
55
|
-
- lib/public_id/activerecord/
|
55
|
+
- lib/public_id/activerecord/has_public_id.rb
|
56
56
|
- lib/public_id/util.rb
|
57
57
|
- lib/public_id/version.rb
|
58
58
|
- lib/public_id.rb
|
@@ -1,55 +0,0 @@
|
|
1
|
-
module PublicId
|
2
|
-
module ActiveRecord
|
3
|
-
module InstanceMethods
|
4
|
-
def to_param
|
5
|
-
self.send(self.class.public_identifier_attribute)
|
6
|
-
end
|
7
|
-
def public_identifier_attribute
|
8
|
-
self.class.public_identifier_attribute
|
9
|
-
end
|
10
|
-
def initialize_public_id
|
11
|
-
self.send(public_identifier_attribute) or
|
12
|
-
self.send("#{public_identifier_attribute}=", self.class.new_public_identifier)
|
13
|
-
end
|
14
|
-
end
|
15
|
-
module PublicallyIdentifiedBy
|
16
|
-
extend ActiveSupport::Concern
|
17
|
-
included do
|
18
|
-
end
|
19
|
-
module ClassMethods
|
20
|
-
def publically_identified_by(attribute_name, *args)
|
21
|
-
return if respond_to?(:public_identifier_attribute)
|
22
|
-
options = args.extract_options!
|
23
|
-
class << self
|
24
|
-
attr_accessor :public_identifier_attribute, :public_identifier_options
|
25
|
-
# def public_identifier
|
26
|
-
# @public_identifier
|
27
|
-
# end
|
28
|
-
# def public_identifier=(attribute_name)
|
29
|
-
# @public_identifier = attribute_name
|
30
|
-
# end
|
31
|
-
def initialize_public_ids!
|
32
|
-
self.where(self.public_identifier_attribute => nil).find_each do |obj|
|
33
|
-
obj.update_attribute(self.public_identifier_attribute, self.new_public_identifier)
|
34
|
-
end
|
35
|
-
end
|
36
|
-
def find_by_public_id(public_id)
|
37
|
-
where(self.public_identifier_attribute => public_id).first
|
38
|
-
end
|
39
|
-
def new_public_identifier
|
40
|
-
while(true)
|
41
|
-
new_id = ::PublicId::Util.new_public_identifier(self, self.public_identifier_options)
|
42
|
-
break unless where(self.public_identifier_attribute => new_id).exists?
|
43
|
-
end
|
44
|
-
return new_id
|
45
|
-
end
|
46
|
-
end
|
47
|
-
self.public_identifier_attribute = attribute_name
|
48
|
-
self.public_identifier_options = options
|
49
|
-
include ::PublicId::ActiveRecord::InstanceMethods
|
50
|
-
after_initialize :initialize_public_id
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|
54
|
-
end
|
55
|
-
end
|