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
2eec03ac
Commit
2eec03ac
authored
Mar 03, 2012
by
Bas de Nooijer
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Moved requestbuilder and responseparser mappings out of the client class and into the query classes
parent
67efa44a
Changes
15
Hide whitespace changes
Inline
Side-by-side
Showing
15 changed files
with
257 additions
and
94 deletions
+257
-94
library/Solarium/Core/Client/Client.php
library/Solarium/Core/Client/Client.php
+24
-66
library/Solarium/Core/Query/Query.php
library/Solarium/Core/Query/Query.php
+15
-0
library/Solarium/Core/Query/Result/QueryType.php
library/Solarium/Core/Query/Result/QueryType.php
+4
-6
library/Solarium/Query/Analysis/Query/Document.php
library/Solarium/Query/Analysis/Query/Document.php
+22
-1
library/Solarium/Query/Analysis/Query/Field.php
library/Solarium/Query/Analysis/Query/Field.php
+22
-0
library/Solarium/Query/MoreLikeThis/Query.php
library/Solarium/Query/MoreLikeThis/Query.php
+22
-0
library/Solarium/Query/Ping/Query.php
library/Solarium/Query/Ping/Query.php
+21
-0
library/Solarium/Query/Select/Query/Query.php
library/Solarium/Query/Select/Query/Query.php
+22
-0
library/Solarium/Query/Suggester/Query.php
library/Solarium/Query/Suggester/Query.php
+22
-0
library/Solarium/Query/Terms/Query.php
library/Solarium/Query/Terms/Query.php
+22
-0
library/Solarium/Query/Update/Query/Query.php
library/Solarium/Query/Update/Query/Query.php
+22
-0
tests/Solarium/Tests/Core/Client/ClientTest.php
tests/Solarium/Tests/Core/Client/ClientTest.php
+14
-21
tests/Solarium/Tests/Core/Query/QueryTest.php
tests/Solarium/Tests/Core/Query/QueryTest.php
+10
-0
tests/Solarium/Tests/Core/Query/Result/QueryTypeTest.php
tests/Solarium/Tests/Core/Query/Result/QueryTypeTest.php
+5
-0
tests/Solarium/Tests/Query/Analysis/Query/QueryTest.php
tests/Solarium/Tests/Query/Analysis/Query/QueryTest.php
+10
-0
No files found.
library/Solarium/Core/Client/Client.php
View file @
2eec03ac
...
...
@@ -122,46 +122,14 @@ class Client extends Configurable
* These can be customized using {@link registerQueryType()}
*/
protected
$queryTypes
=
array
(
self
::
QUERY_SELECT
=>
array
(
'query'
=>
'Solarium\Query\Select\Query\Query'
,
'requestbuilder'
=>
'Solarium\Query\Select\RequestBuilder\RequestBuilder'
,
'responseparser'
=>
'Solarium\Query\Select\ResponseParser\ResponseParser'
),
self
::
QUERY_UPDATE
=>
array
(
'query'
=>
'Solarium\Query\Update\Query\Query'
,
'requestbuilder'
=>
'Solarium\Query\Update\RequestBuilder'
,
'responseparser'
=>
'Solarium\Query\Update\ResponseParser'
),
self
::
QUERY_PING
=>
array
(
'query'
=>
'Solarium\Query\Ping\Query'
,
'requestbuilder'
=>
'Solarium\Query\Ping\RequestBuilder'
,
'responseparser'
=>
'Solarium\Query\Ping\ResponseParser'
),
self
::
QUERY_MORELIKETHIS
=>
array
(
'query'
=>
'Solarium\Query\MoreLikeThis\Query'
,
'requestbuilder'
=>
'Solarium\Query\MoreLikeThis\RequestBuilder'
,
'responseparser'
=>
'Solarium\Query\MoreLikeThis\ResponseParser'
),
self
::
QUERY_ANALYSIS_DOCUMENT
=>
array
(
'query'
=>
'Solarium\Query\Analysis\Query\Document'
,
'requestbuilder'
=>
'Solarium\Query\Analysis\RequestBuilder\Document'
,
'responseparser'
=>
'Solarium\Query\Analysis\ResponseParser\Document'
),
self
::
QUERY_ANALYSIS_FIELD
=>
array
(
'query'
=>
'Solarium\Query\Analysis\Query\Field'
,
'requestbuilder'
=>
'Solarium\Query\Analysis\RequestBuilder\Field'
,
'responseparser'
=>
'Solarium\Query\Analysis\ResponseParser\Field'
),
self
::
QUERY_TERMS
=>
array
(
'query'
=>
'Solarium\Query\Terms\Query'
,
'requestbuilder'
=>
'Solarium\Query\Terms\RequestBuilder'
,
'responseparser'
=>
'Solarium\Query\Terms\ResponseParser'
),
self
::
QUERY_SUGGESTER
=>
array
(
'query'
=>
'Solarium\Query\Suggester\Query'
,
'requestbuilder'
=>
'Solarium\Query\Suggester\RequestBuilder'
,
'responseparser'
=>
'Solarium\Query\Suggester\ResponseParser'
),
self
::
QUERY_SELECT
=>
'Solarium\Query\Select\Query\Query'
,
self
::
QUERY_UPDATE
=>
'Solarium\Query\Update\Query\Query'
,
self
::
QUERY_PING
=>
'Solarium\Query\Ping\Query'
,
self
::
QUERY_MORELIKETHIS
=>
'Solarium\Query\MoreLikeThis\Query'
,
self
::
QUERY_ANALYSIS_DOCUMENT
=>
'Solarium\Query\Analysis\Query\Document'
,
self
::
QUERY_ANALYSIS_FIELD
=>
'Solarium\Query\Analysis\Query\Field'
,
self
::
QUERY_TERMS
=>
'Solarium\Query\Terms\Query'
,
self
::
QUERY_SUGGESTER
=>
'Solarium\Query\Suggester\Query'
,
);
/**
...
...
@@ -229,6 +197,7 @@ class Client extends Configurable
* The adapter has to be a class that extends
* {@link Solarium\Client\Adapter}.
*
*
* If a string is passed it is assumed to be the classname and it will be
* instantiated on first use. This requires the availability of the class
* through autoloading or a manual require before calling this method.
...
...
@@ -302,18 +271,12 @@ class Client extends Configurable
* require before calling this method.
*
* @param string $type
* @param string $query
* @param string|object $requestBuilder
* @param string|object $responseParser
* @param string $queryClass
* @return self Provides fluent interface
*/
public
function
registerQueryType
(
$type
,
$query
,
$requestBuilder
,
$responseParser
)
public
function
registerQueryType
(
$type
,
$query
Class
)
{
$this
->
queryTypes
[
$type
]
=
array
(
'query'
=>
$query
,
'requestbuilder'
=>
$requestBuilder
,
'responseparser'
=>
$responseParser
,
);
$this
->
queryTypes
[
$type
]
=
$queryClass
;
return
$this
;
}
...
...
@@ -326,16 +289,15 @@ class Client extends Configurable
*/
public
function
registerQueryTypes
(
$queryTypes
)
{
foreach
(
$queryTypes
as
$type
=>
$
queryType
)
{
foreach
(
$queryTypes
as
$type
=>
$
class
)
{
if
(
!
isset
(
$queryType
[
'type'
]))
$queryType
[
'type'
]
=
$type
;
// support both "key=>value" and "(no-key) => array(key=>x,query=>y)" formats
if
(
is_array
(
$class
))
{
if
(
isset
(
$class
[
'type'
]))
$type
=
$class
[
'type'
];
$class
=
$class
[
'query'
];
}
$this
->
registerQueryType
(
$queryType
[
'type'
],
$queryType
[
'query'
],
$queryType
[
'requestbuilder'
],
$queryType
[
'responseparser'
]
);
$this
->
registerQueryType
(
$type
,
$class
);
}
}
...
...
@@ -439,7 +401,7 @@ class Client extends Configurable
*
* You can remove a plugin by passing the plugin key, or the plugin instance
*
* @param string|
Abstract
Plugin $plugin
* @param string|Plugin $plugin
* @return self Provides fluent interface
*/
public
function
removePlugin
(
$plugin
)
...
...
@@ -514,15 +476,11 @@ class Client extends Configurable
$pluginResult
=
$this
->
callPlugins
(
'preCreateRequest'
,
array
(
$query
),
true
);
if
(
$pluginResult
!==
null
)
return
$pluginResult
;
$
queryType
=
$query
->
getType
();
if
(
!
isset
(
$this
->
queryTypes
[
$queryType
])
)
{
throw
new
Exception
(
'No requestbuilder re
gistered for querytype: '
.
$queryType
);
$
requestBuilder
=
$query
->
getRequestBuilder
();
if
(
!
$requestBuilder
)
{
throw
new
Exception
(
'No requestbuilder re
turned by querytype: '
.
$query
->
getType
()
);
}
$requestBuilder
=
$this
->
queryTypes
[
$queryType
][
'requestbuilder'
];
if
(
is_string
(
$requestBuilder
))
{
$requestBuilder
=
new
$requestBuilder
;
}
$request
=
$requestBuilder
->
build
(
$query
);
$this
->
callPlugins
(
'postCreateRequest'
,
array
(
$query
,
$request
));
...
...
@@ -746,7 +704,7 @@ class Client extends Configurable
throw
new
Exception
(
'Unknown querytype: '
.
$type
);
}
$class
=
$this
->
queryTypes
[
$type
]
[
'query'
]
;
$class
=
$this
->
queryTypes
[
$type
];
$query
=
new
$class
(
$options
);
$this
->
callPlugins
(
'postCreateQuery'
,
array
(
$type
,
$options
,
$query
));
...
...
library/Solarium/Core/Query/Query.php
View file @
2eec03ac
...
...
@@ -73,6 +73,21 @@ abstract class Query extends Configurable
*/
abstract
public
function
getType
();
/**
* Get the requestbuilder class for this query
*
* @return object
*/
abstract
public
function
getRequestBuilder
();
/**
* Get the response parser class for this query
*
* @return object
*/
abstract
public
function
getResponseParser
();
/**
* Set handler option
*
...
...
library/Solarium/Core/Query/Result/QueryType.php
View file @
2eec03ac
...
...
@@ -68,14 +68,12 @@ class QueryType extends Result
protected
function
parseResponse
()
{
if
(
!
$this
->
parsed
)
{
$queryType
=
$this
->
query
->
getType
();
$
queryTypes
=
$this
->
client
->
getQueryTypes
();
if
(
!
isset
(
$queryTypes
[
$queryType
])
)
{
throw
new
Exception
(
'No responseparser re
gistered for querytype: '
.
$queryType
);
$
responseParser
=
$this
->
query
->
getResponseParser
();
if
(
!
$responseParser
)
{
throw
new
Exception
(
'No responseparser re
turned by querytype: '
.
$this
->
query
->
getType
()
);
}
$responseParserClass
=
$queryTypes
[
$queryType
][
'responseparser'
];
$responseParser
=
new
$responseParserClass
;
$this
->
mapData
(
$responseParser
->
parse
(
$this
));
$this
->
parsed
=
true
;
...
...
library/Solarium/Query/Analysis/Query/Document.php
View file @
2eec03ac
...
...
@@ -41,7 +41,8 @@
*/
namespace
Solarium\Query\Analysis\Query
;
use
Solarium\Core\Client\Client
;
use
Solarium\Query\Analysis\ResponseParser\Document
as
ResponseParser
;
use
Solarium\Query\Analysis\RequestBuilder\Document
as
RequestBuilder
;
/**
* Analysis document query
...
...
@@ -79,6 +80,26 @@ class Document extends Query
return
Client
::
QUERY_ANALYSIS_DOCUMENT
;
}
/**
* Get a requestbuilder for this query
*
* @return RequestBuilder
*/
public
function
getRequestBuilder
()
{
return
new
RequestBuilder
;
}
/**
* Get a response parser for this query
*
* @return ResponseParser
*/
public
function
getResponseParser
()
{
return
new
ResponseParser
;
}
/**
* Add a single document
*
...
...
library/Solarium/Query/Analysis/Query/Field.php
View file @
2eec03ac
...
...
@@ -41,6 +41,8 @@
*/
namespace
Solarium\Query\Analysis\Query
;
use
Solarium\Core\Client\Client
;
use
Solarium\Query\Analysis\ResponseParser\Field
as
ResponseParser
;
use
Solarium\Query\Analysis\RequestBuilder\Field
as
RequestBuilder
;
/**
* Analysis document query
...
...
@@ -71,6 +73,26 @@ class Field extends Query
return
Client
::
QUERY_ANALYSIS_FIELD
;
}
/**
* Get a requestbuilder for this query
*
* @return RequestBuilder
*/
public
function
getRequestBuilder
()
{
return
new
RequestBuilder
;
}
/**
* Get a response parser for this query
*
* @return ResponseParser
*/
public
function
getResponseParser
()
{
return
new
ResponseParser
;
}
/**
* Set the field value option
*
...
...
library/Solarium/Query/MoreLikeThis/Query.php
View file @
2eec03ac
...
...
@@ -45,6 +45,8 @@
namespace
Solarium\Query\MoreLikeThis
;
use
Solarium\Query\Select\Query\Query
as
SelectQuery
;
use
Solarium\Core\Client\Client
;
use
Solarium\Query\MoreLikeThis\ResponseParser
as
ResponseParser
;
use
Solarium\Query\MoreLikeThis\RequestBuilder
as
RequestBuilder
;
/**
* MoreLikeThis Query
...
...
@@ -69,6 +71,26 @@ class Query extends SelectQuery
return
Client
::
QUERY_MORELIKETHIS
;
}
/**
* Get a requestbuilder for this query
*
* @return RequestBuilder
*/
public
function
getRequestBuilder
()
{
return
new
RequestBuilder
;
}
/**
* Get a response parser for this query
*
* @return ResponseParser
*/
public
function
getResponseParser
()
{
return
new
ResponseParser
;
}
/**
* Default options
*
...
...
library/Solarium/Query/Ping/Query.php
View file @
2eec03ac
...
...
@@ -42,6 +42,7 @@
namespace
Solarium\Query\Ping
;
use
Solarium\Core\Query\Query
as
BaseQuery
;
use
Solarium\Core\Client\Client
;
use
Solarium\Query\Ping\RequestBuilder
as
RequestBuilder
;
/**
* Ping query
...
...
@@ -66,6 +67,26 @@ class Query extends BaseQuery
return
Client
::
QUERY_PING
;
}
/**
* Get a requestbuilder for this query
*
* @return RequestBuilder
*/
public
function
getRequestBuilder
()
{
return
new
RequestBuilder
;
}
/**
* The ping query has no response parser so we return a null value
*
* @return null;
*/
public
function
getResponseParser
()
{
return
null
;
}
/**
* Default options
*
...
...
library/Solarium/Query/Select/Query/Query.php
View file @
2eec03ac
...
...
@@ -43,6 +43,8 @@ namespace Solarium\Query\Select\Query;
use
Solarium\Core\Exception
;
use
Solarium\Core\Client\Client
;
use
Solarium\Core\Query\Query
as
BaseQuery
;
use
Solarium\Query\Select\RequestBuilder\RequestBuilder
;
use
Solarium\Query\Select\ResponseParser\ResponseParser
;
/**
* Select Query
...
...
@@ -132,6 +134,26 @@ class Query extends BaseQuery
return
Client
::
QUERY_SELECT
;
}
/**
* Get a requestbuilder for this query
*
* @return RequestBuilder
*/
public
function
getRequestBuilder
()
{
return
new
RequestBuilder
;
}
/**
* Get a response parser for this query
*
* @return ResponseParser
*/
public
function
getResponseParser
()
{
return
new
ResponseParser
;
}
/**
* Default options
*
...
...
library/Solarium/Query/Suggester/Query.php
View file @
2eec03ac
...
...
@@ -42,6 +42,8 @@
namespace
Solarium\Query\Suggester
;
use
Solarium\Core\Query\Query
as
BaseQuery
;
use
Solarium\Core\Client\Client
;
use
Solarium\Query\Suggester\RequestBuilder
;
use
Solarium\Query\Suggester\ResponseParser
;
/**
* Suggester Query
...
...
@@ -64,6 +66,26 @@ class Query extends BaseQuery
return
Client
::
QUERY_SUGGESTER
;
}
/**
* Get a requestbuilder for this query
*
* @return RequestBuilder
*/
public
function
getRequestBuilder
()
{
return
new
RequestBuilder
;
}
/**
* Get a response parser for this query
*
* @return ResponseParser
*/
public
function
getResponseParser
()
{
return
new
ResponseParser
;
}
/**
* Default options
*
...
...
library/Solarium/Query/Terms/Query.php
View file @
2eec03ac
...
...
@@ -42,6 +42,8 @@
namespace
Solarium\Query\Terms
;
use
Solarium\Core\Client\Client
;
use
Solarium\Core\Query\Query
as
BaseQuery
;
use
Solarium\Query\Terms\RequestBuilder
;
use
Solarium\Query\Terms\ResponseParser
;
/**
* Terms query
...
...
@@ -67,6 +69,26 @@ class Query extends BaseQuery
return
Client
::
QUERY_TERMS
;
}
/**
* Get a requestbuilder for this query
*
* @return RequestBuilder
*/
public
function
getRequestBuilder
()
{
return
new
RequestBuilder
;
}
/**
* Get a response parser for this query
*
* @return ResponseParser
*/
public
function
getResponseParser
()
{
return
new
ResponseParser
;
}
/**
* Default options
*
...
...
library/Solarium/Query/Update/Query/Query.php
View file @
2eec03ac
...
...
@@ -43,6 +43,8 @@ namespace Solarium\Query\Update\Query;
use
Solarium\Core\Exception
;
use
Solarium\Core\Client\Client
;
use
Solarium\Core\Query\Query
as
BaseQuery
;
use
Solarium\Query\Update\RequestBuilder
;
use
Solarium\Query\Update\ResponseParser
;
/**
* Update query
...
...
@@ -126,6 +128,26 @@ class Query extends BaseQuery
return
Client
::
QUERY_UPDATE
;
}
/**
* Get a requestbuilder for this query
*
* @return RequestBuilder
*/
public
function
getRequestBuilder
()
{
return
new
RequestBuilder
;
}
/**
* Get a response parser for this query
*
* @return ResponseParser
*/
public
function
getResponseParser
()
{
return
new
ResponseParser
;
}
/**
* Initialize options
*
...
...
tests/Solarium/Tests/Core/Client/ClientTest.php
View file @
2eec03ac
...
...
@@ -67,11 +67,7 @@ class ClientTest extends \PHPUnit_Framework_TestCase
'port'
=>
8080
,
),
'querytype'
=>
array
(
'myquerytype'
=>
array
(
'query'
=>
'MyQuery'
,
'requestbuilder'
=>
'MyRequestBuilder'
,
'responseparser'
=>
'MyResponseParser'
)
'myquerytype'
=>
'MyQuery'
,
),
'plugin'
=>
array
(
'myplugin'
=>
array
(
...
...
@@ -116,8 +112,6 @@ class ClientTest extends \PHPUnit_Framework_TestCase
array
(
'type'
=>
'myquerytype'
,
'query'
=>
'MyQuery'
,
'requestbuilder'
=>
'MyRequestBuilder'
,
'responseparser'
=>
'MyResponseParser'
,
)
),
'plugin'
=>
array
(
...
...
@@ -141,11 +135,7 @@ class ClientTest extends \PHPUnit_Framework_TestCase
$queryTypes
=
$this
->
client
->
getQueryTypes
();
$this
->
assertEquals
(
array
(
'requestbuilder'
=>
'MyRequestBuilder'
,
'responseparser'
=>
'MyResponseParser'
,
'query'
=>
'MyQuery'
,
),
'MyQuery'
,
$queryTypes
[
'myquerytype'
]
);
...
...
@@ -179,13 +169,9 @@ class ClientTest extends \PHPUnit_Framework_TestCase
{
$queryTypes
=
$this
->
client
->
getQueryTypes
();
$this
->
client
->
registerQueryType
(
'myquerytype'
,
'myquery'
,
'mybuilder'
,
'myparser'
);
$this
->
client
->
registerQueryType
(
'myquerytype'
,
'myquery'
);
$queryTypes
[
'myquerytype'
]
=
array
(
'query'
=>
'myquery'
,
'requestbuilder'
=>
'mybuilder'
,
'responseparser'
=>
'myparser'
,
);
$queryTypes
[
'myquerytype'
]
=
'myquery'
;
$this
->
assertEquals
(
$queryTypes
,
...
...
@@ -287,15 +273,22 @@ class ClientTest extends \PHPUnit_Framework_TestCase
public
function
testCreateRequest
()
{
$queryStub
=
$this
->
getMock
(
'Solarium\Query\Select\Query\Query'
);
$queryStub
->
expects
(
$this
->
any
())
->
method
(
'getType'
)
->
will
(
$this
->
returnValue
(
'testquerytype'
));
$observer
=
$this
->
getMock
(
'Solarium\Core\Client\RequestBuilder'
,
array
(
'build'
));
$observer
->
expects
(
$this
->
once
())
->
method
(
'build'
)
->
with
(
$this
->
equalTo
(
$queryStub
));
$queryStub
->
expects
(
$this
->
any
())
->
method
(
'getType'
)
->
will
(
$this
->
returnValue
(
'testquerytype'
));
$queryStub
->
expects
(
$this
->
any
())
->
method
(
'getType'
)
->
will
(
$this
->
returnValue
(
'testquerytype'
));
$queryStub
->
expects
(
$this
->
any
())
->
method
(
'getRequestBuilder'
)
->
will
(
$this
->
returnValue
(
$observer
));
$this
->
client
->
registerQueryType
(
'testquerytype'
,
'Solarium\Query\Select\Query\Query'
,
$observer
,
''
);
$this
->
client
->
createRequest
(
$queryStub
);
}
...
...
tests/Solarium/Tests/Core/Query/QueryTest.php
View file @
2eec03ac
...
...
@@ -82,4 +82,14 @@ class TestQuery extends Query
{
return
'testType'
;
}
public
function
getRequestBuilder
()
{
return
null
;
}
public
function
getResponseParser
()
{
return
null
;
}
}
\ No newline at end of file
tests/Solarium/Tests/Core/Query/Result/QueryTypeTest.php
View file @
2eec03ac
...
...
@@ -94,6 +94,11 @@ class QueryDummyTest extends SelectQuery
{
return
'dummy'
;
}
public
function
getResponseParser
()
{
return
null
;
}
}
class
QueryTypeDummy
extends
QueryTypeResult
...
...
tests/Solarium/Tests/Query/Analysis/Query/QueryTest.php
View file @
2eec03ac
...
...
@@ -69,7 +69,17 @@ class TestAnalysisQuery extends Query{
public
function
getType
()
{
return
null
;
}
public
function
getRequestBuilder
()
{
return
null
;
}
public
function
getResponseParser
()
{
return
null
;
}
}
\ No newline at end of file
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