Merge pull request #114 from snap-cloud/merge-osem-master
Merge osem master
This commit is contained in:
commit
81060a4d65
50 changed files with 330 additions and 394 deletions
51
.github/workflows/spec.yml
vendored
Normal file
51
.github/workflows/spec.yml
vendored
Normal file
|
|
@ -0,0 +1,51 @@
|
|||
name: Specs
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ master ]
|
||||
pull_request:
|
||||
branches: [ master ]
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
linters:
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
OSEM_RUBY_VERSION: 2.6.6
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: ruby/setup-ruby@v1
|
||||
with:
|
||||
ruby-version: 2.6
|
||||
bundler-cache: true
|
||||
- run: bundle exec rubocop
|
||||
- run: bundle exec haml-lint app/views
|
||||
spec:
|
||||
runs-on: ubuntu-latest
|
||||
name: spec
|
||||
env:
|
||||
OSEM_DB_ADAPTER: sqlite3
|
||||
OSEM_RUBY_VERSION: 2.6.6
|
||||
RAILS_ENV: test
|
||||
strategy:
|
||||
matrix:
|
||||
suite: [models, features, controllers, ability, leftovers]
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: ruby/setup-ruby@v1
|
||||
with:
|
||||
ruby-version: 2.6
|
||||
bundler-cache: true
|
||||
- name: Prepare spec
|
||||
run: |
|
||||
rm -f osem_test osem_development
|
||||
bundle exec rake db:setup --trace
|
||||
bundle exec bin/rails webdrivers:chromedriver:update
|
||||
- name: spec/${{ matrix.suite }}
|
||||
run: bundle exec rake spec:${{ matrix.suite }}
|
||||
- name: coverage upload ${{ matrix.suite }}
|
||||
uses: codacy/codacy-coverage-reporter-action@master
|
||||
if: github.ref == 'refs/heads/master'
|
||||
with:
|
||||
project-token: ${{ secrets.CODACY_PROJECT_TOKEN }}
|
||||
coverage-reports: coverage/coverage.xml
|
||||
|
|
@ -434,7 +434,7 @@ Metrics/BlockNesting:
|
|||
# Offense count: 13
|
||||
# Configuration parameters: CountComments.
|
||||
Metrics/ClassLength:
|
||||
Max: 650
|
||||
Max: 652
|
||||
|
||||
# Offense count: 33
|
||||
Metrics/CyclomaticComplexity:
|
||||
|
|
|
|||
|
|
@ -43,8 +43,8 @@ bundle exec rake data:set_conference_in_versions RAILS_ENV=production
|
|||
|
||||
### Organization admins
|
||||
|
||||
We have a new role `organization admins` which allow a user to manage his the
|
||||
organization and create and manage conference within the organization. This
|
||||
We have a new role `organization admins` which allow a user to manage their
|
||||
organization and create and manage a conference within the organization. This
|
||||
needs the role to exist in the database, otherwise the application crashes
|
||||
as it is assumed to exist. For that, run the following rake task:
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
FROM osem/base
|
||||
FROM registry.opensuse.org/opensuse/infrastructure/osem/containers/osem/base:latest
|
||||
ARG CONTAINER_USERID
|
||||
|
||||
# Configure our user
|
||||
|
|
@ -16,6 +16,8 @@ RUN chown -R osem /osem
|
|||
USER osem
|
||||
WORKDIR /osem/
|
||||
|
||||
# Install bundler & foreman
|
||||
RUN sudo gem install bundler:1.17.3 foreman
|
||||
# Install our bundle
|
||||
RUN export NOKOGIRI_USE_SYSTEM_LIBRARIES=1; bundle install --jobs=3 --retry=3
|
||||
|
||||
|
|
|
|||
|
|
@ -1,35 +0,0 @@
|
|||
FROM opensuse/leap:15
|
||||
|
||||
# Install our requirements
|
||||
RUN zypper -n install --no-recommends \
|
||||
# for compiling assets/gems
|
||||
nodejs8 gcc-c++ git-core make \
|
||||
# for ...
|
||||
ImageMagick \
|
||||
# for bundler
|
||||
sudo \
|
||||
# as databases
|
||||
libmariadb-devel postgresql-devel sqlite3-devel \
|
||||
# for nokogiri
|
||||
libxml2-devel libxslt-devel \
|
||||
# for the interactive shell
|
||||
ack curl wget w3m vim which \
|
||||
# as ruby
|
||||
ruby2.5-devel \
|
||||
# as browser for feature tests
|
||||
chromium xorg-x11-fonts
|
||||
|
||||
# Setup sudo
|
||||
RUN echo 'osem ALL=(ALL) NOPASSWD: ALL' >> /etc/sudoers
|
||||
|
||||
# Disable versioned gem binary names
|
||||
RUN echo 'install: --no-format-executable' >> /etc/gemrc
|
||||
|
||||
# Install bundler & foreman
|
||||
RUN gem install bundler:1.17.3 foreman
|
||||
|
||||
# Create our user
|
||||
RUN useradd -m --user-group osem
|
||||
|
||||
CMD ["/bin/bash", "-l"]
|
||||
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
FROM osem/base
|
||||
FROM opensuse/infrastructure/osem/containers/osem/base
|
||||
|
||||
# Add our files
|
||||
COPY --chown=1000:1000 . /osem/
|
||||
|
|
|
|||
11
Gemfile
11
Gemfile
|
|
@ -157,9 +157,6 @@ gem 'font-awesome-rails'
|
|||
# for markdown
|
||||
gem 'redcarpet'
|
||||
|
||||
# as rdoc generator
|
||||
gem 'rdoc-generator-fivefish'
|
||||
|
||||
# for visitor tracking
|
||||
gem 'piwik_analytics', '~> 1.0.1'
|
||||
|
||||
|
|
@ -221,6 +218,8 @@ gem 'nokogiri', '>= 1.8.1'
|
|||
# memcached binary connector
|
||||
gem 'dalli'
|
||||
|
||||
gem 'icalendar'
|
||||
|
||||
# Use guard and spring for testing in development
|
||||
group :development do
|
||||
# to launch specs when files are modified
|
||||
|
|
@ -234,8 +233,6 @@ group :development do
|
|||
gem 'mina'
|
||||
# as debugger on error pages
|
||||
gem 'web-console'
|
||||
# as development database
|
||||
gem 'sqlite3'
|
||||
# prepend models with db schema
|
||||
gem 'annotate'
|
||||
end
|
||||
|
|
@ -248,7 +245,7 @@ group :test do
|
|||
gem 'rspec-rails'
|
||||
gem 'webdrivers'
|
||||
# for measuring test coverage
|
||||
gem 'codecov', require: false
|
||||
gem 'simplecov-cobertura'
|
||||
# for describing models
|
||||
gem 'shoulda-matchers', require: false
|
||||
# for stubing/mocking models
|
||||
|
|
@ -283,4 +280,6 @@ group :development, :test, :linters do
|
|||
gem 'rubocop-rspec', require: false
|
||||
|
||||
gem 'haml-lint', require: false
|
||||
# as development/test database
|
||||
gem 'sqlite3'
|
||||
end
|
||||
|
|
|
|||
49
Gemfile.lock
49
Gemfile.lock
|
|
@ -85,7 +85,7 @@ GEM
|
|||
axlsx_rails (0.5.2)
|
||||
actionpack (>= 3.1)
|
||||
axlsx (>= 2.0.1)
|
||||
bcrypt (3.1.13)
|
||||
bcrypt (3.1.16)
|
||||
bindex (0.6.0)
|
||||
bootstrap-sass (3.4.1)
|
||||
autoprefixer-rails (>= 5.2.1)
|
||||
|
|
@ -104,7 +104,7 @@ GEM
|
|||
rack-test (>= 0.6.3)
|
||||
regexp_parser (~> 1.5)
|
||||
xpath (~> 3.2)
|
||||
carrierwave (2.2.0)
|
||||
carrierwave (2.1.1)
|
||||
activemodel (>= 5.0.0)
|
||||
activesupport (>= 5.0.0)
|
||||
addressable (~> 2.6)
|
||||
|
|
@ -126,9 +126,7 @@ GEM
|
|||
cloudinary (1.11.1)
|
||||
aws_cf_signer
|
||||
rest-client
|
||||
cocoon (1.2.14)
|
||||
codecov (0.5.0)
|
||||
simplecov (>= 0.15, < 0.22)
|
||||
cocoon (1.2.15)
|
||||
coderay (1.1.1)
|
||||
concurrent-ruby (1.1.8)
|
||||
countable-rails (0.0.1)
|
||||
|
|
@ -144,7 +142,7 @@ GEM
|
|||
safe_yaml (~> 1.0.0)
|
||||
crass (1.0.6)
|
||||
daemons (1.3.1)
|
||||
dalli (2.7.10)
|
||||
dalli (2.7.11)
|
||||
dante (0.2.0)
|
||||
database_cleaner (1.7.0)
|
||||
delayed_job (4.1.8)
|
||||
|
|
@ -152,7 +150,7 @@ GEM
|
|||
delayed_job_active_record (4.1.4)
|
||||
activerecord (>= 3.0, < 6.1)
|
||||
delayed_job (>= 3.0, < 5)
|
||||
devise (4.7.1)
|
||||
devise (4.7.3)
|
||||
bcrypt (~> 3.0)
|
||||
orm_adapter (~> 0.1)
|
||||
railties (>= 4.1.0)
|
||||
|
|
@ -254,11 +252,12 @@ GEM
|
|||
i18n (1.8.9)
|
||||
concurrent-ruby (~> 1.0)
|
||||
i18n_data (0.8.0)
|
||||
icalendar (2.7.0)
|
||||
ice_cube (~> 0.16)
|
||||
ice_cube (0.16.3)
|
||||
image_processing (1.12.1)
|
||||
mini_magick (>= 4.9.5, < 5)
|
||||
ruby-vips (>= 2.0.17, < 3)
|
||||
inversion (1.1.1)
|
||||
loggability (~> 0.12)
|
||||
io-like (0.3.0)
|
||||
iso-639 (0.2.8)
|
||||
jaro_winkler (1.5.3)
|
||||
|
|
@ -288,7 +287,6 @@ GEM
|
|||
rb-fsevent (~> 0.9, >= 0.9.4)
|
||||
rb-inotify (~> 0.9, >= 0.9.7)
|
||||
ruby_dep (~> 1.2)
|
||||
loggability (0.14.0)
|
||||
loofah (2.9.0)
|
||||
crass (~> 1.0.2)
|
||||
nokogiri (>= 1.5.9)
|
||||
|
|
@ -300,7 +298,7 @@ GEM
|
|||
method_source (0.8.2)
|
||||
mime-types (3.3.1)
|
||||
mime-types-data (~> 3.2015)
|
||||
mime-types-data (3.2021.0212)
|
||||
mime-types-data (3.2021.0225)
|
||||
mimemagic (0.3.5)
|
||||
mina (1.2.3)
|
||||
open4 (~> 1.3.4)
|
||||
|
|
@ -371,7 +369,7 @@ GEM
|
|||
parser (2.6.5.0)
|
||||
ast (~> 2.4.0)
|
||||
path_expander (1.1.0)
|
||||
pdf-core (0.7.0)
|
||||
pdf-core (0.9.0)
|
||||
pdf-inspector (1.3.0)
|
||||
pdf-reader (>= 1.0, < 3.0.a)
|
||||
pdf-reader (2.2.0)
|
||||
|
|
@ -385,13 +383,13 @@ GEM
|
|||
actionpack
|
||||
activesupport
|
||||
rails (>= 3.0.0)
|
||||
prawn (2.2.2)
|
||||
pdf-core (~> 0.7.0)
|
||||
ttfunk (~> 1.5)
|
||||
prawn (2.4.0)
|
||||
pdf-core (~> 0.9.0)
|
||||
ttfunk (~> 1.7)
|
||||
prawn-qrcode (0.3.1)
|
||||
prawn (>= 1)
|
||||
rqrcode (>= 0.4.1)
|
||||
prawn-rails (1.2.0)
|
||||
prawn-rails (1.3.0)
|
||||
prawn
|
||||
prawn-table
|
||||
rails (>= 3.1.0)
|
||||
|
|
@ -488,12 +486,6 @@ GEM
|
|||
rb-fsevent (0.10.3)
|
||||
rb-inotify (0.10.0)
|
||||
ffi (~> 1.0)
|
||||
rdoc (6.0.4)
|
||||
rdoc-generator-fivefish (0.4.0)
|
||||
inversion (~> 1.1)
|
||||
loggability (~> 0.12)
|
||||
rdoc (~> 6.0)
|
||||
yajl-ruby (~> 1.3)
|
||||
recaptcha (4.14.0)
|
||||
json
|
||||
redcarpet (3.5.1)
|
||||
|
|
@ -599,6 +591,8 @@ GEM
|
|||
docile (~> 1.1)
|
||||
simplecov-html (~> 0.11)
|
||||
simplecov_json_formatter (~> 0.1)
|
||||
simplecov-cobertura (1.4.2)
|
||||
simplecov (~> 0.8)
|
||||
simplecov-html (0.12.3)
|
||||
simplecov_json_formatter (0.1.2)
|
||||
sixarm_ruby_unaccent (1.2.0)
|
||||
|
|
@ -635,7 +629,7 @@ GEM
|
|||
tilt (2.0.9)
|
||||
timecop (0.9.1)
|
||||
transitions (1.2.1)
|
||||
ttfunk (1.5.1)
|
||||
ttfunk (1.7.0)
|
||||
turbolinks (5.2.1)
|
||||
turbolinks-source (~> 5.2)
|
||||
turbolinks-source (5.2.0)
|
||||
|
|
@ -650,8 +644,8 @@ GEM
|
|||
unicode_utils (1.4.0)
|
||||
unobtrusive_flash (3.3.1)
|
||||
railties
|
||||
warden (1.2.8)
|
||||
rack (>= 2.0.6)
|
||||
warden (1.2.9)
|
||||
rack (>= 2.0.9)
|
||||
web-console (3.7.0)
|
||||
actionview (>= 5.0)
|
||||
activemodel (>= 5.0)
|
||||
|
|
@ -672,7 +666,6 @@ GEM
|
|||
chronic (>= 0.6.3)
|
||||
xpath (3.2.0)
|
||||
nokogiri (~> 1.8)
|
||||
yajl-ruby (1.4.1)
|
||||
|
||||
PLATFORMS
|
||||
ruby
|
||||
|
|
@ -699,7 +692,6 @@ DEPENDENCIES
|
|||
climate_control
|
||||
cloudinary
|
||||
cocoon
|
||||
codecov
|
||||
countable-rails
|
||||
country_select
|
||||
daemons
|
||||
|
|
@ -720,6 +712,7 @@ DEPENDENCIES
|
|||
guard-rspec
|
||||
haml-lint
|
||||
haml-rails
|
||||
icalendar
|
||||
iso-639
|
||||
jquery-datatables
|
||||
jquery-rails
|
||||
|
|
@ -766,7 +759,6 @@ DEPENDENCIES
|
|||
rails-assets-waypoints!
|
||||
rails-controller-testing
|
||||
rails-i18n
|
||||
rdoc-generator-fivefish
|
||||
recaptcha
|
||||
redcarpet
|
||||
responders (~> 2.0)
|
||||
|
|
@ -782,6 +774,7 @@ DEPENDENCIES
|
|||
sentry-rails
|
||||
sentry-ruby
|
||||
shoulda-matchers
|
||||
simplecov-cobertura
|
||||
skylight
|
||||
spring-commands-rspec
|
||||
sprockets-rails
|
||||
|
|
|
|||
|
|
@ -13,11 +13,13 @@ $(function () {
|
|||
|
||||
$("#conference-start-datepicker").datetimepicker({
|
||||
useCurrent: false,
|
||||
format: "YYYY-MM-DD"
|
||||
ignoreReadonly: true,
|
||||
format: "YYYY-MM-DD",
|
||||
});
|
||||
|
||||
$("#conference-end-datepicker").datetimepicker({
|
||||
useCurrent: false,
|
||||
ignoreReadonly: true,
|
||||
format: "YYYY-MM-DD"
|
||||
});
|
||||
|
||||
|
|
|
|||
|
|
@ -6,8 +6,11 @@ class ConferencesController < ApplicationController
|
|||
load_and_authorize_resource find_by: :short_title, except: :show
|
||||
|
||||
def index
|
||||
@current = Conference.where('end_date >= ?', Date.current).reorder(start_date: :asc)
|
||||
@antiquated = Conference.where('end_date < ?', Date.current)
|
||||
@current = Conference.upcoming.reorder(start_date: :asc)
|
||||
@antiquated = Conference.past
|
||||
if @antiquated.empty? && @current.empty? && User.empty?
|
||||
render :new_install
|
||||
end
|
||||
end
|
||||
|
||||
def show
|
||||
|
|
@ -68,6 +71,47 @@ class ConferencesController < ApplicationController
|
|||
end
|
||||
end
|
||||
|
||||
def calendar
|
||||
respond_to do |format|
|
||||
format.ics do
|
||||
calendar = Icalendar::Calendar.new
|
||||
Conference.all.each do |conf|
|
||||
if params[:full]
|
||||
event_schedules = conf.program.selected_event_schedules(
|
||||
includes: [{ event: %i[event_type speakers submitter] }]
|
||||
)
|
||||
calendar = icalendar_proposals(calendar, event_schedules.map(&:event), conf)
|
||||
else
|
||||
calendar.event do |e|
|
||||
e.dtstart = conf.start_date
|
||||
e.dtstart.ical_params = { 'VALUE'=>'DATE' }
|
||||
e.dtend = conf.end_date
|
||||
e.dtend.ical_params = { 'VALUE'=>'DATE' }
|
||||
e.duration = "P#{(conf.end_date - conf.start_date + 1).floor}D"
|
||||
e.created = conf.created_at
|
||||
e.last_modified = conf.updated_at
|
||||
e.summary = conf.title
|
||||
e.description = conf.description
|
||||
e.uid = conf.guid
|
||||
e.url = conference_url(conf.short_title)
|
||||
v = conf.venue
|
||||
if v
|
||||
e.geo = v.latitude, v.longitude if v.latitude && v.longitude
|
||||
location = ''
|
||||
location += "#{v.street}, " if v.street
|
||||
location += "#{v.postalcode} #{v.city}, " if v.postalcode && v.city
|
||||
location += v.country_name if v.country_name
|
||||
e.location = location if location
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
calendar.publish
|
||||
render inline: calendar.to_ical
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def conference_finder_conditions
|
||||
|
|
|
|||
|
|
@ -21,6 +21,12 @@ class SchedulesController < ApplicationController
|
|||
format.xml do
|
||||
@events_xml = event_schedules.map(&:event).group_by{ |event| event.time.to_date } if event_schedules
|
||||
end
|
||||
format.ics do
|
||||
cal = Icalendar::Calendar.new
|
||||
cal = icalendar_proposals(cal, event_schedules.map(&:event), @conference)
|
||||
cal.publish
|
||||
render inline: cal.to_ical
|
||||
end
|
||||
|
||||
format.html do
|
||||
@rooms = @conference.venue.rooms if @conference.venue
|
||||
|
|
|
|||
|
|
@ -27,4 +27,33 @@ module ConferenceHelper
|
|||
|
||||
markdown(ticket.description.split("\n").first&.strip)
|
||||
end
|
||||
|
||||
# adds events to icalendar for proposals in a conference
|
||||
def icalendar_proposals(calendar, proposals, conference)
|
||||
proposals.each do |proposal|
|
||||
calendar.event do |e|
|
||||
e.dtstart = proposal.time
|
||||
e.dtend = proposal.time + proposal.event_type.length * 60
|
||||
e.duration = "PT#{proposal.event_type.length}M"
|
||||
e.created = proposal.created_at
|
||||
e.last_modified = proposal.updated_at
|
||||
e.summary = proposal.title
|
||||
e.description = proposal.abstract
|
||||
e.uid = proposal.guid
|
||||
e.url = conference_program_proposal_url(conference.short_title, proposal.id)
|
||||
v = conference.venue
|
||||
if v
|
||||
e.geo = v.latitude, v.longitude if v.latitude && v.longitude
|
||||
location = ''
|
||||
location += "#{proposal.room.name} - " if proposal.room.name
|
||||
location += " - #{v.street}, " if v.street
|
||||
location += "#{v.postalcode} #{v.city}, " if v.postalcode && v.city
|
||||
location += "#{v.country_name}, " if v.country_name
|
||||
e.location = location
|
||||
end
|
||||
e.categories = conference.title, "Difficulty: #{proposal.difficulty_level.title}", "Track: #{proposal.track.name}"
|
||||
end
|
||||
end
|
||||
calendar
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -61,6 +61,9 @@ class Conference < ApplicationRecord
|
|||
has_one :email_settings, dependent: :destroy
|
||||
has_one :program, dependent: :destroy
|
||||
has_one :venue, dependent: :destroy
|
||||
delegate :city, :country_name, to: :venue, allow_nil: true
|
||||
delegate :name, :street, to: :venue, prefix: true, allow_nil: true
|
||||
|
||||
has_many :ticket_purchases, dependent: :destroy
|
||||
has_many :physical_tickets, through: :ticket_purchases
|
||||
has_many :payments, dependent: :destroy
|
||||
|
|
|
|||
|
|
@ -24,8 +24,8 @@ class SurveyQuestion < ActiveRecord::Base
|
|||
|
||||
validates :title, presence: true
|
||||
validates :possible_answers, :max_choices, :min_choices, presence: true, if: :choice?
|
||||
validates :min_choices, numericality: { greater_than_or_equal_to: 1 }, allow_blank: true
|
||||
validates :max_choices, numericality: { greater_than_or_equal_to: 1 }, allow_blank: true
|
||||
validates :min_choices, numericality: { greater_than_or_equal_to: 1 }, allow_blank: true, if: :choice?
|
||||
validates :max_choices, numericality: { greater_than_or_equal_to: 1 }, allow_blank: true, if: :choice?
|
||||
|
||||
validate :max_choices_greater_than_min
|
||||
|
||||
|
|
|
|||
|
|
@ -69,9 +69,9 @@ class TicketPdf < Prawn::Document
|
|||
draw_text @conference.title.to_s, at: [@mid_horizontal + 30, cursor - 30], size: 12
|
||||
draw_text @conference.organization.name.to_s, at: [@mid_horizontal + 30, cursor - 50], size: 12
|
||||
if @conference.venue
|
||||
draw_text @conference.venue.name, at: [@mid_horizontal + 30, cursor - 70]
|
||||
draw_text @conference.venue.street, at: [@mid_horizontal + 30, cursor - 90]
|
||||
draw_text @conference.venue.city, at: [@mid_horizontal + 30, cursor - 110]
|
||||
draw_text @conference.venue_name, at: [@mid_horizontal + 30, cursor - 70]
|
||||
draw_text @conference.venue_street, at: [@mid_horizontal + 30, cursor - 90]
|
||||
draw_text @conference.city, at: [@mid_horizontal + 30, cursor - 110]
|
||||
end
|
||||
move_up 130
|
||||
move_down @mid_vertical
|
||||
|
|
|
|||
|
|
@ -6,6 +6,8 @@ class PictureUploader < CarrierWave::Uploader::Base
|
|||
include CarrierWave::Compatibility::Paperclip
|
||||
include CarrierWave::BombShelter
|
||||
|
||||
storage :file
|
||||
|
||||
# use cloudinary if it's configured
|
||||
if Cloudinary.config.cloud_name
|
||||
# use https by default
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
|
||||
.row
|
||||
.col-md-12
|
||||
= f.input :title
|
||||
= f.input :title, input_html: { autofocus: true }
|
||||
= f.input :mandatory
|
||||
.survey-possible-answers{ class: @survey_question.choice? ? '' : 'hidden' }
|
||||
= f.input :possible_answers, hint: 'Comma separated', input_html: { rows: 3 }
|
||||
|
|
|
|||
|
|
@ -7,4 +7,4 @@
|
|||
.panel-body
|
||||
- question_replies = survey_question.survey_replies
|
||||
- if question_replies.any?
|
||||
= pie_chart question_replies.group(:text).count, library: { legend: 'bottom', plotOptions: { pie: { dataLabels: { enabled: false }, showInLegend: true } } }
|
||||
= pie_chart question_replies.group(:text).count, library: { legend: { position: 'bottom' }, plotOptions: { pie: { dataLabels: { enabled: false }, showInLegend: true } } }
|
||||
|
|
|
|||
|
|
@ -7,6 +7,11 @@
|
|||
= event.title
|
||||
%small
|
||||
= event.subtitle
|
||||
.text-muted
|
||||
= registered_text(event)
|
||||
- if event.scheduled?
|
||||
(Scheduled on: #{event.time.to_date})
|
||||
|
||||
.panel-body
|
||||
-# %p
|
||||
-# = canceled_replacement_event_label(event, event_schedule)
|
||||
|
|
|
|||
|
|
@ -9,9 +9,9 @@
|
|||
-if @conference.venue
|
||||
at
|
||||
%strong
|
||||
= "#{@conference.venue.name},"
|
||||
= "#{@conference.venue.street},"
|
||||
= "#{@conference.venue.city} / #{@conference.venue.country_name}."
|
||||
= "#{@conference.venue_name},"
|
||||
= "#{@conference.venue_street},"
|
||||
= "#{@conference.city} / #{@conference.country_name}."
|
||||
%small
|
||||
= date_string(@conference.start_date, @conference.end_date)
|
||||
- unless @conference.code_of_conduct.blank?
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@
|
|||
= date_string(conference.start_date, conference.end_date)
|
||||
- if conference.venue
|
||||
%p
|
||||
= "#{conference.venue.city}/#{conference.venue.country_name}"
|
||||
= "#{conference.city}/#{conference.country_name}"
|
||||
- unless conference.description.blank?
|
||||
%p
|
||||
= markdown(conference.description, escape_html=false)
|
||||
|
|
|
|||
|
|
@ -18,8 +18,11 @@
|
|||
#antiquated
|
||||
- @antiquated.each do |conference|
|
||||
= render '/conferences/conference_details', conference: conference
|
||||
- if @antiquated.empty? && @current.empty? && User.empty?
|
||||
= render partial: 'new_install'
|
||||
%p
|
||||
Add the events to your calendar:
|
||||
%span.btn-group
|
||||
= link_to("Days only", calendar_url(protocol: 'webcal', format: 'ics'), class: 'btn btn-default')
|
||||
= link_to("Detailed", calendar_url(protocol: 'webcal', format: 'ics', full: true), class: 'btn btn-default')
|
||||
|
||||
-content_for :script_body do
|
||||
:javascript
|
||||
|
|
|
|||
|
|
@ -17,5 +17,5 @@
|
|||
will the be administrator of it.
|
||||
%p
|
||||
We hope you enjoy using OSEM, if you have any question don't hesitate to
|
||||
= link_to('http://osem.io/#contact') do
|
||||
= link_to('https://osem.io/#contact') do
|
||||
contact us!
|
||||
|
|
@ -23,8 +23,8 @@
|
|||
%li
|
||||
= link_to(conference_conference_registration_path(@conference)) do
|
||||
%span.fa.fa-id-badge
|
||||
= @conference.short_title
|
||||
registration
|
||||
= @conference.short_title
|
||||
registration
|
||||
-if @conference && @conference.program
|
||||
%li
|
||||
= link_to(conference_program_proposals_path(@conference.short_title)) do
|
||||
|
|
|
|||
|
|
@ -9,9 +9,9 @@
|
|||
- if @conference.venue
|
||||
at
|
||||
%strong
|
||||
#{@conference.venue.name},
|
||||
#{@conference.venue.street},
|
||||
#{@conference.venue.city} / #{@conference.venue.country_name}.
|
||||
#{@conference.venue_name},
|
||||
#{@conference.venue_street},
|
||||
#{@conference.city} / #{@conference.country_name}.
|
||||
%small
|
||||
= date_string(@conference.start_date, @conference.end_date)
|
||||
.row
|
||||
|
|
|
|||
|
|
@ -57,7 +57,18 @@
|
|||
= f.input :submission_text, input_html: { rows: 5, data: { provide: 'markdown' }, placeholder: '' },
|
||||
hint: markdown_hint('Only conference organizers will read this.')
|
||||
|
||||
- if current_user.is_admin? or @program.cfp.enable_registrations?
|
||||
%p
|
||||
You have used
|
||||
%span#submission-count #{@event.submission_word_count}
|
||||
words. Submission descriptions must be between
|
||||
%span#submission-minimum-word-count
|
||||
0
|
||||
and
|
||||
%span#submission-maximum-word-count
|
||||
250
|
||||
words.
|
||||
|
||||
- if current_user.is_admin? or @program.cfp&.enable_registrations?
|
||||
= f.inputs 'Enable pre-registration' do
|
||||
= f.input :require_registration, label: 'Require participants to register to your event'
|
||||
- message = @event.room ? "Value must be between 1 and #{@event.room.size}" : 'Check room capacity after scheduling.'
|
||||
|
|
|
|||
|
|
@ -36,17 +36,17 @@
|
|||
data: { min_words: type.minimum_abstract_length, max_words: type.maximum_abstract_length }]},
|
||||
include_blank: false, label: 'Type', input_html: { class: 'select-help-toggle' }
|
||||
|
||||
- if @program.languages.present?
|
||||
= f.input :language, as: :select,
|
||||
collection: @languages,
|
||||
include_blank: false, label: 'Language', input_html: { class: 'select-help-toggle' }
|
||||
|
||||
- @program.event_types.each do |event_type|
|
||||
%div{ class: 'help-block event_event_type_id collapse', id: "#{event_type.id}-help"}
|
||||
%strong Directions
|
||||
%div
|
||||
= markdown(event_type.description)
|
||||
|
||||
- if @program.languages.present?
|
||||
= f.input :language, as: :select,
|
||||
collection: @languages,
|
||||
include_blank: false, label: 'Language', input_html: { class: 'select-help-toggle' }
|
||||
|
||||
= f.input :abstract, required: true, input_html: { rows: 5, data: { provide: 'markdown' } },
|
||||
hint: markdown_hint
|
||||
|
||||
|
|
|
|||
|
|
@ -26,9 +26,13 @@
|
|||
|
||||
.visible-md-inline.visible-lg-inline
|
||||
= render partial: 'carousel', locals: { date: date, hrs_per_slide: 3 }
|
||||
%p.pull-right
|
||||
= link_to app_conference_schedule_path do
|
||||
Get the mobile app!
|
||||
%p
|
||||
%span
|
||||
= link_to conference_schedule_url(protocol: 'webcal', format: 'ics') do
|
||||
Add the schedule to your calendar
|
||||
%span.pull-right
|
||||
= link_to app_conference_schedule_path do
|
||||
Get the mobile app!
|
||||
|
||||
:javascript
|
||||
// change of active tab and the button title when a date is clicked
|
||||
|
|
|
|||
|
|
@ -113,5 +113,5 @@ Osem::Application.configure do
|
|||
devise_config.ichain_test_mode = true
|
||||
end
|
||||
end
|
||||
|
||||
config.active_record.verbose_query_logs = true
|
||||
end
|
||||
|
|
|
|||
|
|
@ -97,7 +97,7 @@ Osem::Application.configure do
|
|||
domain: ENV['OSEM_SMTP_DOMAIN'],
|
||||
enable_starttls_auto: ENV['OSEM_SMTP_ENABLE_STARTTLS_AUTO'],
|
||||
openssl_verify_mode: ENV['OSEM_SMTP_OPENSSL_VERIFY_MODE']
|
||||
}
|
||||
}.compact
|
||||
|
||||
# Set the secret_key_base from the env, if not set by any other means
|
||||
config.secret_key_base ||= ENV["SECRET_KEY_BASE"]
|
||||
|
|
|
|||
|
|
@ -1,17 +0,0 @@
|
|||
# http://www.jkfill.com/2015/02/14/log-which-line-caused-a-query/
|
||||
module LogQuerySource
|
||||
def debug(*args, &block)
|
||||
return unless super
|
||||
|
||||
backtrace = Rails.backtrace_cleaner.clean caller
|
||||
|
||||
relevant_caller_line = backtrace.detect do |caller_line|
|
||||
!caller_line.include?('/initializers/')
|
||||
end
|
||||
|
||||
if relevant_caller_line
|
||||
logger.debug(" ↳ #{ relevant_caller_line.sub("#{ Rails.root }/", '') }")
|
||||
end
|
||||
end
|
||||
end
|
||||
ActiveRecord::LogSubscriber.send :prepend, LogQuerySource
|
||||
|
|
@ -112,10 +112,10 @@ Devise.setup do |config|
|
|||
|
||||
# ==> Configuration for :confirmable
|
||||
# A period that the user is allowed to access the website even without
|
||||
# confirming his account. For instance, if set to 2.days, the user will be
|
||||
# able to access the website for two days without confirming his account,
|
||||
# confirming their account. For instance, if set to 2.days, the user will be
|
||||
# able to access the website for two days without confirming their account,
|
||||
# access will be blocked just in the third day. Default is 0.days, meaning
|
||||
# the user cannot access the website without confirming his account.
|
||||
# the user cannot access the website without confirming their account.
|
||||
config.allow_unconfirmed_access_for = 2.days
|
||||
|
||||
# If true, requires any email changes to be confirmed (exactly the same way as
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
Sentry.init do |config|
|
||||
config.enabled_environments = %|production staging|
|
||||
config.dsn = ENV['SENTRY_DSN']
|
||||
# config.dsn = ENV.fetch('OSEM_SENTRY_DSN', Rails.application.secrets.sentry_dsn)
|
||||
config.breadcrumbs_logger = [:active_support_logger]
|
||||
|
||||
# To activate performance monitoring, set one of these options.
|
||||
|
|
@ -8,6 +9,15 @@ Sentry.init do |config|
|
|||
config.traces_sample_rate = 0.5
|
||||
# or
|
||||
# config.traces_sampler = lambda do |context|
|
||||
# true
|
||||
# true
|
||||
# end
|
||||
|
||||
# During deployment we touch tmp/restart.txt, let's use its last access time as release.
|
||||
# Unless someone has set a variable of course...
|
||||
# osem_version_from_file = nil
|
||||
# version_file = File.expand_path('../../tmp/restart.txt', __dir__)
|
||||
# osem_version_from_file = File.new(version_file).atime.to_i if File.file?(version_file)
|
||||
# osem_version = ENV.fetch('OSEM_SENTRY_RELEASE', osem_version_from_file)
|
||||
osem_version = ENV['HEROKU_RELEASE_VERSION']
|
||||
config.release = osem_version if osem_version
|
||||
end
|
||||
|
|
|
|||
|
|
@ -222,6 +222,8 @@ Osem::Application.routes.draw do
|
|||
|
||||
get '/admin' => redirect('/admin/conferences')
|
||||
|
||||
get '/calendar' => 'conferences#calendar'
|
||||
|
||||
unless ENV['OSEM_ROOT_CONFERENCE'].blank?
|
||||
root to: redirect("/conferences/#{ENV['OSEM_ROOT_CONFERENCE']}")
|
||||
else
|
||||
|
|
|
|||
|
|
@ -31,8 +31,8 @@ production:
|
|||
# Generate your own with rake secret or use the environment
|
||||
# secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>
|
||||
|
||||
# Your errbit API key
|
||||
# errbit_key: '12345'
|
||||
# Your sentry.io DSN key
|
||||
# sentry_dsn: '12345'
|
||||
|
||||
########## OMNIAUTH Providers ##########
|
||||
# Leave the variables' names empty, unless you use the providers, in which
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ version: "2.4"
|
|||
|
||||
services:
|
||||
database:
|
||||
image: postgres
|
||||
image: postgres:12-alpine
|
||||
environment:
|
||||
PGDATA: /var/lib/postgresql/data/pgdata
|
||||
POSTGRES_PASSWORD: $OSEM_DB_PASSWORD
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ version: "2.4"
|
|||
|
||||
services:
|
||||
production_database:
|
||||
image: postgres
|
||||
image: postgres:12-alpine
|
||||
environment:
|
||||
PGDATA: /var/lib/postgresql/data/pgdata
|
||||
POSTGRES_PASSWORD: $OSEM_DB_PASSWORD
|
||||
|
|
|
|||
|
|
@ -49,12 +49,8 @@
|
|||
# See https://github.com/openSUSE/osem/wiki/Translation
|
||||
# OSEM_TRANSIFEX_APIKEY=1234
|
||||
|
||||
# The errbit host to post exceptions to
|
||||
# OSEM_ERRBIT_HOST=errbit.example.com
|
||||
# The project to use on the errbit host
|
||||
# OSEM_ERRBIT_ID=1234
|
||||
# The key for this project
|
||||
# OSEM_ERRBIT_KEY=5678
|
||||
# sentry.io DSN key
|
||||
# OSEM_SENTRY_DSN=1234
|
||||
|
||||
# OMNIAUTH Developer Key/Secret for GOOGLE
|
||||
# OSEM_GOOGLE_KEY=1234
|
||||
|
|
|
|||
|
|
@ -1,235 +0,0 @@
|
|||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
|
||||
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
|
||||
=EXOv
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
||||
|
|
@ -34,7 +34,7 @@ namespace :data do
|
|||
dot_env.puts "OSEM_SMTP_USERNAME=\"#{CONFIG['mail_username']}\""
|
||||
dot_env.puts "OSEM_SMTP_PASSWORD=\"#{CONFIG['mail_password']}\""
|
||||
dot_env.puts "OSEM_SMTP_AUTHENTICATION=\"#{CONFIG['mail_authentication']}\""
|
||||
dot_env.puts 'OSEM_SMTP_DOMAIN=""'
|
||||
dot_env.puts '# OSEM_SMTP_DOMAIN="example.com"'
|
||||
dot_env.close
|
||||
|
||||
puts "Migrated config/config.yml to .env.#{Rails.env}"
|
||||
|
|
|
|||
26
lib/tasks/spec.rake
Normal file
26
lib/tasks/spec.rake
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
unless Rails.env.production?
|
||||
namespace :spec do
|
||||
desc 'rspec ability'
|
||||
task :ability do
|
||||
sh 'bundle exec rspec --format documentation spec/ability'
|
||||
end
|
||||
desc 'rspec models'
|
||||
task :models do
|
||||
sh 'bundle exec rspec --format documentation spec/models'
|
||||
end
|
||||
desc 'rspec controllers'
|
||||
task :controllers do
|
||||
sh 'bundle exec rspec --format documentation spec/controllers'
|
||||
end
|
||||
desc 'rspec features'
|
||||
task :features do
|
||||
sh 'bundle exec rspec --format documentation spec/features'
|
||||
end
|
||||
desc 'rspec the leftovers'
|
||||
task :leftovers do
|
||||
sh 'bundle exec rspec --format documentation --exclude-pattern "spec/{models,features,controllers,ability}/**/*_spec.rb"'
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
@ -1,5 +1,3 @@
|
|||
require 'pry'
|
||||
|
||||
# frozen_string_literal: true
|
||||
|
||||
require 'spec_helper'
|
||||
|
|
|
|||
|
|
@ -8,10 +8,10 @@ describe Admin::UsersController do
|
|||
sign_in(admin)
|
||||
end
|
||||
describe 'GET #index' do
|
||||
it 'sets up users array with existing users records' do
|
||||
xit 'sets up users array with existing users records' do
|
||||
user1 = create(:user, email: 'user1@email.osem')
|
||||
user2 = create(:user, email: 'user2@email.osem')
|
||||
user_deleted = User.find_by(name: 'User deleted')
|
||||
user_deleted = User.find_by!(username: 'deleted_user')
|
||||
get :index
|
||||
expect(assigns(:users)).to match_array([user_deleted, user, admin, user1, user2])
|
||||
end
|
||||
|
|
|
|||
|
|
@ -126,7 +126,6 @@ describe UserDatatable do
|
|||
end
|
||||
|
||||
it 'confirmed_at' do
|
||||
|
||||
expect(Date.parse(user_data[:confirmed_at])).to eq(user.confirmed_at.to_date)
|
||||
end
|
||||
|
||||
|
|
|
|||
|
|
@ -34,31 +34,31 @@ feature 'BaseController' do
|
|||
expect(flash).to eq 'You are not authorized to access this page.'
|
||||
end
|
||||
|
||||
it 'an admin he can access the admin area' do
|
||||
it 'an admin they can access the admin area' do
|
||||
user.is_admin = true
|
||||
visit admin_conferences_path
|
||||
expect(current_path).to eq admin_conferences_path
|
||||
end
|
||||
|
||||
it 'an organizer he can access the admin area' do
|
||||
it 'an organizer they can access the admin area' do
|
||||
user.role_ids = organizer_role.id
|
||||
visit admin_conferences_path
|
||||
expect(current_path).to eq admin_conferences_path
|
||||
end
|
||||
|
||||
it 'a volunteers_coordinator he can access the admin area' do
|
||||
it 'a volunteers_coordinator they can access the admin area' do
|
||||
user.role_ids = volunteers_coordinator_role.id
|
||||
visit admin_conferences_path
|
||||
expect(current_path).to eq admin_conferences_path
|
||||
end
|
||||
|
||||
it 'a cfp he can access the admin area' do
|
||||
it 'a cfp they can access the admin area' do
|
||||
user.role_ids = cfp_role.id
|
||||
visit admin_conferences_path
|
||||
expect(current_path).to eq admin_conferences_path
|
||||
end
|
||||
|
||||
it 'an info_desk he can access the admin area' do
|
||||
it 'an info_desk they can access the admin area' do
|
||||
user.role_ids = info_desk_role.id
|
||||
visit admin_conferences_path
|
||||
expect(current_path).to eq admin_conferences_path
|
||||
|
|
|
|||
|
|
@ -107,6 +107,17 @@ feature Event do
|
|||
expect(User.count).to eq(expected_count_user)
|
||||
end
|
||||
|
||||
scenario 'edit proposal without cfp' do
|
||||
conference = create(:conference)
|
||||
proposal = create(:event, program: conference.program)
|
||||
|
||||
sign_in proposal.submitter
|
||||
|
||||
visit edit_conference_program_proposal_path(proposal.program.conference.short_title, proposal)
|
||||
|
||||
expect(page).to have_content 'Proposal Information'
|
||||
end
|
||||
|
||||
scenario 'update a proposal' do
|
||||
conference = create(:conference)
|
||||
create(:cfp, program: conference.program)
|
||||
|
|
@ -145,7 +156,6 @@ feature Event do
|
|||
# Submission Instructions content
|
||||
expect(page).to have_text('Example Event Instructions')
|
||||
|
||||
|
||||
click_link 'Do you require something special?'
|
||||
fill_in 'event_description', with: 'Lorem ipsum description'
|
||||
|
||||
|
|
|
|||
|
|
@ -232,7 +232,7 @@ feature 'Version' do
|
|||
end
|
||||
|
||||
# TODO-SNAPCON: Figure out why this is failing!!
|
||||
skip 'display changes in splashpages', feature: true, versioning: true, js: true do
|
||||
xscenario 'display changes in splashpages', feature: true, versioning: true, js: true do
|
||||
visit admin_conference_splashpage_path(conference.short_title)
|
||||
click_link 'Create Splashpage'
|
||||
click_button 'Save Changes'
|
||||
|
|
@ -247,15 +247,15 @@ feature 'Version' do
|
|||
uncheck('Display social media links')
|
||||
check('Make splash page public?')
|
||||
click_button 'Save Changes'
|
||||
splashpage_id = conference.splashpage.id
|
||||
|
||||
click_link 'Delete'
|
||||
page.accept_alert
|
||||
expect(page).to have_text('Splashpage was successfully destroyed')
|
||||
|
||||
visit admin_revision_history_path
|
||||
expect(page).to have_text("#{organizer.name} created new splashpage with ID #{splashpage_id} in conference #{conference.short_title}")
|
||||
expect(page).to have_text("#{organizer.name} updated public, include program, include cfp, include venue, include tickets, include lodgings, include sponsors and include social media of splashpage with ID #{splashpage_id} in conference #{conference.short_title}")
|
||||
expect(page).to have_text("#{organizer.name} deleted splashpage with ID #{splashpage_id} in conference #{conference.short_title}")
|
||||
expect(page).to have_text("#{organizer.name} created new splashpage in conference #{conference.short_title}")
|
||||
expect(page).to have_text("#{organizer.name} updated public, include program, include cfp, include venue, include tickets, include lodgings, include sponsors and include social media of splashpage in conference #{conference.short_title}")
|
||||
expect(page).to have_text("#{organizer.name} deleted splashpage in conference #{conference.short_title}")
|
||||
end
|
||||
|
||||
scenario 'displays users subscribe/unsubscribe to conferences', feature: true, versioning: true, js: true do
|
||||
|
|
|
|||
|
|
@ -39,6 +39,34 @@
|
|||
# !/bin/env ruby
|
||||
require 'spec_helper'
|
||||
|
||||
context 'Delegation' do
|
||||
subject do
|
||||
FactoryBot.create(:conference, start_date: 1.month.from_now, end_date: 2.month.from_now)
|
||||
end
|
||||
|
||||
context 'Venue' do
|
||||
context 'when venue has not been set' do
|
||||
it 'the accessors should be nil' do
|
||||
expect(subject.city).to eq(nil)
|
||||
expect(subject.country_name).to eq(nil)
|
||||
expect(subject.venue_name).to eq(nil)
|
||||
expect(subject.venue_street).to eq(nil)
|
||||
end
|
||||
end
|
||||
|
||||
context 'when venue has been set' do
|
||||
it 'should delegate to venue' do
|
||||
venue = FactoryBot.create(:venue)
|
||||
subject.update(venue: venue)
|
||||
expect(subject.city).to eq(venue.city)
|
||||
expect(subject.country_name).to eq(venue.country_name)
|
||||
expect(subject.venue_name).to eq(venue.name)
|
||||
expect(subject.venue_street).to eq(venue.street)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe Conference do
|
||||
|
||||
let(:subject) { create(:conference, start_date: Date.new(2014, 06, 30), end_date: Date.new(2014, 06, 30)) }
|
||||
|
|
|
|||
|
|
@ -480,7 +480,7 @@ describe User do
|
|||
end
|
||||
|
||||
describe 'assigns admin attribute' do
|
||||
it 'to second user when first user is deleted_user' do
|
||||
xit 'to second user when first user is deleted_user' do
|
||||
deleted_user = User.find_by(email: 'deleted@localhost.osem')
|
||||
expect(deleted_user.is_admin).to be false
|
||||
|
||||
|
|
|
|||
|
|
@ -3,9 +3,9 @@
|
|||
# This file is copied to spec/ when you run 'rails generate rspec:install'
|
||||
require 'simplecov'
|
||||
|
||||
if ENV['TRAVIS']
|
||||
require 'codecov'
|
||||
SimpleCov.formatter = SimpleCov::Formatter::Codecov
|
||||
if ENV['GITHUB_ACTIONS']
|
||||
require 'simplecov-cobertura'
|
||||
SimpleCov.formatter = SimpleCov::Formatter::CoberturaFormatter
|
||||
end
|
||||
SimpleCov.start 'rails'
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue