Mechanical standard.rb changes

This commit is contained in:
Petko Bordjukov 2019-04-28 21:10:54 +03:00
parent 895bf8a5f3
commit e20861689f
102 changed files with 731 additions and 755 deletions

14
Capfile
View File

@ -1,8 +1,8 @@
# Load DSL and set up stages
require 'capistrano/setup'
require "capistrano/setup"
# Include default deployment tasks
require 'capistrano/deploy'
require "capistrano/deploy"
require "capistrano/scm/git"
install_plugin Capistrano::SCM::Git
@ -21,13 +21,13 @@ install_plugin Capistrano::SCM::Git
# require 'capistrano/rvm'
# require 'capistrano/rbenv'
# require 'capistrano/chruby'
require 'capistrano/bundler'
require 'capistrano/rails/assets'
require 'capistrano/rails/migrations'
require 'capistrano/puma'
require "capistrano/bundler"
require "capistrano/rails/assets"
require "capistrano/rails/migrations"
require "capistrano/puma"
# require 'capistrano/puma/nginx' # if you want to upload a nginx site template
# require 'capistrano/passenger'
# require 'capistrano/rvm'
# Load custom tasks from `lib/capistrano/tasks` if you have any defined
Dir.glob('lib/capistrano/tasks/*.rake').each { |r| import r }
Dir.glob("lib/capistrano/tasks/*.rake").each { |r| import r }

118
Gemfile
View File

@ -1,98 +1,98 @@
source 'https://rubygems.org'
source "https://rubygems.org"
gem 'rails', '~> 5.2.0'
gem 'bootsnap'
gem "rails", "~> 5.2.0"
gem "bootsnap"
gem 'sqlite3'
gem 'pg'
gem "sqlite3"
gem "pg"
gem 'sass-rails'
gem "sass-rails"
gem 'uglifier'
gem 'coffee-rails'
gem 'mini_racer', platforms: :ruby
gem 'jquery-rails'
gem "uglifier"
gem "coffee-rails"
gem "mini_racer", platforms: :ruby
gem "jquery-rails"
gem 'slim-rails'
gem "slim-rails"
gem 'rails-i18n'
gem "rails-i18n"
gem 'devise'
gem 'devise-i18n'
gem "devise"
gem "devise-i18n"
gem 'simple_form'
gem "simple_form"
# Phone validation
gem 'phony', '~> 2.15.11'
gem 'phony_rails'
gem "phony", "~> 2.15.11"
gem "phony_rails"
# Picture uploads
gem 'carrierwave'
#gem 'rmagick'
gem "carrierwave"
# gem 'rmagick'
gem "mini_magick"
gem "refile", github: 'refile/refile', require: ['refile/rails', 'refile/simple_form']
gem "refile", github: "refile/refile", require: ["refile/rails", "refile/simple_form"]
gem "image_processing"
gem 'puma', group: :production
gem "puma", group: :production
gem 'globalize'
gem "globalize"
gem 'yaml_db'
gem "yaml_db"
gem 'bootstrap-sass'
gem 'bootstrap-sass-extras'
gem 'bootswatch-rails'
gem 'autoprefixer-rails'
gem 'font-awesome-sass', '~> 4.6.2'
gem "bootstrap-sass"
gem "bootstrap-sass-extras"
gem "bootswatch-rails"
gem "autoprefixer-rails"
gem "font-awesome-sass", "~> 4.6.2"
gem 'nested_form'
gem 'jquery-datatables-rails'
gem 'morrisjs-rails'
gem 'raphael-rails'
gem "nested_form"
gem "jquery-datatables-rails"
gem "morrisjs-rails"
gem "raphael-rails"
gem 'copy_carrierwave_file'
gem "copy_carrierwave_file"
gem 'jbuilder'
gem "jbuilder"
gem 'search_object'
gem "search_object"
gem 'faraday'
gem "faraday"
gem 'rqrcode'
gem "rqrcode"
group :development do
gem 'spring'
gem 'spring-commands-rspec'
gem 'guard-rspec' # Continuous testing with Guard
gem 'rails-erd'
gem 'pry-rails'
gem "spring"
gem "spring-commands-rspec"
gem "guard-rspec" # Continuous testing with Guard
gem "rails-erd"
gem "pry-rails"
# gem 'hirb'
gem 'awesome_print'
gem 'capistrano'
gem 'capistrano-rails'
gem "awesome_print"
gem "capistrano"
gem "capistrano-rails"
# gem 'capistrano-rvm'
gem 'capistrano3-puma'
gem 'better_errors'
gem 'binding_of_caller'
gem "capistrano3-puma"
gem "better_errors"
gem "binding_of_caller"
end
group :development, :test do
gem 'rspec-rails'
gem 'factory_bot_rails'
gem 'faker'
gem 'capybara'
gem 'selenium-webdriver'
gem "rspec-rails"
gem "factory_bot_rails"
gem "faker"
gem "capybara"
gem "selenium-webdriver"
gem 'byebug'
gem 'simplecov'
gem 'i18n-tasks'
gem "byebug"
gem "simplecov"
gem "i18n-tasks"
gem 'delorean'
gem "delorean"
gem 'standard'
gem "standard"
end
group :test do
gem 'database_cleaner'
gem "database_cleaner"
end

View File

@ -1,17 +1,17 @@
# More info at https://github.com/guard/guard#readme
guard :rspec, cmd: 'spring rspec' do
guard :rspec, cmd: "spring rspec" do
watch(%r{^spec/.+_spec\.rb$})
watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
watch('spec/spec_helper.rb') { 'spec' }
watch('spec/rails_helper.rb') { 'spec' }
watch("spec/spec_helper.rb") { "spec" }
watch("spec/rails_helper.rb") { "spec" }
watch(%r{^app/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
watch(%r{^app/(.*)(\.erb|\.haml|\.slim)$}) { |m| "spec/#{m[1]}#{m[2]}_spec.rb" }
watch(%r{^app/controllers/(.+)_(controller)\.rb$}) { |m| ["spec/routing/#{m[1]}_routing_spec.rb", "spec/#{m[2]}s/#{m[1]}_#{m[2]}_spec.rb", "spec/acceptance/#{m[1]}_spec.rb"] }
watch(%r{^spec/support/(.+)\.rb$}) { 'spec' }
watch('config/routes.rb') { 'spec/routing' }
watch('app/controllers/application_controller.rb') { 'spec/controllers' }
watch(%r{^spec/support/(.+)\.rb$}) { "spec" }
watch("config/routes.rb") { "spec/routing" }
watch("app/controllers/application_controller.rb") { "spec/controllers" }
# Capybara features specs
watch(%r{^app/views/(.+)/.*\.(erb|haml|slim)$}) { |m| "spec/features/#{m[1]}_spec.rb" }

View File

@ -1,6 +1,6 @@
# Add your own tasks in files placed in lib/tasks ending in .rake,
# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
require File.expand_path('../config/application', __FILE__)
require File.expand_path("../config/application", __FILE__)
Rails.application.load_tasks

View File

@ -9,10 +9,10 @@ class ApplicationController < ActionController::Base
before_action :set_view_paths
# TODO: make this get the domain from the database
#layout Proc.new { |controller| controller.request.host }
layout 'public/application'
# layout Proc.new { |controller| controller.request.host }
layout "public/application"
def self.default_url_options(options={})
def self.default_url_options(options = {})
if I18n.locale != I18n.default_locale
options.merge({locale: I18n.locale})
else
@ -24,17 +24,16 @@ class ApplicationController < ActionController::Base
def set_locale
I18n.locale = params[:locale] || I18n.default_locale
if user_signed_in? and current_user.language != I18n.locale
if user_signed_in? && (current_user.language != I18n.locale)
current_user.update(language: I18n.locale)
end
end
def set_view_paths
# TODO: make this get the domain from the database
prepend_view_path 'lib/initfest/views' if request.host =~ /openfest/
prepend_view_path 'lib/initfest/views' if request.host =~ /example/
prepend_view_path 'lib/initfest/views' if request.host =~ /127\.0\.0/
prepend_view_path "lib/initfest/views" if request.host =~ /openfest/
prepend_view_path "lib/initfest/views" if request.host =~ /example/
prepend_view_path "lib/initfest/views" if request.host =~ /127\.0\.0/
end
protected

View File

@ -11,8 +11,8 @@ module CurrentConferenceAssigning
end
def current_conference
if not @current_conference
if @conference and not @conference.new_record?
unless @current_conference
if @conference && !@conference.new_record?
@current_conference = @conference
elsif params[:conference_id].present?
@current_conference = Conference.find(params[:conference_id])
@ -23,8 +23,8 @@ module CurrentConferenceAssigning
end
def require_current_conference!
if not current_conference?
raise ActionController::RoutingError.new('Not Found')
unless current_conference?
raise ActionController::RoutingError.new("Not Found")
end
end
end

View File

@ -1,11 +1,11 @@
require 'active_support/concern'
require "active_support/concern"
module PublicApiExposing
extend ActiveSupport::Concern
def set_access_control_headers
if request.format.json?
response.headers['Access-Control-Allow-Origin'] = '*'
response.headers["Access-Control-Allow-Origin"] = "*"
end
end

View File

@ -6,9 +6,9 @@ class ConfirmationsController < Devise::ConfirmationsController
if resource.errors.empty?
set_flash_message(:notice, :confirmed) if is_flashing_format?
sign_in(resource_name, resource)
respond_with_navigational(resource){ redirect_to after_confirmation_path_for(resource_name, resource) }
respond_with_navigational(resource) { redirect_to after_confirmation_path_for(resource_name, resource) }
else
respond_with_navigational(resource.errors, status: :unprocessable_entity){ render :new }
respond_with_navigational(resource.errors, status: :unprocessable_entity) { render :new }
end
end
end

View File

@ -2,10 +2,10 @@ module Management
class ConferencesController < ManagementController
def new
@conference = Conference.new
@conference.event_types.build(name: 'Event type 1')
@conference.tracks.build(name: 'Track 1')
@conference.halls.build(name: 'Hall 1')
@conference.volunteer_teams.build(name: 'Volunteer Team 1')
@conference.event_types.build(name: "Event type 1")
@conference.tracks.build(name: "Track 1")
@conference.halls.build(name: "Hall 1")
@conference.volunteer_teams.build(name: "Volunteer Team 1")
end
def create
@ -49,13 +49,13 @@ module Management
begin
if @conference.update_vote_data!
flash[:notice] = t('.vote_data_successfully_updated')
flash[:notice] = t(".vote_data_successfully_updated")
else
flash[:alert] = t('.error_during_vote_data_save')
flash[:alert] = t(".error_during_vote_data_save")
end
redirect_back fallback_location: [:management, @conference]
rescue StandardError => e
flash[:alert] = t('.error_during_connection_with_voting_endpoint', error: e.message)
rescue => e
flash[:alert] = t(".error_during_connection_with_voting_endpoint", error: e.message)
render :vote_results
end
end
@ -75,9 +75,9 @@ module Management
:title, :email, :start_date, :end_date, :description, :host_name,
:planned_cfp_end_date, :vote_data_endpoint,
event_types_attributes: [:id, :name, :description, :maximum_length,
:minimum_length, :_destroy],
:minimum_length, :_destroy,],
tracks_attributes: [:id, :name, :color, :css_class, :description,
:css_style, :foreground_color, :_destroy],
:css_style, :foreground_color, :_destroy,],
halls_attributes: [:id, :name, :_destroy],
volunteer_teams_attributes: [:id, :name, :description, :color, :_destroy]
)

View File

@ -22,10 +22,10 @@ module Management
@event = @conference.events.find(params[:id])
if @event.update(event_params)
flash[:notice] = t('.event_successfully_updated')
flash[:notice] = t(".event_successfully_updated")
redirect_to [:management, @conference, @event]
else
render action: 'edit'
render action: "edit"
end
end
@ -51,22 +51,22 @@ module Management
def event_params
params.require(:event).permit(
:title,
:subtitle,
:length,
:language,
:abstract,
:description,
:notes,
:track_id,
:event_type_id,
participations_attributes: [
:id,
:participant_id,
:approved,
:_destroy
]
)
:title,
:subtitle,
:length,
:language,
:abstract,
:description,
:notes,
:track_id,
:event_type_id,
participations_attributes: [
:id,
:participant_id,
:approved,
:_destroy,
]
)
end
end
end

View File

@ -1,9 +1,9 @@
require 'csv'
require "csv"
module Management
class ManagementController < ::ApplicationController
before_action :authenticate_user!, :authorize_user!
layout 'management'
layout "management"
private

View File

@ -18,7 +18,7 @@ module Management
@profile = find_profile
@user = @profile.user
if not @profile
unless @profile
flash[:error] = "No profile, needs to be created"
redirect_to action: :edit
end
@ -36,7 +36,7 @@ module Management
@profile = @user.build_personal_profile(@conference, profile_params)
if @profile.save
flash[:notice] = t('.successfully_created')
flash[:notice] = t(".successfully_created")
redirect_to management_conference_personal_profile_path(@profile, conference_id: @conference.id)
else
render action: :new
@ -56,7 +56,7 @@ module Management
if @profile.update_attributes(profile_params)
redirect_to [:management, @conference, @profile]
else
render action: 'edit'
render action: "edit"
end
end

View File

@ -26,12 +26,13 @@ module Management
end
private
def volunteer_params
params.require(:volunteer).permit(:name, :picture, :email, :phone,
:tshirt_size, :tshirt_cut,
:food_preferences, :previous_experience,
:notes, :language,
volunteer_team_ids: [])
:tshirt_size, :tshirt_cut,
:food_preferences, :previous_experience,
:notes, :language,
volunteer_team_ids: [])
end
end
end

View File

@ -2,15 +2,14 @@ class Public::ConferenceFeedbacksController < Public::ApplicationController
def index
@conference = current_conference
@unrated_events = @conference.events
.joins(:proposition).approved
.joins('LEFT JOIN feedbacks ON feedbacks.feedback_receiving_id = events.id AND feedbacks.feedback_receiving_type = \'Event\'')
.where('feedbacks.session_id != ? OR feedbacks.id IS NULL', session.id).distinct
.joins(:proposition).approved
.joins("LEFT JOIN feedbacks ON feedbacks.feedback_receiving_id = events.id AND feedbacks.feedback_receiving_type = 'Event'")
.where("feedbacks.session_id != ? OR feedbacks.id IS NULL", session.id).distinct
@rated_events = @conference.events
.joins(:proposition).approved
.joins(:feedbacks)
.where(feedbacks: {session_id: session.id}).distinct
.joins(:proposition).approved
.joins(:feedbacks)
.where(feedbacks: {session_id: session.id}).distinct
end
def new
@ -28,7 +27,7 @@ class Public::ConferenceFeedbacksController < Public::ApplicationController
@feedback.session_id = session.id
if @feedback.save
flash[:notice] = I18n.t('public.conference_feedbacks.new.success')
flash[:notice] = I18n.t("public.conference_feedbacks.new.success")
redirect_to conference_feedbacks_path
else
render :new, status: :unprocessable_entity

View File

@ -5,7 +5,7 @@ class Public::EventFeedbackQrcodesController < Public::ApplicationController
respond_to do |format|
format.svg do
render(inline: @qr.as_svg(shape_rendering: 'crispEdges', module_size: 11, fill: 'ffffff', offset: 10),
render(inline: @qr.as_svg(shape_rendering: "crispEdges", module_size: 11, fill: "ffffff", offset: 10),
filename: "feedback_qr_code_#{event.id}.svg")
end
end

View File

@ -14,7 +14,7 @@ class Public::EventFeedbacksController < Public::ApplicationController
@feedback.session_id = session.id
if @feedback.save
flash[:notice] = I18n.t('public.event_feedbacks.new.success')
flash[:notice] = I18n.t("public.event_feedbacks.new.success")
redirect_to conference_feedbacks_path
else
render :new, status: :unprocessable_entity

View File

@ -3,7 +3,7 @@ module Public
before_action :authenticate_user!
def index
@events = Event.joins(:conference, :proposition, :participations).where(conference: current_conference).where('propositions.proposer_id = ? OR participations.participant_id = ?', current_user.id, current_user.id)
@events = Event.joins(:conference, :proposition, :participations).where(conference: current_conference).where("propositions.proposer_id = ? OR participations.participant_id = ?", current_user.id, current_user.id)
end
def edit
@ -22,7 +22,7 @@ module Public
@event.participations.build participant: current_user, approved: true
if @event.save
flash[:notice] = I18n.t('views.events.event_successfully_created', event_type: @event.event_type.name.mb_chars.downcase)
flash[:notice] = I18n.t("views.events.event_successfully_created", event_type: @event.event_type.name.mb_chars.downcase)
after_save_redirect
else
render action: :new
@ -33,7 +33,7 @@ module Public
@event = Event.joins(:participations).find_by(id: params[:id], participations: {participant_id: current_user.id})
if @event.update(event_params)
flash[:notice] = I18n.t('views.events.event_successfully_updated', event_type: @event.event_type.name.mb_chars.downcase)
flash[:notice] = I18n.t("views.events.event_successfully_updated", event_type: @event.event_type.name.mb_chars.downcase)
after_save_redirect
else
render action: :edit
@ -44,9 +44,9 @@ module Public
@event = current_user.events.approved.find(params[:id])
if @event.confirm!
flash[:notice] = I18n.t('views.events.successfully_confirmed', event_type: @event.event_type.name.mb_chars.downcase)
flash[:notice] = I18n.t("views.events.successfully_confirmed", event_type: @event.event_type.name.mb_chars.downcase)
else
flash[:alert] = I18n.t('views.events.error_on_confirmation', event_type: @event.event_type.name.mb_chars.downcase)
flash[:alert] = I18n.t("views.events.error_on_confirmation", event_type: @event.event_type.name.mb_chars.downcase)
end
after_save_redirect

View File

@ -6,7 +6,7 @@ module Public
@profile = current_user.build_personal_profile(current_conference, profile_params)
if @profile.save
flash[:notice] = t('views.personal_profiles.successfully_created')
flash[:notice] = t("views.personal_profiles.successfully_created")
redirect_to root_path
else
render action: :new
@ -21,10 +21,10 @@ module Public
@profile = current_user.personal_profile(current_conference)
if @profile.update_attributes(profile_params)
flash[:notice] = t('views.personal_profiles.successfully_updated')
flash[:notice] = t("views.personal_profiles.successfully_updated")
redirect_to root_path
else
render action: 'edit'
render action: "edit"
end
end

View File

@ -11,7 +11,7 @@ module Public
def create
@volunteer = current_conference.volunteers.build volunteer_params
if @volunteer.save
flash[:notice] = I18n.t('views.volunteers.successful_application')
flash[:notice] = I18n.t("views.volunteers.successful_application")
redirect_to edit_volunteer_path(@volunteer.unique_id)
else
render :new, status: :unprocessable_entity
@ -21,7 +21,7 @@ module Public
def update
@volunteer = current_conference.volunteers.find_by! unique_id: params[:id]
if @volunteer.update volunteer_params
flash[:notice] = I18n.t('views.volunteers.successful_application_edit')
flash[:notice] = I18n.t("views.volunteers.successful_application_edit")
redirect_to edit_volunteer_path(@volunteer.unique_id)
else
render :edit, status: :unprocessable_entity

View File

@ -12,9 +12,9 @@ module Public
@volunteership.build_proposition proposer: current_user, status: :undecided
if @volunteership.save
flash[:notice] = I18n.t('views.volunteerships.you_successfully_applied_for', team: @volunteership.volunteer_team.name)
flash[:notice] = I18n.t("views.volunteerships.you_successfully_applied_for", team: @volunteership.volunteer_team.name)
else
flash[:error] = I18n.t('views.volunteerships.an error_occurred_while_applying')
flash[:error] = I18n.t("views.volunteerships.an error_occurred_while_applying")
end
after_save_redirect
@ -24,7 +24,7 @@ module Public
@volunteership = current_user.volunteerships.find params[:id]
if @volunteership.destroy
flash[:notice] = I18n.t('views.volunteerships.you_successfully_retracted_your_application_for', team: @volunteership.volunteer_team.name)
flash[:notice] = I18n.t("views.volunteerships.you_successfully_retracted_your_application_for", team: @volunteership.volunteer_team.name)
end
redirect_to volunteerships_path

View File

@ -10,7 +10,7 @@ module ApplicationHelper
"undecided" => "default",
"approved" => "info",
"rejected" => "danger",
"backup" => "warning"
"backup" => "warning",
}.with_indifferent_access[status]
end
@ -19,7 +19,7 @@ module ApplicationHelper
"undecided" => "question",
"approved" => "thumbs-up",
"rejected" => "thumbs-down",
"backup" => "refresh"
"backup" => "refresh",
}.with_indifferent_access[status]
end
@ -29,36 +29,36 @@ module ApplicationHelper
def action_buttons(conference, record, actions = [:index, :show, :edit, :destroy])
klass = record.class
output = ''
output = ""
if actions.include? :index
output += link_to(icon(:list), [:management, conference, klass], {
title: t('actions.index.button', models: klass.model_name.human(count: 2)),
class: 'btn btn-info'
title: t("actions.index.button", models: klass.model_name.human(count: 2)),
class: "btn btn-info",
})
end
if actions.include? :show
output += link_to(icon(:eye), [:management, conference, record], {
title: t('actions.view.button', model: klass.model_name.human),
class: 'btn btn-info'
title: t("actions.view.button", model: klass.model_name.human),
class: "btn btn-info",
})
end
if actions.include? :edit
output += link_to(icon(:edit), [:edit, :management, conference, record], {
title: t('actions.edit.button', model: klass.model_name.human),
class: 'btn btn-warning'
})
output += link_to(icon(:edit), [:edit, :management, conference, record], {
title: t("actions.edit.button", model: klass.model_name.human),
class: "btn btn-warning",
})
end
if actions.include? :destroy
output += link_to(icon(:trash), [:management, conference, record], {
method: :delete,
data: {confirm: t('actions.are_you_sure')},
title: t('actions.destroy.button', model: klass.model_name.human),
class: 'btn btn-danger'
})
output += link_to(icon(:trash), [:management, conference, record], {
method: :delete,
data: {confirm: t("actions.are_you_sure")},
title: t("actions.destroy.button", model: klass.model_name.human),
class: "btn btn-danger",
})
end
output.html_safe

View File

@ -5,26 +5,26 @@ module ConferencesHelper
start_date = conference.created_at.to_date
end_date = Time.zone.now.to_date < conference.start_date.to_date ? Time.zone.now.to_date : conference.start_date.to_date
chart_data = (start_date..end_date).map do |date|
chart_data = (start_date..end_date).map { |date|
{
created_at: date,
new_submissions: submissions_by_day[date].try(:first).try(:number) || 0,
new_confirmations: confirmed_by_day[date].try(:first).try(:number) || 0
new_confirmations: confirmed_by_day[date].try(:first).try(:number) || 0,
}
end
}
chart_data.each_with_index do |entry, index|
entry[:all_submissions] = if index == 0
entry[:new_submissions]
else
chart_data[index - 1][:all_submissions] + entry[:new_submissions]
end
entry[:new_submissions]
else
chart_data[index - 1][:all_submissions] + entry[:new_submissions]
end
entry[:all_confirmations] = if index == 0
entry[:new_confirmations]
else
chart_data[index - 1][:all_confirmations] + entry[:new_confirmations]
end
entry[:new_confirmations]
else
chart_data[index - 1][:all_confirmations] + entry[:new_confirmations]
end
end
chart_data
end

View File

@ -1,16 +1,16 @@
module EventsHelper
def links_to_event_participants_for(event)
event.participants_with_personal_profiles.map do |participant|
event.participants_with_personal_profiles.map { |participant|
if participant.has_personal_profile?
link_to icon(:user, participant.name),
management_conference_personal_profile_path(participant.personal_profile_id, conference_id: event.conference.id)
else
link_to icon('user-plus', participant.personal_email),
link_to icon("user-plus", participant.personal_email),
new_management_conference_personal_profile_path(conference_id: event.conference.id,
user_id: participant.id),
title: t('management.events.event.create_profile'), class: 'bg-danger'
title: t("management.events.event.create_profile"), class: "bg-danger"
end
end.join(', ').html_safe
}.join(", ").html_safe
end
def participant_names_with_emails(event)
@ -25,13 +25,11 @@ module EventsHelper
end
def participant_names(event)
event.participants.map do |participant|
event.participants.map { |participant|
if participant.personal_profile(event.conference).present?
profile = participant.personal_profile(event.conference)
"#{profile.name}"
else
nil
profile.name.to_s
end
end.compact
}.compact
end
end

View File

@ -1,15 +1,14 @@
# coding: utf-8
class EventMailer < ActionMailer::Base
def confirmation_request(event)
@event = event
I18n.locale = @event.proposer.language
mail to: @event.proposer.email,
from: 'program@openfest.org',
subject: I18n.t('event_mailer.acceptance_notification.subject',
conference: @event.conference.title,
submission_type: @event.event_type.name.mb_chars.downcase.to_s,
title: @event.title)
from: "program@openfest.org",
subject: I18n.t("event_mailer.acceptance_notification.subject",
conference: @event.conference.title,
submission_type: @event.event_type.name.mb_chars.downcase.to_s,
title: @event.title)
end
def rejection_notification(event)
@ -17,11 +16,10 @@ class EventMailer < ActionMailer::Base
I18n.locale = @event.proposer.language
mail to: @event.proposer.email,
from: 'program@openfest.org',
subject: I18n.t('event_mailer.rejection_notification.subject',
conference: @event.conference.title,
submission_type: @event.event_type.name.mb_chars.downcase.to_s,
title: @event.title)
from: "program@openfest.org",
subject: I18n.t("event_mailer.rejection_notification.subject",
conference: @event.conference.title,
submission_type: @event.event_type.name.mb_chars.downcase.to_s,
title: @event.title)
end
end

View File

@ -1,4 +1,3 @@
# coding: utf-8
class PropositionMailer < ActionMailer::Base
def new_proposition_notification(proposition)
@proposition = proposition

View File

@ -1,10 +1,9 @@
# coding: utf-8
class VolunteerMailer < ActionMailer::Base
def team_notification(new_volunteer)
@volunteer = new_volunteer
mail(to: @volunteer.conference.email,
subject: "Нов доброволец #{@volunteer.name} <#{@volunteer.email}> за екип(и) #{@volunteer.volunteer_teams.map(&:name).join(', ')}")
subject: "Нов доброволец #{@volunteer.name} <#{@volunteer.email}> за екип(и) #{@volunteer.volunteer_teams.map(&:name).join(", ")}")
end
def volunteer_notification(new_volunteer)
@ -12,8 +11,8 @@ class VolunteerMailer < ActionMailer::Base
I18n.locale = @volunteer.language
mail(to: @volunteer.email,
reply_to: @volunteer.conference.email,
from: 'no-reply@openfest.org',
subject: I18n.t('volunteer_mailer.success_notification.subject',
conference_name: @volunteer.conference.title))
from: "no-reply@openfest.org",
subject: I18n.t("volunteer_mailer.success_notification.subject",
conference_name: @volunteer.conference.title))
end
end

View File

@ -2,7 +2,7 @@ class CallForParticipation < ActiveRecord::Base
belongs_to :conference
def open!
self.opens_at = Time.now unless self.opens_at.present?
self.opens_at = Time.now unless opens_at.present?
self.closes_at = nil
save
end
@ -13,14 +13,14 @@ class CallForParticipation < ActiveRecord::Base
end
def open?
self.opens_at.present? and self.opens_at < Time.now
opens_at.present? && (opens_at < Time.now)
end
def closed?
self.closes_at.present? and self.closes_at < Time.now
closes_at.present? && (closes_at < Time.now)
end
def in_progress?
open? and not closed?
open? && !closed?
end
end

View File

@ -14,30 +14,30 @@ class Conference < ActiveRecord::Base
has_many :halls
has_many :event_types
has_many :events
has_many :approved_events, -> { joins(:proposition).approved }, class_name: 'Event'
has_many :approved_events, -> { joins(:proposition).approved }, class_name: "Event"
has_many :conflict_counts, through: :events
has_many :volunteer_teams
has_many :volunteers
has_one :call_for_participation
has_many :participants, -> { distinct }, class_name: 'User', through: :events
has_many :participant_profiles, class_name: 'PersonalProfile'
has_many :participants, -> { distinct }, class_name: "User", through: :events
has_many :participant_profiles, class_name: "PersonalProfile"
has_many :slots, through: :halls
has_many :feedbacks, as: :feedback_receiving
has_many :editions, primary_key: :host_name, foreign_key: :host_name, class_name: 'Conference'
has_many :editions, primary_key: :host_name, foreign_key: :host_name, class_name: "Conference"
has_many :events_of_all_editions, through: :editions, source: :events
accepts_nested_attributes_for :tracks, :halls, :event_types, :volunteer_teams,
reject_if: :all_blank, allow_destroy: true
reject_if: :all_blank, allow_destroy: true
after_create :create_call_for_participation
def submissions_grouped_by_day
submissions = events.group('date(events.created_at)').select('date(events.created_at) as created_at, count(events.id) as number')
submissions = events.group("date(events.created_at)").select("date(events.created_at) as created_at, count(events.id) as number")
submissions.group_by { |s| s.created_at.to_date }
end
def submissions_grouped_by_confirmation_day
submissions = events.joins(:proposition).approved.confirmed.group('date(propositions.confirmed_at)').select('date(propositions.confirmed_at) as confirmed_at, count(events.id) as number')
submissions = events.joins(:proposition).approved.confirmed.group("date(propositions.confirmed_at)").select("date(propositions.confirmed_at) as confirmed_at, count(events.id) as number")
submissions.group_by { |s| s.confirmed_at.to_date }
end
@ -46,7 +46,7 @@ class Conference < ActiveRecord::Base
end
def has_vote_results?
vote_data_updated_at.present? and number_of_ballots_cast > 0
vote_data_updated_at.present? && (number_of_ballots_cast > 0)
end
def has_voting_endpoint?
@ -54,8 +54,8 @@ class Conference < ActiveRecord::Base
end
def update_conflict_data!
update_vote_data! or raise ActiveRecord::Rollback
events.all? { |event| event.update_conflict_data(false) } or raise ActiveRecord::Rollback
update_vote_data! || raise(ActiveRecord::Rollback)
events.all? { |event| event.update_conflict_data(false) } || raise(ActiveRecord::Rollback)
end
def most_conflicts
@ -74,17 +74,16 @@ class Conference < ActiveRecord::Base
conflict_counts.unscoped.where(left: approved_events, right: approved_events).order(number_of_conflicts: :asc).first.try(:number_of_conflicts) || 0
end
private
def planned_cfp_end_date_is_before_start_date
if planned_cfp_end_date.present? and start_date.present? and planned_cfp_end_date > start_date
if planned_cfp_end_date.present? && start_date.present? && (planned_cfp_end_date > start_date)
errors.add(:planned_cfp_end_date, :cannot_be_after_start_date)
end
end
def start_date_is_before_end_date
if start_date.present? and end_date.present? and start_date > end_date
if start_date.present? && end_date.present? && (start_date > end_date)
errors.add(:end_date, :cannot_be_before_start_date)
end
end
@ -95,38 +94,38 @@ class Conference < ActiveRecord::Base
attr_accessor :conference
def number_of_ballots
@number_of_ballots ||= remote_summary_data['number_of_ballots']
@number_of_ballots ||= remote_summary_data["number_of_ballots"]
end
def ranking
@ranking ||= remote_summary_data['ranking'].map { |ranking_entry| EventRanking.new ranking_entry }
@ranking ||= remote_summary_data["ranking"].map { |ranking_entry| EventRanking.new ranking_entry }
end
def conflicts
@conflicts ||= remote_summary_data['conflicts'].map { |conflicts_entry| ConflictsForEvent.new conflicts_entry }
@conflicts ||= remote_summary_data["conflicts"].map { |conflicts_entry| ConflictsForEvent.new conflicts_entry }
end
def save
conference.transaction do
conference.number_of_ballots_cast = number_of_ballots
conflicts.all?(&:save) or raise ActiveRecord::Rollback
ranking.all?(&:save) or raise ActiveRecord::Rollback
conflicts.all?(&:save) || raise(ActiveRecord::Rollback)
ranking.all?(&:save) || raise(ActiveRecord::Rollback)
conference.touch :vote_data_updated_at
conference.save or raise ActiveRecord::Rollback
conference.save || raise(ActiveRecord::Rollback)
end
end
private
def connection
@connection ||= Faraday.new(url: conference.vote_data_endpoint + '/summary.json',
headers: {'Content-Type' => 'application/json'})
@connection ||= Faraday.new(url: conference.vote_data_endpoint + "/summary.json",
headers: {"Content-Type" => "application/json"})
end
def remote_summary_data
@remote_summary_data ||= JSON.parse(connection.get do |request|
@remote_summary_data ||= JSON.parse(connection.get { |request|
request.body = {summary: {talk_ids: conference.events.pluck(:id)}}.to_json
end.body)
}.body)
end
class ConflictsForEvent
@ -136,14 +135,13 @@ class Conference < ActiveRecord::Base
def save
@event = Event.find(talk_id)
@event.conflict_counts.destroy_all or raise ActiveRecord::Rollback
@event.conflict_counts.destroy_all || raise(ActiveRecord::Rollback)
conflicts.all? do |right_event_id, number_of_conflicts|
ConflictCount.create left_id: talk_id, right_id: right_event_id, number_of_conflicts: number_of_conflicts
end or raise ActiveRecord::Rollback
end || raise(ActiveRecord::Rollback)
end
end
class EventRanking
include ActiveModel::Model

View File

@ -1,5 +1,5 @@
class ConflictCount < ActiveRecord::Base
belongs_to :left, class_name: 'Event'
belongs_to :right, class_name: 'Event'
belongs_to :left, class_name: "Event"
belongs_to :right, class_name: "Event"
has_one :conference, through: :left
end

View File

@ -6,8 +6,8 @@ class Event < ActiveRecord::Base
has_one :slot
has_many :participations, dependent: :destroy
has_many :pending_participations, ->() { pending }, class_name: 'Participation'
has_many :approved_participations, ->() { approved }, class_name: 'Participation'
has_many :pending_participations, -> { pending }, class_name: "Participation"
has_many :approved_participations, -> { approved }, class_name: "Participation"
has_many :participants, through: :approved_participations
has_many :participants_with_personal_profiles, through: :approved_participations, source: :participant_with_personal_profile
has_many :conflict_counts, -> { order(number_of_conflicts: :desc) }, foreign_key: :left_id
@ -19,7 +19,7 @@ class Event < ActiveRecord::Base
scope :approved, -> { where(propositions: {status: Proposition.statuses[:approved]})}
validates :conference, presence: true
validates :title, presence: true, length: { maximum: 65 }
validates :title, presence: true, length: {maximum: 65}
validates :abstract, presence: true
validates :description, presence: true
validates :agreement, acceptance: true
@ -61,16 +61,16 @@ class Event < ActiveRecord::Base
language: language,
abstract: abstract,
description: description,
notes: notes
notes: notes,
}
end
def ranked?
conference.has_vote_results? and rank.present? and number_of_votes.present?
conference.has_vote_results? && rank.present? && number_of_votes.present?
end
def per_cent_of_votes
if conference.has_vote_results? and conference.number_of_ballots_cast > 0
if conference.has_vote_results? && (conference.number_of_ballots_cast > 0)
Rational(number_of_votes * 100, conference.number_of_ballots_cast)
else
Float::NAN
@ -80,20 +80,20 @@ class Event < ActiveRecord::Base
private
def event_type_belongs_to_the_selected_conference
unless conference.present? and conference.event_types.include?(event_type)
unless conference.present? && conference.event_types.include?(event_type)
errors.add :event_type, :must_be_a_valid_event_type
end
end
def track_belongs_to_the_selected_conference
unless conference.present? and conference.tracks.include?(track)
unless conference.present? && conference.tracks.include?(track)
errors.add :track, :must_be_a_valid_track
end
end
def length_is_within_the_permitted_interval
if event_type.present?
unless length >= event_type.minimum_length and length <= event_type.maximum_length
unless (length >= event_type.minimum_length) && (length <= event_type.maximum_length)
errors.add :length, :must_be_between, minimum: event_type.minimum_length, maximum: event_type.maximum_length
end
end

View File

@ -9,6 +9,6 @@ class EventSearch
option(:confirmed) { |scope, value| scope.joins(:proposition).approved.where.not(propositions: {confirmed_at: nil}) }
option(:not_confirmed) { |scope, value| scope.joins(:proposition).approved.where(propositions: {confirmed_at: nil}) }
sort_by 'title'
config[:defaults]['sort'] = "#{config[:sort_attributes].first} asc"
sort_by "title"
config[:defaults]["sort"] = "#{config[:sort_attributes].first} asc"
end

View File

@ -1,7 +1,7 @@
class Feedback < ActiveRecord::Base
belongs_to :feedback_receiving, polymorphic: true
validates :rating, presence: true, inclusion: {in: [2, 3, 4, 5 ,6]}
validates :rating, presence: true, inclusion: {in: [2, 3, 4, 5, 6]}
before_create :destroy_older_feedbacks_by_the_session

View File

@ -3,7 +3,7 @@ class Participant < ActiveRecord::Base
self.primary_key = :participant_id
def twitter=(handle)
write_attribute :twitter, handle.gsub(/\A@/,'') if handle
write_attribute :twitter, handle.gsub(/\A@/, "") if handle
end
def name

View File

@ -1,8 +1,8 @@
class Participation < ActiveRecord::Base
belongs_to :participant, class_name: 'User'
has_one :participant_with_personal_profile, class_name: 'Participant'
belongs_to :participant, class_name: "User"
has_one :participant_with_personal_profile, class_name: "Participant"
belongs_to :event
validates :participant_id, presence: true
scope :approved, ->() { where approved: true }
scope :pending, ->() { where.not approved: true }
scope :approved, -> { where approved: true }
scope :pending, -> { where.not approved: true }
end

View File

@ -11,14 +11,14 @@ class PersonalProfile < ActiveRecord::Base
validates :twitter, format: {with: /\A[a-z0-9_]{1,15}\z/i}, allow_blank: true
validates :github, format: {with: /\A[a-z0-9][a-z0-9\-]*\z/i}, allow_blank: true
phony_normalize :mobile_phone, default_country_code: 'BG', add_plus: false
phony_normalize :mobile_phone, default_country_code: "BG", add_plus: false
mount_uploader :picture, PictureUploader
accepts_nested_attributes_for :user
def twitter=(handle)
write_attribute :twitter, handle.gsub(/\A@/,'') if handle
write_attribute :twitter, handle.gsub(/\A@/, "") if handle
end
def name

View File

@ -1,5 +1,5 @@
class Proposition < ActiveRecord::Base
belongs_to :proposer, class_name: 'User'
belongs_to :proposer, class_name: "User"
belongs_to :proposable, polymorphic: true, dependent: :destroy
enum status: [:undecided, :approved, :rejected, :backup]
delegate :proposable_title, :proposable_type, :proposable_description, to: :proposable

View File

@ -9,7 +9,7 @@ class Track < ActiveRecord::Base
translates :name, :description
def color=(hex_triplet)
write_attribute :color, hex_triplet.gsub(/\A#/,'') if hex_triplet
write_attribute :color, hex_triplet.gsub(/\A#/, "") if hex_triplet
end
def color

View File

@ -2,13 +2,13 @@ class User < ActiveRecord::Base
# Include default devise modules. Others available are:
# :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable, :confirmable,
:recoverable, :rememberable, :trackable, :validatable
:recoverable, :rememberable, :trackable, :validatable
has_many :personal_profiles, dependent: :destroy
has_many :lectures
has_many :workshops
has_many :propositions, foreign_key: :proposer_id
has_many :events, through: :propositions, source: :proposable, source_type: 'Event'
has_many :events, through: :propositions, source: :proposable, source_type: "Event"
has_many :participations, foreign_key: :participant_id
has_many :events_participated_in, through: :participations, source: :event
has_many :volunteerships, foreign_key: :volunteer_id

View File

@ -14,7 +14,7 @@ class Volunteer < ActiveRecord::Base
validates :volunteer_teams, presence: true
validate :volunteer_teams_belong_to_conference
phony_normalize :phone, default_country_code: 'BG'
phony_normalize :phone, default_country_code: "BG"
belongs_to :conference
has_and_belongs_to_many :volunteer_teams

View File

@ -3,6 +3,6 @@ class VolunteerSearch
option(:volunteer_team_id) { |scope, value| scope.joins(:volunteer_teams).where volunteer_teams: {id: value} }
sort_by 'name'
config[:defaults]['sort'] = "#{config[:sort_attributes].first} asc"
sort_by "name"
config[:defaults]["sort"] = "#{config[:sort_attributes].first} asc"
end

View File

@ -13,7 +13,7 @@ class VolunteerTeam < ActiveRecord::Base
end
def color=(hex_triplet)
write_attribute :color, hex_triplet.gsub(/\A#/,'') if hex_triplet
write_attribute :color, hex_triplet.gsub(/\A#/, "") if hex_triplet
end
def color

View File

@ -2,7 +2,7 @@ class Volunteership < ActiveRecord::Base
include Proposable
belongs_to :volunteer_team
belongs_to :volunteer, class_name: 'User'
belongs_to :volunteer, class_name: "User"
has_one :conference, through: :volunteer_team
def proposable_title

View File

@ -1,7 +1,6 @@
class PictureUploader < CarrierWave::Uploader::Base
# Include RMagick or MiniMagick support:
#include CarrierWave::RMagick
# include CarrierWave::RMagick
include CarrierWave::MiniMagick
# Choose what kind of storage to use for this uploader:
@ -16,7 +15,7 @@ class PictureUploader < CarrierWave::Uploader::Base
# Provide a default URL as a default if there hasn't been a file uploaded:
def default_url
ActionController::Base.helpers.asset_path("fallback/profile_picture/" + [version_name, "default.png"].compact.join('_'))
ActionController::Base.helpers.asset_path("fallback/profile_picture/" + [version_name, "default.png"].compact.join("_"))
end
# Process files as they are uploaded:
@ -29,21 +28,21 @@ class PictureUploader < CarrierWave::Uploader::Base
# Create different versions of your uploaded files:
version :medium do
process :resize_to_fit => [171, 180]
process resize_to_fit: [171, 180]
end
version :thumb do
process :resize_to_fit => [50, 50]
process resize_to_fit: [50, 50]
end
version :schedule do
process :resize_to_fill => [100, 100]
process resize_to_fill: [100, 100]
end
# Add a white list of extensions which are allowed to be uploaded.
# For images you might use something like this:
def extension_white_list
%w(jpg jpeg png)
%w[jpg jpeg png]
end
# Override the filename of the uploaded files:
@ -51,5 +50,4 @@ class PictureUploader < CarrierWave::Uploader::Base
# def filename
# "something.jpg" if original_filename
# end
end

View File

@ -1,4 +1,4 @@
# This file is used by Rack-based servers to start the application.
require ::File.expand_path('../config/environment', __FILE__)
require ::File.expand_path("../config/environment", __FILE__)
run Rails.application

View File

@ -1,6 +1,6 @@
require_relative 'boot'
require_relative "boot"
require 'rails/all'
require "rails/all"
# Require the gems listed in Gemfile, including any gems
# you've limited to :test, :development, or :production.
@ -18,7 +18,7 @@ module Clarion
# Set Time.zone default to the specified zone and make Active Record auto-convert to this zone.
# Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC.
config.time_zone = 'Sofia'
config.time_zone = "Sofia"
# The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded.
# config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s]
@ -29,12 +29,12 @@ module Clarion
config.generators do |g|
g.test_framework :rspec, fixtures: true,
view_specs: false,
helper_specs: false,
routing_specs: false,
request_specs: false
view_specs: false,
helper_specs: false,
routing_specs: false,
request_specs: false
g.fixture_replacement :factory_bot, dir: 'spec/factories'
g.fixture_replacement :factory_bot, dir: "spec/factories"
end
end
end

View File

@ -1,4 +1,4 @@
ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../Gemfile', __dir__)
ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__)
require 'bundler/setup' # Set up gems listed in the Gemfile.
require 'bootsnap/setup' # Speed up boot time by caching expensive operations.
require "bundler/setup" # Set up gems listed in the Gemfile.
require "bootsnap/setup" # Speed up boot time by caching expensive operations.

View File

@ -1,14 +1,14 @@
# config valid only for current version of Capistrano
lock '3.11.0'
lock "3.11.0"
set :application, 'clarion'
set :repo_url, 'https://github.com/ignisf/clarion.git'
set :application, "clarion"
set :repo_url, "https://github.com/ignisf/clarion.git"
# Default branch is :master
ask :branch, `git rev-parse --abbrev-ref HEAD`.chomp
# Default deploy_to directory is /var/www/my_app
set :deploy_to, '/home/barf/clarion'
set :deploy_to, "/home/barf/clarion"
# Default value for :scm is :git
# set :scm, :git
@ -23,10 +23,10 @@ set :deploy_to, '/home/barf/clarion'
# set :pty, true
# Default value for :linked_files is []
set :linked_files, fetch(:linked_files, []).push('config/database.yml', 'config/secrets.yml')
set :linked_files, fetch(:linked_files, []).push("config/database.yml", "config/secrets.yml")
# Default value for linked_dirs is []
set :linked_dirs, fetch(:linked_dirs, []).push('log', 'tmp/uploads', 'tmp/pids', 'tmp/cache', 'tmp/sockets', 'vendor/bundle', 'public/system', 'public/uploads')
set :linked_dirs, fetch(:linked_dirs, []).push("log", "tmp/uploads", "tmp/pids", "tmp/cache", "tmp/sockets", "vendor/bundle", "public/system", "public/uploads")
# Default value for default_env is {}
# set :default_env, { path: "/opt/ruby/bin:$PATH" }
@ -34,7 +34,7 @@ set :linked_dirs, fetch(:linked_dirs, []).push('log', 'tmp/uploads', 'tmp/pids',
# Default value for keep_releases is 5
set :keep_releases, 10
set :rvm_ruby_version, '2.2.2'
set :rvm_ruby_version, "2.2.2"
set :puma_bind, ["tcp://127.0.0.1:9087"]
set :puma_init_active_record, true
@ -42,12 +42,11 @@ set :puma_access_log, "#{shared_path}/log/puma_access.log"
set :puma_error_log, "#{shared_path}/log/puma_error.log"
set :puma_preload_app, true
set :nginx_sites_available_path, "#{shared_path}"
set :nginx_sites_available_path, shared_path.to_s
set :nginx_sites_enabled_path, "/tmp"
set :nginx_server_name, 'cfp.openfest.org'
set :nginx_server_name, "cfp.openfest.org"
namespace :deploy do
after :restart, :clear_cache do
on roles(:web), in: :groups, limit: 3, wait: 10 do
# Here we can do anything such as:

View File

@ -5,9 +5,7 @@
# server 'example.com', user: 'deploy', roles: %w{app db web}, my_property: :my_value
# server 'example.com', user: 'deploy', roles: %w{app web}, other_property: :other_value
server 'marla.ludost.net', user: 'barf', roles: %w{app db web}
server "marla.ludost.net", user: "barf", roles: %w[app db web]
# role-based syntax
# ==================
@ -21,8 +19,6 @@ server 'marla.ludost.net', user: 'barf', roles: %w{app db web}
# role :web, %w{user1@primary.com user2@additional.com}, other_property: :other_value
# role :db, %w{deploy@example.com}
# Configuration
# =============
# You can set any configuration variable like in config/deploy.rb
@ -31,8 +27,6 @@ server 'marla.ludost.net', user: 'barf', roles: %w{app db web}
# http://capistranorb.com/documentation/getting-started/configuration/
# Feel free to add new variables to customise your setup.
# Custom SSH Options
# ==================
# You may pass any option but keep in mind that net/ssh understands a
@ -42,9 +36,9 @@ server 'marla.ludost.net', user: 'barf', roles: %w{app db web}
# Global options
# --------------
set :ssh_options, {
# keys: %w(/home/rlisowski/.ssh/id_rsa),
forward_agent: true,
# auth_methods: %w(password)
# keys: %w(/home/rlisowski/.ssh/id_rsa),
forward_agent: true,
# auth_methods: %w(password)
}
#
# The server-based syntax can be used to override options:

View File

@ -1,5 +1,5 @@
# Load the Rails application.
require_relative 'application'
require_relative "application"
# Initialize the Rails application.
Rails.application.initialize!

View File

@ -14,12 +14,12 @@ Rails.application.configure do
# Enable/disable caching. By default caching is disabled.
# Run rails dev:cache to toggle caching.
if Rails.root.join('tmp', 'caching-dev.txt').exist?
if Rails.root.join("tmp", "caching-dev.txt").exist?
config.action_controller.perform_caching = true
config.cache_store = :memory_store
config.public_file_server.headers = {
'Cache-Control' => "public, max-age=#{2.days.to_i}"
"Cache-Control" => "public, max-age=#{2.days.to_i}",
}
else
config.action_controller.perform_caching = false
@ -34,8 +34,8 @@ Rails.application.configure do
config.action_mailer.raise_delivery_errors = false
# Use localhost for default host
config.action_mailer.default_url_options = {host: 'localhost:3000'}
config.action_mailer.default_options = {from: 'no-reply@example.com'}
config.action_mailer.default_url_options = {host: "localhost:3000"}
config.action_mailer.default_options = {from: "no-reply@example.com"}
config.action_mailer.perform_caching = false
# Print deprecation notices to the Rails logger.

View File

@ -20,7 +20,7 @@ Rails.application.configure do
# Disable serving static files from the `/public` folder by default since
# Apache or NGINX already handles this.
config.public_file_server.enabled = ENV['RAILS_SERVE_STATIC_FILES'].present?
config.public_file_server.enabled = ENV["RAILS_SERVE_STATIC_FILES"].present?
# Compress JavaScripts and CSS.
config.assets.js_compressor = :uglifier
@ -54,7 +54,7 @@ Rails.application.configure do
config.log_level = :debug
# Prepend all log lines with the following tags.
config.log_tags = [ :request_id ]
config.log_tags = [:request_id]
# Use a different cache store in production.
# config.cache_store = :mem_cache_store
@ -70,8 +70,8 @@ Rails.application.configure do
# config.action_mailer.raise_delivery_errors = false
config.action_mailer.delivery_method = :sendmail
config.action_mailer.default_options = {from: 'no-reply@openfest.org'}
config.action_mailer.default_url_options = {host: 'cfp.openfest.org'}
config.action_mailer.default_options = {from: "no-reply@openfest.org"}
config.action_mailer.default_url_options = {host: "cfp.openfest.org"}
# Enable locale fallbacks for I18n (makes lookups for any locale fall back to
# the I18n.default_locale when a translation cannot be found).

View File

@ -15,7 +15,7 @@ Rails.application.configure do
# Configure public file server for tests with Cache-Control for performance.
config.public_file_server.enabled = true
config.public_file_server.headers = {
'Cache-Control' => "public, max-age=#{1.hour.to_i}"
"Cache-Control" => "public, max-age=#{1.hour.to_i}",
}
# Show full error reports and disable caching.
@ -39,8 +39,8 @@ Rails.application.configure do
config.action_mailer.delivery_method = :test
# Use localhost for default host
config.action_mailer.default_url_options = {host: 'localhost:3000'}
config.action_mailer.default_options = {from: 'no-reply@example.com'}
config.action_mailer.default_url_options = {host: "localhost:3000"}
config.action_mailer.default_options = {from: "no-reply@example.com"}
# Print deprecation notices to the stderr.
config.active_support.deprecation = :stderr

View File

@ -1,19 +1,19 @@
# Be sure to restart your server when you modify this file.
# Version of your assets, change this if you want to expire all your assets.
Rails.application.config.assets.version = '1.0'
Rails.application.config.assets.version = "1.0"
# Add additional assets to the asset load path.
# Rails.application.config.assets.paths << Emoji.images_path
# Add Yarn node_modules folder to the asset load path.
Rails.application.config.assets.paths << Rails.root.join('node_modules')
Rails.application.config.assets.paths << Rails.root.join("node_modules")
Rails.application.config.assets.paths << 'lib/initfest/assets/images'
Rails.application.config.assets.paths << 'lib/initfest/assets/javascripts'
Rails.application.config.assets.paths << 'lib/initfest/assets/stylesheets'
Rails.application.config.assets.paths << "lib/initfest/assets/images"
Rails.application.config.assets.paths << "lib/initfest/assets/javascripts"
Rails.application.config.assets.paths << "lib/initfest/assets/stylesheets"
Rails.application.config.assets.precompile << /\.(?:png|jpg|jpeg|gif)\z/
# Precompile additional assets.
# application.js, application.css, and all non-JS/CSS in the app/assets
# folder are already added.
Rails.application.config.assets.precompile += %w( management/application.css management/application.js )
Rails.application.config.assets.precompile += %w[management/application.css management/application.js]

View File

@ -12,7 +12,7 @@ Devise.setup do |config|
# Configure the e-mail address which will be shown in Devise::Mailer,
# note that it will be overwritten if you use your own mailer class
# with default "from" parameter.
config.mailer_sender = 'no-reply@openfest.org'
config.mailer_sender = "no-reply@openfest.org"
# Configure the class responsible to send e-mails.
# config.mailer = 'Devise::Mailer'
@ -21,7 +21,7 @@ Devise.setup do |config|
# Load and configure the ORM. Supports :active_record (default) and
# :mongoid (bson_ext recommended) by default. Other ORMs may be
# available as additional gems.
require 'devise/orm/active_record'
require "devise/orm/active_record"
# ==> Configuration for any authentication mechanism
# Configure which keys are used when authenticating a user. The default is

View File

@ -1,3 +1,3 @@
# Be sure to restart your server when you modify this file.
Rails.application.config.session_store :cookie_store, key: '_clarion_session'
Rails.application.config.session_store :cookie_store, key: "_clarion_session"

View File

@ -6,7 +6,7 @@ SimpleForm.setup do |config|
# stack. The options given below are used to wrap the
# whole input.
config.wrappers :default, class: :input,
hint_class: :field_with_hint, error_class: :field_with_errors do |b|
hint_class: :field_with_hint, error_class: :field_with_errors do |b|
## Extensions enabled by default
# Any of these extensions can be disabled for a
# given input by passing: `f.input EXTENSION_NAME => false`.
@ -41,8 +41,8 @@ SimpleForm.setup do |config|
## Inputs
b.use :label_input
b.use :hint, wrap_with: { tag: :span, class: :hint }
b.use :error, wrap_with: { tag: :span, class: :error }
b.use :hint, wrap_with: {tag: :span, class: :hint}
b.use :error, wrap_with: {tag: :span, class: :error}
## full_messages_for
# If you want to display the full error message for the attribute, you can
@ -61,7 +61,7 @@ SimpleForm.setup do |config|
config.boolean_style = :nested
# Default class for buttons
config.button_class = 'btn'
config.button_class = "btn"
# Method used to tidy up errors. Specify any Rails Array method.
# :first lists the first message for each field.
@ -72,7 +72,7 @@ SimpleForm.setup do |config|
config.error_notification_tag = :div
# CSS class to add for error notification helper.
config.error_notification_class = 'error_notification'
config.error_notification_class = "error_notification"
# ID to add for error notification helper.
# config.error_notification_id = nil
@ -155,7 +155,7 @@ SimpleForm.setup do |config|
# config.input_class = nil
# Define the default class of the input wrapper of the boolean input.
config.boolean_label_class = 'checkbox'
config.boolean_label_class = "checkbox"
# Defines if the default input wrapper class should be included in radio
# collection wrappers.

View File

@ -1,125 +1,125 @@
# Use this setup block to configure all options available in SimpleForm.
SimpleForm.setup do |config|
config.error_notification_class = 'alert alert-danger'
config.button_class = 'btn btn-default'
config.error_notification_class = "alert alert-danger"
config.button_class = "btn btn-default"
config.boolean_label_class = nil
config.wrappers :vertical_form, tag: 'div', class: 'form-group', error_class: 'has-error' do |b|
config.wrappers :vertical_form, tag: "div", class: "form-group", error_class: "has-error" do |b|
b.use :html5
b.use :placeholder
b.optional :maxlength
b.optional :pattern
b.optional :min_max
b.optional :readonly
b.use :label, class: 'control-label'
b.use :label, class: "control-label"
b.use :input, class: 'form-control'
b.use :error, wrap_with: { tag: 'span', class: 'help-block' }
b.use :hint, wrap_with: { tag: 'p', class: 'help-block' }
b.use :input, class: "form-control"
b.use :error, wrap_with: {tag: "span", class: "help-block"}
b.use :hint, wrap_with: {tag: "p", class: "help-block"}
end
config.wrappers :vertical_file_input, tag: 'div', class: 'form-group', error_class: 'has-error' do |b|
config.wrappers :vertical_file_input, tag: "div", class: "form-group", error_class: "has-error" do |b|
b.use :html5
b.use :placeholder
b.optional :maxlength
b.optional :readonly
b.use :label, class: 'control-label'
b.use :label, class: "control-label"
b.use :input
b.use :error, wrap_with: { tag: 'span', class: 'help-block' }
b.use :hint, wrap_with: { tag: 'p', class: 'help-block' }
b.use :error, wrap_with: {tag: "span", class: "help-block"}
b.use :hint, wrap_with: {tag: "p", class: "help-block"}
end
config.wrappers :vertical_boolean, tag: 'div', class: 'form-group', error_class: 'has-error' do |b|
config.wrappers :vertical_boolean, tag: "div", class: "form-group", error_class: "has-error" do |b|
b.use :html5
b.optional :readonly
b.wrapper tag: 'div', class: 'checkbox' do |ba|
b.wrapper tag: "div", class: "checkbox" do |ba|
ba.use :label_input
end
b.use :error, wrap_with: { tag: 'span', class: 'help-block' }
b.use :hint, wrap_with: { tag: 'p', class: 'help-block' }
b.use :error, wrap_with: {tag: "span", class: "help-block"}
b.use :hint, wrap_with: {tag: "p", class: "help-block"}
end
config.wrappers :vertical_radio_and_checkboxes, tag: 'div', class: 'form-group', error_class: 'has-error' do |b|
config.wrappers :vertical_radio_and_checkboxes, tag: "div", class: "form-group", error_class: "has-error" do |b|
b.use :html5
b.optional :readonly
b.use :label, class: 'control-label'
b.use :label, class: "control-label"
b.use :input
b.use :error, wrap_with: { tag: 'span', class: 'help-block' }
b.use :hint, wrap_with: { tag: 'p', class: 'help-block' }
b.use :error, wrap_with: {tag: "span", class: "help-block"}
b.use :hint, wrap_with: {tag: "p", class: "help-block"}
end
config.wrappers :horizontal_form, tag: 'div', class: 'form-group', error_class: 'has-error' do |b|
config.wrappers :horizontal_form, tag: "div", class: "form-group", error_class: "has-error" do |b|
b.use :html5
b.use :placeholder
b.optional :maxlength
b.optional :pattern
b.optional :min_max
b.optional :readonly
b.use :label, class: 'col-sm-3 control-label'
b.use :label, class: "col-sm-3 control-label"
b.wrapper tag: 'div', class: 'col-sm-9' do |ba|
ba.use :input, class: 'form-control'
ba.use :error, wrap_with: { tag: 'span', class: 'help-block' }
ba.use :hint, wrap_with: { tag: 'p', class: 'help-block' }
b.wrapper tag: "div", class: "col-sm-9" do |ba|
ba.use :input, class: "form-control"
ba.use :error, wrap_with: {tag: "span", class: "help-block"}
ba.use :hint, wrap_with: {tag: "p", class: "help-block"}
end
end
config.wrappers :horizontal_file_input, tag: 'div', class: 'form-group', error_class: 'has-error' do |b|
config.wrappers :horizontal_file_input, tag: "div", class: "form-group", error_class: "has-error" do |b|
b.use :html5
b.use :placeholder
b.optional :maxlength
b.optional :readonly
b.use :label, class: 'col-sm-3 control-label'
b.use :label, class: "col-sm-3 control-label"
b.wrapper tag: 'div', class: 'col-sm-9' do |ba|
b.wrapper tag: "div", class: "col-sm-9" do |ba|
ba.use :input
ba.use :error, wrap_with: { tag: 'span', class: 'help-block' }
ba.use :hint, wrap_with: { tag: 'p', class: 'help-block' }
ba.use :error, wrap_with: {tag: "span", class: "help-block"}
ba.use :hint, wrap_with: {tag: "p", class: "help-block"}
end
end
config.wrappers :horizontal_boolean, tag: 'div', class: 'form-group', error_class: 'has-error' do |b|
config.wrappers :horizontal_boolean, tag: "div", class: "form-group", error_class: "has-error" do |b|
b.use :html5
b.optional :readonly
b.wrapper tag: 'div', class: 'col-sm-offset-3 col-sm-9' do |wr|
wr.wrapper tag: 'div', class: 'checkbox' do |ba|
ba.use :label_input, class: 'col-sm-9'
b.wrapper tag: "div", class: "col-sm-offset-3 col-sm-9" do |wr|
wr.wrapper tag: "div", class: "checkbox" do |ba|
ba.use :label_input, class: "col-sm-9"
end
wr.use :error, wrap_with: { tag: 'span', class: 'help-block' }
wr.use :hint, wrap_with: { tag: 'p', class: 'help-block' }
wr.use :error, wrap_with: {tag: "span", class: "help-block"}
wr.use :hint, wrap_with: {tag: "p", class: "help-block"}
end
end
config.wrappers :horizontal_radio_and_checkboxes, tag: 'div', class: 'form-group', error_class: 'has-error' do |b|
config.wrappers :horizontal_radio_and_checkboxes, tag: "div", class: "form-group", error_class: "has-error" do |b|
b.use :html5
b.optional :readonly
b.use :label, class: 'col-sm-3 control-label'
b.use :label, class: "col-sm-3 control-label"
b.wrapper tag: 'div', class: 'col-sm-9' do |ba|
b.wrapper tag: "div", class: "col-sm-9" do |ba|
ba.use :input
ba.use :error, wrap_with: { tag: 'span', class: 'help-block' }
ba.use :hint, wrap_with: { tag: 'p', class: 'help-block' }
ba.use :error, wrap_with: {tag: "span", class: "help-block"}
ba.use :hint, wrap_with: {tag: "p", class: "help-block"}
end
end
config.wrappers :inline_form, tag: 'div', class: 'form-group', error_class: 'has-error' do |b|
config.wrappers :inline_form, tag: "div", class: "form-group", error_class: "has-error" do |b|
b.use :html5
b.use :placeholder
b.optional :maxlength
b.optional :pattern
b.optional :min_max
b.optional :readonly
b.use :label, class: 'sr-only'
b.use :label, class: "sr-only"
b.use :input, class: 'form-control'
b.use :error, wrap_with: { tag: 'span', class: 'help-block' }
b.use :hint, wrap_with: { tag: 'p', class: 'help-block' }
b.use :input, class: "form-control"
b.use :error, wrap_with: {tag: "span", class: "help-block"}
b.use :hint, wrap_with: {tag: "p", class: "help-block"}
end
# Wrappers for forms and inputs using the Bootstrap toolkit.

View File

@ -1,19 +1,19 @@
Rails.application.routes.draw do
devise_for :users, controllers: {registrations: 'registrations', confirmations: 'confirmations'}
devise_for :users, controllers: {registrations: "registrations", confirmations: "confirmations"}
scope module: :public do
root to: 'home#index'
resource :personal_profile, path: 'profile'
root to: "home#index"
resource :personal_profile, path: "profile"
resources :events do
resources :feedback, controller: 'event_feedbacks', only: [:new, :create]
resource :feedback_qr_code, controller: 'event_feedback_qrcodes', only: :show
resources :feedback, controller: "event_feedbacks", only: [:new, :create]
resource :feedback_qr_code, controller: "event_feedback_qrcodes", only: :show
member do
get :confirm
end
end
resources :volunteers
resources :volunteer_teams, only: [:index]
resources :feedback, as: 'conference_feedbacks', controller: 'conference_feedbacks', only: [:new, :create, :index]
resources :feedback, as: "conference_feedbacks", controller: "conference_feedbacks", only: [:new, :create, :index]
end
namespace :api do
@ -33,7 +33,7 @@ Rails.application.routes.draw do
end
namespace :management do
root to: 'conferences#index'
root to: "conferences#index"
resources :conferences do
member do

View File

@ -1,6 +1,6 @@
%w(
%w[
.ruby-version
.rbenv-vars
tmp/restart.txt
tmp/caching-dev.txt
).each { |path| Spring.watch(path) }
].each { |path| Spring.watch(path) }

View File

@ -33,7 +33,7 @@ class DeviseCreateUsers < ActiveRecord::Migration[4.2]
t.string :first_name, null: false
t.string :last_name, null: false
t.string :organisation
t.boolean :hide_email, null: false, default: true
t.boolean :hide_email, null: false, default: true
t.string :photo_url
t.string :mobile_phone, null: false
t.text :biography

View File

@ -5,7 +5,7 @@ class CreateEvents < ActiveRecord::Migration[4.2]
t.string :subtitle
t.string :type
t.integer :length, null: false, default: 45
t.string :language, null: false, default: 'bg_BG'
t.string :language, null: false, default: "bg_BG"
t.integer :state
t.text :abstract, null: false
t.text :description, null: false

View File

@ -1,14 +1,14 @@
class AddTranslationTablesToConferences < ActiveRecord::Migration[4.2]
def up
Conference.create_translation_table!({
:title => :string,
:description => :text
}, {
:migrate_data => true
})
title: :string,
description: :text,
}, {
migrate_data: true,
})
end
def down
Conference.drop_translation_table! :migrate_data => true
Conference.drop_translation_table! migrate_data: true
end
end

View File

@ -1,11 +1,11 @@
class AddTranslationTablesToTracks < ActiveRecord::Migration[4.2]
def up
Track.create_translation_table!({
name: :string,
description: :text
}, {
migrate_data: true
})
name: :string,
description: :text,
}, {
migrate_data: true,
})
end
def down

View File

@ -1,6 +1,6 @@
class ChangeEventStateDefaults < ActiveRecord::Migration[4.2]
def up
execute 'UPDATE events SET state = 0'
execute "UPDATE events SET state = 0"
change_column :events, :state, :integer, null: false, default: 0
end

View File

@ -3,7 +3,7 @@ class CreatePropositions < ActiveRecord::Migration[4.2]
create_table :propositions do |t|
t.references :proposer, index: true
t.references :proposition_accepting, polymorphic: true
t.index [:proposition_accepting_id, :proposition_accepting_type], name: 'proposition_accepting_index'
t.index [:proposition_accepting_id, :proposition_accepting_type], name: "proposition_accepting_index"
t.references :proposable, polymorphic: true, index: true
t.integer :status

View File

@ -1,15 +1,15 @@
class CreatePropositionsForExistingEvents < ActiveRecord::Migration[4.2]
def up
events = execute 'SELECT * FROM events'
events = execute "SELECT * FROM events"
events.each do |event|
execute "INSERT INTO propositions (proposer_id, proposition_accepting_id, proposition_accepting_type, proposable_id, proposable_type, status, created_at, updated_at)
VALUES (#{event['user_id']}, #{event['track_id']}, 'Track', #{event['id']}, 'Event', #{event['state']}, '#{event['created_at']}', '#{event['updated_at']}')"
VALUES (#{event["user_id"]}, #{event["track_id"]}, 'Track', #{event["id"]}, 'Event', #{event["state"]}, '#{event["created_at"]}', '#{event["updated_at"]}')"
end
end
def down
event_ids = execute('SELECT * FROM events').map { |event| event['id'] }
execute "DELETE FROM propositions WHERE proposable_id IN (#{event_ids.join(', ')}) AND proposable_type = 'Event'"
event_ids = execute("SELECT * FROM events").map { |event| event["id"] }
execute "DELETE FROM propositions WHERE proposable_id IN (#{event_ids.join(", ")}) AND proposable_type = 'Event'"
end
end

View File

@ -9,10 +9,10 @@ class CreateEventTypesForAllExistingEvents < ActiveRecord::Migration[4.2]
GROUP BY type_name, tracks.conference_id;'
event_types.each do |type|
event_type = EventType.create! conference_id: type['conference_id'], created_at: type['created_at'], updated_at: type['created_at']
event_type = EventType.create! conference_id: type["conference_id"], created_at: type["created_at"], updated_at: type["created_at"]
execute "INSERT INTO event_type_translations (event_type_id, locale, created_at, updated_at, name, description)
VALUES (#{event_type.id}, 'en', '#{event_type.created_at}', '#{event_type.created_at}', '#{type['type_name']}', 'None');"
VALUES (#{event_type.id}, 'en', '#{event_type.created_at}', '#{event_type.created_at}', '#{type["type_name"]}', 'None');"
end
end

View File

@ -1,14 +1,14 @@
class PopulateEventTypeOfExistingEvents < ActiveRecord::Migration[4.2]
def up
event_ids = execute('SELECT id FROM events WHERE type IS NOT NULL;').map { |row| row['id'] };
event_ids = execute("SELECT id FROM events WHERE type IS NOT NULL;").map { |row| row["id"] }
event_ids.each do |id|
event_type_id = execute("SELECT ett.event_type_id FROM events JOIN event_type_translations AS ett ON events.type = ett.name WHERE events.id = #{id};").first['event_type_id']
execute("UPDATE events SET event_type_id = #{event_type_id} WHERE id = #{id}");
event_type_id = execute("SELECT ett.event_type_id FROM events JOIN event_type_translations AS ett ON events.type = ett.name WHERE events.id = #{id};").first["event_type_id"]
execute("UPDATE events SET event_type_id = #{event_type_id} WHERE id = #{id}")
end
end
def down
execute("UPDATE events SET event_type_id = NULL");
execute("UPDATE events SET event_type_id = NULL")
end
end

View File

@ -3,13 +3,13 @@ class PersonalProfile < ActiveRecord::Base; end
class CreateParticipationRecords < ActiveRecord::Migration[4.2]
def up
event_to_speaker_profiles = execute 'SELECT * FROM events_speaker_profiles'
event_to_speaker_profiles = execute "SELECT * FROM events_speaker_profiles"
event_to_speaker_profiles.each do |event_to_speaker_profile|
profile = PersonalProfile.find_by(id: event_to_speaker_profile['speaker_profile_id'])
next if not profile
profile = PersonalProfile.find_by(id: event_to_speaker_profile["speaker_profile_id"])
next unless profile
Participation.create! event_id: event_to_speaker_profile['event_id'],
Participation.create! event_id: event_to_speaker_profile["event_id"],
participant_id: profile.user_id,
approved: true
end

View File

@ -1,13 +1,13 @@
class AddTranslationsToHalls < ActiveRecord::Migration[4.2]
def self.up
Hall.create_translation_table!({
:name => :string
name: :string,
}, {
:migrate_data => true
migrate_data: true,
})
end
def self.down
Hall.drop_translation_table! :migrate_data => true
Hall.drop_translation_table! migrate_data: true
end
end

View File

@ -1,8 +1,8 @@
class CreateJoinTableVolunteerVolunteerTeam < ActiveRecord::Migration[4.2]
def change
create_join_table :volunteers, :volunteer_teams do |t|
t.index [:volunteer_id, :volunteer_team_id], name: 'volunteer_id_volunteer_team_id'
t.index [:volunteer_team_id, :volunteer_id], name: 'volunteer_team_id_volunteer_id'
t.index [:volunteer_id, :volunteer_team_id], name: "volunteer_id_volunteer_team_id"
t.index [:volunteer_team_id, :volunteer_id], name: "volunteer_team_id_volunteer_id"
end
end
end

View File

@ -3,7 +3,7 @@ end
class AddDescriptionsForAllEvents < ActiveRecord::Migration[4.2]
def up
Event.where(description: [nil, '']).update_all(description: 'n/a')
Event.where(description: [nil, ""]).update_all(description: "n/a")
end
def down

View File

@ -1,16 +1,16 @@
PARTICIPANTS_SQL = <<EOS
CREATE VIEW "participants" AS
SELECT "users"."id" AS "participant_id",
"users"."email" AS personal_email,
"users"."language" AS language,
"participations"."id" AS "participation_id",
"personal_profiles"."id" AS "personal_profile_id",
"personal_profiles".* FROM "users"
INNER JOIN "participations" ON "users"."id" = "participations"."participant_id"
INNER JOIN "events" ON "events"."id" = "participations"."event_id"
INNER JOIN "conferences" ON "events"."conference_id" = "conferences"."id"
LEFT JOIN "personal_profiles" ON "personal_profiles"."conference_id" = "events"."conference_id"
AND "personal_profiles"."user_id" = "users"."id";
PARTICIPANTS_SQL = <<~EOS
CREATE VIEW "participants" AS
SELECT "users"."id" AS "participant_id",
"users"."email" AS personal_email,
"users"."language" AS language,
"participations"."id" AS "participation_id",
"personal_profiles"."id" AS "personal_profile_id",
"personal_profiles".* FROM "users"
INNER JOIN "participations" ON "users"."id" = "participations"."participant_id"
INNER JOIN "events" ON "events"."id" = "participations"."event_id"
INNER JOIN "conferences" ON "events"."conference_id" = "conferences"."id"
LEFT JOIN "personal_profiles" ON "personal_profiles"."conference_id" = "events"."conference_id"
AND "personal_profiles"."user_id" = "users"."id";
EOS
class AddParticipantsView < ActiveRecord::Migration[4.2]

View File

@ -5,8 +5,8 @@
#
# cities = City.create([{ name: 'Chicago' }, { name: 'Copenhagen' }])
# Mayor.create(name: 'Emanuel', city: cities.first
User.create(email: 'foo@example.com',
password: '123qweASD',
password_confirmation: '123qweASD',
User.create(email: "foo@example.com",
password: "123qweASD",
password_confirmation: "123qweASD",
confirmed_at: Time.current,
admin: true)

View File

@ -7,7 +7,7 @@ task :backup, [:destination] => :environment do |t, args|
silent = Rake.application.options.silent
puts "Backing up '#{conf[:database]}' into: #{args.destination}" unless silent
if system(cmd)
puts 'Backup completed.' unless silent
puts "Backup completed." unless silent
else
puts "Backup failed!\nCommand exit status: #{$?}\nCommand was: #{cmd}"
end

View File

@ -1,34 +1,34 @@
require 'fileutils'
require 'yaml'
require 'securerandom'
require "fileutils"
require "yaml"
require "securerandom"
namespace :bootstrap do
desc 'Copy over initial db config'
desc "Copy over initial db config"
task :db_config do
example_config_file = File.join(Rails.root, 'config', 'database.yml.example')
new_config_file = File.join(Rails.root, 'config', 'database.yml')
example_config_file = File.join(Rails.root, "config", "database.yml.example")
new_config_file = File.join(Rails.root, "config", "database.yml")
FileUtils.cp example_config_file, new_config_file
end
desc 'Generate new secret tokens'
desc "Generate new secret tokens"
task :secret_tokens do
secret_tokens_file = File.join Rails.root, 'config', 'secrets.yml'
secret_tokens_file = File.join Rails.root, "config", "secrets.yml"
secrets = {
'development' => {'secret_key_base' => SecureRandom.hex(64)},
'test' => {'secret_key_base' => SecureRandom.hex(64)},
'production' => {'secret_key_base' => '<%= ENV["SECRET_KEY_BASE"] %>'}
"development" => {"secret_key_base" => SecureRandom.hex(64)},
"test" => {"secret_key_base" => SecureRandom.hex(64)},
"production" => {"secret_key_base" => '<%= ENV["SECRET_KEY_BASE"] %>'},
}
File.open(secret_tokens_file, 'w') do |f|
File.open(secret_tokens_file, "w") do |f|
f.puts secrets.to_yaml
end
end
end
desc 'Perform initial setup of the application'
task bootstrap: ['bootstrap:secret_tokens',
'bootstrap:db_config',
'db:create',
'db:migrate',
'db:test:prepare']
desc "Perform initial setup of the application"
task bootstrap: ["bootstrap:secret_tokens",
"bootstrap:db_config",
"db:create",
"db:migrate",
"db:test:prepare",]

View File

@ -3,11 +3,11 @@
FactoryBot.define do
factory :conference do
sequence(:title) { |n| "Conference-#{n}" }
email { 'foo@example.com' }
description { 'MyText' }
start_date { '2014-07-29 21:29:13' }
end_date { '2014-07-31 21:29:13' }
planned_cfp_end_date { '2014-07-28' }
email { "foo@example.com" }
description { "MyText" }
start_date { "2014-07-29 21:29:13" }
end_date { "2014-07-31 21:29:13" }
planned_cfp_end_date { "2014-07-28" }
factory :past_conference do
start_date { Date.today - 10.days }

View File

@ -1,9 +1,9 @@
FactoryBot.define do
factory :event_type do
name { |n| "Track #{n}" }
description { 'MyText' }
description { "MyText" }
conference
minimum_length { '45' }
maximum_length { '60' }
minimum_length { "45" }
maximum_length { "60" }
end
end

View File

@ -2,8 +2,8 @@ FactoryBot.define do
factory :event do
title { |n| "Event #{n}" }
length { 60 }
abstract { 'foo' }
description { 'foo' }
abstract { "foo" }
description { "foo" }
conference
language { :bg }
after(:build) do |event, evaluator|

View File

@ -1,14 +1,14 @@
FactoryBot.define do
factory :personal_profile do
first_name { 'Foo' }
last_name { 'Bar' }
organisation { 'foo inc.' }
public_email { 'foo@example.com' }
picture { Rack::Test::UploadedFile.new(File.join(Rails.root, 'spec', 'support', 'picture.jpg')) }
mobile_phone { '+359883444555' }
biography { 'Just a bio' }
github { 'foobar' }
twitter { 'foobar' }
first_name { "Foo" }
last_name { "Bar" }
organisation { "foo inc." }
public_email { "foo@example.com" }
picture { Rack::Test::UploadedFile.new(File.join(Rails.root, "spec", "support", "picture.jpg")) }
mobile_phone { "+359883444555" }
biography { "Just a bio" }
github { "foobar" }
twitter { "foobar" }
user
conference
end

View File

@ -3,8 +3,8 @@
FactoryBot.define do
factory :track do
name { |n| "Track#{n}" }
color { '#000000' }
description { 'Some description' }
color { "#000000" }
description { "Some description" }
conference
end
end

View File

@ -4,8 +4,8 @@ FactoryBot.define do
sequence(:email) { |n| "user-#{n}@example.org" }
factory :user do
password { 'password' }
password_confirmation { 'password' }
password { "password" }
password_confirmation { "password" }
confirmed_at { Time.now - 15.minutes }
email

View File

@ -1,6 +1,6 @@
require "rails_helper"
feature 'Call for papers' do
feature "Call for papers" do
before do
Rails.application.load_seed
end
@ -11,21 +11,21 @@ feature 'Call for papers' do
sign_out
visit root_path
click_on I18n.t('views.welcome.submit_event', event_type: Conference.first.event_types.first.name.try(:mb_chars).try(:downcase))
click_on I18n.t("views.welcome.submit_event", event_type: Conference.first.event_types.first.name.try(:mb_chars).try(:downcase))
click_on I18n.t(:registration)
register_a_new_user(false)
submit_an_event_proposition
expect(page).to have_content I18n.t('views.events.event_successfully_created', event_type: Event.last.event_type.name.mb_chars.downcase)
expect(page).to have_content I18n.t("views.events.event_successfully_created", event_type: Event.last.event_type.name.mb_chars.downcase)
expect(page).to have_content I18n.t(:please_fill_in_your_speaker_profile)
fill_in_personal_profile
expect(page).to have_content I18n.t('views.personal_profiles.successfully_created')
expect(page).to have_content I18n.t("views.personal_profiles.successfully_created")
click_on I18n.t('views.navigation.my_submissions')
click_on I18n.t("views.navigation.my_submissions")
expect(page).to have_content(Event.last.event_type.name + ' "This is just a sample title of an event"')
@ -41,7 +41,7 @@ feature 'Call for papers' do
sign_out
visit root_path
click_on I18n.t('views.welcome.submit_event', event_type: Conference.first.event_types.first.name.try(:mb_chars).try(:downcase))
click_on I18n.t("views.welcome.submit_event", event_type: Conference.first.event_types.first.name.try(:mb_chars).try(:downcase))
click_on I18n.t(:registration)
register_a_new_user(false)
@ -57,17 +57,17 @@ feature 'Call for papers' do
sign_out
visit root_path
click_on I18n.t('views.welcome.submit_event', event_type: Conference.first.event_types.first.name.try(:mb_chars).try(:downcase))
click_on I18n.t("views.welcome.submit_event", event_type: Conference.first.event_types.first.name.try(:mb_chars).try(:downcase))
sign_in_as_an_existing_user(false)
submit_an_event_proposition(false)
expect(page).to have_content I18n.t(:please_fill_in_your_speaker_profile)
click_on I18n.t('helpers.submit.create', model: PersonalProfile.model_name.human)
click_on I18n.t("helpers.submit.create", model: PersonalProfile.model_name.human)
expect(page).to have_content I18n.t('views.personal_profiles.successfully_created')
expect(page).to have_content I18n.t("views.personal_profiles.successfully_created")
click_on I18n.t('views.navigation.my_submissions')
click_on I18n.t("views.navigation.my_submissions")
expect(page).to have_content(Event.last.event_type.name + ' "This is just a sample title of an event"')
@ -76,7 +76,6 @@ feature 'Call for papers' do
verify_the_event_is_submitted
end
scenario "A returning user resets their password and submits an event proposition" do
time_travel_to(2.years.ago) do
sign_in_as_admin
@ -84,7 +83,7 @@ feature 'Call for papers' do
sign_out
visit root_path
click_on I18n.t('views.welcome.submit_event', event_type: Conference.first.event_types.first.name.try(:mb_chars).try(:downcase))
click_on I18n.t("views.welcome.submit_event", event_type: Conference.first.event_types.first.name.try(:mb_chars).try(:downcase))
click_on I18n.t(:registration)
register_a_new_user(false)
@ -100,25 +99,25 @@ feature 'Call for papers' do
sign_out
visit root_path
click_on I18n.t('views.welcome.submit_event', event_type: Conference.first.event_types.first.name.try(:mb_chars).try(:downcase))
click_on I18n.t("views.welcome.submit_event", event_type: Conference.first.event_types.first.name.try(:mb_chars).try(:downcase))
click_on I18n.t('lostpass')
fill_in User.human_attribute_name(:email), with: 'bar@example.com'
click_on I18n.t("lostpass")
fill_in User.human_attribute_name(:email), with: "bar@example.com"
click_on I18n.t(:send_lostpass_instructions)
expect(page).to have_content I18n.t('devise.passwords.send_instructions')
expect(page).to have_content I18n.t("devise.passwords.send_instructions")
visit ActionMailer::Base.deliveries.last.body.raw_source.match(/https?:\/\/.*?(\/.*\w)/)[1]
fill_in User.human_attribute_name(:password), with: 'foobarbaz'
fill_in User.human_attribute_name(:password_confirmation), with: 'foobarbaz'
fill_in User.human_attribute_name(:password), with: "foobarbaz"
fill_in User.human_attribute_name(:password_confirmation), with: "foobarbaz"
click_on I18n.t(:change_pass)
submit_an_event_proposition(false)
expect(page).to have_content I18n.t(:please_fill_in_your_speaker_profile)
click_on I18n.t('helpers.submit.create', model: PersonalProfile.model_name.human)
click_on I18n.t("helpers.submit.create", model: PersonalProfile.model_name.human)
expect(page).to have_content I18n.t('views.personal_profiles.successfully_created')
expect(page).to have_content I18n.t("views.personal_profiles.successfully_created")
click_on I18n.t('views.navigation.my_submissions')
click_on I18n.t("views.navigation.my_submissions")
expect(page).to have_content(Event.last.event_type.name + ' "This is just a sample title of an event"')

View File

@ -1,6 +1,6 @@
require "rails_helper"
feature 'Landing page' do
feature "Landing page" do
before do
Rails.application.load_seed
sign_in_as_admin
@ -8,9 +8,8 @@ feature 'Landing page' do
sign_out
end
it 'displays information about the conference' do
it "displays information about the conference" do
visit root_path
expect(page).to have_content I18n.t(:home_title, conference: "FooConf #{1.year.from_now.year}")
end
end

View File

@ -1,11 +1,11 @@
require "rails_helper"
feature 'Conference management' do
feature "Conference management" do
before do
Rails.application.load_seed
end
scenario 'Creating a new conference' do
scenario "Creating a new conference" do
sign_in_as_admin
visit management_root_path
expect(page).to_not have_content "FooConf"
@ -14,104 +14,104 @@ feature 'Conference management' do
expect(page).to have_content "FooConf"
end
scenario 'Enabling the call for papers of a conference' do
scenario "Enabling the call for papers of a conference" do
sign_in_as_admin
create_new_conference
visit root_path
expect(page).to have_link I18n.t('views.welcome.submit_event', event_type: '')
expect(page).to have_link I18n.t("views.welcome.submit_event", event_type: "")
visit management_root_path
click_on_first_conference_in_management_root
click_on I18n.t('management.conferences.show.cfp_status')
expect(page).to_not have_link I18n.t('views.welcome.submit_event', event_type: '')
click_on I18n.t("management.conferences.show.cfp_status")
expect(page).to_not have_link I18n.t("views.welcome.submit_event", event_type: "")
end
scenario 'Editing an existing conference' do
scenario "Editing an existing conference" do
sign_in_as_admin
create_new_conference
click_on I18n.t('actions.edit.button', model: Conference.model_name.human)
fill_in Conference.human_attribute_name(:title), with: 'FooBarBazConf'
page.find('.btn.btn-primary').click
expect(page).to have_content 'FooBarBazConf'
click_on I18n.t("actions.edit.button", model: Conference.model_name.human)
fill_in Conference.human_attribute_name(:title), with: "FooBarBazConf"
page.find(".btn.btn-primary").click
expect(page).to have_content "FooBarBazConf"
end
scenario 'Deleting a newly created conference', js: true do
scenario "Deleting a newly created conference", js: true do
sign_in_as_admin
create_new_conference(host_name: '127.0.0.1')
click_on 'Clarion'
expect(page).to have_content 'FooConf'
create_new_conference(host_name: "127.0.0.1")
click_on "Clarion"
expect(page).to have_content "FooConf"
click_on_first_conference_in_management_root
accept_confirm do
click_on I18n.t('actions.destroy.button', model: Conference.model_name.human)
click_on I18n.t("actions.destroy.button", model: Conference.model_name.human)
end
visit management_root_path
expect(page).to_not have_content 'FooConf'
expect(page).to_not have_content "FooConf"
end
scenario 'Reviewing an event' do
scenario "Reviewing an event" do
sign_in_as_admin
create_new_conference
submit_an_event_proposition(true)
visit management_root_path
click_on_first_conference_in_management_root
click_on I18n.t('activerecord.models.event', count: 2).capitalize
click_on I18n.t('actions.view.button', model: Event.model_name.human)
expect(page).to have_content('This is just a sample title of an event')
click_on I18n.t("activerecord.models.event", count: 2).capitalize
click_on I18n.t("actions.view.button", model: Event.model_name.human)
expect(page).to have_content("This is just a sample title of an event")
end
scenario 'Editing an event' do
scenario "Editing an event" do
sign_in_as_admin
create_new_conference
submit_an_event_proposition(true)
visit management_root_path
click_on_first_conference_in_management_root
click_on I18n.t('activerecord.models.event', count: 2).capitalize
expect(page).to have_content('This is just a sample title of an event')
click_on I18n.t('actions.edit.button', model: Event.model_name.human)
fill_in Event.human_attribute_name(:title), with: 'This is just a sample edited title of an event'
click_on I18n.t('helpers.submit.event.update')
expect(page).to have_content I18n.t('management.events.update.event_successfully_updated')
expect(page).to have_content 'This is just a sample edited title of an event'
click_on I18n.t("activerecord.models.event", count: 2).capitalize
expect(page).to have_content("This is just a sample title of an event")
click_on I18n.t("actions.edit.button", model: Event.model_name.human)
fill_in Event.human_attribute_name(:title), with: "This is just a sample edited title of an event"
click_on I18n.t("helpers.submit.event.update")
expect(page).to have_content I18n.t("management.events.update.event_successfully_updated")
expect(page).to have_content "This is just a sample edited title of an event"
end
scenario 'Approving an event from its detailed view' do
scenario "Approving an event from its detailed view" do
sign_in_as_admin
create_new_conference
submit_an_event_proposition(true)
visit management_root_path
click_on_first_conference_in_management_root
click_on I18n.t('activerecord.models.event', count: 2).capitalize
click_on I18n.t("activerecord.models.event", count: 2).capitalize
expect(page).to_not have_button I18n.t("status.approved")
click_on I18n.t('actions.view.button', model: Event.model_name.human)
click_on I18n.t("actions.view.button", model: Event.model_name.human)
click_on I18n.t("status.undecided")
click_on I18n.t("status.approved")
click_on I18n.t('activerecord.models.event', count: 2).capitalize
click_on I18n.t("activerecord.models.event", count: 2).capitalize
expect(page).to have_button I18n.t("status.approved")
end
scenario 'Approving an event from the events index' do
scenario "Approving an event from the events index" do
sign_in_as_admin
create_new_conference
submit_an_event_proposition(true)
visit management_root_path
click_on_first_conference_in_management_root
click_on I18n.t('activerecord.models.event', count: 2).capitalize
click_on I18n.t("activerecord.models.event", count: 2).capitalize
expect(page).to_not have_button I18n.t("status.approved")
click_on I18n.t("status.undecided")
click_on I18n.t("status.approved")
expect(page).to have_button I18n.t("status.approved")
end
scenario 'Creating a profile for a submitter' do
scenario "Creating a profile for a submitter" do
sign_in_as_admin
create_new_conference
submit_an_event_proposition(true)
visit management_root_path
click_on_first_conference_in_management_root
click_on I18n.t('activerecord.models.personal_profile', count: 2).capitalize
click_on I18n.t('actions.create.title', model: PersonalProfile.model_name.human)
click_on I18n.t("activerecord.models.personal_profile", count: 2).capitalize
click_on I18n.t("actions.create.title", model: PersonalProfile.model_name.human)
fill_in_personal_profile
expect(page).to have_content I18n.t('management.personal_profiles.create.successfully_created')
expect(page).to have_content 'Foo Bar'
expect(page).to have_content I18n.t("management.personal_profiles.create.successfully_created")
expect(page).to have_content "Foo Bar"
end
scenario "Cloning the last profile of a submitter that did not update it when they submitted" do
@ -121,7 +121,7 @@ feature 'Conference management' do
sign_out
visit root_path
click_on I18n.t('views.welcome.submit_event', event_type: Conference.first.event_types.first.name.downcase)
click_on I18n.t("views.welcome.submit_event", event_type: Conference.first.event_types.first.name.downcase)
click_on I18n.t(:registration)
register_a_new_user(false)
@ -137,7 +137,7 @@ feature 'Conference management' do
sign_out
visit root_path
click_on I18n.t('views.welcome.submit_event', event_type: Conference.first.event_types.first.name.downcase)
click_on I18n.t("views.welcome.submit_event", event_type: Conference.first.event_types.first.name.downcase)
sign_in_as_an_existing_user(false)
@ -146,12 +146,11 @@ feature 'Conference management' do
sign_out
verify_the_event_is_submitted
click_on I18n.t('activerecord.models.personal_profile', count: 2).capitalize
expect(page).to have_text(I18n.t('management.personal_profiles.index.no_profile'))
click_on I18n.t('actions.clone.title', model: PersonalProfile.model_name.human)
expect(page).to have_text(I18n.t('management.personal_profiles.create.successfully_created'))
click_on I18n.t('activerecord.models.personal_profile', count: 2).capitalize
expect(page).to_not have_text(I18n.t('management.personal_profiles.index.no_profile'))
click_on I18n.t("activerecord.models.personal_profile", count: 2).capitalize
expect(page).to have_text(I18n.t("management.personal_profiles.index.no_profile"))
click_on I18n.t("actions.clone.title", model: PersonalProfile.model_name.human)
expect(page).to have_text(I18n.t("management.personal_profiles.create.successfully_created"))
click_on I18n.t("activerecord.models.personal_profile", count: 2).capitalize
expect(page).to_not have_text(I18n.t("management.personal_profiles.index.no_profile"))
end
end

View File

@ -1,6 +1,6 @@
require "rails_helper"
feature 'Volunteering' do
feature "Volunteering" do
before do
Rails.application.load_seed
sign_in_as_admin
@ -8,16 +8,16 @@ feature 'Volunteering' do
sign_out
end
scenario 'A user applies to be a volunteer for the upcoming conference' do
scenario "A user applies to be a volunteer for the upcoming conference" do
visit root_path
click_on I18n.t('views.volunteers.apply')
click_on I18n.t("views.volunteers.apply")
fill_in_volunteer_profile
expect(page).to have_content I18n.t('views.volunteers.successful_application')
expect(page).to have_content I18n.t("views.volunteers.successful_application")
sign_in_as_admin
click_on_first_conference_in_management_root
click_on I18n.t('activerecord.models.volunteership', count: 2).capitalize
expect(page).to have_content 'Volunteer Foo'
click_on I18n.t("activerecord.models.volunteership", count: 2).capitalize
expect(page).to have_content "Volunteer Foo"
end
end

View File

@ -1,70 +1,70 @@
require 'rails_helper'
require "rails_helper"
RSpec.describe CallForParticipation, type: :model do
let(:conference) { create :conference }
subject(:cfp) { build :call_for_participation, conference_id: conference.id }
it 'belongs to a conference' do
it "belongs to a conference" do
conference = create :conference
cfp = create(:call_for_participation, conference_id: conference.id)
expect(CallForParticipation.find(cfp.id).conference).to eq conference
end
describe '#open?' do
it 'returns true when the CFP has an opens_at date in the past' do
describe "#open?" do
it "returns true when the CFP has an opens_at date in the past" do
cfp.opens_at = 10.minutes.ago
expect(cfp.open?).to be true
end
it 'returns false when the CFP has no opens_at date' do
it "returns false when the CFP has no opens_at date" do
cfp.opens_at = nil
expect(cfp.open?).to be false
end
it 'returns false when the CFP has an opens_at date in the future' do
it "returns false when the CFP has an opens_at date in the future" do
cfp.opens_at = 10.minutes.from_now
expect(cfp.open?).to be false
end
end
describe '#closed?' do
it 'returns true when the CFP has a closes_at date in the past' do
describe "#closed?" do
it "returns true when the CFP has a closes_at date in the past" do
cfp.closes_at = 10.minutes.ago
expect(cfp.closed?).to be true
end
it 'returns false when the CFP has no closes_at date' do
it "returns false when the CFP has no closes_at date" do
cfp.closes_at = nil
expect(cfp.closed?).to be false
end
it 'returns false when the CFP has a closes_at date in the future' do
it "returns false when the CFP has a closes_at date in the future" do
cfp.closes_at = 10.minutes.from_now
expect(cfp.closed?).to be false
end
end
describe '#in_progress?' do
it 'returns true when the CFP has been opened and has not been closed' do
describe "#in_progress?" do
it "returns true when the CFP has been opened and has not been closed" do
expect(cfp).to receive(:open?) { true }
expect(cfp).to receive(:closed?) { false }
expect(cfp.in_progress?).to be true
end
it 'returns false when the CFP has not been opened' do
it "returns false when the CFP has not been opened" do
expect(cfp).to receive(:open?) { false }
expect(cfp.in_progress?).to be false
end
it 'returns false when the CFP has been closed' do
it "returns false when the CFP has been closed" do
expect(cfp).to receive(:open?) { true }
expect(cfp).to receive(:closed?) { true }
@ -72,32 +72,32 @@ RSpec.describe CallForParticipation, type: :model do
end
end
describe '#open!' do
it 'changes the status of the CFP to open' do
describe "#open!" do
it "changes the status of the CFP to open" do
expect { cfp.open! }.to change { cfp.open? }.from(false).to(true)
end
it 'does not change the open time of the CFP when it has already been set' do
it "does not change the open time of the CFP when it has already been set" do
cfp.opens_at = 10.minutes.ago
expect { cfp.open! }.to_not change { cfp.opens_at }
end
it 'unsets the close time of the CFP' do
it "unsets the close time of the CFP" do
cfp.closes_at = 10.minutes.ago
expect { cfp.open! }.to change { cfp.closes_at }.to(nil)
end
it 'saves the record' do
it "saves the record" do
expect { cfp.open! }.to change { cfp.persisted? }.from(false).to(true)
end
end
describe '#close!' do
it 'changes the status of the CFP to closed' do
describe "#close!" do
it "changes the status of the CFP to closed" do
expect { cfp.close! }.to change { cfp.closed? }.from(false).to(true)
end
it 'saves the record' do
it "saves the record" do
expect { cfp.close! }.to change { cfp.persisted? }.from(false).to(true)
end
end

View File

@ -1,57 +1,57 @@
require 'rails_helper'
require "rails_helper"
RSpec.describe Conference, :type => :model do
describe 'title' do
it 'must not be blank' do
expect(build(:conference, title: '')).to have_error_on :title
RSpec.describe Conference, type: :model do
describe "title" do
it "must not be blank" do
expect(build(:conference, title: "")).to have_error_on :title
end
it 'must be unique' do
create :conference, title: 'ExampleConf'
expect(build(:conference, title: 'ExampleConf')).to have_error_on :title
it "must be unique" do
create :conference, title: "ExampleConf"
expect(build(:conference, title: "ExampleConf")).to have_error_on :title
end
it 'must be translatable' do
it "must be translatable" do
conference = build(:conference)
expect(conference).to have_translatable :title
end
end
describe 'email' do
it 'must be present' do
expect(build(:conference, email: '')).to have_error_on :email
describe "email" do
it "must be present" do
expect(build(:conference, email: "")).to have_error_on :email
end
it 'can contain exatly one @' do
expect(build(:conference, email: 'test@@example.com')).to have_error_on :email
expect(build(:conference, email: 'test@example.com')).to_not have_error_on :email
expect(build(:conference, email: 'testexample.com')).to have_error_on :email
it "can contain exatly one @" do
expect(build(:conference, email: "test@@example.com")).to have_error_on :email
expect(build(:conference, email: "test@example.com")).to_not have_error_on :email
expect(build(:conference, email: "testexample.com")).to have_error_on :email
end
end
describe 'description' do
it 'must be present' do
expect(build(:conference, description: '')).to have_error_on :description
describe "description" do
it "must be present" do
expect(build(:conference, description: "")).to have_error_on :description
end
it 'must be translatable' do
it "must be translatable" do
expect(build(:conference)).to have_translatable :description
end
end
it 'is invalid without a start date' do
it "is invalid without a start date" do
expect(build(:conference, start_date: nil)).to have_error_on :start_date
end
it 'is invalid without an end date' do
it "is invalid without an end date" do
expect(build(:conference, end_date: nil)).to have_error_on :end_date
end
it 'is invalid when the end date is before the start date' do
expect(build(:conference, start_date: '2014-07-29 21:29:13', end_date: '2014-07-28 01:00:00')).to have_error_on :end_date
it "is invalid when the end date is before the start date" do
expect(build(:conference, start_date: "2014-07-29 21:29:13", end_date: "2014-07-28 01:00:00")).to have_error_on :end_date
end
describe 'tracks association' do
describe "tracks association" do
let(:conference) { build :conference }
let(:track) { build :track }
@ -61,12 +61,12 @@ RSpec.describe Conference, :type => :model do
track.save
end
it 'links the conference to its tracks' do
it "links the conference to its tracks" do
expect(conference.tracks).to include track
end
end
describe 'halls association' do
describe "halls association" do
let(:conference) { build :conference }
let(:hall) { build :hall }
@ -76,12 +76,12 @@ RSpec.describe Conference, :type => :model do
hall.save
end
it 'has many associated halls' do
it "has many associated halls" do
expect(conference.halls).to include hall
end
end
describe 'call for participation association' do
describe "call for participation association" do
let(:conference) { build :conference }
let(:call_for_participation) { build :call_for_participation }
@ -91,54 +91,54 @@ RSpec.describe Conference, :type => :model do
call_for_participation.save
end
it 'has one call for participation' do
it "has one call for participation" do
expect(conference.call_for_participation).to eq call_for_participation
end
it 'destroys the associated call for participation when destroyed' do
it "destroys the associated call for participation when destroyed" do
conference.destroy
expect { CallForParticipation.find(call_for_participation.id) }.to raise_exception ActiveRecord::RecordNotFound
end
it 'creates an associated call for participation when the conference is created' do
it "creates an associated call for participation when the conference is created" do
conference.save
expect(conference.call_for_participation).to be_present
end
end
it 'accepts nested attributes for tracks' do
it "accepts nested attributes for tracks" do
track_attributes = build(:track, conference: nil).attributes
conference = create :conference
expect { conference.update tracks_attributes: [track_attributes]}.to change { conference.tracks.count }.by 1
end
it 'rejects nested attributes for tracks when they are all blank' do
it "rejects nested attributes for tracks when they are all blank" do
conference = create :conference
expect { conference.update tracks_attributes: [{'name' => '', 'description' => ''}]}.to_not change { conference.tracks.count }
expect { conference.update tracks_attributes: [{"name" => "", "description" => ""}]}.to_not change { conference.tracks.count }
end
it 'allows destruction of tracks by nested attributes' do
it "allows destruction of tracks by nested attributes" do
conference = create :conference
track_attributes = create(:track, conference: conference).attributes
track_attributes['_destroy'] = 1
track_attributes["_destroy"] = 1
expect { conference.update tracks_attributes: [track_attributes]}.to change { conference.tracks.count }.by(-1)
end
it 'accepts nested attributes for halls' do
it "accepts nested attributes for halls" do
hall_attributes = build(:hall, conference: nil).attributes
conference = create :conference
expect { conference.update halls_attributes: [hall_attributes]}.to change { conference.halls.count }.by 1
end
it 'rejects nested attributes for halls when they are all blank' do
it "rejects nested attributes for halls when they are all blank" do
conference = create :conference
expect { conference.update halls_attributes: [{'name' => '', 'description' => ''}]}.to_not change { conference.halls.count }
expect { conference.update halls_attributes: [{"name" => "", "description" => ""}]}.to_not change { conference.halls.count }
end
it 'allows destruction of halls by nested attributes' do
it "allows destruction of halls by nested attributes" do
conference = create :conference
hall_attributes = create(:hall, conference: conference).attributes
hall_attributes['_destroy'] = 1
hall_attributes["_destroy"] = 1
expect { conference.update halls_attributes: [hall_attributes]}.to change { conference.halls.count }.by(-1)
end
end

View File

@ -1,42 +1,42 @@
require 'rails_helper'
require "rails_helper"
describe Event, type: :model do
let(:event) { build :event }
it 'is invalid if the event agrement is not accepted' do
it "is invalid if the event agrement is not accepted" do
event.agreement = false
expect(event).to have_error_on :agreement
end
it 'is invalid without a title' do
event.title = ''
it "is invalid without a title" do
event.title = ""
expect(event).to have_error_on :title
end
describe 'length' do
it 'must be present' do
event.length = ''
describe "length" do
it "must be present" do
event.length = ""
expect(event).to have_error_on :length
end
it 'must be a number' do
event.length = 'foo'
it "must be a number" do
event.length = "foo"
expect(event).to have_error_on :length
end
it 'must be larger than zero' do
event.length = '-10'
it "must be larger than zero" do
event.length = "-10"
expect(event).to have_error_on :length
end
end
it 'is invalid without an abstract' do
event.abstract = ''
it "is invalid without an abstract" do
event.abstract = ""
expect(event).to have_error_on :abstract
end
it 'is invalid without a description' do
event.description = ''
it "is invalid without a description" do
event.description = ""
expect(event).to have_error_on :description
end
end

View File

@ -1,32 +1,31 @@
require 'rails_helper'
require "rails_helper"
RSpec.describe EventType, type: :model do
describe 'description' do
it 'must be present' do
describe "description" do
it "must be present" do
expect(build(:event_type, description: nil)).to have_error_on :description
end
it 'is translatable' do
it "is translatable" do
event_type = build(:event_type)
expect(event_type).to have_translatable :description
end
end
describe 'name' do
it 'must be present' do
describe "name" do
it "must be present" do
expect(build(:event_type, name: nil)).to have_error_on :name
expect(build(:event_type, name: '')).to have_error_on :name
expect(build(:event_type, name: "")).to have_error_on :name
end
it 'must be unique for a event_type' do
it "must be unique for a event_type" do
conference = create :conference
create :event_type, name: 'foo', conference: conference
expect(build(:event_type, name: 'foo', conference: conference)).to have_error_on :name
expect(build(:event_type, name: 'foo', conference: create(:conference))).to_not have_error_on :name
create :event_type, name: "foo", conference: conference
expect(build(:event_type, name: "foo", conference: conference)).to have_error_on :name
expect(build(:event_type, name: "foo", conference: create(:conference))).to_not have_error_on :name
end
it 'is translatable' do
it "is translatable" do
event_type = build(:event_type)
expect(event_type).to have_translatable :name
end

View File

@ -1,22 +1,22 @@
require 'rails_helper'
require "rails_helper"
RSpec.describe Hall, :type => :model do
it 'is invalid without a name' do
expect(build(:hall, name: '')).to have_error_on :name
RSpec.describe Hall, type: :model do
it "is invalid without a name" do
expect(build(:hall, name: "")).to have_error_on :name
end
it 'belongs to a conference' do
it "belongs to a conference" do
conference = create :conference
expect(build(:hall, conference_id: conference.id).conference).to eq conference
end
it 'has many slots' do
it "has many slots" do
hall = create :hall
slot = create :slot, hall: hall
expect(hall.slots).to include slot
end
it 'destroys all associated slots when destroyed' do
it "destroys all associated slots when destroyed" do
hall = create :hall
create :slot, hall: hall
expect { hall.destroy }.to change { Slot.count }.by(-1)

View File

@ -1,15 +1,15 @@
require 'rails_helper'
require "rails_helper"
RSpec.describe Proposition, type: :model do
it 'belongs to a proposer' do
it "belongs to a proposer" do
user = create :user
expect(create(:proposition, proposer: user).proposer).to eq user
end
it 'belongs to a proposable' do
it "belongs to a proposable" do
event = create :event
expect(create(:proposition, proposable: event).proposable).to eq event
end
it 'is invalid without an existing proposable'
it "is invalid without an existing proposable"
end

View File

@ -1,12 +1,12 @@
require 'rails_helper'
require "rails_helper"
RSpec.describe Slot, :type => :model do
it 'belongs to a hall' do
RSpec.describe Slot, type: :model do
it "belongs to a hall" do
hall = create :hall
expect(build(:slot, hall_id: hall.id).hall).to eq hall
end
it 'belongs to an event' do
it "belongs to an event" do
event = create :event
expect(build(:slot, event_id: event.id).event).to eq event
end

View File

@ -1,23 +1,23 @@
require 'rails_helper'
require "rails_helper"
RSpec.describe Track, :type => :model do
it 'is invalid without a name' do
expect(build(:track, name: '')).to have_error_on :name
RSpec.describe Track, type: :model do
it "is invalid without a name" do
expect(build(:track, name: "")).to have_error_on :name
end
describe 'color' do
it 'must be present' do
expect(build(:track, color: '')).to have_error_on :color
describe "color" do
it "must be present" do
expect(build(:track, color: "")).to have_error_on :color
end
it 'must be a hex RGB triplet' do
expect(build(:track, color: 'foobar')).to have_error_on :color
expect(build(:track, color: '000000')).to_not have_error_on :color
expect(build(:track, color: '#000000')).to_not have_error_on :color
it "must be a hex RGB triplet" do
expect(build(:track, color: "foobar")).to have_error_on :color
expect(build(:track, color: "000000")).to_not have_error_on :color
expect(build(:track, color: "#000000")).to_not have_error_on :color
end
end
it 'belongs to a conference' do
it "belongs to a conference" do
conference = create :conference
expect(build(:track, conference_id: conference.id).conference).to eq conference
end

View File

@ -1,7 +1,7 @@
require 'rails_helper'
require "rails_helper"
RSpec.describe User do
it 'lets Devise handle email and password validations' do
it "lets Devise handle email and password validations" do
expect(build(:user)).to be_a Devise::Models::Validatable
end
end

View File

@ -1,4 +1,4 @@
require 'rails_helper'
require "rails_helper"
RSpec.describe Volunteership, type: :model do
pending "add some examples to (or delete) #{__FILE__}"

View File

@ -2,10 +2,10 @@
# SimpleCov.start 'rails'
# This file is copied to spec/ when you run 'rails generate rspec:install'
ENV["RAILS_ENV"] ||= 'test'
require 'spec_helper'
ENV["RAILS_ENV"] ||= "test"
require "spec_helper"
require File.expand_path("../../config/environment", __FILE__)
require 'rspec/rails'
require "rspec/rails"
# Requires supporting ruby files with custom matchers and macros, etc, in
# spec/support/ and its subdirectories. Files matching `spec/**/*_spec.rb` are
@ -28,7 +28,7 @@ RSpec.configure do |config|
# If you're not using ActiveRecord, or you'd prefer not to run each of your
# examples within a transaction, remove the following line or assign false
# instead of true.
#config.use_transactional_fixtures = true
# config.use_transactional_fixtures = true
# RSpec Rails can automatically mix in different behaviours to your tests
# based on their file location, for example enabling you to call `get` and

View File

@ -30,7 +30,7 @@ RSpec.configure do |config|
# Use the documentation formatter for detailed output,
# unless a formatter has already been configured
# (e.g. via a command-line flag).
config.default_formatter = 'doc'
config.default_formatter = "doc"
end
# Print the 10 slowest examples and example groups at the

View File

@ -1,7 +1,7 @@
Capybara.default_max_wait_time = 5
Capybara.asset_host = 'http://localhost:3000'
Capybara.asset_host = "http://localhost:3000"
Capybara.server = :puma, { Silent: true }
Capybara.server = :puma, {Silent: true}
Capybara.javascript_driver = :selenium_chrome_headless
# RSpec.configure do |config|

View File

@ -27,7 +27,7 @@ RSpec.configure do |config|
# with the specs, so continue to use transaction strategy for speed.
driver_shares_db_connection_with_specs = Capybara.current_driver == :rack_test
if !driver_shares_db_connection_with_specs
unless driver_shares_db_connection_with_specs
# Driver is probably for an external browser with an app
# under test that does *not* share a database connection with the
# specs, so use truncation strategy.

Some files were not shown because too many files have changed in this diff Show More