salesforce_id_formatter 1.0.0 → 1.2.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
- 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