[dry-monads] Including `Do::All` makes every methods publicly available

I’ve noticed that when you include Do::All module into a class it makes every methods defined in this class publicly available. Is it a bug or intentional behaviour?

Consider following example:
GitHub Gist

require 'bundler/inline'

gemfile do
  source 'https://rubygems.org'
  gem 'dry-monads', '1.3.5'
  gem 'rspec', '3.9.0'
end

require 'dry-monads'

class Service
  include Dry::Monads[:result, :do]

  def call
    yield fetch_data
  end

  private

  def fetch_data
    Success(:data)
  end
end

RSpec.describe Service do
  subject(:service) { Service.new }

  describe '#call' do
    it 'returns data' do
      expect(service.call).to eq(:data)
    end
  end

  describe '#fetch_data' do
    it 'raises NoMethodError' do
      expect { service.fetch_data }.to raise_error(NoMethodError)
    end
  end
end

RSpec::Core::Runner.run(['spec', '--format', 'doc'])

# $ ruby dry_monad_private_issue.rb
#
# Service
#   #call
#     returns data
#   #fetch_data
#     raises NoMethodError (FAILED - 1)
#
# Failures:
#
#   1) Service#fetch_data raises NoMethodError
#      Failure/Error: expect { service.fetch_data }.to raise_error(NoMethodError)
#        expected NoMethodError but nothing was raised
#      # dry_monad_private_methods_issue.rb:36:in `block (3 levels) in <main>'
#      # dry_monad_private_methods_issue.rb:41:in `<main>'
#
# Finished in 0.01185 seconds (files took 0.13012 seconds to load)
# 2 examples, 1 failure
#
# Failed examples:
#
# rspec dry_monad_private_methods_issue.rb:35 # Service#fetch_data raises NoMethodError
1 Like