Skip to content

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

Open
@catmando

Description

@catmando

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions