Class: Foobara::Callback::Registry::Conditioned

Inherits:
Base
  • Object
show all
Defined in:
foobara-0.0.110/projects/callback/src/registry/conditioned.rb

Direct Known Subclasses

ChainedConditioned

Defined Under Namespace

Classes: InvalidConditions

Instance Attribute Summary collapse

Attributes inherited from Base

#allowed_types

Instance Method Summary collapse

Methods inherited from Base

#after, #around, #before, #error, #has_after_callbacks?, #has_around_callbacks?, #has_before_callbacks?, #has_callbacks?, #has_error_callbacks?, #register_callback, #runner

Constructor Details

#initialize(possible_conditions) ⇒ Conditioned

Returns a new instance of Conditioned.



11
12
13
14
15
16
17
# File 'foobara-0.0.110/projects/callback/src/registry/conditioned.rb', line 11

def initialize(possible_conditions)
  super()

  self.callback_sets = {}
  self.possible_conditions = possible_conditions
  self.possible_condition_keys = possible_conditions.keys.map(&:to_s).sort.map(&:to_sym)
end

Instance Attribute Details

#callback_setsObject

Returns the value of attribute callback_sets.



7
8
9
# File 'foobara-0.0.110/projects/callback/src/registry/conditioned.rb', line 7

def callback_sets
  @callback_sets
end

#possible_condition_keysObject

Returns the value of attribute possible_condition_keys.



7
8
9
# File 'foobara-0.0.110/projects/callback/src/registry/conditioned.rb', line 7

def possible_condition_keys
  @possible_condition_keys
end

#possible_conditionsObject

Returns the value of attribute possible_conditions.



7
8
9
# File 'foobara-0.0.110/projects/callback/src/registry/conditioned.rb', line 7

def possible_conditions
  @possible_conditions
end

Instance Method Details

#specific_callback_set_for(*args, **opts) ⇒ Object



19
20
21
22
23
24
# File 'foobara-0.0.110/projects/callback/src/registry/conditioned.rb', line 19

def specific_callback_set_for(*args, **opts)
  conditions = Util.args_and_opts_to_opts(args, opts)
  validate_conditions!(**conditions) # TODO: don't always have to validate this...
  key = condition_hash_to_callback_key(conditions)
  callback_sets[key] ||= Callback::Set.new
end

#unioned_callback_set_for(**conditions) ⇒ Object



26
27
28
29
30
31
32
33
34
35
# File 'foobara-0.0.110/projects/callback/src/registry/conditioned.rb', line 26

def unioned_callback_set_for(**conditions)
  return specific_callback_set_for if conditions.empty?

  full_callback_key = condition_hash_to_callback_key(conditions)
  all_sets = callback_key_permutations(full_callback_key).map do |callback_key|
    callback_sets[callback_key]
  end.compact

  all_sets.inject { |unioned, set| unioned.union(set) } || Callback::Set.new
end