id_generator 0.1.2 → 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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6c2e271fb50e9a96d53b92c70fa45d55f8a8dc85aee47410868cb6ef33f239d4
4
- data.tar.gz: 26ea59ebc7009adb5e2ca9fc5ac02af9d243e3a4b0a82efee6ad1b4f65296dc3
3
+ metadata.gz: b2a7e546cf4457139efc2403b915d913cea5b234df65a62318289912df7ae52b
4
+ data.tar.gz: 8628a0dcf288d1bd17f330f65e8f5662fc15d7ec009a3c0f648fa892ab2a31dd
5
5
  SHA512:
6
- metadata.gz: edc950a375068320a1a6e4d478fde583f4677263103d3f391f5e7a4bbee1db2eda2a78fd63d1b1f98401088d4faec278a8b9e9b833c444cf79d427536d1a143f
7
- data.tar.gz: bf47f173ee92b65f56a799654e39fc096c15a0cad660620bbb8e72ccce8884b253cdd72eae4693c55f6a3ec46974b69a9133b52fb848d1e44618143567cba1d3
6
+ metadata.gz: c8a59657ddf1506e5e2d0e6802dae6ff404f4508d893d9c62260b6b0966128d72bbf321f4570584d0b357062d6b2a6cd53187025f18c3e2ef32ffe37d3b1cc16
7
+ data.tar.gz: 9c14f200d0346daf7dc8b4523961e2d2d80d99301c30bc8b97f408ec75069a6836b86546832be917f1344cd996af024253f995f02ca13cf7d3cf66d6b94cb59f
@@ -11,5 +11,4 @@ deploy:
11
11
  provider: rubygems
12
12
  api_key: "$RUBY_GEMS_API_KEY"
13
13
  on:
14
- branch: master
15
14
  tags: true
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- id_generator (0.1.1)
4
+ id_generator (0.1.2)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
@@ -61,14 +61,14 @@ PLATFORMS
61
61
 
62
62
  DEPENDENCIES
63
63
  bundler (~> 1.16)
64
- codacy-coverage
64
+ codacy-coverage (~> 2.1)
65
65
  id_generator!
66
- pry
66
+ pry (~> 0.11)
67
67
  rake (~> 10.0)
68
68
  rspec (~> 3.0)
69
- rubocop (~> 0.59.2)
70
- rubocop-junit-formatter
71
- rubocop-rspec
69
+ rubocop (~> 0.59)
70
+ rubocop-junit-formatter (~> 0.1)
71
+ rubocop-rspec (~> 1.30)
72
72
 
73
73
  BUNDLED WITH
74
74
  1.16.6
data/README.md CHANGED
@@ -54,10 +54,12 @@ gem 'id_generator'
54
54
  ```ruby
55
55
  # Somewhere during project start
56
56
  context_id = 165 # value from 0 to 255
57
- ID_GENERATOR = IdGenerator.new(context_id)
57
+ IdGenerator.configuration.context_id = context_id
58
+ # Or using block
59
+ IdGenerator.configure { |config| config.context_id = context_id }
58
60
 
59
61
  #Inside of the actual code
60
- ID_GENERATOR.generate
62
+ IdGenerator.generate
61
63
  ```
62
64
 
63
65
  ## Contributing
@@ -37,11 +37,11 @@ Gem::Specification.new do |spec|
37
37
  spec.require_paths = ['lib']
38
38
 
39
39
  spec.add_development_dependency 'bundler', '~> 1.16'
40
- spec.add_development_dependency 'codacy-coverage'
41
- spec.add_development_dependency 'pry'
40
+ spec.add_development_dependency 'codacy-coverage', '~> 2.1'
41
+ spec.add_development_dependency 'pry', '~> 0.11'
42
42
  spec.add_development_dependency 'rake', '~> 10.0'
43
43
  spec.add_development_dependency 'rspec', '~> 3.0'
44
- spec.add_development_dependency 'rubocop', '~> 0.59.2'
45
- spec.add_development_dependency 'rubocop-junit-formatter'
46
- spec.add_development_dependency 'rubocop-rspec'
44
+ spec.add_development_dependency 'rubocop', '~> 0.59'
45
+ spec.add_development_dependency 'rubocop-junit-formatter', '~> 0.1'
46
+ spec.add_development_dependency 'rubocop-rspec', '~> 1.30'
47
47
  end
@@ -1,46 +1,22 @@
1
- require 'securerandom'
2
-
3
- class IdGenerator
4
- VERSION = '0.1.2'.freeze
5
-
6
- COUNTER_PART_SIZE = 8
7
- CONTEXT_PART_SIZE = 2
8
-
9
- RANDOM_PART_BYTES = 11
10
- COUNTER_START = Time.new(2000).to_i
11
-
12
- class Error < StandardError
13
- end
14
-
15
- def initialize(context_id)
16
- raise(IdGenerator::Error, 'Invalid project id') unless context_id_valid?(context_id)
17
-
18
- @context_id = value_to_hex(context_id, CONTEXT_PART_SIZE)
19
- end
20
-
21
- def generate
22
- "#{time}-#{@context_id}-#{random_number}"
23
- end
24
-
25
- private
26
-
27
- def context_id_valid?(context_id)
28
- return false unless context_id.is_a?(Integer)
29
- return false unless context_id.between?(0, 255)
30
-
31
- true
1
+ require 'id_generator/version'
2
+ require 'id_generator/configuration'
3
+ require 'id_generator/errors'
4
+ require 'id_generator/generators/timestamped_random'
5
+
6
+ module IdGenerator
7
+ def self.configure
8
+ yield(configuration)
32
9
  end
33
10
 
34
- def time
35
- timestamp = Time.now.to_i - COUNTER_START
36
- value_to_hex(timestamp, COUNTER_PART_SIZE)
11
+ def self.generate
12
+ id_generator.generate
37
13
  end
38
14
 
39
- def random_number
40
- SecureRandom.hex(RANDOM_PART_BYTES)
15
+ def self.configuration
16
+ @configuration ||= Configuration.new
41
17
  end
42
18
 
43
- def value_to_hex(value, size)
44
- format("%0#{size}x", value)
19
+ def self.id_generator
20
+ @id_generator ||= IdGenerator::Generators::TimestampedRandom.new(configuration)
45
21
  end
46
22
  end
@@ -0,0 +1,24 @@
1
+ module IdGenerator
2
+ class Configuration
3
+ attr_reader :context_id
4
+
5
+ def initialize(context_id: 0)
6
+ self.context_id = context_id
7
+ end
8
+
9
+ def context_id=(context_id)
10
+ raise(IdGenerator::Errors::InvalidContextId, 'Invalid context id') unless context_id_valid?(context_id)
11
+
12
+ @context_id = context_id
13
+ end
14
+
15
+ protected
16
+
17
+ def context_id_valid?(context_id)
18
+ return false unless context_id.is_a?(Integer)
19
+ return false unless context_id.between?(0, 255)
20
+
21
+ true
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,7 @@
1
+ module IdGenerator
2
+ module Errors
3
+ class InvalidContextId < StandardError
4
+ # Just empty line to trick codacy
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,42 @@
1
+ require 'securerandom'
2
+
3
+ module IdGenerator
4
+ module Generators
5
+ class TimestampedRandom
6
+ COUNTER_PART_SIZE = 8
7
+ CONTEXT_PART_SIZE = 2
8
+
9
+ RANDOM_PART_BYTES = 11
10
+ COUNTER_START = Time.new(2000).to_i
11
+
12
+ attr_reader :config
13
+
14
+ def initialize(config)
15
+ @config = config
16
+ end
17
+
18
+ def generate
19
+ "#{time}-#{context_id}-#{random_number}"
20
+ end
21
+
22
+ private
23
+
24
+ def time
25
+ timestamp = Time.now.to_i - COUNTER_START
26
+ value_to_hex(timestamp, COUNTER_PART_SIZE)
27
+ end
28
+
29
+ def context_id
30
+ value_to_hex(config.context_id, CONTEXT_PART_SIZE)
31
+ end
32
+
33
+ def random_number
34
+ SecureRandom.hex(RANDOM_PART_BYTES)
35
+ end
36
+
37
+ def value_to_hex(value, size)
38
+ format("%0#{size}x", value)
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,3 @@
1
+ module IdGenerator
2
+ VERSION = '1.0.0'.freeze
3
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: id_generator
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Viktor Novitskyi
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-10-23 00:00:00.000000000 Z
11
+ date: 2018-10-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -28,30 +28,30 @@ dependencies:
28
28
  name: codacy-coverage
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ">="
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '0'
33
+ version: '2.1'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ">="
38
+ - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '0'
40
+ version: '2.1'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: pry
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ">="
45
+ - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '0'
47
+ version: '0.11'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ">="
52
+ - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '0'
54
+ version: '0.11'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rake
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -86,42 +86,42 @@ dependencies:
86
86
  requirements:
87
87
  - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: 0.59.2
89
+ version: '0.59'
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
- version: 0.59.2
96
+ version: '0.59'
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: rubocop-junit-formatter
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
- - - ">="
101
+ - - "~>"
102
102
  - !ruby/object:Gem::Version
103
- version: '0'
103
+ version: '0.1'
104
104
  type: :development
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
- - - ">="
108
+ - - "~>"
109
109
  - !ruby/object:Gem::Version
110
- version: '0'
110
+ version: '0.1'
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: rubocop-rspec
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
- - - ">="
115
+ - - "~>"
116
116
  - !ruby/object:Gem::Version
117
- version: '0'
117
+ version: '1.30'
118
118
  type: :development
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
- - - ">="
122
+ - - "~>"
123
123
  - !ruby/object:Gem::Version
124
- version: '0'
124
+ version: '1.30'
125
125
  description: |-
126
126
  Ruby Gem that allow to generate random ids in distributed systems (micro-services)
127
127
  and include debug information like timestamp and system id
@@ -144,6 +144,10 @@ files:
144
144
  - bin/setup
145
145
  - id_generator.gemspec
146
146
  - lib/id_generator.rb
147
+ - lib/id_generator/configuration.rb
148
+ - lib/id_generator/errors.rb
149
+ - lib/id_generator/generators/timestamped_random.rb
150
+ - lib/id_generator/version.rb
147
151
  homepage: https://github.com/matic-insurance/id_generator
148
152
  licenses:
149
153
  - MIT