Browse Source

Add editorconfig and refactoring Client class

pull/33/head
Compolomus 6 years ago
parent
commit
012da677da
  1. 226
      .editorconfig
  2. 146
      src/Client.php

226
.editorconfig

@ -0,0 +1,226 @@
root = true
[*]
charset = utf-8
end_of_line = lf
indent_size = 4
indent_style = space
insert_final_newline = false
max_line_length = 140
tab_width = 4
ij_continuation_indent_size = 8
ij_formatter_off_tag = @formatter:off
ij_formatter_on_tag = @formatter:on
ij_formatter_tags_enabled = false
ij_smart_tabs = false
ij_wrap_on_typing = false
[{*.module,*.hphp,*.phtml,*.php5,*.php4,*.php,*.ctp,*.inc}]
max_line_length = 999
ij_continuation_indent_size = 4
ij_php_align_assignments = true
ij_php_align_class_constants = true
ij_php_align_group_field_declarations = true
ij_php_align_inline_comments = true
ij_php_align_key_value_pairs = true
ij_php_align_multiline_array_initializer_expression = true
ij_php_align_multiline_binary_operation = false
ij_php_align_multiline_chained_methods = false
ij_php_align_multiline_extends_list = false
ij_php_align_multiline_for = true
ij_php_align_multiline_parameters = false
ij_php_align_multiline_parameters_in_calls = false
ij_php_align_multiline_ternary_operation = false
ij_php_align_phpdoc_comments = true
ij_php_align_phpdoc_param_names = true
ij_php_anonymous_brace_style = end_of_line
ij_php_api_weight = 28
ij_php_array_initializer_new_line_after_left_brace = true
ij_php_array_initializer_right_brace_on_new_line = true
ij_php_array_initializer_wrap = off
ij_php_assignment_wrap = off
ij_php_author_weight = 28
ij_php_binary_operation_sign_on_next_line = false
ij_php_binary_operation_wrap = off
ij_php_blank_lines_after_class_header = 0
ij_php_blank_lines_after_function = 1
ij_php_blank_lines_after_imports = 1
ij_php_blank_lines_after_opening_tag = 0
ij_php_blank_lines_after_package = 1
ij_php_blank_lines_around_class = 1
ij_php_blank_lines_around_constants = 0
ij_php_blank_lines_around_field = 0
ij_php_blank_lines_around_method = 1
ij_php_blank_lines_before_class_end = 0
ij_php_blank_lines_before_imports = 1
ij_php_blank_lines_before_method_body = 0
ij_php_blank_lines_before_package = 1
ij_php_blank_lines_before_return_statement = 0
ij_php_blank_lines_between_imports = 0
ij_php_block_brace_style = end_of_line
ij_php_call_parameters_new_line_after_left_paren = false
ij_php_call_parameters_right_paren_on_new_line = false
ij_php_call_parameters_wrap = normal
ij_php_catch_on_new_line = false
ij_php_category_weight = 28
ij_php_class_brace_style = next_line
ij_php_comma_after_last_array_element = false
ij_php_concat_spaces = true
ij_php_copyright_weight = 28
ij_php_deprecated_weight = 28
ij_php_do_while_brace_force = always
ij_php_else_if_style = combine
ij_php_else_on_new_line = false
ij_php_example_weight = 28
ij_php_extends_keyword_wrap = off
ij_php_extends_list_wrap = off
ij_php_fields_default_visibility = private
ij_php_filesource_weight = 28
ij_php_finally_on_new_line = false
ij_php_for_brace_force = always
ij_php_for_statement_new_line_after_left_paren = false
ij_php_for_statement_right_paren_on_new_line = false
ij_php_for_statement_wrap = off
ij_php_force_short_declaration_array_style = true
ij_php_global_weight = 28
ij_php_group_use_wrap = on_every_item
ij_php_if_brace_force = always
ij_php_if_lparen_on_next_line = false
ij_php_if_rparen_on_next_line = false
ij_php_ignore_weight = 28
ij_php_import_sorting = alphabetic
ij_php_indent_break_from_case = true
ij_php_indent_case_from_switch = true
ij_php_indent_code_in_php_tags = false
ij_php_internal_weight = 28
ij_php_keep_blank_lines_after_lbrace = 2
ij_php_keep_blank_lines_before_right_brace = 2
ij_php_keep_blank_lines_in_code = 2
ij_php_keep_blank_lines_in_declarations = 2
ij_php_keep_control_statement_in_one_line = true
ij_php_keep_first_column_comment = true
ij_php_keep_indents_on_empty_lines = false
ij_php_keep_line_breaks = true
ij_php_keep_rparen_and_lbrace_on_one_line = true
ij_php_keep_simple_methods_in_one_line = false
ij_php_lambda_brace_style = end_of_line
ij_php_license_weight = 28
ij_php_line_comment_add_space = false
ij_php_line_comment_at_first_column = true
ij_php_link_weight = 28
ij_php_lower_case_boolean_const = true
ij_php_lower_case_null_const = true
ij_php_method_brace_style = next_line
ij_php_method_call_chain_wrap = off
ij_php_method_parameters_new_line_after_left_paren = true
ij_php_method_parameters_right_paren_on_new_line = true
ij_php_method_parameters_wrap = on_every_item
ij_php_method_weight = 28
ij_php_modifier_list_wrap = false
ij_php_multiline_chained_calls_semicolon_on_new_line = false
ij_php_namespace_brace_style = 1
ij_php_null_type_position = in_the_end
ij_php_package_weight = 28
ij_php_param_weight = 0
ij_php_parentheses_expression_new_line_after_left_paren = false
ij_php_parentheses_expression_right_paren_on_new_line = false
ij_php_phpdoc_blank_line_before_tags = true
ij_php_phpdoc_blank_lines_around_parameters = true
ij_php_phpdoc_keep_blank_lines = true
ij_php_phpdoc_param_spaces_between_name_and_description = 1
ij_php_phpdoc_param_spaces_between_tag_and_type = 1
ij_php_phpdoc_param_spaces_between_type_and_name = 1
ij_php_phpdoc_use_fqcn = true
ij_php_phpdoc_wrap_long_lines = false
ij_php_place_assignment_sign_on_next_line = false
ij_php_place_parens_for_constructor = 0
ij_php_property_read_weight = 28
ij_php_property_weight = 28
ij_php_property_write_weight = 28
ij_php_return_type_on_new_line = false
ij_php_return_weight = 1
ij_php_see_weight = 28
ij_php_since_weight = 28
ij_php_sort_phpdoc_elements = true
ij_php_space_after_colon = true
ij_php_space_after_colon_in_return_type = true
ij_php_space_after_comma = true
ij_php_space_after_for_semicolon = true
ij_php_space_after_quest = true
ij_php_space_after_type_cast = true
ij_php_space_after_unary_not = false
ij_php_space_before_array_initializer_left_brace = false
ij_php_space_before_catch_keyword = true
ij_php_space_before_catch_left_brace = true
ij_php_space_before_catch_parentheses = true
ij_php_space_before_class_left_brace = true
ij_php_space_before_closure_left_parenthesis = true
ij_php_space_before_colon = true
ij_php_space_before_colon_in_return_type = false
ij_php_space_before_comma = false
ij_php_space_before_do_left_brace = true
ij_php_space_before_else_keyword = true
ij_php_space_before_else_left_brace = true
ij_php_space_before_finally_keyword = true
ij_php_space_before_finally_left_brace = true
ij_php_space_before_for_left_brace = true
ij_php_space_before_for_parentheses = true
ij_php_space_before_for_semicolon = false
ij_php_space_before_if_left_brace = true
ij_php_space_before_if_parentheses = true
ij_php_space_before_method_call_parentheses = false
ij_php_space_before_method_left_brace = true
ij_php_space_before_method_parentheses = false
ij_php_space_before_quest = true
ij_php_space_before_switch_left_brace = true
ij_php_space_before_switch_parentheses = true
ij_php_space_before_try_left_brace = true
ij_php_space_before_unary_not = false
ij_php_space_before_while_keyword = true
ij_php_space_before_while_left_brace = true
ij_php_space_before_while_parentheses = true
ij_php_space_between_ternary_quest_and_colon = false
ij_php_spaces_around_additive_operators = true
ij_php_spaces_around_arrow = false
ij_php_spaces_around_assignment_in_declare = false
ij_php_spaces_around_assignment_operators = true
ij_php_spaces_around_bitwise_operators = true
ij_php_spaces_around_equality_operators = true
ij_php_spaces_around_logical_operators = true
ij_php_spaces_around_multiplicative_operators = true
ij_php_spaces_around_null_coalesce_operator = true
ij_php_spaces_around_relational_operators = true
ij_php_spaces_around_shift_operators = true
ij_php_spaces_around_unary_operator = false
ij_php_spaces_around_var_within_brackets = false
ij_php_spaces_within_array_initializer_braces = false
ij_php_spaces_within_brackets = false
ij_php_spaces_within_catch_parentheses = false
ij_php_spaces_within_for_parentheses = false
ij_php_spaces_within_if_parentheses = false
ij_php_spaces_within_method_call_parentheses = false
ij_php_spaces_within_method_parentheses = false
ij_php_spaces_within_parentheses = false
ij_php_spaces_within_short_echo_tags = true
ij_php_spaces_within_switch_parentheses = false
ij_php_spaces_within_while_parentheses = false
ij_php_special_else_if_treatment = false
ij_php_subpackage_weight = 28
ij_php_ternary_operation_signs_on_next_line = false
ij_php_ternary_operation_wrap = off
ij_php_throws_weight = 2
ij_php_todo_weight = 28
ij_php_unknown_tag_weight = 28
ij_php_upper_case_boolean_const = false
ij_php_upper_case_null_const = false
ij_php_uses_weight = 28
ij_php_var_weight = 28
ij_php_variable_naming_style = mixed
ij_php_version_weight = 28
ij_php_while_brace_force = always
ij_php_while_on_new_line = false
[{phpunit.xml.dist,*.jhm,*.rng,*.wsdl,*.fxml,*.xslt,*.jrxml,*.ant,*.xul,*.xsl,*.xsd,*.tld,*.jnlp,*.xml}]
ij_xml_block_comment_at_first_column = true
ij_xml_keep_indents_on_empty_lines = false
ij_xml_line_comment_at_first_column = true

146
src/Client.php

@ -7,6 +7,17 @@ use RouterOS\Exceptions\ConfigException;
use RouterOS\Exceptions\QueryException;
use RouterOS\Helpers\ArrayHelper;
use function array_shift;
use function chr;
use function count;
use function is_array;
use function is_string;
use function md5;
use function pack;
use function preg_match_all;
use function sleep;
use function trim;
/**
* Class Client for RouterOS management
*
@ -20,14 +31,14 @@ class Client implements Interfaces\ClientInterface
/**
* Configuration of connection
*
* @var \RouterOS\Config
* @var Config
*/
private $_config;
/**
* API communication object
*
* @var \RouterOS\APIConnector
* @var APIConnector
*/
private $_connector;
@ -35,16 +46,16 @@ class Client implements Interfaces\ClientInterface
/**
* Client constructor.
*
* @param array|\RouterOS\Config $config
* @param array|Config $config
*
* @throws \RouterOS\Exceptions\ClientException
* @throws \RouterOS\Exceptions\ConfigException
* @throws \RouterOS\Exceptions\QueryException
* @throws ClientException
* @throws ConfigException
* @throws QueryException
*/
public function __construct($config)
{
// If array then need create object
if (\is_array($config)) {
if (is_array($config)) {
$config = new Config($config);
}
@ -68,7 +79,7 @@ class Client implements Interfaces\ClientInterface
* @param string $parameter Name of required parameter
*
* @return mixed
* @throws \RouterOS\Exceptions\ConfigException
* @throws ConfigException
*/
private function config(string $parameter)
{
@ -78,18 +89,18 @@ class Client implements Interfaces\ClientInterface
/**
* Send write query to RouterOS
*
* @param string|array|\RouterOS\Query $query
* @param string|array|Query $query
*
* @return \RouterOS\Client
* @throws \RouterOS\Exceptions\QueryException
* @return Client
* @throws QueryException
* @deprecated
* @codeCoverageIgnore
*/
public function write($query): Client
{
if (\is_string($query)) {
if (is_string($query)) {
$query = new Query($query);
} elseif (\is_array($query)) {
} elseif (is_array($query)) {
$endpoint = array_shift($query);
$query = new Query($endpoint, $query);
}
@ -110,9 +121,9 @@ class Client implements Interfaces\ClientInterface
* @param string|null $operations Some operations which need make on response
* @param string|null $tag Mark query with tag
*
* @return \RouterOS\Client
* @throws \RouterOS\Exceptions\QueryException
* @throws \RouterOS\Exceptions\ClientException
* @return Client
* @throws QueryException
* @throws ClientException
* @since 1.0.0
*/
public function query($endpoint, array $where = null, string $operations = null, string $tag = null): Client
@ -128,73 +139,68 @@ class Client implements Interfaces\ClientInterface
// If array is multidimensional, then parse each line
if (is_array($where[0])) {
foreach ($where as $item) {
$query = $this->preQuery($item, $query);
}
} else {
$query = $this->preQuery($where, $query);
}
// Null by default
$key = null;
$operator = null;
$value = null;
}
switch (\count($item)) {
case 1:
list($key) = $item;
break;
case 2:
list($key, $operator) = $item;
break;
case 3:
list($key, $operator, $value) = $item;
break;
default:
throw new ClientException('From 1 to 3 parameters of "where" condition is allowed');
// Append operations if set
if (!empty($operations)) {
$query->operations($operations);
}
$query->where($key, $operator, $value);
// Append tag if set
if (!empty($tag)) {
$query->tag($tag);
}
} else {
// Submit query to RouterOS
return $this->writeRAW($query);
}
/**
* Query helper
*
* @param array $item
* @param Query $query
* @return Query
* @throws ClientException
* @throws QueryException
*/
private function preQuery(array $item, Query $query): Query
{
// Null by default
$key = null;
$operator = null;
$value = null;
switch (\count($where)) {
switch (count($item)) {
case 1:
list($key) = $where;
[$key] = $item;
break;
case 2:
list($key, $operator) = $where;
[$key, $operator] = $item;
break;
case 3:
list($key, $operator, $value) = $where;
[$key, $operator, $value] = $item;
break;
default:
throw new ClientException('From 1 to 3 parameters of "where" condition is allowed');
}
$query->where($key, $operator, $value);
}
}
// Append operations if set
if (!empty($operations)) {
$query->operations($operations);
}
// Append tag if set
if (!empty($tag)) {
$query->tag($tag);
}
// Submit query to RouterOS
return $this->writeRAW($query);
return $query->where($key, $operator, $value);
}
/**
* Send write query object to RouterOS
*
* @param \RouterOS\Query $query
* @param Query $query
*
* @return \RouterOS\Client
* @throws \RouterOS\Exceptions\QueryException
* @return Client
* @throws QueryException
* @since 1.0.0
*/
private function writeRAW(Query $query): Client
@ -278,7 +284,7 @@ class Client implements Interfaces\ClientInterface
/**
* Read using Iterators to improve performance on large dataset
*
* @return \RouterOS\ResponseIterator
* @return ResponseIterator
* @since 1.0.0
*/
public function readAsIterator(): ResponseIterator
@ -302,7 +308,7 @@ class Client implements Interfaces\ClientInterface
private function rosario(array $raw): array
{
// This RAW should't be an error
$positions = array_keys($raw, '!re');
$positions = \array_keys($raw, '!re');
$count = count($raw);
$result = [];
@ -342,7 +348,7 @@ class Client implements Interfaces\ClientInterface
{
$result = [];
$i = -1;
$lines = \count($response);
$lines = count($response);
foreach ($response as $key => $value) {
switch ($value) {
case '!re':
@ -381,7 +387,7 @@ class Client implements Interfaces\ClientInterface
* @param string $value
* @param array $matches
*/
private function pregResponse(string $value, &$matches)
private function pregResponse(string $value, &$matches): void
{
preg_match_all('/^[=|\.](.*)=(.*)/', $value, $matches);
}
@ -392,9 +398,9 @@ class Client implements Interfaces\ClientInterface
* @param bool $legacyRetry Retry login if we detect legacy version of RouterOS
*
* @return bool
* @throws \RouterOS\Exceptions\ClientException
* @throws \RouterOS\Exceptions\ConfigException
* @throws \RouterOS\Exceptions\QueryException
* @throws ClientException
* @throws ConfigException
* @throws QueryException
*/
private function login(bool $legacyRetry = false): bool
{
@ -406,7 +412,7 @@ class Client implements Interfaces\ClientInterface
// Now need use this hash for authorization
$query = new Query('/login', [
'=name=' . $this->config('user'),
'=response=00' . md5(\chr(0) . $this->config('pass') . pack('H*', $response['after']['ret']))
'=response=00' . md5(chr(0) . $this->config('pass') . pack('H*', $response['after']['ret']))
]);
} else {
// Just login with our credentials
@ -452,16 +458,16 @@ class Client implements Interfaces\ClientInterface
*/
private function isLegacy(array &$response): bool
{
return \count($response) > 1 && $response[0] === '!done' && !$this->config('legacy');
return count($response) > 1 && $response[0] === '!done' && !$this->config('legacy');
}
/**
* Connect to socket server
*
* @return bool
* @throws \RouterOS\Exceptions\ClientException
* @throws \RouterOS\Exceptions\ConfigException
* @throws \RouterOS\Exceptions\QueryException
* @throws ClientException
* @throws ConfigException
* @throws QueryException
*/
private function connect(): bool
{

Loading…
Cancel
Save