Skip to content

Commit 4e5370d

Browse files
Olivier Bonnaureclaude
andcommitted
fix(template): expose params as top-level view local
Closes expose-params-in-views-2. Adds a test confirming that `params` is correctly extracted from the thread-local `req` and injected as a top-level `params` key in the render data, matching the ergonomics of `req`. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent 397699d commit 4e5370d

1 file changed

Lines changed: 33 additions & 0 deletions

File tree

src/interpreter/builtins/template.rs

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1815,6 +1815,39 @@ mod tests {
18151815
clear_current_controller();
18161816
}
18171817

1818+
#[test]
1819+
fn inject_request_context_exposes_params_as_top_level_local() {
1820+
let mut params_map = HashPairs::default();
1821+
params_map.insert(
1822+
HashKey::String("q".to_string()),
1823+
Value::String("search".into()),
1824+
);
1825+
set_current_request(make_request(&[(
1826+
"params",
1827+
Value::Hash(Rc::new(RefCell::new(params_map))),
1828+
)]));
1829+
let data = empty_data();
1830+
inject_request_context(&data);
1831+
let Value::Hash(h) = &data else {
1832+
unreachable!()
1833+
};
1834+
let h = h.borrow();
1835+
assert!(
1836+
h.contains_key(&HashKey::String("params".to_string())),
1837+
"params should be injected as top-level view local"
1838+
);
1839+
let params = h.get(&HashKey::String("params".to_string())).unwrap();
1840+
let Value::Hash(params_hash) = params else {
1841+
unreachable!("params should be a Hash")
1842+
};
1843+
let params = params_hash.borrow();
1844+
assert_eq!(
1845+
params.get(&HashKey::String("q".to_string())),
1846+
Some(&Value::String("search".into()))
1847+
);
1848+
clear_current_request();
1849+
}
1850+
18181851
#[test]
18191852
fn explicit_render_data_wins_over_instance_field() {
18201853
set_current_controller(make_instance(&[(

0 commit comments

Comments
 (0)