Skip to content

Add preserveParentContext configuration for partial context handling#1173

Open
windli2018 wants to merge 5 commits intojknack:masterfrom
justdb:master
Open

Add preserveParentContext configuration for partial context handling#1173
windli2018 wants to merge 5 commits intojknack:masterfrom
justdb:master

Conversation

@windli2018
Copy link

Add a new configuration option preserveParentContext that allows partials to maintain the original parent context chain instead of creating a new PartialCtx wrapper.

When enabled:

  • {{> partial this}} uses current context directly without creating new PartialCtx
  • {{> partial ..}} navigates up parent chain to access parent context
  • {{> partial ../..}} navigates up multiple parent levels
  • {{../property}} in partial can access original parent properties

Default is false for backward compatibility.

Files modified:

  • Handlebars.java: Add preserveParentContext field, getter, setter, fluent API
  • Partial.java: Add conditional logic for context navigation
  • PartialContextModeTest.java: Add 20 comprehensive tests
  • README.md: Add documentation about the new feature

Test results: 999 tests run, 0 failures, 0 errors, 3 skipped

Add a new configuration option `preserveParentContext` that allows partials
to maintain the original parent context chain instead of creating a new
PartialCtx wrapper.

When enabled:
- {{> partial this}} uses current context directly without creating new PartialCtx
- {{> partial ..}} navigates up parent chain to access parent context
- {{> partial ../..}} navigates up multiple parent levels
- {{../property}} in partial can access original parent properties

Default is false for backward compatibility.

Files modified:
- Handlebars.java: Add preserveParentContext field, getter, setter, fluent API
- Partial.java: Add conditional logic for context navigation
- PartialContextModeTest.java: Add 20 comprehensive tests
- README.md: Add documentation about the new feature

Test results: 999 tests run, 0 failures, 0 errors, 3 skipped
Add support for complex nested property paths in partial context parameter.
When preserveParentContext is enabled, partials can now use paths like
`../../target/nested/value` to access nested properties from ancestor contexts.

Changes:
- Partial.java: Add PathCompiler-based property resolution for remaining context
  after navigating up parent chain (e.g., `../../target/nested/value`)

This is consistent with justdb's handlebars route optimization feature,
but uses the standard Handlebars syntax: `{{> partial ../../path/to/property}}`
instead of justdb's extended syntax: `{{> ../../path/to/property}}`.

Test results:
- All 20 PartialContextModeTest tests pass
- Backward compatibility maintained
…t navigation

Enhanced preserveParentContext mode to support nested property paths in partial context parameters.

Changes:
- Updated Partial.java documentation to reflect support for ../../xxx/yyy paths
- Added 3 new test cases for nested property path resolution:
  - testRender_PreserveMode_NestedPropertyPath: tests ../../target/nested/value navigation
  - testRender_PreserveMode_SinglePropertyPath: tests ../targetValue navigation
  - testRender_PreserveMode_NestedPropertyPath_MissingProperty: tests missing property handling

The implementation uses Handlebars' PathCompiler for property resolution, maintaining compatibility with existing behavior while enabling more complex context navigation scenarios.

All 23 tests pass successfully.
Address code review suggestions to enhance robustness and documentation:

Changes:
- Add explicit comment explaining null value handling for resolvedValue
- Improve documentation clarity with example of path resolution
- Add test for trailing slash edge case (../foo/)
- Add test for navigation beyond available parent levels (../../../)

The trailing slash test verifies that PathCompiler correctly handles
paths with trailing slashes. The navigation beyond parents test
ensures graceful degradation when navigating up more levels than
available in the context chain.

All 25 tests pass successfully (6 base + 19 preserve mode tests).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant