module Stockboy # Holds frozen strings for shared lookup between different object instances # # @visibility private # module StringPool # Pass a block to yield a new string pool context around a group of # actions that should share the same string key instances # # @yield # def with_string_pool @string_pool = [] result = yield @string_pool = [] result end # Look up duplicate strings and return the shared frozen string # # @return [String] # def string_pool(name) if i = @string_pool.index(name) @string_pool[i] else @string_pool << name.freeze name end end end end