humanized_id 0.1.0 → 0.2.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
  SHA1:
3
- metadata.gz: 503446ac0138faee8cfe6329182e48b0a84e33b7
4
- data.tar.gz: 0acf9a7b8cafec545fb4ae7f5e209705982eb5a9
3
+ metadata.gz: ae0f1548e28b86a0eb8ef77c60e2f443ee921d71
4
+ data.tar.gz: ed2e71e69d3894663724123b8e6af446da5f1e4c
5
5
  SHA512:
6
- metadata.gz: f36d58aa96c011295a2cfe2a1492fdb32ee75005d32777959c562f69562e54a1a565999630f750c70ac67e01ba2c14c9e75987273921b8f1459def17ba8dd7ae
7
- data.tar.gz: 00a91acd6c619c851ae898cd5315f1d849d8371c0acb0f05ae25c329ef73cecf9aef0a0c223a44606c1826773fbf42f042042fd9162e084bbd36a47dc5e81613
6
+ metadata.gz: f88c10da3c918d4801648690f132842919523684331668898d6d886fdcaf716f8d64993f707e7c85c357158bd00b396abd759a9c31b6442df90d53c55ac312ed
7
+ data.tar.gz: 451492aef369a46fd67cd2b661246e4bfe543ca11fda7cff490b61ab757e6300dfddf92ccf9fd3c69da02c876e2bde1f95f740a29eeea05abac8c3f2c185cbf6
@@ -1,5 +1,5 @@
1
1
  AllCops:
2
- TargetRubyVersion: 2.3
2
+ TargetRubyVersion: 2.1
3
3
 
4
4
  Metrics/LineLength:
5
5
  Max: 100
@@ -12,3 +12,9 @@ Style/BlockDelimiters:
12
12
 
13
13
  Style/TrivialAccessors:
14
14
  AllowPredicates: true
15
+
16
+ Style/SignalException:
17
+ EnforcedStyle: semantic
18
+
19
+ Style/SingleLineBlockParams:
20
+ Enabled: false
@@ -0,0 +1,14 @@
1
+ ## 0.2.0 (2016-02-11)
2
+
3
+ Fixed:
4
+
5
+ - Requires Ruby >= 2.1 (Ruby < 2.1 never worked)
6
+
7
+ Changed:
8
+
9
+ - Refactors internal logic
10
+ - Updates tests
11
+
12
+ ## 0.1.0 (2016-02-11)
13
+
14
+ Initial release
data/Gemfile CHANGED
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  source 'https://rubygems.org'
2
3
 
3
4
  gemspec
data/Rakefile CHANGED
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'bundler/gem_tasks'
2
3
  require 'rspec/core/rake_task'
3
4
 
data/Readme.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # HumanizedId
2
2
 
3
+ [![Gem Version](https://badge.fury.io/rb/humanized_id.svg)](https://badge.fury.io/rb/humanized_id)
4
+ [![Build Status](https://travis-ci.org/sealink/humanized_id.svg?branch=master)](https://travis-ci.org/sealink/humanized_id)
5
+ [![Coverage Status](https://coveralls.io/repos/github/sealink/humanized_id/badge.svg?branch=master)](https://coveralls.io/github/sealink/humanized_id?branch=master)
6
+ [![Dependency Status](https://gemnasium.com/sealink/humanized_id.svg)](https://gemnasium.com/sealink/humanized_id)
7
+ [![Code Climate](https://codeclimate.com/github/sealink/humanized_id/badges/gpa.svg)](https://codeclimate.com/github/sealink/humanized_id)
8
+
3
9
  HumanizedId is a gem designed to help you either:
4
10
  - Convert an existing numerical id into a 'human friendly' alphanumerical id
5
11
  - Generate a random 'human friendly' id that is of a specified or default length
@@ -27,10 +33,7 @@ Or install it yourself as:
27
33
 
28
34
  ### Humanize an existing id
29
35
 
30
- The simplest way to call humanize is to pass in an existing numerical id,
31
- and let HumanizedId return a human friendly version of that id. This id will be shorter
32
- in length (due to base conversion) and will be an alphanumerical string based on
33
- a 'human safe' character-set
36
+ The simplest way to call humanize is to pass in an existing numerical id, and let HumanizedId return a human friendly version of that id. This id will be shorter in length (due to base conversion) and will be an alphanumerical string based on a 'human safe' character-set.
34
37
 
35
38
  ```ruby
36
39
  humanized_id = HumanizedId.humanize id: 1234567
@@ -39,20 +42,16 @@ humanized_id = HumanizedId.humanize id: 1234567
39
42
 
40
43
  #### Ensuring minimum length of output id
41
44
 
42
- An optional min_length flag can be passed in order to guarantee the minimum length
43
- of the returned value. This will be done by 'padding' the return id with the
44
- safe-charset default value '2'
45
+ An optional min_length flag can be passed in order to guarantee the minimum length of the returned value. This will be done by 'padding' the return id with the safe-charset default value '2'.
45
46
 
46
47
  ```ruby
47
48
  humanized_id = HumanizedId.humanize id: 1234567, min_length: 20
48
49
  # Returns '222222222222226RDFD'
49
50
  ```
50
51
 
51
- Note that the original length is not preserved during the base conversion, so you
52
- will need to explicitely pass in a min_length if you'd like a return id of the same length
52
+ Note that the original length is not preserved during the base conversion, so you will need to explicitly pass in a min_length if you'd like a output id of the same length.
53
53
 
54
- Also note that if you specify a min_length shorter than the actual output id length,
55
- the output id will not be modified (as expected)
54
+ Also note that if you specify a min_length shorter than the actual output id length, the output id will not be modified (as expected).
56
55
 
57
56
  #### Adding a prefix
58
57
 
@@ -63,12 +62,11 @@ humanized_id = HumanizedId.humanize id: 1234567, min_length: 20, prefix: 'TEST'
63
62
  # Will return 'TEST222222222222226RDFD'
64
63
  ```
65
64
 
66
- The prefix is added to the humanized id after all other processing (including min_length padding).
67
- Therefore the total length of the above example wil be 20 + 'TEST'.length = 24
65
+ The prefix is added to the humanized id after all other processing (including min_length padding). Therefore the total length of the above example wil be 20 + 4 (length of 'TEST').
68
66
 
69
67
  ### Generating a random humanized id
70
68
 
71
- Call 'generate_random' with optional length and prefix
69
+ Call 'generate_random' with optional length and prefix.
72
70
 
73
71
  ```ruby
74
72
  random_humanized_id = HumanizedId.generate_random
@@ -80,8 +78,7 @@ Will generate a random human friendly id of default length (see HumanizedId::DEF
80
78
  random_humanized_id = HumanizedId.generate_random length: 20, prefix: 'TEST'
81
79
  ```
82
80
 
83
- This will generate a random humanized id of length 20 and then add the prefix to the id
84
- thus resulting in a total length of 24
81
+ This will generate a random humanized id of length 20 and then add the prefix to the id thus resulting in a total length of 24.
85
82
 
86
83
  ## Development
87
84
 
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
2
3
 
3
4
  require 'bundler/setup'
4
5
  require 'humanized_id'
@@ -1,4 +1,5 @@
1
1
  # coding: utf-8
2
+ # frozen_string_literal: true
2
3
 
3
4
  lib = File.expand_path('../lib', __FILE__)
4
5
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
@@ -24,11 +25,10 @@ Gem::Specification.new do |spec|
24
25
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
25
26
  spec.require_paths = ['lib']
26
27
 
27
- spec.required_ruby_version = '>= 2.0'
28
+ spec.required_ruby_version = '>= 2.1'
28
29
 
29
30
  spec.add_development_dependency 'bundler'
30
31
  spec.add_development_dependency 'rake'
31
- spec.add_development_dependency 'dotenv'
32
32
  spec.add_development_dependency 'rspec'
33
33
  spec.add_development_dependency 'simplecov'
34
34
  spec.add_development_dependency 'simplecov-rcov'
@@ -3,16 +3,15 @@ module HumanizedId
3
3
  DEFAULT_GENERATION_LENGTH = 24
4
4
  SIMILAR_NUMBERS_LETTERS = %w(0 O 1 I L 5 S 8 B).freeze
5
5
  VOWELS = %w(A E I O U).freeze
6
- CHARACTERSET =
7
- (('0'..'9').to_a + ('A'..'Z').to_a - SIMILAR_NUMBERS_LETTERS - VOWELS).freeze
6
+ CHARSET = (('0'..'9').to_a + ('A'..'Z').to_a - SIMILAR_NUMBERS_LETTERS - VOWELS).freeze
8
7
 
9
8
  class << self
10
9
  def humanize(id:, min_length: nil, prefix: '')
11
- HumanizedId::Humanizer.new(id: id, min_length: min_length, prefix: prefix).generate_humanized_id
10
+ Humanizer.new(id: id, min_length: min_length, prefix: prefix).generate_humanized_id
12
11
  end
13
12
 
14
13
  def generate_random(prefix: '', length: DEFAULT_GENERATION_LENGTH)
15
- HumanizedId::RandGenerator.new(prefix: prefix, length: length).generate_random_humanized_id
14
+ RandGenerator.new(prefix: prefix, length: length).generate_random_humanized_id
16
15
  end
17
16
  end
18
17
  Error = Class.new(StandardError)
@@ -1,43 +1,37 @@
1
1
  # frozen_string_literal: true
2
2
  module HumanizedId
3
3
  class Humanizer
4
- SOURCE_CHARSET = %w(0123456789abcdefghijklmnopqrstuvwxyz).freeze
4
+ SOURCE_CHARSET = (('0'..'9').to_a + ('a'..'z').to_a).freeze
5
5
 
6
6
  def initialize(id:, min_length: nil, prefix: '')
7
7
  @id = id
8
8
  @min_length = min_length
9
- @prefix = prefix.nil? ? '' : prefix
10
- @target_charset = HumanizedId::CHARACTERSET.join('')
11
- @source_charset = SOURCE_CHARSET.join('')
9
+ @prefix = prefix.to_s
10
+ @target_charset = CHARSET.join
11
+ @source_charset = SOURCE_CHARSET.join
12
12
  end
13
13
 
14
14
  def generate_humanized_id
15
- new_id = convert_to_target_base id: @id
16
- new_id = convert_to_target_charset id: new_id
17
- new_id = resize id: new_id if @min_length
15
+ new_id = resize convert_to_target_charset convert_to_target_base(@id)
18
16
  "#{@prefix}#{new_id}"
19
17
  end
20
18
 
21
19
  private
22
20
 
23
- def convert_to_target_base(id: @id, target_base: @target_charset.length)
24
- id.to_s(target_base)
25
- rescue ArgumentError
26
- raise Error, 'id is not an integer'
21
+ def convert_to_target_base(id)
22
+ fail Error, 'id is not an integer' unless id.is_a? Integer
23
+ id.to_s(@target_charset.length)
27
24
  end
28
25
 
29
- def convert_to_target_charset(
30
- id: @id, target_charset: @target_charset, source_charset: @source_charset)
31
- source_charset_subset = source_charset.slice(0, target_charset.length)
32
- id.tr(source_charset_subset, target_charset)
26
+ def convert_to_target_charset(id)
27
+ source_charset_subset = @source_charset.slice(0, @target_charset.length)
28
+ id.tr(source_charset_subset, @target_charset)
33
29
  end
34
30
 
35
- def resize(id: @id, min_length: @min_length, target_charset: @target_charset)
36
- if min_length > id.length
37
- padding = target_charset[0] * (min_length - id.length)
38
- id = "#{padding}#{id}"
39
- end
40
- id
31
+ def resize(id)
32
+ return id if @min_length.nil? || @min_length <= id.length
33
+ padding = @target_charset[0] * (@min_length - id.length)
34
+ "#{padding}#{id}"
41
35
  end
42
36
  end
43
37
  end
@@ -1,9 +1,10 @@
1
+ # frozen_string_literal: true
1
2
  module HumanizedId
2
3
  class RandGenerator
3
4
  def initialize(prefix: '', length:)
4
5
  @prefix = prefix.nil? ? '' : prefix
5
6
  @length = length
6
- @target_charset = HumanizedId::CHARACTERSET
7
+ @target_charset = CHARSET
7
8
  end
8
9
 
9
10
  def generate_random_humanized_id
@@ -12,13 +13,13 @@ module HumanizedId
12
13
 
13
14
  private
14
15
 
15
- def generate_random(length: @length, target_charset: @target_charset)
16
- SecureRandom.random_bytes(length).unpack('C*').map{ |byte|
17
- idx = byte % 64
18
- idx = SecureRandom.random_number(target_charset.size) if
19
- idx >= target_charset.size
20
- target_charset[idx]
21
- }.join
16
+ def generate_random
17
+ SecureRandom.random_bytes(@length).unpack('C*').map { |byte| map_to_char(byte) }.join
18
+ end
19
+
20
+ def map_to_char(byte)
21
+ index = byte % @target_charset.size
22
+ @target_charset[index]
22
23
  end
23
24
  end
24
25
  end
@@ -1,4 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
  module HumanizedId
3
- VERSION = '0.1.0'.freeze
3
+ VERSION = '0.2.0'.freeze
4
4
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: humanized_id
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Akil Madan
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-02-11 00:00:00.000000000 Z
11
+ date: 2016-02-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -38,20 +38,6 @@ dependencies:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
- - !ruby/object:Gem::Dependency
42
- name: dotenv
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - ">="
46
- - !ruby/object:Gem::Version
47
- version: '0'
48
- type: :development
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - ">="
53
- - !ruby/object:Gem::Version
54
- version: '0'
55
41
  - !ruby/object:Gem::Dependency
56
42
  name: rspec
57
43
  requirement: !ruby/object:Gem::Requirement
@@ -149,6 +135,7 @@ files:
149
135
  - ".rubocop.yml"
150
136
  - ".ruby-version"
151
137
  - ".travis.yml"
138
+ - CHANGELOG.md
152
139
  - CODE_OF_CONDUCT.md
153
140
  - Gemfile
154
141
  - LICENSE.txt
@@ -173,7 +160,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
173
160
  requirements:
174
161
  - - ">="
175
162
  - !ruby/object:Gem::Version
176
- version: '2.0'
163
+ version: '2.1'
177
164
  required_rubygems_version: !ruby/object:Gem::Requirement
178
165
  requirements:
179
166
  - - ">="