Class: HiddenHooks::LookUpProxy

Inherits:
Object
  • Object
show all
Defined in:
lib/hidden_hooks.rb

Instance Method Summary collapse

Constructor Details

#initialize(klass = nil, sole: false, present: sole) ⇒ LookUpProxy

Returns a new instance of LookUpProxy.



35
36
37
38
39
40
# File 'lib/hidden_hooks.rb', line 35

def initialize klass=nil, sole: false, present: sole
  @klass = klass
  @hooks = ::HiddenHooks.hooks[klass]
  @sole = sole
  @present = present
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(hook_name, *args, **kwargs, &block) ⇒ Object (private)



44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/hidden_hooks.rb', line 44

def method_missing(hook_name, *args, **kwargs, &block)
  hooks = @hooks[hook_name]

  if @present && hooks.empty?
    raise HiddenHooks::AtLeastOneHookRequired,
          "There must be at least one hook `#{hook_name}` defined for class `#{@klass}`"
  end

  if @sole && hooks.size > 1
    raise HiddenHooks::SoleHookExceeded,
          "There must be at most one hook `#{hook_name}` defined for class `#{@klass}`"
  end

  hooks
    .map { |hook| hook.call(*args, **kwargs, &block) }
    .then { |results| (@sole && @present) ? results.first : results }
end