Skip to content

Commit 48b7ec8

Browse files
author
Amir Tocker
committed
Fix variables.
* Fix variable regex. * Make Expression.serialize return normalized expression * Fix variable sorting. * Add tests for variable order.
1 parent a3ab6ee commit 48b7ec8

File tree

3 files changed

+27
-11
lines changed

3 files changed

+27
-11
lines changed

cloudinary-core/src/main/java/com/cloudinary/Transformation.java

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212

1313
@SuppressWarnings({"rawtypes", "unchecked"})
1414
public class Transformation {
15+
public static final String VAR_NAME_RE = "^\\$[a-zA-Z][a-zA-Z0-9]+$";
1516
protected Map transformation;
1617
protected List<Map> transformations;
1718
protected String htmlWidth;
@@ -601,21 +602,21 @@ public String generate(Map options) {
601602
components.add(0, "if_" + Expression.normalize(ifValue));
602603
}
603604

604-
List<String> varParams = new ArrayList<String>();
605+
SortedSet<String> varParams = new TreeSet<String>();
605606
for( Object k: options.keySet()) {
606607
String key = (String) k;
607-
if(key.matches("^\\$[a-zA-Z0-9]+$")) {
608+
if(key.matches(VAR_NAME_RE)) {
608609
varParams.add(key + "_" + ObjectUtils.asString(options.get(k)));
609610
}
610611
}
611612

612-
String variables = processVar((Expression[]) options.get("variables"));
613-
if (variables != null) {
614-
varParams.add(variables);
613+
if (!varParams.isEmpty()) {
614+
components.add(StringUtils.join(varParams, ","));
615615
}
616616

617-
if (varParams != null && !varParams.isEmpty()) {
618-
components.add(StringUtils.join(varParams, ","));
617+
String variables = processVar((Expression[]) options.get("variables"));
618+
if (variables != null) {
619+
components.add(variables);
619620
}
620621

621622
for (Map.Entry<String, String> param : params.entrySet()) {

cloudinary-core/src/main/java/com/cloudinary/transformation/BaseExpression.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ public T setParent(Transformation parent) {
113113
}
114114

115115
public String serialize() {
116-
return StringUtils.join(expressions, "_");
116+
return normalize(StringUtils.join(expressions, "_"));
117117
}
118118

119119
@Override

cloudinary-core/src/test/java/com/cloudinary/TransformationTest.java

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ public void endIf2() throws Exception {
142142
assertEquals("force the if_else clause to be chained", "if_w_gt_100_and_w_lt_200/c_scale,w_50/if_else/c_crop,w_100/if_end", transformation.toString());
143143

144144
}
145-
145+
146146
@Test
147147
public void testArrayShouldDefineASetOfVariables() {
148148
// using methods
@@ -153,7 +153,22 @@ public void testArrayShouldDefineASetOfVariables() {
153153
.width("$foo * 200");
154154
assertEquals("if_fc_gt_2,$z_5,$foo_$z_mul_2,c_scale,w_$foo_mul_200", t.generate());
155155
}
156-
156+
157+
@Test
158+
public void testShouldSortDefinedVariable(){
159+
Transformation t = new Transformation().variable("$second", 1).variable("$first", 2);
160+
assertEquals("$first_2,$second_1", t.generate());
161+
}
162+
163+
@Test
164+
public void testShouldPlaceDefinedVariablesBeforeOrdered(){
165+
Transformation t = new Transformation()
166+
.variables(variable("$z", 5), variable("$foo", "$z * 2"))
167+
.variable("$second", 1)
168+
.variable("$first", 2);
169+
assertEquals("$first_2,$second_1,$z_5,$foo_$z_mul_2", t.generate());
170+
}
171+
157172
@Test
158173
public void testVariable(){
159174
// using strings
@@ -166,7 +181,7 @@ public void testVariable(){
166181
.endIf();
167182
assertEquals("$foo_10/if_fc_gt_2/c_scale,w_$foo_mul_200_div_fc/if_end", t.generate());
168183
}
169-
184+
170185
@Test
171186
public void testShouldSupportTextValues() {
172187
Transformation t = new Transformation();

0 commit comments

Comments
 (0)