Skip to content

Commit fa94c2d

Browse files
authored
Add Extends (#4)
* Add Extends * Hydrate using protected and privates
1 parent aa92c0d commit fa94c2d

File tree

2 files changed

+46
-0
lines changed

2 files changed

+46
-0
lines changed

src/Context.php

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,22 @@ public static function create(string $projectRoot = null, string $environment =
6363
return $ctx;
6464
}
6565

66+
public static function extends(Context $ctx)
67+
{
68+
$c = new static();
69+
$c->_projectRoot = $ctx->_projectRoot;
70+
$c->_env = $ctx->_env;
71+
$c->_cfg = $ctx->_cfg;
72+
$c->_meta = $ctx->_meta;
73+
$c->_routeData = $ctx->_routeData;
74+
75+
$c->_id = $ctx->_id;
76+
$c->_events = $ctx->_events;
77+
$c->_request = $ctx->_request;
78+
$c->_cookieJar = $ctx->_cookieJar;
79+
return $c;
80+
}
81+
6682
protected function _generateId()
6783
{
6884
return uniqid('ctx-', true);

tests/ContextTest.php

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,4 +138,34 @@ public function testCannotSetContext()
138138
$this->expectExceptionMessage("You cannot set context on context");
139139
$ctx->setContext($ctx2);
140140
}
141+
142+
public function testExtendingContext()
143+
{
144+
$ctx = new Context();
145+
$ctx->setEnvironment(Context::ENV_PROD);
146+
$ctx->setProjectRoot('/abc');
147+
$ctx2 = Context::extends($ctx);
148+
149+
$this->assertEquals($ctx->getEnvironment(), $ctx2->getEnvironment());
150+
$this->assertEquals($ctx->getProjectRoot(), $ctx2->getProjectRoot());
151+
$this->assertEquals($ctx->id(), $ctx2->id());
152+
153+
$ctx = Context::create('/abc', Context::ENV_QA);
154+
$ctx->meta()->set('abc', 'def');
155+
$ctx2 = Context::extends($ctx);
156+
157+
$this->assertEquals($ctx->getProjectRoot(), $ctx2->getProjectRoot());
158+
$this->assertEquals('def', $ctx2->meta()->get('abc'));
159+
160+
$cnf = new ConfigProvider();
161+
$ctx->setConfig($cnf);
162+
$ctx->routeData()->set('123', '456');
163+
164+
$ctx2 = Context::extends($ctx);
165+
166+
$this->assertSame($cnf, $ctx2->getConfig());
167+
$this->assertEquals('def', $ctx2->meta()->get('abc'));
168+
$this->assertEquals('456', $ctx2->routeData()->get('123'));
169+
170+
}
141171
}

0 commit comments

Comments
 (0)