I am looking at some product upgrade code that is trying to find a resource file relative to a module definition and I thought this would be a good example of how not to do it.
The existing code is...
_for a_file _over sw_module_manager.module(_self.module_name).resource_files(:data, _true).fast_elements()
_loop
_if a_file.index_of_seq(xml_file_name) _isnt _unset
_then
fn << a_file
_leave
_endif
_endloop
... and can be replaced with ...
fn << smallworld_product.get_data_file(xml_file_name,office_upgrade_runner.module_name)
Not only is the latter easier to read than the former,
the former does not actually return the expected files.
[Note: I spoke too soon. The former code
does work but in my opinion is not as clean.
] Additionally, the former bit of code calls :resource_files() which is a restricted method. The latter code calls :get_data_file() which is classified as advanced and may legitimately be called from other methods.