Commit 305736e575bc83704abc9a8f1c3954613c42beb4
Exists in
theme-brasil-digital-from-staging
and in
9 other branches
Merge branch 'master' into AI3283-integration_with_dspace
Showing
144 changed files
with
82700 additions
and
84850 deletions
Show diff stats
Too many changes.
To preserve performance only 100 of 144 files displayed.
.ackrc
AUTHORS.md
@@ -41,6 +41,7 @@ Alessandro Palmeira + Paulo Meirelles <alessandro.palmeira@gmail.com> | @@ -41,6 +41,7 @@ Alessandro Palmeira + Paulo Meirelles <alessandro.palmeira@gmail.com> | ||
41 | Alessandro Palmeira + Paulo Meirelles + João M. M. da Silva <alessandro.palmeira@gmail.com> | 41 | Alessandro Palmeira + Paulo Meirelles + João M. M. da Silva <alessandro.palmeira@gmail.com> |
42 | Alessandro Palmeira + Rafael Manzo <alessandro.palmeira@gmail.com> | 42 | Alessandro Palmeira + Rafael Manzo <alessandro.palmeira@gmail.com> |
43 | Ana Losnak <analosnak@gmail.com> | 43 | Ana Losnak <analosnak@gmail.com> |
44 | +Andre Bernardes <andrebsguedes@gmail.com> | ||
44 | Antonio Terceiro + Carlos Morais <terceiro@colivre.coop.br> | 45 | Antonio Terceiro + Carlos Morais <terceiro@colivre.coop.br> |
45 | Antonio Terceiro + Paulo Meirelles <terceiro@colivre.coop.br> | 46 | Antonio Terceiro + Paulo Meirelles <terceiro@colivre.coop.br> |
46 | Antonio Terceiro <terceiro@colivre.coop.br> | 47 | Antonio Terceiro <terceiro@colivre.coop.br> |
@@ -132,6 +133,7 @@ Francisco Marcelo de Araújo Lima Júnior <maljunior@gmail.com> | @@ -132,6 +133,7 @@ Francisco Marcelo de Araújo Lima Júnior <maljunior@gmail.com> | ||
132 | Gabriela Navarro <navarro1703@gmail.com> | 133 | Gabriela Navarro <navarro1703@gmail.com> |
133 | Grazieno Pellegrino <grazieno@gmail.com> | 134 | Grazieno Pellegrino <grazieno@gmail.com> |
134 | Gust <darksshades@hotmail.com> | 135 | Gust <darksshades@hotmail.com> |
136 | +Hebert Douglas <hebertdougl@gmail.com> | ||
135 | Hugo Melo <hugo@riseup.net> | 137 | Hugo Melo <hugo@riseup.net> |
136 | Isaac Canan <isaac@intelletto.com.br> | 138 | Isaac Canan <isaac@intelletto.com.br> |
137 | Italo Valcy <italo@dcc.ufba.br> | 139 | Italo Valcy <italo@dcc.ufba.br> |
@@ -230,6 +232,8 @@ Rodrigo Souto <rodrigo@colivre.coop.br> | @@ -230,6 +232,8 @@ Rodrigo Souto <rodrigo@colivre.coop.br> | ||
230 | Ronny Kursawe <kursawe.ronny@googlemail.com> | 232 | Ronny Kursawe <kursawe.ronny@googlemail.com> |
231 | root <root@debian.sdr.serpro> | 233 | root <root@debian.sdr.serpro> |
232 | Samuel R. C. Vale <srcvale@holoscopio.com> | 234 | Samuel R. C. Vale <srcvale@holoscopio.com> |
235 | +Tallys Martins <tallysmartins@gmail.com> | ||
236 | +tallys <tallys@tallys.(none)> | ||
233 | Valessio Brito <contato@valessiobrito.com.br> | 237 | Valessio Brito <contato@valessiobrito.com.br> |
234 | Valessio Brito <contato@valessiobrito.info> | 238 | Valessio Brito <contato@valessiobrito.info> |
235 | Valessio Brito <valessio@gmail.com> | 239 | Valessio Brito <valessio@gmail.com> |
Gemfile
1 | source "https://rubygems.org" | 1 | source "https://rubygems.org" |
2 | -gem 'rails' | ||
3 | -gem 'fast_gettext' | ||
4 | -gem 'acts-as-taggable-on' | ||
5 | -gem 'prototype-rails' | ||
6 | -gem 'prototype_legacy_helper', '0.0.0', :path => 'vendor/prototype_legacy_helper' | ||
7 | -gem 'rails_autolink' | ||
8 | -gem 'pg' | ||
9 | -gem 'rmagick' | ||
10 | -gem 'RedCloth' | ||
11 | -gem 'will_paginate' | ||
12 | -gem 'ruby-feedparser' | ||
13 | -gem 'daemons' | ||
14 | -gem 'thin' | ||
15 | -gem 'hpricot' | ||
16 | -gem 'nokogiri' | 2 | +gem 'rails', '~> 3.2.19' |
3 | +gem 'fast_gettext', '~> 0.6.8' | ||
4 | +gem 'acts-as-taggable-on', '~> 3.0.2' | ||
5 | +gem 'prototype-rails', '~> 3.2.1' | ||
6 | +gem 'prototype_legacy_helper', '0.0.0', :path => 'vendor/prototype_legacy_helper' | ||
7 | +gem 'rails_autolink', '~> 1.1.5' | ||
8 | +gem 'pg', '~> 0.13.2' | ||
9 | +gem 'rmagick', '~> 2.13.1' | ||
10 | +gem 'RedCloth', '~> 4.2.9' | ||
11 | +gem 'will_paginate', '~> 3.0.3' | ||
12 | +gem 'ruby-feedparser', '~> 0.7' | ||
13 | +gem 'daemons', '~> 1.1.5' | ||
14 | +gem 'thin', '~> 1.3.1' | ||
15 | +gem 'hpricot', '~> 0.8.6' | ||
16 | +gem 'nokogiri', '~> 1.5.5' | ||
17 | gem 'rake', :require => false | 17 | gem 'rake', :require => false |
18 | -gem 'rest-client' | ||
19 | -gem 'exception_notification' | 18 | +gem 'rest-client', '~> 1.6.7' |
19 | +gem 'exception_notification', '~> 4.0.1' | ||
20 | +gem 'gettext', '~> 2.2.1', :require => false, :group => :development | ||
20 | 21 | ||
21 | # FIXME list here all actual dependencies (i.e. the ones in debian/control), | 22 | # FIXME list here all actual dependencies (i.e. the ones in debian/control), |
22 | # with their GEM names (not the Debian package names) | 23 | # with their GEM names (not the Debian package names) |
23 | 24 | ||
24 | group :production do | 25 | group :production do |
25 | - gem 'dalli' | 26 | + gem 'dalli', '~> 2.7.0' |
26 | end | 27 | end |
27 | 28 | ||
28 | group :test do | 29 | group :test do |
29 | - gem 'rspec' | ||
30 | - gem 'rspec-rails' | ||
31 | - gem 'mocha', :require => false | 30 | + gem 'rspec', '~> 2.10.0' |
31 | + gem 'rspec-rails', '~> 2.10.1' | ||
32 | + gem 'mocha', '~> 1.1.0', :require => false | ||
32 | end | 33 | end |
33 | 34 | ||
34 | group :cucumber do | 35 | group :cucumber do |
35 | - gem 'cucumber-rails', :require => false | ||
36 | - gem 'capybara' | ||
37 | - gem 'cucumber' | ||
38 | - gem 'database_cleaner' | ||
39 | - gem 'selenium-webdriver' | 36 | + gem 'cucumber-rails', '~> 1.0.6', :require => false |
37 | + gem 'capybara', '~> 2.1.0' | ||
38 | + gem 'cucumber', '~> 1.0.6' | ||
39 | + gem 'database_cleaner', '~> 1.2.0' | ||
40 | + gem 'selenium-webdriver', '~> 2.39.0' | ||
40 | end | 41 | end |
41 | 42 | ||
42 | # include plugin gemfiles | 43 | # include plugin gemfiles |
Gemfile.lock
@@ -1,191 +0,0 @@ | @@ -1,191 +0,0 @@ | ||
1 | -PATH | ||
2 | - remote: vendor/prototype_legacy_helper | ||
3 | - specs: | ||
4 | - prototype_legacy_helper (0.0.0) | ||
5 | - | ||
6 | -GEM | ||
7 | - remote: https://rubygems.org/ | ||
8 | - specs: | ||
9 | - RedCloth (4.2.9) | ||
10 | - actionmailer (3.2.6) | ||
11 | - actionpack (= 3.2.6) | ||
12 | - mail (~> 2.4.4) | ||
13 | - actionpack (3.2.6) | ||
14 | - activemodel (= 3.2.6) | ||
15 | - activesupport (= 3.2.6) | ||
16 | - builder (~> 3.0.0) | ||
17 | - erubis (~> 2.7.0) | ||
18 | - journey (~> 1.0.1) | ||
19 | - rack (~> 1.4.0) | ||
20 | - rack-cache (~> 1.2) | ||
21 | - rack-test (~> 0.6.1) | ||
22 | - sprockets (~> 2.1.3) | ||
23 | - activemodel (3.2.6) | ||
24 | - activesupport (= 3.2.6) | ||
25 | - builder (~> 3.0.0) | ||
26 | - activerecord (3.2.6) | ||
27 | - activemodel (= 3.2.6) | ||
28 | - activesupport (= 3.2.6) | ||
29 | - arel (~> 3.0.2) | ||
30 | - tzinfo (~> 0.3.29) | ||
31 | - activeresource (3.2.6) | ||
32 | - activemodel (= 3.2.6) | ||
33 | - activesupport (= 3.2.6) | ||
34 | - activesupport (3.2.6) | ||
35 | - i18n (~> 0.6) | ||
36 | - multi_json (~> 1.0) | ||
37 | - acts-as-taggable-on (3.0.2) | ||
38 | - rails (>= 3, < 5) | ||
39 | - arel (3.0.2) | ||
40 | - builder (3.0.0) | ||
41 | - capybara (2.1.0) | ||
42 | - mime-types (>= 1.16) | ||
43 | - nokogiri (>= 1.3.3) | ||
44 | - rack (>= 1.0.0) | ||
45 | - rack-test (>= 0.5.4) | ||
46 | - xpath (~> 2.0) | ||
47 | - childprocess (0.3.3) | ||
48 | - ffi (~> 1.0.6) | ||
49 | - cucumber (1.0.6) | ||
50 | - builder (>= 2.1.2) | ||
51 | - diff-lcs (>= 1.1.2) | ||
52 | - gherkin (~> 2.4.18) | ||
53 | - json (>= 1.4.6) | ||
54 | - term-ansicolor (>= 1.0.6) | ||
55 | - cucumber-rails (1.0.6) | ||
56 | - capybara (>= 1.1.1) | ||
57 | - cucumber (>= 1.0.6) | ||
58 | - nokogiri (>= 1.5.0) | ||
59 | - daemons (1.1.5) | ||
60 | - dalli (2.7.0) | ||
61 | - database_cleaner (1.2.0) | ||
62 | - diff-lcs (1.1.3) | ||
63 | - erubis (2.7.0) | ||
64 | - eventmachine (0.12.10) | ||
65 | - exception_notification (4.0.1) | ||
66 | - actionmailer (>= 3.0.4) | ||
67 | - activesupport (>= 3.0.4) | ||
68 | - fast_gettext (0.6.8) | ||
69 | - ffi (1.0.11) | ||
70 | - gherkin (2.4.21) | ||
71 | - json (>= 1.4.6) | ||
72 | - hike (1.2.1) | ||
73 | - hpricot (0.8.6) | ||
74 | - i18n (0.6.0) | ||
75 | - journey (1.0.3) | ||
76 | - json (1.7.3) | ||
77 | - mail (2.4.4) | ||
78 | - i18n (>= 0.4.0) | ||
79 | - mime-types (~> 1.16) | ||
80 | - treetop (~> 1.4.8) | ||
81 | - metaclass (0.0.1) | ||
82 | - mime-types (1.19) | ||
83 | - mocha (0.11.3) | ||
84 | - metaclass (~> 0.0.1) | ||
85 | - multi_json (1.3.6) | ||
86 | - nokogiri (1.5.5) | ||
87 | - pg (0.13.2) | ||
88 | - polyglot (0.3.3) | ||
89 | - prototype-rails (3.2.1) | ||
90 | - rails (~> 3.2) | ||
91 | - rack (1.4.1) | ||
92 | - rack-cache (1.2) | ||
93 | - rack (>= 0.4) | ||
94 | - rack-ssl (1.3.2) | ||
95 | - rack | ||
96 | - rack-test (0.6.1) | ||
97 | - rack (>= 1.0) | ||
98 | - rails (3.2.6) | ||
99 | - actionmailer (= 3.2.6) | ||
100 | - actionpack (= 3.2.6) | ||
101 | - activerecord (= 3.2.6) | ||
102 | - activeresource (= 3.2.6) | ||
103 | - activesupport (= 3.2.6) | ||
104 | - bundler (~> 1.0) | ||
105 | - railties (= 3.2.6) | ||
106 | - rails_autolink (1.1.5) | ||
107 | - rails (> 3.1) | ||
108 | - railties (3.2.6) | ||
109 | - actionpack (= 3.2.6) | ||
110 | - activesupport (= 3.2.6) | ||
111 | - rack-ssl (~> 1.3.2) | ||
112 | - rake (>= 0.8.7) | ||
113 | - rdoc (~> 3.4) | ||
114 | - thor (>= 0.14.6, < 2.0) | ||
115 | - rake (0.9.2.2) | ||
116 | - rdoc (3.9.4) | ||
117 | - rest-client (1.6.7) | ||
118 | - mime-types (>= 1.16) | ||
119 | - rmagick (2.13.1) | ||
120 | - rspec (2.10.0) | ||
121 | - rspec-core (~> 2.10.0) | ||
122 | - rspec-expectations (~> 2.10.0) | ||
123 | - rspec-mocks (~> 2.10.0) | ||
124 | - rspec-core (2.10.1) | ||
125 | - rspec-expectations (2.10.0) | ||
126 | - diff-lcs (~> 1.1.3) | ||
127 | - rspec-mocks (2.10.1) | ||
128 | - rspec-rails (2.10.1) | ||
129 | - actionpack (>= 3.0) | ||
130 | - activesupport (>= 3.0) | ||
131 | - railties (>= 3.0) | ||
132 | - rspec (~> 2.10.0) | ||
133 | - ruby-feedparser (0.7) | ||
134 | - rubyzip (1.1.2) | ||
135 | - selenium-webdriver (2.39.0) | ||
136 | - childprocess (>= 0.2.5) | ||
137 | - multi_json (~> 1.0) | ||
138 | - rubyzip (~> 1.0) | ||
139 | - websocket (~> 1.0.4) | ||
140 | - sprockets (2.1.3) | ||
141 | - hike (~> 1.2) | ||
142 | - multi_json (~> 1.0) | ||
143 | - rack (~> 1.0) | ||
144 | - tilt (~> 1.1, != 1.3.0) | ||
145 | - term-ansicolor (1.0.7) | ||
146 | - thin (1.3.1) | ||
147 | - daemons (>= 1.0.9) | ||
148 | - eventmachine (>= 0.12.6) | ||
149 | - rack (>= 1.0.0) | ||
150 | - thor (0.15.3) | ||
151 | - tilt (1.3.3) | ||
152 | - treetop (1.4.10) | ||
153 | - polyglot | ||
154 | - polyglot (>= 0.3.1) | ||
155 | - tzinfo (0.3.33) | ||
156 | - websocket (1.0.7) | ||
157 | - will_paginate (3.0.3) | ||
158 | - xpath (2.0.0) | ||
159 | - nokogiri (~> 1.3) | ||
160 | - | ||
161 | -PLATFORMS | ||
162 | - ruby | ||
163 | - | ||
164 | -DEPENDENCIES | ||
165 | - RedCloth | ||
166 | - acts-as-taggable-on | ||
167 | - capybara | ||
168 | - cucumber | ||
169 | - cucumber-rails | ||
170 | - daemons | ||
171 | - dalli | ||
172 | - database_cleaner | ||
173 | - exception_notification | ||
174 | - fast_gettext | ||
175 | - hpricot | ||
176 | - mocha | ||
177 | - nokogiri | ||
178 | - pg | ||
179 | - prototype-rails | ||
180 | - prototype_legacy_helper (= 0.0.0)! | ||
181 | - rails | ||
182 | - rails_autolink | ||
183 | - rake | ||
184 | - rest-client | ||
185 | - rmagick | ||
186 | - rspec | ||
187 | - rspec-rails | ||
188 | - ruby-feedparser | ||
189 | - selenium-webdriver | ||
190 | - thin | ||
191 | - will_paginate |
Rakefile
@@ -6,3 +6,13 @@ | @@ -6,3 +6,13 @@ | ||
6 | require File.expand_path('../config/application', __FILE__) | 6 | require File.expand_path('../config/application', __FILE__) |
7 | 7 | ||
8 | Noosfero::Application.load_tasks | 8 | Noosfero::Application.load_tasks |
9 | + | ||
10 | +[ | ||
11 | + "baseplugins/*/{tasks,lib/tasks,rails/tasks}/**/*.rake", | ||
12 | + "config/plugins/*/{tasks,lib/tasks,rails/tasks}/**/*.rake", | ||
13 | + "config/plugins/*/vendor/plugins/*/{tasks,lib/tasks,rails/tasks}/**/*.rake", | ||
14 | +].map do |pattern| | ||
15 | + Dir.glob(pattern).sort | ||
16 | +end.flatten.each do |taskfile| | ||
17 | + load taskfile | ||
18 | +end |
Vagrantfile
@@ -3,7 +3,7 @@ | @@ -3,7 +3,7 @@ | ||
3 | 3 | ||
4 | VAGRANTFILE_API_VERSION = "2" | 4 | VAGRANTFILE_API_VERSION = "2" |
5 | Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| | 5 | Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| |
6 | - config.vm.box = "debian-wheezy" | 6 | + config.vm.box = ENV.fetch('VAGRANT_BOX', "debian-wheezy") |
7 | config.vm.network :forwarded_port, host: 3000, guest: 3000 | 7 | config.vm.network :forwarded_port, host: 3000, guest: 3000 |
8 | config.vm.provision :shell do |shell| | 8 | config.vm.provision :shell do |shell| |
9 | shell.inline = 'su vagrant -c /vagrant/script/vagrant' | 9 | shell.inline = 'su vagrant -c /vagrant/script/vagrant' |
app/controllers/admin/environment_design_controller.rb
@@ -3,9 +3,7 @@ class EnvironmentDesignController < BoxOrganizerController | @@ -3,9 +3,7 @@ class EnvironmentDesignController < BoxOrganizerController | ||
3 | protect 'edit_environment_design', :environment | 3 | protect 'edit_environment_design', :environment |
4 | 4 | ||
5 | def available_blocks | 5 | def available_blocks |
6 | - # TODO EnvironmentStatisticsBlock is DEPRECATED and will be removed from | ||
7 | - # the Noosfero core soon, see ActionItem3045 | ||
8 | - @available_blocks ||= [ ArticleBlock, LoginBlock, EnvironmentStatisticsBlock, RecentDocumentsBlock, EnterprisesBlock, CommunitiesBlock, SellersSearchBlock, LinkListBlock, FeedReaderBlock, SlideshowBlock, HighlightsBlock, FeaturedProductsBlock, CategoriesBlock, RawHTMLBlock, TagsBlock ] | 6 | + @available_blocks ||= [ ArticleBlock, LoginBlock, RecentDocumentsBlock, EnterprisesBlock, CommunitiesBlock, SellersSearchBlock, LinkListBlock, FeedReaderBlock, SlideshowBlock, HighlightsBlock, FeaturedProductsBlock, CategoriesBlock, RawHTMLBlock, TagsBlock ] |
9 | @available_blocks += plugins.dispatch(:extra_blocks, :type => Environment) | 7 | @available_blocks += plugins.dispatch(:extra_blocks, :type => Environment) |
10 | end | 8 | end |
11 | 9 |
app/controllers/application_controller.rb
@@ -8,7 +8,7 @@ class ApplicationController < ActionController::Base | @@ -8,7 +8,7 @@ class ApplicationController < ActionController::Base | ||
8 | before_filter :init_noosfero_plugins | 8 | before_filter :init_noosfero_plugins |
9 | before_filter :allow_cross_domain_access | 9 | before_filter :allow_cross_domain_access |
10 | before_filter :login_required, :if => :private_environment? | 10 | before_filter :login_required, :if => :private_environment? |
11 | - before_filter :verify_members_whitelist, :if => :user | 11 | + before_filter :verify_members_whitelist, :if => [:private_environment?, :user] |
12 | 12 | ||
13 | def verify_members_whitelist | 13 | def verify_members_whitelist |
14 | render_access_denied unless user.is_admin? || environment.in_whitelist?(user) | 14 | render_access_denied unless user.is_admin? || environment.in_whitelist?(user) |
@@ -40,7 +40,7 @@ class ApplicationController < ActionController::Base | @@ -40,7 +40,7 @@ class ApplicationController < ActionController::Base | ||
40 | 40 | ||
41 | theme_layout = theme_option(:layout) | 41 | theme_layout = theme_option(:layout) |
42 | if theme_layout | 42 | if theme_layout |
43 | - theme_view_file('layouts/'+theme_layout) || theme_layout | 43 | + (theme_view_file('layouts/'+theme_layout) || theme_layout).to_s |
44 | else | 44 | else |
45 | 'application' | 45 | 'application' |
46 | end | 46 | end |
app/controllers/my_profile/cms_controller.rb
@@ -4,6 +4,12 @@ class CmsController < MyProfileController | @@ -4,6 +4,12 @@ class CmsController < MyProfileController | ||
4 | 4 | ||
5 | include ArticleHelper | 5 | include ArticleHelper |
6 | 6 | ||
7 | + def search_tags | ||
8 | + arg = params[:term].downcase | ||
9 | + result = ActsAsTaggableOn::Tag.find(:all, :conditions => ['LOWER(name) LIKE ?', "%#{arg}%"]) | ||
10 | + render :text => prepare_to_token_input_by_label(result).to_json, :content_type => 'application/json' | ||
11 | + end | ||
12 | + | ||
7 | def self.protect_if(*args) | 13 | def self.protect_if(*args) |
8 | before_filter(*args) do |c| | 14 | before_filter(*args) do |c| |
9 | user, profile = c.send(:user), c.send(:profile) | 15 | user, profile = c.send(:user), c.send(:profile) |
@@ -221,7 +227,7 @@ class CmsController < MyProfileController | @@ -221,7 +227,7 @@ class CmsController < MyProfileController | ||
221 | @article = profile.articles.find(params[:id]) | 227 | @article = profile.articles.find(params[:id]) |
222 | if request.post? | 228 | if request.post? |
223 | @article.destroy | 229 | @article.destroy |
224 | - session[:notice] = _("\"#{@article.name}\" was removed.") | 230 | + session[:notice] = _("\"%s\" was removed." % @article.name) |
225 | referer = Rails.application.routes.recognize_path URI.parse(request.referer).path rescue nil | 231 | referer = Rails.application.routes.recognize_path URI.parse(request.referer).path rescue nil |
226 | if referer and referer[:controller] == 'cms' and referer[:action] != 'edit' | 232 | if referer and referer[:controller] == 'cms' and referer[:action] != 'edit' |
227 | redirect_to referer | 233 | redirect_to referer |
app/controllers/my_profile/memberships_controller.rb
@@ -21,6 +21,9 @@ class MembershipsController < MyProfileController | @@ -21,6 +21,9 @@ class MembershipsController < MyProfileController | ||
21 | @back_to = params[:back_to] || url_for(:action => 'index') | 21 | @back_to = params[:back_to] || url_for(:action => 'index') |
22 | if request.post? && @community.valid? | 22 | if request.post? && @community.valid? |
23 | @community = Community.create_after_moderation(user, params[:community].merge({:environment => environment})) | 23 | @community = Community.create_after_moderation(user, params[:community].merge({:environment => environment})) |
24 | + if @community.new_record? | ||
25 | + session[:notice] = _('Your new community creation request will be evaluated by an administrator. You will be notified.') | ||
26 | + end | ||
24 | redirect_to @back_to | 27 | redirect_to @back_to |
25 | return | 28 | return |
26 | end | 29 | end |
app/controllers/my_profile/tasks_controller.rb
@@ -4,6 +4,7 @@ class TasksController < MyProfileController | @@ -4,6 +4,7 @@ class TasksController < MyProfileController | ||
4 | 4 | ||
5 | def index | 5 | def index |
6 | @filter = params[:filter_type].blank? ? nil : params[:filter_type] | 6 | @filter = params[:filter_type].blank? ? nil : params[:filter_type] |
7 | + @task_types = Task.pending_types_for(profile) | ||
7 | @tasks = Task.to(profile).without_spam.pending.of(@filter).order_by('created_at', 'asc').paginate(:per_page => Task.per_page, :page => params[:page]) | 8 | @tasks = Task.to(profile).without_spam.pending.of(@filter).order_by('created_at', 'asc').paginate(:per_page => Task.per_page, :page => params[:page]) |
8 | @failed = params ? params[:failed] : {} | 9 | @failed = params ? params[:failed] : {} |
9 | end | 10 | end |
app/controllers/public/account_controller.rb
@@ -15,11 +15,23 @@ class AccountController < ApplicationController | @@ -15,11 +15,23 @@ class AccountController < ApplicationController | ||
15 | 15 | ||
16 | def activate | 16 | def activate |
17 | @user = User.find_by_activation_code(params[:activation_code]) if params[:activation_code] | 17 | @user = User.find_by_activation_code(params[:activation_code]) if params[:activation_code] |
18 | - if @user and @user.activate | ||
19 | - @message = _("Your account has been activated, now you can log in!") | ||
20 | - check_redirection | ||
21 | - session[:join] = params[:join] unless params[:join].blank? | ||
22 | - render :action => 'login', :userlogin => @user.login | 18 | + if @user |
19 | + unless @user.environment.enabled?('admin_must_approve_new_users') | ||
20 | + if @user.activate | ||
21 | + @message = _("Your account has been activated, now you can log in!") | ||
22 | + check_redirection | ||
23 | + session[:join] = params[:join] unless params[:join].blank? | ||
24 | + render :action => 'login', :userlogin => @user.login | ||
25 | + end | ||
26 | + else | ||
27 | + if @user.create_moderate_task | ||
28 | + session[:notice] = _('Thanks for registering. The administrators were notified.') | ||
29 | + @register_pending = true | ||
30 | + @user.activation_code = nil | ||
31 | + @user.save! | ||
32 | + redirect_to :controller => :home | ||
33 | + end | ||
34 | + end | ||
23 | else | 35 | else |
24 | session[:notice] = _("It looks like you're trying to activate an account. Perhaps have already activated this account?") | 36 | session[:notice] = _("It looks like you're trying to activate an account. Perhaps have already activated this account?") |
25 | redirect_to :controller => :home | 37 | redirect_to :controller => :home |
@@ -85,6 +97,7 @@ class AccountController < ApplicationController | @@ -85,6 +97,7 @@ class AccountController < ApplicationController | ||
85 | @user.return_to = session[:return_to] | 97 | @user.return_to = session[:return_to] |
86 | @person = Person.new(params[:profile_data]) | 98 | @person = Person.new(params[:profile_data]) |
87 | @person.environment = @user.environment | 99 | @person.environment = @user.environment |
100 | + | ||
88 | if request.post? | 101 | if request.post? |
89 | if may_be_a_bot | 102 | if may_be_a_bot |
90 | set_signup_start_time_for_now | 103 | set_signup_start_time_for_now |
@@ -103,11 +116,20 @@ class AccountController < ApplicationController | @@ -103,11 +116,20 @@ class AccountController < ApplicationController | ||
103 | invitation.update_attributes!({:friend => @user.person}) | 116 | invitation.update_attributes!({:friend => @user.person}) |
104 | invitation.finish | 117 | invitation.finish |
105 | end | 118 | end |
119 | + | ||
120 | + unless params[:file].nil? | ||
121 | + image = Image::new :uploaded_data=> params[:file][:image] | ||
122 | + | ||
123 | + @user.person.image = image | ||
124 | + @user.person.save | ||
125 | + end | ||
126 | + | ||
106 | if @user.activated? | 127 | if @user.activated? |
107 | self.current_user = @user | 128 | self.current_user = @user |
108 | check_join_in_community(@user) | 129 | check_join_in_community(@user) |
109 | go_to_signup_initial_page | 130 | go_to_signup_initial_page |
110 | else | 131 | else |
132 | + session[:notice] = _('Thanks for registering!') | ||
111 | @register_pending = true | 133 | @register_pending = true |
112 | end | 134 | end |
113 | end | 135 | end |
app/controllers/public/chat_controller.rb
@@ -19,9 +19,13 @@ class ChatController < PublicController | @@ -19,9 +19,13 @@ class ChatController < PublicController | ||
19 | def avatar | 19 | def avatar |
20 | profile = environment.profiles.find_by_identifier(params[:id]) | 20 | profile = environment.profiles.find_by_identifier(params[:id]) |
21 | filename, mimetype = profile_icon(profile, :minor, true) | 21 | filename, mimetype = profile_icon(profile, :minor, true) |
22 | - data = File.read(File.join(Rails.root, 'public', filename)) | ||
23 | - render :text => data, :layout => false, :content_type => mimetype | ||
24 | - expires_in 24.hours | 22 | + if filename =~ /^https?:/ |
23 | + redirect_to filename | ||
24 | + else | ||
25 | + data = File.read(File.join(Rails.root, 'public', filename)) | ||
26 | + render :text => data, :layout => false, :content_type => mimetype | ||
27 | + expires_in 24.hours | ||
28 | + end | ||
25 | end | 29 | end |
26 | 30 | ||
27 | def index | 31 | def index |
app/controllers/public/content_viewer_controller.rb
@@ -216,8 +216,6 @@ class ContentViewerController < ApplicationController | @@ -216,8 +216,6 @@ class ContentViewerController < ApplicationController | ||
216 | if @page.has_posts? | 216 | if @page.has_posts? |
217 | posts = get_posts(params[:year], params[:month]) | 217 | posts = get_posts(params[:year], params[:month]) |
218 | 218 | ||
219 | - posts = posts.includes(:parent, {:profile => [:domains, :environment]}, :author) | ||
220 | - | ||
221 | #FIXME Need to run this before the pagination because this version of | 219 | #FIXME Need to run this before the pagination because this version of |
222 | # will_paginate returns a will_paginate collection instead of a | 220 | # will_paginate returns a will_paginate collection instead of a |
223 | # relation. | 221 | # relation. |
app/helpers/application_helper.rb
@@ -482,7 +482,12 @@ module ApplicationHelper | @@ -482,7 +482,12 @@ module ApplicationHelper | ||
482 | '/images/icons-app/enterprise-'+ size.to_s() +'.png' | 482 | '/images/icons-app/enterprise-'+ size.to_s() +'.png' |
483 | end | 483 | end |
484 | else | 484 | else |
485 | - '/images/icons-app/person-'+ size.to_s() +'.png' | 485 | + pixels = Image.attachment_options[:thumbnails][size].split('x').first |
486 | + gravatar_profile_image_url( | ||
487 | + profile.email, | ||
488 | + :size => pixels, | ||
489 | + :d => gravatar_default | ||
490 | + ) | ||
486 | end | 491 | end |
487 | filename = default_or_themed_icon(icon) | 492 | filename = default_or_themed_icon(icon) |
488 | end | 493 | end |
@@ -602,7 +607,7 @@ module ApplicationHelper | @@ -602,7 +607,7 @@ module ApplicationHelper | ||
602 | end | 607 | end |
603 | 608 | ||
604 | def gravatar_default | 609 | def gravatar_default |
605 | - (respond_to?(:theme_option) && theme_option.present? && theme_option['gravatar']) || NOOSFERO_CONF['gravatar'] | 610 | + (respond_to?(:theme_option) && theme_option.present? && theme_option['gravatar']) || NOOSFERO_CONF['gravatar'] || 'mm' |
606 | end | 611 | end |
607 | 612 | ||
608 | attr_reader :environment | 613 | attr_reader :environment |
@@ -1281,9 +1286,9 @@ module ApplicationHelper | @@ -1281,9 +1286,9 @@ module ApplicationHelper | ||
1281 | 1286 | ||
1282 | def delete_article_message(article) | 1287 | def delete_article_message(article) |
1283 | if article.folder? | 1288 | if article.folder? |
1284 | - _("Are you sure that you want to remove the folder \"#{article.name}\"? Note that all the items inside it will also be removed!") | 1289 | + _("Are you sure that you want to remove the folder \"%s\"? Note that all the items inside it will also be removed!") % article.name |
1285 | else | 1290 | else |
1286 | - _("Are you sure that you want to remove the item \"#{article.name}\"?") | 1291 | + _("Are you sure that you want to remove the item \"%s\"?") % article.name |
1287 | end | 1292 | end |
1288 | end | 1293 | end |
1289 | 1294 |
app/helpers/article_helper.rb
@@ -83,6 +83,10 @@ module ArticleHelper | @@ -83,6 +83,10 @@ module ArticleHelper | ||
83 | array.map { |object| {:id => object.id, :name => object.name} } | 83 | array.map { |object| {:id => object.id, :name => object.name} } |
84 | end | 84 | end |
85 | 85 | ||
86 | + def prepare_to_token_input_by_label(array) | ||
87 | + array.map { |object| {:label => object.name, :value => object.name} } | ||
88 | + end | ||
89 | + | ||
86 | def cms_label_for_new_children | 90 | def cms_label_for_new_children |
87 | _('New article') | 91 | _('New article') |
88 | end | 92 | end |
app/helpers/layout_helper.rb
@@ -27,6 +27,7 @@ module LayoutHelper | @@ -27,6 +27,7 @@ module LayoutHelper | ||
27 | 'thickbox', | 27 | 'thickbox', |
28 | 'lightbox', | 28 | 'lightbox', |
29 | 'colorbox', | 29 | 'colorbox', |
30 | + 'inputosaurus', | ||
30 | pngfix_stylesheet_path, | 31 | pngfix_stylesheet_path, |
31 | ] + tokeninput_stylesheets | 32 | ] + tokeninput_stylesheets |
32 | plugins_stylesheets = @plugins.select(&:stylesheet?).map { |plugin| plugin.class.public_path('style.css') } | 33 | plugins_stylesheets = @plugins.select(&:stylesheet?).map { |plugin| plugin.class.public_path('style.css') } |
app/models/article.rb
@@ -157,14 +157,17 @@ class Article < ActiveRecord::Base | @@ -157,14 +157,17 @@ class Article < ActiveRecord::Base | ||
157 | self.profile | 157 | self.profile |
158 | end | 158 | end |
159 | 159 | ||
160 | - def self.human_attribute_name(attrib, options = {}) | 160 | + def self.human_attribute_name_with_customization(attrib, options={}) |
161 | case attrib.to_sym | 161 | case attrib.to_sym |
162 | when :name | 162 | when :name |
163 | _('Title') | 163 | _('Title') |
164 | else | 164 | else |
165 | - _(self.superclass.human_attribute_name(attrib)) | 165 | + _(self.human_attribute_name_without_customization(attrib)) |
166 | end | 166 | end |
167 | end | 167 | end |
168 | + class << self | ||
169 | + alias_method_chain :human_attribute_name, :customization | ||
170 | + end | ||
168 | 171 | ||
169 | def css_class_list | 172 | def css_class_list |
170 | [self.class.name.to_css_class] | 173 | [self.class.name.to_css_class] |
app/models/box.rb
@@ -28,9 +28,6 @@ class Box < ActiveRecord::Base | @@ -28,9 +28,6 @@ class Box < ActiveRecord::Base | ||
28 | CategoriesBlock, | 28 | CategoriesBlock, |
29 | CommunitiesBlock, | 29 | CommunitiesBlock, |
30 | EnterprisesBlock, | 30 | EnterprisesBlock, |
31 | - # TODO EnvironmentStatisticsBlock is DEPRECATED and will be removed from | ||
32 | - # the Noosfero core soon, see ActionItem3045 | ||
33 | - EnvironmentStatisticsBlock, | ||
34 | FansBlock, | 31 | FansBlock, |
35 | FavoriteEnterprisesBlock, | 32 | FavoriteEnterprisesBlock, |
36 | FeedReaderBlock, | 33 | FeedReaderBlock, |
@@ -53,9 +50,6 @@ class Box < ActiveRecord::Base | @@ -53,9 +50,6 @@ class Box < ActiveRecord::Base | ||
53 | CommunitiesBlock, | 50 | CommunitiesBlock, |
54 | DisabledEnterpriseMessageBlock, | 51 | DisabledEnterpriseMessageBlock, |
55 | EnterprisesBlock, | 52 | EnterprisesBlock, |
56 | - # TODO EnvironmentStatisticsBlock is DEPRECATED and will be removed from | ||
57 | - # the Noosfero core soon, see ActionItem3045 | ||
58 | - EnvironmentStatisticsBlock, | ||
59 | FansBlock, | 53 | FansBlock, |
60 | FavoriteEnterprisesBlock, | 54 | FavoriteEnterprisesBlock, |
61 | FeaturedProductsBlock, | 55 | FeaturedProductsBlock, |
app/models/change_password.rb
@@ -2,16 +2,19 @@ class ChangePassword < Task | @@ -2,16 +2,19 @@ class ChangePassword < Task | ||
2 | 2 | ||
3 | attr_accessor :password, :password_confirmation | 3 | attr_accessor :password, :password_confirmation |
4 | 4 | ||
5 | - def self.human_attribute_name(attrib, options = {}) | 5 | + def self.human_attribute_name_with_customization(attrib, options={}) |
6 | case attrib.to_sym | 6 | case attrib.to_sym |
7 | when :password | 7 | when :password |
8 | _('Password') | 8 | _('Password') |
9 | when :password_confirmation | 9 | when :password_confirmation |
10 | _('Password Confirmation') | 10 | _('Password Confirmation') |
11 | else | 11 | else |
12 | - _(self.superclass.human_attribute_name(attrib)) | 12 | + _(self.human_attribute_name_without_customization(attrib)) |
13 | end | 13 | end |
14 | end | 14 | end |
15 | + class << self | ||
16 | + alias_method_chain :human_attribute_name, :customization | ||
17 | + end | ||
15 | 18 | ||
16 | validates_presence_of :requestor | 19 | validates_presence_of :requestor |
17 | 20 |
app/models/environment.rb
@@ -124,6 +124,7 @@ class Environment < ActiveRecord::Base | @@ -124,6 +124,7 @@ class Environment < ActiveRecord::Base | ||
124 | 'organizations_are_moderated_by_default' => _("Organizations have moderated publication by default"), | 124 | 'organizations_are_moderated_by_default' => _("Organizations have moderated publication by default"), |
125 | 'enable_organization_url_change' => _("Allow organizations to change their URL"), | 125 | 'enable_organization_url_change' => _("Allow organizations to change their URL"), |
126 | 'admin_must_approve_new_communities' => _("Admin must approve creation of communities"), | 126 | 'admin_must_approve_new_communities' => _("Admin must approve creation of communities"), |
127 | + 'admin_must_approve_new_users' => _("Admin must approve registration of new users"), | ||
127 | 'show_balloon_with_profile_links_when_clicked' => _('Show a balloon with profile links when a profile image is clicked'), | 128 | 'show_balloon_with_profile_links_when_clicked' => _('Show a balloon with profile links when a profile image is clicked'), |
128 | 'xmpp_chat' => _('XMPP/Jabber based chat'), | 129 | 'xmpp_chat' => _('XMPP/Jabber based chat'), |
129 | 'show_zoom_button_on_article_images' => _('Show a zoom link on all article images'), | 130 | 'show_zoom_button_on_article_images' => _('Show a zoom link on all article images'), |
@@ -176,9 +177,6 @@ class Environment < ActiveRecord::Base | @@ -176,9 +177,6 @@ class Environment < ActiveRecord::Base | ||
176 | 177 | ||
177 | # "left" area | 178 | # "left" area |
178 | env.boxes[1].blocks << LoginBlock.new | 179 | env.boxes[1].blocks << LoginBlock.new |
179 | - # TODO EnvironmentStatisticsBlock is DEPRECATED and will be removed from | ||
180 | - # the Noosfero core soon, see ActionItem3045 | ||
181 | - env.boxes[1].blocks << EnvironmentStatisticsBlock.new | ||
182 | env.boxes[1].blocks << RecentDocumentsBlock.new | 180 | env.boxes[1].blocks << RecentDocumentsBlock.new |
183 | 181 | ||
184 | # "right" area | 182 | # "right" area |
@@ -806,7 +804,7 @@ class Environment < ActiveRecord::Base | @@ -806,7 +804,7 @@ class Environment < ActiveRecord::Base | ||
806 | end | 804 | end |
807 | 805 | ||
808 | def notification_emails | 806 | def notification_emails |
809 | - [noreply_email.blank? ? nil : noreply_email].compact + admins.map(&:email) | 807 | + [contact_email].select(&:present?) + admins.map(&:email) |
810 | end | 808 | end |
811 | 809 | ||
812 | after_create :create_templates | 810 | after_create :create_templates |
app/models/environment_statistics_block.rb
@@ -1,33 +0,0 @@ | @@ -1,33 +0,0 @@ | ||
1 | -# TODO EnvironmentStatisticsBlock is DEPRECATED and will be removed from | ||
2 | -# the Noosfero core soon, see ActionItem3045 | ||
3 | - | ||
4 | -class EnvironmentStatisticsBlock < Block | ||
5 | - | ||
6 | - def self.description | ||
7 | - _('Environment stastistics (DEPRECATED)') | ||
8 | - end | ||
9 | - | ||
10 | - def default_title | ||
11 | - _('Statistics for %s') % owner.name | ||
12 | - end | ||
13 | - | ||
14 | - def help | ||
15 | - _('This block presents some statistics about your environment.') | ||
16 | - end | ||
17 | - | ||
18 | - def content(args={}) | ||
19 | - users = owner.people.visible.count | ||
20 | - enterprises = owner.enterprises.visible.count | ||
21 | - communities = owner.communities.visible.count | ||
22 | - | ||
23 | - info = [] | ||
24 | - info << (n_('One user', '%{num} users', users) % { :num => users }) | ||
25 | - unless owner.enabled?('disable_asset_enterprises') | ||
26 | - info << (n_('One enterprise', '%{num} enterprises', enterprises) % { :num => enterprises }) | ||
27 | - end | ||
28 | - info << (n_('One community', '%{num} communities', communities) % { :num => communities }) | ||
29 | - | ||
30 | - block_title(title) + content_tag('ul', info.map {|item| content_tag('li', item) }.join("\n")) | ||
31 | - end | ||
32 | - | ||
33 | -end |
app/models/external_feed.rb
@@ -30,6 +30,7 @@ class ExternalFeed < ActiveRecord::Base | @@ -30,6 +30,7 @@ class ExternalFeed < ActiveRecord::Base | ||
30 | article.source = link | 30 | article.source = link |
31 | article.profile = blog.profile | 31 | article.profile = blog.profile |
32 | article.parent = blog | 32 | article.parent = blog |
33 | + article.author_name = self.feed_title | ||
33 | unless blog.children.exists?(:slug => article.slug) | 34 | unless blog.children.exists?(:slug => article.slug) |
34 | article.save! | 35 | article.save! |
35 | article.delay.create_activity | 36 | article.delay.create_activity |
app/models/feed_reader_block.rb
app/models/link_list_block.rb
@@ -84,10 +84,6 @@ class LinkListBlock < Block | @@ -84,10 +84,6 @@ class LinkListBlock < Block | ||
84 | end | 84 | end |
85 | end | 85 | end |
86 | 86 | ||
87 | - def editable? | ||
88 | - true | ||
89 | - end | ||
90 | - | ||
91 | def icons_options | 87 | def icons_options |
92 | ICONS.map do |i| | 88 | ICONS.map do |i| |
93 | "<span title=\"#{i[1]}\" class=\"icon-#{i[0]}\" onclick=\"changeIcon(this, '#{i[0]}')\"></span>".html_safe | 89 | "<span title=\"#{i[1]}\" class=\"icon-#{i[0]}\" onclick=\"changeIcon(this, '#{i[0]}')\"></span>".html_safe |
app/models/main_block.rb
@@ -0,0 +1,59 @@ | @@ -0,0 +1,59 @@ | ||
1 | +class ModerateUserRegistration < Task | ||
2 | + | ||
3 | + settings_items :user_id, :type => String | ||
4 | + settings_items :name, :type => String | ||
5 | + settings_items :author_name, :type => String | ||
6 | + settings_items :email, :type => String | ||
7 | + | ||
8 | + after_create :schedule_spam_checking | ||
9 | + | ||
10 | + alias :environment :target | ||
11 | + alias :environment= :target= | ||
12 | + | ||
13 | + def schedule_spam_checking | ||
14 | + self.delay.check_for_spam | ||
15 | + end | ||
16 | + | ||
17 | + include Noosfero::Plugin::HotSpot | ||
18 | + | ||
19 | + def sender | ||
20 | + "#{name} (#{email})" | ||
21 | + end | ||
22 | + | ||
23 | + def perform | ||
24 | + user=environment.users.find_by_id(user_id) | ||
25 | + user.activate | ||
26 | + end | ||
27 | + | ||
28 | + def title | ||
29 | + _("New user") | ||
30 | + end | ||
31 | + | ||
32 | + def subject | ||
33 | + name | ||
34 | + end | ||
35 | + | ||
36 | + def information | ||
37 | + { :message => _('%{sender} wants to register.'), | ||
38 | + :variables => {:sender => sender} } | ||
39 | + end | ||
40 | + | ||
41 | + def icon | ||
42 | + result = {:type => :defined_image, :src => '/images/icons-app/person-minor.png', :name => name} | ||
43 | + end | ||
44 | + | ||
45 | + def target_notification_description | ||
46 | + _('%{sender} tried to register.') % | ||
47 | + {:sender => sender} | ||
48 | + end | ||
49 | + | ||
50 | + def target_notification_message | ||
51 | + target_notification_description + "\n\n" + | ||
52 | + _('You need to login on %{system} in order to approve or reject this user.') % { :environment => self.environment } | ||
53 | + end | ||
54 | + | ||
55 | + def target_notification_message | ||
56 | + _("User \"%{user}\" just requested to register. You have to approve or reject it through the \"Pending Validations\" section in your control panel.\n") % { :user => self.name } | ||
57 | + end | ||
58 | + | ||
59 | +end | ||
0 | \ No newline at end of file | 60 | \ No newline at end of file |
app/models/organization.rb
@@ -135,7 +135,11 @@ class Organization < Profile | @@ -135,7 +135,11 @@ class Organization < Profile | ||
135 | end | 135 | end |
136 | 136 | ||
137 | def notification_emails | 137 | def notification_emails |
138 | - [contact_email.blank? ? nil : contact_email].compact + admins.map(&:email) | 138 | + emails = [contact_email].select(&:present?) + admins.map(&:email) |
139 | + if emails.empty? | ||
140 | + emails << environment.contact_email | ||
141 | + end | ||
142 | + emails | ||
139 | end | 143 | end |
140 | 144 | ||
141 | def already_request_membership?(person) | 145 | def already_request_membership?(person) |
app/models/profile_image_block.rb
app/models/profile_info_block.rb
app/models/profile_search_block.rb
app/models/task.rb
@@ -73,10 +73,6 @@ class Task < ActiveRecord::Base | @@ -73,10 +73,6 @@ class Task < ActiveRecord::Base | ||
73 | end | 73 | end |
74 | end | 74 | end |
75 | 75 | ||
76 | - def self.all_types | ||
77 | - %w[Invitation EnterpriseActivation AddMember Ticket SuggestArticle AddFriend CreateCommunity AbuseComplaint ApproveComment ApproveArticle CreateEnterprise ChangePassword EmailActivation InviteFriend InviteMember] | ||
78 | - end | ||
79 | - | ||
80 | # this method finished the task. It calls #perform, which must be overriden | 76 | # this method finished the task. It calls #perform, which must be overriden |
81 | # by subclasses. At the end a message (as returned by #finish_message) is | 77 | # by subclasses. At the end a message (as returned by #finish_message) is |
82 | # sent to the requestor with #notify_requestor. | 78 | # sent to the requestor with #notify_requestor. |
@@ -254,6 +250,10 @@ class Task < ActiveRecord::Base | @@ -254,6 +250,10 @@ class Task < ActiveRecord::Base | ||
254 | { :conditions => [environment_condition, profile_condition].compact.join(' OR ') } | 250 | { :conditions => [environment_condition, profile_condition].compact.join(' OR ') } |
255 | } | 251 | } |
256 | 252 | ||
253 | + def self.pending_types_for(profile) | ||
254 | + Task.to(profile).pending.select('distinct type').map { |t| [t.class.name, t.title] } | ||
255 | + end | ||
256 | + | ||
257 | def opened? | 257 | def opened? |
258 | status == Task::Status::ACTIVE || status == Task::Status::HIDDEN | 258 | status == Task::Status::ACTIVE || status == Task::Status::HIDDEN |
259 | end | 259 | end |
app/models/user.rb
@@ -16,15 +16,18 @@ class User < ActiveRecord::Base | @@ -16,15 +16,18 @@ class User < ActiveRecord::Base | ||
16 | end | 16 | end |
17 | 17 | ||
18 | # FIXME ugly workaround | 18 | # FIXME ugly workaround |
19 | - def self.human_attribute_name(attrib, options={}) | 19 | + def self.human_attribute_name_with_customization(attrib, options={}) |
20 | case attrib.to_sym | 20 | case attrib.to_sym |
21 | when :login | 21 | when :login |
22 | return [_('Username'), _('Email')].join(' / ') | 22 | return [_('Username'), _('Email')].join(' / ') |
23 | when :email | 23 | when :email |
24 | return _('e-Mail') | 24 | return _('e-Mail') |
25 | - else _(self.superclass.human_attribute_name(attrib)) | 25 | + else _(self.human_attribute_name_without_customization(attrib)) |
26 | end | 26 | end |
27 | end | 27 | end |
28 | + class << self | ||
29 | + alias_method_chain :human_attribute_name, :customization | ||
30 | + end | ||
28 | 31 | ||
29 | before_create do |user| | 32 | before_create do |user| |
30 | if user.environment.nil? | 33 | if user.environment.nil? |
@@ -47,8 +50,12 @@ class User < ActiveRecord::Base | @@ -47,8 +50,12 @@ class User < ActiveRecord::Base | ||
47 | 50 | ||
48 | user.person = p | 51 | user.person = p |
49 | end | 52 | end |
50 | - if user.environment.enabled?('skip_new_user_email_confirmation') | ||
51 | - user.activate | 53 | + if user.environment.enabled?('skip_new_user_email_confirmation') |
54 | + if user.environment.enabled?('admin_must_approve_new_users') | ||
55 | + create_moderate_task | ||
56 | + else | ||
57 | + user.activate | ||
58 | + end | ||
52 | end | 59 | end |
53 | end | 60 | end |
54 | after_create :deliver_activation_code | 61 | after_create :deliver_activation_code |
@@ -137,6 +144,15 @@ class User < ActiveRecord::Base | @@ -137,6 +144,15 @@ class User < ActiveRecord::Base | ||
137 | end | 144 | end |
138 | end | 145 | end |
139 | 146 | ||
147 | + def create_moderate_task | ||
148 | + @task = ModerateUserRegistration.new | ||
149 | + @task.user_id = self.id | ||
150 | + @task.name = self.name | ||
151 | + @task.email = self.email | ||
152 | + @task.target = self.environment | ||
153 | + @task.save | ||
154 | + end | ||
155 | + | ||
140 | def activated? | 156 | def activated? |
141 | self.activation_code.nil? && !self.activated_at.nil? | 157 | self.activation_code.nil? && !self.activated_at.nil? |
142 | end | 158 | end |
app/sweepers/profile_sweeper.rb
@@ -8,9 +8,6 @@ class ProfileSweeper # < ActiveRecord::Observer | @@ -8,9 +8,6 @@ class ProfileSweeper # < ActiveRecord::Observer | ||
8 | end | 8 | end |
9 | 9 | ||
10 | def after_create(profile) | 10 | def after_create(profile) |
11 | - # TODO EnvironmentStatisticsBlock is DEPRECATED and will be removed from | ||
12 | - # the Noosfero core soon, see ActionItem3045 | ||
13 | - expire_statistics_block_cache(profile) | ||
14 | end | 11 | end |
15 | 12 | ||
16 | protected | 13 | protected |
@@ -31,13 +28,6 @@ protected | @@ -31,13 +28,6 @@ protected | ||
31 | expire_blogs(profile) if profile.organization? | 28 | expire_blogs(profile) if profile.organization? |
32 | end | 29 | end |
33 | 30 | ||
34 | - # TODO EnvironmentStatisticsBlock is DEPRECATED and will be removed from | ||
35 | - # the Noosfero core soon, see ActionItem3045 | ||
36 | - def expire_statistics_block_cache(profile) | ||
37 | - blocks = profile.environment.blocks.select { |b| b.kind_of?(EnvironmentStatisticsBlock) } | ||
38 | - BlockSweeper.expire_blocks(blocks) | ||
39 | - end | ||
40 | - | ||
41 | def expire_blogs(profile) | 31 | def expire_blogs(profile) |
42 | profile.blogs.select{|b| !b.empty?}.each do |blog| | 32 | profile.blogs.select{|b| !b.empty?}.each do |blog| |
43 | pages = blog.posts.count / blog.posts_per_page + 1 | 33 | pages = blog.posts.count / blog.posts_per_page + 1 |
app/views/account/signup.html.erb
@@ -2,18 +2,36 @@ | @@ -2,18 +2,36 @@ | ||
2 | <div id='thanks-for-signing'> | 2 | <div id='thanks-for-signing'> |
3 | <% if environment.has_custom_welcome_screen? %> | 3 | <% if environment.has_custom_welcome_screen? %> |
4 | <%= environment.settings[:signup_welcome_screen_body].html_safe %> | 4 | <%= environment.settings[:signup_welcome_screen_body].html_safe %> |
5 | - <% else %> | ||
6 | - <h1><%= _("Welcome to %s!") % environment.name %></h1> | ||
7 | - <h3><%= _("Thanks for signing up, we're thrilled to have you on our social network!") %></h3> | ||
8 | - <p><%= _("Firstly, some tips for getting started:") %></p> | ||
9 | - <h4><%= _("Confirm your account!") %></h4> | 5 | + <% elsif environment.enabled?('admin_must_approve_new_users')%> |
6 | + <h1><%= _("Welcome to %s!") % environment.name %></h1> | ||
7 | + <h3><%= _("Thanks for signing up, we're thrilled to have you on our social network!") %></h3> | ||
8 | + <p><%= _("Firstly, some tips for getting started:") %></p> | ||
9 | + <% unless environment.enabled?('skip_new_user_email_confirmation') %> | ||
10 | + <h4><%= _("Confirm your account and wait for admin approvement!") %></h4> | ||
10 | <p><%= _("You should receive a welcome email from us shortly. Please take a second to follow the link within to confirm your account.") %></p> | 11 | <p><%= _("You should receive a welcome email from us shortly. Please take a second to follow the link within to confirm your account.") %></p> |
11 | - <p><%= _("You won't appear as %s until your account is confirmed.") % link_to(_('user'), {:controller => :search, :action => :people, :filter => 'more_recent'}, :target => '_blank') %></p> | ||
12 | - <h4><%= _("What to do next?") %></h4> | ||
13 | - <p><%= _("%s. Upload an avatar and let your friends find you easily :)") % link_to(_('Customize your profile'), {:controller => 'doc', :section => 'user', :topic => 'editing-person-info'}, :target => '_blank') %></p> | ||
14 | - <p><%= _("Learn the guidelines. Read the %s for more details on how to use this social network!") % link_to(_('Documentation'), {:controller => 'doc'}, :target => '_blank') %></p> | ||
15 | - <p><%= _("%s your Gmail, Yahoo and Hotmail contacts!") % link_to(_('Invite and find'), {:controller => 'doc', :section => 'user', :topic => 'invite-contacts'}, :target => '_blank') %></p> | ||
16 | - <p><%= _("Start exploring and have fun!") %></p> | 12 | + <p><%= _("You won't appear as %s until your account is confirmed and approved.") % link_to(_('user'), {:controller => :search, :action => :people, :filter => 'more_recent'}, :target => '_blank') %></p> |
13 | + <% else %> | ||
14 | + <h4><%= _("Wait for admin approvement!") %></h4> | ||
15 | + <p><%= _("The administrators will evaluate your signup request for approvement.") %></p> | ||
16 | + <p><%= _("You won't appear as %s until your account is approved.") % link_to(_('user'), {:controller => :search, :action => :people, :filter => 'more_recent'}, :target => '_blank') %></p> | ||
17 | + <% end %> | ||
18 | + <h4><%= _("What to do next?") %></h4> | ||
19 | + <p><%= _("%s. Upload an avatar and let your friends find you easily :)") % link_to(_('Customize your profile'), {:controller => 'doc', :section => 'user', :topic => 'editing-person-info'}, :target => '_blank') %></p> | ||
20 | + <p><%= _("Learn the guidelines. Read the %s for more details on how to use this social network!") % link_to(_('Documentation'), {:controller => 'doc'}, :target => '_blank') %></p> | ||
21 | + <p><%= _("%s your Gmail, Yahoo and Hotmail contacts!") % link_to(_('Invite and find'), {:controller => 'doc', :section => 'user', :topic => 'invite-contacts'}, :target => '_blank') %></p> | ||
22 | + <p><%= _("Start exploring and have fun!") %></p> | ||
23 | + <% else %> | ||
24 | + <h1><%= _("Welcome to %s!") % environment.name %></h1> | ||
25 | + <h3><%= _("Thanks for signing up, we're thrilled to have you on our social network!") %></h3> | ||
26 | + <p><%= _("Firstly, some tips for getting started:") %></p> | ||
27 | + <h4><%= _("Confirm your account!") %></h4> | ||
28 | + <p><%= _("You should receive a welcome email from us shortly. Please take a second to follow the link within to confirm your account.") %></p> | ||
29 | + <p><%= _("You won't appear as %s until your account is confirmed.") % link_to(_('user'), {:controller => :search, :action => :people, :filter => 'more_recent'}, :target => '_blank') %></p> | ||
30 | + <h4><%= _("What to do next?") %></h4> | ||
31 | + <p><%= _("%s. Upload an avatar and let your friends find you easily :)") % link_to(_('Customize your profile'), {:controller => 'doc', :section => 'user', :topic => 'editing-person-info'}, :target => '_blank') %></p> | ||
32 | + <p><%= _("Learn the guidelines. Read the %s for more details on how to use this social network!") % link_to(_('Documentation'), {:controller => 'doc'}, :target => '_blank') %></p> | ||
33 | + <p><%= _("%s your Gmail, Yahoo and Hotmail contacts!") % link_to(_('Invite and find'), {:controller => 'doc', :section => 'user', :topic => 'invite-contacts'}, :target => '_blank') %></p> | ||
34 | + <p><%= _("Start exploring and have fun!") %></p> | ||
17 | <% end %> | 35 | <% end %> |
18 | </div> | 36 | </div> |
19 | <% else %> | 37 | <% else %> |
app/views/catalog/index.html.erb
@@ -14,8 +14,8 @@ | @@ -14,8 +14,8 @@ | ||
14 | 14 | ||
15 | <ul id="product-list"> | 15 | <ul id="product-list"> |
16 | <% @products.each do |product| %> | 16 | <% @products.each do |product| %> |
17 | - <% extra_content = @plugins.dispatch(:catalog_item_extras, product).collect { |content| instance_eval(&content) } %> | ||
18 | - <% extra_content_list = @plugins.dispatch(:catalog_list_item_extras, product).collect { |content| instance_eval(&content) } %> | 17 | + <% extra_content = @plugins.dispatch(:catalog_item_extras, product).collect { |content| instance_exec(&content) } %> |
18 | + <% extra_content_list = @plugins.dispatch(:catalog_list_item_extras, product).collect { |content| instance_exec(&content) } %> | ||
19 | 19 | ||
20 | <% status = [] %> | 20 | <% status = [] %> |
21 | <% status << 'not-available' if !product.available %> | 21 | <% status << 'not-available' if !product.available %> |
app/views/cms/edit.html.erb
@@ -31,9 +31,18 @@ | @@ -31,9 +31,18 @@ | ||
31 | 31 | ||
32 | <%= select_categories(:article, _('Categorize your article')) %> | 32 | <%= select_categories(:article, _('Categorize your article')) %> |
33 | 33 | ||
34 | + <br /> | ||
35 | + | ||
34 | <%= f.text_field('tag_list', :size => 64) %> | 36 | <%= f.text_field('tag_list', :size => 64) %> |
35 | <%= content_tag( 'small', _('Separate tags with commas') ) %> | 37 | <%= content_tag( 'small', _('Separate tags with commas') ) %> |
36 | 38 | ||
39 | + <script> | ||
40 | + jQuery('#article_tag_list').inputosaurus({ | ||
41 | + autoCompleteSource: <%= "'/myprofile/#{profile.identifier}/cms/search_tags'," %> | ||
42 | + activateFinalResult : true | ||
43 | + }) | ||
44 | + </script> | ||
45 | + | ||
37 | <div id='edit-article-options'> | 46 | <div id='edit-article-options'> |
38 | <%= options_for_article(@article, @tokenized_children) %> | 47 | <%= options_for_article(@article, @tokenized_children) %> |
39 | </div> | 48 | </div> |
app/views/layouts/_javascript.html.erb
@@ -4,7 +4,7 @@ | @@ -4,7 +4,7 @@ | ||
4 | 'jquery-ui-1.10.4/js/jquery-ui-1.10.4.min', 'jquery.scrollTo', 'jquery.form.js', 'jquery-validation/jquery.validate', | 4 | 'jquery-ui-1.10.4/js/jquery-ui-1.10.4.min', 'jquery.scrollTo', 'jquery.form.js', 'jquery-validation/jquery.validate', |
5 | 'jquery.cookie', 'jquery.ba-bbq.min.js', 'reflection', 'jquery.tokeninput', | 5 | 'jquery.cookie', 'jquery.ba-bbq.min.js', 'reflection', 'jquery.tokeninput', |
6 | 'add-and-join', 'report-abuse', 'catalog', 'manage-products', 'autogrow', | 6 | 'add-and-join', 'report-abuse', 'catalog', 'manage-products', 'autogrow', |
7 | -'jquery-timepicker-addon/dist/jquery-ui-timepicker-addon', 'application.js', 'rails.js', :cache => 'cache/application' %> | 7 | +'jquery-timepicker-addon/dist/jquery-ui-timepicker-addon', 'application.js', 'rails.js', 'inputosaurus.js', :cache => 'cache/application' %> |
8 | 8 | ||
9 | <% language = FastGettext.locale %> | 9 | <% language = FastGettext.locale %> |
10 | <% %w{messages methods}.each do |type| %> | 10 | <% %w{messages methods}.each do |type| %> |
app/views/manage_products/show.html.erb
@@ -13,7 +13,7 @@ | @@ -13,7 +13,7 @@ | ||
13 | <%= render :partial => 'manage_products/display_image' %> | 13 | <%= render :partial => 'manage_products/display_image' %> |
14 | </div> | 14 | </div> |
15 | <div id='product-extra-content'> | 15 | <div id='product-extra-content'> |
16 | - <% extra_content = @plugins.dispatch(:product_info_extras, @product).collect { |content| instance_eval(&content) } %> | 16 | + <% extra_content = @plugins.dispatch(:product_info_extras, @product).collect { |content| instance_exec(&content) } %> |
17 | <%= extra_content.join("\n") %> | 17 | <%= extra_content.join("\n") %> |
18 | </div> | 18 | </div> |
19 | <div id='product-info'> | 19 | <div id='product-info'> |
app/views/profile_editor/_person_form.html.erb
@@ -25,6 +25,7 @@ | @@ -25,6 +25,7 @@ | ||
25 | <%= optional_field(@person, 'address', labelled_form_field(_('Address (street and number)'), text_field(:profile_data, :address, :rel => _('Address')))) %> | 25 | <%= optional_field(@person, 'address', labelled_form_field(_('Address (street and number)'), text_field(:profile_data, :address, :rel => _('Address')))) %> |
26 | <%= optional_field(@person, 'address_reference', labelled_form_field(_('Address reference'), text_field(:profile_data, :address_reference, :rel => _('Address reference')))) %> | 26 | <%= optional_field(@person, 'address_reference', labelled_form_field(_('Address reference'), text_field(:profile_data, :address_reference, :rel => _('Address reference')))) %> |
27 | <%= optional_field(@person, 'district', labelled_form_field(_('District'), text_field(:profile_data, :district, :rel => _('District')))) %> | 27 | <%= optional_field(@person, 'district', labelled_form_field(_('District'), text_field(:profile_data, :district, :rel => _('District')))) %> |
28 | +<%= optional_field(@person, 'image', labelled_form_field(_('Image'), file_field(:file, :image, :rel => _('Image')))) %> | ||
28 | 29 | ||
29 | <% optional_field(@person, 'schooling') do %> | 30 | <% optional_field(@person, 'schooling') do %> |
30 | <div class="formfieldline"> | 31 | <div class="formfieldline"> |
app/views/tasks/index.html.erb
@@ -3,10 +3,9 @@ | @@ -3,10 +3,9 @@ | ||
3 | <h1><%= _("%s's pending tasks") % profile.name %></h1> | 3 | <h1><%= _("%s's pending tasks") % profile.name %></h1> |
4 | <p> | 4 | <p> |
5 | 5 | ||
6 | -<% type_collection = [[nil, _('All')]] %> | ||
7 | -<% type_collection += Task.all_types.sort_by {|klass| klass.constantize.new.title}.map{|s| [s, s.constantize.new.title] } %> | ||
8 | - | ||
9 | - | 6 | +<% |
7 | + type_collection = [[nil, _('All')]] + @task_types | ||
8 | +%> | ||
10 | 9 | ||
11 | <% if !@failed.blank? %> | 10 | <% if !@failed.blank? %> |
12 | <div id="errorExplanation"> | 11 | <div id="errorExplanation"> |
@@ -39,7 +38,7 @@ | @@ -39,7 +38,7 @@ | ||
39 | 38 | ||
40 | <ul class='task-list'> | 39 | <ul class='task-list'> |
41 | <p> | 40 | <p> |
42 | - <%= labelled_select(_('Filter')+': ', :filter_type, :first, :last, @filter, type_collection, :onchange => 'document.location.href = "?filter_type="+this.value')%> | 41 | + <%= labelled_select(_('Filter')+': ', :filter_type, :first, :last, @filter, type_collection, :onchange => "document.location.href = '?filter_type='+this.value") %> |
43 | </p> | 42 | </p> |
44 | <p> | 43 | <p> |
45 | <%= labelled_select(_("Set all to: "), 'set-decisions', 'first', 'last', nil, [['',""],['accept',_("Accept")],['reject',_("Reject")],['skip',_("Skip")]], :id => "up-set-all-tasks-to") %> | 44 | <%= labelled_select(_("Set all to: "), 'set-decisions', 'first', 'last', nil, [['',""],['accept',_("Accept")],['reject',_("Reject")],['skip',_("Skip")]], :id => "up-set-all-tasks-to") %> |
config/application.rb
@@ -108,7 +108,7 @@ module Noosfero | @@ -108,7 +108,7 @@ module Noosfero | ||
108 | 108 | ||
109 | # Your secret key for verifying cookie session data integrity. | 109 | # Your secret key for verifying cookie session data integrity. |
110 | # If you change this key, all old sessions will become invalid! | 110 | # If you change this key, all old sessions will become invalid! |
111 | - # Make sure the secret is at least 30 characters and all random, | 111 | + # Make sure the secret is at least 30 characters and all random, |
112 | # no regular words or you'll be exposed to dictionary attacks. | 112 | # no regular words or you'll be exposed to dictionary attacks. |
113 | config.secret_token = noosfero_session_secret | 113 | config.secret_token = noosfero_session_secret |
114 | config.action_dispatch.session = { | 114 | config.action_dispatch.session = { |
config/cucumber.yml
1 | <% base_requires = '-r features/support -r features/step_definitions' %> | 1 | <% base_requires = '-r features/support -r features/step_definitions' %> |
2 | -<% default_options = "--color --format progress --strict --tags ~@selenium --tags ~@selenium-fixme --tags ~@fixme --exclude features/support/selenium.rb #{base_requires}" %> | 2 | +<% default_options = "--format progress --strict --tags ~@selenium --tags ~@selenium-fixme --tags ~@fixme --exclude features/support/selenium.rb #{base_requires}" %> |
3 | +<% | ||
4 | + default_options += ' --color' if $stdout.isatty | ||
5 | +%> | ||
3 | <% selenium_options = "--strict --tags @selenium #{base_requires}" %> | 6 | <% selenium_options = "--strict --tags @selenium #{base_requires}" %> |
4 | 7 | ||
5 | default: <%= default_options %> | 8 | default: <%= default_options %> |
config/initializers/activities_counter_cache.rb
1 | -if Delayed::Backend::ActiveRecord::Job.table_exists? | 1 | +if Delayed::Backend::ActiveRecord::Job.table_exists? && |
2 | + Delayed::Backend::ActiveRecord::Job.attribute_names.include?('queue') | ||
2 | job = Delayed::Backend::ActiveRecord::Job.all :conditions => ['handler LIKE ?', "%ActivitiesCounterCacheJob%"] | 3 | job = Delayed::Backend::ActiveRecord::Job.all :conditions => ['handler LIKE ?', "%ActivitiesCounterCacheJob%"] |
3 | if job.blank? | 4 | if job.blank? |
4 | Delayed::Backend::ActiveRecord::Job.enqueue(ActivitiesCounterCacheJob.new, {:priority => -3}) | 5 | Delayed::Backend::ActiveRecord::Job.enqueue(ActivitiesCounterCacheJob.new, {:priority => -3}) |
config/initializers/log_memory_consumption.rb
@@ -1,5 +0,0 @@ | @@ -1,5 +0,0 @@ | ||
1 | -if Delayed::Backend::ActiveRecord::Job.table_exists? | ||
2 | - jobs = Delayed::Backend::ActiveRecord::Job.all :conditions => ['handler LIKE ?', "%LogMemoryConsumptionJob%"] | ||
3 | - jobs.map(&:destroy) if jobs.present? | ||
4 | - Delayed::Backend::ActiveRecord::Job.enqueue(LogMemoryConsumptionJob.new) | ||
5 | -end |
@@ -0,0 +1,9 @@ | @@ -0,0 +1,9 @@ | ||
1 | +if defined? PhusionPassenger | ||
2 | + | ||
3 | + # from http://russbrooks.com/2010/10/20/rails-cache-memcache-on-passenger-with-smart-spawning | ||
4 | + PhusionPassenger.on_event :starting_worker_process do |forked| | ||
5 | + if forked | ||
6 | + Rails.cache.instance_variable_get(:@data).reset if Rails.cache.class == ActiveSupport::Cache::MemCacheStore | ||
7 | + end | ||
8 | + end | ||
9 | +end |
config/initializers/person_notification.rb
1 | -if Delayed::Backend::ActiveRecord::Job.table_exists? | 1 | +if Delayed::Backend::ActiveRecord::Job.table_exists? && |
2 | + Delayed::Backend::ActiveRecord::Job.attribute_names.include?('queue') | ||
2 | PersonNotifier.schedule_all_next_notification_mail | 3 | PersonNotifier.schedule_all_next_notification_mail |
3 | end | 4 | end |
db/migrate/20140708115518_index_domains_filtered_fields.rb
0 → 100644
@@ -0,0 +1,10 @@ | @@ -0,0 +1,10 @@ | ||
1 | +class IndexDomainsFilteredFields < ActiveRecord::Migration | ||
2 | + | ||
3 | + def self.up | ||
4 | + add_index :domains, [:name] | ||
5 | + add_index :domains, [:is_default] | ||
6 | + add_index :domains, [:owner_id, :owner_type] | ||
7 | + add_index :domains, [:owner_id, :owner_type, :is_default] | ||
8 | + end | ||
9 | + | ||
10 | +end |
db/migrate/20140708121356_index_articles_filtered_fields.rb
0 → 100644
@@ -0,0 +1,12 @@ | @@ -0,0 +1,12 @@ | ||
1 | +class IndexArticlesFilteredFields < ActiveRecord::Migration | ||
2 | + def self.up | ||
3 | + %w[articles article_versions].each do |table| | ||
4 | + add_index table, [:path] | ||
5 | + add_index table, [:path, :profile_id] | ||
6 | + end | ||
7 | + add_index :articles, [:type] | ||
8 | + add_index :articles, [:type, :parent_id] | ||
9 | + add_index :articles, [:type, :profile_id] | ||
10 | + end | ||
11 | + | ||
12 | +end |
db/migrate/20140724180943_add_index_to_blog_posts_sort.rb
0 → 100644
@@ -0,0 +1,13 @@ | @@ -0,0 +1,13 @@ | ||
1 | +class AddIndexToBlogPostsSort < ActiveRecord::Migration | ||
2 | + def self.up | ||
3 | + %w[articles article_versions].each do |table| | ||
4 | + add_index table, [:published_at, :id] | ||
5 | + end | ||
6 | + end | ||
7 | + | ||
8 | + def self.down | ||
9 | + %w[articles article_versions].each do |table| | ||
10 | + remove_index table, [:published_at, :id] | ||
11 | + end | ||
12 | + end | ||
13 | +end |
db/migrate/20140827191326_remove_environment_statistics_block.rb
0 → 100644
@@ -0,0 +1,9 @@ | @@ -0,0 +1,9 @@ | ||
1 | +class RemoveEnvironmentStatisticsBlock < ActiveRecord::Migration | ||
2 | + def self.up | ||
3 | + update("UPDATE blocks SET type = 'StatisticsBlock' WHERE type = 'EnvironmentStatisticsBlock'") | ||
4 | + end | ||
5 | + | ||
6 | + def self.down | ||
7 | + say("Nothing to undo (cannot recover the data)") | ||
8 | + end | ||
9 | +end |
db/schema.rb
@@ -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 => 20140808185510) do | 14 | +ActiveRecord::Schema.define(:version => 20140827191326) 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" |
@@ -95,12 +95,15 @@ ActiveRecord::Schema.define(:version => 20140808185510) do | @@ -95,12 +95,15 @@ ActiveRecord::Schema.define(:version => 20140808185510) do | ||
95 | t.integer "license_id" | 95 | t.integer "license_id" |
96 | t.integer "image_id" | 96 | t.integer "image_id" |
97 | t.integer "position" | 97 | t.integer "position" |
98 | - t.integer "created_by_id" | ||
99 | t.integer "spam_comments_count", :default => 0 | 98 | t.integer "spam_comments_count", :default => 0 |
100 | t.integer "author_id" | 99 | t.integer "author_id" |
100 | + t.integer "created_by_id" | ||
101 | end | 101 | end |
102 | 102 | ||
103 | add_index "article_versions", ["article_id"], :name => "index_article_versions_on_article_id" | 103 | add_index "article_versions", ["article_id"], :name => "index_article_versions_on_article_id" |
104 | + add_index "article_versions", ["path", "profile_id"], :name => "index_article_versions_on_path_and_profile_id" | ||
105 | + add_index "article_versions", ["path"], :name => "index_article_versions_on_path" | ||
106 | + add_index "article_versions", ["published_at", "id"], :name => "index_article_versions_on_published_at_and_id" | ||
104 | 107 | ||
105 | create_table "articles", :force => true do |t| | 108 | create_table "articles", :force => true do |t| |
106 | t.string "name" | 109 | t.string "name" |
@@ -143,9 +146,9 @@ ActiveRecord::Schema.define(:version => 20140808185510) do | @@ -143,9 +146,9 @@ ActiveRecord::Schema.define(:version => 20140808185510) do | ||
143 | t.integer "license_id" | 146 | t.integer "license_id" |
144 | t.integer "image_id" | 147 | t.integer "image_id" |
145 | t.integer "position" | 148 | t.integer "position" |
146 | - t.integer "created_by_id" | ||
147 | t.integer "spam_comments_count", :default => 0 | 149 | t.integer "spam_comments_count", :default => 0 |
148 | t.integer "author_id" | 150 | t.integer "author_id" |
151 | + t.integer "created_by_id" | ||
149 | end | 152 | end |
150 | 153 | ||
151 | add_index "articles", ["comments_count"], :name => "index_articles_on_comments_count" | 154 | add_index "articles", ["comments_count"], :name => "index_articles_on_comments_count" |
@@ -153,9 +156,15 @@ ActiveRecord::Schema.define(:version => 20140808185510) do | @@ -153,9 +156,15 @@ ActiveRecord::Schema.define(:version => 20140808185510) do | ||
153 | add_index "articles", ["hits"], :name => "index_articles_on_hits" | 156 | add_index "articles", ["hits"], :name => "index_articles_on_hits" |
154 | add_index "articles", ["name"], :name => "index_articles_on_name" | 157 | add_index "articles", ["name"], :name => "index_articles_on_name" |
155 | add_index "articles", ["parent_id"], :name => "index_articles_on_parent_id" | 158 | add_index "articles", ["parent_id"], :name => "index_articles_on_parent_id" |
159 | + add_index "articles", ["path", "profile_id"], :name => "index_articles_on_path_and_profile_id" | ||
160 | + add_index "articles", ["path"], :name => "index_articles_on_path" | ||
156 | add_index "articles", ["profile_id"], :name => "index_articles_on_profile_id" | 161 | add_index "articles", ["profile_id"], :name => "index_articles_on_profile_id" |
162 | + add_index "articles", ["published_at", "id"], :name => "index_articles_on_published_at_and_id" | ||
157 | add_index "articles", ["slug"], :name => "index_articles_on_slug" | 163 | add_index "articles", ["slug"], :name => "index_articles_on_slug" |
158 | add_index "articles", ["translation_of_id"], :name => "index_articles_on_translation_of_id" | 164 | add_index "articles", ["translation_of_id"], :name => "index_articles_on_translation_of_id" |
165 | + add_index "articles", ["type", "parent_id"], :name => "index_articles_on_type_and_parent_id" | ||
166 | + add_index "articles", ["type", "profile_id"], :name => "index_articles_on_type_and_profile_id" | ||
167 | + add_index "articles", ["type"], :name => "index_articles_on_type" | ||
159 | 168 | ||
160 | create_table "articles_categories", :id => false, :force => true do |t| | 169 | create_table "articles_categories", :id => false, :force => true do |t| |
161 | t.integer "article_id" | 170 | t.integer "article_id" |
@@ -277,6 +286,11 @@ ActiveRecord::Schema.define(:version => 20140808185510) do | @@ -277,6 +286,11 @@ ActiveRecord::Schema.define(:version => 20140808185510) do | ||
277 | t.string "google_maps_key" | 286 | t.string "google_maps_key" |
278 | end | 287 | end |
279 | 288 | ||
289 | + add_index "domains", ["is_default"], :name => "index_domains_on_is_default" | ||
290 | + add_index "domains", ["name"], :name => "index_domains_on_name" | ||
291 | + add_index "domains", ["owner_id", "owner_type", "is_default"], :name => "index_domains_on_owner_id_and_owner_type_and_is_default" | ||
292 | + add_index "domains", ["owner_id", "owner_type"], :name => "index_domains_on_owner_id_and_owner_type" | ||
293 | + | ||
280 | create_table "environments", :force => true do |t| | 294 | create_table "environments", :force => true do |t| |
281 | t.string "name" | 295 | t.string "name" |
282 | t.string "contact_email" | 296 | t.string "contact_email" |
debian/changelog
1 | +noosfero (1.0~rc3) wheezy-test; urgency=low | ||
2 | + | ||
3 | + * Third release candidate to Noosfero 1.0 | ||
4 | + | ||
5 | + -- Antonio Terceiro <terceiro@debian.org> Fri, 12 Sep 2014 16:20:58 -0300 | ||
6 | + | ||
7 | +noosfero (1.0~rc2) wheezy-test; urgency=low | ||
8 | + | ||
9 | + * Second 1.0 release candidate | ||
10 | + | ||
11 | + -- Antonio Terceiro <terceiro@debian.org> Fri, 12 Sep 2014 13:01:11 -0300 | ||
12 | + | ||
1 | noosfero (1.0~rc1) wheezy-test; urgency=low | 13 | noosfero (1.0~rc1) wheezy-test; urgency=low |
2 | 14 | ||
3 | * First 1.0 release candidate | 15 | * First 1.0 release candidate |
@@ -10,6 +22,12 @@ noosfero (0.99.0~rc20140618202455) wheezy-test; urgency=low | @@ -10,6 +22,12 @@ noosfero (0.99.0~rc20140618202455) wheezy-test; urgency=low | ||
10 | 22 | ||
11 | -- Rodrigo Souto <rodrigo@colivre.coop.br> Wed, 18 Jun 2014 20:25:01 +0000 | 23 | -- Rodrigo Souto <rodrigo@colivre.coop.br> Wed, 18 Jun 2014 20:25:01 +0000 |
12 | 24 | ||
25 | +noosfero (0.47.4) unstable; urgency=low | ||
26 | + | ||
27 | + * Bugfixes and performance optimizations | ||
28 | + | ||
29 | + -- Rodrigo Souto <rodrigo@colivre.coop.br> Thu, 21 Aug 2014 19:25:37 +0000 | ||
30 | + | ||
13 | noosfero (0.47.3) unstable; urgency=low | 31 | noosfero (0.47.3) unstable; urgency=low |
14 | 32 | ||
15 | * Bugfixes release | 33 | * Bugfixes release |
debian/control
@@ -9,7 +9,7 @@ Build-Depends: | @@ -9,7 +9,7 @@ Build-Depends: | ||
9 | ruby-gettext, | 9 | ruby-gettext, |
10 | ruby-sqlite3, | 10 | ruby-sqlite3, |
11 | rake, | 11 | rake, |
12 | - rails3 (>= 3.2.6-1~), | 12 | + rails3 (>= 3.2.19-1~), |
13 | ruby-rspec, | 13 | ruby-rspec, |
14 | ruby-rspec-rails, | 14 | ruby-rspec-rails, |
15 | ruby-will-paginate, | 15 | ruby-will-paginate, |
@@ -30,12 +30,14 @@ Vcs-Browser: http://git.colivre.coop.br/?p=noosfero.git | @@ -30,12 +30,14 @@ Vcs-Browser: http://git.colivre.coop.br/?p=noosfero.git | ||
30 | 30 | ||
31 | Package: noosfero | 31 | Package: noosfero |
32 | Architecture: all | 32 | Architecture: all |
33 | +Pre-Depends: ruby1.8 (>= 1.8.7.358) | ||
33 | Depends: | 34 | Depends: |
34 | rails3 (>= 3.2.6-1~), | 35 | rails3 (>= 3.2.6-1~), |
35 | ruby (>= 1:1.9.3), | 36 | ruby (>= 1:1.9.3), |
36 | rake, | 37 | rake, |
37 | ruby-dalli, | 38 | ruby-dalli, |
38 | ruby-exception-notification, | 39 | ruby-exception-notification, |
40 | + ruby-gettext, | ||
39 | ruby-fast-gettext, | 41 | ruby-fast-gettext, |
40 | ruby-pg, | 42 | ruby-pg, |
41 | ruby-rmagick, | 43 | ruby-rmagick, |
debian/noosfero.install
@@ -8,7 +8,6 @@ Rakefile usr/share/noosfero | @@ -8,7 +8,6 @@ Rakefile usr/share/noosfero | ||
8 | vendor usr/share/noosfero | 8 | vendor usr/share/noosfero |
9 | 9 | ||
10 | Gemfile usr/share/noosfero | 10 | Gemfile usr/share/noosfero |
11 | -Gemfile.lock usr/share/noosfero | ||
12 | debian/bundle/config usr/share/noosfero/.bundle | 11 | debian/bundle/config usr/share/noosfero/.bundle |
13 | 12 | ||
14 | config/application.rb usr/share/noosfero/config | 13 | config/application.rb usr/share/noosfero/config |
debian/noosfero.links
@@ -15,3 +15,4 @@ var/lib/noosfero-data/public/thumbnails usr/share/noosfero/public/th | @@ -15,3 +15,4 @@ var/lib/noosfero-data/public/thumbnails usr/share/noosfero/public/th | ||
15 | usr/share/noosfero/public/designs/themes/noosfero usr/share/noosfero/public/designs/themes/default | 15 | usr/share/noosfero/public/designs/themes/noosfero usr/share/noosfero/public/designs/themes/default |
16 | usr/share/noosfero/public/designs/icons/tango usr/share/noosfero/public/designs/icons/default | 16 | usr/share/noosfero/public/designs/icons/tango usr/share/noosfero/public/designs/icons/default |
17 | usr/share/noosfero/script/noosfero-plugins usr/sbin/noosfero-plugins | 17 | usr/share/noosfero/script/noosfero-plugins usr/sbin/noosfero-plugins |
18 | +usr/share/noosfero/Gemfile.lock /dev/null |
etc/init.d/noosfero
@@ -45,7 +45,7 @@ if [ -z "$NOOSFERO_DIR" ] || [ -z "$NOOSFERO_USER" ]; then | @@ -45,7 +45,7 @@ if [ -z "$NOOSFERO_DIR" ] || [ -z "$NOOSFERO_USER" ]; then | ||
45 | fi | 45 | fi |
46 | 46 | ||
47 | if test -x /usr/sbin/noosfero-check-dbconfig ; then | 47 | if test -x /usr/sbin/noosfero-check-dbconfig ; then |
48 | - if ! noosfero-check-dbconfig; then | 48 | + if ! /usr/sbin/noosfero-check-dbconfig; then |
49 | echo "Noosfero database access not configured, service disabled." | 49 | echo "Noosfero database access not configured, service disabled." |
50 | exit 0 | 50 | exit 0 |
51 | fi | 51 | fi |
features/signup.feature
@@ -298,3 +298,55 @@ Feature: signup | @@ -298,3 +298,55 @@ Feature: signup | ||
298 | And wait for the captcha signup time | 298 | And wait for the captcha signup time |
299 | And I press "Create my account" | 299 | And I press "Create my account" |
300 | Then "José da Silva" should be a member of "Free Software" | 300 | Then "José da Silva" should be a member of "Free Software" |
301 | + | ||
302 | + @selenium | ||
303 | + Scenario: user registration is moderated by admin | ||
304 | + Given feature "admin_must_approve_new_users" is enabled on environment | ||
305 | + And feature "skip_new_user_email_confirmation" is disabled on environment | ||
306 | + And I go to /account/signup | ||
307 | + And I fill in "Username" with "teste" | ||
308 | + And I fill in "Password" with "123456" | ||
309 | + And I fill in "Password confirmation" with "123456" | ||
310 | + And I fill in "e-Mail" with "teste@teste.com" | ||
311 | + And I fill in "Full name" with "Teste da Silva" | ||
312 | + And wait for the captcha signup time | ||
313 | + And I press "Create my account" | ||
314 | + And I go to teste's confirmation URL | ||
315 | + And I am logged in as admin | ||
316 | + And I follow "Control panel" | ||
317 | + And I follow "Tasks" | ||
318 | + And I choose "Accept" | ||
319 | + And I press "Apply!" | ||
320 | + And I follow "Logout" | ||
321 | + And Teste da Silva's account is activated | ||
322 | + And I follow "Login" | ||
323 | + And I fill in "Username / Email" with "teste" | ||
324 | + And I fill in "Password" with "123456" | ||
325 | + And I press "Log in" | ||
326 | + Then I should see "teste" | ||
327 | + | ||
328 | + | ||
329 | + @selenium | ||
330 | + Scenario: user registration is not accepted by the admin | ||
331 | + Given feature "admin_must_approve_new_users" is enabled on environment | ||
332 | + And feature "skip_new_user_email_confirmation" is disabled on environment | ||
333 | + And I go to /account/signup | ||
334 | + And I fill in "Username" with "teste" | ||
335 | + And I fill in "Password" with "123456" | ||
336 | + And I fill in "Password confirmation" with "123456" | ||
337 | + And I fill in "e-Mail" with "teste@teste.com" | ||
338 | + And I fill in "Full name" with "Teste da Silva" | ||
339 | + And wait for the captcha signup time | ||
340 | + And I press "Create my account" | ||
341 | + And I go to teste's confirmation URL | ||
342 | + And I am logged in as admin | ||
343 | + And I follow "Control panel" | ||
344 | + And I follow "Tasks" | ||
345 | + And I choose "Reject" | ||
346 | + And I press "Apply!" | ||
347 | + And I follow "Logout" | ||
348 | + And I follow "Login" | ||
349 | + And I fill in "Username / Email" with "teste" | ||
350 | + And I fill in "Password" with "123456" | ||
351 | + And I press "Log in" | ||
352 | + Then I should not see "teste" | ||
301 | \ No newline at end of file | 353 | \ No newline at end of file |
gitignore.example
lib/acts_as_having_posts.rb
@@ -22,7 +22,7 @@ module ActsAsHavingPosts | @@ -22,7 +22,7 @@ module ActsAsHavingPosts | ||
22 | end | 22 | end |
23 | 23 | ||
24 | def feed | 24 | def feed |
25 | - self.children.find(:first, :conditions => {:type => 'RssFeed'}) | 25 | + Article.where(:parent_id => self.id).where(:type => 'RssFeed').first |
26 | end | 26 | end |
27 | 27 | ||
28 | def feed=(attrs) | 28 | def feed=(attrs) |
lib/log_memory_consumption_job.rb
@@ -20,7 +20,5 @@ class LogMemoryConsumptionJob < Struct.new(:last_stat) | @@ -20,7 +20,5 @@ class LogMemoryConsumptionJob < Struct.new(:last_stat) | ||
20 | i += 1 | 20 | i += 1 |
21 | end | 21 | end |
22 | logger << "\n" | 22 | logger << "\n" |
23 | - | ||
24 | - Delayed::Job.enqueue(LogMemoryConsumptionJob.new(stats), {:priority => 0, :run_at => PERIOD.seconds.from_now}) | ||
25 | end | 23 | end |
26 | end | 24 | end |
lib/noosfero/i18n.rb
@@ -20,5 +20,5 @@ if File.exists?(locale_dir) | @@ -20,5 +20,5 @@ if File.exists?(locale_dir) | ||
20 | repos << FastGettext::TranslationRepository.build('iso_3166', :type => 'mo', :path => locale_dir) | 20 | repos << FastGettext::TranslationRepository.build('iso_3166', :type => 'mo', :path => locale_dir) |
21 | end | 21 | end |
22 | 22 | ||
23 | -FastGettext.add_text_domain 'noosferofull', :type => :chain, :chain => repos | ||
24 | -FastGettext.default_text_domain = 'noosferofull' | 23 | +FastGettext.add_text_domain 'noosfero', :type => :chain, :chain => repos |
24 | +FastGettext.default_text_domain = 'noosfero' |
lib/noosfero/plugin.rb
@@ -62,14 +62,16 @@ class Noosfero::Plugin | @@ -62,14 +62,16 @@ class Noosfero::Plugin | ||
62 | path << File.join(dir, 'lib') | 62 | path << File.join(dir, 'lib') |
63 | # load vendor/plugins | 63 | # load vendor/plugins |
64 | Dir.glob(File.join(dir, '/vendor/plugins/*')).each do |vendor_plugin| | 64 | Dir.glob(File.join(dir, '/vendor/plugins/*')).each do |vendor_plugin| |
65 | - path << "#{vendor_plugin}/lib" | ||
66 | - init = "#{vendor_plugin}/init.rb" | ||
67 | - require init.gsub(/.rb$/, '') if File.file? init | ||
68 | - end | 65 | + path << "#{vendor_plugin}/lib" |
66 | + end | ||
67 | + end | ||
68 | + Dir.glob(File.join(dir, '/vendor/plugins/*')).each do |vendor_plugin| | ||
69 | + init = "#{vendor_plugin}/init.rb" | ||
70 | + require init.gsub(/.rb$/, '') if File.file? init | ||
69 | end | 71 | end |
70 | 72 | ||
71 | # add view path | 73 | # add view path |
72 | - ActionController::Base.view_paths.unshift(File.join(dir, 'views')) | 74 | + config.paths['app/views'].unshift File.join(dir, 'views') |
73 | end | 75 | end |
74 | end | 76 | end |
75 | 77 | ||
@@ -237,7 +239,7 @@ class Noosfero::Plugin | @@ -237,7 +239,7 @@ class Noosfero::Plugin | ||
237 | nil | 239 | nil |
238 | end | 240 | end |
239 | 241 | ||
240 | - # -> Adds content to calalog item | 242 | + # -> Adds content to catalog item |
241 | # returns = lambda block that creates html code | 243 | # returns = lambda block that creates html code |
242 | def catalog_item_extras(item) | 244 | def catalog_item_extras(item) |
243 | nil | 245 | nil |
@@ -249,7 +251,7 @@ class Noosfero::Plugin | @@ -249,7 +251,7 @@ class Noosfero::Plugin | ||
249 | nil | 251 | nil |
250 | end | 252 | end |
251 | 253 | ||
252 | - # -> Adds content to calalog list item | 254 | + # -> Adds content to catalog list item |
253 | # returns = lambda block that creates html code | 255 | # returns = lambda block that creates html code |
254 | def catalog_list_item_extras(item) | 256 | def catalog_list_item_extras(item) |
255 | nil | 257 | nil |
lib/noosfero/version.rb
lib/tasks/doc.rake
@@ -5,7 +5,7 @@ namespace :noosfero do | @@ -5,7 +5,7 @@ namespace :noosfero do | ||
5 | end | 5 | end |
6 | task :link_plugins_textiles do | 6 | task :link_plugins_textiles do |
7 | plugins_textiles.each do |file| | 7 | plugins_textiles.each do |file| |
8 | - ln_sf Rails.root.join(file), 'doc/noosfero/plugins/' | 8 | + ln_sf File.join('../../../', file), 'doc/noosfero/plugins/' |
9 | end | 9 | end |
10 | end | 10 | end |
11 | task :unlink_plugins_textiles do | 11 | task :unlink_plugins_textiles do |
lib/tasks/gettext.rake
@@ -6,8 +6,16 @@ makemo_stamp = 'tmp/makemo.stamp' | @@ -6,8 +6,16 @@ makemo_stamp = 'tmp/makemo.stamp' | ||
6 | desc "Create mo-files for L10n" | 6 | desc "Create mo-files for L10n" |
7 | task :makemo => makemo_stamp | 7 | task :makemo => makemo_stamp |
8 | file makemo_stamp => Dir.glob('po/*/noosfero.po') do | 8 | file makemo_stamp => Dir.glob('po/*/noosfero.po') do |
9 | - ruby '-I. -rconfig/boot -e \'require "gettext"; require "gettext/utils"; GetText.create_mofiles(true, "po", "locale")\'' | ||
10 | Rake::Task['symlinkmo'].invoke | 9 | Rake::Task['symlinkmo'].invoke |
10 | + | ||
11 | + require 'gettext' | ||
12 | + require 'gettext/tools' | ||
13 | + GetText.create_mofiles( | ||
14 | + verbose: true, | ||
15 | + po_root: 'po', | ||
16 | + mo_root: 'locale', | ||
17 | + ) | ||
18 | + | ||
11 | FileUtils.mkdir_p 'tmp' | 19 | FileUtils.mkdir_p 'tmp' |
12 | FileUtils.touch makemo_stamp | 20 | FileUtils.touch makemo_stamp |
13 | end | 21 | end |
@@ -22,7 +30,7 @@ task :symlinkmo do | @@ -22,7 +30,7 @@ task :symlinkmo do | ||
22 | 'pt' => 'pt_BR', | 30 | 'pt' => 'pt_BR', |
23 | } | 31 | } |
24 | mkdir_p(Rails.root.join('locale')) | 32 | mkdir_p(Rails.root.join('locale')) |
25 | - Dir.glob(Rails.root.join('locale/*')).each do |dir| | 33 | + Dir.glob(Rails.root.join('po/*/')).each do |dir| |
26 | lang = File.basename(dir) | 34 | lang = File.basename(dir) |
27 | orig_lang = langmap[lang] || lang | 35 | orig_lang = langmap[lang] || lang |
28 | mkdir_p(Rails.root.join('locale', "#{lang}", 'LC_MESSAGES')) | 36 | mkdir_p(Rails.root.join('locale', "#{lang}", 'LC_MESSAGES')) |
@@ -38,21 +46,28 @@ end | @@ -38,21 +46,28 @@ end | ||
38 | 46 | ||
39 | desc "Update pot/po files to match new version." | 47 | desc "Update pot/po files to match new version." |
40 | task :updatepo do | 48 | task :updatepo do |
41 | - require 'gettext_rails/tools' | ||
42 | - require_dependency 'noosfero' | ||
43 | - | ||
44 | - GetText::RubyParser::ID << '__' | ||
45 | - GetText::RubyParser::PLURAL_ID << 'n__' | ||
46 | - GetText::ActiveRecordParser.init(:use_classname => false) | ||
47 | 49 | ||
48 | puts 'Extracting strings from source. This may take a while ...' | 50 | puts 'Extracting strings from source. This may take a while ...' |
49 | - sources = | ||
50 | - Dir.glob("{app,lib}/**/*.{rb,rhtml,erb}") + | ||
51 | - Dir.glob('config/initializers/*.rb') + | ||
52 | - Dir.glob('public/*.html.erb') + | ||
53 | - Dir.glob('public/designs/themes/{base,noosfero,profile-base}/*.{rhtml,html.erb}') + | ||
54 | - Dir.glob('plugins/**/{controllers,models,lib,views}/**/*.{rhtml,html.erb,rb}') | ||
55 | - GetText.update_pofiles(Noosfero::PROJECT, sources, "#{Noosfero::PROJECT} #{Noosfero::VERSION}") | 51 | + |
52 | + files_to_translate = [ | ||
53 | + "{app,lib}/**/*.{rb,rhtml,erb}", | ||
54 | + 'config/initializers/*.rb', | ||
55 | + 'public/*.html.erb', | ||
56 | + 'public/designs/themes/{base,noosfero,profile-base}/*.{rhtml,html.erb}', | ||
57 | + 'plugins/**/{controllers,models,lib,views}/**/*.{rhtml,html.erb,rb}', | ||
58 | + ].map { |pattern| Dir.glob(pattern) }.flatten | ||
59 | + | ||
60 | + require 'gettext' | ||
61 | + require 'gettext/tools' | ||
62 | + GetText.update_pofiles( | ||
63 | + 'noosfero', | ||
64 | + files_to_translate, | ||
65 | + Noosfero::VERSION, | ||
66 | + { | ||
67 | + po_root: 'po', | ||
68 | + } | ||
69 | + ) | ||
70 | + | ||
56 | end | 71 | end |
57 | 72 | ||
58 | task :checkpo do | 73 | task :checkpo do |
lib/tasks/package.rake
@@ -9,7 +9,7 @@ task :package => 'package:clobber' do | @@ -9,7 +9,7 @@ task :package => 'package:clobber' do | ||
9 | fail | 9 | fail |
10 | end | 10 | end |
11 | 11 | ||
12 | - release = "#{Noosfero::PROJECT}-#{Noosfero::VERSION}" | 12 | + release = "#{Noosfero::PROJECT}-#{$version}" |
13 | target = "pkg/#{release}" | 13 | target = "pkg/#{release}" |
14 | mkdir_p target | 14 | mkdir_p target |
15 | sh "git archive HEAD | (cd #{target} && tar x)" | 15 | sh "git archive HEAD | (cd #{target} && tar x)" |
lib/tasks/plugins.rake
@@ -7,7 +7,11 @@ namespace :noosfero do | @@ -7,7 +7,11 @@ namespace :noosfero do | ||
7 | plugin_migration_dirs = Dir.glob(Rails.root.join('{baseplugins,config/plugins}', '*', 'db', 'migrate')) | 7 | plugin_migration_dirs = Dir.glob(Rails.root.join('{baseplugins,config/plugins}', '*', 'db', 'migrate')) |
8 | 8 | ||
9 | task :load_config do | 9 | task :load_config do |
10 | - dirs = Dir.glob("{baseplugins,config/plugins}/*/db/migrate") | 10 | + dirs = Dir.glob("{baseplugins,config/plugins}/*").uniq do |dir| |
11 | + File.basename(dir) | ||
12 | + end.map do |dir| | ||
13 | + File.join(dir, 'db/migrate') | ||
14 | + end | ||
11 | dirs.each do |dir| | 15 | dirs.each do |dir| |
12 | ActiveRecord::Migrator.migrations_paths << dir | 16 | ActiveRecord::Migrator.migrations_paths << dir |
13 | end | 17 | end |
lib/tasks/release.rake
@@ -131,7 +131,7 @@ EOF | @@ -131,7 +131,7 @@ EOF | ||
131 | new_version = $version.dup | 131 | new_version = $version.dup |
132 | 132 | ||
133 | if target =~ /-test$/ | 133 | if target =~ /-test$/ |
134 | - if new_version =~ /~rc\d\+/ | 134 | + if new_version =~ /~rc\d+/ |
135 | new_version.sub!(/\~rc([0-9]+)/) { "~rc#{$1.to_i + 1}" } | 135 | new_version.sub!(/\~rc([0-9]+)/) { "~rc#{$1.to_i + 1}" } |
136 | else | 136 | else |
137 | new_version += '~rc1' | 137 | new_version += '~rc1' |
@@ -141,7 +141,7 @@ EOF | @@ -141,7 +141,7 @@ EOF | ||
141 | end | 141 | end |
142 | 142 | ||
143 | puts "Current version: #{$version}" | 143 | puts "Current version: #{$version}" |
144 | - ask("Version to release" % new_version, new_version) | 144 | + new_version = ask("Version to release", new_version) |
145 | release_message = ask("Release message") | 145 | release_message = ask("Release message") |
146 | 146 | ||
147 | sh 'git checkout debian/changelog lib/noosfero/version.rb' | 147 | sh 'git checkout debian/changelog lib/noosfero/version.rb' |
@@ -205,14 +205,17 @@ EOF | @@ -205,14 +205,17 @@ EOF | ||
205 | puts "==> Preparing debian packages..." | 205 | puts "==> Preparing debian packages..." |
206 | Rake::Task['noosfero:debian_packages'].invoke | 206 | Rake::Task['noosfero:debian_packages'].invoke |
207 | 207 | ||
208 | - sh "git tag #{$version.gsub('~','-')}" | ||
209 | - if confirm('Push new version tag') | ||
210 | - repository = ask('Repository name', 'origin') | ||
211 | - puts "==> Uploading tags..." | ||
212 | - sh "git push #{repository} #{$version.gsub('~','-')}" | 208 | + if confirm("Create tag for version #{$version}") |
209 | + sh "git tag #{$version.gsub('~','-')}" | ||
210 | + | ||
211 | + if confirm('Push new version tag') | ||
212 | + repository = ask('Repository name', 'origin') | ||
213 | + puts "==> Uploading tags..." | ||
214 | + sh "git push #{repository} #{$version.gsub('~','-')}" | ||
215 | + end | ||
213 | end | 216 | end |
214 | 217 | ||
215 | - if confirm('Do you want to upload the packages') | 218 | + if confirm('Upload the packages') |
216 | puts "==> Uploading debian packages..." | 219 | puts "==> Uploading debian packages..." |
217 | Rake::Task['noosfero:upload_packages'].invoke(target) | 220 | Rake::Task['noosfero:upload_packages'].invoke(target) |
218 | else | 221 | else |
plugins/shopping_cart/views/shopping_cart_plugin/buy.html.erb
1 | <div id='cart-request-box'> | 1 | <div id='cart-request-box'> |
2 | - <% form_for(:customer, :url => {:action => 'send_request'}, | ||
3 | - :html => {:onsubmit => "return Cart.send_request(this)", :id => 'cart-request-form' }) do |f| %> | 2 | + <%= form_for(:customer, :url => {:action => 'send_request'}, |
3 | + :html => {:onsubmit => "return Cart.send_request(this)", :id => 'cart-request-form'}) do |f| %> | ||
4 | <div id="cart-form-main"> | 4 | <div id="cart-form-main"> |
5 | <%= labelled_form_field('* ' + _("Name"), f.text_field(:name, :class => 'required') ) %> | 5 | <%= labelled_form_field('* ' + _("Name"), f.text_field(:name, :class => 'required') ) %> |
6 | <%= labelled_form_field('* ' + _("Email"), f.text_field(:email, :class => 'required email') ) %> | 6 | <%= labelled_form_field('* ' + _("Email"), f.text_field(:email, :class => 'required email') ) %> |
plugins/solr/config/solr.yml.dist
@@ -9,18 +9,18 @@ | @@ -9,18 +9,18 @@ | ||
9 | production: | 9 | production: |
10 | url: http://127.0.0.1:8983/solr | 10 | url: http://127.0.0.1:8983/solr |
11 | jvm_options: -server -Xmx192M -Xms64M | 11 | jvm_options: -server -Xmx192M -Xms64M |
12 | - timeout: 0 | 12 | + timeout: 600 |
13 | data_path: /var/lib/noosfero-data/solr/index | 13 | data_path: /var/lib/noosfero-data/solr/index |
14 | 14 | ||
15 | development: | 15 | development: |
16 | url: http://0.0.0.0:8982/solr | 16 | url: http://0.0.0.0:8982/solr |
17 | jvm_options: -server -Xmx128M -Xms16M | 17 | jvm_options: -server -Xmx128M -Xms16M |
18 | - timeout: 0 | 18 | + timeout: 600 |
19 | 19 | ||
20 | test: &TEST | 20 | test: &TEST |
21 | url: http://0.0.0.0:8981/solr | 21 | url: http://0.0.0.0:8981/solr |
22 | jvm_options: -server -Xmx128M -Xms16M | 22 | jvm_options: -server -Xmx128M -Xms16M |
23 | - timeout: 0 | 23 | + timeout: 600 |
24 | 24 | ||
25 | cucumber: | 25 | cucumber: |
26 | <<: *TEST | 26 | <<: *TEST |
plugins/solr/install.rb
plugins/solr/lib/ext/product.rb
@@ -27,7 +27,8 @@ class Product | @@ -27,7 +27,8 @@ class Product | ||
27 | {:name => {:type => :text, :boost => 2.0}}, | 27 | {:name => {:type => :text, :boost => 2.0}}, |
28 | {:description => :text}, {:category_full_name => :text}, | 28 | {:description => :text}, {:category_full_name => :text}, |
29 | # filtered fields | 29 | # filtered fields |
30 | - {:solr_plugin_public => :boolean}, {:environment_id => :integer}, | 30 | + {:solr_plugin_public => :boolean}, |
31 | + {:environment_id => :integer}, {:profile_id => :integer}, | ||
31 | {:enabled => :boolean}, {:solr_plugin_category_filter => :integer}, | 32 | {:enabled => :boolean}, {:solr_plugin_category_filter => :integer}, |
32 | # ordered/query-boosted fields | 33 | # ordered/query-boosted fields |
33 | {:solr_plugin_price_sortable => :decimal}, {:solr_plugin_name_sortable => :string}, | 34 | {:solr_plugin_price_sortable => :decimal}, {:solr_plugin_name_sortable => :string}, |
plugins/solr/lib/ext/profile.rb
@@ -42,7 +42,7 @@ class Profile | @@ -42,7 +42,7 @@ class Profile | ||
42 | handle_asynchronously :solr_save | 42 | handle_asynchronously :solr_save |
43 | handle_asynchronously :solr_destroy | 43 | handle_asynchronously :solr_destroy |
44 | 44 | ||
45 | - class_inheritable_accessor :solr_plugin_extra_index_methods | 45 | + class_attribute :solr_plugin_extra_index_methods |
46 | self.solr_plugin_extra_index_methods = [] | 46 | self.solr_plugin_extra_index_methods = [] |
47 | 47 | ||
48 | def solr_plugin_extra_data_for_index | 48 | def solr_plugin_extra_data_for_index |
plugins/solr/lib/solr_plugin.rb
@@ -33,8 +33,8 @@ class SolrPlugin < Noosfero::Plugin | @@ -33,8 +33,8 @@ class SolrPlugin < Noosfero::Plugin | ||
33 | 33 | ||
34 | solr_options = solr_options(class_asset(klass), category) | 34 | solr_options = solr_options(class_asset(klass), category) |
35 | solr_options[:filter_queries] ||= [] | 35 | solr_options[:filter_queries] ||= [] |
36 | - solr_options[:filter_queries] += scopes_to_solr_filters scope, klass, options | ||
37 | - solr_options.merge! products_options(user) if klass == Product and empty_query | 36 | + solr_options[:filter_queries] += scopes_to_solr_options scope, klass, options |
37 | + solr_options.merge! products_options(user) if asset == :products and empty_query | ||
38 | solr_options.merge! options.except(:category, :filter) | 38 | solr_options.merge! options.except(:category, :filter) |
39 | 39 | ||
40 | scope.find_by_contents query, paginate_options, solr_options | 40 | scope.find_by_contents query, paginate_options, solr_options |
@@ -42,14 +42,14 @@ class SolrPlugin < Noosfero::Plugin | @@ -42,14 +42,14 @@ class SolrPlugin < Noosfero::Plugin | ||
42 | 42 | ||
43 | protected | 43 | protected |
44 | 44 | ||
45 | - def scopes_to_solr_filters scope, klass = nil, options = {} | 45 | + def scopes_to_solr_options scope, klass = nil, options = {} |
46 | filter_queries = [] | 46 | filter_queries = [] |
47 | klass ||= scope.base_class | 47 | klass ||= scope.base_class |
48 | solr_fields = klass.configuration[:solr_fields].keys | 48 | solr_fields = klass.configuration[:solr_fields].keys |
49 | scopes_applied = scope.scopes_applied.dup rescue [] #rescue association and class direct filtering | 49 | scopes_applied = scope.scopes_applied.dup rescue [] #rescue association and class direct filtering |
50 | 50 | ||
51 | - scope.current_scoped_methods[:create].each do |attr, value| | ||
52 | - next unless solr_fields.include? attr.to_sym | 51 | + scope.scope_attributes.each do |attr, value| |
52 | + raise "Non-indexed attribute '#{attr}' speficied in scope_attributes" unless solr_fields.include? attr.to_sym | ||
53 | 53 | ||
54 | # if the filter is present here, then prefer it | 54 | # if the filter is present here, then prefer it |
55 | scopes_applied.reject!{ |name| name == attr.to_sym } | 55 | scopes_applied.reject!{ |name| name == attr.to_sym } |
plugins/solr/vendor/plugins/acts_as_solr_reloaded/.travis.yml
1 | +services: | ||
2 | + - mongodb | ||
3 | + | ||
4 | +language: ruby | ||
5 | +rvm: | ||
6 | + - 1.8.7 | ||
7 | + | ||
8 | +before_install: | ||
9 | + - sudo apt-get update | ||
10 | + - sudo apt-get install default-jdk | ||
11 | + | ||
1 | before_script: | 12 | before_script: |
2 | - mongo mydb_test --eval 'db.addUser("travis", "test");' | 13 | - mongo mydb_test --eval 'db.addUser("travis", "test");' |
3 | - gem update --system 1.4.1 > /dev/null 2>&1 | 14 | - gem update --system 1.4.1 > /dev/null 2>&1 |
4 | - rake solr:download | 15 | - rake solr:download |
5 | - RAILS_ENV=test rake solr:start | 16 | - RAILS_ENV=test rake solr:start |
6 | 17 | ||
7 | -script: "bundle exec rake $TASK --trace" | 18 | +script: |
19 | + - bundle exec rake test --trace | ||
20 | + - bundle exec rake test:functional --trace | ||
8 | 21 | ||
9 | -rvm: | ||
10 | - - 1.8.7 | ||
11 | -env: | ||
12 | - - TASK=test | ||
13 | - - TASK=test:functional |
plugins/solr/vendor/plugins/acts_as_solr_reloaded/Gemfile
plugins/solr/vendor/plugins/acts_as_solr_reloaded/Rakefile
1 | require 'rubygems' | 1 | require 'rubygems' |
2 | require 'rake' | 2 | require 'rake' |
3 | require 'rake/testtask' | 3 | require 'rake/testtask' |
4 | -require 'rake/rdoctask' | 4 | +require 'rdoc/task' |
5 | 5 | ||
6 | ENV['RAILS_ENV'] = "test" | 6 | ENV['RAILS_ENV'] = "test" |
7 | require File.expand_path("#{File.dirname(__FILE__)}/config/solr_environment") | 7 | require File.expand_path("#{File.dirname(__FILE__)}/config/solr_environment") |
8 | 8 | ||
9 | Dir["#{File.dirname(__FILE__)}/lib/tasks/*.rake"].sort.each { |ext| load ext } | 9 | Dir["#{File.dirname(__FILE__)}/lib/tasks/*.rake"].sort.each { |ext| load ext } |
10 | 10 | ||
11 | -desc "Default Task" | ||
12 | -task :default => [:test] | ||
13 | - | ||
14 | -desc "Runs the unit tests" | ||
15 | -task :test => "test:unit" | ||
16 | - | ||
17 | -namespace :test do | ||
18 | - task :setup do | ||
19 | - DB ||= 'sqlite' | ||
20 | - puts "Using " + DB | ||
21 | - %x(mysql -u#{MYSQL_USER} < #{File.dirname(__FILE__) + "/test/fixtures/db_definitions/mysql.sql"}) if DB == 'mysql' | ||
22 | - | ||
23 | - Rake::Task["test:migrate"].invoke | ||
24 | - end | ||
25 | - | ||
26 | - desc 'Measures test coverage using rcov' | ||
27 | - task :rcov => :setup do | ||
28 | - rm_f "coverage" | ||
29 | - rm_f "coverage.data" | ||
30 | - rcov = "rcov --rails --aggregate coverage.data --text-summary -Ilib" | ||
31 | - | ||
32 | - system("#{rcov} --html #{Dir.glob('test/**/*_shoulda.rb').join(' ')}") | ||
33 | - system("open coverage/index.html") if PLATFORM['darwin'] | ||
34 | - end | ||
35 | - | ||
36 | - desc 'Runs the functional tests, testing integration with Solr' | ||
37 | - Rake::TestTask.new(:functional => :setup) do |t| | ||
38 | - t.pattern = "test/functional/*_test.rb" | ||
39 | - t.verbose = true | ||
40 | - end | ||
41 | - | ||
42 | - desc "Unit tests" | ||
43 | - Rake::TestTask.new(:unit => :setup) do |t| | ||
44 | - t.libs << 'test/unit' | ||
45 | - t.pattern = "test/unit/*_shoulda.rb" | ||
46 | - t.verbose = true | ||
47 | - end | ||
48 | -end | ||
49 | - | ||
50 | -Rake::RDocTask.new do |rd| | ||
51 | - rd.main = "README.rdoc" | ||
52 | - rd.rdoc_dir = "rdoc" | ||
53 | - rd.rdoc_files.exclude("lib/solr/**/*.rb", "lib/solr.rb") | ||
54 | - rd.rdoc_files.include("README.rdoc", "lib/**/*.rb") | ||
55 | -end | ||
56 | - | ||
57 | -begin | ||
58 | - require 'jeweler' | ||
59 | - Jeweler::Tasks.new do |s| | ||
60 | - s.name = "acts_as_solr_reloaded" | ||
61 | - s.summary = "This gem adds full text search capabilities and many other nifty features from Apache Solr to any Rails model." | ||
62 | - s.email = "dc.rec1@gmail.com" | ||
63 | - s.homepage = "http://github.com/dcrec1/acts_as_solr_reloaded" | ||
64 | - s.description = "This gem adds full text search capabilities and many other nifty features from Apache Solr to any Rails model." | ||
65 | - s.authors = ["Diego Carrion"] | ||
66 | - s.files = FileList["[A-Z]*", "{bin,generators,config,lib,solr}/**/*"] + | ||
67 | - FileList["test/**/*"].reject {|f| f.include?("test/log")}.reject {|f| f.include?("test/tmp")} | ||
68 | - end | ||
69 | -rescue LoadError | ||
70 | - puts "Jeweler, or one of its dependencies, is not available. Install it with: sudo gem install jeweler" | ||
71 | -end |
plugins/solr/vendor/plugins/acts_as_solr_reloaded/config/solr_environment.rb
@@ -6,23 +6,19 @@ require 'net/http' | @@ -6,23 +6,19 @@ require 'net/http' | ||
6 | 6 | ||
7 | dir = File.dirname(__FILE__) | 7 | dir = File.dirname(__FILE__) |
8 | SOLR_PATH = File.expand_path("#{dir}/../solr") unless defined? SOLR_PATH | 8 | SOLR_PATH = File.expand_path("#{dir}/../solr") unless defined? SOLR_PATH |
9 | -config = YAML::load_file(RAILS_ROOT+'/plugins/solr/config/solr.yml') | 9 | +config = YAML::load_file("#{Rails.root}/plugins/solr/config/solr.yml") |
10 | 10 | ||
11 | -unless defined? RAILS_ROOT | ||
12 | - # define RAILS_ROOT for test environment | ||
13 | - RAILS_ROOT = defined?(Rails) ? Rails.root : File.expand_path("#{File.dirname(__FILE__)}/../test") | ||
14 | -end | ||
15 | unless defined? RAILS_ENV | 11 | unless defined? RAILS_ENV |
16 | RAILS_ENV = ENV['RAILS_ENV'] | 12 | RAILS_ENV = ENV['RAILS_ENV'] |
17 | end | 13 | end |
18 | unless defined? SOLR_LOGS_PATH | 14 | unless defined? SOLR_LOGS_PATH |
19 | - SOLR_LOGS_PATH = ENV["SOLR_LOGS_PATH"] || "#{RAILS_ROOT}/log" | 15 | + SOLR_LOGS_PATH = ENV["SOLR_LOGS_PATH"] || "#{Rails.root}/log" |
20 | end | 16 | end |
21 | unless defined? SOLR_PIDS_PATH | 17 | unless defined? SOLR_PIDS_PATH |
22 | - SOLR_PIDS_PATH = ENV["SOLR_PIDS_PATH"] || "#{RAILS_ROOT}/tmp/pids" | 18 | + SOLR_PIDS_PATH = ENV["SOLR_PIDS_PATH"] || "#{Rails.root}/tmp/pids" |
23 | end | 19 | end |
24 | unless defined? SOLR_DATA_PATH | 20 | unless defined? SOLR_DATA_PATH |
25 | - SOLR_DATA_PATH = ENV["SOLR_DATA_PATH"] || config[ENV['RAILS_ENV']]['data_path'] || "#{RAILS_ROOT}/solr/#{ENV['RAILS_ENV']}" | 21 | + SOLR_DATA_PATH = ENV["SOLR_DATA_PATH"] || config[ENV['RAILS_ENV']]['data_path'] || "#{Rails.root}/solr/#{ENV['RAILS_ENV']}" |
26 | end | 22 | end |
27 | unless defined? SOLR_CONFIG_PATH | 23 | unless defined? SOLR_CONFIG_PATH |
28 | SOLR_CONFIG_PATH = ENV["SOLR_CONFIG_PATH"] || "#{SOLR_PATH}/solr" | 24 | SOLR_CONFIG_PATH = ENV["SOLR_CONFIG_PATH"] || "#{SOLR_PATH}/solr" |
plugins/solr/vendor/plugins/acts_as_solr_reloaded/lib/acts_as_solr.rb
@@ -20,6 +20,7 @@ require File.dirname(__FILE__) + '/acts_as_solr/search_results' | @@ -20,6 +20,7 @@ require File.dirname(__FILE__) + '/acts_as_solr/search_results' | ||
20 | require File.dirname(__FILE__) + '/acts_as_solr/lazy_document' | 20 | require File.dirname(__FILE__) + '/acts_as_solr/lazy_document' |
21 | require File.dirname(__FILE__) + '/acts_as_solr/mongo_mapper' | 21 | require File.dirname(__FILE__) + '/acts_as_solr/mongo_mapper' |
22 | require File.dirname(__FILE__) + '/acts_as_solr/post' | 22 | require File.dirname(__FILE__) + '/acts_as_solr/post' |
23 | +require File.dirname(__FILE__) + '/acts_as_solr/scope_with_applied_names' | ||
23 | 24 | ||
24 | # reopen ActiveRecord and include the acts_as_solr method | 25 | # reopen ActiveRecord and include the acts_as_solr method |
25 | ActiveRecord::Base.extend ActsAsSolr::ActsMethods | 26 | ActiveRecord::Base.extend ActsAsSolr::ActsMethods |
plugins/solr/vendor/plugins/acts_as_solr_reloaded/lib/acts_as_solr/acts_methods.rb
@@ -178,6 +178,8 @@ module ActsAsSolr #:nodoc: | @@ -178,6 +178,8 @@ module ActsAsSolr #:nodoc: | ||
178 | include CommonMethods | 178 | include CommonMethods |
179 | include ParserMethods | 179 | include ParserMethods |
180 | 180 | ||
181 | + attr_accessor :solr_score | ||
182 | + | ||
181 | define_solr_configuration_methods | 183 | define_solr_configuration_methods |
182 | 184 | ||
183 | acts_as_taggable_on :tags if options[:taggable] | 185 | acts_as_taggable_on :tags if options[:taggable] |
plugins/solr/vendor/plugins/acts_as_solr_reloaded/lib/acts_as_solr/common_methods.rb
1 | module ActsAsSolr #:nodoc: | 1 | module ActsAsSolr #:nodoc: |
2 | - | 2 | + |
3 | module CommonMethods | 3 | module CommonMethods |
4 | 4 | ||
5 | TypeMapping = { | 5 | TypeMapping = { |
@@ -14,6 +14,7 @@ module ActsAsSolr #:nodoc: | @@ -14,6 +14,7 @@ module ActsAsSolr #:nodoc: | ||
14 | :range_integer => "ri", | 14 | :range_integer => "ri", |
15 | :facet => "facet", | 15 | :facet => "facet", |
16 | :text => "t", | 16 | :text => "t", |
17 | + :ngram_text => "nt", | ||
17 | } | 18 | } |
18 | 19 | ||
19 | # Converts field types into Solr types | 20 | # Converts field types into Solr types |
@@ -39,39 +40,39 @@ module ActsAsSolr #:nodoc: | @@ -39,39 +40,39 @@ module ActsAsSolr #:nodoc: | ||
39 | result = [result] unless result.is_a?(Array) | 40 | result = [result] unless result.is_a?(Array) |
40 | solr_batch_add result | 41 | solr_batch_add result |
41 | end | 42 | end |
42 | - | 43 | + |
43 | # Sends an add command to Solr | 44 | # Sends an add command to Solr |
44 | def solr_add(add_xml) | 45 | def solr_add(add_xml) |
45 | ActsAsSolr::Post.execute(Solr::Request::AddDocument.new(add_xml)) | 46 | ActsAsSolr::Post.execute(Solr::Request::AddDocument.new(add_xml)) |
46 | end | 47 | end |
47 | - | 48 | + |
48 | # Sends the delete command to Solr | 49 | # Sends the delete command to Solr |
49 | def solr_delete(solr_ids) | 50 | def solr_delete(solr_ids) |
50 | ActsAsSolr::Post.execute(Solr::Request::Delete.new(:id => solr_ids)) | 51 | ActsAsSolr::Post.execute(Solr::Request::Delete.new(:id => solr_ids)) |
51 | end | 52 | end |
52 | - | 53 | + |
53 | # Sends the commit command to Solr | 54 | # Sends the commit command to Solr |
54 | def solr_commit | 55 | def solr_commit |
55 | ActsAsSolr::Post.execute(Solr::Request::Commit.new) | 56 | ActsAsSolr::Post.execute(Solr::Request::Commit.new) |
56 | end | 57 | end |
57 | - | 58 | + |
58 | # Optimizes the Solr index. Solr says: | 59 | # Optimizes the Solr index. Solr says: |
59 | - # | ||
60 | - # Optimizations can take nearly ten minutes to run. | ||
61 | - # We are presuming optimizations should be run once following large | 60 | + # |
61 | + # Optimizations can take nearly ten minutes to run. | ||
62 | + # We are presuming optimizations should be run once following large | ||
62 | # batch-like updates to the collection and/or once a day. | 63 | # batch-like updates to the collection and/or once a day. |
63 | - # | ||
64 | - # One of the solutions for this would be to create a cron job that | 64 | + # |
65 | + # One of the solutions for this would be to create a cron job that | ||
65 | # runs every day at midnight and optmizes the index: | 66 | # runs every day at midnight and optmizes the index: |
66 | # 0 0 * * * /your_rails_dir/script/runner -e production "Model.solr_optimize" | 67 | # 0 0 * * * /your_rails_dir/script/runner -e production "Model.solr_optimize" |
67 | - # | 68 | + # |
68 | def solr_optimize | 69 | def solr_optimize |
69 | ActsAsSolr::Post.execute(Solr::Request::Optimize.new) | 70 | ActsAsSolr::Post.execute(Solr::Request::Optimize.new) |
70 | end | 71 | end |
71 | - | 72 | + |
72 | # Returns the id for the given instance | 73 | # Returns the id for the given instance |
73 | - def record_id(object) | ||
74 | - eval "object.#{object.class.primary_key}" | 74 | + def record_id object |
75 | + object.send object.class.primary_key | ||
75 | end | 76 | end |
76 | end | 77 | end |
77 | end | 78 | end |
plugins/solr/vendor/plugins/acts_as_solr_reloaded/lib/acts_as_solr/parser_methods.rb
@@ -4,12 +4,16 @@ module ActsAsSolr #:nodoc: | @@ -4,12 +4,16 @@ module ActsAsSolr #:nodoc: | ||
4 | 4 | ||
5 | # Method used by mostly all the ClassMethods when doing a search | 5 | # Method used by mostly all the ClassMethods when doing a search |
6 | def parse_query(query=nil, options={}) | 6 | def parse_query(query=nil, options={}) |
7 | - valid_options = [:models, :lazy, :core, :results_format, :sql_options, | 7 | + valid_options = [ |
8 | + :models, :lazy, :core, :results_format, :sql_options, | ||
8 | :alternate_query, :boost_functions, :filter_queries, :facets, :sort, | 9 | :alternate_query, :boost_functions, :filter_queries, :facets, :sort, |
9 | :scores, :operator, :latitude, :longitude, :radius, :relevance, :highlight, | 10 | :scores, :operator, :latitude, :longitude, :radius, :relevance, :highlight, |
10 | - :offset, :per_page, :limit, :page,] | 11 | + :offset, :per_page, :limit, :page, |
12 | + :query_fields, :default_field, | ||
13 | + ] | ||
11 | query_options = {} | 14 | query_options = {} |
12 | options[:results_format] ||= :objects | 15 | options[:results_format] ||= :objects |
16 | + options[:default_field] ||= 'text' | ||
13 | 17 | ||
14 | return if query.nil? | 18 | return if query.nil? |
15 | raise "Query should be a string" unless query.is_a?(String) | 19 | raise "Query should be a string" unless query.is_a?(String) |
@@ -49,77 +53,95 @@ module ActsAsSolr #:nodoc: | @@ -49,77 +53,95 @@ module ActsAsSolr #:nodoc: | ||
49 | query_options[:rows] = per_page | 53 | query_options[:rows] = per_page |
50 | query_options[:start] = offset | 54 | query_options[:start] = offset |
51 | 55 | ||
56 | + query_options[:boost_functions] = replace_types([*options[:boost_functions]], '').join(' ') if options[:boost_functions] | ||
57 | + | ||
58 | + parse_facets query_options, options | ||
59 | + parse_highlight query_options, options | ||
60 | + parse_sort query_options, options | ||
61 | + parse_location query_options, options | ||
62 | + parse_query_fields query_options, options | ||
63 | + | ||
52 | query_options[:operator] = options[:operator] | 64 | query_options[:operator] = options[:operator] |
65 | + not_dismax = query_options[:operator] == :or | ||
66 | + request = if not_dismax then Solr::Request::Standard.new(query_options) else Solr::Request::Dismax.new query_options end | ||
67 | + ActsAsSolr::Post.execute request, options[:core] | ||
68 | + rescue | ||
69 | + raise "#{$query} There was a problem executing your search\n#{query_options.inspect}\n: #{$!} in #{$!.backtrace.first}" | ||
70 | + end | ||
71 | + end | ||
53 | 72 | ||
54 | - query_options[:boost_functions] = replace_types([*options[:boost_functions]], '').join(' ') if options[:boost_functions] | 73 | + def parse_query_fields query_options, options |
74 | + options[:query_fields] ||= [] | ||
75 | + query_options[:query_fields] = replace_types([*options[:query_fields]], '').join ' ' | ||
76 | + end | ||
77 | + | ||
78 | + def parse_sort query_options, options | ||
79 | + query_options[:sort] = replace_types([*options[:sort]], '')[0] if options[:sort] | ||
80 | + end | ||
55 | 81 | ||
56 | - # first steps on the facet parameter processing | ||
57 | - if options[:facets] | ||
58 | - query_options[:facets] = {} | ||
59 | - query_options[:facets][:limit] = -1 # TODO: make this configurable | ||
60 | - query_options[:facets][:sort] = :count if options[:facets][:sort] | ||
61 | - query_options[:facets][:mincount] = 0 | ||
62 | - query_options[:facets][:mincount] = 1 if options[:facets][:zeros] == false | ||
63 | - # override the :zeros (it's deprecated anyway) if :mincount exists | ||
64 | - query_options[:facets][:mincount] = options[:facets][:mincount] if options[:facets][:mincount] | ||
65 | - query_options[:facets][:fields] = options[:facets][:fields].map{ |k| "#{k}_facet" } if options[:facets][:fields] | ||
66 | - query_options[:filter_queries] += replace_types([*options[:facets][:browse]]) if options[:facets][:browse] | ||
67 | - query_options[:facets][:queries] = replace_types([*options[:facets][:query]]) if options[:facets][:query] | ||
68 | - | ||
69 | - if options[:facets][:dates] | ||
70 | - query_options[:date_facets] = {} | ||
71 | - # if options[:facets][:dates][:fields] exists then :start, :end, and :gap must be there | ||
72 | - if options[:facets][:dates][:fields] | ||
73 | - [:start, :end, :gap].each { |k| raise "#{k} must be present in faceted date query" unless options[:facets][:dates].include?(k) } | ||
74 | - query_options[:date_facets][:fields] = [] | ||
75 | - options[:facets][:dates][:fields].each { |f| | ||
76 | - if f.kind_of? Hash | ||
77 | - key = f.keys[0] | ||
78 | - query_options[:date_facets][:fields] << {"#{key}_d" => f[key]} | ||
79 | - validate_date_facet_other_options(f[key][:other]) if f[key][:other] | ||
80 | - else | ||
81 | - query_options[:date_facets][:fields] << "#{f}_d" | ||
82 | - end | ||
83 | - } | ||
84 | - end | ||
85 | - | ||
86 | - query_options[:date_facets][:start] = options[:facets][:dates][:start] if options[:facets][:dates][:start] | ||
87 | - query_options[:date_facets][:end] = options[:facets][:dates][:end] if options[:facets][:dates][:end] | ||
88 | - query_options[:date_facets][:gap] = options[:facets][:dates][:gap] if options[:facets][:dates][:gap] | ||
89 | - query_options[:date_facets][:hardend] = options[:facets][:dates][:hardend] if options[:facets][:dates][:hardend] | ||
90 | - query_options[:date_facets][:filter] = replace_types([*options[:facets][:dates][:filter]].collect{|k| "#{k.dup.sub!(/ *:(?!\d) */,"_d:")}"}) if options[:facets][:dates][:filter] | ||
91 | - | ||
92 | - if options[:facets][:dates][:other] | ||
93 | - validate_date_facet_other_options(options[:facets][:dates][:other]) | ||
94 | - query_options[:date_facets][:other] = options[:facets][:dates][:other] | ||
95 | - end | 82 | + def parse_location query_options, options |
83 | + if options[:radius] | ||
84 | + query_options[:radius] = options[:radius] | ||
85 | + query_options[:filter_queries] << '{!geofilt}' | ||
86 | + end | ||
87 | + query_options[:latitude] = options[:latitude] | ||
88 | + query_options[:longitude] = options[:longitude] | ||
89 | + end | ||
96 | 90 | ||
91 | + def parse_highlight query_options, options | ||
92 | + if options[:highlight] | ||
93 | + query_options[:highlighting] = {} | ||
94 | + query_options[:highlighting][:field_list] = replace_types([*options[:highlight][:fields]], '') if options[:highlight][:fields] | ||
95 | + query_options[:highlighting][:require_field_match] = options[:highlight][:require_field_match] if options[:highlight][:require_field_match] | ||
96 | + query_options[:highlighting][:max_snippets] = options[:highlight][:max_snippets] if options[:highlight][:max_snippets] | ||
97 | + query_options[:highlighting][:prefix] = options[:highlight][:prefix] if options[:highlight][:prefix] | ||
98 | + query_options[:highlighting][:suffix] = options[:highlight][:suffix] if options[:highlight][:suffix] | ||
99 | + end | ||
100 | + end | ||
101 | + | ||
102 | + def parse_facets query_options, options | ||
103 | + # first steps on the facet parameter processing | ||
104 | + if options[:facets] | ||
105 | + query_options[:facets] = {} | ||
106 | + query_options[:facets][:limit] = -1 # TODO: make this configurable | ||
107 | + query_options[:facets][:sort] = :count if options[:facets][:sort] | ||
108 | + query_options[:facets][:mincount] = 0 | ||
109 | + query_options[:facets][:mincount] = 1 if options[:facets][:zeros] == false | ||
110 | + # override the :zeros (it's deprecated anyway) if :mincount exists | ||
111 | + query_options[:facets][:mincount] = options[:facets][:mincount] if options[:facets][:mincount] | ||
112 | + query_options[:facets][:fields] = options[:facets][:fields].map{ |k| "#{k}_facet" } if options[:facets][:fields] | ||
113 | + query_options[:filter_queries] += replace_types([*options[:facets][:browse]]) if options[:facets][:browse] | ||
114 | + query_options[:facets][:queries] = replace_types([*options[:facets][:query]]) if options[:facets][:query] | ||
115 | + | ||
116 | + if options[:facets][:dates] | ||
117 | + query_options[:date_facets] = {} | ||
118 | + # if options[:facets][:dates][:fields] exists then :start, :end, and :gap must be there | ||
119 | + if options[:facets][:dates][:fields] | ||
120 | + [:start, :end, :gap].each { |k| raise "#{k} must be present in faceted date query" unless options[:facets][:dates].include?(k) } | ||
121 | + query_options[:date_facets][:fields] = [] | ||
122 | + options[:facets][:dates][:fields].each { |f| | ||
123 | + if f.kind_of? Hash | ||
124 | + key = f.keys[0] | ||
125 | + query_options[:date_facets][:fields] << {"#{key}_d" => f[key]} | ||
126 | + validate_date_facet_other_options(f[key][:other]) if f[key][:other] | ||
127 | + else | ||
128 | + query_options[:date_facets][:fields] << "#{f}_d" | ||
129 | + end | ||
130 | + } | ||
97 | end | 131 | end |
98 | - end | ||
99 | 132 | ||
100 | - if options[:highlight] | ||
101 | - query_options[:highlighting] = {} | ||
102 | - query_options[:highlighting][:field_list] = replace_types([*options[:highlight][:fields]], '') if options[:highlight][:fields] | ||
103 | - query_options[:highlighting][:require_field_match] = options[:highlight][:require_field_match] if options[:highlight][:require_field_match] | ||
104 | - query_options[:highlighting][:max_snippets] = options[:highlight][:max_snippets] if options[:highlight][:max_snippets] | ||
105 | - query_options[:highlighting][:prefix] = options[:highlight][:prefix] if options[:highlight][:prefix] | ||
106 | - query_options[:highlighting][:suffix] = options[:highlight][:suffix] if options[:highlight][:suffix] | ||
107 | - end | 133 | + query_options[:date_facets][:start] = options[:facets][:dates][:start] if options[:facets][:dates][:start] |
134 | + query_options[:date_facets][:end] = options[:facets][:dates][:end] if options[:facets][:dates][:end] | ||
135 | + query_options[:date_facets][:gap] = options[:facets][:dates][:gap] if options[:facets][:dates][:gap] | ||
136 | + query_options[:date_facets][:hardend] = options[:facets][:dates][:hardend] if options[:facets][:dates][:hardend] | ||
137 | + query_options[:date_facets][:filter] = replace_types([*options[:facets][:dates][:filter]].collect{|k| "#{k.dup.sub!(/ *:(?!\d) */,"_d:")}"}) if options[:facets][:dates][:filter] | ||
108 | 138 | ||
109 | - query_options[:sort] = replace_types([*options[:sort]], '')[0] if options[:sort] | 139 | + if options[:facets][:dates][:other] |
140 | + validate_date_facet_other_options(options[:facets][:dates][:other]) | ||
141 | + query_options[:date_facets][:other] = options[:facets][:dates][:other] | ||
142 | + end | ||
110 | 143 | ||
111 | - if options[:radius] | ||
112 | - query_options[:radius] = options[:radius] | ||
113 | - query_options[:filter_queries] << '{!geofilt}' | ||
114 | end | 144 | end |
115 | - query_options[:latitude] = options[:latitude] | ||
116 | - query_options[:longitude] = options[:longitude] | ||
117 | - | ||
118 | - not_dismax = query_options[:operator] == :or | ||
119 | - request = not_dismax ? Solr::Request::Standard.new(query_options) : Solr::Request::Dismax.new(query_options) | ||
120 | - ActsAsSolr::Post.execute(request, options[:core]) | ||
121 | - rescue | ||
122 | - raise "#{$query} There was a problem executing your search\n#{query_options.inspect}\n: #{$!} in #{$!.backtrace.first}" | ||
123 | end | 145 | end |
124 | end | 146 | end |
125 | 147 | ||
@@ -148,21 +170,21 @@ module ActsAsSolr #:nodoc: | @@ -148,21 +170,21 @@ module ActsAsSolr #:nodoc: | ||
148 | results.update :start => header['params']['start'] | 170 | results.update :start => header['params']['start'] |
149 | end | 171 | end |
150 | 172 | ||
151 | - results.update(:facets => {'facet_fields' => []}) if options[:facets] | 173 | + results.update(:facets => {'facet_fields' => {}}) if options[:facets] |
152 | return SearchResults.new(results) if solr_data.total_hits == 0 | 174 | return SearchResults.new(results) if solr_data.total_hits == 0 |
153 | 175 | ||
154 | results.update(:facets => solr_data.data['facet_counts']) if options[:facets] | 176 | results.update(:facets => solr_data.data['facet_counts']) if options[:facets] |
155 | 177 | ||
156 | - ids = solr_data.hits.collect {|doc| doc["#{solr_configuration[:primary_key_field]}"]}.flatten | ||
157 | - result = find_objects(ids, options) | ||
158 | - results.update(:docs => result) | 178 | + ids = solr_data.hits.collect{ |doc| doc["#{solr_configuration[:primary_key_field]}"] }.flatten |
179 | + result = find_objects ids, options | ||
180 | + results.update :ids => ids, :docs => result | ||
159 | 181 | ||
160 | add_scores(result, solr_data) if options[:results_format] == :objects and options[:scores] | 182 | add_scores(result, solr_data) if options[:results_format] == :objects and options[:scores] |
161 | 183 | ||
162 | highlighted = {} | 184 | highlighted = {} |
163 | solr_data.highlighting.map do |x,y| | 185 | solr_data.highlighting.map do |x,y| |
164 | e={} | 186 | e={} |
165 | - y1=y.map{|x1,y1| e[x1.gsub(/_[^_]*/,"")]=y1} unless y.nil? | 187 | + y.map{ |x1,y1| e[x1.gsub(/_[^_]*/,"")]=y1 } unless y.nil? |
166 | highlighted[x.gsub(/[^:]*:/,"").to_i]=e | 188 | highlighted[x.gsub(/[^:]*:/,"").to_i]=e |
167 | end unless solr_data.highlighting.nil? | 189 | end unless solr_data.highlighting.nil? |
168 | results.update(:highlights => highlighted) | 190 | results.update(:highlights => highlighted) |
@@ -179,8 +201,12 @@ module ActsAsSolr #:nodoc: | @@ -179,8 +201,12 @@ module ActsAsSolr #:nodoc: | ||
179 | ids.collect{ |id| ActsAsSolr::LazyDocument.new(id, self) } | 201 | ids.collect{ |id| ActsAsSolr::LazyDocument.new(id, self) } |
180 | elsif options[:results_format] == :objects | 202 | elsif options[:results_format] == :objects |
181 | find_options = options[:sql_options] || {} | 203 | find_options = options[:sql_options] || {} |
182 | - find_options[:conditions] = self.send :merge_conditions, {self.primary_key => ids}, (find_options[:conditions] || []) | ||
183 | - result = self.all(find_options) || [] | 204 | + if Rails::VERSION::STRING >= '3.0' |
205 | + result = self.scoped(find_options).where(self.primary_key => ids).all | ||
206 | + else | ||
207 | + find_options[:conditions] = self.send :merge_conditions, {self.primary_key => ids}, (find_options[:conditions] || []) | ||
208 | + result = self.all(find_options) | ||
209 | + end | ||
184 | result = reorder(result, ids) unless find_options[:order] | 210 | result = reorder(result, ids) unless find_options[:order] |
185 | result | 211 | result |
186 | elsif options[:results_format] == :none | 212 | elsif options[:results_format] == :none |
@@ -226,22 +252,15 @@ module ActsAsSolr #:nodoc: | @@ -226,22 +252,15 @@ module ActsAsSolr #:nodoc: | ||
226 | def add_scores(results, solr_data) | 252 | def add_scores(results, solr_data) |
227 | with_score = [] | 253 | with_score = [] |
228 | solr_data.hits.each do |doc| | 254 | solr_data.hits.each do |doc| |
229 | - with_score.push([doc["score"], | ||
230 | - results.find {|record| scorable_record?(record, doc) }]) | ||
231 | - end | ||
232 | - with_score.each do |score, object| | ||
233 | - class << object; attr_accessor :solr_score; end | ||
234 | - object.solr_score = score | 255 | + record = results.find do |result| |
256 | + doc_id = doc["#{solr_configuration[:primary_key_field]}"].first rescue nil | ||
257 | + record_id(result).to_s == doc_id | ||
258 | + end | ||
259 | + with_score.push [doc["score"], record] | ||
235 | end | 260 | end |
236 | - end | ||
237 | - | ||
238 | - def scorable_record?(record, doc) | ||
239 | - doc_id = doc["#{solr_configuration[:primary_key_field]}"] | ||
240 | - if doc_id.nil? | ||
241 | - doc_id = doc["id"] | ||
242 | - "#{record.class.name}:#{record_id(record)}" == doc_id.first.to_s | ||
243 | - else | ||
244 | - record_id(record).to_s == doc_id.to_s | 261 | + with_score.each do |score, record| |
262 | + next unless record | ||
263 | + record.solr_score = score | ||
245 | end | 264 | end |
246 | end | 265 | end |
247 | 266 |
plugins/solr/vendor/plugins/acts_as_solr_reloaded/lib/acts_as_solr/scope_with_applied_names.rb
0 → 100644
@@ -0,0 +1,91 @@ | @@ -0,0 +1,91 @@ | ||
1 | + | ||
2 | +if Rails::VERSION::STRING >= "3.2" | ||
3 | + module ::ActiveRecord | ||
4 | + | ||
5 | + class Relation | ||
6 | + attr_accessor :scopes_applied | ||
7 | + end | ||
8 | + | ||
9 | + module Scoping | ||
10 | + module Named | ||
11 | + module ClassMethods | ||
12 | + attr_accessor :scope_name, :scopes_applied | ||
13 | + | ||
14 | + def scope_with_applied_names name, scope_options = {} | ||
15 | + name = name.to_sym | ||
16 | + valid_scope_name?(name) | ||
17 | + extension = Module.new(&Proc.new) if block_given? | ||
18 | + | ||
19 | + scope_proc = lambda do |*args| | ||
20 | + options = scope_options.respond_to?(:call) ? unscoped { scope_options.call(*args) } : scope_options | ||
21 | + options = scoped.apply_finder_options(options) if options.is_a?(Hash) | ||
22 | + | ||
23 | + relation = scoped.merge(options) | ||
24 | + relation.scopes_applied ||= Set.new | ||
25 | + relation.scopes_applied << name | ||
26 | + | ||
27 | + extension ? relation.extending(extension) : relation | ||
28 | + end | ||
29 | + | ||
30 | + singleton_class.send(:redefine_method, name, &scope_proc) | ||
31 | + end | ||
32 | + alias_method_chain :scope, :applied_names | ||
33 | + | ||
34 | + end | ||
35 | + end | ||
36 | + end | ||
37 | + end | ||
38 | +else | ||
39 | + require_dependency 'active_record/named_scope' | ||
40 | + | ||
41 | + module ::ActiveRecord | ||
42 | + module NamedScope | ||
43 | + module ClassMethods | ||
44 | + | ||
45 | + def named_scope_with_applied_names name, options = {}, &block | ||
46 | + named_scope_without_applied_names name, options, &block | ||
47 | + | ||
48 | + name = name.to_sym | ||
49 | + scopes[name] = lambda do |parent_scope, *args| | ||
50 | + scope = Scope.new(parent_scope, case options | ||
51 | + when Hash | ||
52 | + options | ||
53 | + when Proc | ||
54 | + if self.model_name != parent_scope.model_name | ||
55 | + options.bind(parent_scope).call(*args) | ||
56 | + else | ||
57 | + options.call(*args) | ||
58 | + end | ||
59 | + end, &block) | ||
60 | + scope.scope_name = name | ||
61 | + scope | ||
62 | + end | ||
63 | + end | ||
64 | + alias_method_chain :named_scope, :applied_names | ||
65 | + end | ||
66 | + | ||
67 | + class Scope | ||
68 | + attr_accessor :scope_name, :scopes_applied | ||
69 | + | ||
70 | + def initialize_with_applied_names proxy_scope, options, &block | ||
71 | + initialize_without_applied_names proxy_scope, options, &block | ||
72 | + self.scopes_applied ||= [] | ||
73 | + self.scopes_applied += proxy_scope.send :scopes_applied if Scope === proxy_scope | ||
74 | + | ||
75 | + # unrelated bugfix: use if instead of unless | ||
76 | + if (Scope === proxy_scope || ActiveRecord::Associations::AssociationCollection === proxy_scope) | ||
77 | + @current_scoped_methods_when_defined = proxy_scope.send(:current_scoped_methods) | ||
78 | + end | ||
79 | + end | ||
80 | + alias_method_chain :initialize, :applied_names | ||
81 | + | ||
82 | + def scope_name= name | ||
83 | + @scope_name = name | ||
84 | + self.scopes_applied << @scope_name | ||
85 | + end | ||
86 | + | ||
87 | + end | ||
88 | + | ||
89 | + end | ||
90 | + end | ||
91 | +end |
plugins/solr/vendor/plugins/acts_as_solr_reloaded/lib/solr/request/dismax.rb
@@ -12,13 +12,15 @@ | @@ -12,13 +12,15 @@ | ||
12 | 12 | ||
13 | class Solr::Request::Dismax < Solr::Request::Standard | 13 | class Solr::Request::Dismax < Solr::Request::Standard |
14 | 14 | ||
15 | - VALID_PARAMS.replace(VALID_PARAMS + [:tie_breaker, :query_fields, :minimum_match, :phrase_fields, :phrase_slop, | ||
16 | - :alternate_query, :boost_query, :boost_functions]) | 15 | + VALID_PARAMS.replace VALID_PARAMS + [ |
16 | + :tie_breaker, :query_fields, :minimum_match, :phrase_fields, :phrase_slop, | ||
17 | + :alternate_query, :boost_query, :boost_functions, | ||
18 | + ] | ||
17 | 19 | ||
18 | def initialize(params) | 20 | def initialize(params) |
19 | super | 21 | super |
20 | end | 22 | end |
21 | - | 23 | + |
22 | def to_hash | 24 | def to_hash |
23 | hash = super | 25 | hash = super |
24 | hash[:defType] = 'edismax' | 26 | hash[:defType] = 'edismax' |
plugins/solr/vendor/plugins/acts_as_solr_reloaded/lib/solr/request/standard.rb
@@ -12,40 +12,42 @@ | @@ -12,40 +12,42 @@ | ||
12 | 12 | ||
13 | class Solr::Request::Standard < Solr::Request::Select | 13 | class Solr::Request::Standard < Solr::Request::Select |
14 | 14 | ||
15 | - VALID_PARAMS = [:query, :sort, :default_field, :operator, :start, :rows, :shards, :date_facets, | ||
16 | - :filter_queries, :field_list, :debug_query, :explain_other, :facets, :highlighting, :mlt, :radius, | ||
17 | - :radius, :latitude, :longitude, :spellcheck] | ||
18 | - | 15 | + VALID_PARAMS = [ |
16 | + :query, :sort, :default_field, :operator, :start, :rows, :shards, :date_facets, | ||
17 | + :filter_queries, :field_list, :debug_query, :explain_other, :facets, :highlighting, :mlt, :radius, | ||
18 | + :radius, :latitude, :longitude, :spellcheck, | ||
19 | + ] | ||
20 | + | ||
19 | def initialize(params) | 21 | def initialize(params) |
20 | super 'search' | 22 | super 'search' |
21 | - | ||
22 | - raise "Invalid parameters: #{(params.keys - VALID_PARAMS).join(',')}" unless | 23 | + |
24 | + raise "Invalid parameters: #{(params.keys - VALID_PARAMS).join(',')}" unless | ||
23 | (params.keys - VALID_PARAMS).empty? | 25 | (params.keys - VALID_PARAMS).empty? |
24 | - | 26 | + |
25 | raise ":query parameter required" unless params[:query] | 27 | raise ":query parameter required" unless params[:query] |
26 | - | 28 | + |
27 | @params = params.dup | 29 | @params = params.dup |
28 | - | 30 | + |
29 | # Validate operator | 31 | # Validate operator |
30 | if params[:operator] | 32 | if params[:operator] |
31 | - raise "Only :and/:or operators allowed" unless | 33 | + raise "Only :and/:or operators allowed" unless |
32 | [:and, :or].include?(params[:operator]) | 34 | [:and, :or].include?(params[:operator]) |
33 | - | 35 | + |
34 | @params[:operator] = params[:operator].to_s.upcase | 36 | @params[:operator] = params[:operator].to_s.upcase |
35 | end | 37 | end |
36 | 38 | ||
37 | # Validate start, rows can be transformed to ints | 39 | # Validate start, rows can be transformed to ints |
38 | @params[:start] = params[:start].to_i if params[:start] | 40 | @params[:start] = params[:start].to_i if params[:start] |
39 | @params[:rows] = params[:rows].to_i if params[:rows] | 41 | @params[:rows] = params[:rows].to_i if params[:rows] |
40 | - | 42 | + |
41 | @params[:field_list] ||= ["*","score"] | 43 | @params[:field_list] ||= ["*","score"] |
42 | - | 44 | + |
43 | @params[:shards] ||= [] | 45 | @params[:shards] ||= [] |
44 | end | 46 | end |
45 | - | 47 | + |
46 | def to_hash | 48 | def to_hash |
47 | hash = {} | 49 | hash = {} |
48 | - | 50 | + |
49 | # standard request param processing | 51 | # standard request param processing |
50 | hash[:sort] = @params[:sort] | 52 | hash[:sort] = @params[:sort] |
51 | hash[:q] = @params[:query] | 53 | hash[:q] = @params[:query] |
@@ -61,11 +63,11 @@ class Solr::Request::Standard < Solr::Request::Select | @@ -61,11 +63,11 @@ class Solr::Request::Standard < Solr::Request::Select | ||
61 | hash[:debugQuery] = @params[:debug_query] | 63 | hash[:debugQuery] = @params[:debug_query] |
62 | hash[:explainOther] = @params[:explain_other] | 64 | hash[:explainOther] = @params[:explain_other] |
63 | hash[:shards] = @params[:shards].join(',') unless @params[:shards].empty? | 65 | hash[:shards] = @params[:shards].join(',') unless @params[:shards].empty? |
64 | - | 66 | + |
65 | hash[:sfield] = 'latlng' | 67 | hash[:sfield] = 'latlng' |
66 | hash[:d] = @params[:radius] | 68 | hash[:d] = @params[:radius] |
67 | hash[:pt] = "#{@params[:latitude]}, #{@params[:longitude]}" if @params[:latitude] and @params[:longitude] | 69 | hash[:pt] = "#{@params[:latitude]}, #{@params[:longitude]}" if @params[:latitude] and @params[:longitude] |
68 | - | 70 | + |
69 | # facet parameter processing | 71 | # facet parameter processing |
70 | if @params[:facets] | 72 | if @params[:facets] |
71 | # TODO need validation of all that is under the :facets Hash too | 73 | # TODO need validation of all that is under the :facets Hash too |
@@ -95,7 +97,7 @@ class Solr::Request::Standard < Solr::Request::Select | @@ -95,7 +97,7 @@ class Solr::Request::Standard < Solr::Request::Select | ||
95 | end | 97 | end |
96 | end | 98 | end |
97 | end | 99 | end |
98 | - | 100 | + |
99 | if @params[:date_facets] | 101 | if @params[:date_facets] |
100 | hash["facet.date"] = [] | 102 | hash["facet.date"] = [] |
101 | if @params[:date_facets][:fields] | 103 | if @params[:date_facets][:fields] |
@@ -125,7 +127,7 @@ class Solr::Request::Standard < Solr::Request::Select | @@ -125,7 +127,7 @@ class Solr::Request::Standard < Solr::Request::Select | ||
125 | end | 127 | end |
126 | end | 128 | end |
127 | end | 129 | end |
128 | - | 130 | + |
129 | # highlighting parameter processing - http://wiki.apache.org/solr/HighlightingParameters | 131 | # highlighting parameter processing - http://wiki.apache.org/solr/HighlightingParameters |
130 | if @params[:highlighting] | 132 | if @params[:highlighting] |
131 | hash[:hl] = true | 133 | hash[:hl] = true |
@@ -385,7 +387,7 @@ class Solr::Request::Standard < Solr::Request::Select | @@ -385,7 +387,7 @@ class Solr::Request::Standard < Solr::Request::Select | ||
385 | end | 387 | end |
386 | 388 | ||
387 | end | 389 | end |
388 | - | 390 | + |
389 | if @params[:mlt] | 391 | if @params[:mlt] |
390 | hash[:mlt] = true | 392 | hash[:mlt] = true |
391 | hash["mlt.count"] = @params[:mlt][:count] | 393 | hash["mlt.count"] = @params[:mlt][:count] |
@@ -398,10 +400,10 @@ class Solr::Request::Standard < Solr::Request::Select | @@ -398,10 +400,10 @@ class Solr::Request::Standard < Solr::Request::Select | ||
398 | hash["mlt.maxntp"] = @params[:mlt][:max_tokens_parsed] | 400 | hash["mlt.maxntp"] = @params[:mlt][:max_tokens_parsed] |
399 | hash["mlt.boost"] = @params[:mlt][:boost] | 401 | hash["mlt.boost"] = @params[:mlt][:boost] |
400 | end | 402 | end |
401 | - | 403 | + |
402 | hash[:spellcheck] = true | 404 | hash[:spellcheck] = true |
403 | hash['spellcheck.collate'] = true | 405 | hash['spellcheck.collate'] = true |
404 | - | 406 | + |
405 | hash.merge(super.to_hash) | 407 | hash.merge(super.to_hash) |
406 | end | 408 | end |
407 | 409 |
plugins/solr/vendor/plugins/acts_as_solr_reloaded/lib/solr/response/ruby.rb
@@ -14,13 +14,14 @@ class Solr::Response::Ruby < Solr::Response::Base | @@ -14,13 +14,14 @@ class Solr::Response::Ruby < Solr::Response::Base | ||
14 | attr_reader :data, :header | 14 | attr_reader :data, :header |
15 | 15 | ||
16 | def initialize(ruby_code) | 16 | def initialize(ruby_code) |
17 | + ruby_code.force_encoding('UTF-8') if RUBY_VERSION >= '1.9' | ||
17 | super | 18 | super |
18 | begin | 19 | begin |
19 | #TODO: what about pulling up data/header/response to ResponseBase, | 20 | #TODO: what about pulling up data/header/response to ResponseBase, |
20 | # or maybe a new middle class like SelectResponseBase since | 21 | # or maybe a new middle class like SelectResponseBase since |
21 | # all Select queries return this same sort of stuff?? | 22 | # all Select queries return this same sort of stuff?? |
22 | # XML (&wt=xml) and Ruby (&wt=ruby) responses contain exactly the same structure. | 23 | # XML (&wt=xml) and Ruby (&wt=ruby) responses contain exactly the same structure. |
23 | - # a goal of solrb is to make it irrelevant which gets used under the hood, | 24 | + # a goal of solrb is to make it irrelevant which gets used under the hood, |
24 | # but favor Ruby responses. | 25 | # but favor Ruby responses. |
25 | @data = eval(ruby_code) | 26 | @data = eval(ruby_code) |
26 | @header = @data['responseHeader'] | 27 | @header = @data['responseHeader'] |
@@ -38,5 +39,5 @@ class Solr::Response::Ruby < Solr::Response::Base | @@ -38,5 +39,5 @@ class Solr::Response::Ruby < Solr::Response::Base | ||
38 | def query_time | 39 | def query_time |
39 | @header['QTime'] | 40 | @header['QTime'] |
40 | end | 41 | end |
41 | - | 42 | + |
42 | end | 43 | end |
plugins/solr/vendor/plugins/acts_as_solr_reloaded/lib/solr/response/xml.rb
@@ -18,7 +18,7 @@ class Solr::Response::Xml < Solr::Response::Base | @@ -18,7 +18,7 @@ class Solr::Response::Xml < Solr::Response::Base | ||
18 | # parse the xml | 18 | # parse the xml |
19 | @doc = REXML::Document.new(xml) | 19 | @doc = REXML::Document.new(xml) |
20 | 20 | ||
21 | - # look for the result code and string | 21 | + # look for the result code and string |
22 | # <?xml version="1.0" encoding="UTF-8"?> | 22 | # <?xml version="1.0" encoding="UTF-8"?> |
23 | # <response> | 23 | # <response> |
24 | # <lst name="responseHeader"><int name="status">0</int><int name="QTime">2</int></lst> | 24 | # <lst name="responseHeader"><int name="status">0</int><int name="QTime">2</int></lst> |
plugins/solr/vendor/plugins/acts_as_solr_reloaded/lib/tasks/database.rake
@@ -5,12 +5,12 @@ namespace :db do | @@ -5,12 +5,12 @@ namespace :db do | ||
5 | begin | 5 | begin |
6 | ActsAsSolr::Post.execute(Solr::Request::Delete.new(:query => "*:*")) | 6 | ActsAsSolr::Post.execute(Solr::Request::Delete.new(:query => "*:*")) |
7 | ActsAsSolr::Post.execute(Solr::Request::Commit.new) | 7 | ActsAsSolr::Post.execute(Solr::Request::Commit.new) |
8 | - (ENV['FIXTURES'] ? ENV['FIXTURES'].split(/,/) : Dir.glob(File.join(RAILS_ROOT, 'test', 'fixtures', '*.{yml,csv}'))).each do |fixture_file| | 8 | + (ENV['FIXTURES'] ? ENV['FIXTURES'].split(/,/) : Dir.glob(File.join(Rails.root, 'test', 'fixtures', '*.{yml,csv}'))).each do |fixture_file| |
9 | ActsAsSolr::SolrFixtures.load(File.basename(fixture_file, '.*')) | 9 | ActsAsSolr::SolrFixtures.load(File.basename(fixture_file, '.*')) |
10 | - end | ||
11 | - puts "The fixtures loaded have been added to Solr" | 10 | + end |
11 | + puts "The fixtures loaded have been added to Solr" | ||
12 | rescue | 12 | rescue |
13 | end | 13 | end |
14 | end | 14 | end |
15 | end | 15 | end |
16 | -end | ||
17 | \ No newline at end of file | 16 | \ No newline at end of file |
17 | +end |
plugins/solr/vendor/plugins/acts_as_solr_reloaded/lib/tasks/jeweler.rake
0 → 100644
@@ -0,0 +1,15 @@ | @@ -0,0 +1,15 @@ | ||
1 | +begin | ||
2 | + require 'jeweler' | ||
3 | +rescue LoadError | ||
4 | +end | ||
5 | + | ||
6 | +Jeweler::Tasks.new do |s| | ||
7 | + s.name = "acts_as_solr_reloaded" | ||
8 | + s.summary = "This gem adds full text search capabilities and many other nifty features from Apache Solr to any Rails model." | ||
9 | + s.email = "dc.rec1@gmail.com" | ||
10 | + s.homepage = "http://github.com/dcrec1/acts_as_solr_reloaded" | ||
11 | + s.description = "This gem adds full text search capabilities and many other nifty features from Apache Solr to any Rails model." | ||
12 | + s.authors = ["Diego Carrion"] | ||
13 | + s.files = FileList["[A-Z]*", "{bin,generators,config,lib,solr}/**/*"] + | ||
14 | + FileList["test/**/*"].reject {|f| f.include?("test/log")}.reject {|f| f.include?("test/tmp")} | ||
15 | +end if defined? Jeweler |
plugins/solr/vendor/plugins/acts_as_solr_reloaded/lib/tasks/rdoc.rake
0 → 100644
plugins/solr/vendor/plugins/acts_as_solr_reloaded/lib/tasks/solr.rake
@@ -158,7 +158,7 @@ namespace :solr do | @@ -158,7 +158,7 @@ namespace :solr do | ||
158 | 158 | ||
159 | logger = ActiveRecord::Base.logger = Logger.new(STDOUT) | 159 | logger = ActiveRecord::Base.logger = Logger.new(STDOUT) |
160 | logger.level = ActiveSupport::BufferedLogger::INFO unless debug_output | 160 | logger.level = ActiveSupport::BufferedLogger::INFO unless debug_output |
161 | - Dir["#{RAILS_ROOT}/app/models/*.rb"].each{ |file| require file } | 161 | + Dir["#{Rails.root}/app/models/*.rb"].each{ |file| require file } |
162 | 162 | ||
163 | if start_server | 163 | if start_server |
164 | puts "Starting Solr server..." | 164 | puts "Starting Solr server..." |
plugins/solr/vendor/plugins/acts_as_solr_reloaded/lib/tasks/test.rake
plugins/solr/vendor/plugins/acts_as_solr_reloaded/solr/solr/conf/schema.xml
@@ -57,11 +57,9 @@ | @@ -57,11 +57,9 @@ | ||
57 | <fieldType name="text" class="solr.TextField" autoGeneratePhraseQueries="false"> | 57 | <fieldType name="text" class="solr.TextField" autoGeneratePhraseQueries="false"> |
58 | <analyzer type="index"> | 58 | <analyzer type="index"> |
59 | <tokenizer class="solr.StandardTokenizerFactory"/> | 59 | <tokenizer class="solr.StandardTokenizerFactory"/> |
60 | - <filter class="solr.RemoveDuplicatesTokenFilterFactory"/> | ||
61 | - | ||
62 | <filter class="solr.ASCIIFoldingFilterFactory"/> | 60 | <filter class="solr.ASCIIFoldingFilterFactory"/> |
63 | <filter class="solr.LowerCaseFilterFactory"/> | 61 | <filter class="solr.LowerCaseFilterFactory"/> |
64 | - | 62 | + <filter class="solr.RemoveDuplicatesTokenFilterFactory"/> |
65 | <filter class="solr.StopFilterFactory" words="stopwords.pt.txt" /> | 63 | <filter class="solr.StopFilterFactory" words="stopwords.pt.txt" /> |
66 | 64 | ||
67 | <!-- stemming | 65 | <!-- stemming |
@@ -73,18 +71,12 @@ | @@ -73,18 +71,12 @@ | ||
73 | <filter class="solr.HunspellStemFilterFactory" dictionary="en_US.dic" affix="en_US.aff" ignoreCase="true" /> | 71 | <filter class="solr.HunspellStemFilterFactory" dictionary="en_US.dic" affix="en_US.aff" ignoreCase="true" /> |
74 | <filter class="solr.HunspellStemFilterFactory" dictionary="pt_PT.dic" affix="pt_PT.aff" ignoreCase="true" /> | 72 | <filter class="solr.HunspellStemFilterFactory" dictionary="pt_PT.dic" affix="pt_PT.aff" ignoreCase="true" /> |
75 | --> | 73 | --> |
76 | - | ||
77 | - <!-- improvised stemming | ||
78 | - <filter class="solr.EdgeNGramFilterFactory" minGramSize="3" maxGramSize="20" side="front"/> | ||
79 | - --> | ||
80 | </analyzer> | 74 | </analyzer> |
81 | <analyzer type="query"> | 75 | <analyzer type="query"> |
82 | <tokenizer class="solr.StandardTokenizerFactory"/> | 76 | <tokenizer class="solr.StandardTokenizerFactory"/> |
83 | - <filter class="solr.RemoveDuplicatesTokenFilterFactory"/> | ||
84 | - | ||
85 | <filter class="solr.ASCIIFoldingFilterFactory"/> | 77 | <filter class="solr.ASCIIFoldingFilterFactory"/> |
86 | <filter class="solr.LowerCaseFilterFactory"/> | 78 | <filter class="solr.LowerCaseFilterFactory"/> |
87 | - | 79 | + <filter class="solr.RemoveDuplicatesTokenFilterFactory"/> |
88 | <filter class="solr.StopFilterFactory" words="stopwords.pt.txt" /> | 80 | <filter class="solr.StopFilterFactory" words="stopwords.pt.txt" /> |
89 | 81 | ||
90 | <!-- stemming | 82 | <!-- stemming |
@@ -96,10 +88,23 @@ | @@ -96,10 +88,23 @@ | ||
96 | <filter class="solr.HunspellStemFilterFactory" dictionary="en_US.dic" affix="en_US.aff" ignoreCase="true" /> | 88 | <filter class="solr.HunspellStemFilterFactory" dictionary="en_US.dic" affix="en_US.aff" ignoreCase="true" /> |
97 | <filter class="solr.HunspellStemFilterFactory" dictionary="pt_PT.dic" affix="pt_PT.aff" ignoreCase="true" /> | 89 | <filter class="solr.HunspellStemFilterFactory" dictionary="pt_PT.dic" affix="pt_PT.aff" ignoreCase="true" /> |
98 | --> | 90 | --> |
91 | + </analyzer> | ||
92 | + </fieldType> | ||
99 | 93 | ||
100 | - <!-- improvised stemming | ||
101 | - <filter class="solr.EdgeNGramFilterFactory" minGramSize="3" maxGramSize="20" side="front"/> | ||
102 | - --> | 94 | + <fieldType name="ngramText" class="solr.TextField" positionIncrementGap="100"> |
95 | + <analyzer type="index"> | ||
96 | + <tokenizer class="solr.StandardTokenizerFactory"/> | ||
97 | + <filter class="solr.ASCIIFoldingFilterFactory"/> | ||
98 | + <filter class="solr.LowerCaseFilterFactory"/> | ||
99 | + <filter class="solr.RemoveDuplicatesTokenFilterFactory"/> | ||
100 | + | ||
101 | + <filter class="solr.EdgeNGramFilterFactory" minGramSize="1" maxGramSize="20" side="front"/> | ||
102 | + </analyzer> | ||
103 | + <analyzer type="query"> | ||
104 | + <tokenizer class="solr.StandardTokenizerFactory"/> | ||
105 | + <filter class="solr.ASCIIFoldingFilterFactory"/> | ||
106 | + <filter class="solr.LowerCaseFilterFactory"/> | ||
107 | + <filter class="solr.RemoveDuplicatesTokenFilterFactory"/> | ||
103 | </analyzer> | 108 | </analyzer> |
104 | </fieldType> | 109 | </fieldType> |
105 | 110 | ||
@@ -151,6 +156,7 @@ | @@ -151,6 +156,7 @@ | ||
151 | <dynamicField name="*sortable_do" type="sdouble" indexed="true" stored="false" multiValued="false"/> | 156 | <dynamicField name="*sortable_do" type="sdouble" indexed="true" stored="false" multiValued="false"/> |
152 | 157 | ||
153 | <dynamicField name="*_t" type="text" indexed="true" stored="true" multiValued="true"/> | 158 | <dynamicField name="*_t" type="text" indexed="true" stored="true" multiValued="true"/> |
159 | + <dynamicField name="*_nt" type="ngramText" indexed="true" stored="true" multiValued="true"/> | ||
154 | <dynamicField name="*_s" type="text" indexed="true" stored="true" multiValued="false"/> | 160 | <dynamicField name="*_s" type="text" indexed="true" stored="true" multiValued="false"/> |
155 | <dynamicField name="*_i" type="integer" indexed="true" stored="false" multiValued="true"/> | 161 | <dynamicField name="*_i" type="integer" indexed="true" stored="false" multiValued="true"/> |
156 | <dynamicField name="*_f" type="float" indexed="true" stored="true" multiValued="false"/> | 162 | <dynamicField name="*_f" type="float" indexed="true" stored="true" multiValued="false"/> |
@@ -168,6 +174,7 @@ | @@ -168,6 +174,7 @@ | ||
168 | <field name="geo_distance" type="sdouble"/> <!-- Optional but used for distributed searching --> | 174 | <field name="geo_distance" type="sdouble"/> <!-- Optional but used for distributed searching --> |
169 | 175 | ||
170 | <field name="text" type="text" indexed="true" stored="false" multiValued="true"/> | 176 | <field name="text" type="text" indexed="true" stored="false" multiValued="true"/> |
177 | + <field name="ngramText" type="ngramText" indexed="true" stored="false" multiValued="true"/> | ||
171 | <field name="spell" type="textSpell" indexed="true" stored="true" multiValued="true"/> | 178 | <field name="spell" type="textSpell" indexed="true" stored="true" multiValued="true"/> |
172 | 179 | ||
173 | <dynamicField name="*_s_mv" type="string" indexed="true" stored="false" multiValued="true"/> | 180 | <dynamicField name="*_s_mv" type="string" indexed="true" stored="false" multiValued="true"/> |
@@ -187,6 +194,10 @@ | @@ -187,6 +194,10 @@ | ||
187 | <copyField source="*_do" dest="text"/> | 194 | <copyField source="*_do" dest="text"/> |
188 | <copyField source="*_facet" dest="text"/> | 195 | <copyField source="*_facet" dest="text"/> |
189 | 196 | ||
197 | + <copyField source="*_s" dest="ngramText"/> | ||
198 | + <copyField source="*_t" dest="ngramText"/> | ||
199 | + <copyField source="*_nt" dest="ngramText"/> | ||
200 | + | ||
190 | <copyField source="*_s" dest="spell"/> | 201 | <copyField source="*_s" dest="spell"/> |
191 | <copyField source="*_t" dest="spell"/> | 202 | <copyField source="*_t" dest="spell"/> |
192 | <copyField source="*_facet" dest="spell"/> | 203 | <copyField source="*_facet" dest="spell"/> |
plugins/solr/vendor/plugins/acts_as_solr_reloaded/solr_test_rakefile.rb
@@ -2,5 +2,4 @@ require 'rubygems' | @@ -2,5 +2,4 @@ require 'rubygems' | ||
2 | require 'rake' | 2 | require 'rake' |
3 | dir = File.dirname(__FILE__) | 3 | dir = File.dirname(__FILE__) |
4 | $:.unshift("#{dir}/lib") | 4 | $:.unshift("#{dir}/lib") |
5 | -RAILS_ROOT = dir | ||
6 | require "acts_as_solr/tasks" | 5 | require "acts_as_solr/tasks" |
plugins/solr/vendor/plugins/acts_as_solr_reloaded/test/fixtures/locals.yml
0 → 100644
plugins/solr/vendor/plugins/acts_as_solr_reloaded/test/test_helper.rb
@@ -16,7 +16,7 @@ require 'mongo_mapper' | @@ -16,7 +16,7 @@ require 'mongo_mapper' | ||
16 | 16 | ||
17 | class Rails | 17 | class Rails |
18 | def self.root | 18 | def self.root |
19 | - RAILS_ROOT | 19 | + Rails.root |
20 | end | 20 | end |
21 | 21 | ||
22 | def self.env | 22 | def self.env |
@@ -26,13 +26,14 @@ end | @@ -26,13 +26,14 @@ end | ||
26 | 26 | ||
27 | MongoMapper.database = "acts_as_solr_reloaded-test" | 27 | MongoMapper.database = "acts_as_solr_reloaded-test" |
28 | 28 | ||
29 | -RAILS_ROOT = File.dirname(__FILE__) unless defined? RAILS_ROOT | ||
30 | -RAILS_ENV = 'test' unless defined? RAILS_ENV | 29 | +RAILS_ENV = 'test' unless defined? RAILS_ENV |
31 | ENV["RAILS_ENV"] = "test" | 30 | ENV["RAILS_ENV"] = "test" |
32 | 31 | ||
33 | require File.expand_path(File.dirname(__FILE__) + '/../config/solr_environment') | 32 | require File.expand_path(File.dirname(__FILE__) + '/../config/solr_environment') |
34 | require File.expand_path(File.dirname(__FILE__) + '/../lib/acts_as_solr') | 33 | require File.expand_path(File.dirname(__FILE__) + '/../lib/acts_as_solr') |
35 | 34 | ||
35 | +ActiveRecord::Base.logger = Logger.new('/dev/null') | ||
36 | + | ||
36 | # Load Models | 37 | # Load Models |
37 | models_dir = File.join(File.dirname( __FILE__ ), 'models') | 38 | models_dir = File.join(File.dirname( __FILE__ ), 'models') |
38 | require "#{models_dir}/book.rb" | 39 | require "#{models_dir}/book.rb" |
@@ -60,10 +61,10 @@ class Test::Unit::TestCase | @@ -60,10 +61,10 @@ class Test::Unit::TestCase | ||
60 | klass = instance_eval table_name.to_s.capitalize.singularize | 61 | klass = instance_eval table_name.to_s.capitalize.singularize |
61 | klass.find(:all).each{|content| content.solr_save} | 62 | klass.find(:all).each{|content| content.solr_save} |
62 | end | 63 | end |
63 | - | 64 | + |
64 | clear_from_solr(:novels) | 65 | clear_from_solr(:novels) |
65 | end | 66 | end |
66 | - | 67 | + |
67 | private | 68 | private |
68 | def self.clear_from_solr(table_name) | 69 | def self.clear_from_solr(table_name) |
69 | ActsAsSolr::Post.execute(Solr::Request::Delete.new(:query => "type_s:#{table_name.to_s.capitalize.singularize}")) | 70 | ActsAsSolr::Post.execute(Solr::Request::Delete.new(:query => "type_s:#{table_name.to_s.capitalize.singularize}")) |