id_generator 0.1.2 → 1.0.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: 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