Unified the renderers for all the comparison helpers by moving their implementation to perform_comparison_check.
This commit is contained in:
parent
85d36fc516
commit
ed38ce6a38
@ -365,7 +365,12 @@ impl<'a> DustRenderer<'a> {
|
||||
),
|
||||
};
|
||||
}
|
||||
DustTag::DTHelperEquals(parameterized_block) => {
|
||||
DustTag::DTHelperEquals(parameterized_block)
|
||||
| DustTag::DTHelperNotEquals(parameterized_block)
|
||||
| DustTag::DTHelperGreaterThan(parameterized_block)
|
||||
| DustTag::DTHelperLessThan(parameterized_block)
|
||||
| DustTag::DTHelperGreaterThanOrEquals(parameterized_block)
|
||||
| DustTag::DTHelperLessThanOrEquals(parameterized_block) => {
|
||||
let new_breadcrumbs = self.new_breadcrumbs_partial(
|
||||
breadcrumbs,
|
||||
breadcrumbs,
|
||||
@ -373,35 +378,10 @@ impl<'a> DustRenderer<'a> {
|
||||
¶meterized_block.explicit_context,
|
||||
);
|
||||
|
||||
let param_map =
|
||||
ParametersContext::new(self, breadcrumbs, ¶meterized_block.params, None);
|
||||
|
||||
let left_side = self.tap(breadcrumbs, ¶m_map, "key");
|
||||
let right_side = self.tap(breadcrumbs, ¶m_map, "value");
|
||||
|
||||
let left_side_ce = left_side.as_ref().map(|maybe_ice| {
|
||||
maybe_ice
|
||||
.as_ref()
|
||||
.map(|ice| ice.get_context_element_reference())
|
||||
});
|
||||
let right_side_ce = right_side.as_ref().map(|maybe_ice| {
|
||||
maybe_ice
|
||||
.as_ref()
|
||||
.map(|ice| ice.get_context_element_reference())
|
||||
});
|
||||
return match (left_side_ce, right_side_ce) {
|
||||
// If "key" is not present at all, return a blank string
|
||||
(None, _) => Ok("".to_owned()),
|
||||
(Some(_maybe_left_ce), _) => {
|
||||
// Special case: when comparing two RVPaths, if the
|
||||
// path points to the same value then they are
|
||||
// equal. This is particularly important for objects
|
||||
// which compare memory locations rather than contents
|
||||
// (javascript object equality).
|
||||
if Self::are_paths_identical(&left_side_ce, &right_side_ce)
|
||||
|| left_side_ce.unwrap_or(Err(&WalkError::CantWalk))
|
||||
== right_side_ce.unwrap_or(Err(&WalkError::CantWalk))
|
||||
{
|
||||
return self
|
||||
.perform_comparison_check(tag, breadcrumbs, None)
|
||||
.map(|check_result| {
|
||||
if check_result {
|
||||
self.render_maybe_body(
|
||||
¶meterized_block.contents,
|
||||
new_breadcrumbs.as_ref().unwrap_or(breadcrumbs),
|
||||
@ -414,224 +394,8 @@ impl<'a> DustRenderer<'a> {
|
||||
blocks,
|
||||
)
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
DustTag::DTHelperNotEquals(parameterized_block) => {
|
||||
let new_breadcrumbs = self.new_breadcrumbs_partial(
|
||||
breadcrumbs,
|
||||
breadcrumbs,
|
||||
None,
|
||||
¶meterized_block.explicit_context,
|
||||
);
|
||||
|
||||
let param_map =
|
||||
ParametersContext::new(self, breadcrumbs, ¶meterized_block.params, None);
|
||||
|
||||
let left_side = self.tap(breadcrumbs, ¶m_map, "key");
|
||||
let right_side = self.tap(breadcrumbs, ¶m_map, "value");
|
||||
|
||||
let left_side_ce = left_side.as_ref().map(|maybe_ice| {
|
||||
maybe_ice
|
||||
.as_ref()
|
||||
.map(|ice| ice.get_context_element_reference())
|
||||
});
|
||||
let right_side_ce = right_side.as_ref().map(|maybe_ice| {
|
||||
maybe_ice
|
||||
.as_ref()
|
||||
.map(|ice| ice.get_context_element_reference())
|
||||
});
|
||||
return match (left_side_ce, right_side_ce) {
|
||||
// If "key" is not present at all, return a blank string
|
||||
(None, _) => Ok("".to_owned()),
|
||||
(Some(_maybe_left_ce), _) => {
|
||||
// Special case: when comparing two RVPaths, if the
|
||||
// path points to the same value then they are
|
||||
// equal. This is particularly important for objects
|
||||
// which compare memory locations rather than contents
|
||||
// (javascript object equality).
|
||||
if Self::are_paths_identical(&left_side_ce, &right_side_ce)
|
||||
|| left_side_ce.unwrap_or(Err(&WalkError::CantWalk))
|
||||
== right_side_ce.unwrap_or(Err(&WalkError::CantWalk))
|
||||
{
|
||||
self.render_maybe_body(
|
||||
¶meterized_block.else_contents,
|
||||
new_breadcrumbs.as_ref().unwrap_or(breadcrumbs),
|
||||
blocks,
|
||||
)
|
||||
} else {
|
||||
self.render_maybe_body(
|
||||
¶meterized_block.contents,
|
||||
new_breadcrumbs.as_ref().unwrap_or(breadcrumbs),
|
||||
blocks,
|
||||
)
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
DustTag::DTHelperGreaterThan(parameterized_block) => {
|
||||
let new_breadcrumbs = self.new_breadcrumbs_partial(
|
||||
breadcrumbs,
|
||||
breadcrumbs,
|
||||
None,
|
||||
¶meterized_block.explicit_context,
|
||||
);
|
||||
|
||||
let param_map =
|
||||
ParametersContext::new(self, breadcrumbs, ¶meterized_block.params, None);
|
||||
|
||||
let left_side = self.tap(breadcrumbs, ¶m_map, "key");
|
||||
let right_side = self.tap(breadcrumbs, ¶m_map, "value");
|
||||
|
||||
let left_side_ce = left_side.as_ref().map(|maybe_ice| {
|
||||
maybe_ice
|
||||
.as_ref()
|
||||
.map(|ice| ice.get_context_element_reference())
|
||||
});
|
||||
let right_side_ce = right_side.as_ref().map(|maybe_ice| {
|
||||
maybe_ice
|
||||
.as_ref()
|
||||
.map(|ice| ice.get_context_element_reference())
|
||||
});
|
||||
return match (left_side_ce, right_side_ce) {
|
||||
// If "key" is not present at all, return a blank string
|
||||
(None, _) => Ok("".to_owned()),
|
||||
(Some(Ok(left_value)), Some(Ok(right_value))) if left_value > right_value => {
|
||||
self.render_maybe_body(
|
||||
¶meterized_block.contents,
|
||||
new_breadcrumbs.as_ref().unwrap_or(breadcrumbs),
|
||||
blocks,
|
||||
)
|
||||
}
|
||||
_ => self.render_maybe_body(
|
||||
¶meterized_block.else_contents,
|
||||
new_breadcrumbs.as_ref().unwrap_or(breadcrumbs),
|
||||
blocks,
|
||||
),
|
||||
};
|
||||
}
|
||||
DustTag::DTHelperGreaterThanOrEquals(parameterized_block) => {
|
||||
let new_breadcrumbs = self.new_breadcrumbs_partial(
|
||||
breadcrumbs,
|
||||
breadcrumbs,
|
||||
None,
|
||||
¶meterized_block.explicit_context,
|
||||
);
|
||||
|
||||
let param_map =
|
||||
ParametersContext::new(self, breadcrumbs, ¶meterized_block.params, None);
|
||||
|
||||
let left_side = self.tap(breadcrumbs, ¶m_map, "key");
|
||||
let right_side = self.tap(breadcrumbs, ¶m_map, "value");
|
||||
|
||||
let left_side_ce = left_side.as_ref().map(|maybe_ice| {
|
||||
maybe_ice
|
||||
.as_ref()
|
||||
.map(|ice| ice.get_context_element_reference())
|
||||
});
|
||||
let right_side_ce = right_side.as_ref().map(|maybe_ice| {
|
||||
maybe_ice
|
||||
.as_ref()
|
||||
.map(|ice| ice.get_context_element_reference())
|
||||
});
|
||||
return match (left_side_ce, right_side_ce) {
|
||||
// If "key" is not present at all, return a blank string
|
||||
(None, _) => Ok("".to_owned()),
|
||||
(Some(Ok(left_value)), Some(Ok(right_value))) if left_value >= right_value => {
|
||||
self.render_maybe_body(
|
||||
¶meterized_block.contents,
|
||||
new_breadcrumbs.as_ref().unwrap_or(breadcrumbs),
|
||||
blocks,
|
||||
)
|
||||
}
|
||||
_ => self.render_maybe_body(
|
||||
¶meterized_block.else_contents,
|
||||
new_breadcrumbs.as_ref().unwrap_or(breadcrumbs),
|
||||
blocks,
|
||||
),
|
||||
};
|
||||
}
|
||||
DustTag::DTHelperLessThan(parameterized_block) => {
|
||||
let new_breadcrumbs = self.new_breadcrumbs_partial(
|
||||
breadcrumbs,
|
||||
breadcrumbs,
|
||||
None,
|
||||
¶meterized_block.explicit_context,
|
||||
);
|
||||
|
||||
let param_map =
|
||||
ParametersContext::new(self, breadcrumbs, ¶meterized_block.params, None);
|
||||
|
||||
let left_side = self.tap(breadcrumbs, ¶m_map, "key");
|
||||
let right_side = self.tap(breadcrumbs, ¶m_map, "value");
|
||||
|
||||
let left_side_ce = left_side.as_ref().map(|maybe_ice| {
|
||||
maybe_ice
|
||||
.as_ref()
|
||||
.map(|ice| ice.get_context_element_reference())
|
||||
});
|
||||
let right_side_ce = right_side.as_ref().map(|maybe_ice| {
|
||||
maybe_ice
|
||||
.as_ref()
|
||||
.map(|ice| ice.get_context_element_reference())
|
||||
});
|
||||
return match (left_side_ce, right_side_ce) {
|
||||
// If "key" is not present at all, return a blank string
|
||||
(None, _) => Ok("".to_owned()),
|
||||
(Some(Ok(left_value)), Some(Ok(right_value))) if left_value < right_value => {
|
||||
self.render_maybe_body(
|
||||
¶meterized_block.contents,
|
||||
new_breadcrumbs.as_ref().unwrap_or(breadcrumbs),
|
||||
blocks,
|
||||
)
|
||||
}
|
||||
_ => self.render_maybe_body(
|
||||
¶meterized_block.else_contents,
|
||||
new_breadcrumbs.as_ref().unwrap_or(breadcrumbs),
|
||||
blocks,
|
||||
),
|
||||
};
|
||||
}
|
||||
DustTag::DTHelperLessThanOrEquals(parameterized_block) => {
|
||||
let new_breadcrumbs = self.new_breadcrumbs_partial(
|
||||
breadcrumbs,
|
||||
breadcrumbs,
|
||||
None,
|
||||
¶meterized_block.explicit_context,
|
||||
);
|
||||
|
||||
let param_map =
|
||||
ParametersContext::new(self, breadcrumbs, ¶meterized_block.params, None);
|
||||
|
||||
let left_side = self.tap(breadcrumbs, ¶m_map, "key");
|
||||
let right_side = self.tap(breadcrumbs, ¶m_map, "value");
|
||||
|
||||
let left_side_ce = left_side.as_ref().map(|maybe_ice| {
|
||||
maybe_ice
|
||||
.as_ref()
|
||||
.map(|ice| ice.get_context_element_reference())
|
||||
});
|
||||
let right_side_ce = right_side.as_ref().map(|maybe_ice| {
|
||||
maybe_ice
|
||||
.as_ref()
|
||||
.map(|ice| ice.get_context_element_reference())
|
||||
});
|
||||
return match (left_side_ce, right_side_ce) {
|
||||
// If "key" is not present at all, return a blank string
|
||||
(None, _) => Ok("".to_owned()),
|
||||
(Some(Ok(left_value)), Some(Ok(right_value))) if left_value <= right_value => {
|
||||
self.render_maybe_body(
|
||||
¶meterized_block.contents,
|
||||
new_breadcrumbs.as_ref().unwrap_or(breadcrumbs),
|
||||
blocks,
|
||||
)
|
||||
}
|
||||
_ => self.render_maybe_body(
|
||||
¶meterized_block.else_contents,
|
||||
new_breadcrumbs.as_ref().unwrap_or(breadcrumbs),
|
||||
blocks,
|
||||
),
|
||||
};
|
||||
})
|
||||
.unwrap_or(Ok("".to_owned()));
|
||||
}
|
||||
DustTag::DTHelperSep(parameterized_block) => {
|
||||
let new_breadcrumbs = self.new_breadcrumbs_partial(
|
||||
|
Loading…
x
Reference in New Issue
Block a user