Re: [PATCH 0/3] ruby: get rid of FileNames object

Subject: Re: [PATCH 0/3] ruby: get rid of FileNames object

Date: Tue, 28 Mar 2023 00:47:43 -0600

To: David Bremner

Cc: notmuch@notmuchmail.org

From: Felipe Contreras


On Mon, Mar 27, 2023 at 6:13 PM David Bremner <david@tethera.net> wrote:
>
> Felipe Contreras <felipe.contreras@gmail.com> writes:
>
> > We don't need a FileNames enumerable object only for a small number of strings,
> > we can just get them directly.
> >
> > This iterator is meant to be transient and works only once, so we better just
> > iterate it once.
> >
> > This is the same approach I took with the Tags object, I was waiting for
> > feedback on that approach but since there isn't any and there's no reason this
> > shouldn't work, here's the same for Filenames.
>
> Hi Felipe;
>
> I still haven't had a chance to look at the proposed changes, but I did
> wonder what your plan was as far as migration. Usually with the library
> itself we try to provide fairly smooth upgrades.

There's no migration, there's no functional changes from clients' point of view.

Previously the code returned a Notmuch::Tags object, but this class
included the Enumerable [1] module, making it an Enumerable. So
everything you could do with an Enumerable you could do with
Notmuch::Tags, for example: tags.count().

But we didn't implement all these methods, we only had to implement
`each()`. If `each()` works, then everything else works.

For example this class implements an Enumerable:

  class Foo
    include Enumerable
    def each
      yield 'inbox'
      yield 'unread'
    end
  end

And then all these work:

  foo = Foo.new
  foo.each { |e| puts e }
  puts 'first: %s' % foo.first
  puts 'count: %s' % foo.count

We can replace the Foo object any other kind of Enumerable, and the
code works just the same:

  foo = %w[inbox unread]
  foo.each { |e| puts e }
  puts 'first: %s' % foo.first
  puts 'count: %s' % foo.count

So replacing Notmuch::Tags with an array of strings doesn't change
anything because both are Enumerable, and both yield Strings.

Cheers.

[1] https://rubydoc.info/stdlib/core/Enumerable

-- 
Felipe Contreras
_______________________________________________
notmuch mailing list -- notmuch@notmuchmail.org
To unsubscribe send an email to notmuch-leave@notmuchmail.org

Thread: