summaryrefslogtreecommitdiff
path: root/lib/infrastructure/lazy.rb
blob: 4aa18e1b4a4a29b427076de61cad5a4b115527c7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
require 'spank'

module Booty
  class Lazy 
    def initialize(resolver = ->() { })
      @resolver = resolver
    end

    def method_missing(name, *args, &block)
      @target ||= @resolver.call
      @target.send(name, args, &block)
    end

    def self.load(key, resolver = ->() { Spank::IOC.resolve(key) })
      Lazy.new(resolver)
    end
  end
end