Commit 013f15768322aca4db7524537cd9a1d107ee25c6

Authored by Antonio Terceiro
1 parent 5a5a01d4

Reorganizing documentation

HACKING 0 → 100644
@@ -0,0 +1,51 @@ @@ -0,0 +1,51 @@
  1 += Noosfero instructions for developers
  2 +
  3 +This document provides useful information to those who want to help with
  4 +Noosfero development.
  5 +
  6 +== Requirements for development
  7 +
  8 +* Mocha: http://mocha.rubyforge.org/
  9 +* Tidy: http://tidy.sourceforge.net/
  10 +* Hpricot: http://github.com/whymirror/hpricot
  11 +* Imagemagick: http://wwwimagemagick.org/
  12 +
  13 +You must install these packages to be able to run Noosfero tests. On Debian
  14 +GNU/Linux you install them with the following command:
  15 +
  16 + apt-get install libtidy-ruby libhpricot-ruby libmocha-ruby imagemagick
  17 +
  18 +== Boostraping a development/test environment
  19 +
  20 +You can copy and paste the commands below into a terminal (please review the
  21 +commands and make sure you understand what you are doing):
  22 +
  23 + # checkout the code from repository
  24 + git clone git://git.colivre.coop.br/noosfero.git
  25 + # enter the directory
  26 + cd noosfero
  27 + # copy a sample config file
  28 + cp config/database.yml.sqlite3 config/database.yml
  29 + # create the database:
  30 + rake db:migrate
  31 + # compile translations:
  32 + rake makemo
  33 + # create some test data:
  34 + ./script/sample-data
  35 + # run the automated test suite to make sure your environment is sane:
  36 + rake test
  37 +
  38 +You should now be ready to go. Issue the following command to start the Rails
  39 +development server:
  40 +
  41 + ./script/server
  42 +
  43 +The server will be available at http://localhost:3000/ . If you want to use
  44 +another port than 3000, you can use the -p option of ./script/server:
  45 +
  46 + ./script/server -p 9999
  47 +
  48 +The above command makes the server available at http://localhost:9999/
  49 +
  50 +The sample-data data scripts creates one administrator user with login "ze" and
  51 +password "test".
INSTALL 0 → 100644
@@ -0,0 +1,90 @@ @@ -0,0 +1,90 @@
  1 += Noosfero installation instructions
  2 +
  3 +Noosfero is written in Ruby with the "Rails framework":http://www.rubyonrails.org,
  4 +so the process of setting it up is pretty similar to other Rails applications.
  5 +
  6 +Below we have the instructions for installing Noosfero dependencies and setting
  7 +up a production environment. If you have problems with the setup, please feel
  8 +free to ask questions in the development mailing list.
  9 +
  10 +== Requirements
  11 +
  12 +* Ruby: http://www.ruby-lang.org/
  13 +* Rake: http://rake.rubyforge.org/
  14 +* Ruby-GetText: http://www.yotabanana.com/hiki/ruby-gettext.html?ruby-gettext (at least version 1.9.0)
  15 +* Ruby-sqlite3: http://rubyforge.org/projects/sqlite-ruby
  16 +* rcov: http://eigenclass.org/hiki/rcov
  17 +* Ferret: http://ferret.davebalmain.com/trac
  18 +* RMagick: http://rmagick.rubyforge.org/
  19 +* RedCloth: http://whytheluckystiff.net/ruby/redcloth/
  20 +* will_paginate: http://github.com/mislav/will_paginate/wikis
  21 +* iso-codes: http://pkg-isocodes.alioth.debian.org/
  22 +* feedparser: http://packages.debian.org/sid/libfeedparser-ruby
  23 +* Daemons - http://daemons.rubyforge.org/
  24 +* Mongrel: http://mongrel.rubyforge.org/
  25 +* tango-icon-theme: http://tango.freedesktop.org/Tango_Icon_Library
  26 +
  27 +On Debian GNU/Linux, all of these packages are available through the Debian
  28 +archive. You can install them with the following command:
  29 +
  30 + # aptitude install ruby rake libgettext-ruby1.8 libsqlite3-ruby rcov librmagick-ruby libredcloth-ruby libwill-paginate-ruby iso-codes libfeedparser-ruby libferret-ruby libdaemons-ruby mongrel mongrel-cluster tango-icon-theme
  31 +
  32 +We do not have specific instructions for other plaforms yet. If you manage to
  33 +install Noosfero successfully, please feel free to contact the Noosfero
  34 +development mailing with the instructions for doing so, and we'll include it
  35 +here.
  36 +
  37 +=== Setting up a production environment
  38 +
  39 +* install memcached. Study whether you need to raise the ammount of memory it uses for caching, depending on the demand you expect for your site.
  40 +* copy config/ferret_server.yml.dist to config/ferret_server.yml.dist
  41 +* configure the mongrel cluster: `mongrel_rails cluster::configure`
  42 +** then edit config/mongrel_cluster.yml to suit your environment. Make sure your apache configuration matches the mongrel cluster configuration, specially in respect to the ports and numbers of mongrel instances.
  43 +* create needed temporary directories:
  44 + mkdir tmp
  45 + mkdir tmp/pids
  46 + mkdir log
  47 +* create database (example using PostgreSQL, YMMV)
  48 +
  49 + root user
  50 + =========
  51 + # sudo apt-get install postgresql libpgsql-ruby
  52 + # su - postgres
  53 +
  54 + postgres user
  55 + =============
  56 + postgres@HOST:~$ createuser noosfero
  57 + Shall the new role be a superuser? (y/n) n
  58 + Shall the new role be allowed to create databases? (y/n) y
  59 + Shall the new role be allowed to create more new roles? (y/n) n
  60 +
  61 + noosfero_user
  62 + =============
  63 + createdb noosfero_production
  64 + createdb noosfero_development
  65 + createdb noosfero_test
  66 +
  67 +* configure database access in config/database.yml
  68 +
  69 +* test database access:
  70 +** first create the development database
  71 + rake db:schema:load
  72 +** if everything goes right, then create the production database:
  73 + RAILS_ENV=production rake db:schema:load
  74 +
  75 +* create sample data:
  76 + RAILS_ENV=production rake db:populate
  77 +
  78 +* compile the translations:
  79 + rake makemo
  80 +
  81 +* start the server:
  82 + ./script/production start
  83 +
  84 +* to stop the server:
  85 +
  86 + ./script/production stop
  87 +
  88 +* to restart the server:
  89 +
  90 + ./script/production restart
RELEASING 0 → 100644
@@ -0,0 +1,39 @@ @@ -0,0 +1,39 @@
  1 += Noosfero release tasks
  2 +
  3 +This file documents release-related activities.
  4 +
  5 +== Working with translations
  6 +
  7 +* Update translation files: <tt>rake updatepo</tt>. Then <tt>git commit</tt> them.
  8 +* Send the PO files to the translators.
  9 +* Get the PO files back from translators, put in po/ under the correct language
  10 + name (e.,g. po/pt_BR/) and <tt>git commit</tt>.
  11 +* test translations: <tt>rake makemo</tt> and browse the application on the web.
  12 +
  13 +== Releasing noosfero
  14 +
  15 +To prepare a release of noosfero, you must follow the steps below:
  16 +
  17 +* finish all requirements and bugs assigned to the to-be-released version
  18 +* make sure all tests pass
  19 +* write release notes at the version's wiki topic.
  20 +* generate package with <tt>rake package</tt>. Your tarball will be under the pkg/
  21 + directory, named as noosfero-${VERSION}.tar.gz
  22 +* test that the package contains everything that is needed: explode the tarball
  23 + in a temporary directory, copy config/database.yml.sqlite3 to
  24 + config/database.yml, and make <tt>rake db:migrate</tt> and <tt>rake test</tt>. If
  25 + everything is ok, you are done. If not, maybe some files are not going into
  26 + the tarball. See lib/tasks/package.rake, probably you'll need to change it.
  27 +* Go to the version's wiki topic and edit it to reflect the new reality.
  28 +* Attach the generated package to that topic. Before attaching calculate the md5 of the package (with mu5sum and paste the MD5 hash as comment in the attachment form)
  29 +* Download the attached and verify the MD5 hash
  30 +* create a git tag for the released version with <tt>git tag</tt>.
  31 +* IMMEDIATELY change the version in lib/noosfero.rb to the next version. (e.g.
  32 + 0.2.0 -> 0.3.0)
  33 +* update an eventual demonstration version that you run.
  34 +* write an announcement e-mail to the relevant maimling lists pointing to the release notes, and maybe to the demonstration version.
  35 +
  36 +If you had any problem during these steps, you can do <tt>rake clobber_package</tt> to
  37 +completely delete the generated packages and start the process again.
  38 +
  39 +
doc/README_FOR_APP
1 = Noosfero: a free web-based social platform 1 = Noosfero: a free web-based social platform
2 2
3 -== Setting up a Noosfero development/test environment 3 +* Installation instructions: see INSTALL
  4 +* Developer instructions: see HACKING
  5 +* Licensing information: see COPYRIGHT and COPYING
4 6
5 -Noosfero is written in Ruby with the "Rails framework":http://www.rubyonrails.org,  
6 -so the process of setting it up is pretty similar to other Rails applications.  
7 -  
8 -=== Requirements  
9 -  
10 -noosfero is intended to be run in Debian stable. It can work in other environments, but we do not test on them.  
11 -  
12 -You need to have git installed, as well as:  
13 -  
14 -* Ruby: http://www.ruby-lang.org/  
15 -* Rake: http://rake.rubyforge.org/  
16 -* Ruby-GetText: http://www.yotabanana.com/hiki/ruby-gettext.html?ruby-gettext (at least version 1.9.0)  
17 -* Ruby-sqlite3: http://rubyforge.org/projects/sqlite-ruby  
18 -* rcov: http://eigenclass.org/hiki/rcov  
19 -* Ferret: http://ferret.davebalmain.com/trac  
20 -* RMagick: http://rmagick.rubyforge.org/  
21 -* RedCloth: http://whytheluckystiff.net/ruby/redcloth/  
22 -* will_paginate: http://github.com/mislav/will_paginate/wikis  
23 -* contacts: http://github.com/cardmagic/contacts/tree/master  
24 -* iso-codes: http://pkg-isocodes.alioth.debian.org/  
25 -* feedparser: http://packages.debian.org/sid/libfeedparser-ruby  
26 -* Daemons - http://daemons.rubyforge.org/  
27 -* Mongrel: http://mongrel.rubyforge.org/  
28 -* tango-icon-theme: http://tango.freedesktop.org/Tango_Icon_Library  
29 -  
30 -There are Debian packages available for all of them but contacts. Try:  
31 -  
32 - # aptitude install ruby rake libgettext-ruby1.8 libsqlite3-ruby rcov librmagick-ruby libredcloth-ruby libwill-paginate-ruby iso-codes libfeedparser-ruby libferret-ruby libdaemons-ruby mongrel mongrel-cluster tango-icon-theme  
33 -  
34 -contacts is bundled together with noosfero for now, so you don't need to install it.  
35 -  
36 -If you have problems with the setup, use the development mailing list. In  
37 -special its possible that the requirements list above is not complete.  
38 -  
39 -=== Setting up a production environment  
40 -  
41 -* install memcached. Study whether you need to raise the ammount of memory it uses for caching, depending on the demand you expect for your site.  
42 -* copy config/ferret_server.yml.dist to config/ferret_server.yml.dist  
43 -* configure the mongrel cluster: `mongrel_rails cluster::configure`  
44 -** then edit config/mongrel_cluster.yml to suit your environment. Make sure your apache configuration matches the mongrel cluster configuration, specially in respect to the ports and numbers of mongrel instances.  
45 -* create needed temporary directories:  
46 - mkdir tmp  
47 - mkdir tmp/pids  
48 - mkdir log  
49 -* create database (example using PostgreSQL, YMMV)  
50 -  
51 - root user  
52 - =========  
53 - # sudo apt-get install postgresql libpgsql-ruby  
54 - # su - postgres  
55 -  
56 - postgres user  
57 - =============  
58 - postgres@HOST:~$ createuser noosfero  
59 - Shall the new role be a superuser? (y/n) n  
60 - Shall the new role be allowed to create databases? (y/n) y  
61 - Shall the new role be allowed to create more new roles? (y/n) n  
62 -  
63 - noosfero_user  
64 - =============  
65 - createdb noosfero_production  
66 - createdb noosfero_development  
67 - createdb noosfero_test  
68 -  
69 -* configure database access in config/database.yml  
70 -  
71 -* test database access:  
72 -** first create the development database  
73 - rake db:schema:load  
74 -** if everything goes right, then create the production database:  
75 - RAILS_ENV=production rake db:schema:load  
76 -  
77 -* create sample data:  
78 - RAILS_ENV=production rake db:populate  
79 -  
80 -* compile the translations:  
81 - rake makemo  
82 -  
83 -* start the server:  
84 - ./script/production start  
85 -  
86 -* to stop the server:  
87 -  
88 - ./script/production stop  
89 -  
90 -* to restart the server:  
91 -  
92 - ./script/production restart  
93 -  
94 -=== Boostraping a test environment  
95 -  
96 -You can copy and paste the commands below into a terminal (please review the  
97 -commands and make sure you understand what you are doing):  
98 -  
99 - # checkout the code from repository  
100 - git clone git://git.colivre.coop.br/noosfero.git  
101 - # enter the directory  
102 - cd noosfero  
103 - # copy a sample config file  
104 - cp config/database.yml.sqlite3 config/database.yml  
105 - # create the database:  
106 - rake db:migrate  
107 - # compile translations:  
108 - rake makemo  
109 - # create some test data:  
110 - ./script/populate  
111 - # install the test dependences:  
112 - aptitude install libtidy-ruby libhpricot-ruby libmocha-ruby imagemagick  
113 - # run the automated test suite to make sure your environment is sane:  
114 - rake test  
115 -  
116 -You should now be ready to go. Issue the following command to start the Rails  
117 -development server:  
118 -  
119 - ./script/server  
120 -  
121 -The server will be available at http://localhost:3000/ . If you want to use  
122 -another port than 3000, you can use the -p option of ./script/server:  
123 -  
124 - ./script/server -p 9999  
125 -  
126 -The above command makes the server available at http://localhost:9999/  
127 -  
128 -The populate script creates some test users, one of them has login 'ze' and  
129 -password 'test'. You can use it or you can register a new user.  
130 -  
131 -== Reporting bugs  
132 -  
133 -Use Noosfero Tracker application at http://www.colivre.coop.br/Noosfero.  
134 -  
135 -== Helping with development  
136 -  
137 -* It's recommended that you subscribe to the development mailing  
138 - list: http://ynternet.net/mailman/listinfo/noosfero  
139 -* If you have a patch, create an appropriate action item  
140 - (bugs/requirement/enhancement) in the Tracker web (see "Reporting bugs"  
141 - above) of type.  
142 -  
143 -== Releasing noosfero  
144 -  
145 -To prepare a release of noosfero, you must follow the steps below:  
146 -  
147 -* finish all requirements and bugs assigned to the to-be-released version  
148 -* make sure all tests pass  
149 -* write release notes at the version's wiki topic.  
150 -* generate package with <tt>rake package</tt>. Your tarball will be under the pkg/  
151 - directory, named as noosfero-${VERSION}.tar.gz  
152 -* test that the package contains everything that is needed: explode the tarball  
153 - in a temporary directory, copy config/database.yml.sqlite3 to  
154 - config/database.yml, and make <tt>rake db:migrate</tt> and <tt>rake test</tt>. If  
155 - everything is ok, you are done. If not, maybe some files are not going into  
156 - the tarball. See lib/tasks/package.rake, probably you'll need to change it.  
157 -* Go to the version's wiki topic and edit it to reflect the new reality.  
158 -* Attach the generated package to that topic. Before attaching calculate the md5 of the package (with mu5sum and paste the MD5 hash as comment in the attachment form)  
159 -* Download the attached and verify the MD5 hash  
160 -* create a git tag for the released version with <tt>git tag</tt>.  
161 -* IMMEDIATELY change the version in lib/noosfero.rb to the next version. (e.g.  
162 - 0.2.0 -> 0.3.0)  
163 -* update an eventual demonstration version that you run.  
164 -* write an announcement e-mail to the relevant maimling lists pointing to the release notes, and maybe to the demonstration version.  
165 -  
166 -If you had any problem during these steps, you can do <tt>rake clobber_package</tt> to  
167 -completely delete the generated packages and start the process again.  
168 -  
169 -== Working with translations  
170 -  
171 -* Update translation files: <tt>rake updatepo</tt>. Then <tt>git commit</tt> them.  
172 -* Send the PO files to the translators.  
173 -* Get the PO files back from translators, put in po/ under the correct language  
174 - name (e.,g. po/pt_BR/) and <tt>git commit</tt>.  
175 -* test translations: <tt>rake makemo</tt> and browse the application on the web.  
doc/README_FOR_APP.pt_BR
@@ -1,351 +0,0 @@ @@ -1,351 +0,0 @@
1 -= Menu  
2 -  
3 -* MVC  
4 -* Como criar um Article?  
5 -* Como criar um Block?  
6 -* Como criar uma Task?  
7 -* Visão Geral do Banco de Dados  
8 -  
9 -= MVC  
10 -  
11 -A sigla MVC vem de Modelo, Visão e Controle. Esta arquitetura sugere uma separação do código em três camadas distintas, com papéis bem definidos.  
12 -  
13 -A Visão é a camada que interage diretamente com o usuário, recebendo e disponibilizando os dados da aplicação. A camada de Visão tem o objetivo de apresentar o resultado do processamento da camada de Controle, formatada para ser usável pelo usuário, consituindo a parte visível do sistema.  
14 -  
15 -A camada de Controle é a responsável por processar todas as requisições feitas pelo usuário através da interface (Visão). Esta camada interpreta as ações do usuário e gerencia a execução das regras de negócios pelo Modelo.  
16 -  
17 -O modelo refere-se ao gerenciamento da informação e ao comportamento da aplicação. Em uma visão simplificada, a camada de modelo funciona como uma representação das entidades de domínio e suas regras de negócio. Possui a função de validar os dados vindos da interface do usuário com os dados da aplicação.  
18 -  
19 -= Como criar um Article?  
20 -  
21 -Um artigo é um tipo de conteúdo que um usuário pode criar e gerenciar através do botão "gerenciar conteúdo" no seu painel de controle. Ele também é listado no bloco "conteúdo recente" e em alguns outros lugares como no resultado das buscas por exemplo. Os artigos podem ser de vários tipos, artigos que usam marcação de texto textile é um tipo de artigo, artigos com edição visual WYSIWYG é um outro tipo, artigos também podem ser arquivos enviados pelo usuário ou um simplesmente um feed RSS.  
22 -  
23 -Cada um desses tipos de artigo são subclasses de Article que implementam métodos para editá-lo e exibi-lo. Os métodos que tem que ser sobrescritos são: to_html (para converter o conteudo em html), decription e short_decription (para indicar o que o artigo é para um usuário). Para cada Model que representa um tipo especifico de Article deve existir também um partial rhtml na pasta de views do controller cms em app/views/cms com o nome do tipo de artigo que é a interface de edição do artigo.  
24 -  
25 -Então basicamente o layout de um novo tipo de artigo ficaria assim:  
26 -  
27 -class NovoTipo < Article  
28 - def description  
29 - _('Este é um novo tipo de artigo')  
30 - end  
31 - def short_description  
32 - _('Novo tipo de artigo')  
33 - end  
34 - def to_html  
35 - #Algum código para gerar o html a partir de outras informações armazenadas  
36 - end  
37 -end  
38 -  
39 -Por padrão já existem alguns atributos que podem ser usados na geração do html para o artigo.  
40 -  
41 -* body - corpo do artigo  
42 -* name - nome do artigo  
43 -* created_at - quando o artigo foi criado  
44 -* updated_at - quando foi alterado pela última vez  
45 -  
46 -Caso seja necessário armazenar alguma informação além destas pode-se adicionar campos personalizados com o método setting_items.  
47 -  
48 -Para criar por exemplo um artigo que mostre um texto com uma lista de referêcias em separado pode-se adicionar um campo de texto usando settings_items para armazenar as referências.  
49 -  
50 -app/model/texto_com_referencia.rb  
51 -  
52 -class TextoComReferencia < Article  
53 - def description  
54 - _('Este é uma artigo com referências em separado.')  
55 - end  
56 - def short_description  
57 - _('Artigo com referêcias')  
58 - end  
59 - settings_items :referencias, :type => 'text'  
60 - def to_html  
61 - body + "<div>#{referencias}</div>"  
62 - end  
63 -end  
64 -  
65 -Então o html gerado iria adicionar ao fim do artigo as referêcias dentro de um div.  
66 -  
67 -Para a edição do nosso artigo criamos o partial em app/views/cms/_texto_com_referencia.rhtml contendo:  
68 -  
69 -<%= f.text_field('name') %>  
70 -<%= f.text_area('body') %>  
71 -<%= f.text_area('referencias') %>  
72 -  
73 -Que gera uma formulário html para que o usuário do artigo digite o nome do artigo, o texto principal e as referências  
74 -  
75 -= Como criar um Block?  
76 -  
77 -Um block no Noosfero é uma caixa de conteúdo que pode ser escolhida para ser mostrada na página de um usuário/comunidade/empreendimento. Existem blocks para várias funcionalidades distintas como listar links favoritos, listar amigos, mostrar informações do usuário entre outros.  
78 -  
79 -Um novo block é um model que herda da classe Block e tem que implementar os seguintes métodos:  
80 -  
81 -* description - retorna uma string que é a descrição do bloco (este é um método de classe)  
82 -* short_description - retorna uma string que é uma descrição curta do bloco (esse é um método de classe)  
83 -* default_title - é o título padrão do bloco que pode ser mudado pelo usuário depois  
84 -* help - um texto de ajuda que aparece quando o usuário entra no modo ajuda e passa o mouse por cima do bloco  
85 -* content - retorna o conteúdo a ser exibido dentro do bloco  
86 -  
87 -O método content pode retornar uma de duas coisas: uma string com o conteúdo que deve ser exibido ou uma função lambda com código que deve ser executado no contexto da requisição. A função lambda é útil para o caso de se querer utilizar um arquivo rhtml para gerar o html em vez de colocar tudo em uma string.  
88 -  
89 -Se queremos, por exemplo, criar um bloco que mostra apenas as amigas de um usuário podemos usar o seguinte:  
90 -  
91 -class Amigas < Block  
92 - def self.description  
93 - _('Um bloco que mostra o nome de suas amigas')  
94 - end  
95 - def self.short_description  
96 - _('Bloco de amigas')  
97 - end  
98 - def default_title  
99 - _('Minhas amigas')  
100 - end  
101 - def help  
102 - _('Um bloco que mostra minhas amigas')  
103 - end  
104 - def content  
105 - '<ul>' +  
106 - owner.friends.select {|f|f.sex == 'female'}.map do |friend|  
107 - '<li>' + friend.name + '</li>'  
108 - end +  
109 - </ul>  
110 - end  
111 -end  
112 -  
113 -Depois disso é só adicionar o bloco na lista de blocos disponíveis aos usuários no controller app/controller/my_profile/profile_design_controller.rb. Se o bloco é para ser usado somente para usuários ou somente para comunidades deve ser adicionado em sua própria seção.  
114 -  
115 -= Como criar uma Task?  
116 -  
117 -Uma Task é um elemento do Noosfero utilizado para gerenciar tarefas pendentes. Essas tarefas são mostradas no painel de controle do usuário/comunidade/empreendimento que deve resolvê-la. Cada tarefa pode estar em 3 estados diferentes: pendente, resolvida ou cancelada.  
118 -  
119 -A classe Task provê a infra-estrutura básica para todas as tasks do sistema, o Noosfero hoje possui tasks para as seguintes funções: adicionar amigo, entrar em comunidade moderada, alteração de senha, entre outras. Esta classe contém relacionamento com Person e Profile da seguinte forma:  
120 - _________ ______ ________  
121 - | | | | | |  
122 - | Profile |1--------*| Task |*---------1| Person |  
123 - |_________| |______| |________|  
124 -  
125 -A classe base Task possui toda a lógica necessária para a existencia de tasks como o estado da tarefa, métodos para criação e finalização, envio de notificação, envio de email caso necessário, entre outras funções. Então o que resta para as classes derivadas é implementar o método perform que fará o trabalho propriamente dito, e adicionar campos personalizados caso necessário.  
126 -  
127 -A task AddFriend por exemplo, que é uma task criada quando alguem requisita a amizade de outra pessoa, executa os seguintes passos no método perform ao ser finalizada.  
128 -  
129 -* Adiciona requisitante como amigo do requisitado e;  
130 -* Adiciona requisitado como amigo do requitante  
131 -  
132 -Para que o ciclo de criação, aceitação e finalização de uma task esteja completo é necessário implementar os controllers e as views. Para o AddFriend por exemplo temos o controller friends_controller que contém a lógica de criação da task. Para processamento desta e de todas as outras tasks temos o controller tasks_controller que contém a lógica necessária para finalizar uma task. Em views/tasks/ temos diversas views necessárias para a finalização de tasks, algumas tasks não necessitam campos especificos na sua finalização então usam a view _task.rhtml para a task AddFriend por exemplo temos o campo groups_for_friend usado para classificar um amigo no momento da aceitção da task.  
133 -  
134 -No exemplo de código abaixo vamos criar uma Task AddFriend onde o Person joão requisita amizade do Person josé:  
135 -  
136 -* joao = Person['joao']  
137 -* jose = Person['jose']  
138 -* AddFriend.create(:person => joao, :friend => jose)  
139 -  
140 -José receberá uma requisição para ser amigo de joão, se ele aceitar a requisição o método perform será executado e o relacionamento de amizade entre eles será criado.  
141 -  
142 -Vamos exemplificar como criar uma nova Task que simplesmente envia uma requisição para alguém e ao ser finalizada cria um artigo para quem aceitou a requisição.  
143 -  
144 -Vamos chamar esta task de SendArticle, para isto crie o arquivo app/models/send_article.rb com o seguinte conteudo:  
145 -  
146 -class SendArticle < Task  
147 - validates_presence_of :requestor_id, :target_id  
148 - acts_as_having_settings :name, :body, :field => :data  
149 - def perform  
150 - target.articles << TextileArticle.new(:name => name, :body => body)  
151 - end  
152 - def description  
153 - _('%s enviou um artigo para você') % requestor.name  
154 - end  
155 -end  
156 -  
157 -Esta é a infra-estrutura para nossa nova task, uma classe que herda de Task e implementa pelo menos o método perform. Este task possui 2 campos personalizados que serão utilizados para armazenar o nome e o corpo do artigo a ser criado.  
158 -  
159 -Para que seja possivel um usuario qualquer do sistema possa criar uma task dessa temos que implementar a lógica no controller e adicionar um botão na interface ou outro controle qualquer que possibilite o usuario criar, para isto vamos criar um controller.  
160 -  
161 -app/controllers/public/send_article_controller.rb  
162 -  
163 -class SendArticleController < MyProfileController  
164 - def new  
165 - @person = Person.find(params[:target_id])  
166 - @article = TextileArticle.new  
167 - if request.post? && params[:confirmation]  
168 - SendArticle.create!(:requestor_id => user.id, :target_id => @person.id)  
169 - flash[:notice] = _('%s receberá solicitação de criação deste artigo.') % @person.name  
170 - redirect_to :back  
171 - end  
172 - end  
173 -end  
174 -  
175 -Cria uma view com o form para que o usuario possa preencher o nome e o corpo do artigo a ser enviado ao criar a task.  
176 -  
177 -app/views/send_article.rhtml  
178 -  
179 -<h1><%= _('Sending article to %s') % @person.name %></h1>  
180 -<% labelled_form_for 'article', @article, :html => { :multipart => true } do |f| %>  
181 - <%= hidden_field_tag(:confirmation, 1) %>  
182 - <%= hidden_field_tag(:target_id, @person.id) %>  
183 - <%= render :partial => 'cms/textile_article', :locals => { :f => f } %>  
184 - <% button_bar do %>  
185 - <%= submit_button :save, _('Send') %>  
186 - <%= button(:cancel, _("Cancel"), :controller => 'profile', :profile => profile.identifier) %>  
187 - <% end %>  
188 -<% end %>  
189 -  
190 -Falta apenas adicionar um controle na interface para o usuário acionar este ação, vamos adicionar um botão junto aos botões de acão como adicionar amigo, entrar em comunidade, etc. em app/views/blocks/profile_info_actions/person.rhtml adicione o código abaixo.  
191 -  
192 -<li> <%= link_to content_tag('span', _('Send article')), {:profile => user.identifier, :controller => 'send_article', :action => 'new', :target_id => profile.id}, :class => 'button with-text icon-menu-mail' %> </li>  
193 -  
194 -= Visão Geral do Banco de Dados  
195 -  
196 -O Noosfero é composto por 27 tabelas, listadas abaixo:  
197 -  
198 - +--------------------------------+  
199 - | Tables_in_noosfero_development |  
200 - +--------------------------------+  
201 - | article_versions |  
202 - | articles |  
203 - | articles_categories |  
204 - | blocks |  
205 - | boxes |  
206 - | categories |  
207 - | categories_profiles |  
208 - | comments |  
209 - | consumptions |  
210 - | domains |  
211 - | environments |  
212 - | favorite_enteprises_people |  
213 - | friendships |  
214 - | images |  
215 - | product_categorizations |  
216 - | products |  
217 - | profiles |  
218 - | region_validators |  
219 - | role_assignments |  
220 - | roles |  
221 - | schema_info |  
222 - | taggings |  
223 - | tags |  
224 - | tasks |  
225 - | thumbnails |  
226 - | users |  
227 - | validation_infos |  
228 - +--------------------------------+  
229 - 27 rows in set (0.00 sec)  
230 -  
231 -A seguir, faremos um relato sobre o papel de cada tabela no funcionamento do sistema:  
232 -  
233 -== article_versions  
234 -  
235 -Os artigos posssuem controle de versão e cada versão é guardada nessa tabela.  
236 -  
237 -== articles  
238 -  
239 -Artigos são todo tipo de conteúdo que pode ser criado pelo usuário. Como textos, imagens e até mesmo pastas.  
240 -  
241 -== articles_categories  
242 -  
243 -Os artigos são classificados por categorias. Esta tabela guarda as associações entre artigos e categorias.  
244 -  
245 -== blocks  
246 -  
247 -Guarda as informações relativas aos blocos, que são apresentados em boxes na página do usuário.  
248 -  
249 -== boxes  
250 -  
251 -Representa as áreas onde os usuários podem anexar seus blocos.  
252 -  
253 -== categories  
254 -  
255 -São categorias do sistema, que incluem categorias de produto e regiões.  
256 -  
257 -== categories_profiles  
258 -  
259 -Esta tabela guarda a associação entre categories e profiles.  
260 -  
261 -== comments  
262 -  
263 -Esta tabela guarda os comentários feitos nos artigos.  
264 -  
265 -== consumptions  
266 -  
267 -Representa os tipos de produtos que o usuário consome.  
268 -  
269 -== domains  
270 -  
271 -Cada ambiente pode ter um ou mais domínios, nesta tabela está armazenado o domínio do ambiente.  
272 -  
273 -== environments  
274 -  
275 -Representa cada uma das redes sociais (ou ambiente) geridas pelo Noosfero.  
276 -  
277 -== favorite_enteprises_people  
278 -  
279 -Representa os empreendimentos favoritos de um usuário.  
280 -  
281 -== friendships  
282 -  
283 -Esta tabela apresenta todos as relações de amizade.  
284 -  
285 -== images  
286 -  
287 -Guarda as informações sobre todas as imagens armazendas no sistema.  
288 -  
289 -== product_categorizations  
290 -  
291 -Representa a associação entre produtos e categorias.  
292 -  
293 -== products  
294 -  
295 -Esta tabela guarda todos os produtos dos empreendimentos do sistema.  
296 -  
297 -== profiles  
298 -  
299 -É a entidade mais importante do sistema. Representa tanto pessoas, quanto comunidades, empreeendimentos e organizações.  
300 -  
301 -== region_validators  
302 -  
303 -Relaciona as organizações validadoras com a região em que ela opera.  
304 -  
305 -== role_assignments  
306 -  
307 -Associa um papel a um usuário, dando a ele permissões sobre um determinado recurso do sistema.  
308 -  
309 -== roles  
310 -  
311 -Apresenta todos os papéis que podem ser atribuídas aos usuários e agrega quais permissões um usuário com esse papel terá.  
312 -  
313 -== schema_info  
314 -  
315 -Guarda o número da migration no Rails.  
316 -  
317 -== taggings  
318 -  
319 -Associa uma tag a um artigo.  
320 -  
321 -== tags  
322 -  
323 -Esta tabela armazena uma tag que pode ser associada a artigos.  
324 -  
325 -== tasks  
326 -  
327 -Representa uma tarefa que pode ser atribuída a um usuário, comunidade ou empreendimento.  
328 -  
329 -== thumbnails  
330 -  
331 -Guarda informações sobre miniaturas de imagens.  
332 -  
333 -== users  
334 -  
335 -Esta tabela guarda informações de login de todos os usuários do sistema.  
336 -  
337 -== validation_infos  
338 -  
339 -Guarda a metodologia de validação de uma entidade validadora.  
340 -  
341 -== Abaixo segue modelagem do Noosfero  
342 -  
343 -link:../noosfero_tabelas_article.png  
344 -  
345 -link:../noosfero_tabelas_category.png  
346 -  
347 -link:../noosfero_tabelas_profile.png  
348 -  
349 -link:../noosfero_tabelas_environment.png  
350 -  
351 -link:../noosfero_tabelas_schema.png  
doc/overview.pt_BR 0 → 100644
@@ -0,0 +1,351 @@ @@ -0,0 +1,351 @@
  1 += Menu
  2 +
  3 +* MVC
  4 +* Como criar um Article?
  5 +* Como criar um Block?
  6 +* Como criar uma Task?
  7 +* Visão Geral do Banco de Dados
  8 +
  9 += MVC
  10 +
  11 +A sigla MVC vem de Modelo, Visão e Controle. Esta arquitetura sugere uma separação do código em três camadas distintas, com papéis bem definidos.
  12 +
  13 +A Visão é a camada que interage diretamente com o usuário, recebendo e disponibilizando os dados da aplicação. A camada de Visão tem o objetivo de apresentar o resultado do processamento da camada de Controle, formatada para ser usável pelo usuário, consituindo a parte visível do sistema.
  14 +
  15 +A camada de Controle é a responsável por processar todas as requisições feitas pelo usuário através da interface (Visão). Esta camada interpreta as ações do usuário e gerencia a execução das regras de negócios pelo Modelo.
  16 +
  17 +O modelo refere-se ao gerenciamento da informação e ao comportamento da aplicação. Em uma visão simplificada, a camada de modelo funciona como uma representação das entidades de domínio e suas regras de negócio. Possui a função de validar os dados vindos da interface do usuário com os dados da aplicação.
  18 +
  19 += Como criar um Article?
  20 +
  21 +Um artigo é um tipo de conteúdo que um usuário pode criar e gerenciar através do botão "gerenciar conteúdo" no seu painel de controle. Ele também é listado no bloco "conteúdo recente" e em alguns outros lugares como no resultado das buscas por exemplo. Os artigos podem ser de vários tipos, artigos que usam marcação de texto textile é um tipo de artigo, artigos com edição visual WYSIWYG é um outro tipo, artigos também podem ser arquivos enviados pelo usuário ou um simplesmente um feed RSS.
  22 +
  23 +Cada um desses tipos de artigo são subclasses de Article que implementam métodos para editá-lo e exibi-lo. Os métodos que tem que ser sobrescritos são: to_html (para converter o conteudo em html), decription e short_decription (para indicar o que o artigo é para um usuário). Para cada Model que representa um tipo especifico de Article deve existir também um partial rhtml na pasta de views do controller cms em app/views/cms com o nome do tipo de artigo que é a interface de edição do artigo.
  24 +
  25 +Então basicamente o layout de um novo tipo de artigo ficaria assim:
  26 +
  27 +class NovoTipo < Article
  28 + def description
  29 + _('Este é um novo tipo de artigo')
  30 + end
  31 + def short_description
  32 + _('Novo tipo de artigo')
  33 + end
  34 + def to_html
  35 + #Algum código para gerar o html a partir de outras informações armazenadas
  36 + end
  37 +end
  38 +
  39 +Por padrão já existem alguns atributos que podem ser usados na geração do html para o artigo.
  40 +
  41 +* body - corpo do artigo
  42 +* name - nome do artigo
  43 +* created_at - quando o artigo foi criado
  44 +* updated_at - quando foi alterado pela última vez
  45 +
  46 +Caso seja necessário armazenar alguma informação além destas pode-se adicionar campos personalizados com o método setting_items.
  47 +
  48 +Para criar por exemplo um artigo que mostre um texto com uma lista de referêcias em separado pode-se adicionar um campo de texto usando settings_items para armazenar as referências.
  49 +
  50 +app/model/texto_com_referencia.rb
  51 +
  52 +class TextoComReferencia < Article
  53 + def description
  54 + _('Este é uma artigo com referências em separado.')
  55 + end
  56 + def short_description
  57 + _('Artigo com referêcias')
  58 + end
  59 + settings_items :referencias, :type => 'text'
  60 + def to_html
  61 + body + "<div>#{referencias}</div>"
  62 + end
  63 +end
  64 +
  65 +Então o html gerado iria adicionar ao fim do artigo as referêcias dentro de um div.
  66 +
  67 +Para a edição do nosso artigo criamos o partial em app/views/cms/_texto_com_referencia.rhtml contendo:
  68 +
  69 +<%= f.text_field('name') %>
  70 +<%= f.text_area('body') %>
  71 +<%= f.text_area('referencias') %>
  72 +
  73 +Que gera uma formulário html para que o usuário do artigo digite o nome do artigo, o texto principal e as referências
  74 +
  75 += Como criar um Block?
  76 +
  77 +Um block no Noosfero é uma caixa de conteúdo que pode ser escolhida para ser mostrada na página de um usuário/comunidade/empreendimento. Existem blocks para várias funcionalidades distintas como listar links favoritos, listar amigos, mostrar informações do usuário entre outros.
  78 +
  79 +Um novo block é um model que herda da classe Block e tem que implementar os seguintes métodos:
  80 +
  81 +* description - retorna uma string que é a descrição do bloco (este é um método de classe)
  82 +* short_description - retorna uma string que é uma descrição curta do bloco (esse é um método de classe)
  83 +* default_title - é o título padrão do bloco que pode ser mudado pelo usuário depois
  84 +* help - um texto de ajuda que aparece quando o usuário entra no modo ajuda e passa o mouse por cima do bloco
  85 +* content - retorna o conteúdo a ser exibido dentro do bloco
  86 +
  87 +O método content pode retornar uma de duas coisas: uma string com o conteúdo que deve ser exibido ou uma função lambda com código que deve ser executado no contexto da requisição. A função lambda é útil para o caso de se querer utilizar um arquivo rhtml para gerar o html em vez de colocar tudo em uma string.
  88 +
  89 +Se queremos, por exemplo, criar um bloco que mostra apenas as amigas de um usuário podemos usar o seguinte:
  90 +
  91 +class Amigas < Block
  92 + def self.description
  93 + _('Um bloco que mostra o nome de suas amigas')
  94 + end
  95 + def self.short_description
  96 + _('Bloco de amigas')
  97 + end
  98 + def default_title
  99 + _('Minhas amigas')
  100 + end
  101 + def help
  102 + _('Um bloco que mostra minhas amigas')
  103 + end
  104 + def content
  105 + '<ul>' +
  106 + owner.friends.select {|f|f.sex == 'female'}.map do |friend|
  107 + '<li>' + friend.name + '</li>'
  108 + end +
  109 + </ul>
  110 + end
  111 +end
  112 +
  113 +Depois disso é só adicionar o bloco na lista de blocos disponíveis aos usuários no controller app/controller/my_profile/profile_design_controller.rb. Se o bloco é para ser usado somente para usuários ou somente para comunidades deve ser adicionado em sua própria seção.
  114 +
  115 += Como criar uma Task?
  116 +
  117 +Uma Task é um elemento do Noosfero utilizado para gerenciar tarefas pendentes. Essas tarefas são mostradas no painel de controle do usuário/comunidade/empreendimento que deve resolvê-la. Cada tarefa pode estar em 3 estados diferentes: pendente, resolvida ou cancelada.
  118 +
  119 +A classe Task provê a infra-estrutura básica para todas as tasks do sistema, o Noosfero hoje possui tasks para as seguintes funções: adicionar amigo, entrar em comunidade moderada, alteração de senha, entre outras. Esta classe contém relacionamento com Person e Profile da seguinte forma:
  120 + _________ ______ ________
  121 + | | | | | |
  122 + | Profile |1--------*| Task |*---------1| Person |
  123 + |_________| |______| |________|
  124 +
  125 +A classe base Task possui toda a lógica necessária para a existencia de tasks como o estado da tarefa, métodos para criação e finalização, envio de notificação, envio de email caso necessário, entre outras funções. Então o que resta para as classes derivadas é implementar o método perform que fará o trabalho propriamente dito, e adicionar campos personalizados caso necessário.
  126 +
  127 +A task AddFriend por exemplo, que é uma task criada quando alguem requisita a amizade de outra pessoa, executa os seguintes passos no método perform ao ser finalizada.
  128 +
  129 +* Adiciona requisitante como amigo do requisitado e;
  130 +* Adiciona requisitado como amigo do requitante
  131 +
  132 +Para que o ciclo de criação, aceitação e finalização de uma task esteja completo é necessário implementar os controllers e as views. Para o AddFriend por exemplo temos o controller friends_controller que contém a lógica de criação da task. Para processamento desta e de todas as outras tasks temos o controller tasks_controller que contém a lógica necessária para finalizar uma task. Em views/tasks/ temos diversas views necessárias para a finalização de tasks, algumas tasks não necessitam campos especificos na sua finalização então usam a view _task.rhtml para a task AddFriend por exemplo temos o campo groups_for_friend usado para classificar um amigo no momento da aceitção da task.
  133 +
  134 +No exemplo de código abaixo vamos criar uma Task AddFriend onde o Person joão requisita amizade do Person josé:
  135 +
  136 +* joao = Person['joao']
  137 +* jose = Person['jose']
  138 +* AddFriend.create(:person => joao, :friend => jose)
  139 +
  140 +José receberá uma requisição para ser amigo de joão, se ele aceitar a requisição o método perform será executado e o relacionamento de amizade entre eles será criado.
  141 +
  142 +Vamos exemplificar como criar uma nova Task que simplesmente envia uma requisição para alguém e ao ser finalizada cria um artigo para quem aceitou a requisição.
  143 +
  144 +Vamos chamar esta task de SendArticle, para isto crie o arquivo app/models/send_article.rb com o seguinte conteudo:
  145 +
  146 +class SendArticle < Task
  147 + validates_presence_of :requestor_id, :target_id
  148 + acts_as_having_settings :name, :body, :field => :data
  149 + def perform
  150 + target.articles << TextileArticle.new(:name => name, :body => body)
  151 + end
  152 + def description
  153 + _('%s enviou um artigo para você') % requestor.name
  154 + end
  155 +end
  156 +
  157 +Esta é a infra-estrutura para nossa nova task, uma classe que herda de Task e implementa pelo menos o método perform. Este task possui 2 campos personalizados que serão utilizados para armazenar o nome e o corpo do artigo a ser criado.
  158 +
  159 +Para que seja possivel um usuario qualquer do sistema possa criar uma task dessa temos que implementar a lógica no controller e adicionar um botão na interface ou outro controle qualquer que possibilite o usuario criar, para isto vamos criar um controller.
  160 +
  161 +app/controllers/public/send_article_controller.rb
  162 +
  163 +class SendArticleController < MyProfileController
  164 + def new
  165 + @person = Person.find(params[:target_id])
  166 + @article = TextileArticle.new
  167 + if request.post? && params[:confirmation]
  168 + SendArticle.create!(:requestor_id => user.id, :target_id => @person.id)
  169 + flash[:notice] = _('%s receberá solicitação de criação deste artigo.') % @person.name
  170 + redirect_to :back
  171 + end
  172 + end
  173 +end
  174 +
  175 +Cria uma view com o form para que o usuario possa preencher o nome e o corpo do artigo a ser enviado ao criar a task.
  176 +
  177 +app/views/send_article.rhtml
  178 +
  179 +<h1><%= _('Sending article to %s') % @person.name %></h1>
  180 +<% labelled_form_for 'article', @article, :html => { :multipart => true } do |f| %>
  181 + <%= hidden_field_tag(:confirmation, 1) %>
  182 + <%= hidden_field_tag(:target_id, @person.id) %>
  183 + <%= render :partial => 'cms/textile_article', :locals => { :f => f } %>
  184 + <% button_bar do %>
  185 + <%= submit_button :save, _('Send') %>
  186 + <%= button(:cancel, _("Cancel"), :controller => 'profile', :profile => profile.identifier) %>
  187 + <% end %>
  188 +<% end %>
  189 +
  190 +Falta apenas adicionar um controle na interface para o usuário acionar este ação, vamos adicionar um botão junto aos botões de acão como adicionar amigo, entrar em comunidade, etc. em app/views/blocks/profile_info_actions/person.rhtml adicione o código abaixo.
  191 +
  192 +<li> <%= link_to content_tag('span', _('Send article')), {:profile => user.identifier, :controller => 'send_article', :action => 'new', :target_id => profile.id}, :class => 'button with-text icon-menu-mail' %> </li>
  193 +
  194 += Visão Geral do Banco de Dados
  195 +
  196 +O Noosfero é composto por 27 tabelas, listadas abaixo:
  197 +
  198 + +--------------------------------+
  199 + | Tables_in_noosfero_development |
  200 + +--------------------------------+
  201 + | article_versions |
  202 + | articles |
  203 + | articles_categories |
  204 + | blocks |
  205 + | boxes |
  206 + | categories |
  207 + | categories_profiles |
  208 + | comments |
  209 + | consumptions |
  210 + | domains |
  211 + | environments |
  212 + | favorite_enteprises_people |
  213 + | friendships |
  214 + | images |
  215 + | product_categorizations |
  216 + | products |
  217 + | profiles |
  218 + | region_validators |
  219 + | role_assignments |
  220 + | roles |
  221 + | schema_info |
  222 + | taggings |
  223 + | tags |
  224 + | tasks |
  225 + | thumbnails |
  226 + | users |
  227 + | validation_infos |
  228 + +--------------------------------+
  229 + 27 rows in set (0.00 sec)
  230 +
  231 +A seguir, faremos um relato sobre o papel de cada tabela no funcionamento do sistema:
  232 +
  233 +== article_versions
  234 +
  235 +Os artigos posssuem controle de versão e cada versão é guardada nessa tabela.
  236 +
  237 +== articles
  238 +
  239 +Artigos são todo tipo de conteúdo que pode ser criado pelo usuário. Como textos, imagens e até mesmo pastas.
  240 +
  241 +== articles_categories
  242 +
  243 +Os artigos são classificados por categorias. Esta tabela guarda as associações entre artigos e categorias.
  244 +
  245 +== blocks
  246 +
  247 +Guarda as informações relativas aos blocos, que são apresentados em boxes na página do usuário.
  248 +
  249 +== boxes
  250 +
  251 +Representa as áreas onde os usuários podem anexar seus blocos.
  252 +
  253 +== categories
  254 +
  255 +São categorias do sistema, que incluem categorias de produto e regiões.
  256 +
  257 +== categories_profiles
  258 +
  259 +Esta tabela guarda a associação entre categories e profiles.
  260 +
  261 +== comments
  262 +
  263 +Esta tabela guarda os comentários feitos nos artigos.
  264 +
  265 +== consumptions
  266 +
  267 +Representa os tipos de produtos que o usuário consome.
  268 +
  269 +== domains
  270 +
  271 +Cada ambiente pode ter um ou mais domínios, nesta tabela está armazenado o domínio do ambiente.
  272 +
  273 +== environments
  274 +
  275 +Representa cada uma das redes sociais (ou ambiente) geridas pelo Noosfero.
  276 +
  277 +== favorite_enteprises_people
  278 +
  279 +Representa os empreendimentos favoritos de um usuário.
  280 +
  281 +== friendships
  282 +
  283 +Esta tabela apresenta todos as relações de amizade.
  284 +
  285 +== images
  286 +
  287 +Guarda as informações sobre todas as imagens armazendas no sistema.
  288 +
  289 +== product_categorizations
  290 +
  291 +Representa a associação entre produtos e categorias.
  292 +
  293 +== products
  294 +
  295 +Esta tabela guarda todos os produtos dos empreendimentos do sistema.
  296 +
  297 +== profiles
  298 +
  299 +É a entidade mais importante do sistema. Representa tanto pessoas, quanto comunidades, empreeendimentos e organizações.
  300 +
  301 +== region_validators
  302 +
  303 +Relaciona as organizações validadoras com a região em que ela opera.
  304 +
  305 +== role_assignments
  306 +
  307 +Associa um papel a um usuário, dando a ele permissões sobre um determinado recurso do sistema.
  308 +
  309 +== roles
  310 +
  311 +Apresenta todos os papéis que podem ser atribuídas aos usuários e agrega quais permissões um usuário com esse papel terá.
  312 +
  313 +== schema_info
  314 +
  315 +Guarda o número da migration no Rails.
  316 +
  317 +== taggings
  318 +
  319 +Associa uma tag a um artigo.
  320 +
  321 +== tags
  322 +
  323 +Esta tabela armazena uma tag que pode ser associada a artigos.
  324 +
  325 +== tasks
  326 +
  327 +Representa uma tarefa que pode ser atribuída a um usuário, comunidade ou empreendimento.
  328 +
  329 +== thumbnails
  330 +
  331 +Guarda informações sobre miniaturas de imagens.
  332 +
  333 +== users
  334 +
  335 +Esta tabela guarda informações de login de todos os usuários do sistema.
  336 +
  337 +== validation_infos
  338 +
  339 +Guarda a metodologia de validação de uma entidade validadora.
  340 +
  341 +== Abaixo segue modelagem do Noosfero
  342 +
  343 +link:../noosfero_tabelas_article.png
  344 +
  345 +link:../noosfero_tabelas_category.png
  346 +
  347 +link:../noosfero_tabelas_profile.png
  348 +
  349 +link:../noosfero_tabelas_environment.png
  350 +
  351 +link:../noosfero_tabelas_schema.png
script/sample-data
1 #!/usr/bin/env ruby 1 #!/usr/bin/env ruby
2 require File.dirname(__FILE__) + '/../config/environment' 2 require File.dirname(__FILE__) + '/../config/environment'
3 3
  4 +system('rake db:populate')
  5 +
4 people = [] 6 people = []
5 7
6 NAMES = %w[ José João Antonio Paulo Maria Joana Paula Angela ] 8 NAMES = %w[ José João Antonio Paulo Maria Joana Paula Angela ]