salesforce_id_formatter 1.0.0 → 1.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 +5 -5
- data/.gitignore +3 -0
- data/README.md +19 -8
- data/bin/console +0 -0
- data/lib/salesforce_id_formatter.rb +28 -7
- data/lib/salesforce_id_formatter/version.rb +1 -1
- data/salesforce_id_formatter.gemspec +1 -1
- metadata +7 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: eb9e74dd5d8e24dcb7ce2a782d589d9f76b7bc3b46c2fcf179ce64e41e759f68
|
4
|
+
data.tar.gz: 72fd489c2cbf3f3a41e41fa6059682f924573cfca8eb91d613925a8470b1e43d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fa3a6fc39a2ce5528fa4f2654d0de8bd3f4e3400ead455026cceaf23a10df6d8df88e433584b0285a36f8f482969a70e25630e404a4bd629453e04d918f8c28b
|
7
|
+
data.tar.gz: 9c78049a7b17d5608763abec6678247c02fc0b9633ac4cef2dc21101c55608fdd325677e328ac7e65968b7f9f61c00b3158c89536351518737365e6ab4c2666b
|
data/.gitignore
CHANGED
data/README.md
CHANGED
@@ -3,18 +3,29 @@ Later on, added three error-correcting characters to make their 18-character ID.
|
|
3
3
|
|
4
4
|
## Usage
|
5
5
|
|
6
|
-
`SalesforceIdFormatter.to_18
|
6
|
+
#### `SalesforceIdFormatter.to_18`
|
7
7
|
|
8
|
-
- Converts a 15-char String to its equivalent 18-char ID as a String:
|
9
|
-
|
10
|
-
-
|
11
|
-
|
12
|
-
|
8
|
+
- Converts a 15-char String to its equivalent 18-char ID as a String:
|
9
|
+
`SalesforceIdFormatter.to_18('70130000001tcyI') # => '70130000001tcyIAAQ'``
|
10
|
+
- Leaves a 18-char String unaltered:
|
11
|
+
`SalesforceIdFormatter.to_18('70130000001tcyIAAQ') # => '70130000001tcyIAAQ'`
|
12
|
+
- Raises `SalesforceIdFormatter::InvalidId` if the given ID doesn't follow
|
13
|
+
Salesforce's conventions
|
14
|
+
http://www.salesforce.com/us/developer/docs/api/Content/field_types.htm#i1435616
|
15
|
+
TL;DR: 15 or 18 alphanumeric, case-sensitive chars
|
13
16
|
|
14
|
-
`SalesforceIdFormatter.to_15`
|
17
|
+
#### `SalesforceIdFormatter.to_15`
|
15
18
|
|
19
|
+
- Applies the same rules as `to_18`, returning 15-char IDs instead.
|
20
|
+
|
21
|
+
#### `SalesforceIdFormatter.valid_id?`
|
22
|
+
|
23
|
+
- Returns false if passed string is either not 15/18 characters or is not
|
24
|
+
alphanumeric.
|
25
|
+
|
26
|
+
## Attribution
|
16
27
|
Code is a modified version of https://gist.github.com/jbaylor-rpx/2691624
|
17
|
-
(original
|
28
|
+
(original doesn't seem to calculate control digits correctly)
|
18
29
|
|
19
30
|
## Installation
|
20
31
|
|
data/bin/console
CHANGED
File without changes
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
1
|
+
require 'salesforce_id_formatter/version'
|
2
2
|
|
3
3
|
module SalesforceIdFormatter
|
4
4
|
extend self
|
@@ -14,7 +14,7 @@ module SalesforceIdFormatter
|
|
14
14
|
def to_15(id)
|
15
15
|
raise InvalidId unless valid_id?(id)
|
16
16
|
|
17
|
-
id.size == 18 ? id
|
17
|
+
id.size == 18 ? convert_18_to_15(id) : id
|
18
18
|
end
|
19
19
|
|
20
20
|
def valid_id?(id)
|
@@ -23,11 +23,17 @@ module SalesforceIdFormatter
|
|
23
23
|
|
24
24
|
private
|
25
25
|
|
26
|
-
def
|
27
|
-
|
26
|
+
def sfdc_base32_to_decimal(char)
|
27
|
+
sfdc_base32[char]
|
28
28
|
end
|
29
29
|
|
30
|
-
def
|
30
|
+
def decimal_to_sfdc_base32(dec)
|
31
|
+
Array(sfdc_base32.rassoc(dec)).first
|
32
|
+
end
|
33
|
+
|
34
|
+
# sfdc_base32 because base32 isn't a standard
|
35
|
+
# and this is salesforce's interpretation of it.
|
36
|
+
def sfdc_base32
|
31
37
|
@@b32 ||= begin
|
32
38
|
hash = {}
|
33
39
|
('A'..'Z').each_with_index {|letter, idx| hash[letter] = idx }
|
@@ -48,7 +54,22 @@ module SalesforceIdFormatter
|
|
48
54
|
bits[5..9].join.reverse.to_i(2),
|
49
55
|
bits[10..14].join.reverse.to_i(2)
|
50
56
|
]
|
51
|
-
|
57
|
+
|
58
|
+
checkdigits = checkdigits.map {|d| decimal_to_sfdc_base32(d) }.join
|
52
59
|
str + checkdigits
|
53
60
|
end
|
54
|
-
|
61
|
+
|
62
|
+
def convert_18_to_15(str)
|
63
|
+
# Assume a default of lower-case for each char
|
64
|
+
base = str[0..14].downcase.split('')
|
65
|
+
|
66
|
+
# Convert the last 3 chars to their decimal value
|
67
|
+
dec = str[-3..-1].upcase.split('').collect { |char| sfdc_base32_to_decimal(char) }
|
68
|
+
|
69
|
+
# Convert the decimal values to their binary value, MSB in the on the 'right' of the string
|
70
|
+
bits = dec.map { |d| format('%05b', d.to_i).reverse.split('') }.flatten
|
71
|
+
|
72
|
+
# Finally, upper-case everything with a '1' in the binary string.
|
73
|
+
base.zip(bits).map {|char,bit| bit == '1' ? char.upcase : char }.join
|
74
|
+
end
|
75
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: salesforce_id_formatter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Raul Murciano
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-09-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -42,16 +42,16 @@ dependencies:
|
|
42
42
|
name: minitest
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - "
|
45
|
+
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
47
|
+
version: '5.7'
|
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: '
|
54
|
+
version: '5.7'
|
55
55
|
description: ''
|
56
56
|
email:
|
57
57
|
- raul@heroku.com
|
@@ -91,7 +91,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
91
91
|
version: '0'
|
92
92
|
requirements: []
|
93
93
|
rubyforge_project:
|
94
|
-
rubygems_version: 2.
|
94
|
+
rubygems_version: 2.7.6
|
95
95
|
signing_key:
|
96
96
|
specification_version: 4
|
97
97
|
summary: Formats Salesforce IDs
|