ajson, Automatic Update (#5738)

This commit is contained in:
github-actions[bot] 2022-09-05 09:20:46 +02:00 committed by GitHub
parent 366a30a0e0
commit fbd0b7cc9d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 175 additions and 57 deletions

View File

@ -365,37 +365,8 @@
"shlp": "^Z", "shlp": "^Z",
"xslt": "^Z" "xslt": "^Z"
}, },
"obsolete_statement": { "obsolete_statement": true,
"refresh": true, "parser_error": true,
"compute": true,
"add": true,
"clientSpecified": true,
"occurences": true,
"selectWithoutInto": true,
"ranges": true,
"callTransformation": true,
"regex": true,
"sortByFS": true,
"subtract": true,
"formDefinition": true,
"formImplementation": true,
"freeMemory": true,
"exitFromSQL": true,
"multiply": true,
"communication": true,
"typePools": true,
"load": true,
"move": true,
"divide": true,
"fieldSymbolStructure": true,
"requested": true,
"pack": true,
"setExtended": true,
"withHeaderLine": true,
"occurs": true,
"parameter": true
},
"parser_error": {},
"preferred_compare_operator": { "preferred_compare_operator": {
"badOperators": [ "badOperators": [
"EQ", "EQ",

View File

@ -25,12 +25,12 @@
] ]
}, },
"devDependencies": { "devDependencies": {
"@abaplint/cli": "^2.92.0", "@abaplint/cli": "^2.93.9",
"@abaplint/database-sqlite": "^2.1.40", "@abaplint/database-sqlite": "^2.1.45",
"@abaplint/runtime": "^2.1.40", "@abaplint/runtime": "^2.1.49",
"@abaplint/transpiler-cli": "^2.1.40", "@abaplint/transpiler-cli": "^2.1.49",
"abapmerge": "^0.14.7", "abapmerge": "^0.14.7",
"c8": "^7.12.0", "c8": "^7.12.0",
"eslint": "^8.22.0" "eslint": "^8.23.0"
} }
} }

View File

@ -77,6 +77,7 @@ CLASS zcl_abapgit_ajson DEFINITION
DATA mi_custom_mapping TYPE REF TO zif_abapgit_ajson_mapping. DATA mi_custom_mapping TYPE REF TO zif_abapgit_ajson_mapping.
DATA mv_keep_item_order TYPE abap_bool. DATA mv_keep_item_order TYPE abap_bool.
DATA mv_format_datetime TYPE abap_bool. DATA mv_format_datetime TYPE abap_bool.
" TODO restructure into zif_ajson=>ty_opts
METHODS get_item METHODS get_item
IMPORTING IMPORTING
@ -106,6 +107,11 @@ ENDCLASS.
CLASS zcl_abapgit_ajson IMPLEMENTATION. CLASS zcl_abapgit_ajson IMPLEMENTATION.
METHOD zif_abapgit_ajson~opts.
rs_opts-read_only = mv_read_only.
rs_opts-format_datetime = mv_format_datetime.
rs_opts-keep_item_order = mv_keep_item_order.
ENDMETHOD.
METHOD constructor. METHOD constructor.
format_datetime( abap_true ). format_datetime( abap_true ).

View File

@ -1034,11 +1034,7 @@ CLASS lcl_json_to_abap IMPLEMENTATION.
zcx_abapgit_ajson_error=>raise( 'Unexpected error calculating timestamp' ). zcx_abapgit_ajson_error=>raise( 'Unexpected error calculating timestamp' ).
ENDTRY. ENDTRY.
cl_abap_tstmp=>move( rv_result = lv_timestamp.
EXPORTING
tstmp_src = lv_timestamp
IMPORTING
tstmp_tgt = rv_result ).
ENDMETHOD. ENDMETHOD.
@ -1335,20 +1331,13 @@ CLASS lcl_abap_to_json IMPLEMENTATION.
DATA lv_date TYPE d. DATA lv_date TYPE d.
DATA lv_time TYPE t. DATA lv_time TYPE t.
IF iv_ts IS INITIAL.
" The zero value is January 1, year 1, 00:00:00.000000000 UTC.
lv_date = '00010101'.
ELSE.
CONVERT TIME STAMP iv_ts TIME ZONE lc_utc CONVERT TIME STAMP iv_ts TIME ZONE lc_utc
INTO DATE lv_date TIME lv_time. INTO DATE lv_date TIME lv_time.
ENDIF.
rv_str = rv_str =
lv_date+0(4) && '-' && lv_date+4(2) && '-' && lv_date+6(2) && lv_date+0(4) && '-' && lv_date+4(2) && '-' && lv_date+6(2) &&
'T' && 'T' &&
lv_time+0(2) && '-' && lv_time+2(2) && '-' && lv_time+4(2) && lv_time+0(2) && ':' && lv_time+2(2) && ':' && lv_time+4(2) &&
'Z'. 'Z'.
ENDMETHOD. ENDMETHOD.

View File

@ -1343,6 +1343,9 @@ CLASS ltcl_json_to_abap DEFINITION
METHODS to_abap_struc METHODS to_abap_struc
FOR TESTING FOR TESTING
RAISING zcx_abapgit_ajson_error. RAISING zcx_abapgit_ajson_error.
METHODS to_abap_timestamp_initial
FOR TESTING
RAISING zcx_abapgit_ajson_error.
METHODS to_abap_value METHODS to_abap_value
FOR TESTING FOR TESTING
RAISING zcx_abapgit_ajson_error. RAISING zcx_abapgit_ajson_error.
@ -1423,6 +1426,28 @@ CLASS ltcl_json_to_abap IMPLEMENTATION.
ENDMETHOD. ENDMETHOD.
METHOD to_abap_timestamp_initial.
DATA lo_cut TYPE REF TO lcl_json_to_abap.
DATA lv_mock TYPE timestamp.
DATA lo_nodes TYPE REF TO lcl_nodes_helper.
CREATE OBJECT lo_nodes.
lo_nodes->add( ' | |str |0000-00-00T00:00:00Z| ' ).
CREATE OBJECT lo_cut.
lo_cut->to_abap(
EXPORTING
it_nodes = lo_nodes->sorted( )
CHANGING
c_container = lv_mock ).
cl_abap_unit_assert=>assert_equals(
act = lv_mock
exp = 0 ).
ENDMETHOD.
METHOD to_abap_value. METHOD to_abap_value.
DATA lo_cut TYPE REF TO lcl_json_to_abap. DATA lo_cut TYPE REF TO lcl_json_to_abap.
@ -2201,7 +2226,7 @@ CLASS ltcl_writer_test IMPLEMENTATION.
lo_nodes->add( '/ |d_empty |str | ||0' ). lo_nodes->add( '/ |d_empty |str | ||0' ).
lo_nodes->add( '/ |t |str |20:01:03 ||0' ). lo_nodes->add( '/ |t |str |20:01:03 ||0' ).
lo_nodes->add( '/ |t_empty |str | ||0' ). lo_nodes->add( '/ |t_empty |str | ||0' ).
lo_nodes->add( '/ |ts |str |2022-04-01T20-01-03Z ||0' ). lo_nodes->add( '/ |ts |str |2022-04-01T20:01:03Z ||0' ).
lo_nodes->add( '/ |p |num |123.45 ||0' ). lo_nodes->add( '/ |p |num |123.45 ||0' ).
li_writer->set( li_writer->set(
@ -2752,7 +2777,7 @@ CLASS ltcl_writer_test IMPLEMENTATION.
li_writer = lo_cut. li_writer = lo_cut.
CREATE OBJECT lo_nodes_exp. CREATE OBJECT lo_nodes_exp.
lo_nodes_exp->add( ' | |object | ||1' ). lo_nodes_exp->add( ' | |object | ||1' ).
lo_nodes_exp->add( '/ |a |str |2021-05-05T12-00-00Z ||0' ). lo_nodes_exp->add( '/ |a |str |2021-05-05T12:00:00Z ||0' ).
lv_timestamp = '20210505120000'. lv_timestamp = '20210505120000'.
li_writer->set_timestamp( li_writer->set_timestamp(
@ -3393,6 +3418,8 @@ CLASS ltcl_abap_to_json DEFINITION
METHODS set_value_true FOR TESTING RAISING zcx_abapgit_ajson_error. METHODS set_value_true FOR TESTING RAISING zcx_abapgit_ajson_error.
METHODS set_value_false FOR TESTING RAISING zcx_abapgit_ajson_error. METHODS set_value_false FOR TESTING RAISING zcx_abapgit_ajson_error.
METHODS set_value_xsdboolean FOR TESTING RAISING zcx_abapgit_ajson_error. METHODS set_value_xsdboolean FOR TESTING RAISING zcx_abapgit_ajson_error.
METHODS set_value_timestamp FOR TESTING RAISING zcx_abapgit_ajson_error.
METHODS set_value_timestamp_initial FOR TESTING RAISING zcx_abapgit_ajson_error.
METHODS set_null FOR TESTING RAISING zcx_abapgit_ajson_error. METHODS set_null FOR TESTING RAISING zcx_abapgit_ajson_error.
METHODS set_obj FOR TESTING RAISING zcx_abapgit_ajson_error. METHODS set_obj FOR TESTING RAISING zcx_abapgit_ajson_error.
METHODS set_array FOR TESTING RAISING zcx_abapgit_ajson_error. METHODS set_array FOR TESTING RAISING zcx_abapgit_ajson_error.
@ -3531,6 +3558,43 @@ CLASS ltcl_abap_to_json IMPLEMENTATION.
ENDMETHOD. ENDMETHOD.
METHOD set_value_timestamp.
DATA lo_nodes_exp TYPE REF TO lcl_nodes_helper.
DATA lt_nodes TYPE zif_abapgit_ajson=>ty_nodes_tt.
DATA lv_timestamp TYPE timestamp.
CREATE OBJECT lo_nodes_exp.
lo_nodes_exp->add( ' | |str |2022-08-31T00:00:00Z||' ).
CONVERT DATE '20220831' TIME '000000'
INTO TIME STAMP lv_timestamp TIME ZONE ''.
lt_nodes = lcl_abap_to_json=>convert( lcl_abap_to_json=>format_timestamp( lv_timestamp ) ).
cl_abap_unit_assert=>assert_equals(
act = lt_nodes
exp = lo_nodes_exp->mt_nodes ).
ENDMETHOD.
METHOD set_value_timestamp_initial.
DATA lo_nodes_exp TYPE REF TO lcl_nodes_helper.
DATA lt_nodes TYPE zif_abapgit_ajson=>ty_nodes_tt.
DATA lv_timestamp TYPE timestamp.
CREATE OBJECT lo_nodes_exp.
lo_nodes_exp->add( ' | |str |0000-00-00T00:00:00Z||' ).
lv_timestamp = 0.
lt_nodes = lcl_abap_to_json=>convert( lcl_abap_to_json=>format_timestamp( lv_timestamp ) ).
cl_abap_unit_assert=>assert_equals(
act = lt_nodes
exp = lo_nodes_exp->mt_nodes ).
ENDMETHOD.
METHOD prefix. METHOD prefix.
DATA lo_nodes_exp TYPE REF TO lcl_nodes_helper. DATA lo_nodes_exp TYPE REF TO lcl_nodes_helper.

View File

@ -14,6 +14,7 @@ CLASS zcl_abapgit_ajson_filter_lib DEFINITION
IMPORTING IMPORTING
!it_skip_paths TYPE string_table OPTIONAL !it_skip_paths TYPE string_table OPTIONAL
!iv_skip_paths TYPE string OPTIONAL !iv_skip_paths TYPE string OPTIONAL
!iv_pattern_search TYPE abap_bool DEFAULT abap_false
RETURNING RETURNING
VALUE(ri_filter) TYPE REF TO zif_abapgit_ajson_filter VALUE(ri_filter) TYPE REF TO zif_abapgit_ajson_filter
RAISING RAISING
@ -50,6 +51,7 @@ CLASS zcl_abapgit_ajson_filter_lib IMPLEMENTATION.
METHOD create_path_filter. METHOD create_path_filter.
CREATE OBJECT ri_filter TYPE lcl_paths_filter CREATE OBJECT ri_filter TYPE lcl_paths_filter
EXPORTING EXPORTING
iv_pattern_search = iv_pattern_search
it_skip_paths = it_skip_paths it_skip_paths = it_skip_paths
iv_skip_paths = iv_skip_paths. iv_skip_paths = iv_skip_paths.
ENDMETHOD. ENDMETHOD.

View File

@ -29,21 +29,35 @@ CLASS lcl_paths_filter DEFINITION FINAL.
IMPORTING IMPORTING
it_skip_paths TYPE string_table OPTIONAL it_skip_paths TYPE string_table OPTIONAL
iv_skip_paths TYPE string OPTIONAL iv_skip_paths TYPE string OPTIONAL
iv_pattern_search TYPE abap_bool
RAISING RAISING
zcx_abapgit_ajson_error. zcx_abapgit_ajson_error.
PRIVATE SECTION. PRIVATE SECTION.
DATA mt_skip_paths TYPE HASHED TABLE OF string WITH UNIQUE KEY table_line. DATA mt_skip_paths TYPE HASHED TABLE OF string WITH UNIQUE KEY table_line.
DATA mv_pattern_search TYPE abap_bool.
ENDCLASS. ENDCLASS.
CLASS lcl_paths_filter IMPLEMENTATION. CLASS lcl_paths_filter IMPLEMENTATION.
METHOD zif_abapgit_ajson_filter~keep_node. METHOD zif_abapgit_ajson_filter~keep_node.
DATA lv_path TYPE string. DATA lv_full_path TYPE string.
FIELD-SYMBOLS <p> LIKE LINE OF mt_skip_paths.
lv_path = is_node-path && is_node-name. lv_full_path = is_node-path && is_node-name.
READ TABLE mt_skip_paths WITH KEY table_line = lv_path TRANSPORTING NO FIELDS.
IF mv_pattern_search = abap_true.
rv_keep = abap_true.
LOOP AT mt_skip_paths ASSIGNING <p>.
IF lv_full_path CP <p>.
rv_keep = abap_false.
EXIT.
ENDIF.
ENDLOOP.
ELSE.
READ TABLE mt_skip_paths WITH KEY table_line = lv_full_path TRANSPORTING NO FIELDS.
rv_keep = boolc( sy-subrc <> 0 ). rv_keep = boolc( sy-subrc <> 0 ).
ENDIF.
ENDMETHOD. ENDMETHOD.
@ -77,6 +91,7 @@ CLASS lcl_paths_filter IMPLEMENTATION.
DELETE ADJACENT DUPLICATES FROM lt_tab. DELETE ADJACENT DUPLICATES FROM lt_tab.
mt_skip_paths = lt_tab. mt_skip_paths = lt_tab.
mv_pattern_search = iv_pattern_search.
ENDMETHOD. ENDMETHOD.

View File

@ -6,6 +6,8 @@ CLASS ltcl_filters_test DEFINITION FINAL
METHODS empty_filter_simple FOR TESTING RAISING zcx_abapgit_ajson_error. METHODS empty_filter_simple FOR TESTING RAISING zcx_abapgit_ajson_error.
METHODS empty_filter_deep FOR TESTING RAISING zcx_abapgit_ajson_error. METHODS empty_filter_deep FOR TESTING RAISING zcx_abapgit_ajson_error.
METHODS path_filter FOR TESTING RAISING zcx_abapgit_ajson_error. METHODS path_filter FOR TESTING RAISING zcx_abapgit_ajson_error.
METHODS path_filter_string FOR TESTING RAISING zcx_abapgit_ajson_error.
METHODS path_filter_w_patterns FOR TESTING RAISING zcx_abapgit_ajson_error.
METHODS path_filter_deep FOR TESTING RAISING zcx_abapgit_ajson_error. METHODS path_filter_deep FOR TESTING RAISING zcx_abapgit_ajson_error.
METHODS and_filter FOR TESTING RAISING zcx_abapgit_ajson_error. METHODS and_filter FOR TESTING RAISING zcx_abapgit_ajson_error.
ENDCLASS. ENDCLASS.
@ -100,6 +102,66 @@ CLASS ltcl_filters_test IMPLEMENTATION.
ENDMETHOD. ENDMETHOD.
METHOD path_filter_string.
DATA li_json TYPE REF TO zif_abapgit_ajson.
DATA li_json_filtered TYPE REF TO zif_abapgit_ajson.
li_json = zcl_abapgit_ajson=>create_empty( ).
li_json->set(
iv_path = '/a'
iv_val = '1' ).
li_json->set(
iv_path = '/b/c'
iv_val = '2' ).
li_json->set(
iv_path = '/c/d'
iv_val = '3' ).
li_json_filtered = zcl_abapgit_ajson=>create_from(
ii_source_json = li_json
ii_filter = zcl_abapgit_ajson_filter_lib=>create_path_filter( iv_skip_paths = '/b/c,/c/d' ) ).
cl_abap_unit_assert=>assert_equals(
act = li_json_filtered->stringify( )
exp = '{"a":"1","b":{},"c":{}}' ).
ENDMETHOD.
METHOD path_filter_w_patterns.
DATA li_json TYPE REF TO zif_abapgit_ajson.
DATA li_json_filtered TYPE REF TO zif_abapgit_ajson.
li_json = zcl_abapgit_ajson=>create_empty( ).
li_json->set(
iv_path = '/@meta'
iv_val = 'meta' ).
li_json->set(
iv_path = '/a'
iv_val = '1' ).
li_json->set(
iv_path = '/b/c'
iv_val = '2' ).
li_json->set(
iv_path = '/c/d'
iv_val = '3' ).
li_json->set(
iv_path = '/c/@meta2'
iv_val = 'meta2' ).
li_json_filtered = zcl_abapgit_ajson=>create_from(
ii_source_json = li_json
ii_filter = zcl_abapgit_ajson_filter_lib=>create_path_filter(
iv_skip_paths = '/*/c,*/@*'
iv_pattern_search = abap_true ) ).
cl_abap_unit_assert=>assert_equals(
act = li_json_filtered->stringify( )
exp = '{"a":"1","b":{},"c":{"d":"3"}}' ).
ENDMETHOD.
METHOD path_filter_deep. METHOD path_filter_deep.
DATA li_json TYPE REF TO zif_abapgit_ajson. DATA li_json TYPE REF TO zif_abapgit_ajson.

View File

@ -37,6 +37,12 @@ INTERFACE zif_abapgit_ajson
path TYPE string, path TYPE string,
name TYPE string, name TYPE string,
END OF ty_path_name. END OF ty_path_name.
TYPES:
BEGIN OF ty_opts,
read_only TYPE abap_bool,
keep_item_order TYPE abap_bool,
format_datetime TYPE abap_bool,
END OF ty_opts.
" DATA " DATA
@ -53,6 +59,9 @@ INTERFACE zif_abapgit_ajson
iv_use_iso TYPE abap_bool DEFAULT abap_true iv_use_iso TYPE abap_bool DEFAULT abap_true
RETURNING RETURNING
VALUE(ri_json) TYPE REF TO zif_abapgit_ajson. VALUE(ri_json) TYPE REF TO zif_abapgit_ajson.
METHODS opts
RETURNING
VALUE(rs_opts) TYPE ty_opts.
" METHODS ex.reader " METHODS ex.reader