diff --git a/src/main/scala/com/github/verbalexpressions/VerbalExpression.scala b/src/main/scala/com/github/verbalexpressions/VerbalExpression.scala index ec22c13..44fd1e7 100644 --- a/src/main/scala/com/github/verbalexpressions/VerbalExpression.scala +++ b/src/main/scala/com/github/verbalexpressions/VerbalExpression.scala @@ -3,9 +3,9 @@ package com.github.verbalexpressions import java.util.regex.Pattern import com.github.verbalexpressions.VerbalExpression._ -case class VerbalExpression(prefix: String = "", expression: String = "", suffix: String = "", modifiers: Int = 0) { +final case class VerbalExpression(prefix: String = "", expression: String = "", suffix: String = "", modifiers: Int = 0) { - def add(value: String) = copy(expression = expression + value) + private[verbalexpressions] def add(value: String) = copy(expression = expression + value) def andThen(value: StringOrVerbalExp) = add(s"($value)") def `then` = andThen _ @@ -33,8 +33,13 @@ case class VerbalExpression(prefix: String = "", expression: String = "", suffix def any = anyOf _ def lineBreak = add("(\\n|(\\r\\n))") - def startOfLine(enable: Boolean = true) = copy(prefix = if (enable) "^" else "") - def endOfLine(enable: Boolean = true) = copy(suffix = if (enable) "$" else "") + def mustStartLine() = startOfLine() + def lineStartNotMandatory() = startOfLine(false) + private[verbalexpressions] def startOfLine(enable: Boolean = true) = copy(prefix = if (enable) "^" else "") + + def mustEndLine() = endOfLine() + def endOfLineNotMandatory() = endOfLine(false) + private[verbalexpressions] def endOfLine(enable: Boolean = true) = copy(suffix = if (enable) "$" else "") def or(value: StringOrVerbalExp) = copy("(" + prefix, expression + ")|(" + value, ")" + suffix) diff --git a/src/test/scala/com/github/verbalexpressions/VerbalExpressionSpec.scala b/src/test/scala/com/github/verbalexpressions/VerbalExpressionSpec.scala index 8e1f85f..63127dd 100644 --- a/src/test/scala/com/github/verbalexpressions/VerbalExpressionSpec.scala +++ b/src/test/scala/com/github/verbalexpressions/VerbalExpressionSpec.scala @@ -55,6 +55,16 @@ final class VerbalExpressionSpec extends Specification { .startOfLine(false) .toString mustEqual "expr" } + + "be turned on with 'mustStartLine'" in { + VerbalExpression().mustStartLine().toString mustEqual "^" + } + + "be turned off with 'lineStartNotMandatory'" in { + VerbalExpression("^", "expr") + .lineStartNotMandatory() + .toString mustEqual "expr" + } } "endOfLine" should {