Merge branch 'master' into legislation-module-stable

This commit is contained in:
Amaia Castro
2017-03-17 18:08:22 +01:00
24 changed files with 271 additions and 179 deletions

40
Gemfile
View File

@@ -1,13 +1,13 @@
source 'https://rubygems.org' source 'https://rubygems.org'
# Bundle edge Rails instead: gem 'rails', github: 'rails/rails' # Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'rails', '4.2.7.1' gem 'rails', '4.2.8'
# Use PostgreSQL # Use PostgreSQL
gem 'pg', '~> 0.19.0' gem 'pg', '~> 0.19.0'
# Use SCSS for stylesheets # Use SCSS for stylesheets
gem 'sass-rails', '~> 5.0', '>= 5.0.4' gem 'sass-rails', '~> 5.0', '>= 5.0.4'
# Use Uglifier as compressor for JavaScript assets # Use Uglifier as compressor for JavaScript assets
gem 'uglifier', '>= 3.0.4' gem 'uglifier', '~> 3.1.6'
# Use CoffeeScript for .coffee assets and views # Use CoffeeScript for .coffee assets and views
gem 'coffee-rails', '~> 4.2.1' gem 'coffee-rails', '~> 4.2.1'
# See https://github.com/rails/execjs#readme for more supported runtimes # See https://github.com/rails/execjs#readme for more supported runtimes
@@ -40,11 +40,11 @@ gem 'foundation_rails_helper', '~> 2.0.0'
gem 'acts_as_votable' gem 'acts_as_votable'
gem 'ckeditor', '~> 4.2.2' gem 'ckeditor', '~> 4.2.2'
gem 'invisible_captcha', '~> 0.9.2' gem 'invisible_captcha', '~> 0.9.2'
gem 'cancancan' gem 'cancancan', '~> 1.16.0'
gem 'social-share-button' gem 'social-share-button'
gem 'initialjs-rails', '0.2.0.4' gem 'initialjs-rails', '0.2.0.4'
gem 'unicorn', '~> 5.2.0' gem 'unicorn', '~> 5.2.0'
gem 'paranoia', '~> 2.2.0' gem 'paranoia', '~> 2.2.1'
gem 'rinku', '~> 2.0.2', require: 'rails_rinku' gem 'rinku', '~> 2.0.2', require: 'rails_rinku'
gem 'savon' gem 'savon'
gem 'dalli' gem 'dalli'
@@ -52,18 +52,18 @@ gem 'rollbar', '~> 2.14.0'
gem 'delayed_job_active_record', '~> 4.1.0' gem 'delayed_job_active_record', '~> 4.1.0'
gem 'daemons' gem 'daemons'
gem 'devise-async' gem 'devise-async'
gem 'newrelic_rpm', '~> 3.17.2.327' gem 'newrelic_rpm', '~> 3.18.1.330'
gem 'whenever', require: false gem 'whenever', require: false
gem 'pg_search' gem 'pg_search'
gem 'sitemap_generator' gem 'sitemap_generator', '~> 5.3.1'
gem 'ahoy_matey', '~> 1.5.3' gem 'ahoy_matey', '~> 1.5.3'
gem 'groupdate', '~> 3.1.0' # group temporary data gem 'groupdate', '~> 3.2.0' # group temporary data
gem 'tolk', '~> 2.0.0' # Web interface for translations gem 'tolk', '~> 2.0.0' # Web interface for translations
gem 'browser' gem 'browser'
gem 'turnout', '~> 2.4.0' gem 'turnout', '~> 2.4.0'
gem 'redcarpet' gem 'redcarpet', '~> 3.4.0'
gem 'rails-assets-markdown-it', source: 'https://rails-assets.org' gem 'rails-assets-markdown-it', source: 'https://rails-assets.org'
@@ -76,28 +76,28 @@ group :development, :test do
gem 'spring' gem 'spring'
gem 'spring-commands-rspec' gem 'spring-commands-rspec'
gem 'rspec-rails', '~> 3.5' gem 'rspec-rails', '~> 3.5'
gem 'capybara' gem 'capybara', '~> 2.12.1'
gem 'factory_girl_rails' gem 'factory_girl_rails', '~> 4.8.0'
gem 'fuubar' gem 'fuubar'
gem 'launchy' gem 'launchy'
gem 'quiet_assets' gem 'quiet_assets'
gem 'letter_opener_web', '~> 1.3.0' gem 'letter_opener_web', '~> 1.3.1'
gem 'i18n-tasks' gem 'i18n-tasks', '~> 0.9.12'
gem 'capistrano', '3.5.0', require: false gem 'capistrano', '~> 3.7.2', require: false
gem 'capistrano-bundler', '~> 1.2', require: false gem 'capistrano-bundler', '~> 1.2', require: false
gem "capistrano-rails", '1.1.8', require: false gem "capistrano-rails", '~> 1.2.3', require: false
gem 'rvm1-capistrano3', require: false gem 'rvm1-capistrano3', require: false
gem 'capistrano3-delayed-job', '~> 1.0' gem 'capistrano3-delayed-job', '~> 1.7.3'
gem "bullet" gem "bullet", '~> 5.5.1'
gem "faker" gem "faker", '~> 1.7.3'
gem 'rubocop', '~> 0.45.0', require: false gem 'rubocop', '~> 0.47.1', require: false
gem 'knapsack' gem 'knapsack'
end end
group :test do group :test do
gem 'database_cleaner' gem 'database_cleaner'
gem 'poltergeist' gem 'poltergeist', '~> 1.13.0'
gem 'coveralls', require: false gem 'coveralls', '~> 0.8.19', require: false
gem 'email_spec' gem 'email_spec'
end end

View File

@@ -2,46 +2,46 @@ GEM
remote: https://rubygems.org/ remote: https://rubygems.org/
remote: https://rails-assets.org/ remote: https://rails-assets.org/
specs: specs:
actionmailer (4.2.7.1) actionmailer (4.2.8)
actionpack (= 4.2.7.1) actionpack (= 4.2.8)
actionview (= 4.2.7.1) actionview (= 4.2.8)
activejob (= 4.2.7.1) activejob (= 4.2.8)
mail (~> 2.5, >= 2.5.4) mail (~> 2.5, >= 2.5.4)
rails-dom-testing (~> 1.0, >= 1.0.5) rails-dom-testing (~> 1.0, >= 1.0.5)
actionpack (4.2.7.1) actionpack (4.2.8)
actionview (= 4.2.7.1) actionview (= 4.2.8)
activesupport (= 4.2.7.1) activesupport (= 4.2.8)
rack (~> 1.6) rack (~> 1.6)
rack-test (~> 0.6.2) rack-test (~> 0.6.2)
rails-dom-testing (~> 1.0, >= 1.0.5) rails-dom-testing (~> 1.0, >= 1.0.5)
rails-html-sanitizer (~> 1.0, >= 1.0.2) rails-html-sanitizer (~> 1.0, >= 1.0.2)
actionview (4.2.7.1) actionview (4.2.8)
activesupport (= 4.2.7.1) activesupport (= 4.2.8)
builder (~> 3.1) builder (~> 3.1)
erubis (~> 2.7.0) erubis (~> 2.7.0)
rails-dom-testing (~> 1.0, >= 1.0.5) rails-dom-testing (~> 1.0, >= 1.0.5)
rails-html-sanitizer (~> 1.0, >= 1.0.2) rails-html-sanitizer (~> 1.0, >= 1.0.3)
activejob (4.2.7.1) activejob (4.2.8)
activesupport (= 4.2.7.1) activesupport (= 4.2.8)
globalid (>= 0.3.0) globalid (>= 0.3.0)
activemodel (4.2.7.1) activemodel (4.2.8)
activesupport (= 4.2.7.1) activesupport (= 4.2.8)
builder (~> 3.1) builder (~> 3.1)
activerecord (4.2.7.1) activerecord (4.2.8)
activemodel (= 4.2.7.1) activemodel (= 4.2.8)
activesupport (= 4.2.7.1) activesupport (= 4.2.8)
arel (~> 6.0) arel (~> 6.0)
activesupport (4.2.7.1) activesupport (4.2.8)
i18n (~> 0.7) i18n (~> 0.7)
json (~> 1.7, >= 1.7.7)
minitest (~> 5.1) minitest (~> 5.1)
thread_safe (~> 0.3, >= 0.3.4) thread_safe (~> 0.3, >= 0.3.4)
tzinfo (~> 1.1) tzinfo (~> 1.1)
acts-as-taggable-on (3.5.0) acts-as-taggable-on (3.5.0)
activerecord (>= 3.2, < 5) activerecord (>= 3.2, < 5)
acts_as_votable (0.10.0) acts_as_votable (0.10.0)
addressable (2.4.0) addressable (2.5.0)
ahoy_matey (1.5.3) public_suffix (~> 2.0, >= 2.0.2)
ahoy_matey (1.5.4)
addressable addressable
browser (~> 2.0) browser (~> 2.0)
geocoder geocoder
@@ -52,14 +52,14 @@ GEM
safely_block (>= 0.1.1) safely_block (>= 0.1.1)
user_agent_parser user_agent_parser
uuidtools uuidtools
airbrussh (1.1.1) airbrussh (1.1.2)
sshkit (>= 1.6.1, != 1.7.0) sshkit (>= 1.6.1, != 1.7.0)
akami (1.3.1) akami (1.3.1)
gyoku (>= 0.4.0) gyoku (>= 0.4.0)
nokogiri nokogiri
ancestry (2.2.2) ancestry (2.2.2)
activerecord (>= 3.0.0) activerecord (>= 3.0.0)
arel (6.0.3) arel (6.0.4)
ast (2.3.0) ast (2.3.0)
babel-source (5.8.35) babel-source (5.8.35)
babel-transpiler (0.7.0) babel-transpiler (0.7.0)
@@ -67,13 +67,13 @@ GEM
execjs (~> 2.0) execjs (~> 2.0)
bcrypt (3.1.11) bcrypt (3.1.11)
browser (2.3.0) browser (2.3.0)
builder (3.2.2) builder (3.2.3)
bullet (5.4.2) bullet (5.5.1)
activesupport (>= 3.0.0) activesupport (>= 3.0.0)
uniform_notifier (~> 1.10.0) uniform_notifier (~> 1.10.0)
byebug (9.0.6) byebug (9.0.6)
cancancan (1.15.0) cancancan (1.16.0)
capistrano (3.5.0) capistrano (3.7.2)
airbrussh (>= 1.0.0) airbrussh (>= 1.0.0)
capistrano-harrow capistrano-harrow
i18n i18n
@@ -83,12 +83,13 @@ GEM
capistrano (~> 3.1) capistrano (~> 3.1)
sshkit (~> 1.2) sshkit (~> 1.2)
capistrano-harrow (0.5.3) capistrano-harrow (0.5.3)
capistrano-rails (1.1.8) capistrano-rails (1.2.3)
capistrano (~> 3.1) capistrano (~> 3.1)
capistrano-bundler (~> 1.1) capistrano-bundler (~> 1.1)
capistrano3-delayed-job (1.7.2) capistrano3-delayed-job (1.7.3)
capistrano (~> 3.0, >= 3.0.0) capistrano (~> 3.0, >= 3.0.0)
capybara (2.7.1) daemons (~> 1.2.4)
capybara (2.12.1)
addressable addressable
mime-types (>= 1.16) mime-types (>= 1.16)
nokogiri (>= 1.3.3) nokogiri (>= 1.3.3)
@@ -113,7 +114,7 @@ GEM
execjs execjs
coffee-script-source (1.10.0) coffee-script-source (1.10.0)
concurrent-ruby (1.0.4) concurrent-ruby (1.0.4)
coveralls (0.8.17) coveralls (0.8.19)
json (>= 1.8, < 3) json (>= 1.8, < 3)
simplecov (~> 0.12.0) simplecov (~> 0.12.0)
term-ansicolor (~> 1.3) term-ansicolor (~> 1.3)
@@ -153,12 +154,12 @@ GEM
errbase (0.0.3) errbase (0.0.3)
erubis (2.7.0) erubis (2.7.0)
execjs (2.7.0) execjs (2.7.0)
factory_girl (4.7.0) factory_girl (4.8.0)
activesupport (>= 3.0.0) activesupport (>= 3.0.0)
factory_girl_rails (4.7.0) factory_girl_rails (4.8.0)
factory_girl (~> 4.7.0) factory_girl (~> 4.8.0)
railties (>= 3.0.0) railties (>= 3.0.0)
faker (1.6.6) faker (1.7.3)
i18n (~> 0.5) i18n (~> 0.5)
faraday (0.9.2) faraday (0.9.2)
multipart-post (>= 1.2, < 3) multipart-post (>= 1.2, < 3)
@@ -175,10 +176,10 @@ GEM
fuubar (2.2.0) fuubar (2.2.0)
rspec-core (~> 3.0) rspec-core (~> 3.0)
ruby-progressbar (~> 1.4) ruby-progressbar (~> 1.4)
geocoder (1.4.1) geocoder (1.4.3)
globalid (0.3.7) globalid (0.3.7)
activesupport (>= 4.1.0) activesupport (>= 4.1.0)
groupdate (3.1.1) groupdate (3.2.0)
activesupport (>= 3) activesupport (>= 3)
gyoku (1.3.1) gyoku (1.3.1)
builder (>= 2.1.2) builder (>= 2.1.2)
@@ -187,8 +188,8 @@ GEM
htmlentities (4.3.4) htmlentities (4.3.4)
httpi (2.4.1) httpi (2.4.1)
rack rack
i18n (0.7.0) i18n (0.8.1)
i18n-tasks (0.9.6) i18n-tasks (0.9.12)
activesupport (>= 4.0.2) activesupport (>= 4.0.2)
ast (>= 2.1.0) ast (>= 2.1.0)
easy_translate (>= 0.5.0) easy_translate (>= 0.5.0)
@@ -208,7 +209,7 @@ GEM
thor (>= 0.14, < 2.0) thor (>= 0.14, < 2.0)
jquery-ui-rails (5.0.5) jquery-ui-rails (5.0.5)
railties (>= 3.2.16) railties (>= 3.2.16)
json (1.8.3) json (1.8.6)
jwt (1.5.4) jwt (1.5.4)
kaminari (0.17.0) kaminari (0.17.0)
actionpack (>= 3.0.0) actionpack (>= 3.0.0)
@@ -221,7 +222,7 @@ GEM
addressable (~> 2.3) addressable (~> 2.3)
letter_opener (1.4.1) letter_opener (1.4.1)
launchy (~> 2.2) launchy (~> 2.2)
letter_opener_web (1.3.0) letter_opener_web (1.3.1)
actionmailer (>= 3.2) actionmailer (>= 3.2)
letter_opener (~> 1.0) letter_opener (~> 1.0)
railties (>= 3.2) railties (>= 3.2)
@@ -239,9 +240,9 @@ GEM
multipart-post (2.0.0) multipart-post (2.0.0)
net-scp (1.2.1) net-scp (1.2.1)
net-ssh (>= 2.6.5) net-ssh (>= 2.6.5)
net-ssh (3.2.0) net-ssh (4.1.0)
newrelic_rpm (3.17.2.327) newrelic_rpm (3.18.1.330)
nokogiri (1.6.8.1) nokogiri (1.7.0.1)
mini_portile2 (~> 2.1.0) mini_portile2 (~> 2.1.0)
nori (2.6.0) nori (2.6.0)
oauth (0.5.0) oauth (0.5.0)
@@ -271,20 +272,21 @@ GEM
json (~> 1.3) json (~> 1.3)
omniauth-oauth (~> 1.1) omniauth-oauth (~> 1.1)
orm_adapter (0.5.0) orm_adapter (0.5.0)
paranoia (2.2.0) paranoia (2.2.1)
activerecord (>= 4.0, < 5.1) activerecord (>= 4.0, < 5.1)
parser (2.3.3.1) parser (2.4.0.0)
ast (~> 2.2) ast (~> 2.2)
pg (0.19.0) pg (0.19.0)
pg_search (1.0.6) pg_search (1.0.6)
activerecord (>= 3.1) activerecord (>= 3.1)
activesupport (>= 3.1) activesupport (>= 3.1)
arel arel
poltergeist (1.10.0) poltergeist (1.13.0)
capybara (~> 2.1) capybara (~> 2.1)
cliver (~> 0.3.1) cliver (~> 0.3.1)
websocket-driver (>= 0.2.0) websocket-driver (>= 0.2.0)
powerpack (0.1.1) powerpack (0.1.1)
public_suffix (2.0.5)
quiet_assets (1.1.0) quiet_assets (1.1.0)
railties (>= 3.1, < 5.0) railties (>= 3.1, < 5.0)
rack (1.6.5) rack (1.6.5)
@@ -294,37 +296,37 @@ GEM
rack rack
rack-test (0.6.3) rack-test (0.6.3)
rack (>= 1.0) rack (>= 1.0)
rails (4.2.7.1) rails (4.2.8)
actionmailer (= 4.2.7.1) actionmailer (= 4.2.8)
actionpack (= 4.2.7.1) actionpack (= 4.2.8)
actionview (= 4.2.7.1) actionview (= 4.2.8)
activejob (= 4.2.7.1) activejob (= 4.2.8)
activemodel (= 4.2.7.1) activemodel (= 4.2.8)
activerecord (= 4.2.7.1) activerecord (= 4.2.8)
activesupport (= 4.2.7.1) activesupport (= 4.2.8)
bundler (>= 1.3.0, < 2.0) bundler (>= 1.3.0, < 2.0)
railties (= 4.2.7.1) railties (= 4.2.8)
sprockets-rails sprockets-rails
rails-assets-markdown-it (8.2.1) rails-assets-markdown-it (8.2.1)
rails-deprecated_sanitizer (1.0.3) rails-deprecated_sanitizer (1.0.3)
activesupport (>= 4.2.0.alpha) activesupport (>= 4.2.0.alpha)
rails-dom-testing (1.0.7) rails-dom-testing (1.0.8)
activesupport (>= 4.2.0.beta, < 5.0) activesupport (>= 4.2.0.beta, < 5.0)
nokogiri (~> 1.6.0) nokogiri (~> 1.6)
rails-deprecated_sanitizer (>= 1.0.1) rails-deprecated_sanitizer (>= 1.0.1)
rails-html-sanitizer (1.0.3) rails-html-sanitizer (1.0.3)
loofah (~> 2.0) loofah (~> 2.0)
railties (4.2.7.1) railties (4.2.8)
actionpack (= 4.2.7.1) actionpack (= 4.2.8)
activesupport (= 4.2.7.1) activesupport (= 4.2.8)
rake (>= 0.8.7) rake (>= 0.8.7)
thor (>= 0.18.1, < 2.0) thor (>= 0.18.1, < 2.0)
rainbow (2.1.0) rainbow (2.2.1)
raindrops (0.17.0) raindrops (0.17.0)
rake (12.0.0) rake (12.0.0)
redcarpet (3.3.4) redcarpet (3.4.0)
referer-parser (0.3.0) referer-parser (0.3.0)
request_store (1.3.1) request_store (1.3.2)
responders (2.3.0) responders (2.3.0)
railties (>= 4.2.0, < 5.1) railties (>= 4.2.0, < 5.1)
rinku (2.0.2) rinku (2.0.2)
@@ -347,8 +349,8 @@ GEM
rspec-mocks (~> 3.5.0) rspec-mocks (~> 3.5.0)
rspec-support (~> 3.5.0) rspec-support (~> 3.5.0)
rspec-support (3.5.0) rspec-support (3.5.0)
rubocop (0.45.0) rubocop (0.47.1)
parser (>= 2.3.1.1, < 3.0) parser (>= 2.3.3.1, < 3.0)
powerpack (~> 0.1) powerpack (~> 0.1)
rainbow (>= 1.99.1, < 3.0) rainbow (>= 1.99.1, < 3.0)
ruby-progressbar (~> 1.7) ruby-progressbar (~> 1.7)
@@ -358,7 +360,7 @@ GEM
capistrano (~> 3.0) capistrano (~> 3.0)
sshkit (>= 1.2) sshkit (>= 1.2)
safe_yaml (1.0.4) safe_yaml (1.0.4)
safely_block (0.1.1) safely_block (0.2.0)
errbase errbase
sass (3.4.22) sass (3.4.22)
sass-rails (5.0.6) sass-rails (5.0.6)
@@ -380,7 +382,7 @@ GEM
json (>= 1.8, < 3) json (>= 1.8, < 3)
simplecov-html (~> 0.10.0) simplecov-html (~> 0.10.0)
simplecov-html (0.10.0) simplecov-html (0.10.0)
sitemap_generator (5.2.0) sitemap_generator (5.3.1)
builder (~> 3.0) builder (~> 3.0)
social-share-button (0.3.1) social-share-button (0.3.1)
coffee-rails coffee-rails
@@ -399,7 +401,7 @@ GEM
actionpack (>= 4.0) actionpack (>= 4.0)
activesupport (>= 4.0) activesupport (>= 4.0)
sprockets (>= 3.0.0) sprockets (>= 3.0.0)
sshkit (1.11.4) sshkit (1.12.0)
net-scp (>= 1.1.2) net-scp (>= 1.1.2)
net-ssh (>= 2.8.0) net-ssh (>= 2.8.0)
term-ansicolor (1.4.0) term-ansicolor (1.4.0)
@@ -408,10 +410,10 @@ GEM
unicode-display_width (~> 1.1.1) unicode-display_width (~> 1.1.1)
thor (0.19.4) thor (0.19.4)
thread (0.2.2) thread (0.2.2)
thread_safe (0.3.5) thread_safe (0.3.6)
tilt (2.0.5) tilt (2.0.5)
timecop (0.8.1) timecop (0.8.1)
tins (1.13.0) tins (1.13.2)
tolk (2.0.0) tolk (2.0.0)
rails (>= 4.0) rails (>= 4.0)
safe_yaml (>= 0.8.6) safe_yaml (>= 0.8.6)
@@ -424,9 +426,9 @@ GEM
tilt (>= 1.4, < 3) tilt (>= 1.4, < 3)
tzinfo (1.2.2) tzinfo (1.2.2)
thread_safe (~> 0.1) thread_safe (~> 0.1)
uglifier (3.0.4) uglifier (3.1.6)
execjs (>= 0.3.0, < 3) execjs (>= 0.3.0, < 3)
unicode-display_width (1.1.1) unicode-display_width (1.1.3)
unicorn (5.2.0) unicorn (5.2.0)
kgio (~> 2.6) kgio (~> 2.6)
raindrops (~> 0.7) raindrops (~> 0.7)
@@ -442,7 +444,7 @@ GEM
activemodel (>= 4.2) activemodel (>= 4.2)
debug_inspector debug_inspector
railties (>= 4.2) railties (>= 4.2)
websocket-driver (0.6.4) websocket-driver (0.6.5)
websocket-extensions (>= 0.1.0) websocket-extensions (>= 0.1.0)
websocket-extensions (0.1.2) websocket-extensions (0.1.2)
whenever (0.9.7) whenever (0.9.7)
@@ -459,18 +461,18 @@ DEPENDENCIES
ahoy_matey (~> 1.5.3) ahoy_matey (~> 1.5.3)
ancestry (~> 2.2.2) ancestry (~> 2.2.2)
browser browser
bullet bullet (~> 5.5.1)
byebug byebug
cancancan cancancan (~> 1.16.0)
capistrano (= 3.5.0) capistrano (~> 3.7.2)
capistrano-bundler (~> 1.2) capistrano-bundler (~> 1.2)
capistrano-rails (= 1.1.8) capistrano-rails (~> 1.2.3)
capistrano3-delayed-job (~> 1.0) capistrano3-delayed-job (~> 1.7.3)
capybara capybara (~> 2.12.1)
ckeditor (~> 4.2.2) ckeditor (~> 4.2.2)
cocoon cocoon
coffee-rails (~> 4.2.1) coffee-rails (~> 4.2.1)
coveralls coveralls (~> 0.8.19)
daemons daemons
dalli dalli
database_cleaner database_cleaner
@@ -479,13 +481,13 @@ DEPENDENCIES
devise-async devise-async
devise_security_extension devise_security_extension
email_spec email_spec
factory_girl_rails factory_girl_rails (~> 4.8.0)
faker faker (~> 1.7.3)
foundation-rails (~> 6.2.4.0) foundation-rails (~> 6.2.4.0)
foundation_rails_helper (~> 2.0.0) foundation_rails_helper (~> 2.0.0)
fuubar fuubar
groupdate (~> 3.1.0) groupdate (~> 3.2.0)
i18n-tasks i18n-tasks (~> 0.9.12)
initialjs-rails (= 0.2.0.4) initialjs-rails (= 0.2.0.4)
invisible_captcha (~> 0.9.2) invisible_captcha (~> 0.9.2)
jquery-rails (~> 4.2.2) jquery-rails (~> 4.2.2)
@@ -493,29 +495,29 @@ DEPENDENCIES
kaminari kaminari
knapsack knapsack
launchy launchy
letter_opener_web (~> 1.3.0) letter_opener_web (~> 1.3.1)
newrelic_rpm (~> 3.17.2.327) newrelic_rpm (~> 3.18.1.330)
omniauth omniauth
omniauth-facebook (~> 3.0.0) omniauth-facebook (~> 3.0.0)
omniauth-google-oauth2 (~> 0.4.0) omniauth-google-oauth2 (~> 0.4.0)
omniauth-twitter omniauth-twitter
paranoia (~> 2.2.0) paranoia (~> 2.2.1)
pg (~> 0.19.0) pg (~> 0.19.0)
pg_search pg_search
poltergeist poltergeist (~> 1.13.0)
quiet_assets quiet_assets
rails (= 4.2.7.1) rails (= 4.2.8)
rails-assets-markdown-it! rails-assets-markdown-it!
redcarpet redcarpet (~> 3.4.0)
responders (~> 2.3.0) responders (~> 2.3.0)
rinku (~> 2.0.2) rinku (~> 2.0.2)
rollbar (~> 2.14.0) rollbar (~> 2.14.0)
rspec-rails (~> 3.5) rspec-rails (~> 3.5)
rubocop (~> 0.45.0) rubocop (~> 0.47.1)
rvm1-capistrano3 rvm1-capistrano3
sass-rails (~> 5.0, >= 5.0.4) sass-rails (~> 5.0, >= 5.0.4)
savon savon
sitemap_generator sitemap_generator (~> 5.3.1)
social-share-button social-share-button
spring spring
spring-commands-rspec spring-commands-rspec
@@ -523,7 +525,10 @@ DEPENDENCIES
tolk (~> 2.0.0) tolk (~> 2.0.0)
turbolinks turbolinks
turnout (~> 2.4.0) turnout (~> 2.4.0)
uglifier (>= 3.0.4) uglifier (~> 3.1.6)
unicorn (~> 5.2.0) unicorn (~> 5.2.0)
web-console (= 3.3.0) web-console (= 3.3.0)
whenever whenever
BUNDLED WITH
1.13.7

View File

@@ -1104,11 +1104,12 @@ img.avatar, img.admin-avatar, img.moderator-avatar, img.initialjs-avatar {
// -------------------- // --------------------
[class^="level-"] { [class^="level-"] {
color: white; color: black;
} }
.is-author { .is-author {
background: #008CCF; background: #00A5F1;
color: black;
} }
.is-association { .is-association {
@@ -1167,6 +1168,9 @@ table {
.button.button-twitter, .button.button-twitter,
.button.button-facebook, .button.button-facebook,
.button.button-google { .button.button-google {
background: white;
color: $text;
font-weight: bold;
height: $line-height*2; height: $line-height*2;
line-height: $line-height*2; line-height: $line-height*2;
padding: 0; padding: 0;
@@ -1174,9 +1178,11 @@ table {
} }
.button.button-twitter { .button.button-twitter {
background: #45B0E3; background: #ECF7FC;
border-left: 3px solid #45B0E3;
&:before { &:before {
color: #45B0E3;
content: "f"; content: "f";
font-family: "icons" !important; font-family: "icons" !important;
font-size: rem-calc(24); font-size: rem-calc(24);
@@ -1214,9 +1220,11 @@ table {
} }
.button.button-facebook { .button.button-facebook {
background: #3B5998; background: #EBEEF4;
border-left: 3px solid #3B5998;
&:before { &:before {
color: #3B5998;
content: "A"; content: "A";
font-family: "icons" !important; font-family: "icons" !important;
font-size: rem-calc(24); font-size: rem-calc(24);
@@ -1254,9 +1262,11 @@ table {
} }
.button.button-google { .button.button-google {
background: #DE4C34; background: #FCEDEA;
border-left: 3px solid #DE4C34;
&:before { &:before {
color: #DE4C34;
content: "B"; content: "B";
font-family: "icons" !important; font-family: "icons" !important;
font-size: rem-calc(24); font-size: rem-calc(24);

View File

@@ -457,7 +457,7 @@
} }
.bullet { .bullet {
color: $border; color: $text;
} }
.investment-project-show p, .budget-investment-show p { .investment-project-show p, .budget-investment-show p {

View File

@@ -7,6 +7,11 @@ class Management::BudgetsController < Management::BaseController
def create_investments def create_investments
@budgets = Budget.accepting.order(created_at: :desc).page(params[:page]) @budgets = Budget.accepting.order(created_at: :desc).page(params[:page])
if current_manager_administrator?
@budgets += Budget.reviewing.order(created_at: :desc) +
Budget.selecting.order(created_at: :desc)
end
end end
def support_investments def support_investments
@@ -23,4 +28,8 @@ class Management::BudgetsController < Management::BaseController
check_verified_user t("management.budget_investments.alert.unverified_user") check_verified_user t("management.budget_investments.alert.unverified_user")
end end
def current_manager_administrator?
session[:manager]["login"].match("admin")
end
end end

View File

@@ -259,7 +259,7 @@ class Budget
private private
def set_denormalized_ids def set_denormalized_ids
self.group_id ||= self.heading.try(:group_id) self.group_id = self.heading.try(:group_id) if self.heading_id_changed?
self.budget_id ||= self.heading.try(:group).try(:budget_id) self.budget_id ||= self.heading.try(:group).try(:budget_id)
end end
end end

View File

@@ -1,6 +1,6 @@
<% if user_signed_in? %> <% if user_signed_in? %>
<li> <li>
<%= link_to notifications_path, class: "notifications", accesskey: "n" do %> <%= link_to notifications_path, class: "notifications" do %>
<span class="sr-only"><%= t("layouts.header.notifications") %></span> <span class="sr-only"><%= t("layouts.header.notifications") %></span>
<% if current_user.notifications_count > 0 %> <% if current_user.notifications_count > 0 %>
<span class="icon-circle" aria-hidden="true"></span> <span class="icon-circle" aria-hidden="true"></span>
@@ -12,19 +12,19 @@
<% end %> <% end %>
</li> </li>
<li> <li>
<%= link_to(t("layouts.header.my_activity_link"), user_path(current_user), accesskey: "a") %> <%= link_to t("layouts.header.my_activity_link"), user_path(current_user) %>
</li> </li>
<li> <li>
<%= link_to(t("layouts.header.my_account_link"), account_path, accesskey: "m") %> <%= link_to t("layouts.header.my_account_link"), account_path %>
</li> </li>
<li> <li>
<%= link_to(t("devise_views.menu.login_items.logout"), destroy_user_session_path, method: :delete) %> <%= link_to t("devise_views.menu.login_items.logout"), destroy_user_session_path, method: :delete %>
</li> </li>
<% else %> <% else %>
<li> <li>
<%= link_to(t("devise_views.menu.login_items.login"), new_user_session_path) %> <%= link_to t("devise_views.menu.login_items.login"), new_user_session_path %>
</li> </li>
<li> <li>
<%= link_to(t("devise_views.menu.login_items.signup"), new_user_registration_path, class: "button") %> <%= link_to t("devise_views.menu.login_items.signup"), new_user_registration_path, class: "button" %>
</li> </li>
<% end %> <% end %>

View File

@@ -11,18 +11,18 @@
<%= form_for(resource, as: resource_name, url: session_path(resource_name)) do |f| %> <%= form_for(resource, as: resource_name, url: session_path(resource_name)) do |f| %>
<div class="row"> <div class="row">
<div class="small-12 column"> <div class="small-12 column">
<%= f.email_field :email, autofocus: true, placeholder: t("devise_views.sessions.new.email_label"), tabindex: "1" %> <%= f.email_field :email, autofocus: true, placeholder: t("devise_views.sessions.new.email_label") %>
</div> </div>
<div class="small-12 column"> <div class="small-12 column">
<%= link_to t("devise_views.shared.links.new_password"), new_password_path(resource_name), class: "float-right", tabindex: "3" %> <%= f.password_field :password, autocomplete: "off", placeholder: t("devise_views.sessions.new.password_label") %>
<%= f.password_field :password, autocomplete: "off", placeholder: t("devise_views.sessions.new.password_label"), tabindex: "2" %> <%= link_to t("devise_views.shared.links.new_password"), new_password_path(resource_name), class: "float-right" %>
</div> </div>
<% if devise_mapping.rememberable? -%> <% if devise_mapping.rememberable? -%>
<div class="small-12 column"> <div class="small-12 column">
<%= f.label :remember_me do %> <%= f.label :remember_me do %>
<%= f.check_box :remember_me, title: t('devise_views.sessions.new.remember_me'), label: false, tabindex: "4" %> <%= f.check_box :remember_me, title: t('devise_views.sessions.new.remember_me'), label: false %>
<span class="checkbox"><%= t("devise_views.sessions.new.remember_me") %></span> <span class="checkbox"><%= t("devise_views.sessions.new.remember_me") %></span>
<% end %> <% end %>
</div> </div>
@@ -35,5 +35,3 @@
<% end %> <% end %>
<%= render "devise/shared/links" %> <%= render "devise/shared/links" %>

View File

@@ -21,7 +21,7 @@
<div id="responsive-menu"> <div id="responsive-menu">
<div class="top-bar-title"> <div class="top-bar-title">
<%= link_to root_path, class: "hide-for-small-only", accesskey: "/" do %> <%= link_to root_path, class: "hide-for-small-only", accesskey: "0" do %>
<%= image_tag('logo_header.png', class: 'hide-for-small-only float-left', size: '80x80', alt: t("layouts.header.logo")) %> <%= image_tag('logo_header.png', class: 'hide-for-small-only float-left', size: '80x80', alt: t("layouts.header.logo")) %>
<%= setting['org_name'] %> <%= setting['org_name'] %>
<% end %> <% end %>

View File

@@ -20,9 +20,11 @@
type: "image/png" %> type: "image/png" %>
<%= content_for :social_media_meta_tags %> <%= content_for :social_media_meta_tags %>
<%= setting['per_page_code'].try(:html_safe) %> <%= setting['per_page_code_head'].try(:html_safe) %>
</head> </head>
<body> <body>
<%= setting['per_page_code_body'].try(:html_safe) %>
<h1 class="sr-only"><%= setting['org_name'] %></h1> <h1 class="sr-only"><%= setting['org_name'] %></h1>
<div class="wrapper"> <div class="wrapper">

View File

@@ -19,48 +19,37 @@
<div class="small-12 medium-6"> <div class="small-12 medium-6">
<table> <table>
<caption class="sr-only">Atajos de teclado para el menú de navegación</caption>
<thead> <thead>
<tr> <tr>
<th class="text-center">Tecla</th> <th scope="col" class="text-center">Tecla</th>
<th>Página</th> <th scope="col">Página</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<tr> <tr>
<td class="text-center">/</td> <td class="text-center">0</td>
<td>Inicio</td> <td>Inicio</td>
</tr> </tr>
<tr> <tr>
<td class="text-center">D</td> <td class="text-center">1</td>
<td>Debates</td> <td>Debates</td>
</tr> </tr>
<tr> <tr>
<td class="text-center">P</td> <td class="text-center">2</td>
<td>Propuestas</td> <td>Propuestas</td>
</tr> </tr>
<tr> <tr>
<td class="text-center">L</td> <td class="text-center">3</td>
<td>Procesos legislativos</td> <td>Votaciones</td>
</tr> </tr>
<tr> <tr>
<td class="text-center">S</td> <td class="text-center">4</td>
<td>Presupuestos participativos</td> <td>Presupuestos participativos</td>
</tr> </tr>
<tr> <tr>
<td class="text-center">I</td> <td class="text-center">5</td>
<td>Más información</td> <td>Procesos legislativos</td>
</tr>
<tr>
<td class="text-center">N</td>
<td>Notificaciones</td>
</tr>
<tr>
<td class="text-center">A</td>
<td>Mi actividad</td>
</tr>
<tr>
<td class="text-center">M</td>
<td>Mi cuenta</td>
</tr> </tr>
</tbody> </tbody>
</table> </table>
@@ -70,10 +59,11 @@
<div class="small-12 medium-6"> <div class="small-12 medium-6">
<table> <table>
<caption class="sr-only">Combinación de teclas dependiendo del sistema operativo y navegador</caption>
<thead> <thead>
<tr> <tr>
<th>Navegador</th> <th scope="col">Navegador</th>
<th>Combinación de teclas</th> <th scope="col">Combinación de teclas</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
@@ -108,8 +98,8 @@
<table> <table>
<thead> <thead>
<tr> <tr>
<th>Navegador</th> <th scope="col">Navegador</th>
<th>Acción a realizar </th> <th scope="col">Acción a realizar </th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>

View File

@@ -37,7 +37,6 @@
<%= text_field_tag 'advanced_search[date_min]', <%= text_field_tag 'advanced_search[date_min]',
params[:advanced_search].try(:[], :date_min), params[:advanced_search].try(:[], :date_min),
type: "date", type: "date",
placeholder: t("shared.advanced_search.date_placeholder"),
class: 'js-calendar' %> class: 'js-calendar' %>
</div> </div>
<div class='small-12 large-6 column'> <div class='small-12 large-6 column'>
@@ -47,7 +46,6 @@
<%= text_field_tag 'advanced_search[date_max]', <%= text_field_tag 'advanced_search[date_max]',
params[:advanced_search].try(:[], :date_max), params[:advanced_search].try(:[], :date_max),
type: "date", type: "date",
placeholder: t("shared.advanced_search.date_placeholder"),
class: 'js-calendar' %> class: 'js-calendar' %>
</div> </div>
</div> </div>

View File

@@ -5,20 +5,20 @@
<%= layout_menu_link_to t("layouts.header.debates"), <%= layout_menu_link_to t("layouts.header.debates"),
debates_path, debates_path,
controller_name == 'debates', controller_name == 'debates',
accesskey: "d" %> accesskey: "1" %>
</li> </li>
<% end %> <% end %>
<li> <li>
<%= layout_menu_link_to t("layouts.header.proposals"), <%= layout_menu_link_to t("layouts.header.proposals"),
proposals_path, proposals_path,
controller_name == 'proposals', controller_name == 'proposals',
accesskey: "p" %> accesskey: "2" %>
</li> </li>
<li> <li>
<%= layout_menu_link_to t("layouts.header.proposal_ballot"), <%= layout_menu_link_to t("layouts.header.proposal_ballot"),
proposal_ballots_path, proposal_ballots_path,
controller_name == 'proposal_ballots', controller_name == 'proposal_ballots',
accesskey: "v" %> accesskey: "3" %>
</li> </li>
<% if feature?(:legislation) %> <% if feature?(:legislation) %>
<li> <li>
@@ -41,7 +41,7 @@
<%= layout_menu_link_to t("layouts.header.budgets"), <%= layout_menu_link_to t("layouts.header.budgets"),
budgets_path, budgets_path,
controller_name == "budgets" || controller_name == "investments", controller_name == "budgets" || controller_name == "investments",
accesskey: "b" %> accesskey: "4" %>
</li> </li>
<% end %> <% end %>
</ul> </ul>

View File

@@ -5,8 +5,7 @@
<% taggable.tag_list_with_limit(limit).each do |tag| %> <% taggable.tag_list_with_limit(limit).each do |tag| %>
<li class="inline-block"> <li class="inline-block">
<%= link_to sanitize(tag.name), <%= link_to sanitize(tag.name),
taggables_path(taggable.class.name.underscore, tag.name), taggables_path(taggable.class.name.underscore, tag.name) %></li>
search: tag.name %></li>
<% end %> <% end %>
<% if taggable.tags_count_out_of_limit(limit) > 0 %> <% if taggable.tags_count_out_of_limit(limit) > 0 %>

View File

@@ -2,8 +2,7 @@
<li> <li>
<%= link_to t("layouts.header.more_information"), <%= link_to t("layouts.header.more_information"),
page_path('more_information'), page_path('more_information'),
class: ("selected" if current_page?("/more_information")), class: ("selected" if current_page?("/more_information")) %>
accesskey: "i" %>
</li> </li>
<li> <li>
<%= link_to t("layouts.header.external_link_transparency"), <%= link_to t("layouts.header.external_link_transparency"),

View File

@@ -19,7 +19,7 @@
<%= f.label :username %> <%= f.label :username %>
<p class="note"><%= t("devise_views.users.registrations.new.username_note") %></p> <p class="note"><%= t("devise_views.users.registrations.new.username_note") %></p>
<%= f.text_field :username, maxlength: User.username_max_length, placeholder: t("devise_views.users.registrations.new.username_label"), label: false %> <%= f.text_field :username, autofocus: true, maxlength: User.username_max_length, placeholder: t("devise_views.users.registrations.new.username_label"), label: false %>
<%= f.invisible_captcha :family_name %> <%= f.invisible_captcha :family_name %>

View File

@@ -1354,7 +1354,8 @@ fr:
official_level_3_name: Niveau 3 personne officielle official_level_3_name: Niveau 3 personne officielle
official_level_4_name: Niveau 4 personne officielle official_level_4_name: Niveau 4 personne officielle
official_level_5_name: Niveau 5 personne officielle official_level_5_name: Niveau 5 personne officielle
per_page_code: Code à inclure dans chaque page per_page_code_head: "Code à inclure dans chaque page (<head>)"
per_page_code_body: "Code à inclure dans chaque page (<body>)"
proposal_code_prefix: Préfixe pour les codes de propositions proposal_code_prefix: Préfixe pour les codes de propositions
votes_for_proposal_success: Nombre de votes nécessaires pour l'approbation d'une votes_for_proposal_success: Nombre de votes nécessaires pour l'approbation d'une
proposition proposition

View File

@@ -1370,7 +1370,8 @@ pt-BR:
official_level_3_name: Nível 3 coordenador público official_level_3_name: Nível 3 coordenador público
official_level_4_name: Nível 4 coordenador público official_level_4_name: Nível 4 coordenador público
official_level_5_name: Nível 5 coordenador público official_level_5_name: Nível 5 coordenador público
per_page_code: Código a ser incluído em cada página per_page_code_head: "Código a ser incluído em cada página (<head>)"
per_page_code_body: "Código a ser incluído em cada página (<body>)"
proposal_code_prefix: Prefixo para códigos de Proposta proposal_code_prefix: Prefixo para códigos de Proposta
votes_for_proposal_success: Número de votos necessários para aprovar uma Proposta votes_for_proposal_success: Número de votos necessários para aprovar uma Proposta
shared: shared:

View File

@@ -13,7 +13,8 @@ en:
votes_for_proposal_success: "Number of votes necessary for approval of a Proposal" votes_for_proposal_success: "Number of votes necessary for approval of a Proposal"
months_to_archive_proposals: "Months to archive Proposals" months_to_archive_proposals: "Months to archive Proposals"
email_domain_for_officials: "Email domain for public officials" email_domain_for_officials: "Email domain for public officials"
per_page_code: "Code to be included on every page" per_page_code_head: "Code to be included on every page (<head>)"
per_page_code_body: "Code to be included on every page (<body>)"
twitter_handle: "Twitter handle" twitter_handle: "Twitter handle"
twitter_hashtag: "Twitter hashtag" twitter_hashtag: "Twitter hashtag"
facebook_handle: "Facebook handle" facebook_handle: "Facebook handle"

View File

@@ -13,7 +13,8 @@ es:
votes_for_proposal_success: "Número de votos necesarios para aprobar una Propuesta" votes_for_proposal_success: "Número de votos necesarios para aprobar una Propuesta"
months_to_archive_proposals: "Meses para archivar las Propuestas" months_to_archive_proposals: "Meses para archivar las Propuestas"
email_domain_for_officials: "Dominio de email para cargos públicos" email_domain_for_officials: "Dominio de email para cargos públicos"
per_page_code: "Código a incluir en cada página" per_page_code_head: "Código a incluir en cada página (<head>)"
per_page_code_body: "Código a incluir en cada página (<body>)"
twitter_handle: "Usuario de Twitter" twitter_handle: "Usuario de Twitter"
twitter_hashtag: "Hashtag para Twitter" twitter_hashtag: "Hashtag para Twitter"
facebook_handle: "Identificador de Facebook" facebook_handle: "Identificador de Facebook"

View File

@@ -33,7 +33,8 @@ Setting.create(key: 'feature.facebook_login', value: "true")
Setting.create(key: 'feature.google_login', value: "true") Setting.create(key: 'feature.google_login', value: "true")
Setting.create(key: 'feature.signature_sheets', value: "true") Setting.create(key: 'feature.signature_sheets', value: "true")
Setting.create(key: 'feature.legislation', value: "true") Setting.create(key: 'feature.legislation', value: "true")
Setting.create(key: 'per_page_code', value: "") Setting.create(key: 'per_page_code_head', value: "")
Setting.create(key: 'per_page_code_body', value: "")
Setting.create(key: 'comments_body_max_length', value: '1000') Setting.create(key: 'comments_body_max_length', value: '1000')
Setting.create(key: 'mailer_from_name', value: 'Consul') Setting.create(key: 'mailer_from_name', value: 'Consul')
Setting.create(key: 'mailer_from_address', value: 'noreply@consul.dev') Setting.create(key: 'mailer_from_address', value: 'noreply@consul.dev')

View File

@@ -38,8 +38,11 @@ Setting["months_to_archive_proposals"] = 12
# Emails under the domain's subdomains will also be included # Emails under the domain's subdomains will also be included
Setting["email_domain_for_officials"] = '' Setting["email_domain_for_officials"] = ''
# Code to be included at the top (header) of every page (useful for tracking) # Code to be included at the top (inside <head>) of every page (useful for tracking)
Setting['per_page_code'] = '' Setting['per_page_code_head'] = ''
# Code to be included at the top (inside <body>) of every page
Setting['per_page_code_body'] = ''
# Social settings # Social settings
Setting["twitter_handle"] = nil Setting["twitter_handle"] = nil

View File

@@ -137,6 +137,61 @@ feature 'Budget Investments' do
end end
end end
scenario "Listing - managers can see budgets in accepting phase" do
accepting_budget = create(:budget, phase: "accepting")
reviewing_budget = create(:budget, phase: "reviewing")
selecting_budget = create(:budget, phase: "selecting")
valuating_budget = create(:budget, phase: "valuating")
balloting_budget = create(:budget, phase: "balloting")
reviewing_ballots_budget = create(:budget, phase: "reviewing_ballots")
finished = create(:budget, phase: "finished")
user = create(:user, :level_two)
login_managed_user(user)
click_link "Create budget investment"
expect(page).to have_content(accepting_budget.name)
expect(page).to_not have_content(reviewing_budget.name)
expect(page).to_not have_content(selecting_budget.name)
expect(page).to_not have_content(valuating_budget.name)
expect(page).to_not have_content(balloting_budget.name)
expect(page).to_not have_content(reviewing_ballots_budget.name)
expect(page).to_not have_content(finished.name)
end
scenario "Listing - admins can see budgets in accepting, reviewing and selecting phases" do
accepting_budget = create(:budget, phase: "accepting")
reviewing_budget = create(:budget, phase: "reviewing")
selecting_budget = create(:budget, phase: "selecting")
valuating_budget = create(:budget, phase: "valuating")
balloting_budget = create(:budget, phase: "balloting")
reviewing_ballots_budget = create(:budget, phase: "reviewing_ballots")
finished = create(:budget, phase: "finished")
visit root_path
click_link "Sign out"
admin = create(:administrator)
login_as(admin.user)
user = create(:user, :level_two)
login_managed_user(user)
visit management_sign_in_path
click_link "Create budget investment"
expect(page).to have_content(accepting_budget.name)
expect(page).to have_content(reviewing_budget.name)
expect(page).to have_content(selecting_budget.name)
expect(page).to_not have_content(valuating_budget.name)
expect(page).to_not have_content(balloting_budget.name)
expect(page).to_not have_content(reviewing_ballots_budget.name)
expect(page).to_not have_content(finished.name)
end
context "Supporting" do context "Supporting" do
scenario 'Supporting budget investments on behalf of someone in index view', :js do scenario 'Supporting budget investments on behalf of someone in index view', :js do

View File

@@ -35,6 +35,25 @@ describe Budget::Investment do
expect(investment.description).to eq("alert('danger');") expect(investment.description).to eq("alert('danger');")
end end
it "set correct group and budget ids" do
budget = create(:budget)
group_1 = create(:budget_group, budget: budget)
group_2 = create(:budget_group, budget: budget)
heading_1 = create(:budget_heading, group: group_1)
heading_2 = create(:budget_heading, group: group_2)
investment = create(:budget_investment, heading: heading_1)
expect(investment.budget_id).to eq budget.id
expect(investment.group_id).to eq group_1.id
investment.update(heading: heading_2)
expect(investment.budget_id).to eq budget.id
expect(investment.group_id).to eq group_2.id
end
describe "#unfeasibility_explanation" do describe "#unfeasibility_explanation" do
it "should be valid if valuation not finished" do it "should be valid if valuation not finished" do
investment.unfeasibility_explanation = "" investment.unfeasibility_explanation = ""