module Confinement::BuilderGetterInitialization

Public Instance Methods

builder_getter(method_name, klass, ivar, new: []) click to toggle source
# File lib/confinement.rb, line 80
    def builder_getter(method_name, klass, ivar, new: [])
      init_parameters = [*new, "&block"].join(", ")

      class_eval(<<~RUBY, __FILE__, __LINE__)
        def #{method_name}(&block)
          if #{ivar}
            if block_given?
              raise "#{method_name} is already set up"
            end

            return #{ivar}
          end

          if !block_given?
            raise "Can't initialize #{method_name} without block"
          end

          #{ivar} = #{klass}.new(#{init_parameters})
          #{ivar}
        end
      RUBY
    end