Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Sign in
Toggle navigation
S
solarium
Project overview
Project overview
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Commits
Open sidebar
common
solarium
Commits
a3646929
Commit
a3646929
authored
Jun 04, 2012
by
Bas de Nooijer
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Implemented interfaces for documents
parent
b3963553
Changes
9
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
311 additions
and
99 deletions
+311
-99
library/Solarium/Query/Select/ResponseParser/ResponseParser.php
...y/Solarium/Query/Select/ResponseParser/ResponseParser.php
+5
-0
library/Solarium/Query/Select/Result/AbstractDocument.php
library/Solarium/Query/Select/Result/AbstractDocument.php
+148
-0
library/Solarium/Query/Select/Result/Document.php
library/Solarium/Query/Select/Result/Document.php
+1
-94
library/Solarium/Query/Select/Result/DocumentInterface.php
library/Solarium/Query/Select/Result/DocumentInterface.php
+54
-0
library/Solarium/Query/Update/Query/Command/Add.php
library/Solarium/Query/Update/Query/Command/Add.php
+6
-2
library/Solarium/Query/Update/Query/Document.php
library/Solarium/Query/Update/Query/Document.php
+3
-3
library/Solarium/Query/Update/Query/DocumentInterface.php
library/Solarium/Query/Update/Query/DocumentInterface.php
+54
-0
tests/Solarium/Tests/Query/Select/ResponseParser/ResponseParserTest.php
.../Tests/Query/Select/ResponseParser/ResponseParserTest.php
+33
-0
tests/Solarium/Tests/Query/Update/Query/Command/AddTest.php
tests/Solarium/Tests/Query/Update/Query/Command/AddTest.php
+7
-0
No files found.
library/Solarium/Query/Select/ResponseParser/ResponseParser.php
View file @
a3646929
...
@@ -59,6 +59,11 @@ class ResponseParser implements ResponseParserInterface
...
@@ -59,6 +59,11 @@ class ResponseParser implements ResponseParserInterface
// create document instances
// create document instances
$documentClass
=
$query
->
getOption
(
'documentclass'
);
$documentClass
=
$query
->
getOption
(
'documentclass'
);
$classes
=
class_implements
(
$documentClass
);
if
(
!
in_array
(
'Solarium\Query\Select\Result\DocumentInterface'
,
$classes
)
&&
!
in_array
(
'Solarium\Query\Update\Query\DocumentInterface'
,
$classes
))
{
throw
new
\Solarium\Core\Exception
(
'The result document class must implement a document interface'
);
}
$documents
=
array
();
$documents
=
array
();
if
(
isset
(
$data
[
'response'
][
'docs'
]))
{
if
(
isset
(
$data
[
'response'
][
'docs'
]))
{
foreach
(
$data
[
'response'
][
'docs'
]
as
$doc
)
{
foreach
(
$data
[
'response'
][
'docs'
]
as
$doc
)
{
...
...
library/Solarium/Query/Select/Result/AbstractDocument.php
0 → 100644
View file @
a3646929
<?php
/**
* Copyright 2011 Bas de Nooijer. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this listof conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
* The views and conclusions contained in the software and documentation are
* those of the authors and should not be interpreted as representing official
* policies, either expressed or implied, of the copyright holder.
*
* @copyright Copyright 2011 Bas de Nooijer <solarium@raspberry.nl>
* @license http://github.com/basdenooijer/solarium/raw/master/COPYING
* @link http://www.solarium-project.org/
*/
/**
* @namespace
*/
namespace
Solarium\Query\Select\Result
;
use
Solarium\Core\Exception
;
/**
* Document base functionality, used by readonly and readwrite documents
*/
abstract
class
AbstractDocument
implements
\IteratorAggregate
,
\Countable
,
\ArrayAccess
{
/**
* All fields in this document
*
* @var array
*/
protected
$fields
;
/**
* Get all fields
*
* @return array
*/
public
function
getFields
()
{
return
$this
->
fields
;
}
/**
* Get field value by name
*
* Magic access method for accessing fields as properties of this document
* object, by field name.
*
* @param string $name
* @return mixed
*/
public
function
__get
(
$name
)
{
if
(
!
isset
(
$this
->
fields
[
$name
]))
{
return
null
;
}
return
$this
->
fields
[
$name
];
}
/**
* IteratorAggregate implementation
*
* @return \ArrayIterator
*/
public
function
getIterator
()
{
return
new
\ArrayIterator
(
$this
->
fields
);
}
/**
* Countable implementation
*
* @return int
*/
public
function
count
()
{
return
count
(
$this
->
fields
);
}
/**
* ArrayAccess implementation
*
* @param mixed $offset
* @param mixed $value
* @return void
*/
public
function
offsetSet
(
$offset
,
$value
)
{
$this
->
__set
(
$offset
,
$value
);
}
/**
* ArrayAccess implementation
*
* @param mixed $offset
* @return bool
*/
public
function
offsetExists
(
$offset
)
{
return
(
$this
->
__get
(
$offset
)
!==
null
);
}
/**
* ArrayAccess implementation
*
* @param mixed $offset
* @return void
*/
public
function
offsetUnset
(
$offset
)
{
$this
->
__set
(
$offset
,
null
);
}
/**
* ArrayAccess implementation
*
* @param mixed $offset
* @return mixed|null
*/
public
function
offsetGet
(
$offset
)
{
return
$this
->
__get
(
$offset
);
}
}
library/Solarium/Query/Select/Result/Document.php
View file @
a3646929
...
@@ -45,7 +45,7 @@ use Solarium\Core\Exception;
...
@@ -45,7 +45,7 @@ use Solarium\Core\Exception;
* This is the default Solr document type returned by a select query. You can
* This is the default Solr document type returned by a select query. You can
* access the fields as object properties or iterate over all fields.
* access the fields as object properties or iterate over all fields.
*/
*/
class
Document
implements
\IteratorAggregate
,
\Countable
,
\ArrayAccess
class
Document
extends
AbstractDocument
implements
DocumentInterface
{
{
/**
/**
...
@@ -65,34 +65,6 @@ class Document implements \IteratorAggregate, \Countable, \ArrayAccess
...
@@ -65,34 +65,6 @@ class Document implements \IteratorAggregate, \Countable, \ArrayAccess
$this
->
fields
=
$fields
;
$this
->
fields
=
$fields
;
}
}
/**
* Get all fields
*
* @return array
*/
public
function
getFields
()
{
return
$this
->
fields
;
}
/**
* Get field value by name
*
* Magic access method for accessing fields as properties of this document
* object, by field name.
*
* @param string $name
* @return mixed
*/
public
function
__get
(
$name
)
{
if
(
!
isset
(
$this
->
fields
[
$name
]))
{
return
null
;
}
return
$this
->
fields
[
$name
];
}
/**
/**
* Set field value
* Set field value
*
*
...
@@ -108,69 +80,4 @@ class Document implements \IteratorAggregate, \Countable, \ArrayAccess
...
@@ -108,69 +80,4 @@ class Document implements \IteratorAggregate, \Countable, \ArrayAccess
throw
new
Exception
(
'A readonly document cannot be altered'
);
throw
new
Exception
(
'A readonly document cannot be altered'
);
}
}
/**
* IteratorAggregate implementation
*
* @return \ArrayIterator
*/
public
function
getIterator
()
{
return
new
\ArrayIterator
(
$this
->
fields
);
}
/**
* Countable implementation
*
* @return int
*/
public
function
count
()
{
return
count
(
$this
->
fields
);
}
/**
* ArrayAccess implementation
*
* @param mixed $offset
* @param mixed $value
* @return void
*/
public
function
offsetSet
(
$offset
,
$value
)
{
$this
->
__set
(
$offset
,
$value
);
}
/**
* ArrayAccess implementation
*
* @param mixed $offset
* @return bool
*/
public
function
offsetExists
(
$offset
)
{
return
(
$this
->
__get
(
$offset
)
!==
null
);
}
/**
* ArrayAccess implementation
*
* @param mixed $offset
* @return void
*/
public
function
offsetUnset
(
$offset
)
{
$this
->
__set
(
$offset
,
null
);
}
/**
* ArrayAccess implementation
*
* @param mixed $offset
* @return mixed|null
*/
public
function
offsetGet
(
$offset
)
{
return
$this
->
__get
(
$offset
);
}
}
}
library/Solarium/Query/Select/Result/DocumentInterface.php
0 → 100644
View file @
a3646929
<?php
/**
* Copyright 2011 Bas de Nooijer. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this listof conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
* The views and conclusions contained in the software and documentation are
* those of the authors and should not be interpreted as representing official
* policies, either expressed or implied, of the copyright holder.
*
* @copyright Copyright 2011 Bas de Nooijer <solarium@raspberry.nl>
* @license http://github.com/basdenooijer/solarium/raw/master/COPYING
* @link http://www.solarium-project.org/
*/
/**
* @namespace
*/
namespace
Solarium\Query\Select\Result
;
/**
* Solr result document interface
*/
interface
DocumentInterface
{
/**
* Constructor
*
* @param array $fields
*/
public
function
__construct
(
array
$fields
);
}
library/Solarium/Query/Update/Query/Command/Add.php
View file @
a3646929
...
@@ -38,7 +38,7 @@
...
@@ -38,7 +38,7 @@
*/
*/
namespace
Solarium\Query\Update\Query\Command
;
namespace
Solarium\Query\Update\Query\Command
;
use
Solarium\Query\Update\Query\Query
as
UpdateQuery
;
use
Solarium\Query\Update\Query\Query
as
UpdateQuery
;
use
Solarium\Query\Update\Query\DocumentInterface
;
/**
/**
* Update query add command
* Update query add command
*
*
...
@@ -67,11 +67,15 @@ class Add extends Command
...
@@ -67,11 +67,15 @@ class Add extends Command
/**
/**
* Add a single document
* Add a single document
*
*
* @param
object
$document
* @param
DocumentInterface
$document
* @return self Provides fluent interface
* @return self Provides fluent interface
*/
*/
public
function
addDocument
(
$document
)
public
function
addDocument
(
$document
)
{
{
if
(
!
(
$document
instanceof
DocumentInterface
))
{
throw
new
\Solarium\Core\Exception
(
'Documents must implement the document interface'
);
}
$this
->
documents
[]
=
$document
;
$this
->
documents
[]
=
$document
;
return
$this
;
return
$this
;
...
...
library/Solarium/Query/Update/Query/Document.php
View file @
a3646929
...
@@ -37,7 +37,7 @@
...
@@ -37,7 +37,7 @@
* @namespace
* @namespace
*/
*/
namespace
Solarium\Query\Update\Query
;
namespace
Solarium\Query\Update\Query
;
use
Solarium\Query\Select\Result\
Document
as
ReadOnly
Document
;
use
Solarium\Query\Select\Result\
Abstract
Document
;
/**
/**
* Read/Write Solr document
* Read/Write Solr document
...
@@ -52,7 +52,7 @@ use Solarium\Query\Select\Result\Document as ReadOnlyDocument;
...
@@ -52,7 +52,7 @@ use Solarium\Query\Select\Result\Document as ReadOnlyDocument;
* stored. You will loose that data because it is impossible to retrieve it from
* stored. You will loose that data because it is impossible to retrieve it from
* Solr. Always update from the original data source.
* Solr. Always update from the original data source.
*/
*/
class
Document
extends
ReadOnlyDocument
class
Document
extends
AbstractDocument
implements
DocumentInterface
{
{
/**
/**
...
@@ -77,7 +77,7 @@ class Document extends ReadOnlyDocument
...
@@ -77,7 +77,7 @@ class Document extends ReadOnlyDocument
* @param array $fields
* @param array $fields
* @param array $boosts
* @param array $boosts
*/
*/
public
function
__construct
(
$fields
=
array
(),
$boosts
=
array
())
public
function
__construct
(
array
$fields
=
array
(),
array
$boosts
=
array
())
{
{
$this
->
fields
=
$fields
;
$this
->
fields
=
$fields
;
$this
->
fieldBoosts
=
$boosts
;
$this
->
fieldBoosts
=
$boosts
;
...
...
library/Solarium/Query/Update/Query/DocumentInterface.php
0 → 100644
View file @
a3646929
<?php
/**
* Copyright 2011 Bas de Nooijer. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this listof conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
* The views and conclusions contained in the software and documentation are
* those of the authors and should not be interpreted as representing official
* policies, either expressed or implied, of the copyright holder.
*
* @copyright Copyright 2011 Bas de Nooijer <solarium@raspberry.nl>
* @license http://github.com/basdenooijer/solarium/raw/master/COPYING
* @link http://www.solarium-project.org/
*/
/**
* @namespace
*/
namespace
Solarium\Query\Update\Query
;
/**
* Solr update document interface
*/
interface
DocumentInterface
{
/**
* Constructor
*
* @param array $fields
*/
public
function
__construct
(
array
$fields
,
array
$boosts
);
}
tests/Solarium/Tests/Query/Select/ResponseParser/ResponseParserTest.php
View file @
a3646929
...
@@ -84,6 +84,39 @@ class ResponseParserTest extends \PHPUnit_Framework_TestCase
...
@@ -84,6 +84,39 @@ class ResponseParserTest extends \PHPUnit_Framework_TestCase
$this
->
assertEquals
(
$components
,
$result
[
'components'
]);
$this
->
assertEquals
(
$components
,
$result
[
'components'
]);
}
}
public
function
testParseWithInvalidDocumentClass
()
{
$data
=
array
(
'response'
=>
array
(
'docs'
=>
array
(
array
(
'fieldA'
=>
1
,
'fieldB'
=>
'Test'
),
array
(
'fieldA'
=>
2
,
'fieldB'
=>
'Test2'
)
),
'numFound'
=>
503
),
'responseHeader'
=>
array
(
'status'
=>
1
,
'QTime'
=>
13
,
)
);
$query
=
new
Query
(
array
(
'documentclass'
=>
'StdClass'
));
$query
->
getFacetSet
();
$resultStub
=
$this
->
getMock
(
'Solarium\Query\Select\Result\Result'
,
array
(),
array
(),
''
,
false
);
$resultStub
->
expects
(
$this
->
once
())
->
method
(
'getData'
)
->
will
(
$this
->
returnValue
(
$data
));
$resultStub
->
expects
(
$this
->
once
())
->
method
(
'getQuery'
)
->
will
(
$this
->
returnValue
(
$query
));
$parser
=
new
ResponseParser
();
$this
->
setExpectedException
(
'Solarium\Core\Exception'
);
$parser
->
parse
(
$resultStub
);
}
public
function
testParseWithoutNumFound
()
public
function
testParseWithoutNumFound
()
{
{
$data
=
array
(
$data
=
array
(
...
...
tests/Solarium/Tests/Query/Update/Query/Command/AddTest.php
View file @
a3646929
...
@@ -61,6 +61,13 @@ class AddTest extends \PHPUnit_Framework_TestCase
...
@@ -61,6 +61,13 @@ class AddTest extends \PHPUnit_Framework_TestCase
);
);
}
}
public
function
testAddDocumentWithInvalidDocument
()
{
$doc
=
new
\StdClass
();
$this
->
setExpectedException
(
'Solarium\Core\Exception'
);
$this
->
command
->
addDocument
(
$doc
);
}
public
function
testAddDocuments
()
public
function
testAddDocuments
()
{
{
$doc1
=
new
Document
(
array
(
'id'
=>
1
));
$doc1
=
new
Document
(
array
(
'id'
=>
1
));
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment