Added label objects
[erd-marker.git] / lib / erd_handler / label.rb
diff --git a/lib/erd_handler/label.rb b/lib/erd_handler/label.rb
new file mode 100644 (file)
index 0000000..ad81618
--- /dev/null
@@ -0,0 +1,47 @@
+class Label 
+  
+  attr_reader :original, :processed
+  
+  def initialize(original)
+    @original = original
+    @processed = [original]
+  end
+  
+  def split(opts = {})
+    if opts.class == Regexp
+      regexp = opts
+      split_camel_case = true
+    else
+      regexp = opts[:regexp] || /[ _,.-]+/
+      if opts.has_key? :camel_case
+        split_camel_case = opts[:camel_case]
+      else
+        split_camel_case = true
+      end
+    end
+    @processed = @processed.map do |segment|
+      segment.split(regexp)
+    end.flatten
+    
+    if split_camel_case
+      @processed = @processed.map do |segment|
+        segment.split(/(?=[A-Z])/)
+      end.flatten
+    end
+    self
+  end
+  
+  def downcase
+    @processed = @processed.map do |segment| segment.downcase end
+    self
+  end
+  
+  def stem(gb_english = false)
+    @processed = @processed.map do |segment| segment.stem(gb_english) end
+    self
+  end
+  
+  def tidy
+    self.split.downcase.stem
+  end
+end
\ No newline at end of file