propertybase_id 0.2.0 → 0.3.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/.travis.yml +1 -3
- data/README.md +6 -6
- data/lib/propertybase_id/generator.rb +14 -16
- data/lib/propertybase_id/version.rb +1 -1
- data/lib/propertybase_id.rb +27 -28
- metadata +1 -2
- data/lib/propertybase_id/local_random.rb +0 -23
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1333ef678322fc89dfff3adc990624e6f17c25de
|
4
|
+
data.tar.gz: 44f789d27adb46ce42b3a90e667f6dd7dc193f8c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 36b54a8284b3341635c8ff522c5eb667f7b8361ba4017168b8fc33dd371eb0d2803328bcf451b9f734b211abfedfda02175167f5b76755c209fde471bd813314
|
7
|
+
data.tar.gz: f5582927e52d8f718a06e82bec071678f89c102a87be5d11e5e63cbb299ea1c08d8255c1ff6f4d13fa40b586febfea81aeb0ae3810dbbfdba7f3639b0e733fbb
|
data/.travis.yml
CHANGED
data/README.md
CHANGED
@@ -20,22 +20,22 @@ Or install it yourself as:
|
|
20
20
|
|
21
21
|
## Usage
|
22
22
|
|
23
|
-
###
|
23
|
+
### Generate
|
24
24
|
|
25
|
-
id = PropertybaseId.
|
26
|
-
=>
|
25
|
+
id = PropertybaseId.generate(object: "team")
|
26
|
+
=> #<PropertybaseId:0x007f90e3dcf048 @counter=1, @host_id=1203, @object_id=2, @process_id=254, @time=1427867006>
|
27
27
|
|
28
28
|
For string representation do:
|
29
29
|
|
30
30
|
id.to_s
|
31
|
-
=> "
|
31
|
+
=> "002xfnm458e7200001"
|
32
32
|
|
33
33
|
### Parsing
|
34
34
|
|
35
35
|
To get a PropertybaseId object from a string representation do:
|
36
36
|
|
37
|
-
PropertybaseId.parse("
|
38
|
-
=> #<PropertybaseId:
|
37
|
+
PropertybaseId.parse("002xfnm458e7200001")
|
38
|
+
=> #<PropertybaseId:0x007f90e3d57f48 @counter=1, @host_id=1203, @object_id=2, @process_id=254, @time=1427867006>
|
39
39
|
|
40
40
|
## Development
|
41
41
|
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require "digest/sha1"
|
2
|
+
require "socket"
|
2
3
|
|
3
4
|
class PropertybaseId
|
4
5
|
class Generator
|
@@ -8,26 +9,23 @@ class PropertybaseId
|
|
8
9
|
end
|
9
10
|
|
10
11
|
def generate(object: )
|
11
|
-
@mutex.
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
12
|
+
@mutex.synchronize do
|
13
|
+
PropertybaseId.new(
|
14
|
+
object_id: pb_object_id(object),
|
15
|
+
host_id: host_id,
|
16
|
+
time: ::Time.now.to_i,
|
17
|
+
process_id: process_id,
|
18
|
+
counter: next_counter
|
19
|
+
)
|
16
20
|
end
|
17
|
-
|
18
|
-
PropertybaseId.new(
|
19
|
-
object: object,
|
20
|
-
host_id: host_id,
|
21
|
-
time: time,
|
22
|
-
process_id: process_id,
|
23
|
-
counter: count
|
24
|
-
)
|
25
21
|
end
|
26
22
|
|
27
23
|
private
|
28
24
|
|
29
|
-
def
|
30
|
-
|
25
|
+
def pb_object_id(object)
|
26
|
+
PropertybaseId::Mappings.objects.fetch(object) do
|
27
|
+
raise ArgumentError, "Object #{object.inspect} not found"
|
28
|
+
end
|
31
29
|
end
|
32
30
|
|
33
31
|
def host_id
|
@@ -35,7 +33,7 @@ class PropertybaseId
|
|
35
33
|
end
|
36
34
|
|
37
35
|
def next_counter
|
38
|
-
@counter = (@counter + 1) % max_value(
|
36
|
+
@counter = (@counter + 1) % max_value(5)
|
39
37
|
end
|
40
38
|
|
41
39
|
def process_id
|
data/lib/propertybase_id.rb
CHANGED
@@ -1,22 +1,24 @@
|
|
1
1
|
require "propertybase_id/version"
|
2
|
-
require "propertybase_id/local_random"
|
3
2
|
require "propertybase_id/generator"
|
4
3
|
require "propertybase_id/mappings"
|
5
4
|
|
6
5
|
class PropertybaseId
|
7
|
-
attr_reader :
|
6
|
+
attr_reader :object_id
|
8
7
|
attr_reader :host_id
|
9
8
|
attr_reader :time
|
10
9
|
attr_reader :process_id
|
11
10
|
attr_reader :counter
|
12
11
|
|
13
|
-
def initialize(
|
14
|
-
@
|
12
|
+
def initialize(object_id:, host_id:, time:, process_id:, counter:)
|
13
|
+
@object_id = object_id
|
15
14
|
@host_id = host_id
|
16
15
|
@time = time
|
17
16
|
@process_id = process_id
|
18
17
|
@counter = counter
|
19
|
-
|
18
|
+
end
|
19
|
+
|
20
|
+
def object
|
21
|
+
@_object ||= self.class.team_from_object_id(@object_id || "")
|
20
22
|
end
|
21
23
|
|
22
24
|
def to_s
|
@@ -25,7 +27,7 @@ class PropertybaseId
|
|
25
27
|
host_str = format_number(@host_id, 2)
|
26
28
|
time_str = format_number(@time, 6)
|
27
29
|
process_str = format_number(@process_id, 2)
|
28
|
-
counter_str = format_number(@counter,
|
30
|
+
counter_str = format_number(@counter, 5)
|
29
31
|
|
30
32
|
"#{object_str}#{host_str}#{time_str}#{process_str}#{counter_str}"
|
31
33
|
end
|
@@ -33,7 +35,7 @@ class PropertybaseId
|
|
33
35
|
|
34
36
|
def ==(o)
|
35
37
|
self.class == o.class &&
|
36
|
-
self.
|
38
|
+
self.object_id == o.object_id &&
|
37
39
|
self.host_id == o.host_id &&
|
38
40
|
self.process_id == o.process_id &&
|
39
41
|
self.time == o.time &&
|
@@ -44,32 +46,27 @@ class PropertybaseId
|
|
44
46
|
|
45
47
|
def hash
|
46
48
|
[
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
49
|
+
object_id,
|
50
|
+
host_id,
|
51
|
+
time,
|
52
|
+
process_id,
|
53
|
+
counter,
|
52
54
|
].hash
|
53
55
|
end
|
54
56
|
|
55
57
|
def self.generate(object:)
|
56
|
-
|
57
|
-
PropertybaseId::Generator.new
|
58
|
-
end
|
59
|
-
@_generator.generate(object: object)
|
58
|
+
@@generator.generate(object: object)
|
60
59
|
end
|
61
60
|
|
62
61
|
def self.parse(input_id)
|
63
|
-
raise ArgumentError, "invalid length (#{input_id.size})" if input_id.size !=
|
62
|
+
raise ArgumentError, "invalid length (#{input_id.size})" if input_id.size != 18
|
64
63
|
|
65
|
-
_, object_id, host_id, time, process_id, counter = input_id.match(/(\w{3})(\w{2})(\w{6})(\w{2})(\w{
|
64
|
+
_, object_id, host_id, time, process_id, counter = input_id.match(/(\w{3})(\w{2})(\w{6})(\w{2})(\w{5})/).to_a
|
66
65
|
|
67
|
-
|
68
|
-
|
69
|
-
raise ArgumentError, "No object to id #{object_id}" if object.nil?
|
66
|
+
team_from_object_id(object_id.to_i(36))
|
70
67
|
|
71
68
|
new(
|
72
|
-
|
69
|
+
object_id: object_id.to_i(36),
|
73
70
|
host_id: host_id.to_i(36),
|
74
71
|
time: time.to_i(36),
|
75
72
|
process_id: process_id.to_i(36),
|
@@ -79,13 +76,15 @@ class PropertybaseId
|
|
79
76
|
|
80
77
|
private
|
81
78
|
|
82
|
-
def validate!
|
83
|
-
@object_id ||= PropertybaseId::Mappings.objects.fetch(object) do
|
84
|
-
raise ArgumentError, "Object #{object.inspect} not found"
|
85
|
-
end
|
86
|
-
end
|
87
|
-
|
88
79
|
def format_number(integer, length)
|
89
80
|
integer.to_s(36).rjust(length, "0")
|
90
81
|
end
|
82
|
+
|
83
|
+
def self.team_from_object_id(input_id)
|
84
|
+
obj, _ = PropertybaseId::Mappings.objects.select{|_, v| v == input_id }.first
|
85
|
+
raise ArgumentError, "No object to id #{input_id.to_s(36)}" if obj.nil?
|
86
|
+
obj
|
87
|
+
end
|
88
|
+
|
89
|
+
@@generator = PropertybaseId::Generator.new
|
91
90
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: propertybase_id
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Leif Gensert
|
@@ -73,7 +73,6 @@ files:
|
|
73
73
|
- lib/propertybase_id.rb
|
74
74
|
- lib/propertybase_id/data/objects.json
|
75
75
|
- lib/propertybase_id/generator.rb
|
76
|
-
- lib/propertybase_id/local_random.rb
|
77
76
|
- lib/propertybase_id/mappings.rb
|
78
77
|
- lib/propertybase_id/version.rb
|
79
78
|
- propertybase_id.gemspec
|
@@ -1,23 +0,0 @@
|
|
1
|
-
class PropertybaseId
|
2
|
-
class LocalRandom
|
3
|
-
MAX_INTEGER = 10000
|
4
|
-
TIME_MULTIPLIER = 10000
|
5
|
-
|
6
|
-
attr_reader :time
|
7
|
-
|
8
|
-
def initialize(time=Time.now)
|
9
|
-
@time = time
|
10
|
-
end
|
11
|
-
|
12
|
-
def to_i
|
13
|
-
@_integer ||= begin
|
14
|
-
rand_int = SecureRandom.random_number(MAX_INTEGER)
|
15
|
-
max_digits = (MAX_INTEGER - 1).to_s.size
|
16
|
-
prefix = "%0#{max_digits}d" % rand_int
|
17
|
-
time_with_miliseconds = (time.to_f * TIME_MULTIPLIER).to_i
|
18
|
-
|
19
|
-
"#{prefix}#{time_with_miliseconds}".to_i
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|