Commit a700537c4634a1332b10c4615cd731e42b288072

Authored by Antonio Terceiro
2 parents d877a56d f9a04729

Merge branch 'rails4'

Noosfero now uses Rails 4.2, and requires Debian Jessie.
Showing 1143 changed files with 15359 additions and 31589 deletions   Show diff stats

Too many changes.

To preserve performance only 100 of 1143 files displayed.

@@ -8,8 +8,7 @@ notifications: @@ -8,8 +8,7 @@ notifications:
8 8
9 language: ruby 9 language: ruby
10 rvm: 10 rvm:
11 -# for 2.2 support we need to upgrade the pg gem  
12 - - 2.1.6 11 + - 2.2.3
13 12
14 sudo: false 13 sudo: false
15 addons: 14 addons:
@@ -26,19 +25,16 @@ addons: @@ -26,19 +25,16 @@ addons:
26 - libsqlite3-dev 25 - libsqlite3-dev
27 - libxslt1-dev 26 - libxslt1-dev
28 27
29 -before_install:  
30 - - gem env  
31 -  
32 # workaround for https://github.com/travis-ci/travis-ci/issues/4536 28 # workaround for https://github.com/travis-ci/travis-ci/issues/4536
33 before_install: 29 before_install:
34 - - export GEM_HOME=$PWD/vendor/bundle/ruby/2.1.0 30 + - export GEM_HOME=$PWD/vendor/bundle/ruby/2.2.0
35 - gem install bundler 31 - gem install bundler
36 cache: bundler 32 cache: bundler
37 33
38 before_script: 34 before_script:
39 - mkdir -p tmp/{pids,cache} log 35 - mkdir -p tmp/{pids,cache} log
40 - script/noosfero-plugins disableall 36 - script/noosfero-plugins disableall
41 - - bundle exec rake makemo &>/dev/null 37 + #- bundle exec rake makemo &>/dev/null
42 # database 38 # database
43 - cp config/database.yml.travis config/database.yml 39 - cp config/database.yml.travis config/database.yml
44 - psql -c 'create database myapp_test;' -U postgres 40 - psql -c 'create database myapp_test;' -U postgres
@@ -49,7 +45,7 @@ env: @@ -49,7 +45,7 @@ env:
49 - TASK=test:units 45 - TASK=test:units
50 - TASK=test:functionals 46 - TASK=test:functionals
51 - TASK=test:integration 47 - TASK=test:integration
52 - - TASK=cucumber 48 + - TASK=cucumber LANG=en
53 - TASK=selenium 49 - TASK=selenium
54 - TASK=test:noosfero_plugins BUNDLE_OPTS=install 50 - TASK=test:noosfero_plugins BUNDLE_OPTS=install
55 51
1 source "https://rubygems.org" 1 source "https://rubygems.org"
2 -gem 'rails', '~> 3.2.22'  
3 -gem 'minitest', '~> 3.2.0'  
4 -gem 'fast_gettext', '~> 0.6.8'  
5 -gem 'acts-as-taggable-on', '~> 3.4.2' 2 +gem 'rails', '~> 4.2.4'
  3 +gem 'fast_gettext', '~> 0.9'
  4 +gem 'acts-as-taggable-on', '~> 3.5'
6 gem 'rails_autolink', '~> 1.1.5' 5 gem 'rails_autolink', '~> 1.1.5'
7 -gem 'pg', '~> 0.13.2'  
8 -gem 'rmagick', '~> 2.13.1'  
9 -gem 'RedCloth', '~> 4.2.9'  
10 -gem 'will_paginate', '~> 3.0.3' 6 +gem 'pg', '~> 0.17'
  7 +gem 'rmagick', '~> 2.13'
  8 +gem 'RedCloth', '~> 4.2'
11 gem 'ruby-feedparser', '~> 0.7' 9 gem 'ruby-feedparser', '~> 0.7'
12 -gem 'daemons', '~> 1.1.5' 10 +gem 'daemons', '~> 1.1'
13 gem 'unicorn', '~> 4.8' 11 gem 'unicorn', '~> 4.8'
14 -gem 'nokogiri', '~> 1.5.5' 12 +gem 'nokogiri', '~> 1.6.0'
  13 +gem 'will_paginate'
  14 +gem 'pothoven-attachment_fu', '~> 3.2.16'
  15 +gem 'delayed_job'
  16 +gem 'delayed_job_active_record'
15 gem 'rake', :require => false 17 gem 'rake', :require => false
16 -gem 'rest-client', '~> 1.6.7' 18 +gem 'rest-client', '~> 1.6'
17 gem 'exception_notification', '~> 4.0.1' 19 gem 'exception_notification', '~> 4.0.1'
18 -gem 'gettext', '~> 2.2.1', :require => false  
19 -gem 'locale', '~> 2.0.5' 20 +gem 'gettext', '~> 3.1', :require => false
  21 +gem 'locale', '~> 2.1'
20 gem 'whenever', :require => false 22 gem 'whenever', :require => false
21 -gem 'eita-jrails', '~> 0.9.5', require: 'jrails' 23 +gem 'eita-jrails', '~> 0.10.0', require: 'jrails'
  24 +gem 'diffy', '~> 3.0'
22 25
23 # API dependencies 26 # API dependencies
24 gem 'grape', '~> 0.12' 27 gem 'grape', '~> 0.12'
@@ -30,30 +33,55 @@ gem 'rack-contrib' @@ -30,30 +33,55 @@ gem 'rack-contrib'
30 # asset pipeline 33 # asset pipeline
31 gem 'uglifier', '>= 1.0.3' 34 gem 'uglifier', '>= 1.0.3'
32 gem 'sass-rails' 35 gem 'sass-rails'
33 -gem 'sass', '~> 3.1.19' 36 +
  37 +# gems to enable rails3 behaviour
  38 +gem 'protected_attributes'
  39 +gem 'rails-observers'
  40 +gem 'actionpack-page_caching'
  41 +gem 'actionpack-action_caching'
  42 +gem 'activerecord-session_store'
  43 +gem 'activerecord-deprecated_finders', require: 'active_record/deprecated_finders'
34 44
35 group :production do 45 group :production do
36 gem 'dalli', '~> 2.7.0' 46 gem 'dalli', '~> 2.7.0'
37 end 47 end
38 48
  49 +group :development do
  50 +end
  51 +
  52 +group :development, :test do
  53 + gem 'spring'
  54 +end
  55 +
39 group :test do 56 group :test do
40 - gem 'rspec', '~> 2.14.0'  
41 - gem 'rspec-rails', '~> 2.14.1' 57 + gem 'rspec', '~> 3.3'
  58 + gem 'rspec-rails', '~> 3.2'
42 gem 'mocha', '~> 1.1.0', :require => false 59 gem 'mocha', '~> 1.1.0', :require => false
43 gem 'test-unit' if RUBY_VERSION >= '2.2.0' 60 gem 'test-unit' if RUBY_VERSION >= '2.2.0'
  61 + gem 'minitest'
  62 + gem 'minitest-reporters'
44 end 63 end
45 64
46 group :cucumber do 65 group :cucumber do
47 - gem 'cucumber-rails', '~> 1.0.6', :require => false  
48 - gem 'capybara', '~> 2.1.0'  
49 - gem 'cucumber', '~> 1.0.6'  
50 - gem 'database_cleaner', '~> 1.2.0'  
51 - gem 'selenium-webdriver', '~> 2.47.0' 66 + gem 'capybara', '~> 2.2'
  67 + gem 'launchy'
  68 + gem 'cucumber'
  69 + gem 'cucumber-rails', '~> 1.4.2', :require => false
  70 + gem 'database_cleaner', '~> 1.3'
  71 + gem 'selenium-webdriver'
52 end 72 end
53 73
54 # Requires custom dependencies 74 # Requires custom dependencies
55 eval(File.read('config/Gemfile'), binding) rescue nil 75 eval(File.read('config/Gemfile'), binding) rescue nil
56 76
  77 +vendor = Dir.glob('vendor/{,plugins/}*') - ['vendor/plugins']
  78 +vendor.each do |dir|
  79 + plugin = File.basename dir
  80 + version = if Dir.glob("#{dir}/*.gemspec").length > 0 then '> 0.0.0' else '0.0.0' end
  81 +
  82 + gem plugin, version, path: dir
  83 +end
  84 +
57 # include gemfiles from enabled plugins 85 # include gemfiles from enabled plugins
58 # plugins in baseplugins/ are not included on purpose. They should not have any 86 # plugins in baseplugins/ are not included on purpose. They should not have any
59 # dependencies. 87 # dependencies.
@@ -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 = ENV.fetch('VAGRANT_BOX', "debian-wheezy") 6 + config.vm.box = ENV.fetch('VAGRANT_BOX', "debian/jessie64")
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/admin_panel_controller.rb
@@ -12,7 +12,7 @@ class AdminPanelController < AdminController @@ -12,7 +12,7 @@ class AdminPanelController < AdminController
12 if params[:environment][:languages] 12 if params[:environment][:languages]
13 params[:environment][:languages] = params[:environment][:languages].map {|lang, value| lang if value=='true'}.compact 13 params[:environment][:languages] = params[:environment][:languages].map {|lang, value| lang if value=='true'}.compact
14 end 14 end
15 - if @environment.update_attributes(params[:environment]) 15 + if @environment.update(params[:environment])
16 session[:notice] = _('Environment settings updated') 16 session[:notice] = _('Environment settings updated')
17 redirect_to :action => 'index' 17 redirect_to :action => 'index'
18 end 18 end
@@ -54,7 +54,7 @@ class AdminPanelController < AdminController @@ -54,7 +54,7 @@ class AdminPanelController < AdminController
54 54
55 if request.post? 55 if request.post?
56 env = environment 56 env = environment
57 - folders = params[:folders].map{|fid| Folder.find(:first, :conditions => {:profile_id => env.portal_community, :id => fid})} if params[:folders] 57 + folders = env.portal_community.folders.where(id: params[:folders]).order(params[:folders].reverse.map{ |f| "id=#{f}" }) if params[:folders]
58 env.portal_folders = folders 58 env.portal_folders = folders
59 if env.save 59 if env.save
60 session[:notice] = _('Saved the portal folders') 60 session[:notice] = _('Saved the portal folders')
@@ -65,7 +65,7 @@ class AdminPanelController < AdminController @@ -65,7 +65,7 @@ class AdminPanelController < AdminController
65 65
66 def set_portal_news_amount 66 def set_portal_news_amount
67 if request.post? 67 if request.post?
68 - if @environment.update_attributes(params[:environment]) 68 + if @environment.update(params[:environment])
69 session[:notice] = _('Saved the number of news on folders') 69 session[:notice] = _('Saved the number of news on folders')
70 redirect_to :action => 'index' 70 redirect_to :action => 'index'
71 end 71 end
app/controllers/admin/categories_controller.rb
1 class CategoriesController < AdminController 1 class CategoriesController < AdminController
2 2
3 protect 'manage_environment_categories', :environment 3 protect 'manage_environment_categories', :environment
4 - 4 +
5 helper :categories 5 helper :categories
6 6
7 def index 7 def index
8 - @categories = environment.categories.find(:all, :conditions => "parent_id is null AND type is null")  
9 - @regions = environment.regions.find(:all, :conditions => {:parent_id => nil})  
10 - @product_categories = environment.product_categories.find(:all, :conditions => {:parent_id => nil}) 8 + @categories = environment.categories.where("parent_id is null AND type is null")
  9 + @regions = environment.regions.where(:parent_id => nil)
  10 + @product_categories = environment.product_categories.where(:parent_id => nil)
11 end 11 end
12 12
13 def get_children 13 def get_children
@@ -43,7 +43,7 @@ class CategoriesController &lt; AdminController @@ -43,7 +43,7 @@ class CategoriesController &lt; AdminController
43 begin 43 begin
44 @category = environment.categories.find(params[:id]) 44 @category = environment.categories.find(params[:id])
45 if request.post? 45 if request.post?
46 - @category.update_attributes!(params[:category]) 46 + @category.update!(params[:category])
47 @saved = true 47 @saved = true
48 session[:notice] = _("Category %s saved." % @category.name) 48 session[:notice] = _("Category %s saved." % @category.name)
49 redirect_to :action => 'index' 49 redirect_to :action => 'index'
app/controllers/admin/environment_role_manager_controller.rb
@@ -2,7 +2,7 @@ class EnvironmentRoleManagerController &lt; AdminController @@ -2,7 +2,7 @@ class EnvironmentRoleManagerController &lt; AdminController
2 protect 'manage_environment_roles', :environment 2 protect 'manage_environment_roles', :environment
3 3
4 def index 4 def index
5 - @admins = Person.find(:all, :conditions => ['role_assignments.resource_type = ?', 'Environment'], :include => :role_assignments ) 5 + @admins = Person.where('role_assignments.resource_type = ?', 'Environment').includes(:role_assignments)
6 end 6 end
7 7
8 def change_roles 8 def change_roles
app/controllers/admin/features_controller.rb
1 class FeaturesController < AdminController 1 class FeaturesController < AdminController
2 protect 'edit_environment_features', :environment 2 protect 'edit_environment_features', :environment
3 - 3 +
4 def index 4 def index
5 @features = Environment.available_features.sort_by{|k,v|v} 5 @features = Environment.available_features.sort_by{|k,v|v}
6 end 6 end
7 7
8 post_only :update 8 post_only :update
9 def update 9 def update
10 - if @environment.update_attributes(params[:environment]) 10 + if @environment.update(params[:environment])
11 session[:notice] = _('Features updated successfully.') 11 session[:notice] = _('Features updated successfully.')
12 redirect_to :action => 'index' 12 redirect_to :action => 'index'
13 else 13 else
@@ -53,7 +53,7 @@ class FeaturesController &lt; AdminController @@ -53,7 +53,7 @@ class FeaturesController &lt; AdminController
53 53
54 def search_members 54 def search_members
55 arg = params[:q].downcase 55 arg = params[:q].downcase
56 - result = environment.people.find(:all, :conditions => ['LOWER(name) LIKE ? OR identifier LIKE ?', "%#{arg}%", "%#{arg}%"]) 56 + result = environment.people.where('LOWER(name) LIKE ? OR identifier LIKE ?', "%#{arg}%", "%#{arg}%")
57 render :text => prepare_to_token_input(result).to_json 57 render :text => prepare_to_token_input(result).to_json
58 end 58 end
59 59
app/controllers/admin/licenses_controller.rb
@@ -23,7 +23,7 @@ class LicensesController &lt; AdminController @@ -23,7 +23,7 @@ class LicensesController &lt; AdminController
23 @license = environment.licenses.find(params[:license_id]) 23 @license = environment.licenses.find(params[:license_id])
24 if request.post? 24 if request.post?
25 begin 25 begin
26 - @license.update_attributes!(params[:license]) 26 + @license.update!(params[:license])
27 session[:notice] = _('License updated') 27 session[:notice] = _('License updated')
28 redirect_to :action => 'index' 28 redirect_to :action => 'index'
29 rescue 29 rescue
app/controllers/admin/plugins_controller.rb
@@ -8,7 +8,7 @@ class PluginsController &lt; AdminController @@ -8,7 +8,7 @@ class PluginsController &lt; AdminController
8 post_only :update 8 post_only :update
9 def update 9 def update
10 params[:environment][:enabled_plugins].delete('') 10 params[:environment][:enabled_plugins].delete('')
11 - if @environment.update_attributes(params[:environment]) 11 + if @environment.update(params[:environment])
12 session[:notice] = _('Plugins updated successfully.') 12 session[:notice] = _('Plugins updated successfully.')
13 else 13 else
14 session[:error] = _('Plugins were not updated successfully.') 14 session[:error] = _('Plugins were not updated successfully.')
app/controllers/admin/role_controller.rb
@@ -29,7 +29,7 @@ class RoleController &lt; AdminController @@ -29,7 +29,7 @@ class RoleController &lt; AdminController
29 29
30 def update 30 def update
31 @role = environment.roles.find(params[:id]) 31 @role = environment.roles.find(params[:id])
32 - if @role.update_attributes(params[:role]) 32 + if @role.update(params[:role])
33 redirect_to :action => 'show', :id => @role 33 redirect_to :action => 'show', :id => @role
34 else 34 else
35 session[:notice] = _('Failed to edit role') 35 session[:notice] = _('Failed to edit role')
app/controllers/admin/users_controller.rb
@@ -63,7 +63,7 @@ class UsersController &lt; AdminController @@ -63,7 +63,7 @@ class UsersController &lt; AdminController
63 respond_to do |format| 63 respond_to do |format|
64 format.html 64 format.html
65 format.xml do 65 format.xml do
66 - users = User.find(:all, :conditions => {:environment_id => environment.id}, :include => [:person]) 66 + users = User.where(:environment_id => environment.id).includes(:person)
67 send_data users.to_xml( 67 send_data users.to_xml(
68 :skip_types => true, 68 :skip_types => true,
69 :only => %w[email login created_at updated_at], 69 :only => %w[email login created_at updated_at],
app/controllers/application.rb
@@ -1 +0,0 @@ @@ -1 +0,0 @@
1 -require 'application_controller'  
app/controllers/application_controller.rb
@@ -8,7 +8,7 @@ class ApplicationController &lt; ActionController::Base @@ -8,7 +8,7 @@ class ApplicationController &lt; 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 10
11 - before_filter :login_from_cookie 11 + include AuthenticatedSystem
12 before_filter :require_login_for_environment, :if => :private_environment? 12 before_filter :require_login_for_environment, :if => :private_environment?
13 13
14 before_filter :verify_members_whitelist, :if => [:private_environment?, :user] 14 before_filter :verify_members_whitelist, :if => [:private_environment?, :user]
@@ -45,7 +45,7 @@ class ApplicationController &lt; ActionController::Base @@ -45,7 +45,7 @@ class ApplicationController &lt; ActionController::Base
45 include ApplicationHelper 45 include ApplicationHelper
46 layout :get_layout 46 layout :get_layout
47 def get_layout 47 def get_layout
48 - return nil if request.format == :js or request.xhr? 48 + return false if request.format == :js or request.xhr?
49 49
50 theme_layout = theme_option(:layout) 50 theme_layout = theme_option(:layout)
51 if theme_layout 51 if theme_layout
@@ -69,15 +69,12 @@ class ApplicationController &lt; ActionController::Base @@ -69,15 +69,12 @@ class ApplicationController &lt; ActionController::Base
69 helper :language 69 helper :language
70 70
71 include DesignHelper 71 include DesignHelper
72 -  
73 - # Be sure to include AuthenticationSystem in Application Controller instead  
74 - include AuthenticatedSystem  
75 include PermissionCheck 72 include PermissionCheck
76 73
77 before_filter :set_locale 74 before_filter :set_locale
78 def set_locale 75 def set_locale
79 FastGettext.available_locales = environment.available_locales 76 FastGettext.available_locales = environment.available_locales
80 - FastGettext.default_locale = environment.default_locale 77 + FastGettext.default_locale = environment.default_locale || 'en'
81 FastGettext.locale = (params[:lang] || session[:lang] || environment.default_locale || request.env['HTTP_ACCEPT_LANGUAGE'] || 'en') 78 FastGettext.locale = (params[:lang] || session[:lang] || environment.default_locale || request.env['HTTP_ACCEPT_LANGUAGE'] || 'en')
82 I18n.locale = FastGettext.locale.to_s.gsub '_', '-' 79 I18n.locale = FastGettext.locale.to_s.gsub '_', '-'
83 I18n.default_locale = FastGettext.default_locale.to_s.gsub '_', '-' 80 I18n.default_locale = FastGettext.default_locale.to_s.gsub '_', '-'
@@ -148,7 +145,7 @@ class ApplicationController &lt; ActionController::Base @@ -148,7 +145,7 @@ class ApplicationController &lt; ActionController::Base
148 # Check if the requested profile belongs to another domain 145 # Check if the requested profile belongs to another domain
149 if @profile && !params[:profile].blank? && params[:profile] != @profile.identifier 146 if @profile && !params[:profile].blank? && params[:profile] != @profile.identifier
150 @profile = @environment.profiles.find_by_identifier params[:profile] 147 @profile = @environment.profiles.find_by_identifier params[:profile]
151 - redirect_to params.merge(:host => @profile.default_hostname) 148 + redirect_to url_for(params.merge host: @profile.default_hostname)
152 end 149 end
153 end 150 end
154 end 151 end
@@ -163,7 +160,8 @@ class ApplicationController &lt; ActionController::Base @@ -163,7 +160,8 @@ class ApplicationController &lt; ActionController::Base
163 def render_not_found(path = nil) 160 def render_not_found(path = nil)
164 @no_design_blocks = true 161 @no_design_blocks = true
165 @path ||= request.path 162 @path ||= request.path
166 - render :template => 'shared/not_found.html.erb', :status => 404, :layout => get_layout 163 + # force html template even if the browser asked for a image
  164 + render template: 'shared/not_found', status: 404, layout: get_layout, formats: [:html]
167 end 165 end
168 alias :render_404 :render_not_found 166 alias :render_404 :render_not_found
169 167
@@ -171,7 +169,8 @@ class ApplicationController &lt; ActionController::Base @@ -171,7 +169,8 @@ class ApplicationController &lt; ActionController::Base
171 @no_design_blocks = true 169 @no_design_blocks = true
172 @message = message 170 @message = message
173 @title = title 171 @title = title
174 - render :template => 'shared/access_denied.html.erb', :status => 403 172 + # force html template even if the browser asked for a image
  173 + render template: 'shared/access_denied', status: 403, formats: [:html]
175 end 174 end
176 175
177 def load_category 176 def load_category
@@ -204,7 +203,7 @@ class ApplicationController &lt; ActionController::Base @@ -204,7 +203,7 @@ class ApplicationController &lt; ActionController::Base
204 def redirect_to_current_user 203 def redirect_to_current_user
205 if params[:profile] == '~' 204 if params[:profile] == '~'
206 if logged_in? 205 if logged_in?
207 - redirect_to params.merge(:profile => user.identifier) 206 + redirect_to url_for(params.merge profile: user.identifier)
208 else 207 else
209 render_not_found 208 render_not_found
210 end 209 end
app/controllers/box_organizer_controller.rb
@@ -84,9 +84,9 @@ class BoxOrganizerController &lt; ApplicationController @@ -84,9 +84,9 @@ class BoxOrganizerController &lt; ApplicationController
84 if request.xhr? and params[:query] 84 if request.xhr? and params[:query]
85 search = params[:query] 85 search = params[:query]
86 path_list = if boxes_holder.is_a?(Environment) && boxes_holder.enabled?('use_portal_community') && boxes_holder.portal_community 86 path_list = if boxes_holder.is_a?(Environment) && boxes_holder.enabled?('use_portal_community') && boxes_holder.portal_community
87 - boxes_holder.portal_community.articles.find(:all, :conditions=>"name ILIKE '%#{search}%' or path ILIKE '%#{search}%'", :limit=>20).map { |content| "/{portal}/"+content.path } 87 + boxes_holder.portal_community.articles.where("name ILIKE ? OR path ILIKE ?", "%#{search}%", "%#{search}%").limit(20).map { |content| "/{portal}/"+content.path }
88 elsif boxes_holder.is_a?(Profile) 88 elsif boxes_holder.is_a?(Profile)
89 - boxes_holder.articles.find(:all, :conditions=>"name ILIKE '%#{search}%' or path ILIKE '%#{search}%'", :limit=>20).map { |content| "/{profile}/"+content.path } 89 + boxes_holder.articles.where("name ILIKE ? OR path ILIKE ?", "%#{search}%", "%#{search}%").limit(20).map { |content| "/{profile}/"+content.path }
90 else 90 else
91 [] 91 []
92 end 92 end
@@ -98,7 +98,7 @@ class BoxOrganizerController &lt; ApplicationController @@ -98,7 +98,7 @@ class BoxOrganizerController &lt; ApplicationController
98 98
99 def save 99 def save
100 @block = boxes_holder.blocks.find(params[:id]) 100 @block = boxes_holder.blocks.find(params[:id])
101 - @block.update_attributes(params[:block]) 101 + @block.update(params[:block])
102 redirect_to :action => 'index' 102 redirect_to :action => 'index'
103 end 103 end
104 104
app/controllers/my_profile/cms_controller.rb
@@ -6,7 +6,7 @@ class CmsController &lt; MyProfileController @@ -6,7 +6,7 @@ class CmsController &lt; MyProfileController
6 6
7 def search_tags 7 def search_tags
8 arg = params[:term].downcase 8 arg = params[:term].downcase
9 - result = ActsAsTaggableOn::Tag.where('name ILIKE ?', "%#{arg}%").limit(10) 9 + result = Tag.where('name ILIKE ?', "%#{arg}%").limit(10)
10 render :text => prepare_to_token_input_by_label(result).to_json, :content_type => 'application/json' 10 render :text => prepare_to_token_input_by_label(result).to_json, :content_type => 'application/json'
11 end 11 end
12 12
@@ -50,16 +50,9 @@ class CmsController &lt; MyProfileController @@ -50,16 +50,9 @@ class CmsController &lt; MyProfileController
50 50
51 def view 51 def view
52 @article = profile.articles.find(params[:id]) 52 @article = profile.articles.find(params[:id])
53 - conditions = []  
54 - if @article.has_posts?  
55 - conditions = ['type != ?', 'RssFeed']  
56 - end  
57 -  
58 - @articles = @article.children.reorder("case when type = 'Folder' then 0 when type ='Blog' then 1 else 2 end, updated_at DESC, name").paginate(  
59 - :conditions => conditions,  
60 - :per_page => per_page,  
61 - :page => params[:npage]  
62 - ) 53 + @articles = @article.children.reorder("case when type = 'Folder' then 0 when type ='Blog' then 1 else 2 end, updated_at DESC, name")
  54 + @articles = @articles.where "type <> ?", 'RssFeed' if @article.has_posts?
  55 + @articles = @articles.paginate per_page: per_page, page: params[:npage]
63 end 56 end
64 57
65 def index 58 def index
@@ -99,7 +92,7 @@ class CmsController &lt; MyProfileController @@ -99,7 +92,7 @@ class CmsController &lt; MyProfileController
99 @article.image.save! 92 @article.image.save!
100 end 93 end
101 @article.last_changed_by = user 94 @article.last_changed_by = user
102 - if @article.update_attributes(params[:article]) 95 + if @article.update(params[:article])
103 if !continue 96 if !continue
104 if @article.content_type.nil? || @article.image? 97 if @article.content_type.nil? || @article.image?
105 success_redirect 98 success_redirect
@@ -230,7 +223,7 @@ class CmsController &lt; MyProfileController @@ -230,7 +223,7 @@ class CmsController &lt; MyProfileController
230 else 223 else
231 session[:notice] = _('File(s) successfully uploaded') 224 session[:notice] = _('File(s) successfully uploaded')
232 if @back_to 225 if @back_to
233 - redirect_to @back_to 226 + redirect_to url_for(@back_to)
234 elsif @parent 227 elsif @parent
235 redirect_to :action => 'view', :id => @parent.id 228 redirect_to :action => 'view', :id => @parent.id
236 else 229 else
@@ -381,7 +374,7 @@ class CmsController &lt; MyProfileController @@ -381,7 +374,7 @@ class CmsController &lt; MyProfileController
381 374
382 def search_article_privacy_exceptions 375 def search_article_privacy_exceptions
383 arg = params[:q].downcase 376 arg = params[:q].downcase
384 - result = profile.members.find(:all, :conditions => ['LOWER(name) LIKE ?', "%#{arg}%"]) 377 + result = profile.members.where('LOWER(name) LIKE ?', "%#{arg}%")
385 render :text => prepare_to_token_input(result).to_json 378 render :text => prepare_to_token_input(result).to_json
386 end 379 end
387 380
app/controllers/my_profile/enterprise_validation_controller.rb
@@ -54,7 +54,7 @@ class EnterpriseValidationController &lt; MyProfileController @@ -54,7 +54,7 @@ class EnterpriseValidationController &lt; MyProfileController
54 def edit_validation_info 54 def edit_validation_info
55 @info = profile.validation_info 55 @info = profile.validation_info
56 if request.post? 56 if request.post?
57 - if @info.update_attributes(params[:info]) 57 + if @info.update(params[:info])
58 redirect_to :action => 'index' 58 redirect_to :action => 'index'
59 end 59 end
60 end 60 end
app/controllers/my_profile/manage_products_controller.rb
@@ -69,7 +69,7 @@ class ManageProductsController &lt; ApplicationController @@ -69,7 +69,7 @@ class ManageProductsController &lt; ApplicationController
69 field = params[:field] 69 field = params[:field]
70 if request.post? 70 if request.post?
71 begin 71 begin
72 - @product.update_attributes!(params[:product]) 72 + @product.update!(params[:product])
73 render :partial => "display_#{field}", :locals => {:product => @product} 73 render :partial => "display_#{field}", :locals => {:product => @product}
74 rescue Exception => e 74 rescue Exception => e
75 render :partial => "edit_#{field}", :locals => {:product => @product, :errors => true} 75 render :partial => "edit_#{field}", :locals => {:product => @product, :errors => true}
@@ -86,7 +86,7 @@ class ManageProductsController &lt; ApplicationController @@ -86,7 +86,7 @@ class ManageProductsController &lt; ApplicationController
86 @edit = true 86 @edit = true
87 @level = @category.level 87 @level = @category.level
88 if request.post? 88 if request.post?
89 - if @product.update_attributes({:product_category_id => params[:selected_category_id]}, :without_protection => true) 89 + if @product.update({:product_category_id => params[:selected_category_id]}, :without_protection => true)
90 render :partial => 'shared/redirect_via_javascript', 90 render :partial => 'shared/redirect_via_javascript',
91 :locals => { :url => url_for(:controller => 'manage_products', :action => 'show', :id => @product) } 91 :locals => { :url => url_for(:controller => 'manage_products', :action => 'show', :id => @product) }
92 else 92 else
@@ -115,7 +115,7 @@ class ManageProductsController &lt; ApplicationController @@ -115,7 +115,7 @@ class ManageProductsController &lt; ApplicationController
115 @categories = ProductCategory.top_level_for(environment) 115 @categories = ProductCategory.top_level_for(environment)
116 @level = 0 116 @level = 0
117 if request.post? 117 if request.post?
118 - if @input.update_attributes(:product_category_id => params[:selected_category_id]) 118 + if @input.update(:product_category_id => params[:selected_category_id])
119 @inputs = @product.inputs 119 @inputs = @product.inputs
120 render :partial => 'display_inputs' 120 render :partial => 'display_inputs'
121 else 121 else
@@ -172,7 +172,7 @@ class ManageProductsController &lt; ApplicationController @@ -172,7 +172,7 @@ class ManageProductsController &lt; ApplicationController
172 @input = @profile.inputs.find_by_id(params[:id]) 172 @input = @profile.inputs.find_by_id(params[:id])
173 if @input 173 if @input
174 if request.post? 174 if request.post?
175 - if @input.update_attributes(params[:input]) 175 + if @input.update(params[:input])
176 render :partial => 'display_input', :locals => {:input => @input} 176 render :partial => 'display_input', :locals => {:input => @input}
177 else 177 else
178 render :partial => 'edit_input' 178 render :partial => 'edit_input'
app/controllers/my_profile/maps_controller.rb
@@ -15,7 +15,7 @@ class MapsController &lt; MyProfileController @@ -15,7 +15,7 @@ class MapsController &lt; MyProfileController
15 end 15 end
16 16
17 Profile.transaction do 17 Profile.transaction do
18 - if profile.update_attributes!(params[:profile_data]) 18 + if profile.update!(params[:profile_data])
19 BlockSweeper.expire_blocks profile.blocks.select{ |b| b.class == LocationBlock } 19 BlockSweeper.expire_blocks profile.blocks.select{ |b| b.class == LocationBlock }
20 session[:notice] = _('Address was updated successfully!') 20 session[:notice] = _('Address was updated successfully!')
21 redirect_to :action => 'edit_location' 21 redirect_to :action => 'edit_location'
app/controllers/my_profile/profile_editor_controller.rb
@@ -27,7 +27,7 @@ class ProfileEditorController &lt; MyProfileController @@ -27,7 +27,7 @@ class ProfileEditorController &lt; MyProfileController
27 Image.transaction do 27 Image.transaction do
28 begin 28 begin
29 @plugins.dispatch(:profile_editor_transaction_extras) 29 @plugins.dispatch(:profile_editor_transaction_extras)
30 - @profile_data.update_attributes!(params[:profile_data]) 30 + @profile_data.update!(params[:profile_data])
31 redirect_to :action => 'index', :profile => profile.identifier 31 redirect_to :action => 'index', :profile => profile.identifier
32 rescue Exception => ex 32 rescue Exception => ex
33 profile.identifier = params[:profile] if profile.identifier.blank? 33 profile.identifier = params[:profile] if profile.identifier.blank?
@@ -83,7 +83,7 @@ class ProfileEditorController &lt; MyProfileController @@ -83,7 +83,7 @@ class ProfileEditorController &lt; MyProfileController
83 if @profile.destroy 83 if @profile.destroy
84 session[:notice] = _('The profile was deleted.') 84 session[:notice] = _('The profile was deleted.')
85 if(params[:return_to]) 85 if(params[:return_to])
86 - redirect_to params[:return_to] 86 + redirect_to url_for(params[:return_to])
87 else 87 else
88 redirect_to :controller => 'home' 88 redirect_to :controller => 'home'
89 end 89 end
@@ -97,7 +97,7 @@ class ProfileEditorController &lt; MyProfileController @@ -97,7 +97,7 @@ class ProfileEditorController &lt; MyProfileController
97 @welcome_page = profile.welcome_page || TinyMceArticle.new(:name => 'Welcome Page', :profile => profile, :published => false) 97 @welcome_page = profile.welcome_page || TinyMceArticle.new(:name => 'Welcome Page', :profile => profile, :published => false)
98 if request.post? 98 if request.post?
99 begin 99 begin
100 - @welcome_page.update_attributes!(params[:welcome_page]) 100 + @welcome_page.update!(params[:welcome_page])
101 profile.welcome_page = @welcome_page 101 profile.welcome_page = @welcome_page
102 profile.save! 102 profile.save!
103 session[:notice] = _('Welcome page saved successfully.') 103 session[:notice] = _('Welcome page saved successfully.')
app/controllers/my_profile/profile_members_controller.rb
@@ -47,7 +47,7 @@ class ProfileMembersController &lt; MyProfileController @@ -47,7 +47,7 @@ class ProfileMembersController &lt; MyProfileController
47 end 47 end
48 48
49 def remove_role 49 def remove_role
50 - @association = RoleAssignment.find(:all, :conditions => {:id => params[:id], :target_id => profile.id}) 50 + @association = RoleAssignment.where(:id => params[:id], :target_id => profile.id)
51 if @association.destroy 51 if @association.destroy
52 session[:notice] = 'Member succefully unassociated' 52 session[:notice] = 'Member succefully unassociated'
53 else 53 else
@@ -120,7 +120,7 @@ class ProfileMembersController &lt; MyProfileController @@ -120,7 +120,7 @@ class ProfileMembersController &lt; MyProfileController
120 120
121 def search_user 121 def search_user
122 role = Role.find(params[:role]) 122 role = Role.find(params[:role])
123 - render :text => environment.people.find(:all, :conditions => ['LOWER(name) LIKE ? OR LOWER(identifier) LIKE ?', "%#{params['q_'+role.key]}%", "%#{params['q_'+role.key]}%"]). 123 + render :text => environment.people.where('LOWER(name) LIKE ? OR LOWER(identifier) LIKE ?', "%#{params['q_'+role.key]}%", "%#{params['q_'+role.key]}%").
124 select { |person| !profile.members_by_role(role).include?(person) }. 124 select { |person| !profile.members_by_role(role).include?(person) }.
125 map {|person| {:id => person.id, :name => person.name} }. 125 map {|person| {:id => person.id, :name => person.name} }.
126 to_json 126 to_json
app/controllers/my_profile/profile_roles_controller.rb
@@ -58,7 +58,7 @@ class ProfileRolesController &lt; MyProfileController @@ -58,7 +58,7 @@ class ProfileRolesController &lt; MyProfileController
58 58
59 def update 59 def update
60 @role = environment.roles.find(params[:id]) 60 @role = environment.roles.find(params[:id])
61 - if @role.update_attributes(params[:role]) 61 + if @role.update(params[:role])
62 redirect_to :action => 'show', :id => @role 62 redirect_to :action => 'show', :id => @role
63 else 63 else
64 session[:notice] = _('Failed to edit role') 64 session[:notice] = _('Failed to edit role')
app/controllers/my_profile/tasks_controller.rb
@@ -48,7 +48,7 @@ class TasksController &lt; MyProfileController @@ -48,7 +48,7 @@ class TasksController &lt; MyProfileController
48 if request.post? && VALID_DECISIONS.include?(decision) && id && decision != 'skip' 48 if request.post? && VALID_DECISIONS.include?(decision) && id && decision != 'skip'
49 task = profile.find_in_all_tasks(id) 49 task = profile.find_in_all_tasks(id)
50 begin 50 begin
51 - task.update_attributes(value[:task]) 51 + task.update(value[:task])
52 task.send(decision, current_person) 52 task.send(decision, current_person)
53 rescue Exception => ex 53 rescue Exception => ex
54 message = "#{task.title} (#{task.requestor ? task.requestor.name : task.author_name})" 54 message = "#{task.title} (#{task.requestor ? task.requestor.name : task.author_name})"
@@ -86,7 +86,7 @@ class TasksController &lt; MyProfileController @@ -86,7 +86,7 @@ class TasksController &lt; MyProfileController
86 end 86 end
87 87
88 def ticket_details 88 def ticket_details
89 - @ticket = Ticket.find(:first, :conditions => ['(requestor_id = ? or target_id = ?) and id = ?', profile.id, profile.id, params[:id]]) 89 + @ticket = Ticket.where('(requestor_id = ? or target_id = ?) and id = ?', profile.id, profile.id, params[:id]).first
90 end 90 end
91 91
92 end 92 end
app/controllers/public/account_controller.rb
@@ -117,9 +117,9 @@ class AccountController &lt; ApplicationController @@ -117,9 +117,9 @@ class AccountController &lt; ApplicationController
117 @user.signup! 117 @user.signup!
118 owner_role = Role.find_by_name('owner') 118 owner_role = Role.find_by_name('owner')
119 @user.person.affiliate(@user.person, [owner_role]) if owner_role 119 @user.person.affiliate(@user.person, [owner_role]) if owner_role
120 - invitation = Task.find_by_code(@invitation_code) 120 + invitation = Task.from_code(@invitation_code).first
121 if invitation 121 if invitation
122 - invitation.update_attributes!({:friend => @user.person}) 122 + invitation.update! friend: @user.person
123 invitation.finish 123 invitation.finish
124 end 124 end
125 125
@@ -209,7 +209,7 @@ class AccountController &lt; ApplicationController @@ -209,7 +209,7 @@ class AccountController &lt; ApplicationController
209 # 209 #
210 # Posts back. 210 # Posts back.
211 def new_password 211 def new_password
212 - @change_password = ChangePassword.find_by_code(params[:code]) 212 + @change_password = ChangePassword.from_code(params[:code]).first
213 213
214 unless @change_password 214 unless @change_password
215 render :action => 'invalid_change_password_code', :status => 403 215 render :action => 'invalid_change_password_code', :status => 403
@@ -218,7 +218,7 @@ class AccountController &lt; ApplicationController @@ -218,7 +218,7 @@ class AccountController &lt; ApplicationController
218 218
219 if request.post? 219 if request.post?
220 begin 220 begin
221 - @change_password.update_attributes!(params[:change_password]) 221 + @change_password.update!(params[:change_password])
222 @change_password.finish 222 @change_password.finish
223 render :action => 'new_password_ok' 223 render :action => 'new_password_ok'
224 rescue ActiveRecord::RecordInvalid => e 224 rescue ActiveRecord::RecordInvalid => e
@@ -402,7 +402,7 @@ class AccountController &lt; ApplicationController @@ -402,7 +402,7 @@ class AccountController &lt; ApplicationController
402 end 402 end
403 403
404 def load_enterprise_activation 404 def load_enterprise_activation
405 - @enterprise_activation ||= EnterpriseActivation.find_by_code(params[:enterprise_code]) 405 + @enterprise_activation ||= EnterpriseActivation.from_code(params[:enterprise_code]).first
406 end 406 end
407 407
408 def load_enterprise 408 def load_enterprise
@@ -426,7 +426,7 @@ class AccountController &lt; ApplicationController @@ -426,7 +426,7 @@ class AccountController &lt; ApplicationController
426 426
427 def go_to_initial_page 427 def go_to_initial_page
428 if params[:return_to] 428 if params[:return_to]
429 - redirect_to params[:return_to] 429 + redirect_to url_for(params[:return_to])
430 elsif environment.enabled?('allow_change_of_redirection_after_login') 430 elsif environment.enabled?('allow_change_of_redirection_after_login')
431 check_redirection_options(user, user.preferred_login_redirection, user.admin_url) 431 check_redirection_options(user, user.preferred_login_redirection, user.admin_url)
432 else 432 else
@@ -487,7 +487,7 @@ class AccountController &lt; ApplicationController @@ -487,7 +487,7 @@ class AccountController &lt; ApplicationController
487 def check_redirection 487 def check_redirection
488 unless params[:redirection].blank? 488 unless params[:redirection].blank?
489 session[:return_to] = @user.return_to 489 session[:return_to] = @user.return_to
490 - @user.update_attributes(:return_to => nil) 490 + @user.update(:return_to => nil)
491 end 491 end
492 end 492 end
493 493
app/controllers/public/chat_controller.rb
@@ -67,7 +67,7 @@ class ChatController &lt; PublicController @@ -67,7 +67,7 @@ class ChatController &lt; PublicController
67 67
68 def update_presence_status 68 def update_presence_status
69 if request.xhr? 69 if request.xhr?
70 - current_user.update_attributes({:chat_status_at => DateTime.now}.merge(params[:status] || {})) 70 + current_user.update({:chat_status_at => DateTime.now}.merge(params[:status] || {}))
71 end 71 end
72 render :nothing => true 72 render :nothing => true
73 end 73 end
app/controllers/public/comment_controller.rb
@@ -78,7 +78,7 @@ class CommentController &lt; ApplicationController @@ -78,7 +78,7 @@ class CommentController &lt; ApplicationController
78 respond_to do |format| 78 respond_to do |format|
79 format.js do 79 format.js do
80 comment_to_render = @comment.comment_root 80 comment_to_render = @comment.comment_root
81 - render :json => { 81 + render :json => {
82 :render_target => comment_to_render.anchor, 82 :render_target => comment_to_render.anchor,
83 :html => render_to_string(:partial => 'comment', :locals => {:comment => comment_to_render, :display_link => true}), 83 :html => render_to_string(:partial => 'comment', :locals => {:comment => comment_to_render, :display_link => true}),
84 :msg => _('Comment successfully created.') 84 :msg => _('Comment successfully created.')
@@ -114,7 +114,7 @@ class CommentController &lt; ApplicationController @@ -114,7 +114,7 @@ class CommentController &lt; ApplicationController
114 end 114 end
115 115
116 def update 116 def update
117 - if @comment.update_attributes(params[:comment]) 117 + if @comment.update(params[:comment])
118 @plugins.dispatch(:process_extra_comment_params, [@comment,params]) 118 @plugins.dispatch(:process_extra_comment_params, [@comment,params])
119 119
120 respond_to do |format| 120 respond_to do |format|
app/controllers/public/enterprise_registration_controller.rb
@@ -4,7 +4,7 @@ class EnterpriseRegistrationController &lt; ApplicationController @@ -4,7 +4,7 @@ class EnterpriseRegistrationController &lt; ApplicationController
4 before_filter :login_required 4 before_filter :login_required
5 5
6 # Just go to the first step. 6 # Just go to the first step.
7 - # 7 + #
8 # FIXME: shouldn't this action present some sort of welcome message and point 8 # FIXME: shouldn't this action present some sort of welcome message and point
9 # to the first step explicitly? 9 # to the first step explicitly?
10 def index 10 def index
@@ -15,7 +15,7 @@ class EnterpriseRegistrationController &lt; ApplicationController @@ -15,7 +15,7 @@ class EnterpriseRegistrationController &lt; ApplicationController
15 @create_enterprise.target = Profile.find(params[:create_enterprise][:target_id]) 15 @create_enterprise.target = Profile.find(params[:create_enterprise][:target_id])
16 end 16 end
17 elsif @validation == :admin || @validation == :none 17 elsif @validation == :admin || @validation == :none
18 - @create_enterprise.target = environment 18 + @create_enterprise.target = environment
19 end 19 end
20 @create_enterprise.requestor = user 20 @create_enterprise.requestor = user
21 the_action = 21 the_action =
@@ -40,7 +40,7 @@ class EnterpriseRegistrationController &lt; ApplicationController @@ -40,7 +40,7 @@ class EnterpriseRegistrationController &lt; ApplicationController
40 40
41 protected 41 protected
42 42
43 - # Fill in the form and select your Region. 43 + # Fill in the form and select your Region.
44 # 44 #
45 # Posts back. 45 # Posts back.
46 def basic_information 46 def basic_information
app/controllers/public/profile_controller.rb
@@ -37,7 +37,7 @@ class ProfileController &lt; PublicController @@ -37,7 +37,7 @@ class ProfileController &lt; PublicController
37 37
38 def tag_feed 38 def tag_feed
39 @tag = params[:id] 39 @tag = params[:id]
40 - tagged = profile.articles.paginate(:per_page => 20, :page => 1, :order => 'published_at DESC', :include => :tags, :conditions => ['tags.name LIKE ?', @tag]) 40 + tagged = profile.articles.paginate(:per_page => 20, :page => 1).order('published_at DESC').joins(:tags).where('tags.name LIKE ?', @tag)
41 feed_writer = FeedWriter.new 41 feed_writer = FeedWriter.new
42 data = feed_writer.write( 42 data = feed_writer.write(
43 tagged, 43 tagged,
@@ -205,7 +205,7 @@ class ProfileController &lt; PublicController @@ -205,7 +205,7 @@ class ProfileController &lt; PublicController
205 205
206 def more_comments 206 def more_comments
207 profile_filter = @profile.person? ? {:user_id => @profile} : {:target_id => @profile} 207 profile_filter = @profile.person? ? {:user_id => @profile} : {:target_id => @profile}
208 - activity = ActionTracker::Record.find(:first, :conditions => {:id => params[:activity]}.merge(profile_filter)) 208 + activity = ActionTracker::Record.where({:id => params[:activity]}.merge profile_filter).first
209 comments_count = activity.comments.count 209 comments_count = activity.comments.count
210 comment_page = (params[:comment_page] || 1).to_i 210 comment_page = (params[:comment_page] || 1).to_i
211 comments_per_page = 5 211 comments_per_page = 5
@@ -225,7 +225,7 @@ class ProfileController &lt; PublicController @@ -225,7 +225,7 @@ class ProfileController &lt; PublicController
225 end 225 end
226 226
227 def more_replies 227 def more_replies
228 - activity = Scrap.find(:first, :conditions => {:id => params[:activity], :receiver_id => @profile, :scrap_id => nil}) 228 + activity = Scrap.where(:id => params[:activity], :receiver_id => @profile, :scrap_id => nil).first
229 comments_count = activity.replies.count 229 comments_count = activity.replies.count
230 comment_page = (params[:comment_page] || 1).to_i 230 comment_page = (params[:comment_page] || 1).to_i
231 comments_per_page = 5 231 comments_per_page = 5
@@ -272,7 +272,7 @@ class ProfileController &lt; PublicController @@ -272,7 +272,7 @@ class ProfileController &lt; PublicController
272 def remove_notification 272 def remove_notification
273 begin 273 begin
274 raise if !can_edit_profile 274 raise if !can_edit_profile
275 - notification = ActionTrackerNotification.find(:first, :conditions => {:profile_id => profile.id, :action_tracker_id => params[:activity_id]}) 275 + notification = ActionTrackerNotification.where(profile_id: profile.id, action_tracker_id: params[:activity_id]).first
276 notification.destroy 276 notification.destroy
277 render :text => _('Notification successfully removed.') 277 render :text => _('Notification successfully removed.')
278 rescue 278 rescue
app/controllers/public/search_controller.rb
@@ -14,7 +14,7 @@ class SearchController &lt; PublicController @@ -14,7 +14,7 @@ class SearchController &lt; PublicController
14 # Backwards compatibility with old URLs 14 # Backwards compatibility with old URLs
15 def redirect_asset_param 15 def redirect_asset_param
16 return unless params.has_key?(:asset) 16 return unless params.has_key?(:asset)
17 - redirect_to params.merge(:action => params.delete(:asset)) 17 + redirect_to url_for(params.merge action: params.delete(:asset))
18 end 18 end
19 19
20 no_design_blocks 20 no_design_blocks
@@ -62,12 +62,12 @@ class SearchController &lt; PublicController @@ -62,12 +62,12 @@ class SearchController &lt; PublicController
62 end 62 end
63 63
64 def articles 64 def articles
65 - @scope = @environment.articles.public 65 + @scope = @environment.articles.is_public
66 full_text_search 66 full_text_search
67 end 67 end
68 68
69 def contents 69 def contents
70 - redirect_to params.merge(:action => :articles) 70 + redirect_to url_for(params.merge action: :articles)
71 end 71 end
72 72
73 def people 73 def people
@@ -122,7 +122,7 @@ class SearchController &lt; PublicController @@ -122,7 +122,7 @@ class SearchController &lt; PublicController
122 # keep old URLs workings 122 # keep old URLs workings
123 def assets 123 def assets
124 params[:action] = params[:asset].is_a?(Array) ? :index : params.delete(:asset) 124 params[:action] = params[:asset].is_a?(Array) ? :index : params.delete(:asset)
125 - redirect_to params 125 + redirect_to url_for(params)
126 end 126 end
127 127
128 def tags 128 def tags
app/helpers/application_helper.rb
@@ -8,6 +8,10 @@ module ApplicationHelper @@ -8,6 +8,10 @@ module ApplicationHelper
8 8
9 include PermissionNameHelper 9 include PermissionNameHelper
10 10
  11 + include UrlHelper
  12 +
  13 + include PartialsHelper
  14 +
11 include ModalHelper 15 include ModalHelper
12 16
13 include BoxesHelper 17 include BoxesHelper
@@ -281,36 +285,6 @@ module ApplicationHelper @@ -281,36 +285,6 @@ module ApplicationHelper
281 concat(content_tag('div', capture(&block).to_s + tag('br', :style => 'clear: left;'), options)) 285 concat(content_tag('div', capture(&block).to_s + tag('br', :style => 'clear: left;'), options))
282 end 286 end
283 287
284 -  
285 - def partial_for_class_in_view_path(klass, view_path, prefix = nil, suffix = nil)  
286 - return nil if klass.nil?  
287 - name = [prefix, klass.name.underscore, suffix].compact.map(&:to_s).join('_')  
288 -  
289 - search_name = String.new(name)  
290 - if search_name.include?("/")  
291 - search_name.gsub!(/(\/)([^\/]*)$/,'\1_\2')  
292 - name = File.join(params[:controller], name) if defined?(params) && params[:controller]  
293 - else  
294 - search_name = "_" + search_name  
295 - end  
296 -  
297 - path = defined?(params) && params[:controller] ? File.join(view_path, params[:controller], search_name + '.html.erb') : File.join(view_path, search_name + '.html.erb')  
298 - return name if File.exists?(File.join(path))  
299 -  
300 - partial_for_class_in_view_path(klass.superclass, view_path, prefix, suffix)  
301 - end  
302 -  
303 - def partial_for_class(klass, prefix=nil, suffix=nil)  
304 - raise ArgumentError, 'No partial for object. Is there a partial for any class in the inheritance hierarchy?' if klass.nil?  
305 - name = klass.name.underscore  
306 - controller.view_paths.each do |view_path|  
307 - partial = partial_for_class_in_view_path(klass, view_path, prefix, suffix)  
308 - return partial if partial  
309 - end  
310 -  
311 - raise ArgumentError, 'No partial for object. Is there a partial for any class in the inheritance hierarchy?'  
312 - end  
313 -  
314 def render_profile_actions klass 288 def render_profile_actions klass
315 name = klass.to_s.underscore 289 name = klass.to_s.underscore
316 begin 290 begin
@@ -907,8 +881,14 @@ module ApplicationHelper @@ -907,8 +881,14 @@ module ApplicationHelper
907 end 881 end
908 alias :top_url :base_url 882 alias :top_url :base_url
909 883
  884 + class View < ActionView::Base
  885 + def url_for *args
  886 + self.controller.url_for *args
  887 + end
  888 + end
  889 +
910 def helper_for_article(article) 890 def helper_for_article(article)
911 - article_helper = ActionView::Base.new 891 + article_helper = View.new
912 article_helper.controller = controller 892 article_helper.controller = controller
913 article_helper.extend ArticleHelper 893 article_helper.extend ArticleHelper
914 article_helper.extend Rails.application.routes.url_helpers 894 article_helper.extend Rails.application.routes.url_helpers
app/helpers/block_helper.rb
@@ -19,7 +19,7 @@ module BlockHelper @@ -19,7 +19,7 @@ module BlockHelper
19 content_tag('span', _('Title')) + 19 content_tag('span', _('Title')) +
20 text_field_tag('block[images][][title]', image[:title], :class => 'highlight-title', :size => 45) 20 text_field_tag('block[images][][title]', image[:title], :class => 'highlight-title', :size => 45)
21 }</label></td> 21 }</label></td>
22 - <td>#{button_without_text(:delete, _('Remove'), '#', class: 'delete-highlight', :confirm=>_('Are you sure you want to remove this highlight'))}</td> 22 + <td>#{button_without_text(:delete, _('Remove'), '#', class: 'delete-highlight', data: {confirm: _('Are you sure you want to remove this highlight')})}</td>
23 </tr> 23 </tr>
24 " 24 "
25 end 25 end
app/helpers/boxes_helper.rb
@@ -236,7 +236,7 @@ module BoxesHelper @@ -236,7 +236,7 @@ module BoxesHelper
236 end 236 end
237 237
238 if movable?(block) && !block.main? 238 if movable?(block) && !block.main?
239 - buttons << icon_button(:delete, _('Remove block'), { :action => 'remove', :id => block.id }, { :method => 'post', :confirm => _('Are you sure you want to remove this block?')}) 239 + buttons << icon_button(:delete, _('Remove block'), { action: 'remove', id: block.id }, method: 'post', data: {confirm: _('Are you sure you want to remove this block?')})
240 buttons << icon_button(:clone, _('Clone'), { :action => 'clone_block', :id => block.id }, { :method => 'post' }) 240 buttons << icon_button(:clone, _('Clone'), { :action => 'clone_block', :id => block.id }, { :method => 'post' })
241 end 241 end
242 242
app/helpers/cms_helper.rb
@@ -34,7 +34,7 @@ module CmsHelper @@ -34,7 +34,7 @@ module CmsHelper
34 end 34 end
35 35
36 def display_delete_button(article) 36 def display_delete_button(article)
37 - expirable_button article, :delete, _('Delete'), { :action => 'destroy', :id => article.id }, :method => :post, :confirm => delete_article_message(article) 37 + expirable_button article, :delete, _('Delete'), { :action => 'destroy', :id => article.id }, :method => :post, 'data-confirm' => delete_article_message(article)
38 end 38 end
39 39
40 def expirable_button(content, action, title, url, options = {}) 40 def expirable_button(content, action, title, url, options = {})
@@ -42,7 +42,7 @@ module CmsHelper @@ -42,7 +42,7 @@ module CmsHelper
42 if reason.present? 42 if reason.present?
43 options[:class] = (options[:class] || '') + ' disabled' 43 options[:class] = (options[:class] || '') + ' disabled'
44 options[:disabled] = 'disabled' 44 options[:disabled] = 'disabled'
45 - options.delete(:confirm) 45 + options.delete('data-confirm')
46 options.delete(:method) 46 options.delete(:method)
47 title = reason 47 title = reason
48 end 48 end
app/helpers/events_helper.rb
@@ -24,7 +24,7 @@ module EventsHelper @@ -24,7 +24,7 @@ module EventsHelper
24 end 24 end
25 25
26 def populate_calendar(selected_date, events) 26 def populate_calendar(selected_date, events)
27 - events.reject! {|event| !event.display_to?(user)} 27 + events = events.reject{ |event| !event.display_to? user }
28 calendar = Event.date_range(selected_date.year, selected_date.month).map do |date| 28 calendar = Event.date_range(selected_date.year, selected_date.month).map do |date|
29 [ 29 [
30 # the day itself 30 # the day itself
app/helpers/folder_helper.rb
@@ -5,13 +5,11 @@ module FolderHelper @@ -5,13 +5,11 @@ module FolderHelper
5 def list_contents(configure={}) 5 def list_contents(configure={})
6 configure[:recursive] ||= false 6 configure[:recursive] ||= false
7 configure[:list_type] ||= :folder 7 configure[:list_type] ||= :folder
8 - if !configure[:contents].blank?  
9 - configure[:contents] = configure[:contents].paginate(  
10 - :order => "name ASC",  
11 - :per_page => 30,  
12 - :page => params[:npage]  
13 - )  
14 - 8 + contents = configure[:contents]
  9 + contents = contents.order('name ASC') unless contents.is_a? Array
  10 + contents = contents.paginate per_page: 30, page: params[:npage]
  11 + configure[:contents] = contents
  12 + if contents.present?
15 render :file => 'shared/content_list', :locals => configure 13 render :file => 'shared/content_list', :locals => configure
16 else 14 else
17 content_tag('em', _('(empty folder)')) 15 content_tag('em', _('(empty folder)'))
app/helpers/partials_helper.rb 0 → 100644
@@ -0,0 +1,43 @@ @@ -0,0 +1,43 @@
  1 +module PartialsHelper
  2 +
  3 + def partial_for_class_in_view_path(klass, view_path, prefix = nil, suffix = nil)
  4 + return nil if klass.nil?
  5 + name = [prefix, klass.name.underscore, suffix].compact.map(&:to_s).join('_')
  6 +
  7 + search_name = String.new(name)
  8 + if search_name.include?("/")
  9 + search_name.gsub!(/(\/)([^\/]*)$/,'\1_\2')
  10 + name = File.join(params[:controller], name) if defined?(params) && params[:controller]
  11 + else
  12 + search_name = "_" + search_name
  13 + end
  14 +
  15 + path = defined?(params) && params[:controller] ? File.join(view_path, params[:controller], search_name + '.html.erb') : File.join(view_path, search_name + '.html.erb')
  16 + return name if File.exists?(File.join(path))
  17 +
  18 + partial_for_class_in_view_path(klass.superclass, view_path, prefix, suffix)
  19 + end
  20 +
  21 + def partial_for_class(klass, prefix=nil, suffix=nil)
  22 + raise ArgumentError, 'No partial for object. Is there a partial for any class in the inheritance hierarchy?' if klass.nil?
  23 + name = klass.name.underscore
  24 + controller.view_paths.each do |view_path|
  25 + partial = partial_for_class_in_view_path(klass, view_path, prefix, suffix)
  26 + return partial if partial
  27 + end
  28 +
  29 + raise ArgumentError, 'No partial for object. Is there a partial for any class in the inheritance hierarchy?'
  30 + end
  31 +
  32 + def render_partial_for_class klass, *args
  33 + raise ArgumentError, 'No partial for object. Is there a partial for any class in the inheritance hierarchy?' if klass.nil?
  34 + begin
  35 + partial = klass.name.underscore
  36 + partial = "#{params[:controller]}/#{partial}" if params[:controller] and partial.index '/'
  37 + return render partial, *args
  38 + rescue ActionView::MissingTemplate
  39 + return render_partial_for_class klass.superclass, *args
  40 + end
  41 + end
  42 +
  43 +end
app/helpers/url_helper.rb 0 → 100644
@@ -0,0 +1,7 @@ @@ -0,0 +1,7 @@
  1 +module UrlHelper
  2 +
  3 + def back_url
  4 + 'javascript:history.back()'
  5 + end
  6 +
  7 +end
app/mailers/application_mailer.rb 0 → 100644
@@ -0,0 +1,18 @@ @@ -0,0 +1,18 @@
  1 +require_relative '../helpers/application_helper'
  2 +
  3 +class ApplicationMailer < ActionMailer::Base
  4 +
  5 + include AuthenticatedSystem
  6 +
  7 + helper ApplicationHelper
  8 +
  9 + attr_accessor :environment
  10 +
  11 + def default_url_options options = nil
  12 + options ||= {}
  13 + options[:host] = environment.default_hostname if environment
  14 + options
  15 + end
  16 +
  17 +end
  18 +
app/mailers/comment_notifier.rb
1 -class CommentNotifier < ActionMailer::Base 1 +class CommentNotifier < ApplicationMailer
  2 +
2 def notification(comment) 3 def notification(comment)
3 profile = comment.article.profile 4 profile = comment.article.profile
  5 + self.environment = profile.environment
4 @recipient = profile.nickname || profile.name 6 @recipient = profile.nickname || profile.name
5 @sender = comment.author_name 7 @sender = comment.author_name
6 @sender_link = comment.author_link 8 @sender_link = comment.author_link
@@ -8,7 +10,6 @@ class CommentNotifier &lt; ActionMailer::Base @@ -8,7 +10,6 @@ class CommentNotifier &lt; ActionMailer::Base
8 @comment_url = comment.url 10 @comment_url = comment.url
9 @comment_title = comment.title 11 @comment_title = comment.title
10 @comment_body = comment.body 12 @comment_body = comment.body
11 - @environment = profile.environment.name  
12 @url = profile.environment.top_url 13 @url = profile.environment.top_url
13 14
14 mail( 15 mail(
@@ -20,6 +21,8 @@ class CommentNotifier &lt; ActionMailer::Base @@ -20,6 +21,8 @@ class CommentNotifier &lt; ActionMailer::Base
20 21
21 def mail_to_followers(comment, emails) 22 def mail_to_followers(comment, emails)
22 profile = comment.article.profile 23 profile = comment.article.profile
  24 + self.environment = profile.environment
  25 +
23 @recipient = profile.nickname || profile.name 26 @recipient = profile.nickname || profile.name
24 @sender = comment.author_name 27 @sender = comment.author_name
25 @sender_link = comment.author_link 28 @sender_link = comment.author_link
@@ -28,7 +31,6 @@ class CommentNotifier &lt; ActionMailer::Base @@ -28,7 +31,6 @@ class CommentNotifier &lt; ActionMailer::Base
28 @unsubscribe_url = comment.article.view_url.merge({:unfollow => true}) 31 @unsubscribe_url = comment.article.view_url.merge({:unfollow => true})
29 @comment_title = comment.title 32 @comment_title = comment.title
30 @comment_body = comment.body 33 @comment_body = comment.body
31 - @environment = profile.environment.name  
32 @url = profile.environment.top_url 34 @url = profile.environment.top_url
33 35
34 mail( 36 mail(
app/mailers/contact.rb
@@ -30,14 +30,16 @@ class Contact @@ -30,14 +30,16 @@ class Contact
30 Contact::Sender.notification(self).deliver 30 Contact::Sender.notification(self).deliver
31 end 31 end
32 32
33 - class Sender < ActionMailer::Base 33 + class Sender < ApplicationMailer
  34 +
34 def notification(contact) 35 def notification(contact)
  36 + self.environment = contact.dest.environment
  37 +
35 @name = contact.name 38 @name = contact.name
36 @email = contact.email 39 @email = contact.email
37 @city = contact.city 40 @city = contact.city
38 @state = contact.state 41 @state = contact.state
39 @message = contact.message 42 @message = contact.message
40 - @environment = contact.dest.environment.name  
41 @url = url_for(:host => contact.dest.environment.default_hostname, :controller => 'home') 43 @url = url_for(:host => contact.dest.environment.default_hostname, :controller => 'home')
42 @target = contact.dest.name 44 @target = contact.dest.name
43 45
app/mailers/environment_mailing.rb
1 class EnvironmentMailing < Mailing 1 class EnvironmentMailing < Mailing
2 2
3 def recipients(offset=0, limit=100) 3 def recipients(offset=0, limit=100)
4 - source.people.all(:order => :id, :offset => offset, :limit => limit, :joins => "LEFT OUTER JOIN mailing_sents m ON (m.mailing_id = #{id} AND m.person_id = profiles.id)", :conditions => { "m.person_id" => nil }) 4 + source.people.order(:id).offset(offset).limit(limit)
  5 + .joins("LEFT OUTER JOIN mailing_sents m ON (m.mailing_id = #{id} AND m.person_id = profiles.id)")
  6 + .where("m.person_id" => nil)
5 end 7 end
6 8
7 def each_recipient 9 def each_recipient
app/mailers/mailing.rb
@@ -46,7 +46,8 @@ class Mailing &lt; ActiveRecord::Base @@ -46,7 +46,8 @@ class Mailing &lt; ActiveRecord::Base
46 end 46 end
47 end 47 end
48 48
49 - class Sender < ActionMailer::Base 49 + class Sender < ApplicationMailer
  50 +
50 def notification(mailing, recipient) 51 def notification(mailing, recipient)
51 @message = mailing.body 52 @message = mailing.body
52 @signature_message = mailing.signature_message 53 @signature_message = mailing.signature_message
app/mailers/organization_mailing.rb
@@ -5,7 +5,9 @@ class OrganizationMailing &lt; Mailing @@ -5,7 +5,9 @@ class OrganizationMailing &lt; Mailing
5 end 5 end
6 6
7 def recipients(offset=0, limit=100) 7 def recipients(offset=0, limit=100)
8 - source.members.all(:order => :id, :offset => offset, :limit => limit, :joins => "LEFT OUTER JOIN mailing_sents m ON (m.mailing_id = #{id} AND m.person_id = profiles.id)", :conditions => { "m.person_id" => nil }) 8 + source.members.order(:id).offset(offset).limit(limit)
  9 + .joins("LEFT OUTER JOIN mailing_sents m ON (m.mailing_id = #{id} AND m.person_id = profiles.id)")
  10 + .where("m.person_id" => nil)
9 end 11 end
10 12
11 def each_recipient 13 def each_recipient
app/mailers/pending_task_notifier.rb
1 -class PendingTaskNotifier < ActionMailer::Base 1 +class PendingTaskNotifier < ApplicationMailer
2 2
3 def notification(person) 3 def notification(person)
  4 + self.environment = person.environment
  5 +
4 @person = person 6 @person = person
5 @tasks = person.tasks.pending 7 @tasks = person.tasks.pending
6 @organizations_with_pending_tasks = person.organizations_with_pending_tasks 8 @organizations_with_pending_tasks = person.organizations_with_pending_tasks
7 - @environment = person.environment.name  
8 @url = url_for(:host => person.environment.default_hostname, :controller => 'home') 9 @url = url_for(:host => person.environment.default_hostname, :controller => 'home')
9 @default_hostname = person.environment.default_hostname 10 @default_hostname = person.environment.default_hostname
10 @url_for_pending_tasks = url_for(:host => person.environment.default_hostname, :controller => 'tasks', :profile => person.identifier) 11 @url_for_pending_tasks = url_for(:host => person.environment.default_hostname, :controller => 'tasks', :profile => person.identifier)
app/mailers/scrap_notifier.rb
1 -class ScrapNotifier < ActionMailer::Base 1 +class ScrapNotifier < ApplicationMailer
  2 +
2 def notification(scrap) 3 def notification(scrap)
3 sender, receiver = scrap.sender, scrap.receiver 4 sender, receiver = scrap.sender, scrap.receiver
  5 + self.environment = sender.environment
4 # for tests 6 # for tests
5 return unless receiver.email 7 return unless receiver.email
6 8
@@ -9,7 +11,6 @@ class ScrapNotifier &lt; ActionMailer::Base @@ -9,7 +11,6 @@ class ScrapNotifier &lt; ActionMailer::Base
9 @sender_link = sender.url 11 @sender_link = sender.url
10 @scrap_content = scrap.content 12 @scrap_content = scrap.content
11 @wall_url = scrap.scrap_wall_url 13 @wall_url = scrap.scrap_wall_url
12 - @environment = sender.environment.name  
13 @url = sender.environment.top_url 14 @url = sender.environment.top_url
14 mail( 15 mail(
15 to: receiver.email, 16 to: receiver.email,
app/mailers/task_mailer.rb
1 -class TaskMailer < ActionMailer::Base 1 +class TaskMailer < ApplicationMailer
2 2
3 def target_notification(task, message) 3 def target_notification(task, message)
  4 + self.environment = task.environment
  5 +
4 @message = extract_message(message) 6 @message = extract_message(message)
5 @target = task.target.name 7 @target = task.target.name
6 - @environment = task.environment.name  
7 @url = generate_environment_url(task, :controller => 'home') 8 @url = generate_environment_url(task, :controller => 'home')
8 url_for_tasks_list = task.target.kind_of?(Environment) ? '' : url_for(task.target.tasks_url.merge(:script_name => Noosfero.root('/'))) 9 url_for_tasks_list = task.target.kind_of?(Environment) ? '' : url_for(task.target.tasks_url.merge(:script_name => Noosfero.root('/')))
9 @tasks_url = url_for_tasks_list 10 @tasks_url = url_for_tasks_list
@@ -16,6 +17,8 @@ class TaskMailer &lt; ActionMailer::Base @@ -16,6 +17,8 @@ class TaskMailer &lt; ActionMailer::Base
16 end 17 end
17 18
18 def invitation_notification(task) 19 def invitation_notification(task)
  20 + self.environment = task.requestor.environment
  21 +
19 msg = task.expanded_message 22 msg = task.expanded_message
20 @message = msg.gsub /<url>/, generate_environment_url(task, :controller => 'account', :action => 'signup', :invitation_code => task.code) 23 @message = msg.gsub /<url>/, generate_environment_url(task, :controller => 'account', :action => 'signup', :invitation_code => task.code)
21 24
@@ -27,11 +30,12 @@ class TaskMailer &lt; ActionMailer::Base @@ -27,11 +30,12 @@ class TaskMailer &lt; ActionMailer::Base
27 end 30 end
28 31
29 def generic_message(name, task) 32 def generic_message(name, task)
  33 + self.environment = task.requestor.environment
  34 +
30 return if !task.respond_to?("#{name}_message") 35 return if !task.respond_to?("#{name}_message")
31 36
32 @message = extract_message(task.send("#{name}_message")) 37 @message = extract_message(task.send("#{name}_message"))
33 @requestor = task.requestor.name 38 @requestor = task.requestor.name
34 - @environment = task.requestor.environment.name  
35 @url = url_for(:host => task.requestor.environment.default_hostname, :controller => 'home') 39 @url = url_for(:host => task.requestor.environment.default_hostname, :controller => 'home')
36 40
37 mail( 41 mail(
app/mailers/user_mailer.rb
1 -class UserMailer < ActionMailer::Base 1 +class UserMailer < ApplicationMailer
  2 +
2 def activation_email_notify(user) 3 def activation_email_notify(user)
  4 + self.environment = user.environment
  5 +
3 user_email = "#{user.login}@#{user.email_domain}" 6 user_email = "#{user.login}@#{user.email_domain}"
4 @name = user.name 7 @name = user.name
5 @email = user_email 8 @email = user_email
6 @webmail = MailConf.webmail_url(user.login, user.email_domain) 9 @webmail = MailConf.webmail_url(user.login, user.email_domain)
7 - @environment = user.environment.name  
8 @url = url_for(:host => user.environment.default_hostname, :controller => 'home') 10 @url = url_for(:host => user.environment.default_hostname, :controller => 'home')
9 11
10 mail( 12 mail(
@@ -15,9 +17,10 @@ class UserMailer &lt; ActionMailer::Base @@ -15,9 +17,10 @@ class UserMailer &lt; ActionMailer::Base
15 end 17 end
16 18
17 def activation_code(user) 19 def activation_code(user)
  20 + self.environment = user.environment
  21 +
18 @recipient = user.name 22 @recipient = user.name
19 @activation_code = user.activation_code 23 @activation_code = user.activation_code
20 - @environment = user.environment.name  
21 @url = user.environment.top_url 24 @url = user.environment.top_url
22 @redirection = (true if user.return_to) 25 @redirection = (true if user.return_to)
23 @join = (user.community_to_join if user.community_to_join) 26 @join = (user.community_to_join if user.community_to_join)
@@ -30,6 +33,8 @@ class UserMailer &lt; ActionMailer::Base @@ -30,6 +33,8 @@ class UserMailer &lt; ActionMailer::Base
30 end 33 end
31 34
32 def signup_welcome_email(user) 35 def signup_welcome_email(user)
  36 + self.environment = user.environment
  37 +
33 @body = user.environment.signup_welcome_text_body.gsub('{user_name}', user.name) 38 @body = user.environment.signup_welcome_text_body.gsub('{user_name}', user.name)
34 email_subject = user.environment.signup_welcome_text_subject 39 email_subject = user.environment.signup_welcome_text_subject
35 mail( 40 mail(
@@ -42,8 +47,9 @@ class UserMailer &lt; ActionMailer::Base @@ -42,8 +47,9 @@ class UserMailer &lt; ActionMailer::Base
42 end 47 end
43 48
44 def profiles_suggestions_email(user) 49 def profiles_suggestions_email(user)
  50 + self.environment = user.environment
  51 +
45 @recipient = user.name 52 @recipient = user.name
46 - @environment = user.environment.name  
47 @url = user.environment.top_url 53 @url = user.environment.top_url
48 @people_suggestions_url = user.people_suggestions_url 54 @people_suggestions_url = user.people_suggestions_url
49 @people_suggestions = user.suggested_people.sample(3) 55 @people_suggestions = user.suggested_people.sample(3)
app/models/add_member.rb
@@ -11,7 +11,7 @@ class AddMember &lt; Task @@ -11,7 +11,7 @@ class AddMember &lt; Task
11 alias :organization :target 11 alias :organization :target
12 alias :organization= :target= 12 alias :organization= :target=
13 13
14 - settings_items :roles 14 + settings_items :roles, type: Array
15 15
16 after_create do |task| 16 after_create do |task|
17 remove_from_suggestion_list(task) 17 remove_from_suggestion_list(task)
app/models/approve_comment.rb
@@ -8,7 +8,7 @@ class ApproveComment &lt; Task @@ -8,7 +8,7 @@ class ApproveComment &lt; Task
8 def comment 8 def comment
9 unless @comment || self.comment_attributes.nil? 9 unless @comment || self.comment_attributes.nil?
10 @comment = Comment.new 10 @comment = Comment.new
11 - @comment.assign_attributes(ActiveSupport::JSON.decode(self.comment_attributes), :without_protection => true) 11 + @comment.assign_attributes(ActiveSupport::JSON.decode(self.comment_attributes.to_s), :without_protection => true)
12 end 12 end
13 @comment 13 @comment
14 end 14 end
app/models/article.rb
@@ -79,7 +79,7 @@ class Article &lt; ActiveRecord::Base @@ -79,7 +79,7 @@ class Article &lt; ActiveRecord::Base
79 79
80 has_many :comments, :class_name => 'Comment', :foreign_key => 'source_id', :dependent => :destroy, :order => 'created_at asc' 80 has_many :comments, :class_name => 'Comment', :foreign_key => 'source_id', :dependent => :destroy, :order => 'created_at asc'
81 81
82 - has_many :article_categorizations, :conditions => [ 'articles_categories.virtual = ?', false ] 82 + has_many :article_categorizations, -> { where 'articles_categories.virtual = ?', false }
83 has_many :categories, :through => :article_categorizations 83 has_many :categories, :through => :article_categorizations
84 84
85 has_many :article_categorizations_including_virtual, :class_name => 'ArticleCategorization' 85 has_many :article_categorizations_including_virtual, :class_name => 'ArticleCategorization'
@@ -131,17 +131,15 @@ class Article &lt; ActiveRecord::Base @@ -131,17 +131,15 @@ class Article &lt; ActiveRecord::Base
131 131
132 xss_terminate :only => [ :name ], :on => 'validation', :with => 'white_list' 132 xss_terminate :only => [ :name ], :on => 'validation', :with => 'white_list'
133 133
134 - scope :in_category, lambda { |category|  
135 - {:include => 'categories_including_virtual', :conditions => { 'categories.id' => category.id }} 134 + scope :in_category, -> category {
  135 + includes('categories_including_virtual').where('categories.id' => category.id)
136 } 136 }
137 137
138 include TimeScopes 138 include TimeScopes
139 139
140 - scope :by_range, lambda { |range| {  
141 - :conditions => [  
142 - 'articles.published_at BETWEEN :start_date AND :end_date', { :start_date => range.first, :end_date => range.last }  
143 - ]  
144 - }} 140 + scope :by_range, -> range {
  141 + where 'articles.published_at BETWEEN :start_date AND :end_date', { start_date: range.first, end_date: range.last }
  142 + }
145 143
146 URL_FORMAT = /\A(http|https):\/\/[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(([0-9]{1,5})?\/.*)?\Z/ix 144 URL_FORMAT = /\A(http|https):\/\/[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(([0-9]{1,5})?\/.*)?\Z/ix
147 145
@@ -263,19 +261,21 @@ class Article &lt; ActiveRecord::Base @@ -263,19 +261,21 @@ class Article &lt; ActiveRecord::Base
263 261
264 # retrieves all articles belonging to the given +profile+ that are not 262 # retrieves all articles belonging to the given +profile+ that are not
265 # sub-articles of any other article. 263 # sub-articles of any other article.
266 - scope :top_level_for, lambda { |profile|  
267 - {:conditions => [ 'parent_id is null and profile_id = ?', profile.id ]} 264 + scope :top_level_for, -> profile {
  265 + where 'parent_id is null and profile_id = ?', profile.id
268 } 266 }
269 267
270 - scope :public,  
271 - :conditions => [ "advertise = ? AND published = ? AND profiles.visible = ? AND profiles.public_profile = ?", true, true, true, true ], :joins => [:profile] 268 + scope :is_public, -> {
  269 + joins(:profile).
  270 + where("articles.advertise = ? AND articles.published = ? AND profiles.visible = ? AND profiles.public_profile = ?", true, true, true, true)
  271 + }
272 272
273 - scope :more_recent,  
274 - :conditions => [ "advertise = ? AND published = ? AND profiles.visible = ? AND profiles.public_profile = ? AND  
275 - ((articles.type != ?) OR articles.type is NULL)",  
276 - true, true, true, true, 'RssFeed'  
277 - ],  
278 - :order => 'articles.published_at desc, articles.id desc' 273 + scope :more_recent, -> {
  274 + order('articles.published_at desc, articles.id desc')
  275 + .where("articles.advertise = ? AND articles.published = ? AND profiles.visible = ? AND profiles.public_profile = ? AND
  276 + ((articles.type != ?) OR articles.type is NULL)",
  277 + true, true, true, true, 'RssFeed')
  278 + }
279 279
280 # retrives the most commented articles, sorted by the comment count (largest 280 # retrives the most commented articles, sorted by the comment count (largest
281 # first) 281 # first)
@@ -283,12 +283,14 @@ class Article &lt; ActiveRecord::Base @@ -283,12 +283,14 @@ class Article &lt; ActiveRecord::Base
283 paginate(:order => 'comments_count DESC', :page => 1, :per_page => limit) 283 paginate(:order => 'comments_count DESC', :page => 1, :per_page => limit)
284 end 284 end
285 285
286 - scope :more_popular, :order => 'hits DESC'  
287 - scope :relevant_as_recent, :conditions => ["(articles.type != 'UploadedFile' and articles.type != 'RssFeed' and articles.type != 'Blog') OR articles.type is NULL"] 286 + scope :more_popular, -> { order 'hits DESC' }
  287 + scope :relevant_as_recent, -> {
  288 + where "(articles.type != 'UploadedFile' and articles.type != 'RssFeed' and articles.type != 'Blog') OR articles.type is NULL"
  289 + }
288 290
289 def self.recent(limit = nil, extra_conditions = {}, pagination = true) 291 def self.recent(limit = nil, extra_conditions = {}, pagination = true)
290 result = scoped({:conditions => extra_conditions}). 292 result = scoped({:conditions => extra_conditions}).
291 - public. 293 + is_public.
292 relevant_as_recent. 294 relevant_as_recent.
293 limit(limit). 295 limit(limit).
294 order(['articles.published_at desc', 'articles.id desc']) 296 order(['articles.published_at desc', 'articles.id desc'])
@@ -413,7 +415,7 @@ class Article &lt; ActiveRecord::Base @@ -413,7 +415,7 @@ class Article &lt; ActiveRecord::Base
413 self.translations.map(&:language) 415 self.translations.map(&:language)
414 end 416 end
415 417
416 - scope :native_translations, :conditions => { :translation_of_id => nil } 418 + scope :native_translations, -> { where :translation_of_id => nil }
417 419
418 def translatable? 420 def translatable?
419 false 421 false
@@ -455,7 +457,7 @@ class Article &lt; ActiveRecord::Base @@ -455,7 +457,7 @@ class Article &lt; ActiveRecord::Base
455 457
456 def rotate_translations 458 def rotate_translations
457 unless self.translations.empty? 459 unless self.translations.empty?
458 - rotate = self.translations 460 + rotate = self.translations.all
459 root = rotate.shift 461 root = rotate.shift
460 root.update_attribute(:translation_of_id, nil) 462 root.update_attribute(:translation_of_id, nil)
461 root.translations = rotate 463 root.translations = rotate
@@ -468,7 +470,7 @@ class Article &lt; ActiveRecord::Base @@ -468,7 +470,7 @@ class Article &lt; ActiveRecord::Base
468 elsif self.native_translation.language == locale 470 elsif self.native_translation.language == locale
469 self.native_translation 471 self.native_translation
470 else 472 else
471 - self.native_translation.translations.first(:conditions => { :language => locale }) 473 + self.native_translation.translations.where(:language => locale).first
472 end 474 end
473 end 475 end
474 476
@@ -492,19 +494,19 @@ class Article &lt; ActiveRecord::Base @@ -492,19 +494,19 @@ class Article &lt; ActiveRecord::Base
492 ['TextArticle', 'TextileArticle', 'TinyMceArticle'] 494 ['TextArticle', 'TextileArticle', 'TinyMceArticle']
493 end 495 end
494 496
495 - scope :published, :conditions => ['articles.published = ?', true]  
496 - scope :folders, lambda {|profile|{:conditions => ['articles.type IN (?)', profile.folder_types] }}  
497 - scope :no_folders, lambda {|profile|{:conditions => ['articles.type NOT IN (?)', profile.folder_types]}}  
498 - scope :galleries, :conditions => [ "articles.type IN ('Gallery')" ]  
499 - scope :images, :conditions => { :is_image => true }  
500 - scope :no_images, :conditions => { :is_image => false }  
501 - scope :text_articles, :conditions => [ 'articles.type IN (?)', text_article_types ]  
502 - scope :files, :conditions => { :type => 'UploadedFile' }  
503 - scope :with_types, lambda { |types| { :conditions => [ 'articles.type IN (?)', types ] } } 497 + scope :published, -> { where 'articles.published = ?', true }
  498 + scope :folders, -> profile { where 'articles.type IN (?)', profile.folder_types }
  499 + scope :no_folders, -> profile { where 'articles.type NOT IN (?)', profile.folder_types }
  500 + scope :galleries, -> { where "articles.type IN ('Gallery')" }
  501 + scope :images, -> { where :is_image => true }
  502 + scope :no_images, -> { where :is_image => false }
  503 + scope :text_articles, -> { where 'articles.type IN (?)', text_article_types }
  504 + scope :files, -> { where :type => 'UploadedFile' }
  505 + scope :with_types, -> types { where 'articles.type IN (?)', types }
504 506
505 - scope :more_popular, :order => 'hits DESC'  
506 - scope :more_comments, :order => "comments_count DESC"  
507 - scope :more_recent, :order => "created_at DESC" 507 + scope :more_popular, -> { order 'hits DESC' }
  508 + scope :more_comments, -> { order "comments_count DESC" }
  509 + scope :more_recent, -> { order "created_at DESC" }
508 510
509 scope :display_filter, lambda {|user, profile| 511 scope :display_filter, lambda {|user, profile|
510 return published if (user.nil? && profile && profile.public?) 512 return published if (user.nil? && profile && profile.public?)
@@ -626,7 +628,7 @@ class Article &lt; ActiveRecord::Base @@ -626,7 +628,7 @@ class Article &lt; ActiveRecord::Base
626 ] 628 ]
627 629
628 def self.find_by_old_path(old_path) 630 def self.find_by_old_path(old_path)
629 - find(:first, :include => :versions, :conditions => ['article_versions.path = ?', old_path], :order => 'article_versions.id desc') 631 + self.includes(:versions).where('article_versions.path = ?', old_path).order('article_versions.id DESC').first
630 end 632 end
631 633
632 def hit 634 def hit
@@ -704,11 +706,11 @@ class Article &lt; ActiveRecord::Base @@ -704,11 +706,11 @@ class Article &lt; ActiveRecord::Base
704 end 706 end
705 707
706 def get_version(version_number = nil) 708 def get_version(version_number = nil)
707 - version_number ? versions.find(:first, :order => 'version', :offset => version_number - 1) : versions.earliest 709 + if version_number then self.versions.order('version').offset(version_number - 1).first else self.versions.earliest end
708 end 710 end
709 711
710 def author_by_version(version_number = nil) 712 def author_by_version(version_number = nil)
711 - version_number ? profile.environment.people.find_by_id(get_version(version_number).author_id) : author 713 + if version_number then profile.environment.people.where(id: get_version(version_number).author_id).first else author end
712 end 714 end
713 715
714 def author_name(version_number = nil) 716 def author_name(version_number = nil)
@@ -804,7 +806,7 @@ class Article &lt; ActiveRecord::Base @@ -804,7 +806,7 @@ class Article &lt; ActiveRecord::Base
804 end 806 end
805 807
806 def activity 808 def activity
807 - ActionTracker::Record.find_by_target_type_and_target_id 'Article', self.id 809 + ActionTracker::Record.where(target_type: 'Article', target_id: self.id).first
808 end 810 end
809 811
810 def create_activity 812 def create_activity
app/models/article_categorization.rb
1 class ArticleCategorization < ActiveRecord::Base 1 class ArticleCategorization < ActiveRecord::Base
2 - set_table_name :articles_categories 2 + self.table_name = :articles_categories
  3 +
3 belongs_to :article 4 belongs_to :article
4 belongs_to :category 5 belongs_to :category
5 6
app/models/block.rb
@@ -20,7 +20,7 @@ class Block &lt; ActiveRecord::Base @@ -20,7 +20,7 @@ class Block &lt; ActiveRecord::Base
20 20
21 acts_as_having_settings 21 acts_as_having_settings
22 22
23 - scope :enabled, :conditions => { :enabled => true } 23 + scope :enabled, -> { where :enabled => true }
24 24
25 after_save do |block| 25 after_save do |block|
26 if block.owner.kind_of?(Profile) && block.owner.is_template? && block.mirror? 26 if block.owner.kind_of?(Profile) && block.owner.is_template? && block.mirror?
app/models/blog_archives_block.rb
@@ -15,7 +15,7 @@ class BlogArchivesBlock &lt; Block @@ -15,7 +15,7 @@ class BlogArchivesBlock &lt; Block
15 _('Blog posts') 15 _('Blog posts')
16 end 16 end
17 17
18 - settings_items :blog_id, Integer 18 + settings_items :blog_id, type: Integer
19 19
20 def blog 20 def blog
21 blog_id && owner.blogs.exists?(blog_id) ? owner.blogs.find(blog_id) : owner.blog 21 blog_id && owner.blogs.exists?(blog_id) ? owner.blogs.find(blog_id) : owner.blog
@@ -33,10 +33,10 @@ class BlogArchivesBlock &lt; Block @@ -33,10 +33,10 @@ class BlogArchivesBlock &lt; Block
33 results = '' 33 results = ''
34 posts = visible_posts(args[:person]) 34 posts = visible_posts(args[:person])
35 posts.except(:order).count(:all, :group => 'EXTRACT(YEAR FROM published_at)').sort_by {|year, count| -year.to_i}.each do |year, count| 35 posts.except(:order).count(:all, :group => 'EXTRACT(YEAR FROM published_at)').sort_by {|year, count| -year.to_i}.each do |year, count|
36 - results << content_tag('li', content_tag('strong', "#{year} (#{count})"))  
37 - results << "<ul class='#{year}-archive'>"  
38 - posts.except(:order).count(:all, :conditions => ['EXTRACT(YEAR FROM published_at)=?', year], :group => 'EXTRACT(MONTH FROM published_at)').sort_by {|month, count| -month.to_i}.each do |month, count|  
39 - results << content_tag('li', link_to("#{month_name(month.to_i)} (#{count})", owner_blog.url.merge(:year => year, :month => month))) 36 + results << content_tag('li', content_tag('strong', "#{year.to_i} (#{count})"))
  37 + results << "<ul class='#{year.to_i}-archive'>"
  38 + posts.except(:order).where('EXTRACT(YEAR FROM published_at)=?', year.to_i).group('EXTRACT(MONTH FROM published_at)').count.sort_by {|month, count| -month.to_i}.each do |month, count|
  39 + results << content_tag('li', link_to("#{month_name(month.to_i)} (#{count})", owner_blog.url.merge(year: year.to_i, month: month.to_i)))
40 end 40 end
41 results << "</ul>" 41 results << "</ul>"
42 end 42 end
app/models/box.rb
@@ -7,7 +7,7 @@ class Box &lt; ActiveRecord::Base @@ -7,7 +7,7 @@ class Box &lt; ActiveRecord::Base
7 7
8 include Noosfero::Plugin::HotSpot 8 include Noosfero::Plugin::HotSpot
9 9
10 - scope :with_position, :conditions => ['boxes.position > 0'] 10 + scope :with_position, -> { where 'boxes.position > 0' }
11 11
12 def environment 12 def environment
13 owner ? (owner.kind_of?(Environment) ? owner : owner.environment) : nil 13 owner ? (owner.kind_of?(Environment) ? owner : owner.environment) : nil
app/models/categorization.rb
1 module Categorization 1 module Categorization
2 2
3 def add_category_to_object(category, object) 3 def add_category_to_object(category, object)
4 - if !find(:first, :conditions => {object_id_column => object, :category_id => category} ) 4 + if !self.where(object_id_column => object, :category_id => category).first
5 connection.execute("insert into #{table_name} (category_id, #{object_id_column}) values(#{category.id}, #{object.id})") 5 connection.execute("insert into #{table_name} (category_id, #{object_id_column}) values(#{category.id}, #{object.id})")
6 6
7 c = category.parent 7 c = category.parent
8 - while !c.nil? && !self.find(:first, :conditions => {object_id_column => object, :category_id => c}) 8 + while !c.nil? && !self.where(object_id_column => object, :category_id => c).first
9 connection.execute("insert into #{table_name} (category_id, #{object_id_column}, virtual) values(#{c.id}, #{object.id}, 1>0)") 9 connection.execute("insert into #{table_name} (category_id, #{object_id_column}, virtual) values(#{c.id}, #{object.id}, 1>0)")
10 c = c.parent 10 c = c.parent
11 end 11 end
app/models/category.rb
@@ -14,12 +14,12 @@ class Category &lt; ActiveRecord::Base @@ -14,12 +14,12 @@ class Category &lt; ActiveRecord::Base
14 validates_uniqueness_of :slug,:scope => [ :environment_id, :parent_id ], :message => N_('{fn} is already being used by another category.').fix_i18n 14 validates_uniqueness_of :slug,:scope => [ :environment_id, :parent_id ], :message => N_('{fn} is already being used by another category.').fix_i18n
15 belongs_to :environment 15 belongs_to :environment
16 16
17 - # Finds all top level categories for a given environment.  
18 - scope :top_level_for, lambda { |environment|  
19 - {:conditions => ['parent_id is null and environment_id = ?', environment.id ]} 17 + # Finds all top level categories for a given environment.
  18 + scope :top_level_for, -> environment {
  19 + where 'parent_id is null and environment_id = ?', environment.id
20 } 20 }
21 21
22 - scope :on_level, lambda { |parent| {:conditions => {:parent_id => parent}} } 22 + scope :on_level, -> parent { where :parent_id => parent }
23 23
24 acts_as_filesystem 24 acts_as_filesystem
25 25
@@ -46,26 +46,26 @@ class Category &lt; ActiveRecord::Base @@ -46,26 +46,26 @@ class Category &lt; ActiveRecord::Base
46 display_color = nil if display_color.blank? 46 display_color = nil if display_color.blank?
47 end 47 end
48 48
49 - scope :from_types, lambda { |types|  
50 - types.select{ |t| t.blank? }.empty? ?  
51 - { :conditions => { :type => types } } :  
52 - { :conditions => [ "type IN (?) OR type IS NULL", types.reject{ |t| t.blank? } ] } 49 + scope :from_types, -> types {
  50 + if types.select{ |t| t.blank? }.empty? then
  51 + where(type: types) else
  52 + where("type IN (?) OR type IS NULL", types.reject{ |t| t.blank? }) end
53 } 53 }
54 54
55 def recent_people(limit = 10) 55 def recent_people(limit = 10)
56 - self.people.paginate(:order => 'created_at DESC, id DESC', :page => 1, :per_page => limit) 56 + self.people.reorder('created_at DESC, id DESC').paginate(page: 1, per_page: limit)
57 end 57 end
58 58
59 def recent_enterprises(limit = 10) 59 def recent_enterprises(limit = 10)
60 - self.enterprises.paginate(:order => 'created_at DESC, id DESC', :page => 1, :per_page => limit) 60 + self.enterprises.reorder('created_at DESC, id DESC').paginate(page: 1, per_page: limit)
61 end 61 end
62 62
63 def recent_communities(limit = 10) 63 def recent_communities(limit = 10)
64 - self.communities.paginate(:order => 'created_at DESC, id DESC', :page => 1, :per_page => limit) 64 + self.communities.reorder('created_at DESC, id DESC').paginate(page: 1, per_page: limit)
65 end 65 end
66 66
67 def recent_products(limit = 10) 67 def recent_products(limit = 10)
68 - self.products.paginate(:order => 'created_at DESC, id DESC', :page => 1, :per_page => limit) 68 + self.products.reorder('created_at DESC, id DESC').paginate(page: 1, per_page: limit)
69 end 69 end
70 70
71 def recent_articles(limit = 10) 71 def recent_articles(limit = 10)
@@ -73,7 +73,7 @@ class Category &lt; ActiveRecord::Base @@ -73,7 +73,7 @@ class Category &lt; ActiveRecord::Base
73 end 73 end
74 74
75 def recent_comments(limit = 10) 75 def recent_comments(limit = 10)
76 - comments.paginate(:order => 'created_at DESC, comments.id DESC', :page => 1, :per_page => limit) 76 + self.comments.reorder('created_at DESC, comments.id DESC').paginate(page: 1, per_page: limit)
77 end 77 end
78 78
79 def most_commented_articles(limit = 10) 79 def most_commented_articles(limit = 10)
@@ -81,7 +81,7 @@ class Category &lt; ActiveRecord::Base @@ -81,7 +81,7 @@ class Category &lt; ActiveRecord::Base
81 end 81 end
82 82
83 def upcoming_events(limit = 10) 83 def upcoming_events(limit = 10)
84 - self.events.paginate(:conditions => [ 'start_date >= ?', DateTime.now.beginning_of_day ], :order => 'start_date', :page => 1, :per_page => limit) 84 + self.events.where('start_date >= ?', DateTime.now.beginning_of_day).order('start_date').paginate(page: 1, per_page: limit)
85 end 85 end
86 86
87 def display_in_menu? 87 def display_in_menu?
@@ -90,11 +90,11 @@ class Category &lt; ActiveRecord::Base @@ -90,11 +90,11 @@ class Category &lt; ActiveRecord::Base
90 90
91 def children_for_menu 91 def children_for_menu
92 results = [] 92 results = []
93 - pending = children.find(:all, :conditions => { :display_in_menu => true})  
94 - while !pending.empty? 93 + pending = children.where(display_in_menu: true).all
  94 + while pending.present?
95 cat = pending.shift 95 cat = pending.shift
96 results << cat 96 results << cat
97 - pending += cat.children.find(:all, :conditions => { :display_in_menu => true} ) 97 + pending += cat.children.where :display_in_menu => true
98 end 98 end
99 99
100 results 100 results
@@ -102,7 +102,7 @@ class Category &lt; ActiveRecord::Base @@ -102,7 +102,7 @@ class Category &lt; ActiveRecord::Base
102 102
103 def is_leaf_displayable_in_menu? 103 def is_leaf_displayable_in_menu?
104 return false if self.display_in_menu == false 104 return false if self.display_in_menu == false
105 - self.children.find(:all, :conditions => {:display_in_menu => true}).empty? 105 + self.children.where(:display_in_menu => true).empty?
106 end 106 end
107 107
108 def with_color 108 def with_color
app/models/certifier.rb
@@ -20,7 +20,7 @@ class Certifier &lt; ActiveRecord::Base @@ -20,7 +20,7 @@ class Certifier &lt; ActiveRecord::Base
20 validates_presence_of :name 20 validates_presence_of :name
21 21
22 def destroy 22 def destroy
23 - product_qualifiers.each { |pq| pq.update_attributes! :certifier => nil } 23 + product_qualifiers.each { |pq| pq.update! :certifier => nil }
24 super 24 super
25 end 25 end
26 26
app/models/comment.rb
@@ -18,7 +18,7 @@ class Comment &lt; ActiveRecord::Base @@ -18,7 +18,7 @@ class Comment &lt; ActiveRecord::Base
18 has_many :children, :class_name => 'Comment', :foreign_key => 'reply_of_id', :dependent => :destroy 18 has_many :children, :class_name => 'Comment', :foreign_key => 'reply_of_id', :dependent => :destroy
19 belongs_to :reply_of, :class_name => 'Comment', :foreign_key => 'reply_of_id' 19 belongs_to :reply_of, :class_name => 'Comment', :foreign_key => 'reply_of_id'
20 20
21 - scope :without_reply, :conditions => ['reply_of_id IS NULL'] 21 + scope :without_reply, -> { where 'reply_of_id IS NULL' }
22 22
23 include TimeScopes 23 include TimeScopes
24 24
app/models/create_community.rb
@@ -34,7 +34,7 @@ class CreateCommunity &lt; Task @@ -34,7 +34,7 @@ class CreateCommunity &lt; Task
34 ! DATA_FIELDS.include?(key.to_s) 34 ! DATA_FIELDS.include?(key.to_s)
35 end 35 end
36 36
37 - community.update_attributes(community_data) 37 + community.update(community_data)
38 community.image = image if image 38 community.image = image if image
39 community.environment = self.environment 39 community.environment = self.environment
40 community.save! 40 community.save!
app/models/create_enterprise.rb
@@ -16,13 +16,13 @@ class CreateEnterprise &lt; Task @@ -16,13 +16,13 @@ class CreateEnterprise &lt; Task
16 settings_items field.to_sym 16 settings_items field.to_sym
17 end 17 end
18 18
19 - # checks for virtual attributes 19 + # checks for virtual attributes
20 validates_presence_of :name, :identifier 20 validates_presence_of :name, :identifier
21 21
22 #checks if the validation method is region to validates 22 #checks if the validation method is region to validates
23 validates_presence_of :region_id, :if => lambda { |obj| obj.environment.organization_approval_method == :region } 23 validates_presence_of :region_id, :if => lambda { |obj| obj.environment.organization_approval_method == :region }
24 24
25 - validates_format_of :foundation_year, :with => /^\d*$/ 25 + validates_numericality_of :foundation_year, only_integer: true, if: -> o { o.foundation_year.present? }
26 26
27 # checks for actual attributes 27 # checks for actual attributes
28 validates_presence_of :requestor_id, :target_id 28 validates_presence_of :requestor_id, :target_id
@@ -129,7 +129,7 @@ class CreateEnterprise &lt; Task @@ -129,7 +129,7 @@ class CreateEnterprise &lt; Task
129 finish 129 finish
130 end 130 end
131 131
132 - # tells if this request was appoved 132 + # tells if this request was appoved
133 def approved? 133 def approved?
134 self.status == Task::Status::FINISHED 134 self.status == Task::Status::FINISHED
135 end 135 end
app/models/domain.rb
@@ -14,7 +14,7 @@ class Domain &lt; ActiveRecord::Base @@ -14,7 +14,7 @@ class Domain &lt; ActiveRecord::Base
14 14
15 # <tt>name</tt> must be sequences of alphanumeric characters (a to z, 15 # <tt>name</tt> must be sequences of alphanumeric characters (a to z,
16 # 0 to 9), plus '_' or '-', separated by dots. Letters must be lowercase. 16 # 0 to 9), plus '_' or '-', separated by dots. Letters must be lowercase.
17 - validates_format_of :name, :with => /^([a-z0-9_-]+\.)+[a-z0-9_-]+$/, :message => N_('{fn} must be composed of sequences of lowercase letters (a to z), numbers (0 to 9), "_" and "-", separated by dots.').fix_i18n 17 + validates_format_of :name, with: /\A([a-z0-9_-]+\.)+[a-z0-9_-]+\z/, message: N_('{fn} must be composed of sequences of lowercase letters (a to z), numbers (0 to 9), "_" and "-", separated by dots.').fix_i18n
18 18
19 # checks validations that could not be expressed using Rails' predefined 19 # checks validations that could not be expressed using Rails' predefined
20 # validations. In particular: 20 # validations. In particular:
@@ -37,7 +37,7 @@ class Domain &lt; ActiveRecord::Base @@ -37,7 +37,7 @@ class Domain &lt; ActiveRecord::Base
37 # "www.", but it will be removed before searching. So searching for 37 # "www.", but it will be removed before searching. So searching for
38 # 'www.example.net' is exactly the same as searching for just 'example.net' 38 # 'www.example.net' is exactly the same as searching for just 'example.net'
39 def self.find_by_name(name) 39 def self.find_by_name(name)
40 - self.find(:first, :conditions => [ 'name = ?', self.extract_domain_name(name) ]) 40 + self.where('name = ?', self.extract_domain_name(name)).first
41 end 41 end
42 42
43 # turns the argument (expected to be a String) into a domain name that is 43 # turns the argument (expected to be a String) into a domain name that is
app/models/enterprise.rb
@@ -71,7 +71,7 @@ class Enterprise &lt; Organization @@ -71,7 +71,7 @@ class Enterprise &lt; Organization
71 end 71 end
72 72
73 def highlighted_products_with_image(options = {}) 73 def highlighted_products_with_image(options = {})
74 - Product.find(:all, {:conditions => {:highlighted => true}, :joins => :image}.merge(options)) 74 + Product.where(:highlighted => true).joins(:image)
75 end 75 end
76 76
77 def required_fields 77 def required_fields
app/models/environment.rb
@@ -17,7 +17,10 @@ class Environment &lt; ActiveRecord::Base @@ -17,7 +17,10 @@ class Environment &lt; ActiveRecord::Base
17 17
18 has_many :users 18 has_many :users
19 19
20 - self.partial_updates = false 20 + # allow roles use
  21 + def self.dangerous_attribute_method? name
  22 + false
  23 + end
21 24
22 has_many :tasks, :dependent => :destroy, :as => 'target' 25 has_many :tasks, :dependent => :destroy, :as => 'target'
23 has_many :search_terms, :as => :context 26 has_many :search_terms, :as => :context
@@ -108,7 +111,7 @@ class Environment &lt; ActiveRecord::Base @@ -108,7 +111,7 @@ class Environment &lt; ActiveRecord::Base
108 def admins 111 def admins
109 admin_role = Environment::Roles.admin(self) 112 admin_role = Environment::Roles.admin(self)
110 return [] if admin_role.blank? 113 return [] if admin_role.blank?
111 - Person.members_of(self).all(:conditions => ['role_assignments.role_id = ?', admin_role.id]) 114 + Person.members_of(self).where 'role_assignments.role_id = ?', admin_role.id
112 end 115 end
113 116
114 # returns the available features for a Environment, in the form of a 117 # returns the available features for a Environment, in the form of a
@@ -223,9 +226,11 @@ class Environment &lt; ActiveRecord::Base @@ -223,9 +226,11 @@ class Environment &lt; ActiveRecord::Base
223 has_many :licenses 226 has_many :licenses
224 227
225 has_many :categories 228 has_many :categories
226 - has_many :display_categories, :class_name => 'Category', :conditions => 'display_color is not null and parent_id is null', :order => 'display_color' 229 + has_many :display_categories, -> {
  230 + order('display_color').where('display_color is not null and parent_id is null')
  231 + }, class_name: 'Category'
227 232
228 - has_many :product_categories, :conditions => { :type => 'ProductCategory'} 233 + has_many :product_categories, -> { where type: 'ProductCategory'}
229 has_many :regions 234 has_many :regions
230 has_many :states 235 has_many :states
231 has_many :cities 236 has_many :cities
@@ -690,7 +695,7 @@ class Environment &lt; ActiveRecord::Base @@ -690,7 +695,7 @@ class Environment &lt; ActiveRecord::Base
690 695
691 # the default Environment. 696 # the default Environment.
692 def self.default 697 def self.default
693 - self.find(:first, :conditions => [ 'is_default = ?', true ] ) 698 + self.where('is_default = ?', true).first
694 end 699 end
695 700
696 # returns an array with the top level categories for this environment. 701 # returns an array with the top level categories for this environment.
@@ -871,7 +876,7 @@ class Environment &lt; ActiveRecord::Base @@ -871,7 +876,7 @@ class Environment &lt; ActiveRecord::Base
871 end 876 end
872 877
873 def portal_folders 878 def portal_folders
874 - (settings[:portal_folders] || []).map{|fid| portal_community.articles.find(:first, :conditions => { :id => fid }) }.compact 879 + (settings[:portal_folders] || []).map{|fid| portal_community.articles.where(id: fid).first }.compact
875 end 880 end
876 881
877 def portal_folders=(folders) 882 def portal_folders=(folders)
@@ -958,7 +963,7 @@ class Environment &lt; ActiveRecord::Base @@ -958,7 +963,7 @@ class Environment &lt; ActiveRecord::Base
958 end 963 end
959 964
960 def highlighted_products_with_image(options = {}) 965 def highlighted_products_with_image(options = {})
961 - Product.find(:all, {:conditions => {:highlighted => true, :profile_id => self.enterprises.find(:all, :select => :id) }, :joins => :image}.merge(options)) 966 + self.products.where(highlighted: true).joins(:image).order('created_at ASC')
962 end 967 end
963 968
964 settings_items :home_cache_in_minutes, :type => :integer, :default => 5 969 settings_items :home_cache_in_minutes, :type => :integer, :default => 5
app/models/event.rb
@@ -12,14 +12,14 @@ class Event &lt; Article @@ -12,14 +12,14 @@ class Event &lt; Article
12 settings_items :address, :type => :string 12 settings_items :address, :type => :string
13 13
14 def link=(value) 14 def link=(value)
15 - self.setting[:link] = maybe_add_http(value) 15 + self.setting[:link] = maybe_add_http(URI.escape value.to_s)
16 end 16 end
17 17
18 def link 18 def link
19 maybe_add_http(self.setting[:link]) 19 maybe_add_http(self.setting[:link])
20 end 20 end
21 21
22 - xss_terminate :only => [ :name, :body, :link, :address ], :with => 'white_list', :on => 'validation' 22 + xss_terminate :only => [ :name, :body, :address ], :with => 'white_list', :on => 'validation'
23 23
24 def initialize(*args) 24 def initialize(*args)
25 super(*args) 25 super(*args)
@@ -34,23 +34,21 @@ class Event &lt; Article @@ -34,23 +34,21 @@ class Event &lt; Article
34 end 34 end
35 end 35 end
36 36
37 - scope :by_day, lambda { |date|  
38 - { :conditions => [' start_date >= :start_date AND start_date <= :end_date AND end_date IS NULL OR (start_date <= :end_date AND end_date >= :start_date)', {:start_date => date.beginning_of_day, :end_date => date.end_of_day}],  
39 - :order => 'start_date ASC'  
40 - } 37 + scope :by_day, -> date {
  38 + where('start_date >= :start_date AND start_date <= :end_date AND end_date IS NULL OR (start_date <= :end_date AND end_date >= :start_date)',
  39 + start_date: date.beginning_of_day, end_date: date.end_of_day).
  40 + order('start_date ASC')
41 } 41 }
42 42
43 - scope :next_events_from_month, lambda { |date| 43 + scope :next_events_from_month, -> date {
44 date_temp = date.strftime("%Y-%m-%d") 44 date_temp = date.strftime("%Y-%m-%d")
45 - { :conditions => ["start_date >= ?","#{date_temp}"],  
46 - :order => 'start_date ASC'  
47 - } 45 + order('start_date ASC')
  46 + .where("start_date >= ?","#{date_temp}")
48 } 47 }
49 48
50 - scope :by_month, lambda { |date|  
51 - { :conditions => ["EXTRACT(YEAR FROM start_date) = ? AND EXTRACT(MONTH FROM start_date) = ?",date.year,date.month],  
52 - :order => 'start_date ASC'  
53 - } 49 + scope :by_month, -> date {
  50 + order('start_date ASC')
  51 + .where("EXTRACT(YEAR FROM start_date) = ? AND EXTRACT(MONTH FROM start_date) = ?", date.year, date.month)
54 } 52 }
55 53
56 include WhiteListFilter 54 include WhiteListFilter
@@ -71,12 +69,10 @@ class Event &lt; Article @@ -71,12 +69,10 @@ class Event &lt; Article
71 'event' 69 'event'
72 end 70 end
73 71
74 - scope :by_range, lambda { |range| {  
75 - :conditions => [  
76 - 'start_date BETWEEN :start_day AND :end_day OR end_date BETWEEN :start_day AND :end_day',  
77 - { :start_day => range.first, :end_day => range.last }  
78 - ]  
79 - }} 72 + scope :by_range, -> range {
  73 + where('start_date BETWEEN :start_day AND :end_day OR end_date BETWEEN :start_day AND :end_day',
  74 + {:start_day => range.first, :end_day => range.last})
  75 + }
80 76
81 def self.date_range(year, month) 77 def self.date_range(year, month)
82 if year.nil? || month.nil? 78 if year.nil? || month.nil?
app/models/external_feed.rb
@@ -5,9 +5,9 @@ class ExternalFeed &lt; ActiveRecord::Base @@ -5,9 +5,9 @@ class ExternalFeed &lt; ActiveRecord::Base
5 validates_presence_of :address, :if => lambda {|efeed| efeed.enabled} 5 validates_presence_of :address, :if => lambda {|efeed| efeed.enabled}
6 validates_uniqueness_of :blog_id 6 validates_uniqueness_of :blog_id
7 7
8 - scope :enabled, :conditions => { :enabled => true }  
9 - scope :expired, lambda {  
10 - { :conditions => ['(fetched_at is NULL) OR (fetched_at < ?)', Time.now - FeedUpdater.update_interval] } 8 + scope :enabled, -> { where enabled: true }
  9 + scope :expired, -> {
  10 + where '(fetched_at is NULL) OR (fetched_at < ?)', Time.now - FeedUpdater.update_interval
11 } 11 }
12 12
13 attr_accessible :address, :enabled, :only_once 13 attr_accessible :address, :enabled, :only_once
app/models/featured_products_block.rb
@@ -11,7 +11,7 @@ class FeaturedProductsBlock &lt; Block @@ -11,7 +11,7 @@ class FeaturedProductsBlock &lt; Block
11 if block.owner.kind_of?(Environment) && block.product_ids.blank? 11 if block.owner.kind_of?(Environment) && block.product_ids.blank?
12 total = block.owner.products.count 12 total = block.owner.products.count
13 offset = rand([(total - block.groups_of * 3) + 1, 1].max) 13 offset = rand([(total - block.groups_of * 3) + 1, 1].max)
14 - block.product_ids = block.owner.highlighted_products_with_image(:offset => offset, :limit => block.groups_of * 3).map(&:id) 14 + block.product_ids = block.owner.highlighted_products_with_image.offset(offset).limit(block.groups_of * 3).map(&:id)
15 end 15 end
16 block.groups_of = block.groups_of.to_i 16 block.groups_of = block.groups_of.to_i
17 end 17 end
app/models/feed_reader_block.rb
@@ -27,8 +27,8 @@ class FeedReaderBlock &lt; Block @@ -27,8 +27,8 @@ class FeedReaderBlock &lt; Block
27 settings_items :update_errors, :type => :integer, :default => 0 27 settings_items :update_errors, :type => :integer, :default => 0
28 settings_items :error_message, :type => :string 28 settings_items :error_message, :type => :string
29 29
30 - scope :expired, lambda {  
31 - { :conditions => [ '(fetched_at is NULL) OR (fetched_at < ?)', Time.now - FeedUpdater.update_interval] } 30 + scope :expired, -> {
  31 + where '(fetched_at is NULL) OR (fetched_at < ?)', Time.now - FeedUpdater.update_interval
32 } 32 }
33 33
34 before_create do |block| 34 before_create do |block|
app/models/folder.rb
@@ -56,10 +56,11 @@ class Folder &lt; Article @@ -56,10 +56,11 @@ class Folder &lt; Article
56 profile.recent_documents(limit, ["articles.type != ? AND articles.highlighted = ? AND articles.parent_id = ?", 'Folder', highlight, id]) 56 profile.recent_documents(limit, ["articles.type != ? AND articles.highlighted = ? AND articles.parent_id = ?", 'Folder', highlight, id])
57 end 57 end
58 58
59 - has_many :images, :class_name => 'Article',  
60 - :foreign_key => 'parent_id',  
61 - :order => 'articles.type, articles.name',  
62 - :conditions => ["articles.type = 'UploadedFile' and articles.content_type in (?) or articles.type in ('Folder','Gallery')", UploadedFile.content_types] 59 + has_many :images, -> {
  60 + order('articles.type, articles.name').
  61 + where("articles.type = 'UploadedFile' and articles.content_type in (?) or articles.type in ('Folder','Gallery')", UploadedFile.content_types)
  62 + }, class_name: 'Article', foreign_key: 'parent_id'
  63 +
63 64
64 def accept_uploads? 65 def accept_uploads?
65 !self.has_posts? || self.gallery? 66 !self.has_posts? || self.gallery?
app/models/image.rb
1 class Image < ActiveRecord::Base 1 class Image < ActiveRecord::Base
2 2
  3 + attr_accessible :uploaded_data, :label, :remove_image
  4 + attr_accessor :remove_image
  5 +
3 def self.max_size 6 def self.max_size
4 Image.attachment_options[:max_size] 7 Image.attachment_options[:max_size]
5 end 8 end
6 9
7 sanitize_filename 10 sanitize_filename
8 11
9 - has_attachment :content_type => :image,  
10 - :storage => :file_system, 12 + has_attachment :content_type => :image,
  13 + :storage => :file_system,
11 :path_prefix => 'public/image_uploads', 14 :path_prefix => 'public/image_uploads',
12 :resize_to => '800x600>', 15 :resize_to => '800x600>',
13 :thumbnails => { :big => '150x150', 16 :thumbnails => { :big => '150x150',
@@ -15,7 +18,8 @@ class Image &lt; ActiveRecord::Base @@ -15,7 +18,8 @@ class Image &lt; ActiveRecord::Base
15 :portrait => '64x64', 18 :portrait => '64x64',
16 :minor => '50x50>', 19 :minor => '50x50>',
17 :icon => '20x20!' }, 20 :icon => '20x20!' },
18 - :max_size => 5.megabytes # remember to update validate message below 21 + :max_size => 5.megabytes, # remember to update validate message below
  22 + processor: 'Rmagick'
19 23
20 validates_attachment :size => N_("{fn} of uploaded file was larger than the maximum size of 5.0 MB").fix_i18n 24 validates_attachment :size => N_("{fn} of uploaded file was larger than the maximum size of 5.0 MB").fix_i18n
21 25
@@ -23,10 +27,8 @@ class Image &lt; ActiveRecord::Base @@ -23,10 +27,8 @@ class Image &lt; ActiveRecord::Base
23 27
24 postgresql_attachment_fu 28 postgresql_attachment_fu
25 29
26 - attr_accessible :uploaded_data, :label, :remove_image  
27 - attr_accessor :remove_image  
28 -  
29 def current_data 30 def current_data
30 File.file?(full_filename) ? File.read(full_filename) : nil 31 File.file?(full_filename) ? File.read(full_filename) : nil
31 end 32 end
  33 +
32 end 34 end
app/models/input.rb
@@ -13,7 +13,7 @@ class Input &lt; ActiveRecord::Base @@ -13,7 +13,7 @@ class Input &lt; ActiveRecord::Base
13 13
14 belongs_to :unit 14 belongs_to :unit
15 15
16 - scope :relevant_to_price, :conditions => { :relevant_to_price => true } 16 + scope :relevant_to_price, -> { where relevant_to_price: true }
17 17
18 include FloatHelper 18 include FloatHelper
19 19
app/models/invite_friend.rb
@@ -45,7 +45,7 @@ class InviteFriend &lt; Invitation @@ -45,7 +45,7 @@ class InviteFriend &lt; Invitation
45 private 45 private
46 def check_for_invitation_existence 46 def check_for_invitation_existence
47 if friend 47 if friend
48 - friend.tasks.pending.of("InviteFriend").find(:all, :conditions => {:requestor_id => person.id, :target_id => friend.id}).blank? 48 + friend.tasks.pending.of("InviteFriend").where(requestor_id: person.id, target_id: friend.id).blank?
49 end 49 end
50 end 50 end
51 51
app/models/invite_member.rb
@@ -65,7 +65,7 @@ class InviteMember &lt; Invitation @@ -65,7 +65,7 @@ class InviteMember &lt; Invitation
65 private 65 private
66 def check_for_invitation_existence 66 def check_for_invitation_existence
67 if friend 67 if friend
68 - friend.tasks.pending.of("InviteMember").find(:all, :conditions => {:requestor_id => person.id}).select { |t| t.data[:community_id] == community_id }.blank? 68 + friend.tasks.pending.of("InviteMember").where(requestor_id: person.id).select{ |t| t.data[:community_id] == community_id }.blank?
69 end 69 end
70 end 70 end
71 71
app/models/link_list_block.rb
@@ -41,7 +41,7 @@ class LinkListBlock &lt; Block @@ -41,7 +41,7 @@ class LinkListBlock &lt; Block
41 [N_('New window'), '_new'], 41 [N_('New window'), '_new'],
42 ] 42 ]
43 43
44 - settings_items :links, Array, :default => [] 44 + settings_items :links, type: Array, :default => []
45 45
46 before_save do |block| 46 before_save do |block|
47 block.links = block.links.delete_if {|i| i[:name].blank? and i[:address].blank?} 47 block.links = block.links.delete_if {|i| i[:name].blank? and i[:address].blank?}
app/models/organization.rb
@@ -84,7 +84,7 @@ class Organization &lt; Profile @@ -84,7 +84,7 @@ class Organization &lt; Profile
84 end 84 end
85 85
86 def find_pending_validation(code) 86 def find_pending_validation(code)
87 - validations.pending.find(:first, :conditions => {:code => code}) 87 + validations.pending.where(code: code).first
88 end 88 end
89 89
90 def processed_validations 90 def processed_validations
@@ -92,7 +92,7 @@ class Organization &lt; Profile @@ -92,7 +92,7 @@ class Organization &lt; Profile
92 end 92 end
93 93
94 def find_processed_validation(code) 94 def find_processed_validation(code)
95 - validations.finished.find(:first, :conditions => {:code => code}) 95 + validations.finished.where(code: code).first
96 end 96 end
97 97
98 def is_validation_entity? 98 def is_validation_entity?
@@ -140,7 +140,7 @@ class Organization &lt; Profile @@ -140,7 +140,7 @@ class Organization &lt; Profile
140 140
141 settings_items :zip_code, :city, :state, :country 141 settings_items :zip_code, :city, :state, :country
142 142
143 - validates_format_of :foundation_year, :with => Noosfero::Constants::INTEGER_FORMAT 143 + validates_numericality_of :foundation_year, only_integer: true, if: -> o { o.foundation_year.present? }
144 validates_format_of :contact_email, :with => Noosfero::Constants::EMAIL_FORMAT, :if => (lambda { |org| !org.contact_email.blank? }) 144 validates_format_of :contact_email, :with => Noosfero::Constants::EMAIL_FORMAT, :if => (lambda { |org| !org.contact_email.blank? })
145 validates_as_cnpj :cnpj 145 validates_as_cnpj :cnpj
146 146
@@ -190,7 +190,7 @@ class Organization &lt; Profile @@ -190,7 +190,7 @@ class Organization &lt; Profile
190 end 190 end
191 191
192 def already_request_membership?(person) 192 def already_request_membership?(person)
193 - self.tasks.pending.find_by_requestor_id(person.id, :conditions => { :type => 'AddMember' }) 193 + self.tasks.pending.where(type: 'AddMember', requestor_id: person.id).first
194 end 194 end
195 195
196 def jid(options = {}) 196 def jid(options = {})
app/models/person.rb
@@ -16,27 +16,26 @@ class Person &lt; Profile @@ -16,27 +16,26 @@ class Person &lt; Profile
16 acts_as_trackable :after_add => Proc.new {|p,t| notify_activity(t)} 16 acts_as_trackable :after_add => Proc.new {|p,t| notify_activity(t)}
17 acts_as_accessor 17 acts_as_accessor
18 18
19 - scope :members_of, lambda { |resources|  
20 - resources = [resources] if !resources.kind_of?(Array) 19 + scope :members_of, -> resources {
  20 + resources = Array(resources)
21 conditions = resources.map {|resource| "role_assignments.resource_type = '#{resource.class.base_class.name}' AND role_assignments.resource_id = #{resource.id || -1}"}.join(' OR ') 21 conditions = resources.map {|resource| "role_assignments.resource_type = '#{resource.class.base_class.name}' AND role_assignments.resource_id = #{resource.id || -1}"}.join(' OR ')
22 - { :select => 'DISTINCT profiles.*', :joins => :role_assignments, :conditions => [conditions] } 22 + select('DISTINCT profiles.*').joins(:role_assignments).where([conditions])
23 } 23 }
24 24
25 - scope :not_members_of, lambda { |resources|  
26 - resources = [resources] if !resources.kind_of?(Array) 25 + scope :not_members_of, -> resources {
  26 + resources = Array(resources)
27 conditions = resources.map {|resource| "role_assignments.resource_type = '#{resource.class.base_class.name}' AND role_assignments.resource_id = #{resource.id || -1}"}.join(' OR ') 27 conditions = resources.map {|resource| "role_assignments.resource_type = '#{resource.class.base_class.name}' AND role_assignments.resource_id = #{resource.id || -1}"}.join(' OR ')
28 - { :select => 'DISTINCT profiles.*', :conditions => ['"profiles"."id" NOT IN (SELECT DISTINCT profiles.id FROM "profiles" INNER JOIN "role_assignments" ON "role_assignments"."accessor_id" = "profiles"."id" AND "role_assignments"."accessor_type" = (\'Profile\') WHERE "profiles"."type" IN (\'Person\') AND (%s))' % conditions] } 28 + select('DISTINCT profiles.*').where('"profiles"."id" NOT IN (SELECT DISTINCT profiles.id FROM "profiles" INNER JOIN "role_assignments" ON "role_assignments"."accessor_id" = "profiles"."id" AND "role_assignments"."accessor_type" = (\'Profile\') WHERE "profiles"."type" IN (\'Person\') AND (%s))' % conditions)
29 } 29 }
30 30
31 - scope :by_role, lambda { |roles|  
32 - roles = [roles] unless roles.kind_of?(Array)  
33 - { :select => 'DISTINCT profiles.*', :joins => :role_assignments, :conditions => ['role_assignments.role_id IN (?)',  
34 -roles] } 31 + scope :by_role, -> roles {
  32 + roles = Array(roles)
  33 + select('DISTINCT profiles.*').joins(:role_assignments).where('role_assignments.role_id IN (?)', roles)
35 } 34 }
36 35
37 - scope :not_friends_of, lambda { |resources| 36 + scope :not_friends_of, -> resources {
38 resources = Array(resources) 37 resources = Array(resources)
39 - { :select => 'DISTINCT profiles.*', :conditions => ['"profiles"."id" NOT IN (SELECT DISTINCT profiles.id FROM "profiles" INNER JOIN "friendships" ON "friendships"."person_id" = "profiles"."id" WHERE "friendships"."friend_id" IN (%s))' % resources.map(&:id)] } 38 + select('DISTINCT profiles.*').where('"profiles"."id" NOT IN (SELECT DISTINCT profiles.id FROM "profiles" INNER JOIN "friendships" ON "friendships"."person_id" = "profiles"."id" WHERE "friendships"."friend_id" IN (%s))' % resources.map(&:id))
40 } 39 }
41 40
42 scope :visible_for_person, lambda { |person| 41 scope :visible_for_person, lambda { |person|
@@ -68,6 +67,9 @@ roles] } @@ -68,6 +67,9 @@ roles] }
68 end 67 end
69 alias_method_chain :has_permission?, :plugins 68 alias_method_chain :has_permission?, :plugins
70 69
  70 + # for eager loading
  71 + has_many :memberships, through: :role_assignments, source: :resource, source_type: 'Profile'
  72 +
71 def memberships 73 def memberships
72 scopes = [] 74 scopes = []
73 plugins_scopes = plugins.dispatch_scopes(:person_memberships, self) 75 plugins_scopes = plugins.dispatch_scopes(:person_memberships, self)
@@ -84,7 +86,9 @@ roles] } @@ -84,7 +86,9 @@ roles] }
84 has_many :friendships, :dependent => :destroy 86 has_many :friendships, :dependent => :destroy
85 has_many :friends, :class_name => 'Person', :through => :friendships 87 has_many :friends, :class_name => 'Person', :through => :friendships
86 88
87 - scope :online, lambda { { :include => :user, :conditions => ["users.chat_status != '' AND users.chat_status_at >= ?", DateTime.now - User.expires_chat_status_every.minutes] } } 89 + scope :online, -> {
  90 + joins(:user).where("users.chat_status != '' AND users.chat_status_at >= ?", DateTime.now - User.expires_chat_status_every.minutes)
  91 + }
88 92
89 has_many :requested_tasks, :class_name => 'Task', :foreign_key => :requestor_id, :dependent => :destroy 93 has_many :requested_tasks, :class_name => 'Task', :foreign_key => :requestor_id, :dependent => :destroy
90 94
@@ -100,21 +104,31 @@ roles] } @@ -100,21 +104,31 @@ roles] }
100 has_and_belongs_to_many :acepted_forums, :class_name => 'Forum', :join_table => 'terms_forum_people' 104 has_and_belongs_to_many :acepted_forums, :class_name => 'Forum', :join_table => 'terms_forum_people'
101 has_and_belongs_to_many :articles_with_access, :class_name => 'Article', :join_table => 'article_privacy_exceptions' 105 has_and_belongs_to_many :articles_with_access, :class_name => 'Article', :join_table => 'article_privacy_exceptions'
102 106
103 - has_many :suggested_profiles, :class_name => 'ProfileSuggestion', :foreign_key => :person_id, :order => 'score DESC', :dependent => :destroy  
104 - has_many :suggested_people, :through => :suggested_profiles, :source => :suggestion, :conditions => ['profile_suggestions.suggestion_type = ? AND profile_suggestions.enabled = ?', 'Person', true]  
105 - has_many :suggested_communities, :through => :suggested_profiles, :source => :suggestion, :conditions => ['profile_suggestions.suggestion_type = ? AND profile_suggestions.enabled = ?', 'Community', true] 107 + has_many :suggested_profiles, class_name: 'ProfileSuggestion', foreign_key: :person_id, order: 'score DESC', dependent: :destroy
  108 + has_many :suggested_people, -> {
  109 + where 'profile_suggestions.suggestion_type = ? AND profile_suggestions.enabled = ?', 'Person', true
  110 + }, through: :suggested_profiles, source: :suggestion
  111 + has_many :suggested_communities, -> {
  112 + where 'profile_suggestions.suggestion_type = ? AND profile_suggestions.enabled = ?', 'Community', true
  113 + }, through: :suggested_profiles, source: :suggestion
106 114
107 - scope :more_popular, :order => 'friends_count DESC' 115 + scope :more_popular, -> { order 'friends_count DESC' }
108 116
109 - scope :abusers, :joins => :abuse_complaints, :conditions => ['tasks.status = 3'], :select => 'DISTINCT profiles.*'  
110 - scope :non_abusers, :joins => "LEFT JOIN tasks ON profiles.id = tasks.requestor_id AND tasks.type='AbuseComplaint'", :conditions => ["tasks.status != 3 OR tasks.id is NULL"], :select => "DISTINCT profiles.*" 117 + scope :abusers, -> {
  118 + joins(:abuse_complaints).where('tasks.status = 3').select('DISTINCT profiles.*')
  119 + }
  120 + scope :non_abusers, -> {
  121 + select("DISTINCT profiles.*").
  122 + joins("LEFT JOIN tasks ON profiles.id = tasks.requestor_id AND tasks.type='AbuseComplaint'").
  123 + where("tasks.status != 3 OR tasks.id is NULL")
  124 + }
111 125
112 - scope :admins, :joins => [:role_assignments => :role], :conditions => ['roles.key = ?', 'environment_administrator' ]  
113 - scope :activated, :joins => :user, :conditions => ['users.activation_code IS NULL AND users.activated_at IS NOT NULL']  
114 - scope :deactivated, :joins => :user, :conditions => ['NOT (users.activation_code IS NULL AND users.activated_at IS NOT NULL)'] 126 + scope :admins, -> { joins(:role_assignments => :role).where('roles.key = ?', 'environment_administrator') }
  127 + scope :activated, -> { joins(:user).where('users.activation_code IS NULL AND users.activated_at IS NOT NULL') }
  128 + scope :deactivated, -> { joins(:user).where('NOT (users.activation_code IS NULL AND users.activated_at IS NOT NULL)') }
115 129
116 after_destroy do |person| 130 after_destroy do |person|
117 - Friendship.find(:all, :conditions => { :friend_id => person.id}).each { |friendship| friendship.destroy } 131 + Friendship.where(friend_id: person.id).each{ |friendship| friendship.destroy }
118 end 132 end
119 133
120 belongs_to :user, :dependent => :delete 134 belongs_to :user, :dependent => :delete
@@ -177,7 +191,7 @@ roles] } @@ -177,7 +191,7 @@ roles] }
177 end 191 end
178 192
179 def remove_friend(friend) 193 def remove_friend(friend)
180 - Friendship.find(:first, :conditions => {:friend_id => friend, :person_id => id}).destroy 194 + Friendship.where(friend_id: friend, person_id: id).first.destroy
181 end 195 end
182 196
183 FIELDS = %w[ 197 FIELDS = %w[
@@ -288,7 +302,7 @@ roles] } @@ -288,7 +302,7 @@ roles] }
288 end 302 end
289 303
290 validates_each :email, :on => :update do |record,attr,value| 304 validates_each :email, :on => :update do |record,attr,value|
291 - if User.find(:first, :conditions => ['email = ? and id != ? and environment_id = ?', value, record.user.id, record.environment.id]) 305 + if User.where('email = ? and id != ? and environment_id = ?', value, record.user.id, record.environment.id).first
292 record.errors.add(attr, _('{fn} is already used by other user').fix_i18n) 306 record.errors.add(attr, _('{fn} is already used by other user').fix_i18n)
293 end 307 end
294 end 308 end
@@ -397,7 +411,7 @@ roles] } @@ -397,7 +411,7 @@ roles] }
397 def ask_to_join?(community) 411 def ask_to_join?(community)
398 return false if !community.visible? 412 return false if !community.visible?
399 return false if memberships.include?(community) 413 return false if memberships.include?(community)
400 - return false if AddMember.find(:first, :conditions => {:requestor_id => self.id, :target_id => community.id}) 414 + return false if AddMember.where(requestor_id: self.id, target_id: community.id).first
401 !refused_communities.include?(community) 415 !refused_communities.include?(community)
402 end 416 end
403 417
app/models/person_notifier.rb
  1 +# FIXME needed by test/units/application_helper.rb
  2 +require_dependency 'application_helper'
  3 +
1 class PersonNotifier 4 class PersonNotifier
2 5
3 def initialize(person) 6 def initialize(person)
@@ -28,7 +31,7 @@ class PersonNotifier @@ -28,7 +31,7 @@ class PersonNotifier
28 31
29 def notify 32 def notify
30 if @person.notification_time && @person.notification_time > 0 33 if @person.notification_time && @person.notification_time > 0
31 - notifications = @person.tracked_notifications.find(:all, :conditions => ["created_at > ?", notify_from]) 34 + notifications = @person.tracked_notifications.where("created_at > ?", notify_from)
32 tasks = Task.to(@person).without_spam.pending.where("created_at > ?", notify_from).order_by('created_at', 'asc') 35 tasks = Task.to(@person).without_spam.pending.where("created_at > ?", notify_from).order_by('created_at', 'asc')
33 36
34 Noosfero.with_locale @person.environment.default_language do 37 Noosfero.with_locale @person.environment.default_language do
@@ -74,9 +77,8 @@ class PersonNotifier @@ -74,9 +77,8 @@ class PersonNotifier
74 77
75 end 78 end
76 79
77 - class Mailer < ActionMailer::Base 80 + class Mailer < ApplicationMailer
78 81
79 - helper ApplicationHelper  
80 helper ActionTrackerHelper 82 helper ActionTrackerHelper
81 83
82 def session 84 def session
@@ -85,8 +87,8 @@ class PersonNotifier @@ -85,8 +87,8 @@ class PersonNotifier
85 87
86 def content_summary(person, notifications, tasks) 88 def content_summary(person, notifications, tasks)
87 if person.environment 89 if person.environment
88 - ActionMailer::Base.asset_host = person.environment.top_url  
89 - ActionMailer::Base.default_url_options[:host] = person.environment.default_hostname 90 + ApplicationMailer.asset_host = person.environment.top_url
  91 + ApplicationMailer.default_url_options[:host] = person.environment.default_hostname
90 end 92 end
91 93
92 @current_theme = 'default' 94 @current_theme = 'default'
@@ -94,7 +96,7 @@ class PersonNotifier @@ -94,7 +96,7 @@ class PersonNotifier
94 @recipient = @profile.nickname || @profile.name 96 @recipient = @profile.nickname || @profile.name
95 @notifications = notifications 97 @notifications = notifications
96 @tasks = tasks 98 @tasks = tasks
97 - @environment = @profile.environment.name 99 + @environment = @profile.environment
98 @url = @profile.environment.top_url 100 @url = @profile.environment.top_url
99 mail( 101 mail(
100 content_type: "text/html", 102 content_type: "text/html",
app/models/product.rb
@@ -52,8 +52,8 @@ class Product &lt; ActiveRecord::Base @@ -52,8 +52,8 @@ class Product &lt; ActiveRecord::Base
52 52
53 scope :more_recent, :order => "created_at DESC" 53 scope :more_recent, :order => "created_at DESC"
54 54
55 - scope :from_category, lambda { |category|  
56 - {:joins => :product_category, :conditions => ['categories.path LIKE ?', "%#{category.slug}%"]} if category 55 + scope :from_category, -> category {
  56 + joins(:product_category).where('categories.path LIKE ?', "%#{category.slug}%") if category
57 } 57 }
58 58
59 scope :visible_for_person, lambda { |person| 59 scope :visible_for_person, lambda { |person|
app/models/product_category.rb
@@ -6,19 +6,19 @@ class ProductCategory &lt; Category @@ -6,19 +6,19 @@ class ProductCategory &lt; Category
6 attr_accessible :name, :parent, :environment 6 attr_accessible :name, :parent, :environment
7 7
8 scope :unique, :select => 'DISTINCT ON (path) categories.*' 8 scope :unique, :select => 'DISTINCT ON (path) categories.*'
9 - scope :by_enterprise, lambda { |enterprise| {  
10 - :joins => :products,  
11 - :conditions => ['products.profile_id = ?', enterprise.id]  
12 - }}  
13 - scope :by_environment, lambda { |environment| {  
14 - :conditions => ['environment_id = ?', environment.id]  
15 - }}  
16 - scope :unique_by_level, lambda { |level| {  
17 - :select => "DISTINCT ON (filtered_category) split_part(path, '/', #{level}) AS filtered_category, categories.*"  
18 - }} 9 + scope :by_enterprise, -> enterprise {
  10 + joins(:products).
  11 + where('products.profile_id = ?', enterprise.id)
  12 + }
  13 + scope :by_environment, -> environment {
  14 + where 'environment_id = ?', environment.id
  15 + }
  16 + scope :unique_by_level, -> level {
  17 + select "DISTINCT ON (filtered_category) split_part(path, '/', #{level}) AS filtered_category, categories.*"
  18 + }
19 19
20 def all_products 20 def all_products
21 - Product.find(:all, :conditions => { :product_category_id => (all_children << self).map(&:id) }) 21 + Product.where(product_category_id: (all_children << self).map(&:id))
22 end 22 end
23 23
24 def self.menu_categories(top_category, env) 24 def self.menu_categories(top_category, env)
app/models/products_block.rb
@@ -39,7 +39,7 @@ class ProductsBlock &lt; Block @@ -39,7 +39,7 @@ class ProductsBlock &lt; Block
39 link_to(_('View all products'), owner.public_profile_url.merge(:controller => 'catalog', :action => 'index')) 39 link_to(_('View all products'), owner.public_profile_url.merge(:controller => 'catalog', :action => 'index'))
40 end 40 end
41 41
42 - settings_items :product_ids, Array 42 + settings_items :product_ids, type: Array
43 def product_ids=(array) 43 def product_ids=(array)
44 self.settings[:product_ids] = array 44 self.settings[:product_ids] = array
45 if self.settings[:product_ids] 45 if self.settings[:product_ids]
app/models/profile.rb
@@ -50,7 +50,7 @@ class Profile &lt; ActiveRecord::Base @@ -50,7 +50,7 @@ class Profile &lt; ActiveRecord::Base
50 all_roles(env_id).select{ |r| r.key.match(/^profile_/) unless r.key.blank? || !r.profile_id.nil?} 50 all_roles(env_id).select{ |r| r.key.match(/^profile_/) unless r.key.blank? || !r.profile_id.nil?}
51 end 51 end
52 def self.all_roles(env_id) 52 def self.all_roles(env_id)
53 - Role.all :conditions => { :environment_id => env_id } 53 + Role.where(environment_id: env_id)
54 end 54 end
55 def self.method_missing(m, *args, &block) 55 def self.method_missing(m, *args, &block)
56 role = find_role(m, args[0]) 56 role = find_role(m, args[0])
@@ -87,20 +87,28 @@ class Profile &lt; ActiveRecord::Base @@ -87,20 +87,28 @@ class Profile &lt; ActiveRecord::Base
87 87
88 include Noosfero::Plugin::HotSpot 88 include Noosfero::Plugin::HotSpot
89 89
90 - scope :memberships_of, lambda { |person| { :select => 'DISTINCT profiles.*', :joins => :role_assignments, :conditions => ['role_assignments.accessor_type = ? AND role_assignments.accessor_id = ?', person.class.base_class.name, person.id ] } } 90 + scope :memberships_of, -> person {
  91 + select('DISTINCT profiles.*').
  92 + joins(:role_assignments).
  93 + where('role_assignments.accessor_type = ? AND role_assignments.accessor_id = ?', person.class.base_class.name, person.id)
  94 + }
91 #FIXME: these will work only if the subclass is already loaded 95 #FIXME: these will work only if the subclass is already loaded
92 - scope :enterprises, lambda { {:conditions => (Enterprise.send(:subclasses).map(&:name) << 'Enterprise').map { |klass| "profiles.type = '#{klass}'"}.join(" OR ")} }  
93 - scope :communities, lambda { {:conditions => (Community.send(:subclasses).map(&:name) << 'Community').map { |klass| "profiles.type = '#{klass}'"}.join(" OR ")} }  
94 - scope :templates, lambda { |template_id = nil|  
95 - conditions = {:conditions => {:is_template => true}}  
96 - conditions[:conditions].merge!({:id => template_id}) unless template_id.nil?  
97 - conditions 96 + scope :enterprises, -> {
  97 + where((Enterprise.send(:subclasses).map(&:name) << 'Enterprise').map { |klass| "profiles.type = '#{klass}'"}.join(" OR "))
  98 + }
  99 + scope :communities, -> {
  100 + where((Community.send(:subclasses).map(&:name) << 'Community').map { |klass| "profiles.type = '#{klass}'"}.join(" OR "))
  101 + }
  102 + scope :templates, -> template_id = nil {
  103 + s = where is_template: true
  104 + s = s.where id: template_id if template_id
  105 + s
98 } 106 }
99 107
100 - scope :with_templates, lambda { |templates|  
101 - {:conditions => {:template_id => templates}} 108 + scope :with_templates, -> templates {
  109 + where template_id: templates
102 } 110 }
103 - scope :no_templates, {:conditions => {:is_template => false}} 111 + scope :no_templates, -> { where is_template: false }
104 112
105 # Returns a scoped object to select profiles in a given location or in a radius 113 # Returns a scoped object to select profiles in a given location or in a radius
106 # distance from the given location center. 114 # distance from the given location center.
@@ -177,10 +185,10 @@ class Profile &lt; ActiveRecord::Base @@ -177,10 +185,10 @@ class Profile &lt; ActiveRecord::Base
177 Profile.column_names.map{|n| [Profile.table_name, n].join('.')}.join(',') 185 Profile.column_names.map{|n| [Profile.table_name, n].join('.')}.join(',')
178 end 186 end
179 187
180 - scope :visible, :conditions => { :visible => true, :secret => false }  
181 - scope :disabled, :conditions => { :visible => false }  
182 - scope :public, :conditions => { :visible => true, :public_profile => true, :secret => false }  
183 - scope :enabled, :conditions => { :enabled => true } 188 + scope :visible, -> { where visible: true, secret: false }
  189 + scope :disabled, -> { where visible: false }
  190 + scope :is_public, -> { where visible: true, public_profile: true, secret: false }
  191 + scope :enabled, -> { where enabled: true }
184 192
185 # Subclasses must override this method 193 # Subclasses must override this method
186 scope :more_popular 194 scope :more_popular
@@ -229,7 +237,7 @@ class Profile &lt; ActiveRecord::Base @@ -229,7 +237,7 @@ class Profile &lt; ActiveRecord::Base
229 validates_length_of :description, :maximum => 550, :allow_nil => true 237 validates_length_of :description, :maximum => 550, :allow_nil => true
230 238
231 # Valid identifiers must match this format. 239 # Valid identifiers must match this format.
232 - IDENTIFIER_FORMAT = /^#{Noosfero.identifier_format}$/ 240 + IDENTIFIER_FORMAT = /\A#{Noosfero.identifier_format}\Z/
233 241
234 # These names cannot be used as identifiers for Profiles 242 # These names cannot be used as identifiers for Profiles
235 RESERVED_IDENTIFIERS = %w[ 243 RESERVED_IDENTIFIERS = %w[
@@ -281,7 +289,7 @@ class Profile &lt; ActiveRecord::Base @@ -281,7 +289,7 @@ class Profile &lt; ActiveRecord::Base
281 end 289 end
282 end 290 end
283 291
284 - has_many :profile_categorizations, :conditions => [ 'categories_profiles.virtual = ?', false ] 292 + has_many :profile_categorizations, -> { where 'categories_profiles.virtual = ?', false }
285 has_many :categories, :through => :profile_categorizations 293 has_many :categories, :through => :profile_categorizations
286 294
287 has_many :profile_categorizations_including_virtual, :class_name => 'ProfileCategorization' 295 has_many :profile_categorizations_including_virtual, :class_name => 'ProfileCategorization'
@@ -508,14 +516,13 @@ class Profile &lt; ActiveRecord::Base @@ -508,14 +516,13 @@ class Profile &lt; ActiveRecord::Base
508 self.articles.recent(limit, options, pagination) 516 self.articles.recent(limit, options, pagination)
509 end 517 end
510 518
511 - def last_articles(limit = 10, options = {})  
512 - options = { :limit => limit,  
513 - :conditions => ["advertise = ? AND published = ? AND  
514 - ((articles.type != ? and articles.type != ? and articles.type != ?) OR  
515 - articles.type is NULL)",  
516 - true, true, 'UploadedFile', 'RssFeed', 'Blog'],  
517 - :order => 'articles.published_at desc, articles.id desc' }.merge(options)  
518 - self.articles.find(:all, options) 519 + def last_articles limit = 10
  520 + self.articles.limit(limit).where(
  521 + "advertise = ? AND published = ? AND
  522 + ((articles.type != ? and articles.type != ? and articles.type != ?) OR
  523 + articles.type is NULL)",
  524 + true, true, 'UploadedFile', 'RssFeed', 'Blog'
  525 + ).order('articles.published_at desc, articles.id desc')
519 end 526 end
520 527
521 class << self 528 class << self
@@ -713,7 +720,7 @@ private :generate_url, :url_options @@ -713,7 +720,7 @@ private :generate_url, :url_options
713 num = num + 1 720 num = num + 1
714 new_name = original_article.name + ' ' + num.to_s 721 new_name = original_article.name + ' ' + num.to_s
715 end 722 end
716 - original_article.update_attributes!(:name => new_name) 723 + original_article.update!(:name => new_name)
717 end 724 end
718 article_copy = article.copy(:profile => self, :parent => parent, :advertise => false) 725 article_copy = article.copy(:profile => self, :parent => parent, :advertise => false)
719 if article.profile.home_page == article 726 if article.profile.home_page == article
app/models/profile_activity.rb
@@ -25,8 +25,8 @@ class ProfileActivity &lt; ActiveRecord::Base @@ -25,8 +25,8 @@ class ProfileActivity &lt; ActiveRecord::Base
25 protected 25 protected
26 26
27 def copy_timestamps 27 def copy_timestamps
28 - self.created_at = self.activity.created_at  
29 - self.updated_at = self.activity.updated_at 28 + self.created_at = self.activity.created_at if self.activity.created_at
  29 + self.updated_at = self.activity.updated_at if self.activity.updated_at
30 end 30 end
31 31
32 end 32 end
app/models/profile_categorization.rb
1 class ProfileCategorization < ActiveRecord::Base 1 class ProfileCategorization < ActiveRecord::Base
2 - set_table_name :categories_profiles 2 + self.table_name = :categories_profiles
3 belongs_to :profile 3 belongs_to :profile
4 belongs_to :category 4 belongs_to :category
5 5
@@ -13,7 +13,7 @@ class ProfileCategorization &lt; ActiveRecord::Base @@ -13,7 +13,7 @@ class ProfileCategorization &lt; ActiveRecord::Base
13 end 13 end
14 14
15 def self.remove_region(profile) 15 def self.remove_region(profile)
16 - region = profile.categories.find(:first, :conditions => { :type => [Region, State, City].map(&:name) }) 16 + region = profile.categories.where(type: [Region, State, City].map(&:name)).first
17 if region 17 if region
18 ids = region.hierarchy.map(&:id) 18 ids = region.hierarchy.map(&:id)
19 self.delete_all(:profile_id => profile.id, :category_id => ids) 19 self.delete_all(:profile_id => profile.id, :category_id => ids)
app/models/profile_list_block.rb
@@ -16,7 +16,7 @@ class ProfileListBlock &lt; Block @@ -16,7 +16,7 @@ class ProfileListBlock &lt; Block
16 16
17 def profile_list 17 def profile_list
18 result = nil 18 result = nil
19 - public_profiles = profiles.public.includes([:image,:domains,:preferred_domain,:environment]) 19 + public_profiles = profiles.is_public.includes([:image,:domains,:preferred_domain,:environment])
20 if !prioritize_profiles_with_image 20 if !prioritize_profiles_with_image
21 result = public_profiles.all(:limit => get_limit, :order => 'profiles.updated_at DESC').sort_by{ rand } 21 result = public_profiles.all(:limit => get_limit, :order => 'profiles.updated_at DESC').sort_by{ rand }
22 elsif profiles.visible.with_image.count >= get_limit 22 elsif profiles.visible.with_image.count >= get_limit
@@ -28,7 +28,7 @@ result = public_profiles.all(:limit =&gt; get_limit, :order =&gt; &#39;profiles.updated_at @@ -28,7 +28,7 @@ result = public_profiles.all(:limit =&gt; get_limit, :order =&gt; &#39;profiles.updated_at
28 end 28 end
29 29
30 def profile_count 30 def profile_count
31 - profiles.public.length 31 + profiles.is_public.length
32 end 32 end
33 33
34 # the title of the block. Probably will be overriden in subclasses. 34 # the title of the block. Probably will be overriden in subclasses.
app/models/profile_suggestion.rb
@@ -26,9 +26,9 @@ class ProfileSuggestion &lt; ActiveRecord::Base @@ -26,9 +26,9 @@ class ProfileSuggestion &lt; ActiveRecord::Base
26 end 26 end
27 27
28 validates_uniqueness_of :suggestion_id, :scope => [ :person_id ] 28 validates_uniqueness_of :suggestion_id, :scope => [ :person_id ]
29 - scope :of_person, :conditions => { :suggestion_type => 'Person' }  
30 - scope :of_community, :conditions => { :suggestion_type => 'Community' }  
31 - scope :enabled, :conditions => { :enabled => true } 29 + scope :of_person, -> { where suggestion_type: 'Person' }
  30 + scope :of_community, -> { where suggestion_type: 'Community' }
  31 + scope :enabled, -> { where enabled: true }
32 32
33 # {:category_type => ['category-icon', 'category-label']} 33 # {:category_type => ['category-icon', 'category-label']}
34 CATEGORIES = { 34 CATEGORIES = {
@@ -55,13 +55,13 @@ class ProfileSuggestion &lt; ActiveRecord::Base @@ -55,13 +55,13 @@ class ProfileSuggestion &lt; ActiveRecord::Base
55 :threshold => 2, :weight => 1, :connection => 'Profile' 55 :threshold => 2, :weight => 1, :connection => 'Profile'
56 }, 56 },
57 :people_with_common_tags => { 57 :people_with_common_tags => {
58 - :threshold => 2, :weight => 1, :connection => 'ActsAsTaggableOn::Tag' 58 + :threshold => 2, :weight => 1, :connection => 'Tag'
59 }, 59 },
60 :communities_with_common_friends => { 60 :communities_with_common_friends => {
61 :threshold => 2, :weight => 1, :connection => 'Profile' 61 :threshold => 2, :weight => 1, :connection => 'Profile'
62 }, 62 },
63 :communities_with_common_tags => { 63 :communities_with_common_tags => {
64 - :threshold => 2, :weight => 1, :connection => 'ActsAsTaggableOn::Tag' 64 + :threshold => 2, :weight => 1, :connection => 'Tag'
65 } 65 }
66 } 66 }
67 67
@@ -127,17 +127,15 @@ class ProfileSuggestion &lt; ActiveRecord::Base @@ -127,17 +127,15 @@ class ProfileSuggestion &lt; ActiveRecord::Base
127 rescue NoMethodError 127 rescue NoMethodError
128 next 128 next
129 end 129 end
130 - connections = suggested_profile.send("#{rule}_connections")  
131 - if connections.present?  
132 - connections = connections[1..-2].split(',')  
133 - else  
134 - connections = []  
135 - end  
136 - suggestion.send("#{rule}=", value) 130 +
  131 + connections = suggested_profile.send("#{rule}_connections") || []
  132 + connections = connections[1..-2] if connections.present?
137 connections.each do |connection_id| 133 connections.each do |connection_id|
138 next if SuggestionConnection.where(:suggestion_id => suggestion.id, :connection_id => connection_id, :connection_type => options[:connection]).present? 134 next if SuggestionConnection.where(:suggestion_id => suggestion.id, :connection_id => connection_id, :connection_type => options[:connection]).present?
139 - SuggestionConnection.create!(:suggestion => suggestion, :connection_id => connection_id, :connection_type => options[:connection]) 135 + SuggestionConnection.create!(:suggestion => suggestion, :connection_id => connection_id, :connection_type => options[:connection])
140 end 136 end
  137 +
  138 + suggestion.send("#{rule}=", value)
141 suggestion.score += value * options[:weight] 139 suggestion.score += value * options[:weight]
142 end 140 end
143 suggestion.save! 141 suggestion.save!
app/models/reported_image.rb
@@ -5,6 +5,7 @@ class ReportedImage &lt; ActiveRecord::Base @@ -5,6 +5,7 @@ class ReportedImage &lt; ActiveRecord::Base
5 5
6 has_attachment :content_type => :image, 6 has_attachment :content_type => :image,
7 :storage => :file_system, 7 :storage => :file_system,
8 - :max_size => 5.megabytes 8 + :max_size => 5.megabytes,
  9 + processor: 'Rmagick'
9 10
10 end 11 end
app/models/rss_feed.rb
@@ -40,7 +40,7 @@ class RssFeed &lt; Article @@ -40,7 +40,7 @@ class RssFeed &lt; Article
40 40
41 # FIXME this should be validates_numericality_of, but Rails 2.0.2 does not 41 # FIXME this should be validates_numericality_of, but Rails 2.0.2 does not
42 # support validates_numericality_of with virtual attributes 42 # support validates_numericality_of with virtual attributes
43 - validates_format_of :limit, :with => /^\d+$/, :if => :limit 43 + validates_format_of :limit, :with => /\d+/, :if => :limit
44 44
45 # determinates what to include in the feed. Possible values are +:all+ 45 # determinates what to include in the feed. Possible values are +:all+
46 # (include everything from the profile) and :parent_and_children (include 46 # (include everything from the profile) and :parent_and_children (include
@@ -69,7 +69,7 @@ class RssFeed &lt; Article @@ -69,7 +69,7 @@ class RssFeed &lt; Article
69 def fetch_articles 69 def fetch_articles
70 if parent && parent.has_posts? 70 if parent && parent.has_posts?
71 language = self.language.blank? ? {} : { :language => self.language } 71 language = self.language.blank? ? {} : { :language => self.language }
72 - return parent.posts.find(:all, :conditions => { :published => true }.merge(language), :limit => self.limit, :order => 'id desc') 72 + return parent.posts.where({published: true}.merge language).limit(self.limit).order('id desc')
73 end 73 end
74 74
75 articles = 75 articles =
app/models/scrap.rb
@@ -18,9 +18,9 @@ class Scrap &lt; ActiveRecord::Base @@ -18,9 +18,9 @@ class Scrap &lt; ActiveRecord::Base
18 after_create :create_activity 18 after_create :create_activity
19 after_update :update_activity 19 after_update :update_activity
20 20
21 - scope :all_scraps, lambda {|profile| {:conditions => ["receiver_id = ? OR sender_id = ?", profile, profile], :limit => 30}} 21 + scope :all_scraps, -> profile { limit(30).where("receiver_id = ? OR sender_id = ?", profile, profile) }
22 22
23 - scope :not_replies, :conditions => {:scrap_id => nil} 23 + scope :not_replies, -> { where scrap_id: nil }
24 24
25 track_actions :leave_scrap, :after_create, :keep_params => ['sender.name', 'content', 'receiver.name', 'receiver.url'], :if => Proc.new{|s| s.sender != s.receiver && s.sender != s.top_root.receiver}, :custom_target => :action_tracker_target, :custom_user => :sender 25 track_actions :leave_scrap, :after_create, :keep_params => ['sender.name', 'content', 'receiver.name', 'receiver.url'], :if => Proc.new{|s| s.sender != s.receiver && s.sender != s.top_root.receiver}, :custom_target => :action_tracker_target, :custom_user => :sender
26 26
app/models/search_term_occurrence.rb
1 class SearchTermOccurrence < ActiveRecord::Base 1 class SearchTermOccurrence < ActiveRecord::Base
  2 +
2 belongs_to :search_term 3 belongs_to :search_term
3 validates_presence_of :search_term 4 validates_presence_of :search_term
4 attr_accessible :search_term, :created_at, :total, :indexed 5 attr_accessible :search_term, :created_at, :total, :indexed
5 6
6 EXPIRATION_TIME = 1.year 7 EXPIRATION_TIME = 1.year
7 8
8 - scope :valid, :conditions => ["search_term_occurrences.created_at > ?", DateTime.now - EXPIRATION_TIME] 9 + scope :valid, -> { where "search_term_occurrences.created_at > ?", DateTime.now - EXPIRATION_TIME }
  10 +
9 end 11 end
app/models/slideshow_block.rb
@@ -13,7 +13,7 @@ class SlideshowBlock &lt; Block @@ -13,7 +13,7 @@ class SlideshowBlock &lt; Block
13 end 13 end
14 14
15 def gallery 15 def gallery
16 - gallery_id ? Gallery.find(:first, :conditions => { :id => gallery_id }) : nil 16 + if gallery_id then Gallery.where(id: gallery_id).first else nil end
17 end 17 end
18 18
19 def public_filename_for(image) 19 def public_filename_for(image)
app/models/suggestion_connection.rb
1 class SuggestionConnection < ActiveRecord::Base 1 class SuggestionConnection < ActiveRecord::Base
2 - attr_accessible :suggestion, :connection_type, :connection_id 2 + attr_accessible :suggestion, :suggestion_id, :connection_type, :connection_id
3 3
4 belongs_to :suggestion, :class_name => 'ProfileSuggestion', :foreign_key => 'suggestion_id' 4 belongs_to :suggestion, :class_name => 'ProfileSuggestion', :foreign_key => 'suggestion_id'
5 belongs_to :connection, :polymorphic => true 5 belongs_to :connection, :polymorphic => true
app/models/tag.rb 0 → 100644
@@ -0,0 +1,34 @@ @@ -0,0 +1,34 @@
  1 +Tag = ActsAsTaggableOn::Tag
  2 +class Tag
  3 +
  4 + attr_accessible :name, :parent_id, :pending
  5 +
  6 + has_many :children, class_name: 'Tag', foreign_key: 'parent_id', dependent: :destroy
  7 +
  8 + @@original_find = self.method(:find)
  9 + # Rename the find method to find_with_pendings that includes all tags in the search regardless if its pending or not
  10 + def self.find_with_pendings(*args)
  11 + @@original_find.call(*args)
  12 + end
  13 +
  14 + # Redefine the find method to exclude the pending tags from the search not allowing to tag something with an unapproved tag
  15 + def self.find(*args)
  16 + self.where(pending: false).find_with_pendings(*args)
  17 + end
  18 +
  19 + # Return all the tags that were suggested but not yet approved
  20 + def self.find_pendings
  21 + self.where(pending: true)
  22 + end
  23 +
  24 + # All the tags that can be a new parent for this tag, that is all but itself and its descendents to avoid loops
  25 + def parent_candidates
  26 + ActsAsTaggableOn::Tag.all - descendents - [self]
  27 + end
  28 +
  29 + # All tags that have this tag as its one of its ancestors
  30 + def descendents
  31 + children.to_a.sum([], &:descendents) + children
  32 + end
  33 +
  34 +end
app/models/task.rb
@@ -50,7 +50,7 @@ class Task &lt; ActiveRecord::Base @@ -50,7 +50,7 @@ class Task &lt; ActiveRecord::Base
50 before_validation(:on => :create) do |task| 50 before_validation(:on => :create) do |task|
51 if task.code.nil? 51 if task.code.nil?
52 task.code = Task.generate_code(task.code_length) 52 task.code = Task.generate_code(task.code_length)
53 - while (Task.find_by_code(task.code)) 53 + while Task.from_code(task.code).first
54 task.code = Task.generate_code(task.code_length) 54 task.code = Task.generate_code(task.code_length)
55 end 55 end
56 end 56 end
@@ -259,27 +259,28 @@ class Task &lt; ActiveRecord::Base @@ -259,27 +259,28 @@ class Task &lt; ActiveRecord::Base
259 end 259 end
260 end 260 end
261 261
262 - scope :pending, :conditions => { :status => Task::Status::ACTIVE }  
263 - scope :hidden, :conditions => { :status => Task::Status::HIDDEN }  
264 - scope :finished, :conditions => { :status => Task::Status::FINISHED }  
265 - scope :canceled, :conditions => { :status => Task::Status::CANCELLED }  
266 - scope :closed, :conditions => { :status => [Task::Status::CANCELLED, Task::Status::FINISHED] }  
267 - scope :opened, :conditions => { :status => [Task::Status::ACTIVE, Task::Status::HIDDEN] }  
268 - scope :of, lambda { |type| conditions = type ? "type LIKE '#{type}'" : "1=1"; {:conditions => [conditions]} }  
269 - scope :order_by, lambda { |attribute, ord| {:order => "#{attribute} #{ord}"} }  
270 - scope :like, lambda { |field, value| where("LOWER(#{field}) LIKE ?", "%#{value.downcase}%") if value}  
271 - scope :pending_all, lambda { |profile, filter_type, filter_text| 262 + scope :pending, -> { where status: Task::Status::ACTIVE }
  263 + scope :hidden, -> { where status: Task::Status::HIDDEN }
  264 + scope :finished, -> { where status: Task::Status::FINISHED }
  265 + scope :canceled, -> { where status: Task::Status::CANCELLED }
  266 + scope :closed, -> { where status: [Task::Status::CANCELLED, Task::Status::FINISHED] }
  267 + scope :opened, -> { where status: [Task::Status::ACTIVE, Task::Status::HIDDEN] }
  268 + scope :of, -> type { where "type LIKE ?", type if type }
  269 + scope :order_by, -> attribute, ord { order "#{attribute} #{ord}" }
  270 + scope :like, -> field, value { where "LOWER(#{field}) LIKE ?", "%#{value.downcase}%" if value }
  271 + scope :pending_all, -> profile, filter_type, filter_text {
272 self.to(profile).without_spam.pending.of(filter_type).like('data', filter_text) 272 self.to(profile).without_spam.pending.of(filter_type).like('data', filter_text)
273 } 273 }
274 274
275 scope :to, lambda { |profile| 275 scope :to, lambda { |profile|
276 environment_condition = nil 276 environment_condition = nil
277 if profile.person? 277 if profile.person?
278 - envs_ids = Environment.find(:all).select{ |env| profile.is_admin?(env) }.map { |env| "target_id = #{env.id}"}.join(' OR ') 278 + envs_ids = Environment.all.select{ |env| profile.is_admin?(env) }.map{ |env| "target_id = #{env.id}"}.join(' OR ')
279 environment_condition = envs_ids.blank? ? nil : "(target_type = 'Environment' AND (#{envs_ids}))" 279 environment_condition = envs_ids.blank? ? nil : "(target_type = 'Environment' AND (#{envs_ids}))"
280 end 280 end
281 profile_condition = "(target_type = 'Profile' AND target_id = #{profile.id})" 281 profile_condition = "(target_type = 'Profile' AND target_id = #{profile.id})"
282 - { :conditions => [environment_condition, profile_condition].compact.join(' OR ') } 282 +
  283 + where [environment_condition, profile_condition].compact.join(' OR ')
283 } 284 }
284 285
285 def self.pending_types_for(profile) 286 def self.pending_types_for(profile)
@@ -337,6 +338,12 @@ class Task &lt; ActiveRecord::Base @@ -337,6 +338,12 @@ class Task &lt; ActiveRecord::Base
337 end 338 end
338 end 339 end
339 340
  341 + # finds a task by its (generated) code. Only returns a task with the
  342 + # specified code AND with status = Task::Status::ACTIVE.
  343 + #
  344 + # Can be used in subclasses to find only their instances.
  345 + scope :from_code, -> code { where code: code, status: Task::Status::ACTIVE }
  346 +
340 class << self 347 class << self
341 348
342 # generates a random code string consisting of length characters (or 36 by 349 # generates a random code string consisting of length characters (or 36 by
@@ -350,14 +357,6 @@ class Task &lt; ActiveRecord::Base @@ -350,14 +357,6 @@ class Task &lt; ActiveRecord::Base
350 code 357 code
351 end 358 end
352 359
353 - # finds a task by its (generated) code. Only returns a task with the  
354 - # specified code AND with status = Task::Status::ACTIVE.  
355 - #  
356 - # Can be used in subclasses to find only their instances.  
357 - def find_by_code(code)  
358 - self.find(:first, :conditions => { :code => code, :status => Task::Status::ACTIVE })  
359 - end  
360 -  
361 def per_page 360 def per_page
362 15 361 15
363 end 362 end
app/models/thumbnail.rb
1 class Thumbnail < ActiveRecord::Base 1 class Thumbnail < ActiveRecord::Base
  2 +
  3 + attr_accessible :uploaded_data
  4 + # mass assigned by attachment_fu
  5 + attr_accessible :content_type, :filename, :thumbnail_resize_options, :thumbnail, :parent_id
  6 +
2 has_attachment :storage => :file_system, 7 has_attachment :storage => :file_system,
3 - :content_type => :image, :max_size => 5.megabytes 8 + :content_type => :image, :max_size => 5.megabytes, processor: 'Rmagick'
4 validates_as_attachment 9 validates_as_attachment
5 10
6 sanitize_filename 11 sanitize_filename
7 12
8 postgresql_attachment_fu 13 postgresql_attachment_fu
9 14
10 - attr_accessible :uploaded_data  
11 end 15 end
app/models/tiny_mce_article.rb
@@ -9,7 +9,7 @@ class TinyMceArticle &lt; TextArticle @@ -9,7 +9,7 @@ class TinyMceArticle &lt; TextArticle
9 def self.description 9 def self.description
10 _('Not accessible for visually impaired users.') 10 _('Not accessible for visually impaired users.')
11 end 11 end
12 - 12 +
13 xss_terminate :only => [ ] 13 xss_terminate :only => [ ]
14 14
15 xss_terminate :only => [ :name, :abstract, :body ], :with => 'white_list', :on => 'validation' 15 xss_terminate :only => [ :name, :abstract, :body ], :with => 'white_list', :on => 'validation'
app/models/uploaded_file.rb
@@ -63,7 +63,8 @@ class UploadedFile &lt; Article @@ -63,7 +63,8 @@ class UploadedFile &lt; Article
63 has_attachment :storage => :file_system, 63 has_attachment :storage => :file_system,
64 :thumbnails => { :icon => [24,24], :bigicon => [50,50], :thumb => '130x130>', :slideshow => '320x240>', :display => '640X480>' }, 64 :thumbnails => { :icon => [24,24], :bigicon => [50,50], :thumb => '130x130>', :slideshow => '320x240>', :display => '640X480>' },
65 :thumbnail_class => Thumbnail, 65 :thumbnail_class => Thumbnail,
66 - :max_size => self.max_size 66 + :max_size => self.max_size,
  67 + processor: 'Rmagick'
67 68
68 validates_attachment :size => N_("{fn} of uploaded file was larger than the maximum size of %{size}").sub('%{size}', self.max_size.to_humanreadable).fix_i18n 69 validates_attachment :size => N_("{fn} of uploaded file was larger than the maximum size of %{size}").sub('%{size}', self.max_size.to_humanreadable).fix_i18n
69 70
app/models/user.rb
@@ -102,7 +102,8 @@ class User &lt; ActiveRecord::Base @@ -102,7 +102,8 @@ class User &lt; ActiveRecord::Base
102 end 102 end
103 end 103 end
104 104
105 - has_one :person, :dependent => :destroy 105 + # set autosave to false as we do manually when needed and Person syncs with us
  106 + has_one :person, dependent: :destroy, autosave: false
106 belongs_to :environment 107 belongs_to :environment
107 108
108 has_many :sessions, dependent: :destroy 109 has_many :sessions, dependent: :destroy
@@ -356,12 +357,12 @@ class User &lt; ActiveRecord::Base @@ -356,12 +357,12 @@ class User &lt; ActiveRecord::Base
356 end 357 end
357 358
358 def name 359 def name
359 - name = (self[:name] || login) 360 + name = (@name || login)
360 person.nil? ? name : (person.name || name) 361 person.nil? ? name : (person.name || name)
361 end 362 end
362 363
363 def name= name 364 def name= name
364 - self[:name] = name 365 + @name = name
365 end 366 end
366 367
367 def enable_email! 368 def enable_email!
app/views/categories/_category.html.erb
@@ -15,7 +15,7 @@ @@ -15,7 +15,7 @@
15 <div> 15 <div>
16 <%= link_to _('Add subcategory'), :action => 'new', :parent_id => category %> 16 <%= link_to _('Add subcategory'), :action => 'new', :parent_id => category %>
17 <%= link_to _('Edit'), :action => 'edit', :id => category %> 17 <%= link_to _('Edit'), :action => 'edit', :id => category %>
18 - <%= link_to _('Remove'), { :action => 'remove', :id => category, }, :method => 'post', :confirm => (category.children.empty? ? (_('Are you sure you want to remove "%s"?') % category.name) : (_('Are you sure you want to remove "%s" and all its subcategories?') % category.name) ) %> 18 + <%= link_to _('Remove'), { action: 'remove', id: category, }, method: 'post', data: {confirm: if category.children.empty? then _('Are you sure you want to remove "%s"?') % category.name else _('Are you sure you want to remove "%s" and all its subcategories?') % category.name end} %>
19 </div> 19 </div>
20 </div> 20 </div>
21 21
app/views/cms/edit.html.erb
@@ -9,7 +9,7 @@ @@ -9,7 +9,7 @@
9 9
10 <%= hidden_field_tag('success_back_to', @success_back_to) %> 10 <%= hidden_field_tag('success_back_to', @success_back_to) %>
11 11
12 - <%= render :partial => partial_for_class(@article.class), :locals => { :f => f } %> 12 + <%= render_partial_for_class @article.class, f: f %>
13 13
14 <% if environment.is_portal_community?(profile) %> 14 <% if environment.is_portal_community?(profile) %>
15 <div> 15 <div>
@@ -58,7 +58,7 @@ @@ -58,7 +58,7 @@
58 58
59 <% unless @article.new_record? %> 59 <% unless @article.new_record? %>
60 <%= button :delete, _('Delete'), {:controller => :cms, :action => :destroy, :id => @article}, 60 <%= button :delete, _('Delete'), {:controller => :cms, :action => :destroy, :id => @article},
61 - :method => :post, :confirm => delete_article_message(@article) %> 61 + :method => :post, data: {confirm: delete_article_message(@article)} %>
62 <% end %> 62 <% end %>
63 <% end %> 63 <% end %>
64 <% end %> 64 <% end %>
app/views/comment/_comment_form.html.erb
@@ -55,7 +55,7 @@ function check_captcha(button, confirm_action) { @@ -55,7 +55,7 @@ function check_captcha(button, confirm_action) {
55 <div class="post_comment_box <%= ((defined? show_form) && show_form) ? 'opened' : 'closed' %>"> 55 <div class="post_comment_box <%= ((defined? show_form) && show_form) ? 'opened' : 'closed' %>">
56 56
57 <%= link_to(_('Post a comment'), '#', :class => 'display-comment-form') if display_link && @comment.reply_of_id.blank? %> 57 <%= link_to(_('Post a comment'), '#', :class => 'display-comment-form') if display_link && @comment.reply_of_id.blank? %>
58 -<%= remote_form_for(:comment, @comment, :url => {:profile => profile.identifier, :controller => 'comment', :action => (edition_mode ? 'update' : 'create'), :id => (edition_mode ? @comment.id : @page.id)}, :html => { :class => 'comment_form' } ) do |f| %> 58 +<%= remote_form_for(@comment, :url => {:profile => profile.identifier, :controller => 'comment', :action => (edition_mode ? 'update' : 'create'), :id => (edition_mode ? @comment.id : @page.id)}, :html => { :class => 'comment_form' } ) do |f| %>
59 59
60 <%= required_fields_message %> 60 <%= required_fields_message %>
61 61
app/views/comment_notifier/mail_to_followers.html.erb
@@ -18,5 +18,5 @@ @@ -18,5 +18,5 @@
18 <%= _("Greetings,") %> 18 <%= _("Greetings,") %>
19 19
20 -- 20 --
21 -<%= _('%s team.') % @environment %> 21 +<%= _('%s team.') % @environment.name %>
22 <%= url_for @url %> 22 <%= url_for @url %>
app/views/comment_notifier/notification.text.erb
@@ -15,5 +15,5 @@ @@ -15,5 +15,5 @@
15 <%= _("Greetings,") %> 15 <%= _("Greetings,") %>
16 16
17 -- 17 --
18 -<%= _('%s team.') % @environment %> 18 +<%= _('%s team.') % @environment.name %>
19 <%= url_for @url %> 19 <%= url_for @url %>