Skip to content

Commit

Permalink
Changed the Modifier api after all
Browse files Browse the repository at this point in the history
It'll now accept a const Value& instead of a const VariantValue&
This does however mean we are unable to return the original input.
So instead of this I introduced a simple NoModification exception
which you can throw from your Modifier's to indiciate that you don't
intend to modify the value, so we know internally that we should use
the original value.
  • Loading branch information
Toon Schoenmakers committed Jun 9, 2016
1 parent c78ccc8 commit f37b04f
Show file tree
Hide file tree
Showing 34 changed files with 81 additions and 83 deletions.
13 changes: 9 additions & 4 deletions include/modifier.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,12 @@ class Modifier
*/
virtual ~Modifier() {};

/**
* A simple custom exception class which indicates that you do not intend
* to actually modify the input.
*/
class NoModification : public std::exception {};

/**
* Modify a variable value, and convert it into a different value
*
Expand All @@ -33,11 +39,10 @@ class Modifier
* @param input Initial value
* @param params Parameters used for this modification
* @return VariantValue A new value object
* @note In case you end up NOT modifying the input, just return input
* instead of constructing a new string or whatever. Simply returning
* the input is handled slightly more efficient internally.
* @note In case you end up NOT modifying the input, please throw a NoModification
* exception.
*/
virtual VariantValue modify(const VariantValue &input, const Parameters &params) = 0;
virtual VariantValue modify(const Value &input, const Parameters &params) = 0;
};

/**
Expand Down
2 changes: 1 addition & 1 deletion src/builtin/base64decode.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ class Base64DecodeModifier : public Modifier
* @param params Parameters used for this modification
* @return Value
*/
VariantValue modify(const VariantValue &input, const SmartTpl::Parameters &params) override
VariantValue modify(const Value &input, const SmartTpl::Parameters &params) override
{
// Get the base64 encoder
const Escaper *escaper = Escaper::get("base64");
Expand Down
2 changes: 1 addition & 1 deletion src/builtin/base64encode.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ class Base64EncodeModifier : public Modifier
* @param params Parameters used for this modification
* @return Value
*/
VariantValue modify(const VariantValue &input, const SmartTpl::Parameters &params) override
VariantValue modify(const Value &input, const SmartTpl::Parameters &params) override
{
// Get the base64 encoder
const Escaper *escaper = Escaper::get("base64");
Expand Down
2 changes: 1 addition & 1 deletion src/builtin/cat.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ class CatModifier : public Modifier
* @param params Parameters used for this modification
* @return Value
*/
VariantValue modify(const VariantValue &input, const SmartTpl::Parameters &params) override
VariantValue modify(const Value &input, const SmartTpl::Parameters &params) override
{
// copy the entire string
std::string output(input.toString());
Expand Down
2 changes: 1 addition & 1 deletion src/builtin/count.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ class CountModifier : public Modifier
* @param params Parameters used for this modification
* @return Value
*/
VariantValue modify(const VariantValue &input, const SmartTpl::Parameters &params) override
VariantValue modify(const Value &input, const SmartTpl::Parameters &params) override
{
// Simply return the member count
return (int64_t) input.memberCount();
Expand Down
2 changes: 1 addition & 1 deletion src/builtin/count_characters.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ class CountCharactersModifier : public Modifier
* @param params Parameters used for this modification
* @return Value
*/
VariantValue modify(const VariantValue &input, const SmartTpl::Parameters &params) override
VariantValue modify(const Value &input, const SmartTpl::Parameters &params) override
{
// If we include whitespaces we might as well just return the size
if (params.size() >= 1 && params[0].toBoolean()) return (int64_t) input.toString().size();
Expand Down
2 changes: 1 addition & 1 deletion src/builtin/count_paragraphs.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ class CountParagraphsModifier : public Modifier
* @param params Parameters used for this modification
* @return Value
*/
VariantValue modify(const VariantValue &input, const SmartTpl::Parameters &params) override
VariantValue modify(const Value &input, const SmartTpl::Parameters &params) override
{
// Let's just convert our input to a C string
std::string str = input.toString();
Expand Down
2 changes: 1 addition & 1 deletion src/builtin/count_words.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ class CountWordsModifier : public Modifier
* @param params Parameters used for this modification
* @return Value
*/
VariantValue modify(const VariantValue &input, const SmartTpl::Parameters &params) override
VariantValue modify(const Value &input, const SmartTpl::Parameters &params) override
{
// Let's just convert our input to a C string
std::string str(input.toString());
Expand Down
6 changes: 3 additions & 3 deletions src/builtin/default.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,19 +29,19 @@ class DefaultModifier : public Modifier
* @param params Parameters used for this modification
* @return Value
*/
VariantValue modify(const VariantValue &input, const SmartTpl::Parameters &params) override
VariantValue modify(const Value &input, const SmartTpl::Parameters &params) override
{
// convert input to a string
auto value = input.toString();

// leap out on non-empty strings
if (!value.empty()) return input;
if (!value.empty()) throw NoModification();

// input was empty, return the default that was passed as parameter
if (params.size() >= 1) return params[0].toString();

// no parameter was given, strange
return input;
throw NoModification();
}
};

Expand Down
2 changes: 1 addition & 1 deletion src/builtin/empty.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ class EmptyModifier : public Modifier
* @param params Parameters used for this modification
* @return Value
*/
VariantValue modify(const VariantValue &input, const SmartTpl::Parameters &params) override
VariantValue modify(const Value &input, const SmartTpl::Parameters &params) override
{
// if our member count is 0 we might be a string
if (input.memberCount() == 0)
Expand Down
2 changes: 1 addition & 1 deletion src/builtin/escape.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ class EscapeModifier : public Modifier
* @param params Parameters used for this modification
* @return Value
*/
VariantValue modify(const VariantValue &input, const SmartTpl::Parameters &params) override
VariantValue modify(const Value &input, const SmartTpl::Parameters &params) override
{
// We default to the html encoder
std::string encoder("html");
Expand Down
2 changes: 1 addition & 1 deletion src/builtin/indent.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ class IndentModifier : public Modifier
* @param params Parameters used for this modification
* @return Value
*/
VariantValue modify(const VariantValue &input, const SmartTpl::Parameters &params) override
VariantValue modify(const Value &input, const SmartTpl::Parameters &params) override
{
// Initialize the default settings
int indents = 4;
Expand Down
4 changes: 2 additions & 2 deletions src/builtin/md5.h
Original file line number Diff line number Diff line change
Expand Up @@ -34,10 +34,10 @@ class Md5Modifier : public Modifier
* @param params Parameters used for this modification
* @return Value
*/
VariantValue modify(const VariantValue &input, const SmartTpl::Parameters &params) override
VariantValue modify(const Value &input, const SmartTpl::Parameters &params) override
{
// in case we don't have a valid openssl library we are simply returning the original input
if (!OpenSSL::instance()) return input;
if (!OpenSSL::instance()) throw NoModification();

// initialize our output
unsigned char digest[MD5_DIGEST_LENGTH];
Expand Down
2 changes: 1 addition & 1 deletion src/builtin/nl2br.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ class Nl2brModifier : public ReplaceModifier
* @param params Parameters used for this modification
* @return Value
*/
VariantValue modify(const VariantValue &input, const SmartTpl::Parameters &params) override
VariantValue modify(const Value &input, const SmartTpl::Parameters &params) override
{
// initialize our output
std::string output(input.toString());
Expand Down
6 changes: 3 additions & 3 deletions src/builtin/range.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,16 +29,16 @@ class RangeModifier : public Modifier
* @param params Parameters used for this modification
* @return Value
*/
VariantValue modify(const VariantValue &input, const SmartTpl::Parameters &params) override
VariantValue modify(const Value &input, const SmartTpl::Parameters &params) override
{
// if there are no parameters we're not touching the input
if (params.size() == 0) return input;
if (params.size() == 0) throw NoModification();

// try to retrieve the raw iterator
auto rawIter = input.iterator();

// if there's no raw iterator we just return the original input
if (!rawIter) return input;
if (!rawIter) throw NoModification();

// get our limits
numeric_t begin = 0;
Expand Down
6 changes: 3 additions & 3 deletions src/builtin/regex_replace.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ class RegexReplaceModifier : public Modifier
* @param params Parameters used for this modification
* @return Value
*/
VariantValue modify(const VariantValue &input, const SmartTpl::Parameters &params) override
VariantValue modify(const Value &input, const SmartTpl::Parameters &params) override
{
if (params.size() >= 2)
{
Expand All @@ -53,12 +53,12 @@ class RegexReplaceModifier : public Modifier
catch (const boost::regex_error &error)
{
// Return the original input in case of a failure
return input;
throw NoModification();
}
}

// Return the original input in case of not enough parameters
return input;
throw NoModification();
}
};

Expand Down
4 changes: 2 additions & 2 deletions src/builtin/replace.h
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ class ReplaceModifier : public Modifier
* @param params Parameters used for this modification
* @return Value
*/
virtual VariantValue modify(const VariantValue &input, const SmartTpl::Parameters &params) override
virtual VariantValue modify(const Value &input, const SmartTpl::Parameters &params) override
{
// initialize our output
std::string output(input.toString());
Expand All @@ -66,7 +66,7 @@ class ReplaceModifier : public Modifier
}

// Simply return the input
return input;
throw NoModification();
}
};

Expand Down
4 changes: 2 additions & 2 deletions src/builtin/sha1.h
Original file line number Diff line number Diff line change
Expand Up @@ -34,10 +34,10 @@ class Sha1Modifier : public Modifier
* @param params Parameters used for this modification
* @return Value
*/
VariantValue modify(const VariantValue &input, const SmartTpl::Parameters &params) override
VariantValue modify(const Value &input, const SmartTpl::Parameters &params) override
{
// in case we don't have a valid openssl library we are simply returning the original input
if (!OpenSSL::instance()) return input;
if (!OpenSSL::instance()) throw NoModification();

// initialize our output
unsigned char digest[SHA_DIGEST_LENGTH];
Expand Down
4 changes: 2 additions & 2 deletions src/builtin/sha256.h
Original file line number Diff line number Diff line change
Expand Up @@ -34,10 +34,10 @@ class Sha256Modifier : public Modifier
* @param params Parameters used for this modification
* @return Value
*/
VariantValue modify(const VariantValue &input, const SmartTpl::Parameters &params) override
VariantValue modify(const Value &input, const SmartTpl::Parameters &params) override
{
// in case we don't have a valid openssl library we are simply returning the original input
if (!OpenSSL::instance()) return input;
if (!OpenSSL::instance()) throw NoModification();

// initialize our output
unsigned char digest[SHA256_DIGEST_LENGTH];
Expand Down
4 changes: 2 additions & 2 deletions src/builtin/sha512.h
Original file line number Diff line number Diff line change
Expand Up @@ -34,10 +34,10 @@ class Sha512Modifier : public Modifier
* @param params Parameters used for this modification
* @return Value
*/
VariantValue modify(const VariantValue &input, const SmartTpl::Parameters &params) override
VariantValue modify(const Value &input, const SmartTpl::Parameters &params) override
{
// in case we don't have a valid openssl library we are simply returning the original input
if (!OpenSSL::instance()) return input;
if (!OpenSSL::instance()) throw NoModification();

// initialize our output
unsigned char digest[SHA512_DIGEST_LENGTH];
Expand Down
4 changes: 2 additions & 2 deletions src/builtin/spacify.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ class SpacifyModifier : public Modifier
* @param params Parameters used for this modification
* @return Value
*/
VariantValue modify(const VariantValue &input, const SmartTpl::Parameters &params) override
VariantValue modify(const Value &input, const SmartTpl::Parameters &params) override
{
// By default we use one space as a seperator
std::string seperator(" ");
Expand Down Expand Up @@ -66,7 +66,7 @@ class SpacifyModifier : public Modifier
catch (...)
{
// if we failed we simply return the original input
return input;
throw NoModification();
}
}
};
Expand Down
2 changes: 1 addition & 1 deletion src/builtin/strlen.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ class StrlenModifier : public Modifier
* @param params Parameters used for this modification
* @return Value
*/
VariantValue modify(const VariantValue &input, const SmartTpl::Parameters &params) override
VariantValue modify(const Value &input, const SmartTpl::Parameters &params) override
{
// Simply return the length of the toString() method
return (int64_t) input.toString().size();
Expand Down
4 changes: 2 additions & 2 deletions src/builtin/strstr.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ class StrStrModifier : public Modifier
* @param params Parameters used for this modification
* @return Value
*/
VariantValue modify(const VariantValue &input, const SmartTpl::Parameters &params) override
VariantValue modify(const Value &input, const SmartTpl::Parameters &params) override
{
if (params.size() >= 1)
{
Expand All @@ -52,7 +52,7 @@ class StrStrModifier : public Modifier
}

// Return the input as we can't do strstr without at least a needle
return input;
throw NoModification();
}
};

Expand Down
4 changes: 2 additions & 2 deletions src/builtin/substr.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ class SubStrModifier : public Modifier
* @param params Parameters used for this modification
* @return Value
*/
VariantValue modify(const VariantValue &input, const SmartTpl::Parameters &params) override
VariantValue modify(const Value &input, const SmartTpl::Parameters &params) override
{
if (params.size() >= 1)
{
Expand All @@ -52,7 +52,7 @@ class SubStrModifier : public Modifier
}

// Return the input as we can't do substr without parameters
return input;
throw NoModification();
}
};

Expand Down
2 changes: 1 addition & 1 deletion src/builtin/tolower.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ class ToLowerModifier : public Modifier
* @param params Parameters used for this modification
* @return Value
*/
VariantValue modify(const VariantValue &input, const SmartTpl::Parameters &params) override
VariantValue modify(const Value &input, const SmartTpl::Parameters &params) override
{
// copy the entire string
std::string output(input.toString());
Expand Down
2 changes: 1 addition & 1 deletion src/builtin/toupper.h
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ class ToUpperModifier : public Modifier {
* @param params Parameters used for this modification
* @return Variant
*/
VariantValue modify(const VariantValue &input, const SmartTpl::Parameters &params) override
VariantValue modify(const Value &input, const SmartTpl::Parameters &params) override
{
// copy the entire string
std::string output(input.toString());
Expand Down
2 changes: 1 addition & 1 deletion src/builtin/trim.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ class TrimModifier : public Modifier
* @param params Parameters used for this modification
* @return Value
*/
VariantValue modify(const VariantValue &input, const SmartTpl::Parameters &params) override
VariantValue modify(const Value &input, const SmartTpl::Parameters &params) override
{
// initialize our characters to trim
std::string to_trim(" \t\n\r\0\x0B");
Expand Down
2 changes: 1 addition & 1 deletion src/builtin/truncate.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ class TruncateModifier : public Modifier
* @param params Parameters used for this modification
* @return Value
*/
VariantValue modify(const VariantValue &input, const SmartTpl::Parameters &params) override
VariantValue modify(const Value &input, const SmartTpl::Parameters &params) override
{
// init our default settings
int length = 80;
Expand Down
4 changes: 2 additions & 2 deletions src/builtin/ucfirst.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,15 +29,15 @@ class UcFirstModifier : public Modifier
* @param params Parameters used for this modification
* @return Value
*/
VariantValue modify(const VariantValue &input, const SmartTpl::Parameters &params) override
VariantValue modify(const Value &input, const SmartTpl::Parameters &params) override
{
// initialize our output
std::string output(input.toString());

// in case our input is empty we are just returning our input because that
// is more efficient than returning this new string. Besides in case of an
// empty string calling [0] is undefined behavior..
if (output.empty()) return input;
if (output.empty()) throw NoModification();

// Turn the first character into the uppercase form
output[0] = std::toupper(output[0]);
Expand Down
2 changes: 1 addition & 1 deletion src/builtin/urldecode.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ class UrldecodeModifier : public Modifier
* @param params Parameters used for this modification
* @return Value
*/
VariantValue modify(const VariantValue &input, const SmartTpl::Parameters &params) override
VariantValue modify(const Value &input, const SmartTpl::Parameters &params) override
{
// Get the url encoder
const Escaper *escaper = Escaper::get("url");
Expand Down
2 changes: 1 addition & 1 deletion src/builtin/urlencode.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ class UrlencodeModifier : public Modifier
* @param params Parameters used for this modification
* @return Value
*/
VariantValue modify(const VariantValue &input, const SmartTpl::Parameters &params) override
VariantValue modify(const Value &input, const SmartTpl::Parameters &params) override
{
// Get the url encoder
const Escaper *escaper = Escaper::get("url");
Expand Down
Loading

0 comments on commit f37b04f

Please sign in to comment.