Skip to content

Commit 8c45a95

Browse files
committed
Merge pull request #351
2 parents 46a0849 + 98f02d8 commit 8c45a95

File tree

3 files changed

+115
-0
lines changed

3 files changed

+115
-0
lines changed

src/BSON/Javascript.c

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,53 @@ PHP_METHOD(Javascript, __wakeup)
180180
}
181181
/* }}} */
182182

183+
/* {{{ proto string Javascript::getCode()
184+
*/
185+
PHP_METHOD(Javascript, getCode)
186+
{
187+
php_phongo_javascript_t *intern;
188+
189+
if (zend_parse_parameters_none() == FAILURE) {
190+
return;
191+
}
192+
193+
intern = Z_JAVASCRIPT_OBJ_P(getThis());
194+
195+
PHONGO_RETURN_STRINGL(intern->code, intern->code_len);
196+
}
197+
/* }}} */
198+
199+
/* {{{ proto object|null Javascript::getScope()
200+
*/
201+
PHP_METHOD(Javascript, getScope)
202+
{
203+
php_phongo_javascript_t *intern;
204+
205+
if (zend_parse_parameters_none() == FAILURE) {
206+
return;
207+
}
208+
209+
intern = Z_JAVASCRIPT_OBJ_P(getThis());
210+
211+
if (!intern->scope) {
212+
RETURN_NULL();
213+
}
214+
215+
if (intern->scope->len) {
216+
php_phongo_bson_state state = PHONGO_BSON_STATE_INITIALIZER;
217+
218+
phongo_bson_to_zval_ex(bson_get_data(intern->scope), intern->scope->len, &state);
219+
#if PHP_VERSION_ID >= 70000
220+
RETURN_ZVAL(&state.zchild, 0, 1);
221+
#else
222+
RETURN_ZVAL(state.zchild, 0, 1);
223+
#endif
224+
} else {
225+
RETURN_NULL();
226+
}
227+
}
228+
/* }}} */
229+
183230
/* {{{ BSON\Javascript */
184231

185232
ZEND_BEGIN_ARG_INFO_EX(ai_Javascript___construct, 0, 0, 1)
@@ -199,6 +246,8 @@ static zend_function_entry php_phongo_javascript_me[] = {
199246
PHP_ME(Javascript, __set_state, ai_Javascript___set_state, ZEND_ACC_PUBLIC|ZEND_ACC_STATIC)
200247
PHP_ME(Javascript, __toString, ai_Javascript_void, ZEND_ACC_PUBLIC|ZEND_ACC_FINAL)
201248
PHP_ME(Javascript, __wakeup, ai_Javascript_void, ZEND_ACC_PUBLIC)
249+
PHP_ME(Javascript, getCode, ai_Javascript_void, ZEND_ACC_PUBLIC|ZEND_ACC_FINAL)
250+
PHP_ME(Javascript, getScope, ai_Javascript_void, ZEND_ACC_PUBLIC|ZEND_ACC_FINAL)
202251
PHP_FE_END
203252
};
204253

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
--TEST--
2+
MongoDB\BSON\Javascript::getCode()
3+
--FILE--
4+
<?php
5+
6+
$tests = [
7+
['function foo(bar) { return bar; }', null],
8+
['function foo(bar) { return bar; }', []],
9+
['function foo() { return foo; }', ['foo' => 42]],
10+
['function foo() { return id; }', ['id' => new MongoDB\BSON\ObjectId('53e2a1c40640fd72175d4603')]],
11+
];
12+
13+
foreach ($tests as $test) {
14+
list($code, $scope) = $test;
15+
16+
$js = new MongoDB\BSON\Javascript($code, $scope);
17+
var_dump($js->getCode());
18+
}
19+
20+
?>
21+
===DONE===
22+
<?php exit(0); ?>
23+
--EXPECT--
24+
string(33) "function foo(bar) { return bar; }"
25+
string(33) "function foo(bar) { return bar; }"
26+
string(30) "function foo() { return foo; }"
27+
string(29) "function foo() { return id; }"
28+
===DONE===
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
--TEST--
2+
MongoDB\BSON\Javascript::getScope()
3+
--FILE--
4+
<?php
5+
6+
$tests = [
7+
['function foo(bar) { return bar; }', null],
8+
['function foo(bar) { return bar; }', []],
9+
['function foo() { return foo; }', ['foo' => 42]],
10+
['function foo() { return id; }', ['id' => new MongoDB\BSON\ObjectId('53e2a1c40640fd72175d4603')]],
11+
];
12+
13+
foreach ($tests as $test) {
14+
list($code, $scope) = $test;
15+
16+
$js = new MongoDB\BSON\Javascript($code, $scope);
17+
var_dump($js->getScope());
18+
}
19+
20+
?>
21+
===DONE===
22+
<?php exit(0); ?>
23+
--EXPECTF--
24+
NULL
25+
object(stdClass)#%d (%d) {
26+
}
27+
object(stdClass)#%d (%d) {
28+
["foo"]=>
29+
int(42)
30+
}
31+
object(stdClass)#%d (%d) {
32+
["id"]=>
33+
object(MongoDB\BSON\ObjectID)#%d (%d) {
34+
["oid"]=>
35+
string(24) "53e2a1c40640fd72175d4603"
36+
}
37+
}
38+
===DONE===

0 commit comments

Comments
 (0)