Ir para o conteúdo
ou

Software livre Brasil

Como Funciona?

É um evento que busca reunir pessoas que tem interesse em criar mecanismos para facilitar o acesso a informações públicas sobre mobilidade Urbana/Copa do Mundo em Salvador - Bahia.

Não apenas para desenvolvedores de software, mas também com designers, jornalistas, estatisticos, artistas, professores e todas as outras linhas de conhecimento que possam agregar a ideia.

Apoiadores (1)

 Voltar a Projetos
Tela cheia Sugerir um artigo

Macros para Artigos - Noosfero

12 de Novembro de 2012, 0:00 , por Software Livre Brasil - 55 comentários | Ninguém está seguindo este artigo ainda.
Visualizado 713 vezes

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

Gravações


Tags deste artigo: noosfero projeto macros

55 comentários

Enviar um comentário
  • Aurium minorAurium
    12 de Novembro de 2012, 16:27

    Como Macros devem ser registradas?

    No final do encontro v0.1 www.​yout​ube.​com/​watc​h?v=​sZBU​UnZE​X6w#​t=12​900s percebemos que não pensamos numa boa forma de registrar novas macros. As questões que temos que solucionar são:
    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.


    • Aurium minorAurium
      20 de Novembro de 2012, 22:27

      Minha Proposta

      Devemos voltar a idéia original, onde o MacrosPlugin cria o hotspot macros, mas com esses detalhes:

      Cada plugin que cria macros responderá o metodo article_macros com um hash cujas chaves são os nomes das macros e os valores são lambdas. Essas respostas serão unidas em um único hash e este sera cacheado em @article_macros em environment. Quando uma macro for localizada em um artigo, esta será buscada e executada de @article_macros.

      Um exemplo:
      --------------------------------
      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.


    • Aurium minorAurium
      21 de Novembro de 2012, 21:25

      Outra proposta

      Aqui vai outra proposta que pode ser muito mais simples para criadores de macros. O hotspot em macros MacrosPlugin continua existindo, o cache também, mas a criação do pacote de macros é diferente. Neste exemplo o MacrosPlugin cria a classe MacroPackPlugin a ser herdada por plugins que pretendam prover uma coleção de macros. Estes "pacotes" usam o método set_article_macro que recebe o nome da macro e um bloco. Este bloco deve receberá:
      # 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, &macro)
      @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.


  • Hackergotchi rafaelgomes minorGomex
    12 de Novembro de 2012, 17:42

     

    SENSACIONAL! Espero mesmo poder ir para o próximo. :(


  • Photo110097119107459459 minorVicente Aguiar
    15 de Novembro de 2012, 15:47

    Show!

    Mestre Aurium, parabéns pela iniciativa e organização desse encontro! Além de ter gerado esse belo resultado, para pouco tempo de encontro, o seu relato e sistematização ficaram muito bom! Tenho certeza que a cada versão, esse encontro crescerá mais e mais... ;)


Enviar um comentário

Os campos são obrigatórios.

Se você é um usuário registrado, pode se identificar e ser reconhecido automaticamente.