diff --git a/.rbenv-version b/.rbenv-version deleted file mode 100644 index 0a95b9f..0000000 --- a/.rbenv-version +++ /dev/null @@ -1 +0,0 @@ -1.9.2-p290 diff --git a/.ruby-version b/.ruby-version new file mode 100644 index 0000000..b1b25a5 --- /dev/null +++ b/.ruby-version @@ -0,0 +1 @@ +2.2.2 diff --git a/.rvmrc b/.rvmrc deleted file mode 100644 index e09c5c8..0000000 --- a/.rvmrc +++ /dev/null @@ -1,55 +0,0 @@ -#!/usr/bin/env bash - -# This is an RVM Project .rvmrc file, used to automatically load the ruby -# development environment upon cd'ing into the directory - -# First we specify our desired [@], the @gemset name is optional. -environment_id="ruby-1.9.2-p290" - -# -# Uncomment following line if you want options to be set only for given project. -# -# PROJECT_JRUBY_OPTS=( --1.9 ) - -# -# First we attempt to load the desired environment directly from the environment -# file. This is very fast and efficient compared to running through the entire -# CLI and selector. If you want feedback on which environment was used then -# insert the word 'use' after --create as this triggers verbose mode. -# -if [[ -d "${rvm_path:-$HOME/.rvm}/environments" \ - && -s "${rvm_path:-$HOME/.rvm}/environments/$environment_id" ]] -then - \. "${rvm_path:-$HOME/.rvm}/environments/$environment_id" - - if [[ -s "${rvm_path:-$HOME/.rvm}/hooks/after_use" ]] - then - . "${rvm_path:-$HOME/.rvm}/hooks/after_use" - fi -else - # If the environment file has not yet been created, use the RVM CLI to select. - if ! rvm --create "$environment_id" - then - echo "Failed to create RVM environment '${environment_id}'." - exit 1 - fi -fi - -# -# If you use an RVM gemset file to install a list of gems (*.gems), you can have -# it be automatically loaded. Uncomment the following and adjust the filename if -# necessary. -# -# filename=".gems" -# if [[ -s "$filename" ]] -# then -# rvm gemset import "$filename" | grep -v already | grep -v listed | grep -v complete | sed '/^$/d' -# fi - -# If you use bundler, this might be useful to you: -# if command -v bundle && [[ -s Gemfile ]] -# then -# bundle install -# fi - - diff --git a/Gemfile b/Gemfile index b7827e8..37549d7 100644 --- a/Gemfile +++ b/Gemfile @@ -1,11 +1,10 @@ source 'http://rubygems.org' -gem 'rails', '~> 3.2.12' +gem 'rails', '~> 4.2.3' gem 'unicorn' gem 'pg' -gem 'json', '1.7.7' gem 'jquery-rails' gem "aws-sdk", "~> 1.8.3.1" @@ -14,22 +13,22 @@ gem "breadcrumbs", "~> 0.1.6" gem "comma", "~> 3.0.4" gem "rdiscount", "~> 1.6.8" -gem "paperclip", "~> 2.4" +gem "paperclip" -gem 'paper_trail', '~> 2' +gem 'paper_trail', '~> 3.0.3' # admin -gem "devise", "~> 2.0.5" +gem "devise", "~> 3.0" gem "inherited_resources" gem "formtastic", "~> 2.2" gem "nested_form", :git => "git://github.com/ryanb/nested_form.git" -group :assets do - gem 'sass-rails', '~> 3.2.5' - gem 'uglifier', '>= 1.0.3' -end +gem 'sass-rails', '~> 4.0.3' +gem 'uglifier', '>= 1.0.3' + +gem 'puma' group :test do gem 'cucumber-rails', require: false @@ -38,6 +37,6 @@ group :test do end group :development, :test do - gem 'rspec-rails', '~> 2.6' + gem 'rspec-rails', '~> 3.1' gem 'capybara' end diff --git a/Gemfile.lock b/Gemfile.lock index 19e9ea7..0f5c119 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,197 +1,225 @@ GIT remote: git://github.com/ryanb/nested_form.git - revision: 8f89b2ee38808c7e3af6797c11092b5600e09376 + revision: 1b0689dfb4d230ceabd278eba159fcb02f23c68a specs: - nested_form (0.3.1) + nested_form (0.3.2) GEM remote: http://rubygems.org/ specs: - actionmailer (3.2.12) - actionpack (= 3.2.12) - mail (~> 2.4.4) - actionpack (3.2.12) - activemodel (= 3.2.12) - activesupport (= 3.2.12) - builder (~> 3.0.0) + actionmailer (4.2.3) + actionpack (= 4.2.3) + actionview (= 4.2.3) + activejob (= 4.2.3) + mail (~> 2.5, >= 2.5.4) + rails-dom-testing (~> 1.0, >= 1.0.5) + actionpack (4.2.3) + actionview (= 4.2.3) + activesupport (= 4.2.3) + rack (~> 1.6) + rack-test (~> 0.6.2) + rails-dom-testing (~> 1.0, >= 1.0.5) + rails-html-sanitizer (~> 1.0, >= 1.0.2) + actionview (4.2.3) + activesupport (= 4.2.3) + builder (~> 3.1) erubis (~> 2.7.0) - journey (~> 1.0.4) - rack (~> 1.4.5) - rack-cache (~> 1.2) - rack-test (~> 0.6.1) - sprockets (~> 2.2.1) - activemodel (3.2.12) - activesupport (= 3.2.12) - builder (~> 3.0.0) - activerecord (3.2.12) - activemodel (= 3.2.12) - activesupport (= 3.2.12) - arel (~> 3.0.2) - tzinfo (~> 0.3.29) - activeresource (3.2.12) - activemodel (= 3.2.12) - activesupport (= 3.2.12) - activesupport (3.2.12) - i18n (~> 0.6) - multi_json (~> 1.0) - arel (3.0.2) + rails-dom-testing (~> 1.0, >= 1.0.5) + rails-html-sanitizer (~> 1.0, >= 1.0.2) + activejob (4.2.3) + activesupport (= 4.2.3) + globalid (>= 0.3.0) + activemodel (4.2.3) + activesupport (= 4.2.3) + builder (~> 3.1) + activerecord (4.2.3) + activemodel (= 4.2.3) + activesupport (= 4.2.3) + arel (~> 6.0) + activesupport (4.2.3) + i18n (~> 0.7) + json (~> 1.7, >= 1.7.7) + minitest (~> 5.1) + thread_safe (~> 0.3, >= 0.3.4) + tzinfo (~> 1.1) + arel (6.0.0) aws-sdk (1.8.3.1) json (~> 1.4) nokogiri (>= 1.4.4) uuidtools (~> 2.1) - bcrypt-ruby (3.0.1) - breadcrumbs (0.1.6) + bcrypt (3.1.10) + breadcrumbs (0.1.7) i18n - builder (3.0.4) - capybara (2.0.2) + builder (3.2.2) + capybara (2.4.4) mime-types (>= 1.16) nokogiri (>= 1.3.3) rack (>= 1.0.0) rack-test (>= 0.5.4) - selenium-webdriver (~> 2.0) - xpath (~> 1.0.0) - childprocess (0.3.9) - ffi (~> 1.0, >= 1.0.11) + xpath (~> 2.0) climate_control (0.0.3) activesupport (>= 3.0) - cocaine (0.5.1) + cocaine (0.5.7) climate_control (>= 0.0.3, < 1.0) - comma (3.0.4) - cucumber (1.2.2) + comma (3.0.6) + activesupport (>= 3.0.0) + cucumber (1.3.20) builder (>= 2.1.2) diff-lcs (>= 1.1.3) - gherkin (~> 2.11.6) - multi_json (~> 1.3) - cucumber-rails (1.3.0) - capybara (>= 1.1.2) - cucumber (>= 1.1.8) - nokogiri (>= 1.5.0) - database_cleaner (0.9.1) - devise (2.0.5) - bcrypt-ruby (~> 3.0) - orm_adapter (~> 0.0.3) - railties (~> 3.1) - warden (~> 1.1.1) - diff-lcs (1.2.1) + gherkin (~> 2.12) + multi_json (>= 1.7.5, < 2.0) + multi_test (>= 0.1.2) + cucumber-rails (1.4.2) + capybara (>= 1.1.2, < 3) + cucumber (>= 1.3.8, < 2) + mime-types (>= 1.16, < 3) + nokogiri (~> 1.5) + rails (>= 3, < 5) + database_cleaner (1.4.1) + devise (3.5.1) + bcrypt (~> 3.0) + orm_adapter (~> 0.1) + railties (>= 3.2.6, < 5) + responders + thread_safe (~> 0.1) + warden (~> 1.2.3) + diff-lcs (1.2.5) erubis (2.7.0) - execjs (1.4.0) - multi_json (~> 1.0) - factory_girl (4.2.0) + execjs (2.5.2) + factory_girl (4.5.0) activesupport (>= 3.0.0) - factory_girl_rails (4.2.1) - factory_girl (~> 4.2.0) + factory_girl_rails (4.5.0) + factory_girl (~> 4.5.0) railties (>= 3.0.0) - ffi (1.4.0) - formtastic (2.2.1) + formtastic (2.3.1) actionpack (>= 3.0) - gherkin (2.11.6) - json (>= 1.7.6) - has_scope (0.5.1) - hike (1.2.1) - i18n (0.6.4) - inherited_resources (1.3.1) - has_scope (~> 0.5.0) - responders (~> 0.6) - journey (1.0.4) - jquery-rails (2.2.1) - railties (>= 3.0, < 5.0) + gherkin (2.12.2) + multi_json (~> 1.3) + globalid (0.3.5) + activesupport (>= 4.1.0) + has_scope (0.6.0) + actionpack (>= 3.2, < 5) + activesupport (>= 3.2, < 5) + hike (1.2.3) + i18n (0.7.0) + inherited_resources (1.6.0) + actionpack (>= 3.2, < 5) + has_scope (~> 0.6.0.rc) + railties (>= 3.2, < 5) + responders + jquery-rails (4.0.4) + rails-dom-testing (~> 1.0) + railties (>= 4.2.0) thor (>= 0.14, < 2.0) - json (1.7.7) - kgio (2.8.0) - mail (2.4.4) - i18n (>= 0.4.0) - mime-types (~> 1.16) - treetop (~> 1.4.8) - mime-types (1.21) - multi_json (1.6.1) - nokogiri (1.5.6) - orm_adapter (0.0.7) - paper_trail (2.7.1) - activerecord (~> 3.0) - railties (~> 3.0) - paperclip (2.8.0) - activerecord (>= 2.3.0) - activesupport (>= 2.3.2) - cocaine (>= 0.0.2) + json (1.8.3) + kgio (2.9.3) + loofah (2.0.2) + nokogiri (>= 1.5.9) + mail (2.6.3) + mime-types (>= 1.16, < 3) + mime-types (2.6.1) + mimemagic (0.3.0) + mini_portile (0.6.2) + minitest (5.7.0) + multi_json (1.11.2) + multi_test (0.1.2) + nokogiri (1.6.6.2) + mini_portile (~> 0.6.0) + orm_adapter (0.5.0) + paper_trail (3.0.8) + activerecord (>= 3.0, < 5.0) + activesupport (>= 3.0, < 5.0) + paperclip (4.3.0) + activemodel (>= 3.2.0) + activesupport (>= 3.2.0) + cocaine (~> 0.5.5) mime-types - pg (0.14.1) - polyglot (0.3.3) - rabl (0.8.0) + mimemagic (= 0.3.0) + pg (0.18.2) + puma (2.11.3) + rack (>= 1.1, < 2.0) + rabl (0.11.6) activesupport (>= 2.3.14) - rack (1.4.5) - rack-cache (1.2) - rack (>= 0.4) - rack-ssl (1.3.3) - rack - rack-test (0.6.2) + rack (1.6.4) + rack-test (0.6.3) rack (>= 1.0) - rails (3.2.12) - actionmailer (= 3.2.12) - actionpack (= 3.2.12) - activerecord (= 3.2.12) - activeresource (= 3.2.12) - activesupport (= 3.2.12) - bundler (~> 1.0) - railties (= 3.2.12) - railties (3.2.12) - actionpack (= 3.2.12) - activesupport (= 3.2.12) - rack-ssl (~> 1.3.2) + rails (4.2.3) + actionmailer (= 4.2.3) + actionpack (= 4.2.3) + actionview (= 4.2.3) + activejob (= 4.2.3) + activemodel (= 4.2.3) + activerecord (= 4.2.3) + activesupport (= 4.2.3) + bundler (>= 1.3.0, < 2.0) + railties (= 4.2.3) + sprockets-rails + rails-deprecated_sanitizer (1.0.3) + activesupport (>= 4.2.0.alpha) + rails-dom-testing (1.0.6) + activesupport (>= 4.2.0.beta, < 5.0) + nokogiri (~> 1.6.0) + rails-deprecated_sanitizer (>= 1.0.1) + rails-html-sanitizer (1.0.2) + loofah (~> 2.0) + railties (4.2.3) + actionpack (= 4.2.3) + activesupport (= 4.2.3) rake (>= 0.8.7) - rdoc (~> 3.4) - thor (>= 0.14.6, < 2.0) - raindrops (0.10.0) - rake (10.0.3) + thor (>= 0.18.1, < 2.0) + raindrops (0.14.0) + rake (10.4.2) rdiscount (1.6.8) - rdoc (3.12.2) - json (~> 1.4) - responders (0.9.3) - railties (~> 3.1) - rspec-core (2.13.0) - rspec-expectations (2.13.0) - diff-lcs (>= 1.1.3, < 2.0) - rspec-mocks (2.13.0) - rspec-rails (2.13.0) - actionpack (>= 3.0) - activesupport (>= 3.0) - railties (>= 3.0) - rspec-core (~> 2.13.0) - rspec-expectations (~> 2.13.0) - rspec-mocks (~> 2.13.0) - rubyzip (0.9.9) - sass (3.2.6) - sass-rails (3.2.6) - railties (~> 3.2.0) - sass (>= 3.1.10) - tilt (~> 1.3) - selenium-webdriver (2.31.0) - childprocess (>= 0.2.5) - multi_json (~> 1.0) - rubyzip - websocket (~> 1.0.4) - sprockets (2.2.2) + responders (2.1.0) + railties (>= 4.2.0, < 5) + rspec-core (3.3.1) + rspec-support (~> 3.3.0) + rspec-expectations (3.3.0) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.3.0) + rspec-mocks (3.3.1) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.3.0) + rspec-rails (3.3.2) + actionpack (>= 3.0, < 4.3) + activesupport (>= 3.0, < 4.3) + railties (>= 3.0, < 4.3) + rspec-core (~> 3.3.0) + rspec-expectations (~> 3.3.0) + rspec-mocks (~> 3.3.0) + rspec-support (~> 3.3.0) + rspec-support (3.3.0) + sass (3.2.19) + sass-rails (4.0.5) + railties (>= 4.0.0, < 5.0) + sass (~> 3.2.2) + sprockets (~> 2.8, < 3.0) + sprockets-rails (~> 2.0) + sprockets (2.12.4) hike (~> 1.2) multi_json (~> 1.0) rack (~> 1.0) tilt (~> 1.1, != 1.3.0) - thor (0.17.0) - tilt (1.3.4) - treetop (1.4.12) - polyglot - polyglot (>= 0.3.1) - tzinfo (0.3.36) - uglifier (1.3.0) + sprockets-rails (2.3.2) + actionpack (>= 3.0) + activesupport (>= 3.0) + sprockets (>= 2.8, < 4.0) + thor (0.19.1) + thread_safe (0.3.5) + tilt (1.4.1) + tzinfo (1.2.2) + thread_safe (~> 0.1) + uglifier (2.7.1) execjs (>= 0.3.0) - multi_json (~> 1.0, >= 1.0.2) - unicorn (4.6.2) + json (>= 1.8.0) + unicorn (4.9.0) kgio (~> 2.6) rack raindrops (~> 0.7) - uuidtools (2.1.3) - warden (1.1.1) + uuidtools (2.1.5) + warden (1.2.3) rack (>= 1.0) - websocket (1.0.7) - xpath (1.0.0) + xpath (2.0.0) nokogiri (~> 1.3) PLATFORMS @@ -204,20 +232,20 @@ DEPENDENCIES comma (~> 3.0.4) cucumber-rails database_cleaner - devise (~> 2.0.5) + devise (~> 3.0) factory_girl_rails formtastic (~> 2.2) inherited_resources jquery-rails - json (= 1.7.7) nested_form! - paper_trail (~> 2) - paperclip (~> 2.4) + paper_trail (~> 3.0.3) + paperclip pg + puma rabl - rails (~> 3.2.12) + rails (~> 4.2.3) rdiscount (~> 1.6.8) - rspec-rails (~> 2.6) - sass-rails (~> 3.2.5) + rspec-rails (~> 3.1) + sass-rails (~> 4.0.3) uglifier (>= 1.0.3) unicorn diff --git a/app/controllers/admin/events_controller.rb b/app/controllers/admin/events_controller.rb index 7986c83..32e18ff 100644 --- a/app/controllers/admin/events_controller.rb +++ b/app/controllers/admin/events_controller.rb @@ -1,16 +1,51 @@ class Admin::EventsController < Admin::BaseController + before_filter do + breadcrumbs.add "Events", admin_events_path + end - inherit_resources + def create + event.assign_attributes(event_params) - actions :all, :except => :show + if event.save + redirect_to admin_events_path + else + render action: :new + end + end - before_filter do - breadcrumbs.add "Events", collection_path + def update + if event.update_attributes(event_params) + redirect_to admin_events_path + else + render action: :edit + end end - protected - def resource + def destroy + event.destroy + redirect_to admin_events_path + end + + def event + if params.key?(:id) @event ||= Event.find_by_slug(params[:id]) + else + @event ||= Event.new + end + end + helper_method :event + + def events + @events ||= Event.all + end + helper_method :events + + private + def event_params + params.fetch(:event, {}).permit(:title, :slug, :hashtag, :use_centres, + :active, :url, :enable_project_creation, :start_date, + centres_attributes: [ :id, :name, :slug ], + award_categories_attributes: [ :id, :title, :description, :format, :level, :featured, :_destroy ]) end -end \ No newline at end of file +end diff --git a/app/controllers/admin/projects_controller.rb b/app/controllers/admin/projects_controller.rb index 510f176..f5bcaba 100644 --- a/app/controllers/admin/projects_controller.rb +++ b/app/controllers/admin/projects_controller.rb @@ -1,24 +1,43 @@ class Admin::ProjectsController < Admin::BaseController + before_filter do + breadcrumbs.add "Events", admin_events_path + breadcrumbs.add event.title, edit_admin_event_path(event) + breadcrumbs.add "Projects", admin_event_projects_path(event) + end + + def update + if project.update_attributes(project_params) + redirect_to admin_event_projects_path(event) + else + render action: :edit + end + end - inherit_resources + def destroy + project.destroy + redirect_to admin_event_projects_path + end - belongs_to :event, :finder => :find_by_slug, :param => :event_id - with_role :admin - actions :all, :except => [:show, :new, :create] + def projects + @projects ||= event.projects + end + helper_method :projects - before_filter do - breadcrumbs.add "Events", admin_events_path - breadcrumbs.add parent.title, edit_parent_path - breadcrumbs.add "Projects", collection_path + def project + @project ||= projects.find_by_slug(params[:id]) end + helper_method :project - before_filter :only => :update do - resource.managing = true + def event + @event ||= Event.find_by_slug(params[:event_id]) end + helper_method :event - protected - def resource - @project ||= @event.projects.find_by_slug(params[:id]) - end +private + def project_params + params.fetch(:project, {}).permit(:title, :team, :url, :secret, :image, + :summary, :description, :ideas, :data, :twitter, :github_url, :svn_url, + :code_url, :awards_attributes, :centre, :centre_id, :slug) + end -end \ No newline at end of file +end diff --git a/app/controllers/events_controller.rb b/app/controllers/events_controller.rb index 3dae016..277ac43 100644 --- a/app/controllers/events_controller.rb +++ b/app/controllers/events_controller.rb @@ -1,32 +1,23 @@ class EventsController < ApplicationController - before_filter :find_event, :except => :index - - respond_to :html, :json - - def index - @events = Event.recent_first.all - respond_with @events - end + before_filter :set_breadcrumbs def show respond_to do |format| - format.html { # show.html.erb - } - format.json { # show.json.rabl - } - format.csv { render :csv => @event.projects } + format.html + format.json + format.csv { render :csv => event.projects } end end def show_centre - unless @event.use_centres and !params[:centre].blank? - redirect_to event_path(@event) + unless event.use_centres and !params[:centre].blank? + redirect_to event_path(event) return end - @centre = @event.centres.where(:slug => params[:centre]).first || not_found + @centre = event.centres.where(:slug => params[:centre]).first || not_found - breadcrumbs.add @centre.name, centre_event_path(@event, @centre.slug) + breadcrumbs.add @centre.name, centre_event_path(event, @centre.slug) respond_to do |format| format.html { @@ -36,10 +27,23 @@ def show_centre end end - private - def find_event - @event = Event.find_by_slug(params[:id]) || not_found - breadcrumbs.add @event.title, event_path(@event) + def events + @events ||= Event.recent_first.all + end + helper_method :events + + def event + if params[:id] + @event ||= Event.find_by_slug(params[:id]) || not_found end + end + helper_method :event + +private + def set_breadcrumbs + if event.present? + breadcrumbs.add event.title, event_path(event) + end + end end diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index 51ed9d8..896d9d8 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -1,63 +1,80 @@ class ProjectsController < ApplicationController - before_filter :find_event - before_filter :find_project, :except => [:new, :create] + before_filter :set_breadcrumbs def new - @project = @event.projects.build - - unless @event.enable_project_creation - flash[:alert] = 'Projects can no longer be created here for this event. Please get in touch if you\'d like to add a project here.' - redirect_to event_path(@event) + unless event.enable_project_creation + flash.alert = 'Projects can no longer be created here for this event. Please get in touch if you\'d like to add a project here.' + redirect_to event_path(event) end - breadcrumbs.add "New project", new_event_project_path(@event, @project) + breadcrumbs.add "New project", new_event_project_path(event) end def create - @project = @event.projects.build(params[:project]) + project.assign_attributes(project_params) - if @project.save - flash[:notice] = 'Your project has been created.' - redirect_to event_project_url(@event, @project) + if project.save + flash.notice = 'Your project has been created.' + redirect_to event_project_url(event, project) else - breadcrumbs.add "New project", new_event_project_path(@event, @project) - render :action => :new + breadcrumbs.add "New project", new_event_project_path(event) + render action: :new end end def show respond_to do |format| - format.html { # show.html.erb - } - format.json { # show.json.rabl - } + format.html + format.json end end def edit - # edit.html.erb - breadcrumbs.add "Edit project", edit_event_project_path(@event, @project) + breadcrumbs.add "Edit project", edit_event_project_path(event, project) end def update - if @project.update_attributes(params[:project]) - flash[:notice] = 'Your project has been updated.' - redirect_to event_project_url(@event,@project) + submitted_secret = project_params.delete(:submitted_secret) + + if project.update_attributes_with_secret(submitted_secret, project_params) + flash.notice = 'Your project has been updated.' + redirect_to event_project_url(event, project) + else + breadcrumbs.add "Edit project", edit_event_project_path(event, project) + render action: :edit + end + end + + def event + @event ||= Event.find_by_slug(params[:event_id]) || not_found + end + helper_method :event + + def project + if params[:id] + @project ||= event.projects.find_by_slug(params[:id]) || not_found else - breadcrumbs.add "Edit project", edit_event_project_path(@event, @project) - render :action => :edit + @project ||= event.projects.build end end + helper_method :project private - def find_event - @event = Event.find_by_slug(params[:event_id]) || not_found - breadcrumbs.add @event.title, event_path(@event) + def set_breadcrumbs + breadcrumbs.add event.title, event_path(event) + + if project.persisted? + if event.use_centres? + breadcrumbs.add project.centre.name, centre_event_path(event, project.centre.slug) if event.use_centres + end + + breadcrumbs.add project.title, event_project_path(event, project) + end end - def find_project - @project = @event.projects.find_by_slug(params[:id]) || not_found - breadcrumbs.add @project.centre.name, centre_event_path(@event, @project.centre.slug) if @event.use_centres - breadcrumbs.add @project.title, event_project_path(@event, @project) + def project_params + params.require(:project).permit(:title, :team, :url, :secret, + :image, :summary, :description, :ideas, :data, :twitter, :github_url, + :svn_url, :code_url, :centre_id, :submitted_secret) end end diff --git a/app/models/.gitkeep b/app/models/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/app/models/admin.rb b/app/models/admin.rb index d916dad..1d1a91a 100644 --- a/app/models/admin.rb +++ b/app/models/admin.rb @@ -1,6 +1,4 @@ class Admin < ActiveRecord::Base devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable - - attr_accessible :email, :password, :password_confirmation, :remember_me end diff --git a/app/models/award_category.rb b/app/models/award_category.rb index c24238c..9e0d49e 100644 --- a/app/models/award_category.rb +++ b/app/models/award_category.rb @@ -1,8 +1,8 @@ class AwardCategory < ActiveRecord::Base belongs_to :event - default_scope order('format DESC, level ASC, title ASC') - scope :featured, where(:featured => true) + default_scope -> { order('format DESC, level ASC, title ASC') } + scope :featured, -> { where(:featured => true) } has_many :awards, :dependent => :destroy has_many :award_winners, :through => :awards, :source => :project diff --git a/app/models/centre.rb b/app/models/centre.rb index 3b2bbb9..1be5c81 100644 --- a/app/models/centre.rb +++ b/app/models/centre.rb @@ -2,7 +2,7 @@ class Centre < ActiveRecord::Base belongs_to :event has_many :projects - default_scope order('name ASC') + default_scope -> { order('name ASC') } validates :name, :slug, :presence => true validates :slug, :uniqueness => { :case_sensitive => false, :scope => :event_id } @@ -11,7 +11,7 @@ class Centre < ActiveRecord::Base private def create_slug - existing_slugs = event.centres.all.select {|a| a.slug.match(/^#{self.name.parameterize}(\-[0-9]+)?$/) }.size + existing_slugs = event.centres.select {|a| a.slug.match(/^#{self.name.parameterize}(\-[0-9]+)?$/) }.size self.slug = (existing_slugs > 0 ? "#{self.name.parameterize}-#{existing_slugs+1}" : self.name.parameterize) end end diff --git a/app/models/event.rb b/app/models/event.rb index 5cbc019..40dedca 100644 --- a/app/models/event.rb +++ b/app/models/event.rb @@ -14,14 +14,14 @@ class Event < ActiveRecord::Base validates :title, :slug, :presence => true validates :slug, :uniqueness => { :case_sensitive => false } - scope :recent_first, order("start_date desc") + scope :recent_first, -> { order("start_date desc") } def to_param self.slug end def winners - self.award_categories.featured.all.map {|i| i.award_winners.all }.flatten.uniq + self.award_categories.featured.map(&:award_winners).flatten.uniq end def has_secret? diff --git a/app/models/manageable.rb b/app/models/manageable.rb deleted file mode 100644 index 6affa9b..0000000 --- a/app/models/manageable.rb +++ /dev/null @@ -1,8 +0,0 @@ -module Manageable - extend ActiveSupport::Concern - - included do - attr_accessor :managing - attr_protected :managing - end -end \ No newline at end of file diff --git a/app/models/project.rb b/app/models/project.rb index 3f096ef..483c931 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -1,19 +1,14 @@ class Project < ActiveRecord::Base belongs_to :event belongs_to :centre - include Manageable has_paper_trail - default_scope order('title ASC') - after_initialize :set_default_values + default_scope -> { order('title ASC') } has_many :awards has_many :award_categories, :class_name => 'AwardCategory', :through => :awards - attr_accessible :title, :team, :url, :secret, :my_secret, :image, :summary, :description, :ideas, :data, :twitter, :github_url, :svn_url, :code_url, :centre, :centre_id - attr_accessible :title, :team, :url, :secret, :image, :summary, :description, :ideas, :data, :twitter, :github_url, :svn_url, :code_url, :awards_attributes, :centre, :centre_id, :slug, :as => :admin - accepts_nested_attributes_for :awards, :reject_if => :all_blank, :allow_destroy => true has_attached_file( :image, Rails.application.config.attachment_settings.merge({ @@ -34,28 +29,32 @@ class Project < ActiveRecord::Base notes end - attr_accessor :my_secret + attr_accessor :submitted_secret before_validation :create_slug, :if => proc { self.slug.blank? and ! self.title.blank? } - before_validation :blank_url_fields validates :title, :team, :description, :presence => true validates :summary, :presence => true, :length => { :maximum => 180 } validates :slug, :uniqueness => { :case_sensitive => false } - validates :secret, :presence => true, :on => :create, :if => :secret_required? + validates :secret, :presence => true, :on => :create validates :url, :code_url, :github_url, :svn_url, :format => { :with => URI::regexp, :allow_blank => true } validates :centre, :presence => true, :if => proc { |a| a.event.use_centres == true } validate :ensure_project_creation_is_enabled, :on => :create - validates_attachment_presence :image, :on => :create - validates_attachment_size :image, :less_than=>1.megabyte, :if => Proc.new { |i| !i.image.file? } - - with_options :unless => :managing do |o| - o.validates_each :my_secret, :on => :create, :if => :event_secret_required? do |model, attr, value| - model.errors.add(attr, "is incorrect") if (value != model.event.secret) - end - o.validates_each :my_secret, :on => :update do |model, attr, value| - model.errors.add(attr, 'is incorrect') if (value != model.project_or_event_secret) + validates_attachment :image, presence: true, + content_type: { + content_type: ["image/jpeg", "image/gif", "image/png"] + }, + size: { + less_than: 1.megabyte, + } + + def update_attributes_with_secret(submitted_secret, attributes) + if valid_secret?(submitted_secret) + update_attributes(attributes) + else + self.errors.add(:secret, 'is not correct') + return false end end @@ -63,18 +62,6 @@ def to_param self.slug end - def event_secret_required? - self.event.has_secret? - end - - def secret_required? - ! self.event_secret_required? - end - - def project_or_event_secret - self.event_secret_required? ? self.event.secret : self.secret - end - def format_url(url) url_parts = url.match(/https?:\/\/(.*)/i) url_parts ? url_parts[1].sub(/\/$/i,'') : url @@ -89,7 +76,7 @@ def has_won_award? end def notes - "" + "" end def project_url @@ -102,23 +89,14 @@ def create_slug self.slug = (existing_slugs > 0 ? "#{self.title.parameterize}-#{existing_slugs+1}" : self.title.parameterize) end - def blank_url_fields - self.url = '' if self.url == 'http://' - self.github_url = '' if self.github_url == 'http://' - self.code_url = '' if self.code_url == 'http://' - self.svn_url = '' if self.svn_url == 'http://' - end - - def set_default_values - self.url ||= 'http://' - self.github_url ||= 'http://' - self.svn_url ||= 'http://' - self.code_url ||= 'http://' - end - def ensure_project_creation_is_enabled unless event.enable_project_creation errors.add(:event, "no longer allows projects to be created") end end + + def valid_secret?(submitted_secret) + submitted_secret.present? && + submitted_secret == secret + end end diff --git a/app/views/admin/events/_form.html.erb b/app/views/admin/events/_form.html.erb index 28b9bcf..931de42 100644 --- a/app/views/admin/events/_form.html.erb +++ b/app/views/admin/events/_form.html.erb @@ -1,20 +1,19 @@ -<%= semantic_nested_form_for [:admin,resource] do |f| %> +<%= semantic_nested_form_for [:admin, event] do |f| %> <%= f.semantic_errors %> <%= f.inputs do %> <%= f.input :title %> <%= f.input :start_date, :as => :string %> - <%= f.input :slug, ( resource.persisted? ? { :input_html => { :disabled => true } } : { } ) %> - <%= f.input :secret, :label => "Event secret", :input_html => { :placeholder => "If blank, projects must create their own passwords"} %> + <%= f.input :slug, ( event.persisted? ? { :input_html => { :disabled => true } } : { } ) %> <%= f.input :url, :label => "Event homepage", :input_html => { :placeholder => "http://" } %> - <%= f.input :use_centres, disable_if_persisted(resource, { :input_html => { :disabled => true } }).merge({ :as => :select, :label => "Event type", :collection => { "Hacks shown together in list" => false, "Hacks grouped by centre" => true }, :include_blank => false }) %> + <%= f.input :use_centres, disable_if_persisted(event, { :input_html => { :disabled => true } }).merge({ :as => :select, :label => "Event type", :collection => { "Hacks shown together in list" => false, "Hacks grouped by centre" => true }, :include_blank => false }) %> <% end %> <%= f.inputs do %> <%= f.input :enable_project_creation, :label => "Allow new hacks to be created?" %> <% end %> - <% unless resource.new_record? or !resource.use_centres %> + <% unless event.new_record? or !event.use_centres %> <%= f.inputs "Centres" do %> <%= f.semantic_fields_for :centres do |centre_fields| %> <%= centre_fields.input :name %> diff --git a/app/views/admin/events/edit.html.erb b/app/views/admin/events/edit.html.erb index 612bf90..561a915 100644 --- a/app/views/admin/events/edit.html.erb +++ b/app/views/admin/events/edit.html.erb @@ -1,5 +1,5 @@ -<% content_for(:title) { "Edit #{resource.title}" } %> +<% content_for(:title) { "Edit #{event.title}" } %> -

Edit <%= resource.title %>

+

Edit <%= event.title %>

-<%= render :partial => "form" %> \ No newline at end of file +<%= render :partial => "form" %> diff --git a/app/views/admin/events/index.html.erb b/app/views/admin/events/index.html.erb index 09edc32..aa1f97e 100644 --- a/app/views/admin/events/index.html.erb +++ b/app/views/admin/events/index.html.erb @@ -15,6 +15,6 @@ - <%= render :partial => "event", :collection => collection %> + <%= render :partial => "event", :collection => events %> - \ No newline at end of file + diff --git a/app/views/admin/events/new.html.erb b/app/views/admin/events/new.html.erb index 2ecb2c8..af12f58 100644 --- a/app/views/admin/events/new.html.erb +++ b/app/views/admin/events/new.html.erb @@ -2,4 +2,4 @@

New Event

-<%= render :partial => "form" %> \ No newline at end of file +<%= render :partial => "form" %> diff --git a/app/views/admin/projects/_form.html.erb b/app/views/admin/projects/_form.html.erb index f81b0c9..616d82c 100644 --- a/app/views/admin/projects/_form.html.erb +++ b/app/views/admin/projects/_form.html.erb @@ -1,15 +1,15 @@ -<%= semantic_nested_form_for([:admin, parent, resource]) do |f| %> +<%= semantic_nested_form_for([:admin, event, project]) do |f| %> <%= f.semantic_errors %> <%= f.inputs "Basic Info" do %> <%= f.input :title %> - <% if parent.use_centres %> + <% if event.use_centres %> <%= f.input :centre %> <% end %> <%= f.input :slug, :input_html => { :disabled => true } %> <%= f.input :team %> <%= f.input :url %> - <% if ! parent.secret.present? %> + <% if ! event.secret.present? %> <%= f.input :secret %> <% end %> <% end %> @@ -30,16 +30,16 @@ <%= f.inputs "Image" do %> <%= f.input :image %> -
  • <%= label_tag nil, "Current screenshot", :class => 'label' %><%= image_tag resource.image.url(:mini) %>
  • +
  • <%= label_tag nil, "Current screenshot", :class => 'label' %><%= image_tag project.image.url(:mini) %>
  • <% end %> <%= f.inputs "Awards" do %> <%= f.semantic_fields_for :awards do |award_fields| %> - <%= award_fields.input :award_category, :collection => resource.event.award_categories %> + <%= award_fields.input :award_category, :collection => event.award_categories %> <%= award_fields.link_to_remove "Remove this award" %> <% end %> <%= f.link_to_add "Add an award", :awards %> <% end %> <%= render :partial => "admin/shared/actions", :locals => { :f => f } %> -<% end %> \ No newline at end of file +<% end %> diff --git a/app/views/admin/projects/_project.html.erb b/app/views/admin/projects/_project.html.erb index e1da07d..92f2a22 100644 --- a/app/views/admin/projects/_project.html.erb +++ b/app/views/admin/projects/_project.html.erb @@ -1,5 +1,5 @@ - <%= link_to project.title, event_project_path(parent, project) %> + <%= link_to project.title, event_project_path(event, project) %> <%= truncate( project.slug, :length => 20 ) %> <%= truncate( project.team, :length => 30 ) %> @@ -9,6 +9,6 @@ <% end %> - <%= link_to "Edit", edit_admin_event_project_path(parent, project) %> - <%= link_to "Delete", admin_event_project_path(parent, project), :method => "DELETE", :confirm => "Are you sure you want to *permanently* delete this project, and all its hacks?" %> - \ No newline at end of file + <%= link_to "Edit", edit_admin_event_project_path(event, project) %> + <%= link_to "Delete", admin_event_project_path(event, project), :method => "DELETE", :confirm => "Are you sure you want to *permanently* delete this project, and all its hacks?" %> + diff --git a/app/views/admin/projects/edit.html.erb b/app/views/admin/projects/edit.html.erb index 612bf90..0ceffea 100644 --- a/app/views/admin/projects/edit.html.erb +++ b/app/views/admin/projects/edit.html.erb @@ -1,5 +1,5 @@ -<% content_for(:title) { "Edit #{resource.title}" } %> +<% content_for(:title) { "Edit #{project.title}" } %> -

    Edit <%= resource.title %>

    +

    Edit <%= project.title %>

    -<%= render :partial => "form" %> \ No newline at end of file +<%= render :partial => "form" %> diff --git a/app/views/admin/projects/index.html.erb b/app/views/admin/projects/index.html.erb index aba62ce..c38cb51 100644 --- a/app/views/admin/projects/index.html.erb +++ b/app/views/admin/projects/index.html.erb @@ -14,6 +14,6 @@ - <%= render :partial => "project", :collection => collection %> + <%= render :partial => "project", :collection => projects %> - \ No newline at end of file + diff --git a/app/views/events/_centre_list.html.erb b/app/views/events/_centre_list.html.erb index b22b406..580bc73 100644 --- a/app/views/events/_centre_list.html.erb +++ b/app/views/events/_centre_list.html.erb @@ -1,7 +1,7 @@