hyperstack-org/hyperstack

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

Open

#319 opened on Oct 13, 2020

View on GitHub
 (0 comments) (0 reactions) (0 assignees)JavaScript (43 forks)batch import
enhancementgood first issue

Repository metrics

Stars
 (531 stars)
PR merge metrics
 (No merged PRs in 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

Contributor guide