Class: HaveAPI::GoClient::MemberNameAllocator
- Inherits:
-
Object
- Object
- HaveAPI::GoClient::MemberNameAllocator
- Defined in:
- lib/haveapi/go_client/utils.rb
Instance Method Summary collapse
-
#allocate(preferred, suffix:, identity:) ⇒ String
Allocate a Go struct member name while preserving the preferred name whenever it does not collide with another field or method.
-
#initialize(reserved = []) ⇒ MemberNameAllocator
constructor
A new instance of MemberNameAllocator.
Constructor Details
#initialize(reserved = []) ⇒ MemberNameAllocator
Returns a new instance of MemberNameAllocator.
6 7 8 |
# File 'lib/haveapi/go_client/utils.rb', line 6 def initialize(reserved = []) @used = reserved.to_h { |name| [name, true] } end |
Instance Method Details
#allocate(preferred, suffix:, identity:) ⇒ String
Allocate a Go struct member name while preserving the preferred name whenever it does not collide with another field or method.
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
# File 'lib/haveapi/go_client/utils.rb', line 17 def allocate(preferred, suffix:, identity:) return use(preferred) unless @used[preferred] suffixed = "#{preferred}#{suffix}" return use(suffixed) unless @used[suffixed] digest = Digest::SHA1.hexdigest(identity) (8..digest.length).each do |length| candidate = "#{suffixed}_#{digest[0, length]}" return use(candidate) unless @used[candidate] end index = 2 loop do candidate = "#{suffixed}_#{digest}_#{index}" return use(candidate) unless @used[candidate] index += 1 end end |