hyperstack-org/hyperstack

for policy white and black lists ignore nils, and flatten arrays

Open

#319 aberto em 13 de out. de 2020

Ver no GitHub
 (0 comments) (0 reactions) (0 assignees)JavaScript (43 forks)batch import
enhancementgood first issue

Métricas do repositório

Stars
 (531 stars)
Métricas de merge de PR
 (Nenhuma PRs mesclada em 30d)

Description

for example policy.send_all_but(nil).to(Application) should work.

It doesn't because it tries to convert nil to a symbol and fails.

This is handy for a case like this:

policy.send_all_but(production_job? && :ship_by_date).to(Application)

Otherwise the code looks like this:

if production_job? 
  policy.send_all_but(:ship_by_date).to(Application)
else
  policy.send_all.to(Application)
end

# or

policy.send_all_but(*[*(production_job? && :ship_by_date)]).to(Application)

Allowing an array of symbols to be passed in might also be handy in cases as well so basically we want to flatten and compress the parameters (which is already a splat) to send_all_but and send_only. We use reject(&:!) instead of compact so that any falsy value will be removed (false as well as nil.)

module Hyperstack 
  class InternalPolicy
    def send_all_but(*exceptions)
      SendSet.new(self, exclude: exceptions.flatten.reject(&:!))
    end

    def send_only(*white_list)
      SendSet.new(self, white_list: white_list.flatten.reject(&:!))
    end
  end
end

Guia do colaborador