ajson, Automatic Update (#4708)

* [create-pull-request] automated change

* Update ajson_mirror.yaml

Co-authored-by: larshp <larshp@users.noreply.github.com>
Co-authored-by: Lars Hvam <larshp@hotmail.com>
This commit is contained in:
github-actions[bot] 2021-04-18 11:36:07 +02:00 committed by GitHub
parent b23c0dc1b8
commit f264f33b7e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 166 additions and 14 deletions

View File

@ -29,3 +29,5 @@ jobs:
body: |
Automatic update from mirror
https://github.com/abapGit/ajson_mirror
Manually close and reopen the pull request to trigger CI

View File

@ -16,6 +16,7 @@ CLASS zcl_abapgit_ajson DEFINITION
get_integer FOR zif_abapgit_ajson_reader~get_integer,
get_number FOR zif_abapgit_ajson_reader~get_number,
get_date FOR zif_abapgit_ajson_reader~get_date,
get_timestamp FOR zif_abapgit_ajson_reader~get_timestamp,
get_string FOR zif_abapgit_ajson_reader~get_string,
slice FOR zif_abapgit_ajson_reader~slice,
to_abap FOR zif_abapgit_ajson_reader~to_abap,
@ -356,6 +357,28 @@ CLASS zcl_abapgit_ajson IMPLEMENTATION.
ENDMETHOD.
METHOD zif_abapgit_ajson_reader~get_timestamp.
DATA lo_to_abap TYPE REF TO lcl_json_to_abap.
DATA lr_item TYPE REF TO zif_abapgit_ajson=>ty_node.
lr_item = get_item( iv_path ).
IF lr_item IS INITIAL.
RETURN.
ENDIF.
CREATE OBJECT lo_to_abap.
TRY.
rv_value = lo_to_abap->to_timestamp( is_path = lr_item->* ).
CATCH zcx_abapgit_ajson_error.
RETURN.
ENDTRY.
ENDMETHOD.
METHOD zif_abapgit_ajson_reader~members.
DATA lv_normalized_path TYPE string.

View File

@ -516,6 +516,14 @@ CLASS lcl_json_to_abap DEFINITION FINAL.
RAISING
zcx_abapgit_ajson_error.
METHODS to_timestamp
IMPORTING
is_path TYPE zif_abapgit_ajson=>ty_node
RETURNING
VALUE(rv_result) TYPE timestamp
RAISING
zcx_abapgit_ajson_error.
PRIVATE SECTION.
DATA mr_obj TYPE REF TO data.
DATA mi_custom_mapping TYPE REF TO zif_abapgit_ajson_mapping.
@ -570,6 +578,8 @@ CLASS lcl_json_to_abap IMPLEMENTATION.
iv_location = <n>-path && <n>-name ).
ENDIF.
CONCATENATE lv_y lv_m lv_d INTO <value>.
ELSEIF lv_type = 'P' AND <n>-value IS NOT INITIAL.
<value> = to_timestamp( is_path = <n> ).
ELSE.
<value> = <n>-value.
ENDIF.
@ -686,6 +696,82 @@ CLASS lcl_json_to_abap IMPLEMENTATION.
ENDMETHOD.
METHOD to_timestamp.
CONSTANTS lc_tzone_utc TYPE tznzone VALUE `UTC`.
CONSTANTS lc_regex_ts_with_hour TYPE string
VALUE `^(\d{4})-(\d{2})-(\d{2})(T)(\d{2}):(\d{2}):(\d{2})(\+)(\d{2}):(\d{2})`.
CONSTANTS lc_regex_ts_utc TYPE string
VALUE `^(\d{4})-(\d{2})-(\d{2})(T)(\d{2}):(\d{2}):(\d{2})(Z|$)`.
DATA:
BEGIN OF ls_timestamp,
year TYPE c LENGTH 4,
month TYPE c LENGTH 2,
day TYPE c LENGTH 2,
t TYPE c LENGTH 1,
hour TYPE c LENGTH 2,
minute TYPE c LENGTH 2,
second TYPE c LENGTH 2,
local_sign TYPE c LENGTH 1,
local_hour TYPE c LENGTH 2,
local_minute TYPE c LENGTH 2,
END OF ls_timestamp.
DATA lv_date TYPE d.
DATA lv_time TYPE t.
DATA lv_seconds_conv TYPE i.
DATA lv_timestamp TYPE timestamp.
FIND FIRST OCCURRENCE OF REGEX lc_regex_ts_with_hour
IN is_path-value SUBMATCHES ls_timestamp-year ls_timestamp-month ls_timestamp-day ls_timestamp-t
ls_timestamp-hour ls_timestamp-minute ls_timestamp-second
ls_timestamp-local_sign ls_timestamp-local_hour ls_timestamp-local_minute.
IF sy-subrc = 0.
lv_seconds_conv = ( ls_timestamp-local_hour * 3600 ) + ( ls_timestamp-local_minute * 60 ).
ELSE.
FIND FIRST OCCURRENCE OF REGEX lc_regex_ts_utc
IN is_path-value SUBMATCHES ls_timestamp-year ls_timestamp-month ls_timestamp-day ls_timestamp-t
ls_timestamp-hour ls_timestamp-minute ls_timestamp-second.
IF sy-subrc <> 0.
zcx_abapgit_ajson_error=>raise(
iv_msg = 'Unexpected timestamp format'
iv_location = is_path-path && is_path-name ).
ENDIF.
ENDIF.
CONCATENATE ls_timestamp-year ls_timestamp-month ls_timestamp-day INTO lv_date.
CONCATENATE ls_timestamp-hour ls_timestamp-minute ls_timestamp-second INTO lv_time.
CONVERT DATE lv_date TIME lv_time INTO TIME STAMP lv_timestamp TIME ZONE lc_tzone_utc.
TRY.
CASE ls_timestamp-local_sign.
WHEN '-'.
lv_timestamp = cl_abap_tstmp=>add( tstmp = lv_timestamp
secs = lv_seconds_conv ).
WHEN '+'.
lv_timestamp = cl_abap_tstmp=>subtractsecs( tstmp = lv_timestamp
secs = lv_seconds_conv ).
ENDCASE.
CATCH cx_parameter_invalid_range cx_parameter_invalid_type.
zcx_abapgit_ajson_error=>raise(
iv_msg = 'Unexpected error calculating timestamp'
iv_location = is_path-path && is_path-name ).
ENDTRY.
rv_result = lv_timestamp.
ENDMETHOD.
ENDCLASS.
**********************************************************************

View File

@ -766,6 +766,7 @@ CLASS ltcl_reader_test DEFINITION FINAL
METHODS slice FOR TESTING RAISING zcx_abapgit_ajson_error.
METHODS array_to_string_table FOR TESTING RAISING zcx_abapgit_ajson_error.
METHODS get_date FOR TESTING RAISING zcx_abapgit_ajson_error.
METHODS get_timestamp FOR TESTING RAISING zcx_abapgit_ajson_error.
ENDCLASS.
@ -958,6 +959,25 @@ CLASS ltcl_reader_test IMPLEMENTATION.
ENDMETHOD.
METHOD get_timestamp.
DATA lo_cut TYPE REF TO zcl_abapgit_ajson.
DATA lo_nodes TYPE REF TO lcl_nodes_helper.
DATA lv_exp TYPE timestamp VALUE `20200728000000`.
CREATE OBJECT lo_cut.
CREATE OBJECT lo_nodes.
lo_nodes->add( ' | |object | | |1' ).
lo_nodes->add( '/ |timestamp|str |2020-07-28T00:00:00Z | |0' ).
lo_cut->mt_json_tree = lo_nodes->mt_nodes.
cl_abap_unit_assert=>assert_equals(
act = lo_cut->zif_abapgit_ajson_reader~get_timestamp( '/timestamp' )
exp = lv_exp ).
ENDMETHOD.
METHOD exists.
DATA lo_cut TYPE REF TO zif_abapgit_ajson_reader.
@ -1201,6 +1221,9 @@ CLASS ltcl_json_to_abap DEFINITION
oref TYPE REF TO object,
date1 TYPE d,
date2 TYPE d,
timestamp1 TYPE timestamp,
timestamp2 TYPE timestamp,
timestamp3 TYPE timestamp,
END OF ty_complex.
METHODS find_loc FOR TESTING RAISING zcx_abapgit_ajson_error.
@ -1420,6 +1443,7 @@ CLASS ltcl_json_to_abap IMPLEMENTATION.
DATA lo_cut TYPE REF TO lcl_json_to_abap.
DATA ls_mock TYPE ty_complex.
DATA lv_exp_date TYPE d VALUE '20200728'.
DATA lv_exp_timestamp TYPE timestamp VALUE '20200728000000'.
lcl_json_to_abap=>bind(
CHANGING
c_obj = ls_mock
@ -1427,20 +1451,23 @@ CLASS ltcl_json_to_abap IMPLEMENTATION.
DATA lo_nodes TYPE REF TO lcl_nodes_helper.
CREATE OBJECT lo_nodes.
lo_nodes->add( '/ | |object | | ' ).
lo_nodes->add( '/ |str |str |hello | ' ).
lo_nodes->add( '/ |int |num |5 | ' ).
lo_nodes->add( '/ |float |num |5.5 | ' ).
lo_nodes->add( '/ |bool |bool |true | ' ).
lo_nodes->add( '/ |obj |object | | ' ).
lo_nodes->add( '/obj |a |str |world | ' ).
lo_nodes->add( '/ |tab |array | | ' ).
lo_nodes->add( '/tab |1 |object | |1' ).
lo_nodes->add( '/tab/1 |a |str | One | ' ).
lo_nodes->add( '/tab |2 |object | |2' ).
lo_nodes->add( '/tab/2 |a |str | Two | ' ).
lo_nodes->add( '/ |date1 |str |2020-07-28 | ' ).
lo_nodes->add( '/ |date2 |str |2020-07-28T00:00:00Z | ' ).
lo_nodes->add( '/ | |object | | ' ).
lo_nodes->add( '/ |str |str |hello | ' ).
lo_nodes->add( '/ |int |num |5 | ' ).
lo_nodes->add( '/ |float |num |5.5 | ' ).
lo_nodes->add( '/ |bool |bool |true | ' ).
lo_nodes->add( '/ |obj |object | | ' ).
lo_nodes->add( '/obj |a |str |world | ' ).
lo_nodes->add( '/ |tab |array | | ' ).
lo_nodes->add( '/tab |1 |object | |1' ).
lo_nodes->add( '/tab/1 |a |str | One | ' ).
lo_nodes->add( '/tab |2 |object | |2' ).
lo_nodes->add( '/tab/2 |a |str | Two | ' ).
lo_nodes->add( '/ |date1 |str |2020-07-28 | ' ).
lo_nodes->add( '/ |date2 |str |2020-07-28T00:00:00Z | ' ).
lo_nodes->add( '/ |timestamp1 |str |2020-07-28T00:00:00 | ' ).
lo_nodes->add( '/ |timestamp2 |str |2020-07-28T00:00:00Z | ' ).
lo_nodes->add( '/ |timestamp3 |str |2020-07-28T01:00:00+01:00 | ' ).
lo_cut->to_abap( lo_nodes->sorted( ) ).
@ -1465,6 +1492,15 @@ CLASS ltcl_json_to_abap IMPLEMENTATION.
cl_abap_unit_assert=>assert_equals(
act = ls_mock-date2
exp = lv_exp_date ).
cl_abap_unit_assert=>assert_equals(
act = ls_mock-timestamp1
exp = lv_exp_timestamp ).
cl_abap_unit_assert=>assert_equals(
act = ls_mock-timestamp2
exp = lv_exp_timestamp ).
cl_abap_unit_assert=>assert_equals(
act = ls_mock-timestamp3
exp = lv_exp_timestamp ).
DATA ls_elem LIKE LINE OF ls_mock-tab.
cl_abap_unit_assert=>assert_equals(

View File

@ -41,6 +41,11 @@ INTERFACE zif_abapgit_ajson_reader
iv_path TYPE string
RETURNING
VALUE(rv_value) TYPE d.
METHODS get_timestamp
IMPORTING
iv_path TYPE string
RETURNING
VALUE(rv_value) TYPE timestamp.
METHODS get_string
IMPORTING
iv_path TYPE string