hyperstack-org/hyperstack

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

Open

#319 aperta il 13 ott 2020

Vedi su GitHub
 (0 commenti) (0 reazioni) (0 assegnatari)JavaScript (43 fork)batch import
enhancementgood first issue

Metriche repository

Star
 (531 star)
Metriche merge PR
 (Nessuna PR mergiata in 30 g)

Descrizione

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

Guida contributor