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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 62b7e82d6f655aa0ef4f30f2c96e2626c4f3a63c
4
- data.tar.gz: 90ea7d900623067fb302d6dc1e55461dd214cf13
2
+ SHA256:
3
+ metadata.gz: eb9e74dd5d8e24dcb7ce2a782d589d9f76b7bc3b46c2fcf179ce64e41e759f68
4
+ data.tar.gz: 72fd489c2cbf3f3a41e41fa6059682f924573cfca8eb91d613925a8470b1e43d
5
5
  SHA512:
6
- metadata.gz: 4bccfb2a208be53db1113b9f49e297fef24d68c31d60945c55832c3738eeee36d6525c193e8b0ee336c536dffa8ff978cfd18be1c2bc24884587e499a630c3e2
7
- data.tar.gz: d2759cdcc2e05afd28d3d38b0ffbd038f97055d2f280819f877701c4e53fad25e7375e29acc28840a7984d852889ed6e31d4346699d079e465dd5aa9afc0bd3a
6
+ metadata.gz: fa3a6fc39a2ce5528fa4f2654d0de8bd3f4e3400ead455026cceaf23a10df6d8df88e433584b0285a36f8f482969a70e25630e404a4bd629453e04d918f8c28b
7
+ data.tar.gz: 9c78049a7b17d5608763abec6678247c02fc0b9633ac4cef2dc21101c55608fdd325677e328ac7e65968b7f9f61c00b3158c89536351518737365e6ab4c2666b
data/.gitignore CHANGED
@@ -7,3 +7,6 @@
7
7
  /pkg/
8
8
  /spec/reports/
9
9
  /tmp/
10
+
11
+ .ruby-version
12
+ .ruby-gemset
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: `SalesforceIdFormatter.to_18('70130000001tcyI') # => '70130000001tcyIAAQ'``
9
- - Leaves a 18-char String unaltered: `SalesforceIdFormatter.to_18('70130000001tcyIAAQ') # => '70130000001tcyIAAQ'`
10
- - Raises `SalesforceIdFormatter::InvalidId` if the given ID doesn't follow Salesforce's conventions
11
- http://www.salesforce.com/us/developer/docs/api/Content/field_types.htm#i1435616
12
- TL;DR: 15 or 18 alphanumeric, case-sensitive chars
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` applies the same rules, returning 15-char IDs instead.
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 does seemt to calculate control digits correctly)
28
+ (original doesn't seem to calculate control digits correctly)
18
29
 
19
30
  ## Installation
20
31
 
File without changes
@@ -1,4 +1,4 @@
1
- require "salesforce_id_formatter/version"
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[0..14] : 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 decimal_to_base_32(dec)
27
- Array(base32.rassoc(dec)).first
26
+ def sfdc_base32_to_decimal(char)
27
+ sfdc_base32[char]
28
28
  end
29
29
 
30
- def base32
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
- checkdigits = checkdigits.map {|d| decimal_to_base_32(d) }.join
57
+
58
+ checkdigits = checkdigits.map {|d| decimal_to_sfdc_base32(d) }.join
52
59
  str + checkdigits
53
60
  end
54
- end
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
@@ -1,3 +1,3 @@
1
1
  module SalesforceIdFormatter
2
- VERSION = "1.0.0"
2
+ VERSION = "1.2.0"
3
3
  end
@@ -21,5 +21,5 @@ Gem::Specification.new do |spec|
21
21
 
22
22
  spec.add_development_dependency "bundler", "~> 1.9"
23
23
  spec.add_development_dependency "rake", "~> 10.0"
24
- spec.add_development_dependency "minitest"
24
+ spec.add_development_dependency "minitest", "~> 5.7"
25
25
  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.0.0
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: 2015-06-24 00:00:00.000000000 Z
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: '0'
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: '0'
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.4.5
94
+ rubygems_version: 2.7.6
95
95
  signing_key:
96
96
  specification_version: 4
97
97
  summary: Formats Salesforce IDs