В первом перечисленном ниже методе use метод выглядит следующим образом: ins - это переменная экземпляра, а attr - метод, который предоставляет методы получения и установки: ins Что я не уверен, так это то, что делает @ins << lambda
.
module Rack
class Builder
attr :ins
def use(middleware, *args, &block)
middleware.instance_variable_set "@rack_builder", self
def middleware.rack_builder
@rack_builder
end
@ins << lambda { |app|
middleware.new(app, *args, &block)
}
end
def run(app)
klass = app.class
klass.instance_variable_set "@rack_builder", self
def klass.rack_builder
@rack_builder
end
@ins << app #lambda { |nothing| app }
end
def leaf_app
ins.last
end
end
end