• Alex Kalderimis's avatar
    Reduce perceived complexity of capability computation · 8e160b09
    Alex Kalderimis authored
    This changes the capability computation from code (a very large if
    statement) to transformation of static data.
    
    The data we transform is a map from `ability` to `requirements`:
    
    ```ruby
    {
      ability_needed: [:test_one?, :test_two?],
      other_ability: [:test_three?]
    }
    ```
    
    If the object passes _any_ of the requirement tests, then it must pass
    the policy ability check for all of the matched abilities. If the tests
    are inductive then this becomes a one-to-one reverse mapping, but it
    need not be, so this formulation can actually express stricter policy
    tests than the current if statement can (i.e. we can assert that some
    event needs multiple abilities).
    
    This change expresses (like a DSL) the rules as symbols that must be
    implemented as methods on the receiver, so we need to `send` the
    requirements to the receiving event.
    8e160b09
event.rb 10.7 KB