On Fri, Feb 24, 2017 at 02:43:32AM +0100, Ancor Gonzalez Sosa wrote:
> On 02/23/2017 09:31 PM, Arvin Schnell wrote:
> > On Thu, Feb 23, 2017 at 05:45:48PM +0100, Ancor Gonzalez Sosa wrote:

> >   puts "Ptable type #{a_storage_msdos_ptable.type}" #=> Prints "Ptable type 
> > 1"
> > 
> >   puts "Ptable type #{a_storage_msdos_ptable.to_s}"
> 
> Ok, so let's use another example.
> 
> puts "Mount by #{blk_fs.mount_by}" #=> Prints "Mount by 2"
>
> This time, we already used Filesystem#to_s to display the filesystem
> type. So we cannot apply the same workaround to this other enum-typed
> field in the same class.
> 
> As I wrote in the PR description, for some cases we have workarounds and
> for others don't. Abusing the #to_s method of Filesystem or
> PartitionTable to get the readable version of its type is just a
> workaround for one of the many drawbacks explained for whole enums
> approach. It does not address the root issues.

For all enums there is a function to turn the value into a
string. If desired the get_classname function can also be made
public, although I don't see a use-case (internally it is only
used at a very few places).

> > or
> > 
> >   puts "extended" if [Storage::FsType_EXT2, Storage::FsType_EXT3, 
> > Storage::FsType_EXT4].include?(a_storage_filesystem)
> > 
> >   puts "extended" if Storage.ext?(a_storage_filesystem)
> > 
> > Ok, ext? is new (part of my hackweed project). So far ext2 and
> > ext3 were not implemented.
> > 
> >   ptable.type == Storage::PtType_GPT
> > 
> >   Storage.gpt?(ptable)
> 
> Once again, all those methods mixed altogether directly on the Storage
> namespace instead of being the responsibility of more focused classes
> look like a workaround to me. Not to mention the risk of name collision
> if all the values of all the possible enums need to have a corresponding
> method in the same place.

It doesn't look like a workaround for me - but we had the
discussion already a few years ago. And with strictly types enums
collisions are not a problem (and they are used in libstorage-ng).

> > Concerning the nil instead of exceptions:
> > 
> >   a_y2storage_unused_partition.filesystem #=> nil
> > 
> > What happens here (nilclass exception?)?
> > 
> >   a_y2storage_unused_partition.filesystem.mount_by?
> 
> If you call NilClass#mount_by? you will get an exception, of course. Not
> sure what's the point of the question, though.

Well, you know how many bug-reports we had with 'undefined method
X for nilclass'? To me that shows the downside of using nil.

> > I also thought about placing some classes in sub-namespaces but
> > mainly to resolve the upcoming name collision of DASD (the
> > "disk") and DASD (the partition table).
> 
> In addition to the class names, this serves as a nice example of my
> point above. If at some point we have DASD as a possible value for a
> PartitionType enum and as a possible value for a, let's say, Transport
> or DiskType enum. Will the Storage.dasd? method be reused for both?
> Quite tricky.

Again, with strictly types enums that is not a problem.

ciao Arvin

-- 
Arvin Schnell, <[email protected]>
Senior Software Engineer, Research & Development
SUSE Linux GmbH, GF: Felix Imendörffer, Jane Smithard, Graham Norton, HRB 21284 
(AG Nürnberg)
Maxfeldstraße 5
90409 Nürnberg
Germany
-- 
To unsubscribe, e-mail: [email protected]
To contact the owner, e-mail: [email protected]

Reply via email to