Commit 1b60c137d8c3a559c74ee157265278f83bcfd529

Authored by Leandro Santos
2 parents 96ba5c75 7eb15321

Merge branch 'serpro_api' into production

Showing 41 changed files with 559 additions and 279 deletions   Show diff stats
@@ -19,13 +19,6 @@ addons: @@ -19,13 +19,6 @@ addons:
19 - libsqlite3-dev 19 - libsqlite3-dev
20 - libxslt1-dev 20 - libxslt1-dev
21 21
22 -before_install:  
23 -# FIXME: workaround while https://github.com/travis-ci/travis-ci/issues/4210 is open  
24 - - rm config/initializers/default_icon_theme.rb  
25 -# selenium support  
26 - - export DISPLAY=:99.0  
27 - - sh -e /etc/init.d/xvfb start  
28 -  
29 before_script: 22 before_script:
30 - mkdir -p tmp/pids log 23 - mkdir -p tmp/pids log
31 - bundle check || bundle install 24 - bundle check || bundle install
  1 +This list is automatically generated at release time. Please do not change it.
  2 +
1 If you are not listed here, but should be, please write to the noosfero mailing 3 If you are not listed here, but should be, please write to the noosfero mailing
2 list: http://listas.softwarelivre.org/cgi-bin/mailman/listinfo/noosfero-dev 4 list: http://listas.softwarelivre.org/cgi-bin/mailman/listinfo/noosfero-dev
3 (this list requires subscription to post, but since you are an author of 5 (this list requires subscription to post, but since you are an author of
@@ -6,280 +8,121 @@ noosfero, that's not a problem). @@ -6,280 +8,121 @@ noosfero, that's not a problem).
6 Developers 8 Developers
7 ========== 9 ==========
8 10
  11 +Ábner Silva de Oliveira <abner.oliveira@serpro.gov.br>
9 Alan Freihof Tygel <alantygel@gmail.com> 12 Alan Freihof Tygel <alantygel@gmail.com>
10 -Alessandro Palmeira + Caio C. Salgado <alessandro.palmeira@gmail.com>  
11 -Alessandro Palmeira + Caio Salgado + Diego Araújo + João M. M. da Silva <diegoamc90@gmail.com>  
12 -Alessandro Palmeira + Caio Salgado <alessandro.palmeira@gmail.com>  
13 -Alessandro Palmeira + Caio Salgado <caio.csalgado@gmail.com>  
14 -Alessandro Palmeira + Carlos Morais <alessandro.palmeira@gmail.com>  
15 -Alessandro Palmeira + Daniel Alves + Diego Araújo + Guilherme Rojas <danpaulalves@gmail.com>  
16 -Alessandro Palmeira + Daniel Alves + Diego Araújo <diegoamc90@gmail.com>  
17 -Alessandro Palmeira + Daniel Alves <alessandro.palmeira@gmail.com>  
18 -Alessandro Palmeira + Diego Araujo + Daniela Feitosa <alessandro.palmeira@gmail.com>  
19 -Alessandro Palmeira + Diego Araujo + Eduardo Morais <alessandro.palmeira@gmail.com>  
20 -Alessandro Palmeira + Diego Araujo + João M. M. da Silva + Paulo Meirelles <alessandro.palmeira@gmail.com>  
21 -Alessandro Palmeira + Diego Araujo + Rafael Manzo <alessandro.palmeira@gmail.com>  
22 -Alessandro Palmeira + Diego Araujo <alessandro.palmeira@gmail.com>  
23 -Alessandro Palmeira + Diego Araujo <diegoamc90@gmail.com>  
24 -Alessandro Palmeira + Diego Araújo + João M. M. da Silva <alessandro.palmeira@gmail.com>  
25 -Alessandro Palmeira + Diego Araújo + João M. M. da Silva <diegoamc90@gmail.com>  
26 -Alessandro Palmeira + Diego Araújo + Pedro Leal + João M. M. da Silva <diegoamc90@gmail.com>  
27 -Alessandro Palmeira + Diego Araújo + Pedro Leal <diegoamc90@gmail.com>  
28 -Alessandro Palmeira + Diego Araújo <alessandro.palmeira@gmail.com>  
29 -Alessandro Palmeira + Diego Araújo <diegoamc90@gmail.com>  
30 -Alessandro Palmeira + Eduardo Morais <alessandro.palmeira@gmail.com>  
31 -Alessandro Palmeira + Guilherme Rojas <alessandro.palmeira@gmail.com>  
32 -Alessandro Palmeira + Jefferson Fernandes <alessandro.palmeira@gmail.com>  
33 -Alessandro Palmeira + Joao M. M. da Silva + Diego Araujo <alessandro.palmeira@gmail.com>  
34 -Alessandro Palmeira + João M. M. Silva <alessandro.palmeira@gmail.com>  
35 -Alessandro Palmeira + João M. M. da Silva + Renan Teruo <alessandro.palmeira@gmail.com>  
36 -Alessandro Palmeira + João M. M. da Silva <alessandro.palmeira@gmail.com>  
37 -Alessandro Palmeira + Paulo Meirelles + João M. M. da Silva <alessandro.palmeira@gmail.com>  
38 -Alessandro Palmeira + Paulo Meirelles <alessandro.palmeira@gmail.com>  
39 -Alessandro Palmeira + Rafael Manzo <alessandro.palmeira@gmail.com>  
40 Alessandro Palmeira <alessandro.palmeira@gmail.com> 13 Alessandro Palmeira <alessandro.palmeira@gmail.com>
  14 +Alex Campelo <campelo.al1@gmail.com>
  15 +Álvaro Fernando <alvarofernandoms@gmail.com>
41 Ana Losnak <analosnak@gmail.com> 16 Ana Losnak <analosnak@gmail.com>
42 -Andre Bernardes <andrebsguedes@gmail.com>  
43 -André Bernardes <andrebsguedes@gmail.com>  
44 -André Guedes <andrebsguedes@fedora.local> 17 +Ana Paula Vargas <anapaulavnoronha@gmail.com>
  18 +Andre Bedran <bedran.fleck@gmail.com>
45 André Guedes <andrebsguedes@gmail.com> 19 André Guedes <andrebsguedes@gmail.com>
46 -Antonio Terceiro + Carlos Morais <terceiro@colivre.coop.br>  
47 -Antonio Terceiro + Paulo Meirelles <terceiro@colivre.coop.br>  
48 Antonio Terceiro <terceiro@colivre.coop.br> 20 Antonio Terceiro <terceiro@colivre.coop.br>
49 Arthur Del Esposte <arthurmde@gmail.com> 21 Arthur Del Esposte <arthurmde@gmail.com>
50 -Arthur Del Esposte <arthurmde@yahoo.com.br>  
51 Athos Ribeiro <athoscribeiro@gmail.com> 22 Athos Ribeiro <athoscribeiro@gmail.com>
52 Aurelio A. Heckert <aurelio@colivre.coop.br> 23 Aurelio A. Heckert <aurelio@colivre.coop.br>
53 Braulio Bhavamitra <braulio@eita.org.br> 24 Braulio Bhavamitra <braulio@eita.org.br>
54 -Braulio Bhavamitra <brauliobo@gmail.com>  
55 -Bráulio Bhavamitra <brauliobo@gmail.com>  
56 -Caio + Diego + Pedro + João <caio.csalgado@gmail.com>  
57 -Caio <caio.csalgado@gmail.com>  
58 Caio Formiga <caio.formiga@gmail.com> 25 Caio Formiga <caio.formiga@gmail.com>
59 -Caio SBA <caio@colivre.coop.br>  
60 -Caio Salgado + Alessandro Palmeira <caio.csalgado@gmail.com>  
61 -Caio Salgado + Carlos Morais + Diego Araújo + Pedro Leal <diegoamc90@gmail.com>  
62 -Caio Salgado + Diego Araujo <caio.csalgado@gmail.com>  
63 -Caio Salgado + Diego Araújo + Jefferson Fernandes <caio.csalgado@gmail.com>  
64 -Caio Salgado + Diego Araújo + João M. M. da Silva <caio.csalgado@gmail.com>  
65 -Caio Salgado + Diego Araújo + Pedro Leal <caio.csalgado@gmail.com>  
66 -Caio Salgado + Diego Araújo + Pedro Leal <diegoamc90@gmail.com>  
67 -Caio Salgado + Diego Araújo + Rafael Manzo <diegoamc90@gmail.com>  
68 -Caio Salgado + Diego Araújo <caio.csalgado@gmail.com>  
69 -Caio Salgado + Diego Araújo <diegoamc90@gmail.com>  
70 -Caio Salgado + Jefferson Fernandes <caio.csalgado@gmail.com>  
71 -Caio Salgado + Jefferson Fernandes <jeffs.fernandes@gmail.com>  
72 -Caio Salgado + Rafael Manzo <caio.csalgado@gmail.com>  
73 -Caio Salgado + Renan Teruo + Jefferson Fernandes <jeffs.fernandes@gmail.com>  
74 -Caio Salgado + Renan Teruo <caio.csalgado@gmail.com>  
75 -Caio Salgado + Renan Teruo <caio.salgado@gmail.com>  
76 -Caio Salgado + Renan Teruo <renanteruoc@gmail.com>  
77 Caio Salgado <caio.csalgado@gmail.com> 26 Caio Salgado <caio.csalgado@gmail.com>
  27 +Caio SBA <caio@colivre.coop.br>
78 Caio Tiago Oliveira <caiotiago@colivre.coop.br> 28 Caio Tiago Oliveira <caiotiago@colivre.coop.br>
79 -Caio, Pedro <caio.csalgado@gmail.com>  
80 Carlos Andre de Souza <carlos.andre.souza@msn.com> 29 Carlos Andre de Souza <carlos.andre.souza@msn.com>
81 -Carlos Morais + Diego Araújo <diegoamc90@gmail.com>  
82 -Carlos Morais + Eduardo Morais <carlos88morais@gmail.com>  
83 -Carlos Morais + Paulo Meirelles <carlos88morais@gmail.com>  
84 -Carlos Morais + Pedro Leal <carlos88morais@gmail.com>  
85 Carlos Morais <carlos88morais@gmail.com> 30 Carlos Morais <carlos88morais@gmail.com>
86 Christophe DANIEL <papaeng@gmail.com> 31 Christophe DANIEL <papaeng@gmail.com>
87 -Daniel Alves + Diego Araújo <danpaulalves@gmail.com>  
88 -Daniel Alves + Diego Araújo <diegoamc90@gmail.com>  
89 -Daniel Alves + Diego Araújo + Guilherme Rojas <danpaulalves@gmail.com>  
90 -Daniel Alves + Diego Araújo + Guilherme Rojas <diegoamc90@gmail.com>  
91 -Daniel Alves + Diego Araújo + Guilherme Rojas <guilhermehrojas@gmail.com>  
92 -Daniel Alves + Diego Araújo <danpaulalves@gmail.com>  
93 -Daniel Alves + Diego Araújo <diegoamc90@gmail.com>  
94 -Daniel Alves + Guilherme Rojas <danpaulalves@gmail.com>  
95 -Daniel Alves + Rafael Manzo <rr.manzo@gmail.com> 32 +Daniela Feitosa <alessandro.palmeira@gmail.com>
  33 +Daniel Alves <danpaulalves@gmail.com>
  34 +Daniela Soares Feitosa <danielafeitosa@colivre.coop.br>
96 Daniel Bucher <daniel.bucher88@gmail.com> 35 Daniel Bucher <daniel.bucher88@gmail.com>
97 Daniel Cunha <daniel@colivre.coop.br> 36 Daniel Cunha <daniel@colivre.coop.br>
98 -Daniela Soares Feitosa <danielafeitosa@colivre.coop.br> 37 +Daniel Tygel <dtygel@eita.org.br>
99 David Carlos <ddavidcarlos1392@gmail.com> 38 David Carlos <ddavidcarlos1392@gmail.com>
100 -Diego + Jefferson <diegoamc90@gmail.com>  
101 -Diego + Renan <renanteruoc@gmail.com>  
102 -Diego Araujo + Caio Salgado <diegoamc90@gmail.com>  
103 -Diego Araujo + Jefferson Fernandes <jeffs.fernandes@gmail.com>  
104 -Diego Araujo + Rafael Manzo <diegoamc90@gmail.com>  
105 -Diego Araujo + Rodrigo Souto + Rafael Manzo <rr.manzo@gmail.com>  
106 -Diego Araújo + Alessandro Palmeira + João M. M. da Silva <diegoamc90@gmail.com>  
107 -Diego Araújo + Alessandro Palmeira + Rafael Manzo <rr.manzo@gmail.com>  
108 -Diego Araújo + Alessandro Palmeira <diegoamc90@gmail.com>  
109 -Diego Araújo + Daniel Alves + Rafael Manzo <rr.manzo@gmail.com>  
110 -Diego Araújo + Eduardo Morais + Paulo Meirelles <diegoamc90@gmail.com>  
111 -Diego Araújo + Guilherme Rojas <diegoamc90@gmail.com>  
112 -Diego Araújo + Jefferson Fernandes <diegoamc90@gmail.com>  
113 -Diego Araújo + João M. M. da Silva + Alessandro Palmeira <jaodsilv@linux.ime.usp.br>  
114 -Diego Araújo + João M. M. da Silva + João Machini <diegoamc90@gmail.com>  
115 -Diego Araújo + João M. M. da Silva + Pedro Leal <diegoamc90@gmail.com>  
116 -Diego Araújo + João M. M. da Silva <diegoamc90@gmail.com>  
117 -Diego Araújo + João Machini <diegoamc90@gmail.com>  
118 -Diego Araújo + João Machini <digoamc90@gmail.com>  
119 -Diego Araújo + Paulo Meirelles <diegoamc90@gmail.com>  
120 -Diego Araújo + Pedro Leal <diegoamc90@gmail.com>  
121 -Diego Araújo + Rafael Manzo <diegoamc90@gmail.com>  
122 -Diego Araújo + Renan Teruo + Alessandro Palmeira <diegoamc90@gmail.com>  
123 -Diego Araújo + Renan Teruo <diegoamc90@gmail.com>  
124 -Diego Araújo <diegoamc90@gmail.com>  
125 -Diego Martinez <diegoamc90@gmail.com>  
126 -DylanGuedes <djmgguedes@gmail.com>  
127 -Eduardo Passos <eduardo@risa.localdomain.localhost> 39 +Diego Araujo <diegoamc90@gmail.com>
  40 +Dylan Guedes <djmgguedes@gmail.com>
  41 +Eduardo Morais
128 Eduardo Passos <eduardosteps@gmail.com> 42 Eduardo Passos <eduardosteps@gmail.com>
129 Eduardo Tourinho Edington <eduardo.edington@serpro.gov.br> 43 Eduardo Tourinho Edington <eduardo.edington@serpro.gov.br>
130 Eduardo Vital <vitaldu@gmail.com> 44 Eduardo Vital <vitaldu@gmail.com>
131 -Evandro Jr <evandrojr@gmail.com>  
132 -Evandro Junior <evandrojr@gmail.com>  
133 Evandro Magalhaes Leite Junior <evandro.leite@serpro.gov.br> 45 Evandro Magalhaes Leite Junior <evandro.leite@serpro.gov.br>
134 Fabio Teixeira <fabio1079@gmail.com> 46 Fabio Teixeira <fabio1079@gmail.com>
135 FAMMA TV NOTICIAS MEDIOS DE CO <revistafammatvmusic.oficial@gmail.com> 47 FAMMA TV NOTICIAS MEDIOS DE CO <revistafammatvmusic.oficial@gmail.com>
136 -Fabio Teixeira <fabio1079@gmail.com>  
137 Fernanda Lopes <nanda.listas+psl@gmail.com> 48 Fernanda Lopes <nanda.listas+psl@gmail.com>
138 Filipe Ribeiro <firibeiro77@live.com> 49 Filipe Ribeiro <firibeiro77@live.com>
139 -Francisco Marcelo A. Lima Júnior <francisco.lima-junior@serpro.gov.br>  
140 -Francisco Marcelo de Araujo Lima Junior <79350259591@serpro-1457614.(none)>  
141 Francisco Marcelo de Araújo Lima Júnior <francisco.lima-junior@serpro.gov.br> 50 Francisco Marcelo de Araújo Lima Júnior <francisco.lima-junior@serpro.gov.br>
142 -Francisco Marcelo de Araújo Lima Júnior <maljunior@gmail.com>  
143 Gabriela Navarro <navarro1703@gmail.com> 51 Gabriela Navarro <navarro1703@gmail.com>
144 Gonzalo Exequiel Pedone <hipersayan.x@gmail.com> 52 Gonzalo Exequiel Pedone <hipersayan.x@gmail.com>
145 Grazieno Pellegrino <grazieno@gmail.com> 53 Grazieno Pellegrino <grazieno@gmail.com>
146 -Gust <darksshades@hotmail.com> 54 +Guilherme C. Muniz <guilherme.cmuniz@gmail.com>
  55 +Guilherme Rojas <guilhermehrojas@gmail.com>
  56 +Gustavo Jaruga <darksshades@gmail.com>
147 Hebert Douglas <hebertdougl@gmail.com> 57 Hebert Douglas <hebertdougl@gmail.com>
148 Hugo Melo <hugo@riseup.net> 58 Hugo Melo <hugo@riseup.net>
  59 +Iolane Andrade <andrade.icaa@gmail.com>
149 Isaac Canan <isaac@intelletto.com.br> 60 Isaac Canan <isaac@intelletto.com.br>
150 Italo Valcy <italo@dcc.ufba.br> 61 Italo Valcy <italo@dcc.ufba.br>
151 -Jefferson Fernandes + Diego Araujo + Rafael Manzo <jeffs.fernandes@gmail.com>  
152 -Jefferson Fernandes + Joao M. M. Silva <jeffs.fernandes@gmail.com>  
153 -Jefferson Fernandes + Joao M. M. da Silva <jeffs.fernandes@gmail.com>  
154 -Joao M. M. Silva + Jefferson Fernandes <jaodsilv@linux.ime.usp.br>  
155 -Joao M. M. da Silva + Alessandro Palmeira <jaodsilv@linux.ime.usp.br>  
156 -Joao M. M. da Silva + Jefferson Fernandes <jaodsilv@linux.ime.usp.br> 62 +Jefferson Fernandes <jeffs.fernandes@gmail.com>
  63 +Jérôme Jutteau <j.jutteau@gmail.com>
  64 +João Machini
  65 +João M. M. da Silva <jaodsilv@linux.ime.usp.br>
157 Joenio Costa <joenio@colivre.coop.br> 66 Joenio Costa <joenio@colivre.coop.br>
158 -Jose Pedro <1jpsneto@gmail.com>  
159 Josef Spillner <josef.spillner@tu-dresden.de> 67 Josef Spillner <josef.spillner@tu-dresden.de>
160 -João M. M. Silva + Caio Salgado <jaodsilv@linux.ime.usp.br>  
161 -João M. M. Silva + Diego Araújo <jaodsilv@linux.ime.usp.br>  
162 -João M. M. Silva + Paulo Meirelles <jaodsilv@linux.ime.usp.br>  
163 -João M. M. Silva + Rafael Manzo <jaodsilv@linux.ime.usp.br>  
164 -João M. M. Silva + Renan Teruo <jaodsilv@linux.ime.usp.br>  
165 -João M. M. da Silva + Alessandro Palmeira + Diego Araújo + Caio Salgado <jaodsilv@linux.ime.usp.br>  
166 -João M. M. da Silva + Alessandro Palmeira + Diego Araújo <jaodsilv@linux.ime.usp.br>  
167 -João M. M. da Silva + Alessandro Palmeira + João Machini <jaodsilv@linux.ime.usp.br>  
168 -João M. M. da Silva + Alessandro Palmeira <jaodsilv@linux.ime.usp.br>  
169 -João M. M. da Silva + Caio Salgado + Alessandro Palmeira <jaodsilv@linux.ime.usp.br>  
170 -João M. M. da Silva + Caio Salgado <jaodsilv@linux.ime.usp.br>  
171 -João M. M. da Silva + Carlos Morais <jaodsilv@linux.ime.usp.br>  
172 -João M. M. da Silva + Diego Araújo + Pedro Leal <jaodsilv@linux.ime.usp.br>  
173 -João M. M. da Silva + Diego Araújo <diegoamc90@gmail.com>  
174 -João M. M. da Silva + Diego Araújo <jaodsilv@linux.ime.usp.br>  
175 -João M. M. da Silva + Jefferson Fernandes <jaodsilv@linux.ime.usp.br>  
176 -João M. M. da Silva + João M. Miranda <jaodsilv@linux.ime.usp.br>  
177 -João M. M. da Silva + Paulo Meirelles <jaodsilv@linux.ime.usp.br>  
178 -João M. M. da Silva + Pedro Leal <jaodsilv@linux.ime.usp.br>  
179 -João M. M. da Silva + Rafael Manzo + Diego Araújo <jaodsilv@linux.ime.usp.br>  
180 -João M. M. da Silva + Rafael Manzo <jaodsilv@linux.ime.usp.br>  
181 -João M. M. da Silva + Renan Teruo <jaodsilv@linux.ime.usp.br>  
182 -João M. M. da Silva <jaodsilv@linux.ime.usp.br>  
183 -João Marco Maciel da Silva + Rafael Manzo + Renan Teruo <jaodsilv@linux.ime.usp.br>  
184 -João da Silva + Eduardo Morais + Rafael Manzo <rr.manzo@gmail.com>  
185 -João da Silva <jaodsilv@linux.ime.usp.br>  
186 -Junior Silva <junior@bajor.localhost.localdomain>  
187 -Junior Silva <junior@sedeantigo.colivre.coop.br> 68 +Jose Pedro <1jpsneto@gmail.com>
188 Junior Silva <juniorsilva1001@gmail.com> 69 Junior Silva <juniorsilva1001@gmail.com>
189 -Junior Silva <juniorsilva7@juniorsilva-Aspire-5750Z.(none)>  
190 -Junior Silva <juniorsilva@colivre.coop.br>  
191 -Jérôme Jutteau <j.jutteau@gmail.com>  
192 Keilla Menezes <keilla@colivre.coop.br> 70 Keilla Menezes <keilla@colivre.coop.br>
193 Larissa Reis <larissa@colivre.coop.br> 71 Larissa Reis <larissa@colivre.coop.br>
194 -Larissa Reis <reiss.larissa@gmail.com>  
195 Leandro Alves <leandrosustenido@gmail.com> 72 Leandro Alves <leandrosustenido@gmail.com>
196 -Leandro Nunes dos Santos <81665687568@serpro-1541727.(none)>  
197 -Leandro Nunes dos Santos <81665687568@serpro-1541727.Home>  
198 Leandro Nunes dos Santos <leandro.santos@serpro.gov.br> 73 Leandro Nunes dos Santos <leandro.santos@serpro.gov.br>
199 -Leandro Nunes dos Santos <leandronunes@gmail.com> 74 +Leandro Veloso <leandrovelosorodrigues@gmail.com>
200 LinguÁgil 2010 <linguagil.bahia@gmail.com> 75 LinguÁgil 2010 <linguagil.bahia@gmail.com>
  76 +Lucas Couto <loc.unb@gmail.com>
201 Lucas Kanashiro <kanashiro.duarte@gmail.com> 77 Lucas Kanashiro <kanashiro.duarte@gmail.com>
202 -Lucas Melo <lucas@colivre.coop.br>  
203 Lucas Melo <lucaspradomelo@gmail.com> 78 Lucas Melo <lucaspradomelo@gmail.com>
204 -Luciano <lucianopcbr@gmail.com>  
205 -Luciano Prestes Cavacanti <lucianopcbr@gmail.com>  
206 Luciano Prestes Cavalcanti <lucianopcbr@gmail.com> 79 Luciano Prestes Cavalcanti <lucianopcbr@gmail.com>
207 Luis David Aguilar Carlos <ludwig9003@gmail.com> 80 Luis David Aguilar Carlos <ludwig9003@gmail.com>
208 Luiz Fernando de Freitas Matos <luiz@luizff.matos@gmail.com> 81 Luiz Fernando de Freitas Matos <luiz@luizff.matos@gmail.com>
209 -M for Momo <mo@rtnp.org>  
210 -Marcelo Júnior <maljunior@gmail.com>  
211 -Marcos <marcos.rpj2@gmail.com> 82 +Luiz Matos <luizff.matos@gmail.com>
212 Marcos Ramos <ms.ramos@outlook.com> 83 Marcos Ramos <ms.ramos@outlook.com>
  84 +Marcos Ronaldo <marcos.rpj2@gmail.com>
  85 +Mariel Zasso <noosfero-br@listas.softwarelivre.org>
213 Martín Olivera <molivera@solar.org.ar> 86 Martín Olivera <molivera@solar.org.ar>
  87 +Matheus Faria <matheus.sousa.faria@gmail.com>
214 Maurilio Atila <cabelotaina@gmail.com> 88 Maurilio Atila <cabelotaina@gmail.com>
  89 +M for Momo <mo@rtnp.org>
215 Michal Čihař <michal@cihar.com> 90 Michal Čihař <michal@cihar.com>
216 Michel Felipe <mfelipeof@gmail.com> 91 Michel Felipe <mfelipeof@gmail.com>
217 Moises Machado <moises@colivre.coop.br> 92 Moises Machado <moises@colivre.coop.br>
218 -Nanda Lopes <nanda.listas+psl@gmail.com>  
219 Naíla Alves <naila@colivre.coop.br> 93 Naíla Alves <naila@colivre.coop.br>
  94 +Nanda Lopes <nanda.listas+psl@gmail.com>
220 Niemand Jedermann <predatorix@web.de> 95 Niemand Jedermann <predatorix@web.de>
221 Parley Martins <parleypachecomartins@gmail.com> 96 Parley Martins <parleypachecomartins@gmail.com>
222 -Paulo Meirelles + Alessandro Palmeira + João M. M. da Silva <paulo@softwarelivre.org>  
223 -Paulo Meirelles + Alessandro Palmeira <paulo@softwarelivre.org>  
224 -Paulo Meirelles + Carlos Morais <paulo@softwarelivre.org>  
225 -Paulo Meirelles + Diego Araújo <paulo@softwarelivre.org>  
226 -Paulo Meirelles + João M. M. da Silva <paulo@softwarelivre.org>  
227 -Paulo Meirelles + Rafael Manzo <paulo@softwarelivre.org>  
228 Paulo Meirelles <paulo@softwarelivre.org> 97 Paulo Meirelles <paulo@softwarelivre.org>
  98 +Pedro de Lyra <pedrodelyra@gmail.com>
  99 +Pedro Leal
  100 +Rafael de Souza Queiroz <querafael@live.com>
229 Rafael Gomes <rafaelgomes@techfree.com.br> 101 Rafael Gomes <rafaelgomes@techfree.com.br>
230 -Rafael Manzo + Alessandro Palmeira <rr.manzo@gmail.com>  
231 -Rafael Manzo + Daniel Alves <danpaulalves@gmail.com>  
232 -Rafael Manzo + Diego Araújo <rr.manzo@gmail.com>  
233 -Rafael Manzo + João M. M. Silva <rr.manzo@gmail.com>  
234 -Rafael Manzo + Paulo Meirelles <rr.manzo@gmail.com>  
235 Rafael Martins <rmmartins@gmail.com> 102 Rafael Martins <rmmartins@gmail.com>
236 -Rafael Reggiani Manzo + Caio Salgado + Jefferson Fernandes <rr.manzo@gmail.com>  
237 -Rafael Reggiani Manzo + Diego Araujo <diegoamc90@gmail.com>  
238 -Rafael Reggiani Manzo + Diego Araujo <rr.manzo@gmail.com>  
239 -Rafael Reggiani Manzo + Diego Araújo <rr.manzo@gmail.com>  
240 -Rafael Reggiani Manzo + João M. M. da Silva <rr.manzo@gmail.com>  
241 Rafael Reggiani Manzo <rr.manzo@gmail.com> 103 Rafael Reggiani Manzo <rr.manzo@gmail.com>
242 Raphaël Rousseau <raph@r4f.org> 104 Raphaël Rousseau <raph@r4f.org>
243 -Raquel <rcordioli@gmail.com>  
244 Raquel Lira <raquel.lira@gmail.com> 105 Raquel Lira <raquel.lira@gmail.com>
245 -Renan Teruo + Caio Salgado <renanteruoc@gmail.com>  
246 -Renan Teruo + Diego Araujo <renanteruoc@gmail.com>  
247 -Renan Teruo + Diego Araújo <renanteruoc@gmail.com>  
248 -Renan Teruo + Paulo Meirelles <renanteruoc@gmail.com>  
249 -Renan Teruo + Rafael Manzo <renanteruoc@gmail.com>  
250 -Renan Teruoc + Diego Araujo <renanteruoc@gmail.com>  
251 -Rodrigo Souto + Ana Losnak + Daniel Bucher + Caio Almeida + Leandro Nunes + Daniela Feitosa + Mariel Zasso <noosfero-br@listas.softwarelivre.org> 106 +Raquel <rcordioli@gmail.com>
  107 +Renan Costa <renan2727@hotmail.com>
  108 +Renan Teruo <renanteruoc@gmail.com>
  109 +Rodrigo Medeiros <rodrigo.mss01@gmail.com>
252 Rodrigo Souto <rodrigo@colivre.coop.br> 110 Rodrigo Souto <rodrigo@colivre.coop.br>
253 Ronny Kursawe <kursawe.ronny@googlemail.com> 111 Ronny Kursawe <kursawe.ronny@googlemail.com>
254 Samuel R. C. Vale <srcvale@holoscopio.com> 112 Samuel R. C. Vale <srcvale@holoscopio.com>
255 -TWS <tablettws@gmail.com>  
256 -Tallys Martins <tallysmartins@gmail.com>  
257 Tallys Martins <tallysmartins@yahoo.com.br> 113 Tallys Martins <tallysmartins@yahoo.com.br>
258 Thiago Casotti <thiago.casotti@uol.com.br> 114 Thiago Casotti <thiago.casotti@uol.com.br>
  115 +Thiago Kairala <thiagor.kairala@gmail.com>
259 Thiago Ribeiro <thiagitosouza@hotmail.com> 116 Thiago Ribeiro <thiagitosouza@hotmail.com>
260 Thiago Zoroastro <thiago.zoroastro@bol.com.br> 117 Thiago Zoroastro <thiago.zoroastro@bol.com.br>
261 Tuux <tuxa@galaxie.eu.org> 118 Tuux <tuxa@galaxie.eu.org>
  119 +TWS <tablettws@gmail.com>
262 Valessio Brito <contato@valessiobrito.com.br> 120 Valessio Brito <contato@valessiobrito.com.br>
263 -Valessio Brito <contato@valessiobrito.info>  
264 -Valessio Brito <valessio@gmail.com>  
265 -Victor Carvalho <victorhugodf.ac@gmail.com>  
266 Victor Costa <vfcosta@gmail.com> 121 Victor Costa <vfcosta@gmail.com>
267 Victor Hugo Alves de Carvalho <victorhugodf.ac@gmail.com> 122 Victor Hugo Alves de Carvalho <victorhugodf.ac@gmail.com>
268 Vinicius Cubas Brand <viniciuscb@gmail.com> 123 Vinicius Cubas Brand <viniciuscb@gmail.com>
269 -Visita <visita@debian.(none)> 124 +Wilton Rodrigues <braynwilton@gmail.com>
270 Yann Lugrin <yann.lugrin@liquid-concept.ch> 125 Yann Lugrin <yann.lugrin@liquid-concept.ch>
271 -alcampelo <alcampelo@alcampelo.(none)>  
272 -analosnak <analosnak@gmail.com>  
273 -daniel <dtygel@eita.org.br>  
274 -diegoamc <diegoamc90@gmail.com>  
275 -dtygel <dtygel@gmail.com>  
276 -juniorsilva <juniorsilva@QonoS.localhost.localdomain>  
277 -root <root@17edebf1ae91>  
278 -root <root@debian.sdr.serpro>  
279 -tallys <tallys@tallys.(none)>  
280 -tallys <tallys@tallys>  
281 -vfcosta <vfcosta@gmail.com>  
282 -Ábner Silva de Oliveira <abner.oliveira@serpro.gov.br>  
283 126
284 Ideas, specifications and incentive 127 Ideas, specifications and incentive
285 =================================== 128 ===================================
@@ -19,11 +19,13 @@ gem &#39;gettext&#39;, &#39;~&gt; 2.2.1&#39;, :require =&gt; false @@ -19,11 +19,13 @@ gem &#39;gettext&#39;, &#39;~&gt; 2.2.1&#39;, :require =&gt; false
19 gem 'locale', '~> 2.0.5' 19 gem 'locale', '~> 2.0.5'
20 gem 'whenever', :require => false 20 gem 'whenever', :require => false
21 gem 'eita-jrails', '~> 0.9.5', require: 'jrails' 21 gem 'eita-jrails', '~> 0.9.5', require: 'jrails'
22 -gem 'grape', '~> 0.11.0' 22 +
  23 +# API dependencies
  24 +gem 'grape', '~> 0.12'
23 gem 'grape-entity' 25 gem 'grape-entity'
24 -gem 'grape-swagger'  
25 -gem 'grape_logging'  
26 -gem 'api-pagination', '~> 4.1.1' 26 +#FIXME Get the Grape Loggin from master yo solve this issue https://github.com/intridea/grape/issues/1059
  27 +#We have to remove this commit referenve code when update the next release of grape_logging. Actualy we are using (1.1.2)
  28 +gem 'grape_logging', :git => 'https://github.com/aceunreal/grape_logging.git', :ref => '100091b'
27 gem 'rack-cors' 29 gem 'rack-cors'
28 gem 'rack-contrib' 30 gem 'rack-contrib'
29 gem 'liquid', '~> 3.0.3' 31 gem 'liquid', '~> 3.0.3'
@@ -32,8 +34,7 @@ gem &#39;liquid&#39;, &#39;~&gt; 3.0.3&#39; @@ -32,8 +34,7 @@ gem &#39;liquid&#39;, &#39;~&gt; 3.0.3&#39;
32 # FIXME list here all actual dependencies (i.e. the ones in debian/control), 34 # FIXME list here all actual dependencies (i.e. the ones in debian/control),
33 # with their GEM names (not the Debian package names) 35 # with their GEM names (not the Debian package names)
34 36
35 -# FIXME list here all actual dependencies (i.e. the ones in debian/control),  
36 -# with their GEM names (not the Debian package names) 37 +gem 'api-pagination', '~> 4.1.1'
37 38
38 # asset pipeline 39 # asset pipeline
39 gem 'uglifier', '>= 1.0.3' 40 gem 'uglifier', '>= 1.0.3'
app/models/article.rb
@@ -510,9 +510,9 @@ class Article &lt; ActiveRecord::Base @@ -510,9 +510,9 @@ class Article &lt; ActiveRecord::Base
510 where( 510 where(
511 [ 511 [
512 "published = ? OR last_changed_by_id = ? OR profile_id = ? OR ? 512 "published = ? OR last_changed_by_id = ? OR profile_id = ? OR ?
513 - OR (show_to_followers = ? AND ? AND profile_id = ?)", true, user.id, user.id, 513 + OR (show_to_followers = ? AND ? AND profile_id IN (?))", true, user.id, user.id,
514 profile.nil? ? false : user.has_permission?(:view_private_content, profile), 514 profile.nil? ? false : user.has_permission?(:view_private_content, profile),
515 - true, user.follows?(profile), (profile.nil? ? nil : profile.id) 515 + true, (profile.nil? ? true : user.follows?(profile)), ( profile.nil? ? (user.friends.select('profiles.id')) : [profile.id])
516 ] 516 ]
517 ) 517 )
518 } 518 }
@@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@
11 # 11 #
12 # It's strongly recommended to check this file into your version control system. 12 # It's strongly recommended to check this file into your version control system.
13 13
14 -ActiveRecord::Schema.define(:version => 20150603182105) do 14 +ActiveRecord::Schema.define(:version => 20150712194411) do
15 15
16 create_table "abuse_reports", :force => true do |t| 16 create_table "abuse_reports", :force => true do |t|
17 t.integer "reporter_id" 17 t.integer "reporter_id"
@@ -48,6 +48,18 @@ ActiveRecord::Schema.define(:version =&gt; 20150603182105) do @@ -48,6 +48,18 @@ ActiveRecord::Schema.define(:version =&gt; 20150603182105) do
48 add_index "action_tracker_notifications", ["profile_id", "action_tracker_id"], :name => "index_action_tracker_notif_on_prof_id_act_tracker_id", :unique => true 48 add_index "action_tracker_notifications", ["profile_id", "action_tracker_id"], :name => "index_action_tracker_notif_on_prof_id_act_tracker_id", :unique => true
49 add_index "action_tracker_notifications", ["profile_id"], :name => "index_action_tracker_notifications_on_profile_id" 49 add_index "action_tracker_notifications", ["profile_id"], :name => "index_action_tracker_notifications_on_profile_id"
50 50
  51 + create_table "article_followers", :force => true do |t|
  52 + t.integer "person_id", :null => false
  53 + t.integer "article_id", :null => false
  54 + t.datetime "since"
  55 + t.datetime "created_at", :null => false
  56 + t.datetime "updated_at", :null => false
  57 + end
  58 +
  59 + add_index "article_followers", ["article_id"], :name => "index_article_followers_on_article_id"
  60 + add_index "article_followers", ["person_id", "article_id"], :name => "index_article_followers_on_person_id_and_article_id", :unique => true
  61 + add_index "article_followers", ["person_id"], :name => "index_article_followers_on_person_id"
  62 +
51 create_table "article_privacy_exceptions", :id => false, :force => true do |t| 63 create_table "article_privacy_exceptions", :id => false, :force => true do |t|
52 t.integer "article_id" 64 t.integer "article_id"
53 t.integer "person_id" 65 t.integer "person_id"
@@ -75,8 +87,8 @@ ActiveRecord::Schema.define(:version =&gt; 20150603182105) do @@ -75,8 +87,8 @@ ActiveRecord::Schema.define(:version =&gt; 20150603182105) do
75 t.integer "comments_count" 87 t.integer "comments_count"
76 t.boolean "advertise", :default => true 88 t.boolean "advertise", :default => true
77 t.boolean "published", :default => true 89 t.boolean "published", :default => true
78 - t.date "start_date"  
79 - t.date "end_date" 90 + t.datetime "start_date"
  91 + t.datetime "end_date"
80 t.integer "children_count", :default => 0 92 t.integer "children_count", :default => 0
81 t.boolean "accept_comments", :default => true 93 t.boolean "accept_comments", :default => true
82 t.integer "reference_article_id" 94 t.integer "reference_article_id"
@@ -127,8 +139,8 @@ ActiveRecord::Schema.define(:version =&gt; 20150603182105) do @@ -127,8 +139,8 @@ ActiveRecord::Schema.define(:version =&gt; 20150603182105) do
127 t.integer "comments_count", :default => 0 139 t.integer "comments_count", :default => 0
128 t.boolean "advertise", :default => true 140 t.boolean "advertise", :default => true
129 t.boolean "published", :default => true 141 t.boolean "published", :default => true
130 - t.date "start_date"  
131 - t.date "end_date" 142 + t.datetime "start_date"
  143 + t.datetime "end_date"
132 t.integer "children_count", :default => 0 144 t.integer "children_count", :default => 0
133 t.boolean "accept_comments", :default => true 145 t.boolean "accept_comments", :default => true
134 t.integer "reference_article_id" 146 t.integer "reference_article_id"
@@ -151,6 +163,8 @@ ActiveRecord::Schema.define(:version =&gt; 20150603182105) do @@ -151,6 +163,8 @@ ActiveRecord::Schema.define(:version =&gt; 20150603182105) do
151 t.integer "author_id" 163 t.integer "author_id"
152 t.integer "created_by_id" 164 t.integer "created_by_id"
153 t.boolean "show_to_followers", :default => true 165 t.boolean "show_to_followers", :default => true
  166 + t.integer "sash_id"
  167 + t.integer "level", :default => 0
154 end 168 end
155 169
156 add_index "articles", ["comments_count"], :name => "index_articles_on_comments_count" 170 add_index "articles", ["comments_count"], :name => "index_articles_on_comments_count"
@@ -177,6 +191,17 @@ ActiveRecord::Schema.define(:version =&gt; 20150603182105) do @@ -177,6 +191,17 @@ ActiveRecord::Schema.define(:version =&gt; 20150603182105) do
177 add_index "articles_categories", ["article_id"], :name => "index_articles_categories_on_article_id" 191 add_index "articles_categories", ["article_id"], :name => "index_articles_categories_on_article_id"
178 add_index "articles_categories", ["category_id"], :name => "index_articles_categories_on_category_id" 192 add_index "articles_categories", ["category_id"], :name => "index_articles_categories_on_category_id"
179 193
  194 + create_table "badges_sashes", :force => true do |t|
  195 + t.integer "badge_id"
  196 + t.integer "sash_id"
  197 + t.boolean "notified_user", :default => false
  198 + t.datetime "created_at"
  199 + end
  200 +
  201 + add_index "badges_sashes", ["badge_id", "sash_id"], :name => "index_badges_sashes_on_badge_id_and_sash_id"
  202 + add_index "badges_sashes", ["badge_id"], :name => "index_badges_sashes_on_badge_id"
  203 + add_index "badges_sashes", ["sash_id"], :name => "index_badges_sashes_on_sash_id"
  204 +
180 create_table "blocks", :force => true do |t| 205 create_table "blocks", :force => true do |t|
181 t.string "title" 206 t.string "title"
182 t.integer "box_id" 207 t.integer "box_id"
@@ -272,8 +297,10 @@ ActiveRecord::Schema.define(:version =&gt; 20150603182105) do @@ -272,8 +297,10 @@ ActiveRecord::Schema.define(:version =&gt; 20150603182105) do
272 t.string "referrer" 297 t.string "referrer"
273 t.text "settings" 298 t.text "settings"
274 t.integer "paragraph_id" 299 t.integer "paragraph_id"
  300 + t.string "paragraph_uuid"
275 end 301 end
276 302
  303 + add_index "comments", ["paragraph_uuid"], :name => "index_comments_on_paragraph_uuid"
277 add_index "comments", ["source_id", "spam"], :name => "index_comments_on_source_id_and_spam" 304 add_index "comments", ["source_id", "spam"], :name => "index_comments_on_source_id_and_spam"
278 305
279 create_table "contact_lists", :force => true do |t| 306 create_table "contact_lists", :force => true do |t|
@@ -313,6 +340,17 @@ ActiveRecord::Schema.define(:version =&gt; 20150603182105) do @@ -313,6 +340,17 @@ ActiveRecord::Schema.define(:version =&gt; 20150603182105) do
313 add_index "domains", ["owner_id", "owner_type", "is_default"], :name => "index_domains_on_owner_id_and_owner_type_and_is_default" 340 add_index "domains", ["owner_id", "owner_type", "is_default"], :name => "index_domains_on_owner_id_and_owner_type_and_is_default"
314 add_index "domains", ["owner_id", "owner_type"], :name => "index_domains_on_owner_id_and_owner_type" 341 add_index "domains", ["owner_id", "owner_type"], :name => "index_domains_on_owner_id_and_owner_type"
315 342
  343 + create_table "email_templates", :force => true do |t|
  344 + t.string "name"
  345 + t.string "template_type"
  346 + t.string "subject"
  347 + t.text "body"
  348 + t.integer "owner_id"
  349 + t.string "owner_type"
  350 + t.datetime "created_at", :null => false
  351 + t.datetime "updated_at", :null => false
  352 + end
  353 +
316 create_table "environments", :force => true do |t| 354 create_table "environments", :force => true do |t|
317 t.string "name" 355 t.string "name"
318 t.string "contact_email" 356 t.string "contact_email"
@@ -332,6 +370,7 @@ ActiveRecord::Schema.define(:version =&gt; 20150603182105) do @@ -332,6 +370,7 @@ ActiveRecord::Schema.define(:version =&gt; 20150603182105) do
332 t.string "default_language" 370 t.string "default_language"
333 t.string "noreply_email" 371 t.string "noreply_email"
334 t.string "redirection_after_signup", :default => "keep_on_same_page" 372 t.string "redirection_after_signup", :default => "keep_on_same_page"
  373 + t.text "send_email_plugin_allow_to"
335 t.string "date_format", :default => "month_name_with_year" 374 t.string "date_format", :default => "month_name_with_year"
336 end 375 end
337 376
@@ -368,6 +407,17 @@ ActiveRecord::Schema.define(:version =&gt; 20150603182105) do @@ -368,6 +407,17 @@ ActiveRecord::Schema.define(:version =&gt; 20150603182105) do
368 add_index "friendships", ["person_id", "friend_id"], :name => "index_friendships_on_person_id_and_friend_id" 407 add_index "friendships", ["person_id", "friend_id"], :name => "index_friendships_on_person_id_and_friend_id"
369 add_index "friendships", ["person_id"], :name => "index_friendships_on_person_id" 408 add_index "friendships", ["person_id"], :name => "index_friendships_on_person_id"
370 409
  410 + create_table "gamification_plugin_badges", :force => true do |t|
  411 + t.string "name"
  412 + t.integer "level"
  413 + t.string "description"
  414 + t.string "custom_fields"
  415 + t.integer "owner_id"
  416 + t.string "owner_type"
  417 + t.datetime "created_at", :null => false
  418 + t.datetime "updated_at", :null => false
  419 + end
  420 +
371 create_table "images", :force => true do |t| 421 create_table "images", :force => true do |t|
372 t.integer "parent_id" 422 t.integer "parent_id"
373 t.string "content_type" 423 t.string "content_type"
@@ -424,6 +474,46 @@ ActiveRecord::Schema.define(:version =&gt; 20150603182105) do @@ -424,6 +474,46 @@ ActiveRecord::Schema.define(:version =&gt; 20150603182105) do
424 t.datetime "updated_at" 474 t.datetime "updated_at"
425 end 475 end
426 476
  477 + create_table "mark_comment_as_read_plugin", :force => true do |t|
  478 + t.integer "comment_id"
  479 + t.integer "person_id"
  480 + end
  481 +
  482 + add_index "mark_comment_as_read_plugin", ["comment_id", "person_id"], :name => "index_mark_comment_as_read_plugin_on_comment_id_and_person_id", :unique => true
  483 +
  484 + create_table "merit_actions", :force => true do |t|
  485 + t.integer "user_id"
  486 + t.string "action_method"
  487 + t.integer "action_value"
  488 + t.boolean "had_errors", :default => false
  489 + t.string "target_model"
  490 + t.integer "target_id"
  491 + t.text "target_data"
  492 + t.boolean "processed", :default => false
  493 + t.datetime "created_at", :null => false
  494 + t.datetime "updated_at", :null => false
  495 + end
  496 +
  497 + create_table "merit_activity_logs", :force => true do |t|
  498 + t.integer "action_id"
  499 + t.string "related_change_type"
  500 + t.integer "related_change_id"
  501 + t.string "description"
  502 + t.datetime "created_at"
  503 + end
  504 +
  505 + create_table "merit_score_points", :force => true do |t|
  506 + t.integer "score_id"
  507 + t.integer "num_points", :default => 0
  508 + t.string "log"
  509 + t.datetime "created_at"
  510 + end
  511 +
  512 + create_table "merit_scores", :force => true do |t|
  513 + t.integer "sash_id"
  514 + t.string "category", :default => "default"
  515 + end
  516 +
427 create_table "national_region_types", :force => true do |t| 517 create_table "national_region_types", :force => true do |t|
428 t.string "name" 518 t.string "name"
429 end 519 end
@@ -440,6 +530,15 @@ ActiveRecord::Schema.define(:version =&gt; 20150603182105) do @@ -440,6 +530,15 @@ ActiveRecord::Schema.define(:version =&gt; 20150603182105) do
440 add_index "national_regions", ["name"], :name => "name_index" 530 add_index "national_regions", ["name"], :name => "name_index"
441 add_index "national_regions", ["national_region_code"], :name => "code_index" 531 add_index "national_regions", ["national_region_code"], :name => "code_index"
442 532
  533 + create_table "pairwise_plugin_choices_related", :force => true do |t|
  534 + t.integer "choice_id"
  535 + t.integer "parent_choice_id"
  536 + t.integer "question_id"
  537 + t.integer "user_id"
  538 + t.datetime "created_at", :null => false
  539 + t.datetime "updated_at", :null => false
  540 + end
  541 +
443 create_table "price_details", :force => true do |t| 542 create_table "price_details", :force => true do |t|
444 t.decimal "price", :default => 0.0 543 t.decimal "price", :default => 0.0
445 t.integer "product_id" 544 t.integer "product_id"
@@ -547,15 +646,37 @@ ActiveRecord::Schema.define(:version =&gt; 20150603182105) do @@ -547,15 +646,37 @@ ActiveRecord::Schema.define(:version =&gt; 20150603182105) do
547 t.boolean "allow_members_to_invite", :default => true 646 t.boolean "allow_members_to_invite", :default => true
548 t.boolean "invite_friends_only", :default => false 647 t.boolean "invite_friends_only", :default => false
549 t.boolean "secret", :default => false 648 t.boolean "secret", :default => false
  649 + t.integer "sash_id"
  650 + t.integer "level", :default => 0
550 end 651 end
551 652
552 add_index "profiles", ["activities_count"], :name => "index_profiles_on_activities_count" 653 add_index "profiles", ["activities_count"], :name => "index_profiles_on_activities_count"
553 add_index "profiles", ["created_at"], :name => "index_profiles_on_created_at" 654 add_index "profiles", ["created_at"], :name => "index_profiles_on_created_at"
  655 + add_index "profiles", ["enabled"], :name => "index_profiles_on_enabled"
554 add_index "profiles", ["environment_id"], :name => "index_profiles_on_environment_id" 656 add_index "profiles", ["environment_id"], :name => "index_profiles_on_environment_id"
555 add_index "profiles", ["friends_count"], :name => "index_profiles_on_friends_count" 657 add_index "profiles", ["friends_count"], :name => "index_profiles_on_friends_count"
556 add_index "profiles", ["identifier"], :name => "index_profiles_on_identifier" 658 add_index "profiles", ["identifier"], :name => "index_profiles_on_identifier"
557 add_index "profiles", ["members_count"], :name => "index_profiles_on_members_count" 659 add_index "profiles", ["members_count"], :name => "index_profiles_on_members_count"
558 add_index "profiles", ["region_id"], :name => "index_profiles_on_region_id" 660 add_index "profiles", ["region_id"], :name => "index_profiles_on_region_id"
  661 + add_index "profiles", ["type"], :name => "index_profiles_on_type"
  662 + add_index "profiles", ["validated"], :name => "index_profiles_on_validated"
  663 + add_index "profiles", ["visible"], :name => "index_profiles_on_visible"
  664 +
  665 + create_table "proposals_discussion_plugin_proposal_evaluations", :force => true do |t|
  666 + t.integer "proposal_task_id"
  667 + t.integer "evaluator_id"
  668 + t.integer "flagged_status"
  669 + t.datetime "created_at", :null => false
  670 + t.datetime "updated_at", :null => false
  671 + end
  672 +
  673 + add_index "proposals_discussion_plugin_proposal_evaluations", ["evaluator_id"], :name => "index_proposals_discussion_plugin_proposal_evaluator_id"
  674 + add_index "proposals_discussion_plugin_proposal_evaluations", ["proposal_task_id"], :name => "index_proposals_discussion_plugin_proposal_task_id"
  675 +
  676 + create_table "proposals_discussion_plugin_task_categories", :id => false, :force => true do |t|
  677 + t.integer "task_id"
  678 + t.integer "category_id"
  679 + end
559 680
560 create_table "qualifier_certifiers", :force => true do |t| 681 create_table "qualifier_certifiers", :force => true do |t|
561 t.integer "qualifier_id" 682 t.integer "qualifier_id"
@@ -597,6 +718,12 @@ ActiveRecord::Schema.define(:version =&gt; 20150603182105) do @@ -597,6 +718,12 @@ ActiveRecord::Schema.define(:version =&gt; 20150603182105) do
597 t.boolean "is_global" 718 t.boolean "is_global"
598 end 719 end
599 720
  721 + add_index "role_assignments", ["accessor_id", "accessor_type", "resource_id", "resource_type"], :name => "index_on_role_assigments_accessor_resource_role"
  722 + add_index "role_assignments", ["accessor_id", "accessor_type", "role_id"], :name => "index_on_role_assigments_accessor_role"
  723 + add_index "role_assignments", ["accessor_id", "accessor_type"], :name => "index_role_assignments_on_accessor_id_and_accessor_type"
  724 + add_index "role_assignments", ["resource_id", "resource_type", "role_id"], :name => "index_on_role_assigments_resource_role"
  725 + add_index "role_assignments", ["resource_id", "resource_type"], :name => "index_role_assignments_on_resource_id_and_resource_type"
  726 +
600 create_table "roles", :force => true do |t| 727 create_table "roles", :force => true do |t|
601 t.string "name" 728 t.string "name"
602 t.string "key" 729 t.string "key"
@@ -606,6 +733,11 @@ ActiveRecord::Schema.define(:version =&gt; 20150603182105) do @@ -606,6 +733,11 @@ ActiveRecord::Schema.define(:version =&gt; 20150603182105) do
606 t.integer "profile_id" 733 t.integer "profile_id"
607 end 734 end
608 735
  736 + create_table "sashes", :force => true do |t|
  737 + t.datetime "created_at", :null => false
  738 + t.datetime "updated_at", :null => false
  739 + end
  740 +
609 create_table "scraps", :force => true do |t| 741 create_table "scraps", :force => true do |t|
610 t.text "content" 742 t.text "content"
611 t.integer "sender_id" 743 t.integer "sender_id"
@@ -684,7 +816,7 @@ ActiveRecord::Schema.define(:version =&gt; 20150603182105) do @@ -684,7 +816,7 @@ ActiveRecord::Schema.define(:version =&gt; 20150603182105) do
684 create_table "tasks", :force => true do |t| 816 create_table "tasks", :force => true do |t|
685 t.text "data" 817 t.text "data"
686 t.integer "status" 818 t.integer "status"
687 - t.date "end_date" 819 + t.datetime "end_date"
688 t.integer "requestor_id" 820 t.integer "requestor_id"
689 t.integer "target_id" 821 t.integer "target_id"
690 t.string "code", :limit => 40 822 t.string "code", :limit => 40
lib/noosfero/api/helpers.rb
@@ -159,12 +159,13 @@ @@ -159,12 +159,13 @@
159 end 159 end
160 160
161 def by_reference(scope, params) 161 def by_reference(scope, params)
162 - if params[:reference_id]  
163 - created_at = scope.find(params[:reference_id]).created_at  
164 - scope.send("#{params.key?(:oldest) ? 'older_than' : 'younger_than'}", created_at)  
165 - else 162 + reference_id = params[:reference_id].to_i == 0 ? nil : params[:reference_id].to_i
  163 + if reference_id.nil?
166 scope 164 scope
167 - end 165 + else
  166 + created_at = scope.find(reference_id).created_at
  167 + scope.send("#{params.key?(:oldest) ? 'older_than' : 'younger_than'}", created_at)
  168 + end
168 end 169 end
169 170
170 def select_filtered_collection_of(object, method, params) 171 def select_filtered_collection_of(object, method, params)
lib/tasks/release.rake
@@ -53,6 +53,8 @@ namespace :noosfero do @@ -53,6 +53,8 @@ namespace :noosfero do
53 end 53 end
54 54
55 AUTHORS_HEADER = <<EOF 55 AUTHORS_HEADER = <<EOF
  56 +This list is automatically generated at release time. Please do not change it.
  57 +
56 If you are not listed here, but should be, please write to the noosfero mailing 58 If you are not listed here, but should be, please write to the noosfero mailing
57 list: http://listas.softwarelivre.org/cgi-bin/mailman/listinfo/noosfero-dev 59 list: http://listas.softwarelivre.org/cgi-bin/mailman/listinfo/noosfero-dev
58 (this list requires subscription to post, but since you are an author of 60 (this list requires subscription to post, but since you are an author of
@@ -82,7 +84,7 @@ EOF @@ -82,7 +84,7 @@ EOF
82 begin 84 begin
83 File.open("AUTHORS.md", 'w') do |output| 85 File.open("AUTHORS.md", 'w') do |output|
84 output.puts AUTHORS_HEADER 86 output.puts AUTHORS_HEADER
85 - output.puts `git log --no-merges --pretty=format:'%aN <%aE>' | sort | uniq` 87 + output.puts `./script/authors`
86 output.puts AUTHORS_FOOTER 88 output.puts AUTHORS_FOOTER
87 end 89 end
88 commit_changes(['AUTHORS.md'], 'Updating authors file') if !pendencies_on_authors[:ok] 90 commit_changes(['AUTHORS.md'], 'Updating authors file') if !pendencies_on_authors[:ok]
plugins/community_track/controllers/myprofile/community_track_plugin_myprofile_controller.rb
1 class CommunityTrackPluginMyprofileController < MyProfileController 1 class CommunityTrackPluginMyprofileController < MyProfileController
2 - append_view_path File.join(File.dirname(__FILE__) + '/../../views')  
3 2
4 before_filter :allow_edit_track, :only => :save_order 3 before_filter :allow_edit_track, :only => :save_order
5 4
plugins/community_track/controllers/public/community_track_plugin_public_controller.rb
1 class CommunityTrackPluginPublicController < PublicController 1 class CommunityTrackPluginPublicController < PublicController
2 - append_view_path File.join(File.dirname(__FILE__) + '/../../views')  
3 2
4 no_design_blocks 3 no_design_blocks
5 4
plugins/community_track/lib/community_track_plugin/track.rb
@@ -84,7 +84,8 @@ class CommunityTrackPlugin::Track &lt; Folder @@ -84,7 +84,8 @@ class CommunityTrackPlugin::Track &lt; Folder
84 84
85 def category_name 85 def category_name
86 category = categories.first 86 category = categories.first
87 - category ? (category.top_ancestor.nil? ? '' : category.top_ancestor.name) : '' 87 + category = category.top_ancestor unless category.nil?
  88 + category.nil? ? '' : category.name
88 end 89 end
89 90
90 def to_html(options = {}) 91 def to_html(options = {})
plugins/community_track/test/functional/community_track_plugin_cms_controller_test.rb
1 -require File.dirname(__FILE__) + '/../test_helper' 1 +require_relative '../test_helper'
2 2
3 # Re-raise errors caught by the controller. 3 # Re-raise errors caught by the controller.
4 class CmsController; def rescue_action(e) raise e end; end 4 class CmsController; def rescue_action(e) raise e end; end
plugins/community_track/test/functional/community_track_plugin_content_viewer_controller_test.rb
1 -require File.dirname(__FILE__) + '/../test_helper'  
2 -  
3 -class ContentViewerController  
4 - append_view_path File.join(File.dirname(__FILE__) + '/../../views')  
5 - def rescue_action(e)  
6 - raise e  
7 - end  
8 -end 1 +require_relative '../test_helper'
9 2
  3 +class ContentViewerController; def rescue_action(e) raise e end; end
10 class ContentViewerControllerTest < ActionController::TestCase 4 class ContentViewerControllerTest < ActionController::TestCase
11 5
12 def setup 6 def setup
@@ -87,32 +81,32 @@ class ContentViewerControllerTest &lt; ActionController::TestCase @@ -87,32 +81,32 @@ class ContentViewerControllerTest &lt; ActionController::TestCase
87 end 81 end
88 82
89 should 'render a div with block id for track list block' do 83 should 'render a div with block id for track list block' do
90 - @block = CommunityTrackPlugin::TrackListBlock.create!(:box => @profile.boxes.last) 84 + @block = CommunityTrackPlugin::TrackListBlock.create!(:box => @profile.boxes.first)
91 get :view_page, @step.url 85 get :view_page, @step.url
92 assert_tag :tag => 'div', :attributes => { :class => 'track_list', :id => "track_list_#{@block.id}" } 86 assert_tag :tag => 'div', :attributes => { :class => 'track_list', :id => "track_list_#{@block.id}" }
93 end 87 end
94 88
95 should 'render a div with block id for track card list block' do 89 should 'render a div with block id for track card list block' do
96 - @block = CommunityTrackPlugin::TrackCardListBlock.create!(:box => @profile.boxes.last) 90 + @block = CommunityTrackPlugin::TrackCardListBlock.create!(:box => @profile.boxes.first)
97 get :view_page, @step.url 91 get :view_page, @step.url
98 assert_tag :tag => 'div', :attributes => { :class => 'track_list', :id => "track_list_#{@block.id}" } 92 assert_tag :tag => 'div', :attributes => { :class => 'track_list', :id => "track_list_#{@block.id}" }
99 end 93 end
100 94
101 should 'render tracks in track list block' do 95 should 'render tracks in track list block' do
102 - @block = CommunityTrackPlugin::TrackListBlock.create!(:box => @profile.boxes.last) 96 + @block = CommunityTrackPlugin::TrackListBlock.create!(:box => @profile.boxes.first)
103 get :view_page, @step.url 97 get :view_page, @step.url
104 assert_tag :tag => 'div', :attributes => { :class => "item category_#{@track.category_name}" }, :descendant => { :tag => 'div', :attributes => { :class => 'steps' }, :descendant => { :tag => 'span', :attributes => { :class => "step #{@block.status_class(@step)}" } } } 98 assert_tag :tag => 'div', :attributes => { :class => "item category_#{@track.category_name}" }, :descendant => { :tag => 'div', :attributes => { :class => 'steps' }, :descendant => { :tag => 'span', :attributes => { :class => "step #{@block.status_class(@step)}" } } }
105 end 99 end
106 100
107 should 'render tracks in track card list block' do 101 should 'render tracks in track card list block' do
108 - @block = CommunityTrackPlugin::TrackCardListBlock.create!(:box => @profile.boxes.last) 102 + @block = CommunityTrackPlugin::TrackCardListBlock.create!(:box => @profile.boxes.first)
109 get :view_page, @step.url 103 get :view_page, @step.url
110 assert_tag :tag => 'div', :attributes => { :class => "item_card category_#{@track.category_name}" }, :descendant => { :tag => 'div', :attributes => { :class => 'track_content' } } 104 assert_tag :tag => 'div', :attributes => { :class => "item_card category_#{@track.category_name}" }, :descendant => { :tag => 'div', :attributes => { :class => 'track_content' } }
111 assert_tag :tag => 'div', :attributes => { :class => "item_card category_#{@track.category_name}" }, :descendant => { :tag => 'div', :attributes => { :class => 'track_stats' } } 105 assert_tag :tag => 'div', :attributes => { :class => "item_card category_#{@track.category_name}" }, :descendant => { :tag => 'div', :attributes => { :class => 'track_stats' } }
112 end 106 end
113 107
114 should 'render link to display more tracks in track list block' do 108 should 'render link to display more tracks in track list block' do
115 - @block = CommunityTrackPlugin::TrackCardListBlock.create!(:box => @profile.boxes.last) 109 + @block = CommunityTrackPlugin::TrackCardListBlock.create!(:box => @profile.boxes.first)
116 (@block.limit+1).times { |i| create_track("track#{i}", @profile) } 110 (@block.limit+1).times { |i| create_track("track#{i}", @profile) }
117 111
118 get :view_page, @step.url 112 get :view_page, @step.url
@@ -120,7 +114,7 @@ class ContentViewerControllerTest &lt; ActionController::TestCase @@ -120,7 +114,7 @@ class ContentViewerControllerTest &lt; ActionController::TestCase
120 end 114 end
121 115
122 should 'render link to show all tracks in track list block' do 116 should 'render link to show all tracks in track list block' do
123 - @block = CommunityTrackPlugin::TrackCardListBlock.create!(:box => @profile.boxes.last) 117 + @block = CommunityTrackPlugin::TrackCardListBlock.create!(:box => @profile.boxes.first)
124 @block.more_another_page = true 118 @block.more_another_page = true
125 @block.save! 119 @block.save!
126 120
plugins/community_track/test/functional/community_track_plugin_environment_design_controller_test.rb
1 -require File.dirname(__FILE__) + '/../test_helper' 1 +require_relative '../test_helper'
2 2
3 # Re-raise errors caught by the controller. 3 # Re-raise errors caught by the controller.
4 class EnvironmentDesignController; def rescue_action(e) raise e end; end 4 class EnvironmentDesignController; def rescue_action(e) raise e end; end
plugins/community_track/test/functional/community_track_plugin_myprofile_controller_test.rb
1 -require File.dirname(__FILE__) + '/../test_helper'  
2 -require File.dirname(__FILE__) + '/../../controllers/myprofile/community_track_plugin_myprofile_controller' 1 +require_relative '../test_helper'
  2 +require_relative '../../controllers/myprofile/community_track_plugin_myprofile_controller'
3 3
4 # Re-raise errors caught by the controller. 4 # Re-raise errors caught by the controller.
5 class CommunityTrackPluginMyprofileController; def rescue_action(e) raise e end; end 5 class CommunityTrackPluginMyprofileController; def rescue_action(e) raise e end; end
@@ -7,10 +7,6 @@ class CommunityTrackPluginMyprofileController; def rescue_action(e) raise e end; @@ -7,10 +7,6 @@ class CommunityTrackPluginMyprofileController; def rescue_action(e) raise e end;
7 class CommunityTrackPluginMyprofileControllerTest < ActionController::TestCase 7 class CommunityTrackPluginMyprofileControllerTest < ActionController::TestCase
8 8
9 def setup 9 def setup
10 - @controller = CommunityTrackPluginMyprofileController.new  
11 - @request = ActionController::TestRequest.new  
12 - @response = ActionController::TestResponse.new  
13 -  
14 @profile = fast_create(Community) 10 @profile = fast_create(Community)
15 @track = create_track('track', @profile) 11 @track = create_track('track', @profile)
16 12
plugins/community_track/test/functional/community_track_plugin_public_controller_test.rb
1 -require File.dirname(__FILE__) + '/../test_helper'  
2 -require File.dirname(__FILE__) + '/../../controllers/public/community_track_plugin_public_controller' 1 +require_relative '../test_helper'
  2 +require_relative '../../controllers/public/community_track_plugin_public_controller'
3 3
4 # Re-raise errors caught by the controller. 4 # Re-raise errors caught by the controller.
5 class CommunityTrackPluginPublicController; def rescue_action(e) raise e end; end 5 class CommunityTrackPluginPublicController; def rescue_action(e) raise e end; end
plugins/community_track/test/test_helper.rb
1 -require File.dirname(__FILE__) + '/../../../test/test_helper' 1 +require_relative '../../../test/test_helper'
2 2
3 def create_track(name, profile) 3 def create_track(name, profile)
4 track = CommunityTrackPlugin::Track.new(:abstract => 'abstract', :body => 'body', :name => name, :profile => profile) 4 track = CommunityTrackPlugin::Track.new(:abstract => 'abstract', :body => 'body', :name => name, :profile => profile)
plugins/community_track/test/unit/article_test.rb
1 -require File.dirname(__FILE__) + '/../test_helper' 1 +require_relative '../test_helper'
2 2
3 class ArticleTest < ActiveSupport::TestCase 3 class ArticleTest < ActiveSupport::TestCase
4 4
plugins/community_track/test/unit/community_track_plugin/activation_job_test.rb
1 -require File.dirname(__FILE__) + '/../../test_helper' 1 +require_relative '../../test_helper'
2 2
3 class ActivationJobTest < ActiveSupport::TestCase 3 class ActivationJobTest < ActiveSupport::TestCase
4 4
plugins/community_track/test/unit/community_track_plugin/step_helper_test.rb
1 -require File.dirname(__FILE__) + '/../../test_helper' 1 +require_relative '../../test_helper'
2 2
3 class StepHelperTest < ActiveSupport::TestCase 3 class StepHelperTest < ActiveSupport::TestCase
4 4
plugins/community_track/test/unit/community_track_plugin/step_test.rb
1 -require File.dirname(__FILE__) + '/../../test_helper' 1 +require_relative '../../test_helper'
2 2
3 module CommunityHubPlugin; class Hub < Article; end; end 3 module CommunityHubPlugin; class Hub < Article; end; end
4 4
plugins/community_track/test/unit/community_track_plugin/track_card_list_block_test.rb
1 -require File.dirname(__FILE__) + '/../../test_helper' 1 +require_relative '../../test_helper'
2 2
3 class TrackCardListBlockTest < ActiveSupport::TestCase 3 class TrackCardListBlockTest < ActiveSupport::TestCase
4 4
plugins/community_track/test/unit/community_track_plugin/track_helper_test.rb
1 -require File.dirname(__FILE__) + '/../../test_helper' 1 +require_relative '../../test_helper'
2 2
3 class TrackHelperTest < ActiveSupport::TestCase 3 class TrackHelperTest < ActiveSupport::TestCase
4 4
plugins/community_track/test/unit/community_track_plugin/track_list_block_test.rb
1 -require File.dirname(__FILE__) + '/../../test_helper' 1 +require_relative '../../test_helper'
2 2
3 class TrackListBlockTest < ActiveSupport::TestCase 3 class TrackListBlockTest < ActiveSupport::TestCase
4 4
plugins/community_track/test/unit/community_track_plugin/track_test.rb
1 -require File.dirname(__FILE__) + '/../../test_helper' 1 +require_relative '../../test_helper'
2 2
3 class TrackTest < ActiveSupport::TestCase 3 class TrackTest < ActiveSupport::TestCase
4 4
plugins/community_track/test/unit/community_track_plugin_test.rb
1 -require File.dirname(__FILE__) + '/../test_helper' 1 +require_relative '../test_helper'
2 2
3 class CommunityTrackPluginTest < ActiveSupport::TestCase 3 class CommunityTrackPluginTest < ActiveSupport::TestCase
4 4
plugins/event/lib/event_plugin/event_block.rb
@@ -26,8 +26,8 @@ class EventPlugin::EventBlock &lt; Block @@ -26,8 +26,8 @@ class EventPlugin::EventBlock &lt; Block
26 end 26 end
27 27
28 def events(user = nil) 28 def events(user = nil)
29 - events = events_source.events  
30 - events = events.published.order('start_date') 29 + events = events_source.events.order('start_date')
  30 + events = user.nil? ? events.public : events.display_filter(user,nil)
31 31
32 if future_only 32 if future_only
33 events = events.where('start_date >= ?', Date.today) 33 events = events.where('start_date >= ?', Date.today)
plugins/event/test/test_helper.rb 0 → 100644
@@ -0,0 +1 @@ @@ -0,0 +1 @@
  1 +require_relative '../../../test/test_helper'
plugins/event/test/unit/event_block_test.rb
1 -require File.dirname(__FILE__) + '/../../../../test/test_helper' 1 +require_relative '../test_helper'
2 2
3 -class EventPlugin::EventBlockTest < ActiveSupport::TestCase 3 +class EventBlockTest < ActiveSupport::TestCase
4 4
5 def setup 5 def setup
6 @env = Environment.default 6 @env = Environment.default
@@ -165,7 +165,7 @@ class EventPlugin::EventBlockTest &lt; ActiveSupport::TestCase @@ -165,7 +165,7 @@ class EventPlugin::EventBlockTest &lt; ActiveSupport::TestCase
165 165
166 def visibility_content_test_from_a_profile(profile) 166 def visibility_content_test_from_a_profile(profile)
167 @block.box.owner = @env 167 @block.box.owner = @env
168 - ev = fast_create Event, :name => '2 de Julho', :profile_id => profile.id 168 + ev = Event.create!(:name => '2 de Julho', :profile => profile)
169 @block.all_env_events = true 169 @block.all_env_events = true
170 170
171 # Do not list event from private profile for non logged visitor 171 # Do not list event from private profile for non logged visitor
plugins/event/test/unit/event_plugin_test.rb
1 -require File.dirname(__FILE__) + '/../../../../test/test_helper' 1 +require_relative '../test_helper'
2 2
3 class EventPluginTest < ActiveSupport::TestCase 3 class EventPluginTest < ActiveSupport::TestCase
4 4
plugins/lattes_curriculum/features/lattes_curriculum.feature
@@ -29,7 +29,7 @@ Feature: import lattes information @@ -29,7 +29,7 @@ Feature: import lattes information
29 And I fill in "Lattes URL" with "http://lattes.cnpq.br/2864976228727880" 29 And I fill in "Lattes URL" with "http://lattes.cnpq.br/2864976228727880"
30 And I press "Save" 30 And I press "Save"
31 And I go to /profile/admin_user#lattes_tab 31 And I go to /profile/admin_user#lattes_tab
32 - Then I should see "Endereço para acessar este CV: http://lattes.cnpq.br/2864976228727880" 32 + Then I should see "Lattes"
33 33
34 Scenario: Don't show lattes informations for blank lattes urls 34 Scenario: Don't show lattes informations for blank lattes urls
35 Given I am on admin_user's control panel 35 Given I am on admin_user's control panel
plugins/lattes_curriculum/lib/html_parser.rb
@@ -19,6 +19,8 @@ class Html_parser @@ -19,6 +19,8 @@ class Html_parser
19 page = _("Lattes not found. Please, make sure the informed URL is correct.") 19 page = _("Lattes not found. Please, make sure the informed URL is correct.")
20 rescue Timeout::Error => e 20 rescue Timeout::Error => e
21 page = _("Lattes Platform is unreachable. Please, try it later.") 21 page = _("Lattes Platform is unreachable. Please, try it later.")
  22 + rescue
  23 + page = _("Could not import the lattes")
22 end 24 end
23 end 25 end
24 26
plugins/lattes_curriculum/test/unit/html_parser_test.rb
@@ -12,13 +12,4 @@ class HtmlParserTest &lt; ActiveSupport::TestCase @@ -12,13 +12,4 @@ class HtmlParserTest &lt; ActiveSupport::TestCase
12 should 'be not nil the instance' do 12 should 'be not nil the instance' do
13 assert_not_nil @parser 13 assert_not_nil @parser
14 end 14 end
15 -  
16 - should 'be not nil the return get_html' do  
17 - result = @parser.get_html("http://lattes.cnpq.br/2193972715230641")  
18 - assert result.include?("Endereço para acessar este CV")  
19 - end  
20 -  
21 - should 'inform that lattes was not found' do  
22 - assert_equal "Lattes not found. Please, make sure the informed URL is correct.", @parser.get_html("http://lattes.cnpq.br/123")  
23 - end  
24 end 15 end
plugins/sub_organizations/db/migrate/20150508153119_add_timestamp_to_relation.rb
@@ -2,5 +2,7 @@ class AddTimestampToRelation &lt; ActiveRecord::Migration @@ -2,5 +2,7 @@ class AddTimestampToRelation &lt; ActiveRecord::Migration
2 def change 2 def change
3 add_column :sub_organizations_plugin_relations, :created_at, :datetime 3 add_column :sub_organizations_plugin_relations, :created_at, :datetime
4 add_column :sub_organizations_plugin_relations, :updated_at, :datetime 4 add_column :sub_organizations_plugin_relations, :updated_at, :datetime
  5 + add_column :sub_organizations_plugin_approve_paternity_relations, :created_at, :datetime
  6 + add_column :sub_organizations_plugin_approve_paternity_relations, :updated_at, :datetime
5 end 7 end
6 end 8 end
script/authors 0 → 100755
@@ -0,0 +1,3 @@ @@ -0,0 +1,3 @@
  1 +#!/bin/sh
  2 +
  3 +./script/authors-all-commits | sort -u
script/authors-all-commits 0 → 100755
@@ -0,0 +1,6 @@ @@ -0,0 +1,6 @@
  1 +#!/bin/sh
  2 +
  3 +git log --pretty=format:'Author: %aN <%aE>%n%b' --no-merges \
  4 + | grep -i '^\s*\(author:\|signed-off-by:\)' \
  5 + | sed -f script/authors-normalize.sed \
  6 + | sed -f script/authors.sed
script/authors-commits 0 → 100755
@@ -0,0 +1,4 @@ @@ -0,0 +1,4 @@
  1 +#!/bin/sh
  2 +
  3 +./script/authors-all-commits | sort | uniq -c | sort -n
  4 +
script/authors-normalize.sed 0 → 100644
@@ -0,0 +1,7 @@ @@ -0,0 +1,7 @@
  1 +s/\s\+/ /g
  2 +s/^\s\+//g
  3 +s/^\S*:\s*//
  4 +s/\(\S\)</\1 </
  5 +s/ + /\n/g
  6 +s/\s*$//
  7 +s/\s*,\s*/\n/g
script/authors.sed 0 → 100644
@@ -0,0 +1,217 @@ @@ -0,0 +1,217 @@
  1 +s/Alessandro Palmeira$/Alessandro Palmeira <alessandro.palmeira@gmail.com>/
  2 +s/Alessandro Palmeira <caio.csalgado@gmail.com>/Alessandro Palmeira <alessandro.palmeira@gmail.com>/
  3 +s/Alessandro Palmeira <diegoamc90@gmail.com>/Alessandro Palmeira <alessandro.palmeira@gmail.com>/
  4 +s/Alessandro Palmeira <jaodsilv@linux.ime.usp.br>/Alessandro Palmeira <alessandro.palmeira@gmail.com>/
  5 +s/Alessandro Palmeira <paulo@softwarelivre.org>/Alessandro Palmeira <alessandro.palmeira@gmail.com>/
  6 +s/Alessandro Palmeira <rr.manzo@gmail.com>/Alessandro Palmeira <alessandro.palmeira@gmail.com>/
  7 +
  8 +s/analosnak <analosnak@gmail.com>/Ana Losnak <analosnak@gmail.com>/
  9 +s/^Ana Losnak$/Ana Losnak <analosnak@gmail.com>/
  10 +
  11 +s/Andre Bernardes <andrebsguedes@gmail.com>/André Guedes <andrebsguedes@gmail.com>/
  12 +s/André Bernardes <andrebsguedes@gmail.com>/André Guedes <andrebsguedes@gmail.com>/
  13 +s/André Guedes <andrebsguedes@fedora.local>/André Guedes <andrebsguedes@gmail.com>/
  14 +
  15 +
  16 +s/Alex de Souza <campelo.al1@gmail.com>/Alex Campelo <campelo.al1@gmail.com>/
  17 +s/alcampelo <alcampelo@alcampelo.(none)>/Alex Campelo <campelo.al1@gmail.com>/
  18 +s/Alvaro Fernando <alvarofernandoms@gmail.com>/Álvaro Fernando <alvarofernandoms@gmail.com>/
  19 +
  20 +s/athurmde@yahoo.com.br/arthurmde@yahoo.com.br/
  21 +s/^Antonio Terceiro$/Antonio Terceiro <terceiro@colivre.coop.br>/
  22 +
  23 +s/Arhur Del Esposte/Arthur Del Esposte/
  24 +s/Arthur Del Esposte <arthurmde@yahoo.com.br>/Arthur Del Esposte <arthurmde@gmail.com>/
  25 +
  26 +s/Aurélio A. Heckert/Aurelio A. Heckert/
  27 +
  28 +s/Bráulio Bhavamitra <brauliobo@gmail.com>/Braulio Bhavamitra <braulio@eita.org.br>/
  29 +s/Braulio Bhavamitra <brauliobo@gmail.com>/Braulio Bhavamitra <braulio@eita.org.br>/
  30 +
  31 +s/Carlos Andre <carlos.andre.souza@msn.com>/Carlos Andre de Souza <carlos.andre.souza@msn.com>/
  32 +
  33 +s/^Caio Almeida$/Caio SBA <caio@colivre.coop.br>/
  34 +
  35 +s/^Caio$/Caio Salgado <caio.csalgado@gmail.com>/
  36 +s/Caio <caio.csalgado@gmail.com>/Caio Salgado <caio.csalgado@gmail.com>/
  37 +s/Caio C. Salgado <alessandro.palmeira@gmail.com>/Caio Salgado <caio.csalgado@gmail.com>/
  38 +s/^Caio Salgado$/Caio Salgado <caio.csalgado@gmail.com>/
  39 +s/Caio Salgado <alessandro.palmeira@gmail.com>/Caio Salgado <caio.csalgado@gmail.com>/
  40 +s/Caio Salgado <diegoamc90@gmail.com>/Caio Salgado <caio.csalgado@gmail.com>/
  41 +s/Caio Salgado <jaodsilv@linux.ime.usp.br>/Caio Salgado <caio.csalgado@gmail.com>/
  42 +s/Caio Salgado <renanteruoc@gmail.com>/Caio Salgado <caio.csalgado@gmail.com>/
  43 +
  44 +s/Carlos Morais$/Carlos Morais <carlos88morais@gmail.com>/
  45 +s/Carlos Morais <alessandro.palmeira@gmail.com>/Carlos Morais <carlos88morais@gmail.com>/
  46 +s/Carlos Morais <jaodsilv@linux.ime.usp.br>/Carlos Morais <carlos88morais@gmail.com>/
  47 +s/Carlos Morais <paulo@softwarelivre.org>/Carlos Morais <carlos88morais@gmail.com>/
  48 +s/Carlos Morais <terceiro@colivre.coop.br>/Carlos Morais <carlos88morais@gmail.com>/
  49 +
  50 +s/Daniel Alves$/Daniel Alves <danpaulalves@gmail.com>/
  51 +s/Daniel Alves <alessandro.palmeira@gmail.com>/Daniel Alves <danpaulalves@gmail.com>/
  52 +
  53 +s/Daniel Bucher$/Daniel Bucher <daniel.bucher88@gmail.com>/
  54 +
  55 +s/daniel <dtygel@eita.org.br>/Daniel Tygel <dtygel@eita.org.br>/
  56 +s/dtygel <dtygel@gmail.com>/Daniel Tygel <dtygel@eita.org.br>/
  57 +
  58 +/^Daniela Feitosa$/d
  59 +s/DylanGuedes/Dylan Guedes/
  60 +
  61 +s/Diego$/Diego Araujo <diegoamc90@gmail.com>/
  62 +s/diegoamc <diegoamc90@gmail.com>/Diego Araujo <diegoamc90@gmail.com>/
  63 +s/Diego Araujo$/Diego Araujo <diegoamc90@gmail.com>/
  64 +s/Diego Araújo$/Diego Araujo <diegoamc90@gmail.com>/
  65 +s/Diego Araujo <alessandro.palmeira@gmail.com>/Diego Araujo <diegoamc90@gmail.com>/
  66 +s/Diego Araújo <alessandro.palmeira@gmail.com>/Diego Araujo <diegoamc90@gmail.com>/
  67 +s/Diego Araujo <caio.csalgado@gmail.com>/Diego Araujo <diegoamc90@gmail.com>/
  68 +s/Diego Araújo <caio.csalgado@gmail.com>/Diego Araujo <diegoamc90@gmail.com>/
  69 +s/Diego Araújo <danpaulalves@gmail.com>/Diego Araujo <diegoamc90@gmail.com>/
  70 +s/Diego Araújo <diegoamc90@gmail.com>/Diego Araujo <diegoamc90@gmail.com>/
  71 +s/Diego Araújo <jaodsilv@linux.ime.usp.br>/Diego Araujo <diegoamc90@gmail.com>/
  72 +s/Diego Araújo <paulo@softwarelivre.org>/Diego Araujo <diegoamc90@gmail.com>/
  73 +s/Diego Araujo <renanteruoc@gmail.com>/Diego Araujo <diegoamc90@gmail.com>/
  74 +s/Diego Araújo <renanteruoc@gmail.com>/Diego Araujo <diegoamc90@gmail.com>/
  75 +s/Diego Araujo <rr.manzo@gmail.com>/Diego Araujo <diegoamc90@gmail.com>/
  76 +s/Diego Araújo <rr.manzo@gmail.com>/Diego Araujo <diegoamc90@gmail.com>/
  77 +s/Diego Martinez <diegoamc90@gmail.com>/Diego Araujo <diegoamc90@gmail.com>/
  78 +
  79 +# no known email
  80 +s/Eduardo Morais <alessandro.palmeira@gmail.com>/Eduardo Morais/
  81 +s/Eduardo Morais <carlos88morais@gmail.com>/Eduardo Morais/
  82 +
  83 +s/Eduardo Passos <eduardo@risa.localdomain.localhost>/Eduardo Passos <eduardosteps@gmail.com>/
  84 +
  85 +s/Evandro Jr <evandrojr@gmail.com>/Evandro Magalhaes Leite Junior <evandro.leite@serpro.gov.br>/
  86 +s/Evandro Junior <evandrojr@gmail.com>/Evandro Magalhaes Leite Junior <evandro.leite@serpro.gov.br>/
  87 +
  88 +s/Fábio Teixeira <fabio1079@gmail.com>/Fabio Teixeira <fabio1079@gmail.com>/
  89 +
  90 +s/Francisco Marcelo A. Lima Júnior <francisco.lima-junior@serpro.gov.br>/Francisco Marcelo de Araújo Lima Júnior <francisco.lima-junior@serpro.gov.br>/
  91 +s/Francisco Marcelo de Araujo Lima Junior <79350259591@serpro-1457614.(none)>/Francisco Marcelo de Araújo Lima Júnior <francisco.lima-junior@serpro.gov.br>/
  92 +s/Francisco Marcelo de Araújo Lima Júnior <maljunior@gmail.com>/Francisco Marcelo de Araújo Lima Júnior <francisco.lima-junior@serpro.gov.br>/
  93 +
  94 +
  95 +s/Gustavo Cruz <darksshades@hotmail.com>/Gustavo Jaruga <darksshades@gmail.com>/
  96 +s/Gustavo Jaruga <darksshades@hotmail.com>/Gustavo Jaruga <darksshades@gmail.com>/
  97 +s/Gust <darksshades@hotmail.com>/Gustavo Jaruga <darksshades@gmail.com>/
  98 +
  99 +s/Guilherme Rojas <alessandro.palmeira@gmail.com>/Guilherme Rojas <guilhermehrojas@gmail.com>/
  100 +s/Guilherme Rojas <danpaulalves@gmail.com>/Guilherme Rojas <guilhermehrojas@gmail.com>/
  101 +s/Guilherme Rojas <diegoamc90@gmail.com>/Guilherme Rojas <guilhermehrojas@gmail.com>/
  102 +
  103 +s/Hebert Douglas <hebertdougl@gmail>/Hebert Douglas <hebertdougl@gmail.com>/
  104 +
  105 +s/Jefferson <diegoamc90@gmail.com>/Jefferson Fernandes <jeffs.fernandes@gmail.com>/
  106 +s/Jefferson Fernandes$/Jefferson Fernandes <jeffs.fernandes@gmail.com>/
  107 +s/Jefferson Fernandes <alessandro.palmeira@gmail.com>/Jefferson Fernandes <jeffs.fernandes@gmail.com>/
  108 +s/Jefferson Fernandes <caio.csalgado@gmail.com>/Jefferson Fernandes <jeffs.fernandes@gmail.com>/
  109 +s/Jefferson Fernandes <diegoamc90@gmail.com>/Jefferson Fernandes <jeffs.fernandes@gmail.com>/
  110 +s/Jefferson Fernandes <jaodsilv@linux.ime.usp.br>/Jefferson Fernandes <jeffs.fernandes@gmail.com>/
  111 +s/Jefferson Fernandes <rr.manzo@gmail.com>/Jefferson Fernandes <jeffs.fernandes@gmail.com>/
  112 +
  113 +# no known email
  114 +s/João Machini <diegoamc90@gmail.com>/João Machini/
  115 +s/João Machini <digoamc90@gmail.com>/João Machini/
  116 +s/João Machini <jaodsilv@linux.ime.usp.br>/João Machini/
  117 +
  118 +s/João da Silva$/João M. M. da Silva <jaodsilv@linux.ime.usp.br>/
  119 +s/João da Silva <jaodsilv@linux.ime.usp.br>/João M. M. da Silva <jaodsilv@linux.ime.usp.br>/
  120 +s/Joao M. M. da Silva$/João M. M. da Silva <jaodsilv@linux.ime.usp.br>/
  121 +s/João M. M. da Silva$/João M. M. da Silva <jaodsilv@linux.ime.usp.br>/
  122 +s/João M. M. da Silva <alessandro.palmeira@gmail.com>/João M. M. da Silva <jaodsilv@linux.ime.usp.br>/
  123 +s/João M. M. da Silva <caio.csalgado@gmail.com>/João M. M. da Silva <jaodsilv@linux.ime.usp.br>/
  124 +s/João M. M. da Silva <diegoamc90@gmail.com>/João M. M. da Silva <jaodsilv@linux.ime.usp.br>/
  125 +s/Joao M. M. da Silva <jeffs.fernandes@gmail.com>/João M. M. da Silva <jaodsilv@linux.ime.usp.br>/
  126 +s/João M. M. da Silva <paulo@softwarelivre.org>/João M. M. da Silva <jaodsilv@linux.ime.usp.br>/
  127 +s/João M. M. da Silva <rr.manzo@gmail.com>/João M. M. da Silva <jaodsilv@linux.ime.usp.br>/
  128 +s/João M. Miranda <jaodsilv@linux.ime.usp.br>/João M. M. da Silva <jaodsilv@linux.ime.usp.br>/
  129 +s/Joao M. M. Silva$/João M. M. da Silva <jaodsilv@linux.ime.usp.br>/
  130 +s/João M. M. Silva$/João M. M. da Silva <jaodsilv@linux.ime.usp.br>/
  131 +s/João M. M. Silva <alessandro.palmeira@gmail.com>/João M. M. da Silva <jaodsilv@linux.ime.usp.br>/
  132 +s/Joao M. M. Silva <jeffs.fernandes@gmail.com>/João M. M. da Silva <jaodsilv@linux.ime.usp.br>/
  133 +s/João M. M. Silva <rr.manzo@gmail.com>/João M. M. da Silva <jaodsilv@linux.ime.usp.br>/
  134 +s/João Marco Maciel da Silva/João M. M. da Silva <jaodsilv@linux.ime.usp.br>/
  135 +s/João <caio.csalgado@gmail.com>/João M. M. da Silva <jaodsilv@linux.ime.usp.br>/
  136 +
  137 +s/José Pedro de Santana Neto <1jpsneto@gmail.com>/Jose Pedro <1jpsneto@gmail.com>/
  138 +
  139 +s/Junior Silva <junior@bajor.localhost.localdomain>/Junior Silva <juniorsilva1001@gmail.com>/
  140 +s/Junior Silva <junior@sedeantigo.colivre.coop.br>/Junior Silva <juniorsilva1001@gmail.com>/
  141 +s/Junior Silva <juniorsilva7@juniorsilva-Aspire-5750Z.(none)>/Junior Silva <juniorsilva1001@gmail.com>/
  142 +s/Junior Silva <juniorsilva@colivre.coop.br>/Junior Silva <juniorsilva1001@gmail.com>/
  143 +s/juniorsilva <juniorsilva@QonoS.localhost.localdomain>/Junior Silva <juniorsilva1001@gmail.com>/
  144 +
  145 +s/Larissa Reis <reiss.larissa@gmail.com>/Larissa Reis <larissa@colivre.coop.br>/
  146 +
  147 +s/Leandro Nunes$/Leandro Nunes dos Santos <leandro.santos@serpro.gov.br>/
  148 +s/Leandro Nunes dos Santos <81665687568@serpro-1541727.Home>/Leandro Nunes dos Santos <leandro.santos@serpro.gov.br>/
  149 +s/Leandro Nunes dos Santos <81665687568@serpro-1541727.(none)>/Leandro Nunes dos Santos <leandro.santos@serpro.gov.br>/
  150 +s/Leandro Nunes dos Santos <leandronunes@gmail.com>/Leandro Nunes dos Santos <leandro.santos@serpro.gov.br>/
  151 +
  152 +s/Lucas Melo <lucas@colivre.coop.br>/Lucas Melo <lucaspradomelo@gmail.com>/
  153 +
  154 +s/Luciano <lucianopcbr@gmail.com>/Luciano Prestes Cavalcanti <lucianopcbr@gmail.com>/
  155 +s/Luciano Prestes <lucianopcbr@gmail.com>/Luciano Prestes Cavalcanti <lucianopcbr@gmail.com>/
  156 +s/Luciano Prestes Cavacanti <lucianopcbr@gmail.com>/Luciano Prestes Cavalcanti <lucianopcbr@gmail.com>/
  157 +
  158 +s/Marcos da Silva Ramos <ms.ramos@outlook.com>/Marcos Ramos <ms.ramos@outlook.com>/
  159 +s/Marcos Ramos <ms.ramos@outlook.com$/Marcos Ramos <ms.ramos@outlook.com>/
  160 +s/Marcos <marcos.rpj2@gmail.com>/Marcos Ronaldo <marcos.rpj2@gmail.com>/
  161 +
  162 +s/Parley Martins <parley@outlook.com>/Parley Martins <parleypachecomartins@gmail.com>/
  163 +
  164 +s/Paulo Meirelles$/Paulo Meirelles <paulo@softwarelivre.org>/
  165 +s/Paulo Meirelles <alessandro.palmeira@gmail.com>/Paulo Meirelles <paulo@softwarelivre.org>/
  166 +s/Paulo Meirelles <carlos88morais@gmail.com>/Paulo Meirelles <paulo@softwarelivre.org>/
  167 +s/Paulo Meirelles <diegoamc90@gmail.com>/Paulo Meirelles <paulo@softwarelivre.org>/
  168 +s/Paulo Meirelles <jaodsilv@linux.ime.usp.br>/Paulo Meirelles <paulo@softwarelivre.org>/
  169 +s/Paulo Meirelles <renanteruoc@gmail.com>/Paulo Meirelles <paulo@softwarelivre.org>/
  170 +s/Paulo Meirelles <rr.manzo@gmail.com>/Paulo Meirelles <paulo@softwarelivre.org>/
  171 +s/Paulo Meirelles <terceiro@colivre.coop.br>/Paulo Meirelles <paulo@softwarelivre.org>/
  172 +
  173 +# no known email
  174 +s/Pedro$/Pedro Leal/
  175 +s/Pedro <caio.csalgado@gmail.com>/Pedro Leal/
  176 +s/Pedro Leal <caio.csalgado@gmail.com>/Pedro Leal/
  177 +s/Pedro Leal <carlos88morais@gmail.com>/Pedro Leal/
  178 +s/Pedro Leal <diegoamc90@gmail.com>/Pedro Leal/
  179 +s/Pedro Leal <jaodsilv@linux.ime.usp.br>/Pedro Leal/
  180 +
  181 +s/Rafael Manzo$/Rafael Reggiani Manzo <rr.manzo@gmail.com>/
  182 +s/Rafael Manzo <alessandro.palmeira@gmail.com>/Rafael Reggiani Manzo <rr.manzo@gmail.com>/
  183 +s/Rafael Manzo <caio.csalgado@gmail.com>/Rafael Reggiani Manzo <rr.manzo@gmail.com>/
  184 +s/Rafael Manzo <diegoamc90@gmail.com>/Rafael Reggiani Manzo <rr.manzo@gmail.com>/
  185 +s/Rafael Manzo <jaodsilv@linux.ime.usp.br>/Rafael Reggiani Manzo <rr.manzo@gmail.com>/
  186 +s/Rafael Manzo <jeffs.fernandes@gmail.com>/Rafael Reggiani Manzo <rr.manzo@gmail.com>/
  187 +s/Rafael Manzo <paulo@softwarelivre.org>/Rafael Reggiani Manzo <rr.manzo@gmail.com>/
  188 +s/Rafael Manzo <renanteruoc@gmail.com>/Rafael Reggiani Manzo <rr.manzo@gmail.com>/
  189 +s/Rafael Manzo <rr.manzo@gmail.com>/Rafael Reggiani Manzo <rr.manzo@gmail.com>/
  190 +s/Rafael Reggiani Manzo$/Rafael Reggiani Manzo <rr.manzo@gmail.com>/
  191 +
  192 +s/Renan <renanteruoc@gmail.com>/Renan Teruo <renanteruoc@gmail.com>/
  193 +s/Renan Teruo$/Renan Teruo <renanteruoc@gmail.com>/
  194 +s/Renan Teruo <alessandro.palmeira@gmail.com>/Renan Teruo <renanteruoc@gmail.com>/
  195 +s/Renan Teruoc$/Renan Teruo <renanteruoc@gmail.com>/
  196 +s/Renan Teruo <caio.csalgado@gmail.com>/Renan Teruo <renanteruoc@gmail.com>/
  197 +s/Renan Teruo <caio.salgado@gmail.com>/Renan Teruo <renanteruoc@gmail.com>/
  198 +s/Renan Teruo <diegoamc90@gmail.com>/Renan Teruo <renanteruoc@gmail.com>/
  199 +s/Renan Teruo <jaodsilv@linux.ime.usp.br>/Renan Teruo <renanteruoc@gmail.com>/
  200 +
  201 +s/Rodrigo Souto$/Rodrigo Souto <rodrigo@colivre.coop.br>/
  202 +
  203 +/root <root@debian.sdr.serpro>/d
  204 +
  205 +s/Tales Martins <tales.martins@gmail.com>/Tallys Martins <tallysmartins@yahoo.com.br>/
  206 +s/Tallys Martins <tallysmartins@gmail.com>/Tallys Martins <tallysmartins@yahoo.com.br>/
  207 +s/tallys <tallys@tallys>/Tallys Martins <tallysmartins@yahoo.com.br>/
  208 +s/tallys <tallys@tallys.(none)>/Tallys Martins <tallysmartins@yahoo.com.br>/
  209 +s/Thiago Ribeiro <thiagitosouza@gmail.com>/Thiago Ribeiro <thiagitosouza@hotmail.com>/
  210 +
  211 +s/Valéssio Brito <contato@valessiobrito.com.br>/Valessio Brito <contato@valessiobrito.com.br>/
  212 +s/Valessio Brito <contato@valessiobrito.info>/Valessio Brito <contato@valessiobrito.com.br>/
  213 +s/Valessio Brito <valessio@gmail.com>/Valessio Brito <contato@valessiobrito.com.br>/
  214 +/Visita <visita@debian.(none)>/d
  215 +s/vfcosta <vfcosta@gmail.com>/Victor Costa <vfcosta@gmail.com>/
  216 +s/Victor Carvalho <victorhugodf.ac@gmail.com>/Victor Hugo Alves de Carvalho <victorhugodf.ac@gmail.com>/
  217 +
script/quick-start
@@ -61,6 +61,8 @@ setup_rubygems_path() { @@ -61,6 +61,8 @@ setup_rubygems_path() {
61 fi 61 fi
62 } 62 }
63 63
  64 +# change current directory to the noosfero's root
  65 +cd "$(dirname $0)/../"
64 66
65 force_install=false 67 force_install=false
66 if test "$1" = '--force-install'; then 68 if test "$1" = '--force-install'; then
test/unit/api/articles_test.rb
@@ -348,4 +348,75 @@ class ArticlesTest &lt; ActiveSupport::TestCase @@ -348,4 +348,75 @@ class ArticlesTest &lt; ActiveSupport::TestCase
348 assert_equal [0, 1, 1], [a1.reload.hits, a2.reload.hits, a3.reload.hits] 348 assert_equal [0, 1, 1], [a1.reload.hits, a2.reload.hits, a3.reload.hits]
349 end 349 end
350 350
  351 +
  352 + should 'list all events of a community in a given category' do
  353 + co = Community.create(identifier: 'my-community', name: 'name-my-community')
  354 + c1 = Category.create(environment: Environment.default, name: 'my-category')
  355 + c2 = Category.create(environment: Environment.default, name: 'dont-show-me-this-category')
  356 + e1 = fast_create(Event, :profile_id => co.id)
  357 + e2 = fast_create(Event, :profile_id => co.id)
  358 + e1.categories << c1
  359 + e2.categories << c2
  360 + e1.save!
  361 + e2.save!
  362 + params['content_type']='Event'
  363 + get "api/v1/communities/#{co.id}/articles?#{params.to_query}"
  364 + json = JSON.parse(last_response.body)
  365 + assert_equal json['articles'].count, 2
  366 + end
  367 +
  368 + should 'list a event of a community in a given category' do
  369 + co = Community.create(identifier: 'my-community', name: 'name-my-community')
  370 + c1 = Category.create(environment: Environment.default, name: 'my-category')
  371 + c2 = Category.create(environment: Environment.default, name: 'dont-show-me-this-category')
  372 + e1 = fast_create(Event, :profile_id => co.id)
  373 + e2 = fast_create(Event, :profile_id => co.id)
  374 + e1.categories << c1
  375 + e2.categories << c2
  376 + e1.save!
  377 + e2.save!
  378 + params['categories_ids[]']=c1.id
  379 + params['content_type']='Event'
  380 + get "api/v1/communities/#{co.id}/articles?#{params.to_query}"
  381 + json = JSON.parse(last_response.body)
  382 + #should show only one article, since the other not in the same category
  383 + assert_equal 1, json['articles'].count
  384 + assert_equal e1.id, json['articles'][0]['id']
  385 + end
  386 +
  387 + should 'list events of a community in a given 2 categories' do
  388 + co = Community.create(identifier: 'my-community', name: 'name-my-community')
  389 + c1 = Category.create(environment: Environment.default, name: 'my-category')
  390 + c2 = Category.create(environment: Environment.default, name: 'dont-show-me-this-category')
  391 + e1 = fast_create(Event, :profile_id => co.id)
  392 + e2 = fast_create(Event, :profile_id => co.id)
  393 + e1.categories << c1
  394 + e2.categories << c2
  395 + e1.save!
  396 + e2.save!
  397 + params['content_type']='Event'
  398 + params['categories_ids'] = [c1.id, c2.id]
  399 + get "api/v1/communities/#{co.id}/articles?#{params.to_query}"
  400 + json = JSON.parse(last_response.body)
  401 + assert_equal json['articles'].count, 2
  402 + end
  403 +
  404 + should 'Show 2 events since it uses an IN operator for category instead of an OR' do
  405 + co = Community.create(identifier: 'my-community', name: 'name-my-community')
  406 + c1 = Category.create(environment: Environment.default, name: 'my-category')
  407 + c2 = Category.create(environment: Environment.default, name: 'dont-show-me-this-category')
  408 + c3 = Category.create(environment: Environment.default, name: 'extra-category')
  409 + e1 = fast_create(Event, :profile_id => co.id)
  410 + e2 = fast_create(Event, :profile_id => co.id)
  411 + e1.categories << c1
  412 + e2.categories << c2
  413 + e1.save!
  414 + e2.save!
  415 + params['content_type']='Event'
  416 + params['categories_ids'] = [c1.id, c2.id, c3.id]
  417 + get "api/v1/communities/#{co.id}/articles?#{params.to_query}"
  418 + json = JSON.parse(last_response.body)
  419 + assert_equal json['articles'].count, 2
  420 + end
  421 +
351 end 422 end
test/unit/article_test.rb
@@ -1971,6 +1971,19 @@ class ArticleTest &lt; ActiveSupport::TestCase @@ -1971,6 +1971,19 @@ class ArticleTest &lt; ActiveSupport::TestCase
1971 assert_equal [a], Article.display_filter(user, p) 1971 assert_equal [a], Article.display_filter(user, p)
1972 end 1972 end
1973 1973
  1974 + should 'display_filter show person private content to friends when no profile is passed as parameter' do
  1975 + user = create_user('someuser').person
  1976 + p = fast_create(Person)
  1977 + user.add_friend(p)
  1978 + user.stubs(:has_permission?).with(:view_private_content, p).returns(false)
  1979 + Article.delete_all
  1980 + a = fast_create(Article, :published => false, :show_to_followers => true, :profile_id => p.id)
  1981 + fast_create(Article, :published => false, :show_to_followers => false, :profile_id => p.id)
  1982 + fast_create(Article, :published => false, :show_to_followers => false, :profile_id => p.id)
  1983 + assert_equal [a], Article.display_filter(user, nil)
  1984 + end
  1985 +
  1986 +
1974 should 'display_filter show community private content to members' do 1987 should 'display_filter show community private content to members' do
1975 user = create_user('someuser').person 1988 user = create_user('someuser').person
1976 p = fast_create(Community) 1989 p = fast_create(Community)