Skip to content

Commit 202ae06

Browse files
committed
Updated Eiffel to JSON mapping.
Updated SHEET class, make all the attributes detachable.
1 parent b5ccf89 commit 202ae06

File tree

9 files changed

+168
-62
lines changed

9 files changed

+168
-62
lines changed

sheets/src/json/eg_sheets_json.e

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ feature -- Get
5353
note
5454
EIS:"name=get.spreedsheets", "src=https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/get", "protocol=uri"
5555
do
56-
if attached eg_sheets_api.create_spreedsheet as s then
56+
if attached eg_sheets_api.get_from_id (a_spreadsheet_id, a_params) as s then
5757
if attached parsed_json (s) as j then
5858
Result := eg_spreadsheet (Void, j)
5959
else

sheets/src/objects/eg_developer_metadata.e

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,4 +98,13 @@ feature -- Element Change
9898
visibility_set: visibility = a_visibility
9999
end
100100

101+
102+
feature -- Eiffel to JSON
103+
104+
to_json: JSON_OBJECT
105+
do
106+
create Result.make_empty
107+
-- TODO
108+
end
109+
101110
end

sheets/src/objects/eg_named_range.e

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,4 +71,13 @@ feature -- Change Element
7171
ensure
7272
range_set: range = a_range
7373
end
74+
75+
feature -- Eiffel to JSON
76+
77+
to_json: JSON_OBJECT
78+
do
79+
create Result.make_empty
80+
-- TODO
81+
end
82+
7483
end

sheets/src/objects/eg_sheet.e

Lines changed: 8 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -72,26 +72,9 @@ note
7272
class
7373
EG_SHEET
7474

75-
inherit
76-
77-
ANY
78-
redefine
79-
default_create
80-
end
81-
82-
create
83-
default_create
84-
85-
feature {NONE} -- Access
86-
87-
default_create
88-
do
89-
create properties
90-
end
91-
9275
feature -- Access
9376

94-
properties: EG_SHEET_PROPERTIES
77+
properties: detachable EG_SHEET_PROPERTIES
9578
-- The properties of the sheet.
9679

9780
data: detachable LIST [EG_GRID_DATA]
@@ -391,4 +374,11 @@ feature -- Element Change
391374
slicers_set: slicers = a_slicers
392375
end
393376

377+
378+
feature -- Eiffel to JSON
379+
380+
to_json: JSON_OBJECT
381+
do
382+
create Result.make_empty
383+
end
394384
end

sheets/src/objects/eg_spreadsheet.e

Lines changed: 73 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -32,48 +32,24 @@ note
3232
class
3333
EG_SPREADSHEET
3434

35-
inherit
36-
ANY
37-
redefine
38-
default_create
39-
end
40-
41-
create
42-
default_create
43-
44-
feature -- {NONE}
45-
46-
default_create
47-
do
48-
create id.make_empty
49-
create url.make_empty
50-
create properties
51-
create {ARRAYED_LIST [EG_SHEET]} sheets.make (0)
52-
create {ARRAYED_LIST [EG_NAMED_RANGE]} named_ranges.make (0)
53-
create {ARRAYED_LIST [EG_DEVELOPER_METADATA]} developer_metadata.make (0)
54-
ensure then
55-
id_set: id.is_empty
56-
url_set: url.is_empty
57-
end
58-
5935
feature -- Access
6036

61-
id: IMMUTABLE_STRING_8
37+
id: detachable IMMUTABLE_STRING_8
6238
-- The ID of the spreadsheet. This field is read-only.
6339

64-
properties: EG_SPREADSHEET_PROPERTIES
40+
properties: detachable EG_SPREADSHEET_PROPERTIES
6541
-- Overall properties of a spreadsheet.
6642

67-
sheets: LIST [EG_SHEET]
43+
sheets: detachable LIST [EG_SHEET]
6844
-- The sheets that are part of a spreadsheet.
6945

70-
named_ranges: LIST [EG_NAMED_RANGE]
46+
named_ranges: detachable LIST [EG_NAMED_RANGE]
7147
-- The named ranges defined in a spreadsheet.
7248

73-
url: IMMUTABLE_STRING_8
49+
url: detachable IMMUTABLE_STRING_8
7450
-- The url of the spreadsheet. This field is read-only.
7551

76-
developer_metadata: LIST [EG_DEVELOPER_METADATA]
52+
developer_metadata: detachable LIST [EG_DEVELOPER_METADATA]
7753
-- The developer metadata associated with a spreadsheet.
7854

7955

@@ -97,11 +73,21 @@ feature -- Change Element
9773

9874
force_sheet (a_sheet: EG_SHEET)
9975
-- Add a sheet `a_sheet` to the list of sheets.
76+
local
77+
l_sheets: like sheets
10078
do
101-
sheets.force (a_sheet)
79+
l_sheets := sheets
80+
if l_sheets /= Void then
81+
l_sheets.force (a_sheet)
82+
else
83+
create {ARRAYED_LIST [EG_SHEET]} l_sheets.make (2)
84+
l_sheets.force (a_sheet)
85+
end
86+
sheets := l_sheets
10287
end
10388

10489
set_sheets (a_sheets: like sheets)
90+
-- Set the list of `sheets` with `a_sheets`.
10591
do
10692
sheets := a_sheets
10793
ensure
@@ -110,11 +96,21 @@ feature -- Change Element
11096

11197
force_name_range (a_range: EG_NAMED_RANGE)
11298
-- Add a range `a_range` to the list of ranges.
99+
local
100+
l_named_ranges: like named_ranges
113101
do
114-
named_ranges.force (a_range)
102+
l_named_ranges := named_ranges
103+
if l_named_ranges /= Void then
104+
l_named_ranges.force (a_range)
105+
else
106+
create {ARRAYED_LIST [EG_NAMED_RANGE]} l_named_ranges.make (2)
107+
l_named_ranges.force (a_range)
108+
end
109+
named_ranges := l_named_ranges
115110
end
116111

117112
set_named_ranges (a_named_ranges: like named_ranges)
113+
-- Set the list `named_ranges` with `a_named_ranges`.
118114
do
119115
named_ranges := a_named_ranges
120116
ensure
@@ -123,11 +119,21 @@ feature -- Change Element
123119

124120
force_developer_metadata (a_metadata: EG_DEVELOPER_METADATA)
125121
-- Set developer metadata `a_metadata` to metadata.
122+
local
123+
l_developer_metadata: like developer_metadata
126124
do
127-
developer_metadata.force (a_metadata)
125+
l_developer_metadata := developer_metadata
126+
if l_developer_metadata /= Void then
127+
l_developer_metadata.force (a_metadata)
128+
else
129+
create {ARRAYED_LIST [EG_DEVELOPER_METADATA]} l_developer_metadata.make (2)
130+
l_developer_metadata.force (a_metadata)
131+
end
132+
developer_metadata := l_developer_metadata
128133
end
129134

130135
set_developer_metadata (a_metadata: like developer_metadata)
136+
-- Set the list `developer_metadata` with `a_metadata`.
131137
do
132138
developer_metadata := a_metadata
133139
ensure
@@ -145,7 +151,7 @@ feature {EG_SHEETS_JSON} -- Factory
145151
create id.make_from_string (a_id)
146152
ensure
147153
is_id_set: is_id_set
148-
id_set: id.is_case_insensitive_equal (a_id)
154+
id_set: attached id as l_id and then l_id.is_case_insensitive_equal (a_id)
149155
end
150156

151157
set_url (a_url: STRING)
@@ -156,23 +162,48 @@ feature {EG_SHEETS_JSON} -- Factory
156162
is_url_set := True
157163
create url.make_from_string (a_url)
158164
ensure
159-
url_set: url.is_case_insensitive_equal (a_url)
165+
url_set: attached url as l_url and then l_url.is_case_insensitive_equal (a_url)
160166
is_url_set: is_url_set
161167
end
162168

163169
feature -- Eiffel to JSON
164170

165171
to_json: JSON_OBJECT
166172
-- Json representation of the Current object.
173+
local
174+
l_array: JSON_ARRAY
167175
do
168176
create Result.make_with_capacity (2)
169-
Result.put (create {JSON_STRING}.make_from_string (id), "spreadsheetId")
170-
Result.put (properties.to_json, "properties")
171-
-- properties JSON_OBJECT
172-
-- sheets JSON_ARRAY
173-
-- namedRanges : JSON_ARRAY
174-
Result.put (create {JSON_STRING}.make_from_string (url), "spreadsheetUrl")
175-
-- developerMetadata JSON_ARRAY
177+
if attached id as l_id then
178+
Result.put (create {JSON_STRING}.make_from_string (l_id), "spreadsheetId")
179+
end
180+
if attached properties as l_properties then
181+
Result.put (l_properties.to_json, "properties")
182+
end
183+
if attached sheets as l_sheets then
184+
create l_array.make (l_sheets.count)
185+
across l_sheets as ic loop
186+
l_array.add (ic.item.to_json)
187+
end
188+
Result.put (l_array, "sheets")
189+
end
190+
if attached named_ranges as l_named_ranges then
191+
create l_array.make (l_named_ranges.count)
192+
across l_named_ranges as ic loop
193+
l_array.add (ic.item.to_json)
194+
end
195+
Result.put (l_array, "namedRanges")
196+
end
197+
if attached url as l_url then
198+
Result.put (create {JSON_STRING}.make_from_string (l_url), "spreadsheetUrl")
199+
end
200+
if attached developer_metadata as l_developer_metadata then
201+
create l_array.make (l_developer_metadata.count)
202+
across l_developer_metadata as ic loop
203+
l_array.add (ic.item.to_json)
204+
end
205+
Result.put (l_array, "developerMetadata")
206+
end
176207
end
177208

178209

sheets/test/application_flow.e

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,10 @@ feature {NONE} -- Initialization
5656
end
5757
logger.write_debug ("get_token-> token got from file")
5858
file.close
59+
if token.token.is_empty then
60+
token := get_token_from_url
61+
logger.write_debug ("get_token-> token got from url")
62+
end
5963
else
6064
token := get_token_from_url
6165
logger.write_debug ("get_token-> token got from url")

sheets/test/test.ecf

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,4 +34,13 @@
3434
<library name="testing" location="$ISE_LIBRARY\library\testing\testing-safe.ecf"/>
3535
<cluster name="test" location=".\" recursive="true"/>
3636
</target>
37+
<target name="sheets_i" extends="tests">
38+
<root class="TEST_SHEETS_I" feature="make"/>
39+
<option debug="true">
40+
<debug name="test_create_sheet" enabled="true"/>
41+
</option>
42+
<setting name="total_order_on_reals" value="true"/>
43+
<library name="testing" location="$ISE_LIBRARY\library\testing\testing-safe.ecf"/>
44+
<cluster name="test" location=".\" recursive="true"/>
45+
</target>
3746
</system>

sheets/test/test_eg_spreadsheet_parameters.e

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,6 @@ feature -- Test routines
4848
assert ("fields", to_query (l_qry).is_case_insensitive_equal ("fields=sheets.data,properties.title,sheets.properties"))
4949
end
5050

51-
5251
test_get_spreadsheets_parameters_includegriddata_false
5352
-- New test routine
5453
local

sheets/test/test_sheets_i.e

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
note
2+
description: "Summary description for {TEST_SHEETS_I}."
3+
author: ""
4+
date: "$Date$"
5+
revision: "$Revision$"
6+
7+
class
8+
TEST_SHEETS_I
9+
10+
inherit
11+
12+
APPLICATION_FLOW
13+
14+
create
15+
make
16+
17+
feature -- {NONE}
18+
19+
make
20+
local
21+
l_param: EG_SPREADSHEET_PARAMETERS
22+
do
23+
logger.write_information ("make-> ======================> Starting application")
24+
set_from_json_credentials_file_path (create {PATH}.make_from_string (CREDENTIALS_PATH))
25+
retrieve_access_token
26+
-- Test default.
27+
logger.write_information ("Get spreadsheet from id without parameters")
28+
test_get_sheet ("1j5CTkpgOc6Y5qgYdA_klZYjNhmN2KYocoZAdM4Y61tw", Void)
29+
logger.write_information ("Get spreadsheet from id with parameters")
30+
create l_param.make (2)
31+
l_param.include_grid_data (True)
32+
test_get_sheet ("1j5CTkpgOc6Y5qgYdA_klZYjNhmN2KYocoZAdM4Y61tw", l_param)
33+
end
34+
35+
36+
feature -- Test
37+
38+
test_get_sheet (a_id: STRING_8; a_param: detachable EG_SPREADSHEET_PARAMETERS)
39+
local
40+
l_esapi: EG_SHEETS_I
41+
do
42+
create {EG_SHEETS_JSON} l_esapi.make(last_token.token)
43+
if attached {EG_SPREADSHEET} l_esapi.get_from_id (a_id, a_param) as l_spread_sheet then
44+
logger.write_debug (l_spread_sheet.to_json.representation)
45+
else
46+
logger.write_error ("Error " + l_esapi.last_status_code.out)
47+
end
48+
end
49+
50+
feature {NONE} -- Implementations
51+
52+
CREDENTIALS_PATH: STRING="credentials.json"
53+
-- Credentials path to json file.
54+
55+
end

0 commit comments

Comments
 (0)