6c197588c08157320a5fde3c4818db24005a80cc
[erd-marker.git] / lib / erd_handler / label.rb
1 class Label
2
3 attr_reader :original, :processed
4
5 def initialize(original)
6 @original = original
7 @processed = [original]
8 end
9
10 def split(opts = {})
11 if opts.class == Regexp
12 regexp = opts
13 split_camel_case = true
14 else
15 regexp = opts[:regexp] || /[ _,.-]+/
16 if opts.has_key? :camel_case
17 split_camel_case = opts[:camel_case]
18 else
19 split_camel_case = true
20 end
21 if opts.has_key? :numbers
22 split_numbers = opts[:numbers]
23 else
24 split_numbers = true
25 end
26 end
27 @processed = @processed.map do |segment|
28 segment.split(regexp)
29 end.flatten
30
31 if split_camel_case
32 @processed = @processed.map do |segment|
33 segment.split(/(?<=[a-z])(?=[A-Z])/)
34 end.flatten
35 end
36
37 if split_numbers
38 @processed = @processed.map do |segment|
39 segment.split(/(?:(?<!\d)(?=\d))|(?:(?<=\d)(?!\d))/)
40 end.flatten
41 end
42 self
43 end
44
45 def downcase
46 @processed = @processed.map do |segment| segment.downcase end
47 self
48 end
49
50 def stem(gb_english = false)
51 @processed = @processed.map do |segment| segment.stem(gb_english) end
52 self
53 end
54
55 def tidy
56 self.split.downcase.stem
57 end
58 end