- Tiket: noosfero.org/Development/ActionItem2044
- Estado: Em desenvolvimento
- Encontros: v0.0, v0.1, v0.2, ...
O que foi feito
- A criação de um plugin que provê a infra de macros e que pode ser estendido por outros plugins que definem novas macros.
- Localização de elementos de macros em HTML e extração de parâmetros.
- Testes para áreas não cobertas no core, que se relacionavam com o que estava sendo desenvolvido.
- Novos métodos na infra de plugins.
- Implementado um modelo de registro de macros por plugins.
Para mais detalhes, leia o relatório do encontro v0.1 e o relatório do encontro v0.2
Código Fonte
- Branch com todo o código do projeto + modificações: macros em digulius-noosfero
- Comits:
55 comentários
Enviar um comentárioComo Macros devem ser registradas?
1. As macros devem ser registradas dentro de um namespace, seja ele uma classe, um módulo ou um hash.
2. Outras macros devem ser definidas por outros plugins e só podem ser carregadas caso o plugin esteja habilitado no ambiente.
3. Plugins podem trazer coleções de macros, o que é de se esperar. Isso é importante também para a gestão de plugins no ambiente.
Minha Proposta
--------------------------------
def validate_user(query)
...
end def article_macros
{
show_user_name: lambda {|params, inner_html, context| user ? 'Gest' : user.name }, display_inner_content_to: lambda do |params, inner_html, context|
if validate_user params[:users]
''+ inner_html +''
end
end
}
end
-------------------------------- Desta forma temos o namespace em @article_macros, não misturamos as habilitadas em env1 com as habilitadas de env2, e os plugins poderão definir coleções de macros.
Outra proposta
# params: os parâmetros definidos pelo usuário;
# inner_html: o conteúdo dentro do elemento que define a macro;
# source: o conteúdo ou bloco onde a chamada para a macro foi encontrada;
# context: o contexto de execução do plugin;
--------------------------------
class Noosfero::Plugin::MacroPackPlugin < Noosfero::Plugin
def self.article_macros
@article_macros
end
def self.set_article_macro(macro_name, ¯o)
@article_macros ||= {}
@article_macros[macro_name] = macro
end
end
--------------------------------
class FooMacrosPlugin < Noosfero::Plugin::MacroPackPlugin
def self.plugin_name
"Foo Macro Pack"
end
set_article_macro :show_user_name do |params, inner_html, source, context|
user ? 'Gest' : user.name
end
set_article_macro :display_inner_content_to do |params, inner_html, source, context|
if validate_user params[:users]
''+ inner_html +''
end
end
end
--------------------------------
Mantém os benefícios, mas com um código mais inteligível.
Show!