hyperstack-org/hyperstack

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

Open

#319 ouverte le 13 oct. 2020

Voir sur GitHub
 (0 commentaires) (0 réactions) (0 assignés)JavaScript (43 forks)batch import
enhancementgood first issue

Métriques du dépôt

Stars
 (531 stars)
Métriques de merge PR
 (Aucune PR mergée en 30 j)

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

Guide contributeur