-
-
Notifications
You must be signed in to change notification settings - Fork 0
feat: Enhance Active Record models and queries with detailed documentation and strict validation rules for nested sets behavior. #79
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
…ation and strict validation rules for nested sets behavior.
WalkthroughThis update expands and clarifies the PHPDoc comments for several Active Record models and their query classes related to tree structures in tests. The Changes
Sequence Diagram(s)sequenceDiagram
participant User
participant TreeWithStrictValidation (ActiveRecord)
participant TreeQuery
participant NestedSetsBehavior
User->>TreeWithStrictValidation: find()
TreeWithStrictValidation->>TreeQuery: new TreeQuery(self::class)
User->>TreeWithStrictValidation: behaviors()
TreeWithStrictValidation->>NestedSetsBehavior: Attach NestedSetsBehavior
User->>TreeWithStrictValidation: save/delete (with validation)
TreeWithStrictValidation->>TreeWithStrictValidation: rules(), transactions(), isTransactional()
Possibly related PRs
Poem
✨ Finishing Touches
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
SupportNeed help? Create a ticket on our support page for assistance with any issues or questions. Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (Invoked using PR comments)
Other keywords and placeholders
CodeRabbit Configuration File (
|
Codecov ReportAll modified and coverable lines are covered by tests ✅
Additional details and impacted files@@ Coverage Diff @@
## main #79 +/- ##
===========================================
Coverage 100.00% 100.00%
Complexity 134 134
===========================================
Files 4 4
Lines 525 525
===========================================
Hits 525 525 ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
🧹 Nitpick comments (4)
tests/support/model/MultipleTreeQuery.php (1)
27-29
: Update copyright year for accuracyThe header still states 2023. Consider bumping to 2025 to reflect the current contribution year.
- * @copyright Copyright (C) 2023 Terabytesoftw. + * @copyright Copyright (C) 2025 Terabytesoftw.tests/support/model/MultipleTree.php (2)
44-51
: Consider making all attribute mappings explicitAlthough the default column names (
lft
,rgt
,depth
) match Yii 2’sNestedSetsBehavior
defaults, spelling them out guards against future refactors and makes intent obvious:'nestedSetsBehavior' => [ 'class' => NestedSetsBehavior::class, 'treeAttribute' => 'tree', + 'leftAttribute' => 'lft', + 'rightAttribute' => 'rgt', + 'depthAttribute' => 'depth', ],
38-40
: Synchronise licence header yearSame observation as in the query class—update to the current year for consistency.
- * @copyright Copyright (C) 2023 Terabytesoftw. + * @copyright Copyright (C) 2025 Terabytesoftw.tests/support/model/TreeWithStrictValidation.php (1)
39-87
: Consider reducing code duplication between Tree and TreeWithStrictValidation.The refactoring from extending
Tree
to extendingActiveRecord
directly has created significant code duplication. Methodsbehaviors()
,isTransactional()
,tableName()
, andtransactions()
are identical in both classes.Consider extracting common functionality into a trait or abstract base class to follow the DRY principle while maintaining test independence.
Example approach using a trait:
+namespace yii2\extensions\nestedsets\tests\support\model; + +use yii\db\ActiveRecord; +use yii2\extensions\nestedsets\NestedSetsBehavior; + +trait TreeModelTrait +{ + public function behaviors(): array + { + return [ + 'nestedSetsBehavior' => NestedSetsBehavior::class, + ]; + } + + public function isTransactional($operation): bool + { + if ($operation === ActiveRecord::OP_DELETE) { + return false; + } + + return parent::isTransactional($operation); + } + + public static function tableName(): string + { + return '{{%tree}}'; + } + + public function transactions(): array + { + return [ + self::SCENARIO_DEFAULT => self::OP_ALL, + ]; + } +}Then both
Tree
andTreeWithStrictValidation
could use this trait to avoid duplication.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (7)
tests/support/model/ExtendableMultipleTree.php
(2 hunks)tests/support/model/ExtendableMultipleTreeQuery.php
(1 hunks)tests/support/model/MultipleTree.php
(1 hunks)tests/support/model/MultipleTreeQuery.php
(1 hunks)tests/support/model/Tree.php
(1 hunks)tests/support/model/TreeQuery.php
(1 hunks)tests/support/model/TreeWithStrictValidation.php
(2 hunks)
🧰 Additional context used
🧠 Learnings (8)
📓 Common learnings
Learnt from: terabytesoftw
PR: yii2-extensions/nested-sets-behavior#66
File: migrations/m250707_103609_tree.php:0-0
Timestamp: 2025-07-07T12:38:55.434Z
Learning: In the yii2-extensions/nested-sets-behavior project, terabytesoftw prefers application-level validation through the NestedSetsBehavior class rather than database-level constraints for nested set integrity. The migrations are meant to be flexible examples since developers may create their own tables.
Learnt from: terabytesoftw
PR: yii2-extensions/nested-sets-behavior#71
File: tests/mssql/ValidationAndStructureTest.php:45-49
Timestamp: 2025-07-08T11:14:34.614Z
Learning: In the yii2-extensions/nested-sets-behavior project, terabytesoftw prefers explicit connection data (including passwords) in unit test files rather than environment variables, since getEnv() can return false and explicit values ensure more reliable test execution.
Learnt from: terabytesoftw
PR: yii2-extensions/nested-sets-behavior#13
File: src/NestedSetsBehavior.php:145-145
Timestamp: 2025-06-29T11:22:41.889Z
Learning: The user terabytesoftw prefers to keep PRs focused and small, implementing enhancements in separate dedicated PRs rather than bundling multiple changes together.
Learnt from: terabytesoftw
PR: yii2-extensions/nested-sets-behavior#71
File: tests/mssql/QueryBehaviorTest.php:36-55
Timestamp: 2025-07-08T11:14:30.383Z
Learning: In the yii2-extensions/nested-sets-behavior project, terabytesoftw prefers explicit hard-coded test credentials in unit test files rather than environment variables, as getenv() returns false in their test environment. For unit tests, explicitly defining connection data is considered acceptable and more reliable than environment variable configuration.
Learnt from: terabytesoftw
PR: yii2-extensions/nested-sets-behavior#71
File: tests/mssql/NodePrependTest.php:35-54
Timestamp: 2025-07-08T11:14:24.015Z
Learning: In the yii2-extensions/nested-sets-behavior project, terabytesoftw prefers hard-coded database credentials in unit test files rather than environment variables, as `getEnv()` returns false in their testing setup and explicit connection data is more reliable for unit tests.
Learnt from: terabytesoftw
PR: yii2-extensions/nested-sets-behavior#71
File: tests/mssql/ValidationAndStructureTest.php:50-53
Timestamp: 2025-07-08T11:14:31.317Z
Learning: In the yii2-extensions/nested-sets-behavior project, terabytesoftw uses hardcoded database connection credentials in unit tests because environment variables are not reliable in their test environment (getEnv() returns false). They consider hardcoded connection data acceptable for unit tests.
tests/support/model/MultipleTreeQuery.php (2)
Learnt from: terabytesoftw
PR: yii2-extensions/nested-sets-behavior#66
File: migrations/m250707_103609_tree.php:0-0
Timestamp: 2025-07-07T12:38:55.434Z
Learning: In the yii2-extensions/nested-sets-behavior project, terabytesoftw prefers application-level validation through the NestedSetsBehavior class rather than database-level constraints for nested set integrity. The migrations are meant to be flexible examples since developers may create their own tables.
Learnt from: terabytesoftw
PR: yii2-extensions/nested-sets-behavior#71
File: tests/mssql/ValidationAndStructureTest.php:45-49
Timestamp: 2025-07-08T11:14:34.614Z
Learning: In the yii2-extensions/nested-sets-behavior project, terabytesoftw prefers explicit connection data (including passwords) in unit test files rather than environment variables, since getEnv() can return false and explicit values ensure more reliable test execution.
tests/support/model/MultipleTree.php (5)
Learnt from: terabytesoftw
PR: yii2-extensions/nested-sets-behavior#66
File: migrations/m250707_103609_tree.php:0-0
Timestamp: 2025-07-07T12:38:55.434Z
Learning: In the yii2-extensions/nested-sets-behavior project, terabytesoftw prefers application-level validation through the NestedSetsBehavior class rather than database-level constraints for nested set integrity. The migrations are meant to be flexible examples since developers may create their own tables.
Learnt from: terabytesoftw
PR: yii2-extensions/nested-sets-behavior#71
File: tests/mssql/ValidationAndStructureTest.php:45-49
Timestamp: 2025-07-08T11:14:34.614Z
Learning: In the yii2-extensions/nested-sets-behavior project, terabytesoftw prefers explicit connection data (including passwords) in unit test files rather than environment variables, since getEnv() can return false and explicit values ensure more reliable test execution.
Learnt from: terabytesoftw
PR: yii2-extensions/nested-sets-behavior#71
File: tests/mssql/ValidationAndStructureTest.php:50-53
Timestamp: 2025-07-08T11:14:31.317Z
Learning: In the yii2-extensions/nested-sets-behavior project, terabytesoftw uses hardcoded database connection credentials in unit tests because environment variables are not reliable in their test environment (getEnv() returns false). They consider hardcoded connection data acceptable for unit tests.
Learnt from: terabytesoftw
PR: yii2-extensions/nested-sets-behavior#71
File: tests/mssql/QueryBehaviorTest.php:36-55
Timestamp: 2025-07-08T11:14:30.383Z
Learning: In the yii2-extensions/nested-sets-behavior project, terabytesoftw prefers explicit hard-coded test credentials in unit test files rather than environment variables, as getenv() returns false in their test environment. For unit tests, explicitly defining connection data is considered acceptable and more reliable than environment variable configuration.
Learnt from: terabytesoftw
PR: yii2-extensions/nested-sets-behavior#71
File: tests/mssql/NodePrependTest.php:35-54
Timestamp: 2025-07-08T11:14:24.015Z
Learning: In the yii2-extensions/nested-sets-behavior project, terabytesoftw prefers hard-coded database credentials in unit test files rather than environment variables, as `getEnv()` returns false in their testing setup and explicit connection data is more reliable for unit tests.
tests/support/model/Tree.php (5)
Learnt from: terabytesoftw
PR: yii2-extensions/nested-sets-behavior#66
File: migrations/m250707_103609_tree.php:0-0
Timestamp: 2025-07-07T12:38:55.434Z
Learning: In the yii2-extensions/nested-sets-behavior project, terabytesoftw prefers application-level validation through the NestedSetsBehavior class rather than database-level constraints for nested set integrity. The migrations are meant to be flexible examples since developers may create their own tables.
Learnt from: terabytesoftw
PR: yii2-extensions/nested-sets-behavior#71
File: tests/mssql/ValidationAndStructureTest.php:45-49
Timestamp: 2025-07-08T11:14:34.614Z
Learning: In the yii2-extensions/nested-sets-behavior project, terabytesoftw prefers explicit connection data (including passwords) in unit test files rather than environment variables, since getEnv() can return false and explicit values ensure more reliable test execution.
Learnt from: terabytesoftw
PR: yii2-extensions/nested-sets-behavior#71
File: tests/mssql/ValidationAndStructureTest.php:50-53
Timestamp: 2025-07-08T11:14:31.317Z
Learning: In the yii2-extensions/nested-sets-behavior project, terabytesoftw uses hardcoded database connection credentials in unit tests because environment variables are not reliable in their test environment (getEnv() returns false). They consider hardcoded connection data acceptable for unit tests.
Learnt from: terabytesoftw
PR: yii2-extensions/nested-sets-behavior#71
File: tests/mssql/QueryBehaviorTest.php:36-55
Timestamp: 2025-07-08T11:14:30.383Z
Learning: In the yii2-extensions/nested-sets-behavior project, terabytesoftw prefers explicit hard-coded test credentials in unit test files rather than environment variables, as getenv() returns false in their test environment. For unit tests, explicitly defining connection data is considered acceptable and more reliable than environment variable configuration.
Learnt from: terabytesoftw
PR: yii2-extensions/nested-sets-behavior#71
File: tests/mssql/NodePrependTest.php:35-54
Timestamp: 2025-07-08T11:14:24.015Z
Learning: In the yii2-extensions/nested-sets-behavior project, terabytesoftw prefers hard-coded database credentials in unit test files rather than environment variables, as `getEnv()` returns false in their testing setup and explicit connection data is more reliable for unit tests.
tests/support/model/ExtendableMultipleTreeQuery.php (1)
Learnt from: terabytesoftw
PR: yii2-extensions/nested-sets-behavior#66
File: migrations/m250707_103609_tree.php:0-0
Timestamp: 2025-07-07T12:38:55.434Z
Learning: In the yii2-extensions/nested-sets-behavior project, terabytesoftw prefers application-level validation through the NestedSetsBehavior class rather than database-level constraints for nested set integrity. The migrations are meant to be flexible examples since developers may create their own tables.
tests/support/model/TreeQuery.php (5)
Learnt from: terabytesoftw
PR: yii2-extensions/nested-sets-behavior#66
File: migrations/m250707_103609_tree.php:0-0
Timestamp: 2025-07-07T12:38:55.434Z
Learning: In the yii2-extensions/nested-sets-behavior project, terabytesoftw prefers application-level validation through the NestedSetsBehavior class rather than database-level constraints for nested set integrity. The migrations are meant to be flexible examples since developers may create their own tables.
Learnt from: terabytesoftw
PR: yii2-extensions/nested-sets-behavior#71
File: tests/mssql/ValidationAndStructureTest.php:45-49
Timestamp: 2025-07-08T11:14:34.614Z
Learning: In the yii2-extensions/nested-sets-behavior project, terabytesoftw prefers explicit connection data (including passwords) in unit test files rather than environment variables, since getEnv() can return false and explicit values ensure more reliable test execution.
Learnt from: terabytesoftw
PR: yii2-extensions/nested-sets-behavior#71
File: tests/mssql/QueryBehaviorTest.php:36-55
Timestamp: 2025-07-08T11:14:30.383Z
Learning: In the yii2-extensions/nested-sets-behavior project, terabytesoftw prefers explicit hard-coded test credentials in unit test files rather than environment variables, as getenv() returns false in their test environment. For unit tests, explicitly defining connection data is considered acceptable and more reliable than environment variable configuration.
Learnt from: terabytesoftw
PR: yii2-extensions/nested-sets-behavior#71
File: tests/mssql/ValidationAndStructureTest.php:50-53
Timestamp: 2025-07-08T11:14:31.317Z
Learning: In the yii2-extensions/nested-sets-behavior project, terabytesoftw uses hardcoded database connection credentials in unit tests because environment variables are not reliable in their test environment (getEnv() returns false). They consider hardcoded connection data acceptable for unit tests.
Learnt from: terabytesoftw
PR: yii2-extensions/nested-sets-behavior#71
File: tests/mssql/NodePrependTest.php:35-54
Timestamp: 2025-07-08T11:14:24.015Z
Learning: In the yii2-extensions/nested-sets-behavior project, terabytesoftw prefers hard-coded database credentials in unit test files rather than environment variables, as `getEnv()` returns false in their testing setup and explicit connection data is more reliable for unit tests.
tests/support/model/ExtendableMultipleTree.php (5)
Learnt from: terabytesoftw
PR: yii2-extensions/nested-sets-behavior#66
File: migrations/m250707_103609_tree.php:0-0
Timestamp: 2025-07-07T12:38:55.434Z
Learning: In the yii2-extensions/nested-sets-behavior project, terabytesoftw prefers application-level validation through the NestedSetsBehavior class rather than database-level constraints for nested set integrity. The migrations are meant to be flexible examples since developers may create their own tables.
Learnt from: terabytesoftw
PR: yii2-extensions/nested-sets-behavior#71
File: tests/mssql/ValidationAndStructureTest.php:45-49
Timestamp: 2025-07-08T11:14:34.614Z
Learning: In the yii2-extensions/nested-sets-behavior project, terabytesoftw prefers explicit connection data (including passwords) in unit test files rather than environment variables, since getEnv() can return false and explicit values ensure more reliable test execution.
Learnt from: terabytesoftw
PR: yii2-extensions/nested-sets-behavior#71
File: tests/mssql/ValidationAndStructureTest.php:50-53
Timestamp: 2025-07-08T11:14:31.317Z
Learning: In the yii2-extensions/nested-sets-behavior project, terabytesoftw uses hardcoded database connection credentials in unit tests because environment variables are not reliable in their test environment (getEnv() returns false). They consider hardcoded connection data acceptable for unit tests.
Learnt from: terabytesoftw
PR: yii2-extensions/nested-sets-behavior#71
File: tests/mssql/NodePrependTest.php:35-54
Timestamp: 2025-07-08T11:14:24.015Z
Learning: In the yii2-extensions/nested-sets-behavior project, terabytesoftw prefers hard-coded database credentials in unit test files rather than environment variables, as `getEnv()` returns false in their testing setup and explicit connection data is more reliable for unit tests.
Learnt from: terabytesoftw
PR: yii2-extensions/nested-sets-behavior#71
File: tests/mssql/QueryBehaviorTest.php:36-55
Timestamp: 2025-07-08T11:14:30.383Z
Learning: In the yii2-extensions/nested-sets-behavior project, terabytesoftw prefers explicit hard-coded test credentials in unit test files rather than environment variables, as getenv() returns false in their test environment. For unit tests, explicitly defining connection data is considered acceptable and more reliable than environment variable configuration.
tests/support/model/TreeWithStrictValidation.php (5)
Learnt from: terabytesoftw
PR: yii2-extensions/nested-sets-behavior#66
File: migrations/m250707_103609_tree.php:0-0
Timestamp: 2025-07-07T12:38:55.434Z
Learning: In the yii2-extensions/nested-sets-behavior project, terabytesoftw prefers application-level validation through the NestedSetsBehavior class rather than database-level constraints for nested set integrity. The migrations are meant to be flexible examples since developers may create their own tables.
Learnt from: terabytesoftw
PR: yii2-extensions/nested-sets-behavior#71
File: tests/mssql/ValidationAndStructureTest.php:45-49
Timestamp: 2025-07-08T11:14:34.614Z
Learning: In the yii2-extensions/nested-sets-behavior project, terabytesoftw prefers explicit connection data (including passwords) in unit test files rather than environment variables, since getEnv() can return false and explicit values ensure more reliable test execution.
Learnt from: terabytesoftw
PR: yii2-extensions/nested-sets-behavior#71
File: tests/mssql/NodePrependTest.php:35-54
Timestamp: 2025-07-08T11:14:24.015Z
Learning: In the yii2-extensions/nested-sets-behavior project, terabytesoftw prefers hard-coded database credentials in unit test files rather than environment variables, as `getEnv()` returns false in their testing setup and explicit connection data is more reliable for unit tests.
Learnt from: terabytesoftw
PR: yii2-extensions/nested-sets-behavior#71
File: tests/mssql/QueryBehaviorTest.php:36-55
Timestamp: 2025-07-08T11:14:30.383Z
Learning: In the yii2-extensions/nested-sets-behavior project, terabytesoftw prefers explicit hard-coded test credentials in unit test files rather than environment variables, as getenv() returns false in their test environment. For unit tests, explicitly defining connection data is considered acceptable and more reliable than environment variable configuration.
Learnt from: terabytesoftw
PR: yii2-extensions/nested-sets-behavior#71
File: tests/mssql/ValidationAndStructureTest.php:50-53
Timestamp: 2025-07-08T11:14:31.317Z
Learning: In the yii2-extensions/nested-sets-behavior project, terabytesoftw uses hardcoded database connection credentials in unit tests because environment variables are not reliable in their test environment (getEnv() returns false). They consider hardcoded connection data acceptable for unit tests.
🧬 Code Graph Analysis (1)
tests/support/model/ExtendableMultipleTree.php (4)
tests/support/model/MultipleTree.php (1)
find
(57-60)tests/support/model/Tree.php (1)
find
(50-53)tests/support/model/TreeWithStrictValidation.php (1)
find
(51-54)tests/support/model/ExtendableMultipleTreeQuery.php (1)
ExtendableMultipleTreeQuery
(31-39)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (20)
- GitHub Check: phpunit-compatibility / PHP 8.2-windows-latest
- GitHub Check: composer-require-checker / PHP 8.4-ubuntu-latest
- GitHub Check: easy-coding-standard / PHP 8.4-ubuntu-latest
- GitHub Check: MySQL tests. / PHP 8.4-mysql-8.4
- GitHub Check: mutation / PHP 8.4-ubuntu-latest
- GitHub Check: PostgreSQL tests. / PHP 8.4-pgsql-15
- GitHub Check: MySQL tests. / PHP 8.4-mysql-latest
- GitHub Check: MySQL tests. / PHP 8.4-mysql-8.0
- GitHub Check: Oracle tests. / PHP 8.4-oci-23
- GitHub Check: SQL Server tests. / PHP 8.4-mssql-2022-latest
- GitHub Check: phpunit / PHP 8.3-windows-latest
- GitHub Check: phpunit / PHP 8.1-windows-latest
- GitHub Check: phpunit / PHP 8.4-windows-latest
- GitHub Check: phpunit / PHP 8.4-ubuntu-latest
- GitHub Check: phpunit / PHP 8.2-windows-latest
- GitHub Check: phpunit-compatibility / PHP 8.1-windows-latest
- GitHub Check: phpunit-compatibility / PHP 8.4-windows-latest
- GitHub Check: phpunit-compatibility / PHP 8.2-windows-latest
- GitHub Check: Oracle tests. / PHP 8.4-oci-23
- GitHub Check: SQL Server tests. / PHP 8.4-mssql-2022-latest
🔇 Additional comments (11)
tests/support/model/ExtendableMultipleTreeQuery.php (2)
11-23
: Excellent documentation enhancement!The comprehensive PHPDoc provides clear context about the class's purpose, integration with NestedSetsQueryBehavior, and key features. This significantly improves code maintainability and understanding.
28-29
: Good addition of copyright and license information.The copyright and license annotations follow standard practices for open source projects.
tests/support/model/ExtendableMultipleTree.php (4)
11-31
: Comprehensive documentation enhancement!The detailed PHPDoc provides excellent context about the model's purpose, behavior integration, and key features. This significantly improves code maintainability and aligns perfectly with the PR objectives.
39-40
: Good addition of copyright and license information.The copyright and license annotations follow standard practices for open source projects.
42-42
: Appropriate use of final keyword for test model.Making the test model
final
is a good practice as it prevents unintended inheritance and clearly indicates the class's intended use.
55-55
: Consistent and appropriate change from static::class to self::class.Since the class is now
final
, usingself::class
is more explicit and appropriate thanstatic::class
. This change improves consistency and correctly reflects that no subclasses are expected.Also applies to: 59-59
tests/support/model/MultipleTreeQuery.php (1)
11-22
: Great improvement to class-level documentation
Clear, detailed PHPDoc helps both IDE autocompletion and new contributors.tests/support/model/MultipleTree.php (1)
11-31
: Comprehensive PHPDoc adds real value
The enriched description and key-features list greatly improve discoverability and static-analysis accuracy.tests/support/model/Tree.php (1)
10-36
: Documentation enhancements are comprehensive and helpful.The expanded PHPDoc provides excellent context about the model's purpose, features, and integration with
NestedSetsBehavior
. This aligns perfectly with the PR objectives to enhance documentation.tests/support/model/TreeQuery.php (1)
10-30
: Documentation and template annotation updates are appropriate.The expanded PHPDoc clearly describes the query class functionality, and the template annotation correctly reflects support for both
Tree
andTreeWithStrictValidation
models. This is consistent with the refactoring inTreeWithStrictValidation.php
.tests/support/model/TreeWithStrictValidation.php (1)
10-37
: Documentation improvements provide excellent context.The expanded PHPDoc clearly describes the model's purpose, strict validation features, and integration with nested sets behavior.
Summary by CodeRabbit
New Features
Documentation
Refactor