Module: Thermal::Util
Overview
Some methods in this class are lovingly borrowed from ActiveSupport
Class Method Summary collapse
Instance Method Summary collapse
- #deep_freeze!(object) ⇒ Object
- #index_by(enumerable) ⇒ Object
- #index_with(enumerable, default = (no_default = true)) ⇒ Object
- #normalize_utf8(text, replace: nil, unf: :nfc) ⇒ Object
- #underscore(word) ⇒ Object
Class Method Details
.deep_dup(object) ⇒ Object
63 64 65 66 67 68 69 70 71 72 |
# File 'lib/thermal/util.rb', line 63 def self.deep_dup(object) case object when Hash object.transform_values { |v| deep_dup(v) } when Array object.map { |j| deep_dup(j) } else object.dup end end |
Instance Method Details
#deep_freeze!(object) ⇒ Object
53 54 55 56 57 58 59 60 61 |
# File 'lib/thermal/util.rb', line 53 def deep_freeze!(object) case object when Hash object.each_value { |v| deep_freeze!(v) } when Array object.each { |j| deep_freeze!(j) } end object.freeze end |
#index_by(enumerable) ⇒ Object
29 30 31 32 33 34 35 36 37 |
# File 'lib/thermal/util.rb', line 29 def index_by(enumerable) if block_given? result = {} enumerable.each { |elem| result[yield(elem)] = elem } result else enumerable.to_enum(:index_by) { size if respond_to?(:size) } end end |
#index_with(enumerable, default = (no_default = true)) ⇒ Object
39 40 41 42 43 44 45 46 47 48 49 50 51 |
# File 'lib/thermal/util.rb', line 39 def index_with(enumerable, default = (no_default = true)) if block_given? result = {} enumerable.each { |elem| result[elem] = yield(elem) } result elsif no_default enumerable.to_enum(:index_with) { size if respond_to?(:size) } else result = {} enumerable.each { |elem| result[elem] = default } result end end |
#normalize_utf8(text, replace: nil, unf: :nfc) ⇒ Object
8 9 10 11 12 13 14 15 16 |
# File 'lib/thermal/util.rb', line 8 def normalize_utf8(text, replace: nil, unf: :nfc) return if !text || text.empty? replace ||= ::Thermal.replace_char text = text.encode('UTF-8', invalid: :replace, undef: :replace, replace: replace) text.delete!("\r") # not ever used text = text.unicode_normalize(unf) if unf text unless text.empty? end |
#underscore(word) ⇒ Object
18 19 20 21 22 23 24 25 26 27 |
# File 'lib/thermal/util.rb', line 18 def underscore(word) word = word.to_s return word unless /[A-Z-]/.match?(word) word = word.dup word.gsub!(/([A-Z]+)(?=[A-Z][a-z])|([a-z\d])(?=[A-Z])/) { (Regexp.last_match(1) || Regexp.last_match(2)) << '_' } word.tr!('-', '_') word.downcase! word end |