4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
# File 'lib/truncate_middle.rb', line 4
def truncate_middle(opts = {})
defaults = {
length: 80,
separator: "..."
}
raise ArgumentError, "Options is not hash" unless opts.is_a?(Hash)
opts.delete_if{ |k, v| v.nil? }.reversive_merge!(defaults)
opts[:separator] = opts[:separator].to_s
raise ArgumentError, "Length is not integer" unless opts[:length].is_a?(Integer)
if opts[:length] <= opts[:separator].size
raise ArgumentError, "Length option should be more than separator length"
end
return self if size <= opts[:length]
return [self[0], opts[:separator]].join if opts[:length] == opts[:separator].size + 1
opts[:length] -= opts[:separator].size
left_corner = opts[:length] / 2
right_corner = size - (opts[:length] - left_corner)
[self[0...left_corner], opts[:separator], self[right_corner..size]].join
end
|