summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRocky Madden <git@rockymadden.com>2013-03-07 13:23:31 -0700
committerRocky Madden <git@rockymadden.com>2013-03-07 13:23:31 -0700
commitd3ee1e3fa282de1a6696ca54a3bb4c89c10a28ce (patch)
treeecd9b646bc1e71ff492098195faae7ba666204e2
parent6195ae90c35ba8d79c77ed3a1ac205b70609fdd0 (diff)
downloadstringmetric-d3ee1e3fa282de1a6696ca54a3bb4c89c10a28ce.tar.gz
stringmetric-d3ee1e3fa282de1a6696ca54a3bb4c89c10a28ce.tar.bz2
stringmetric-d3ee1e3fa282de1a6696ca54a3bb4c89c10a28ce.zip
Nested case objects within Alphabet object.
-rwxr-xr-xcore/source/core/scala/com/rockymadden/stringmetric/phonetic/Alphabet.scala110
-rwxr-xr-xcore/source/core/scala/com/rockymadden/stringmetric/phonetic/MetaphoneAlgorithm.scala1
-rwxr-xr-xcore/source/core/scala/com/rockymadden/stringmetric/phonetic/MetaphoneMetric.scala1
-rwxr-xr-xcore/source/core/scala/com/rockymadden/stringmetric/phonetic/NysiisAlgorithm.scala1
-rwxr-xr-xcore/source/core/scala/com/rockymadden/stringmetric/phonetic/NysiisMetric.scala1
-rwxr-xr-xcore/source/core/scala/com/rockymadden/stringmetric/phonetic/RefinedNysiisAlgorithm.scala1
-rwxr-xr-xcore/source/core/scala/com/rockymadden/stringmetric/phonetic/RefinedNysiisMetric.scala1
-rwxr-xr-xcore/source/core/scala/com/rockymadden/stringmetric/phonetic/RefinedSoundexAlgorithm.scala1
-rwxr-xr-xcore/source/core/scala/com/rockymadden/stringmetric/phonetic/RefinedSoundexMetric.scala1
-rwxr-xr-xcore/source/core/scala/com/rockymadden/stringmetric/phonetic/SoundexAlgorithm.scala1
-rwxr-xr-xcore/source/core/scala/com/rockymadden/stringmetric/phonetic/SoundexMetric.scala1
-rwxr-xr-xcore/source/test/scala/com/rockymadden/stringmetric/phonetic/AlphabetSpec.scala1
12 files changed, 67 insertions, 54 deletions
diff --git a/core/source/core/scala/com/rockymadden/stringmetric/phonetic/Alphabet.scala b/core/source/core/scala/com/rockymadden/stringmetric/phonetic/Alphabet.scala
index 5c69035..089b01b 100755
--- a/core/source/core/scala/com/rockymadden/stringmetric/phonetic/Alphabet.scala
+++ b/core/source/core/scala/com/rockymadden/stringmetric/phonetic/Alphabet.scala
@@ -2,58 +2,60 @@ package com.rockymadden.stringmetric.phonetic
import scala.collection.immutable.Set
-sealed abstract class Alphabet {
- val Chars: Set[Char]
-
- def isSuperset(char: Char): Boolean = Chars.contains(char)
-
- def isSuperset(charArray: Array[Char]): Boolean =
- charArray.length > 0 && charArray.takeWhile(Chars.contains(_)).length == charArray.length
-
- def isSuperset(string: String): Boolean = isSuperset(string.toCharArray)
-
- def startsWith(char: Char): Boolean = Chars.contains(char)
-
- def startsWith(charArray: Array[Char]): Boolean = charArray.length > 0 && Chars.contains(charArray.head)
-
- def startsWith(string: String): Boolean = startsWith(string.toCharArray)
-}
-
-case object LowercaseConsonant extends Alphabet {
- override final val Chars =
- Set('b', 'c', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'm', 'n', 'p', 'q', 'r', 's', 't', 'v', 'w', 'x' ,'z')
-}
-case object UppercaseConsonant extends Alphabet {
- override final val Chars =
- Set('B', 'C', 'D', 'F', 'G', 'H', 'J', 'K', 'L', 'M', 'N', 'P', 'Q', 'R', 'S', 'T', 'V', 'W', 'X' ,'Z')
-}
-case object Consonant extends Alphabet {
- override final val Chars = LowercaseConsonant.Chars ++ UppercaseConsonant.Chars
-}
-case object LowercaseVowel extends Alphabet {
- override final val Chars = Set('a', 'e', 'i', 'o', 'u')
-}
-case object UppercaseVowel extends Alphabet {
- override final val Chars = Set('A', 'E', 'I', 'O', 'U')
-}
-case object Vowel extends Alphabet {
- override final val Chars = LowercaseVowel.Chars ++ UppercaseVowel.Chars
-}
-case object LowercaseY extends Alphabet {
- override final val Chars = Set('y')
-}
-case object UppercaseY extends Alphabet {
- override final val Chars = Set('Y')
-}
-case object Y extends Alphabet {
- override final val Chars = LowercaseY.Chars ++ UppercaseY.Chars
-}
-case object LowercaseAlpha extends Alphabet {
- override final val Chars = LowercaseConsonant.Chars ++ LowercaseVowel.Chars ++ LowercaseY.Chars
-}
-case object UppercaseAlpha extends Alphabet {
- override final val Chars = UppercaseConsonant.Chars ++ UppercaseVowel.Chars ++ UppercaseY.Chars
-}
-case object Alpha extends Alphabet {
- override final val Chars = LowercaseAlpha.Chars ++ UppercaseAlpha.Chars
+object Alphabet {
+ protected sealed abstract class AlphabetSet {
+ protected[Alphabet] val Chars: Set[Char]
+
+ def isSuperset(char: Char): Boolean = Chars.contains(char)
+
+ def isSuperset(charArray: Array[Char]): Boolean =
+ charArray.length > 0 && charArray.takeWhile(Chars.contains(_)).length == charArray.length
+
+ def isSuperset(string: String): Boolean = isSuperset(string.toCharArray)
+
+ def startsWith(char: Char): Boolean = Chars.contains(char)
+
+ def startsWith(charArray: Array[Char]): Boolean = charArray.length > 0 && Chars.contains(charArray.head)
+
+ def startsWith(string: String): Boolean = startsWith(string.toCharArray)
+ }
+
+ case object LowercaseConsonant extends AlphabetSet {
+ override protected[Alphabet] final val Chars =
+ Set('b', 'c', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'm', 'n', 'p', 'q', 'r', 's', 't', 'v', 'w', 'x' ,'z')
+ }
+ case object UppercaseConsonant extends AlphabetSet {
+ override protected[Alphabet] final val Chars =
+ Set('B', 'C', 'D', 'F', 'G', 'H', 'J', 'K', 'L', 'M', 'N', 'P', 'Q', 'R', 'S', 'T', 'V', 'W', 'X' ,'Z')
+ }
+ case object Consonant extends AlphabetSet {
+ override protected[Alphabet] final val Chars = LowercaseConsonant.Chars ++ UppercaseConsonant.Chars
+ }
+ case object LowercaseVowel extends AlphabetSet {
+ override protected[Alphabet] final val Chars = Set('a', 'e', 'i', 'o', 'u')
+ }
+ case object UppercaseVowel extends AlphabetSet {
+ override protected[Alphabet] final val Chars = Set('A', 'E', 'I', 'O', 'U')
+ }
+ case object Vowel extends AlphabetSet {
+ override protected[Alphabet] final val Chars = LowercaseVowel.Chars ++ UppercaseVowel.Chars
+ }
+ case object LowercaseY extends AlphabetSet {
+ override protected[Alphabet] final val Chars = Set('y')
+ }
+ case object UppercaseY extends AlphabetSet {
+ override protected[Alphabet] final val Chars = Set('Y')
+ }
+ case object Y extends AlphabetSet {
+ override protected[Alphabet] final val Chars = LowercaseY.Chars ++ UppercaseY.Chars
+ }
+ case object LowercaseAlpha extends AlphabetSet {
+ override protected[Alphabet] final val Chars = LowercaseConsonant.Chars ++ LowercaseVowel.Chars ++ LowercaseY.Chars
+ }
+ case object UppercaseAlpha extends AlphabetSet {
+ override protected[Alphabet] final val Chars = UppercaseConsonant.Chars ++ UppercaseVowel.Chars ++ UppercaseY.Chars
+ }
+ case object Alpha extends AlphabetSet {
+ override protected[Alphabet] final val Chars = LowercaseAlpha.Chars ++ UppercaseAlpha.Chars
+ }
}
diff --git a/core/source/core/scala/com/rockymadden/stringmetric/phonetic/MetaphoneAlgorithm.scala b/core/source/core/scala/com/rockymadden/stringmetric/phonetic/MetaphoneAlgorithm.scala
index 1949375..518213b 100755
--- a/core/source/core/scala/com/rockymadden/stringmetric/phonetic/MetaphoneAlgorithm.scala
+++ b/core/source/core/scala/com/rockymadden/stringmetric/phonetic/MetaphoneAlgorithm.scala
@@ -1,6 +1,7 @@
package com.rockymadden.stringmetric.phonetic
import com.rockymadden.stringmetric.{ StringAlgorithm, StringFilter }
+import com.rockymadden.stringmetric.phonetic.Alphabet.{ Alpha, LowercaseVowel }
import scala.annotation.{ switch, tailrec }
/** An implementation of the Metaphone algorithm. */
diff --git a/core/source/core/scala/com/rockymadden/stringmetric/phonetic/MetaphoneMetric.scala b/core/source/core/scala/com/rockymadden/stringmetric/phonetic/MetaphoneMetric.scala
index a694d5f..cce3df9 100755
--- a/core/source/core/scala/com/rockymadden/stringmetric/phonetic/MetaphoneMetric.scala
+++ b/core/source/core/scala/com/rockymadden/stringmetric/phonetic/MetaphoneMetric.scala
@@ -1,6 +1,7 @@
package com.rockymadden.stringmetric.phonetic
import com.rockymadden.stringmetric.{ StringFilter, StringMetric }
+import com.rockymadden.stringmetric.phonetic.Alphabet.Alpha
/** A implementation of the Metaphone metric. */
class MetaphoneMetric extends StringMetric[Boolean] {
diff --git a/core/source/core/scala/com/rockymadden/stringmetric/phonetic/NysiisAlgorithm.scala b/core/source/core/scala/com/rockymadden/stringmetric/phonetic/NysiisAlgorithm.scala
index 3f2d029..cd07a71 100755
--- a/core/source/core/scala/com/rockymadden/stringmetric/phonetic/NysiisAlgorithm.scala
+++ b/core/source/core/scala/com/rockymadden/stringmetric/phonetic/NysiisAlgorithm.scala
@@ -1,6 +1,7 @@
package com.rockymadden.stringmetric.phonetic
import com.rockymadden.stringmetric.{ StringAlgorithm, StringFilter }
+import com.rockymadden.stringmetric.phonetic.Alphabet.{ Alpha, LowercaseVowel }
import scala.annotation.{ switch, tailrec }
/** An implementation of the NYSIIS algorithm. */
diff --git a/core/source/core/scala/com/rockymadden/stringmetric/phonetic/NysiisMetric.scala b/core/source/core/scala/com/rockymadden/stringmetric/phonetic/NysiisMetric.scala
index 6560ad7..9df9b16 100755
--- a/core/source/core/scala/com/rockymadden/stringmetric/phonetic/NysiisMetric.scala
+++ b/core/source/core/scala/com/rockymadden/stringmetric/phonetic/NysiisMetric.scala
@@ -1,6 +1,7 @@
package com.rockymadden.stringmetric.phonetic
import com.rockymadden.stringmetric.{ StringFilter, StringMetric }
+import com.rockymadden.stringmetric.phonetic.Alphabet.Alpha
/** An implementation of the NYSIIS metric. */
class NysiisMetric extends StringMetric[Boolean] {
diff --git a/core/source/core/scala/com/rockymadden/stringmetric/phonetic/RefinedNysiisAlgorithm.scala b/core/source/core/scala/com/rockymadden/stringmetric/phonetic/RefinedNysiisAlgorithm.scala
index e779296..ef8a134 100755
--- a/core/source/core/scala/com/rockymadden/stringmetric/phonetic/RefinedNysiisAlgorithm.scala
+++ b/core/source/core/scala/com/rockymadden/stringmetric/phonetic/RefinedNysiisAlgorithm.scala
@@ -1,6 +1,7 @@
package com.rockymadden.stringmetric.phonetic
import com.rockymadden.stringmetric.{ StringAlgorithm, StringFilter }
+import com.rockymadden.stringmetric.phonetic.Alphabet.{ Alpha, LowercaseVowel }
import scala.annotation.{ switch, tailrec }
/** An implementation of the refined NYSIIS algorithm. */
diff --git a/core/source/core/scala/com/rockymadden/stringmetric/phonetic/RefinedNysiisMetric.scala b/core/source/core/scala/com/rockymadden/stringmetric/phonetic/RefinedNysiisMetric.scala
index 16ac11a..7be84af 100755
--- a/core/source/core/scala/com/rockymadden/stringmetric/phonetic/RefinedNysiisMetric.scala
+++ b/core/source/core/scala/com/rockymadden/stringmetric/phonetic/RefinedNysiisMetric.scala
@@ -1,6 +1,7 @@
package com.rockymadden.stringmetric.phonetic
import com.rockymadden.stringmetric.{ StringFilter, StringMetric }
+import com.rockymadden.stringmetric.phonetic.Alphabet.Alpha
/** An implementation of the refined NYSIIS metric. */
class RefinedNysiisMetric extends StringMetric[Boolean] {
diff --git a/core/source/core/scala/com/rockymadden/stringmetric/phonetic/RefinedSoundexAlgorithm.scala b/core/source/core/scala/com/rockymadden/stringmetric/phonetic/RefinedSoundexAlgorithm.scala
index cda0e7e..1f460fb 100755
--- a/core/source/core/scala/com/rockymadden/stringmetric/phonetic/RefinedSoundexAlgorithm.scala
+++ b/core/source/core/scala/com/rockymadden/stringmetric/phonetic/RefinedSoundexAlgorithm.scala
@@ -1,6 +1,7 @@
package com.rockymadden.stringmetric.phonetic
import com.rockymadden.stringmetric.{ StringAlgorithm, StringFilter }
+import com.rockymadden.stringmetric.phonetic.Alphabet.Alpha
import scala.annotation.{ switch, tailrec }
/** An implementation of the refined Soundex algorithm. */
diff --git a/core/source/core/scala/com/rockymadden/stringmetric/phonetic/RefinedSoundexMetric.scala b/core/source/core/scala/com/rockymadden/stringmetric/phonetic/RefinedSoundexMetric.scala
index 3e78e34..d1bd6bb 100755
--- a/core/source/core/scala/com/rockymadden/stringmetric/phonetic/RefinedSoundexMetric.scala
+++ b/core/source/core/scala/com/rockymadden/stringmetric/phonetic/RefinedSoundexMetric.scala
@@ -1,6 +1,7 @@
package com.rockymadden.stringmetric.phonetic
import com.rockymadden.stringmetric.{ StringFilter, StringMetric }
+import com.rockymadden.stringmetric.phonetic.Alphabet.Alpha
/** An implementation of the refined Soundex metric. */
class RefinedSoundexMetric extends StringMetric[Boolean] {
diff --git a/core/source/core/scala/com/rockymadden/stringmetric/phonetic/SoundexAlgorithm.scala b/core/source/core/scala/com/rockymadden/stringmetric/phonetic/SoundexAlgorithm.scala
index 04f5525..c7adb18 100755
--- a/core/source/core/scala/com/rockymadden/stringmetric/phonetic/SoundexAlgorithm.scala
+++ b/core/source/core/scala/com/rockymadden/stringmetric/phonetic/SoundexAlgorithm.scala
@@ -1,6 +1,7 @@
package com.rockymadden.stringmetric.phonetic
import com.rockymadden.stringmetric.{ StringAlgorithm, StringFilter }
+import com.rockymadden.stringmetric.phonetic.Alphabet.Alpha
import scala.annotation.{ switch, tailrec }
/** An implementation of the Soundex algorithm. */
diff --git a/core/source/core/scala/com/rockymadden/stringmetric/phonetic/SoundexMetric.scala b/core/source/core/scala/com/rockymadden/stringmetric/phonetic/SoundexMetric.scala
index a9d7784..928066b 100755
--- a/core/source/core/scala/com/rockymadden/stringmetric/phonetic/SoundexMetric.scala
+++ b/core/source/core/scala/com/rockymadden/stringmetric/phonetic/SoundexMetric.scala
@@ -1,6 +1,7 @@
package com.rockymadden.stringmetric.phonetic
import com.rockymadden.stringmetric.{ StringFilter, StringMetric }
+import com.rockymadden.stringmetric.phonetic.Alphabet.Alpha
/** An implementation of the Soundex metric. */
class SoundexMetric extends StringMetric[Boolean] {
diff --git a/core/source/test/scala/com/rockymadden/stringmetric/phonetic/AlphabetSpec.scala b/core/source/test/scala/com/rockymadden/stringmetric/phonetic/AlphabetSpec.scala
index 8329b57..8074ca8 100755
--- a/core/source/test/scala/com/rockymadden/stringmetric/phonetic/AlphabetSpec.scala
+++ b/core/source/test/scala/com/rockymadden/stringmetric/phonetic/AlphabetSpec.scala
@@ -1,6 +1,7 @@
package com.rockymadden.stringmetric.phonetic
import com.rockymadden.stringmetric.ScalaTest
+import com.rockymadden.stringmetric.phonetic.Alphabet.{ Alpha, Vowel }
import org.junit.runner.RunWith
import org.scalatest.junit.JUnitRunner