ajson, Automatic Update (#5993)

Co-authored-by: larshp <larshp@users.noreply.github.com>
Co-authored-by: Marc Bernard <59966492+mbtools@users.noreply.github.com>
Co-authored-by: Lars Hvam <larshp@hotmail.com>
This commit is contained in:
github-actions[bot] 2023-01-16 16:50:46 +01:00 committed by GitHub
parent a046fe09dd
commit 589eeb4389
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 57 additions and 62 deletions

View File

@ -26,12 +26,12 @@
]
},
"devDependencies": {
"@abaplint/cli": "^2.94.13",
"@abaplint/database-sqlite": "^2.3.93",
"@abaplint/runtime": "^2.3.94",
"@abaplint/transpiler-cli": "^2.3.94",
"@abaplint/cli": "^2.94.23",
"@abaplint/database-sqlite": "^2.3.105",
"@abaplint/runtime": "^2.3.109",
"@abaplint/transpiler-cli": "^2.3.110",
"abapmerge": "^0.14.8",
"c8": "^7.12.0",
"eslint": "^8.31.0"
"eslint": "^8.32.0"
}
}

View File

@ -874,7 +874,7 @@ CLASS zcl_abapgit_ajson IMPLEMENTATION.
IF ls_split_path IS INITIAL. " Assign root, exceptional processing
ls_new_node-path = ls_split_path-path.
ls_new_node-name = ls_split_path-name.
ls_new_node-type = 'array'.
ls_new_node-type = zif_abapgit_ajson=>node_type-array.
INSERT ls_new_node INTO TABLE mt_json_tree.
RETURN.
ENDIF.

View File

@ -164,12 +164,7 @@ CLASS lcl_json_parser DEFINITION FINAL.
ty_stack_tt TYPE STANDARD TABLE OF REF TO zif_abapgit_ajson=>ty_node.
DATA mt_stack TYPE ty_stack_tt.
CLASS-METHODS join_path
IMPORTING
it_stack TYPE ty_stack_tt
RETURNING
VALUE(rv_path) TYPE string.
DATA mv_stack_path TYPE string.
METHODS raise
IMPORTING
@ -264,6 +259,7 @@ CLASS lcl_json_parser IMPLEMENTATION.
FIELD-SYMBOLS <item> LIKE LINE OF rt_json_tree.
CLEAR mt_stack.
CLEAR mv_stack_path.
IF iv_json IS INITIAL.
RETURN.
ENDIF.
@ -287,14 +283,15 @@ CLASS lcl_json_parser IMPLEMENTATION.
APPEND INITIAL LINE TO rt_json_tree ASSIGNING <item>.
<item>-type = to_lower( lo_open->qname-name ).
<item>-type = lo_open->qname-name.
READ TABLE mt_stack INDEX 1 INTO lr_stack_top.
IF sy-subrc = 0.
<item>-path = join_path( mt_stack ).
" Using string is faster than rebuilding path from stack
<item>-path = mv_stack_path.
lr_stack_top->children = lr_stack_top->children + 1.
IF lr_stack_top->type = 'array'.
IF lr_stack_top->type = `array`. " This is parser type not ajson type
<item>-name = |{ lr_stack_top->children }|.
<item>-index = lr_stack_top->children.
ELSE.
@ -312,6 +309,8 @@ CLASS lcl_json_parser IMPLEMENTATION.
GET REFERENCE OF <item> INTO lr_stack_top.
INSERT lr_stack_top INTO mt_stack INDEX 1.
" add path component
mv_stack_path = mv_stack_path && <item>-name && '/'.
WHEN if_sxml_node=>co_nt_element_close.
DATA lo_close TYPE REF TO if_sxml_close_element.
@ -323,6 +322,9 @@ CLASS lcl_json_parser IMPLEMENTATION.
raise( 'Unexpected closing node type' ).
ENDIF.
" remove last path component
mv_stack_path = substring( val = mv_stack_path
len = find( val = mv_stack_path sub = '/' occ = -2 ) + 1 ).
WHEN if_sxml_node=>co_nt_value.
DATA lo_value TYPE REF TO if_sxml_value_node.
lo_value ?= lo_node.
@ -340,21 +342,11 @@ CLASS lcl_json_parser IMPLEMENTATION.
ENDMETHOD.
METHOD join_path.
FIELD-SYMBOLS <ref> LIKE LINE OF it_stack.
LOOP AT it_stack ASSIGNING <ref>.
rv_path = <ref>->name && '/' && rv_path.
ENDLOOP.
ENDMETHOD.
METHOD raise.
zcx_abapgit_ajson_error=>raise(
iv_location = join_path( mt_stack )
iv_msg = |JSON PARSER: { iv_error } @ { join_path( mt_stack ) }| ).
iv_location = mv_stack_path
iv_msg = |JSON PARSER: { iv_error } @ { mv_stack_path }| ).
ENDMETHOD.
@ -1083,7 +1075,7 @@ CLASS lcl_abap_to_json DEFINITION FINAL.
CLASS-METHODS insert_with_type
IMPORTING
iv_data TYPE any
iv_type TYPE string
iv_type TYPE zif_abapgit_ajson=>ty_node_type
is_prefix TYPE zif_abapgit_ajson=>ty_path_name OPTIONAL
iv_array_index TYPE i DEFAULT 0
ii_custom_mapping TYPE REF TO zif_abapgit_ajson_mapping OPTIONAL
@ -1192,7 +1184,7 @@ CLASS lcl_abap_to_json DEFINITION FINAL.
METHODS insert_value_with_type
IMPORTING
iv_data TYPE any
iv_type TYPE string
iv_type TYPE zif_abapgit_ajson=>ty_node_type
io_type TYPE REF TO cl_abap_typedescr
is_prefix TYPE zif_abapgit_ajson=>ty_path_name
iv_index TYPE i DEFAULT 0

View File

@ -1003,31 +1003,31 @@ CLASS ltcl_reader_test IMPLEMENTATION.
cl_abap_unit_assert=>assert_equals(
act = li_cut->get_node_type( '/' )
exp = 'object' ).
exp = zif_abapgit_ajson=>node_type-object ).
cl_abap_unit_assert=>assert_equals(
act = li_cut->get_node_type( '/string' )
exp = 'str' ).
exp = zif_abapgit_ajson=>node_type-string ).
cl_abap_unit_assert=>assert_equals(
act = li_cut->get_node_type( '/number' )
exp = 'num' ).
exp = zif_abapgit_ajson=>node_type-number ).
cl_abap_unit_assert=>assert_equals(
act = li_cut->get_node_type( '/float' )
exp = 'num' ).
exp = zif_abapgit_ajson=>node_type-number ).
cl_abap_unit_assert=>assert_equals(
act = li_cut->get_node_type( '/boolean' )
exp = 'bool' ).
exp = zif_abapgit_ajson=>node_type-boolean ).
cl_abap_unit_assert=>assert_equals(
act = li_cut->get_node_type( '/false' )
exp = 'bool' ).
exp = zif_abapgit_ajson=>node_type-boolean ).
cl_abap_unit_assert=>assert_equals(
act = li_cut->get_node_type( '/null' )
exp = 'null' ).
exp = zif_abapgit_ajson=>node_type-null ).
cl_abap_unit_assert=>assert_equals(
act = li_cut->get_node_type( '/date' )
exp = 'str' ).
exp = zif_abapgit_ajson=>node_type-string ).
cl_abap_unit_assert=>assert_equals(
act = li_cut->get_node_type( '/issues' )
exp = 'array' ).
exp = zif_abapgit_ajson=>node_type-array ).
ENDMETHOD.
@ -2987,12 +2987,12 @@ CLASS ltcl_writer_test IMPLEMENTATION.
LOOP AT io_json_in->mt_json_tree ASSIGNING <node> WHERE path = iv_path.
lv_path = <node>-path && <node>-name && '/'.
CASE <node>-type.
WHEN 'array'.
WHEN zif_abapgit_ajson=>node_type-array.
io_json_out->touch_array( lv_path ).
set_with_type_slice( io_json_in = io_json_in
io_json_out = io_json_out
iv_path = lv_path ).
WHEN 'object'.
WHEN zif_abapgit_ajson=>node_type-object.
set_with_type_slice( io_json_in = io_json_in
io_json_out = io_json_out
iv_path = lv_path ).

View File

@ -102,7 +102,7 @@ CLASS zcl_abapgit_ajson_utilities IMPLEMENTATION.
IF iv_keep_empty_arrays = abap_false.
LOOP AT io_json->mt_json_tree INTO ls_json_tree
WHERE type = 'array' AND children = 0.
WHERE type = zif_abapgit_ajson=>node_type-array AND children = 0.
io_json->delete( ls_json_tree-path && ls_json_tree-name ).
@ -113,7 +113,7 @@ CLASS zcl_abapgit_ajson_utilities IMPLEMENTATION.
ENDIF.
LOOP AT io_json->mt_json_tree INTO ls_json_tree
WHERE type = 'object' AND children = 0.
WHERE type = zif_abapgit_ajson=>node_type-object AND children = 0.
io_json->delete( ls_json_tree-path && ls_json_tree-name ).
@ -184,12 +184,12 @@ CLASS zcl_abapgit_ajson_utilities IMPLEMENTATION.
IF <node_a>-type = <node_b>-type.
CASE <node_a>-type.
WHEN 'array'.
WHEN zif_abapgit_ajson=>node_type-array.
mo_insert->touch_array( lv_path_a ).
mo_change->touch_array( lv_path_a ).
mo_delete->touch_array( lv_path_a ).
diff_a_b( lv_path_a ).
WHEN 'object'.
WHEN zif_abapgit_ajson=>node_type-object.
diff_a_b( lv_path_a ).
WHEN OTHERS.
IF <node_a>-value <> <node_b>-value.
@ -203,10 +203,10 @@ CLASS zcl_abapgit_ajson_utilities IMPLEMENTATION.
ELSE.
" save changed type as delete + insert
CASE <node_a>-type.
WHEN 'array'.
WHEN zif_abapgit_ajson=>node_type-array.
mo_delete->touch_array( lv_path_a ).
diff_a_b( lv_path_a ).
WHEN 'object'.
WHEN zif_abapgit_ajson=>node_type-object.
diff_a_b( lv_path_a ).
WHEN OTHERS.
mo_delete->set(
@ -215,10 +215,10 @@ CLASS zcl_abapgit_ajson_utilities IMPLEMENTATION.
iv_node_type = <node_a>-type ).
ENDCASE.
CASE <node_b>-type.
WHEN 'array'.
WHEN zif_abapgit_ajson=>node_type-array.
mo_insert->touch_array( lv_path_b ).
diff_b_a( lv_path_b ).
WHEN 'object'.
WHEN zif_abapgit_ajson=>node_type-object.
diff_b_a( lv_path_b ).
WHEN OTHERS.
mo_insert->set(
@ -230,10 +230,10 @@ CLASS zcl_abapgit_ajson_utilities IMPLEMENTATION.
ELSE.
" save as delete
CASE <node_a>-type.
WHEN 'array'.
WHEN zif_abapgit_ajson=>node_type-array.
mo_delete->touch_array( lv_path_a ).
diff_a_b( lv_path_a ).
WHEN 'object'.
WHEN zif_abapgit_ajson=>node_type-object.
diff_a_b( lv_path_a ).
WHEN OTHERS.
mo_delete->set(
@ -257,12 +257,12 @@ CLASS zcl_abapgit_ajson_utilities IMPLEMENTATION.
lv_path = <node_b>-path && <node_b>-name && '/'.
CASE <node_b>-type.
WHEN 'array'.
WHEN zif_abapgit_ajson=>node_type-array.
mo_insert->touch_array( lv_path ).
diff_b_a(
iv_path = lv_path
iv_array = abap_true ).
WHEN 'object'.
WHEN zif_abapgit_ajson=>node_type-object.
diff_b_a( lv_path ).
WHEN OTHERS.
IF iv_array = abap_false.

View File

@ -1,25 +1,28 @@
INTERFACE zif_abapgit_ajson
PUBLIC.
CONSTANTS version TYPE string VALUE 'v1.1.6'. "#EC NOTEXT
CONSTANTS version TYPE string VALUE 'v1.1.7'. "#EC NOTEXT
CONSTANTS origin TYPE string VALUE 'https://github.com/sbcgua/ajson'. "#EC NOTEXT
CONSTANTS license TYPE string VALUE 'MIT'. "#EC NOTEXT
TYPES:
ty_node_type TYPE string.
CONSTANTS:
BEGIN OF node_type,
boolean TYPE string VALUE 'bool',
string TYPE string VALUE 'str',
number TYPE string VALUE 'num',
null TYPE string VALUE 'null',
array TYPE string VALUE 'array',
object TYPE string VALUE 'object',
boolean TYPE ty_node_type VALUE 'bool',
string TYPE ty_node_type VALUE 'str',
number TYPE ty_node_type VALUE 'num',
null TYPE ty_node_type VALUE 'null',
array TYPE ty_node_type VALUE 'array',
object TYPE ty_node_type VALUE 'object',
END OF node_type.
TYPES:
BEGIN OF ty_node,
path TYPE string,
name TYPE string,
type TYPE string,
type TYPE ty_node_type,
value TYPE string,
index TYPE i,
order TYPE i,
@ -112,7 +115,7 @@ INTERFACE zif_abapgit_ajson
IMPORTING
iv_path TYPE string
RETURNING
VALUE(rv_node_type) TYPE string.
VALUE(rv_node_type) TYPE ty_node_type.
METHODS get_boolean
IMPORTING
@ -181,7 +184,7 @@ INTERFACE zif_abapgit_ajson
iv_path TYPE string
iv_val TYPE any
iv_ignore_empty TYPE abap_bool DEFAULT abap_true
iv_node_type TYPE string OPTIONAL
iv_node_type TYPE ty_node_type OPTIONAL
RETURNING
VALUE(ri_json) TYPE REF TO zif_abapgit_ajson
RAISING