Ниже приведен фрагмент кода из проекта OpenProject с открытым исходным кодом. Я в недоумении от того, что делает этот рубиновый код, и прохождение рубиновой документации не помогло.Может кто-нибудь объяснить мне, как работает этот рубиновый синтаксис?
Метод управления вызывается кодом в инициализаторе, но я не уверен, что передается аргумент.
Использование отладчика, когда я смотрю на содержимое «элемента» в методе управления, он просто говорит:: block.
КАК кто-нибудь объяснить или передать мне какую-либо документацию, которая объясняет, как вызывается обращение?
require 'open_project/homescreen'
OpenProject::Homescreen.manage :blocks do |blocks|
blocks.push(
{ partial: 'welcome',
if: Proc.new { Setting.welcome_on_homescreen? && !Setting.welcome_text.empty? } },
{ partial: 'projects' },
{ partial: 'users',
if: Proc.new { User.current.admin? } },
{ partial: 'my_account',
if: Proc.new { User.current.logged? } },
{ partial: 'news',
if: Proc.new { [email protected]? } },
{ partial: 'community' },
{ partial: 'administration',
if: Proc.new { User.current.admin? } }
)
end
module OpenProject
module Homescreen
class << self
##
# Access a defined item on the homescreen
# By default, this will likely be :blocks and :links,
# however plugins may define their own blocks and
# render them in the call_hook.
def [](item)
homescreen[item]
end
##
# Manage the given content for this item,
# yielding it.
def manage(item, default = [])
homescreen[item] ||= default
yield homescreen[item]
end
private
def homescreen
@content ||= {}
end
end
end
end
open_project/homescreen.rb
Спасибо. Мне пришлось перечитать некоторые праймеры на блоках, а также ваше объяснение, и я думаю, что он наконец нажал. Благодарю. – Agazoom