diff --git a/.rubocop.yml b/.rubocop.yml index f9c528076..fba1c4a28 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -1,5 +1,4 @@ AllCops: - RunRailsCops: true Include: - '**/Rakefile' - '**/config.ru' @@ -33,4 +32,6 @@ TrivialAccessors: AllowPredicates: true # allow has_and_belongs_to_many HasAndBelongsToMany: - Enabled: false \ No newline at end of file + Enabled: false +Rails: + Enabled: true diff --git a/.ruby-version b/.ruby-version index 585940699..21bb5e156 100644 --- a/.ruby-version +++ b/.ruby-version @@ -1 +1 @@ -2.2.3 +2.2.5 diff --git a/Gemfile b/Gemfile index 1818e6d39..e48258776 100644 --- a/Gemfile +++ b/Gemfile @@ -1,20 +1,20 @@ source 'https://rubygems.org' -ruby '2.2.3' # Version in .ruby-version must match +ruby '2.2.5' # Version in .ruby-version must match # standard gems -gem 'rails', '~> 4.2.5' -gem 'mysql2', '~> 0.4.2' -gem 'rake', '~> 10.4.2' +gem 'rails', '~> 4.2.6' +gem 'mysql2', '~> 0.4.4' +gem 'rake', '~> 11.1.2' gem 'jbuilder', '~> 2.4.0' # simulate environment variables -gem 'dotenv-rails', '~> 2.0.2', :require => 'dotenv/rails-now' +gem 'dotenv-rails', '~> 2.1.1', :require => 'dotenv/rails-now' # authentication / authorization -gem 'devise', '~> 3.5.3' -gem 'devise_cas_authenticatable', '~> 1.7.1' -gem 'cancancan', '~> 1.13.1' +gem 'devise', '~> 4.1.1' +gem 'devise_cas_authenticatable', '~> 1.9.1' +gem 'cancancan', '~> 1.14.0' # scheduling gem 'whenever', '~> 0.9.4' @@ -23,33 +23,33 @@ gem 'whenever', '~> 0.9.4' gem 'rails_admin', '~> 0.8.1' # ldap integration -gem 'net-ldap', '~> 0.13.0' +gem 'net-ldap', '~> 0.14.0' # attachments -gem 'paperclip', '~> 4.3.2' +gem 'paperclip', '~> 4.3.6' # for exporting multiple files -gem 'rubyzip', '~> 1.1.7' +gem 'rubyzip', '~> 1.2.0' # soft deletion -gem 'permanent_records', '~> 4.1.0' +gem 'permanent_records', '~> 4.1.5' gem 'nilify_blanks', '~> 1.2.1' # ui -gem 'jquery-rails', '~> 4.0.5' +gem 'jquery-rails', '~> 4.1.1' gem 'jquery-ui-rails', '~> 5.0.5' -gem 'jquery-datatables-rails', '~> 3.3.0' -gem 'fullcalendar-rails', '~> 2.5.0.0' -gem 'momentjs-rails', '~> 2.10.6' +gem 'jquery-datatables-rails', '~> 3.4.0' +gem 'fullcalendar-rails', '~> 2.6.1.0' +gem 'momentjs-rails', '~> 2.11.1' gem 'rails4-autocomplete', '~> 1.1.1' -gem 'select2-rails', '~> 4.0.1' +gem 'select2-rails', '~> 4.0.2' gem 'kaminari', '~> 0.16.3' gem 'draper', '~> 2.1.0' -gem 'inline_svg', '~> 0.6.2' +gem 'inline_svg', '~> 0.7.0' # forms / formatting gem 'simple_form', '~> 3.2.1' -gem 'cocoon', '~> 1.2.6' +gem 'cocoon', '~> 1.2.9' gem 'redcarpet', '~> 3.3.4' # iCalendar export @@ -58,48 +58,48 @@ gem 'icalendar', '~> 2.3.0' group :development, :test do gem 'pry', '~> 0.10.3' gem 'pry-rails', '~> 0.3.4' - gem 'pry-byebug', '~> 3.3.0' + gem 'pry-byebug', '~> 3.4.0' gem 'pry-stack_explorer', '~> 0.4.9.2' gem 'pry-remote', '~> 0.1.8' gem 'letter_opener', '~> 1.4.1' gem 'letter_opener_web', '~> 1.3.0' - gem 'factory_girl_rails', '~> 4.5.0' - gem 'rspec-rails', '~> 3.4.0' - gem 'shoulda-matchers', '~> 3.0.1' - gem 'capybara', '~> 2.5.0' - gem 'capybara-webkit', '~> 1.7.1' - gem 'guard-rspec', '~> 4.6.4' - gem 'spring', '~> 1.6.2' + gem 'factory_girl_rails', '~> 4.7.0' + gem 'rspec-rails', '~> 3.4.2' + gem 'shoulda-matchers', '~> 3.1.1' + gem 'capybara', '~> 2.7.1' + gem 'capybara-webkit', '~> 1.11.1' + gem 'guard-rspec', '~> 4.6.5' + gem 'spring', '~> 1.7.1' gem 'spring-commands-rspec', '~> 1.0.4' gem 'fuubar', '~> 2.0.0' - gem 'guard-livereload', '~> 2.5.1' - gem 'capistrano', '3.4.0', require: false + gem 'guard-livereload', '~> 2.5.2' + gem 'capistrano', '3.5.0', require: false gem 'capistrano-bundler', '~> 1.1.4', require: false - gem 'capistrano-rails', '~> 1.1.5', require: false + gem 'capistrano-rails', '~> 1.1.6', require: false gem 'capistrano-rvm', '~> 0.1.2', require: false gem 'highline', '~> 1.7.8', require: false gem 'awesome_print', '~> 1.6.1' - gem 'codeclimate-test-reporter', '~> 0.4.8' - gem 'database_cleaner', '~> 1.5.1' - gem 'rubocop', '~> 0.35.1', require: false + gem 'codeclimate-test-reporter', '~> 0.5.0' + gem 'database_cleaner', '~> 1.5.3' + gem 'rubocop', '~> 0.40.0', require: false end group :development, :test, :heroku do # seed script gems - gem 'ffaker', '~> 2.1.0', require: false - gem 'ruby-progressbar', '~> 1.7.5', require: false + gem 'ffaker', '~> 2.2.0', require: false + gem 'ruby-progressbar', '~> 1.8.1', require: false end # assets gem 'sass-rails', '~> 5.0.4' gem 'coffee-rails', '~> 4.1.1' -gem 'uglifier', '~> 2.7.2' +gem 'uglifier', '~> 3.0.0' gem 'bootstrap-sass', '~> 3.3.6' -gem 'font-awesome-rails', '~> 4.5.0' +gem 'font-awesome-rails', '~> 4.6.2.0' group :development do gem 'thin', '~> 1.6.4' - gem 'rack-mini-profiler', '~> 0.9.8' + gem 'rack-mini-profiler', '~> 0.9.9' gem 'bullet', '~> 5.0.0' end @@ -110,8 +110,8 @@ end group :heroku do gem 'pg', '~> 0.18.4' - gem 'unicorn', '~> 5.0.1' - gem 'rack-timeout', '~> 0.3.2' + gem 'unicorn', '~> 5.1.0' + gem 'rack-timeout', '~> 0.4.2' gem 'aws-sdk', '< 2.0' gem 'rails_12factor', '~> 0.0.3' end diff --git a/Gemfile.lock b/Gemfile.lock index 73625d9ba..28c397a8f 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,56 +1,55 @@ GEM remote: https://rubygems.org/ specs: - actionmailer (4.2.5) - actionpack (= 4.2.5) - actionview (= 4.2.5) - activejob (= 4.2.5) + actionmailer (4.2.6) + actionpack (= 4.2.6) + actionview (= 4.2.6) + activejob (= 4.2.6) mail (~> 2.5, >= 2.5.4) rails-dom-testing (~> 1.0, >= 1.0.5) - actionpack (4.2.5) - actionview (= 4.2.5) - activesupport (= 4.2.5) + actionpack (4.2.6) + actionview (= 4.2.6) + activesupport (= 4.2.6) 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.5) - activesupport (= 4.2.5) + actionview (4.2.6) + activesupport (= 4.2.6) builder (~> 3.1) erubis (~> 2.7.0) rails-dom-testing (~> 1.0, >= 1.0.5) rails-html-sanitizer (~> 1.0, >= 1.0.2) - activejob (4.2.5) - activesupport (= 4.2.5) + activejob (4.2.6) + activesupport (= 4.2.6) globalid (>= 0.3.0) - activemodel (4.2.5) - activesupport (= 4.2.5) + activemodel (4.2.6) + activesupport (= 4.2.6) builder (~> 3.1) - activerecord (4.2.5) - activemodel (= 4.2.5) - activesupport (= 4.2.5) + activerecord (4.2.6) + activemodel (= 4.2.6) + activesupport (= 4.2.6) arel (~> 6.0) - activesupport (4.2.5) + activesupport (4.2.6) i18n (~> 0.7) json (~> 1.7, >= 1.7.7) minitest (~> 5.1) thread_safe (~> 0.3, >= 0.3.4) tzinfo (~> 1.1) addressable (2.3.8) + airbrussh (1.0.2) + sshkit (>= 1.6.1, != 1.7.0) arel (6.0.3) ast (2.2.0) - astrolabe (1.3.1) - parser (~> 2.2) - autoprefixer-rails (6.2.3) + autoprefixer-rails (6.3.6) execjs - json awesome_print (1.6.1) aws-sdk (1.66.0) aws-sdk-v1 (= 1.66.0) aws-sdk-v1 (1.66.0) json (~> 1.4) nokogiri (>= 1.4.4) - bcrypt (3.1.10) + bcrypt (3.1.11) binding_of_caller (0.7.2) debug_inspector (>= 0.0.1) bootstrap-sass (3.3.6) @@ -60,39 +59,43 @@ GEM bullet (5.0.0) activesupport (>= 3.0.0) uniform_notifier (~> 1.9.0) - byebug (8.2.1) - cancancan (1.13.1) - capistrano (3.4.0) + byebug (9.0.2) + cancancan (1.14.0) + capistrano (3.5.0) + airbrussh (>= 1.0.0) + capistrano-harrow i18n rake (>= 10.0.0) - sshkit (~> 1.3) + sshkit (>= 1.9.0) capistrano-bundler (1.1.4) capistrano (~> 3.1) sshkit (~> 1.2) - capistrano-rails (1.1.5) + capistrano-harrow (0.5.1) + capistrano-rails (1.1.6) capistrano (~> 3.1) capistrano-bundler (~> 1.1) capistrano-rvm (0.1.2) capistrano (~> 3.0) sshkit (~> 1.2) - capybara (2.5.0) + capybara (2.7.1) + addressable mime-types (>= 1.16) nokogiri (>= 1.3.3) rack (>= 1.0.0) rack-test (>= 0.5.4) xpath (~> 2.0) - capybara-webkit (1.7.1) - capybara (>= 2.3.0, < 2.6.0) + capybara-webkit (1.11.1) + capybara (>= 2.3.0, < 2.8.0) json chronic (0.10.2) climate_control (0.0.3) activesupport (>= 3.0) cocaine (0.5.8) climate_control (>= 0.0.3, < 1.0) - cocoon (1.2.6) - codeclimate-test-reporter (0.4.8) + cocoon (1.2.9) + codeclimate-test-reporter (0.5.0) simplecov (>= 0.7.1, < 1.0.0) - coderay (1.1.0) + coderay (1.1.1) coffee-rails (4.1.1) coffee-script (>= 2.2.0) railties (>= 4.0.0, < 5.1.x) @@ -100,26 +103,25 @@ GEM coffee-script-source execjs coffee-script-source (1.10.0) - concurrent-ruby (1.0.0) + concurrent-ruby (1.0.2) daemons (1.2.3) - database_cleaner (1.5.1) + database_cleaner (1.5.3) debug_inspector (0.0.2) - devise (3.5.3) + devise (4.1.1) bcrypt (~> 3.0) orm_adapter (~> 0.1) - railties (>= 3.2.6, < 5) + railties (>= 4.1.0, < 5.1) responders - thread_safe (~> 0.1) warden (~> 1.2.3) - devise_cas_authenticatable (1.7.1) + devise_cas_authenticatable (1.9.1) devise (>= 1.2.0) rubycas-client (>= 2.2.1) diff-lcs (1.2.5) docile (1.1.5) - dotenv (2.0.2) - dotenv-rails (2.0.2) - dotenv (= 2.0.2) - railties (~> 4.0) + dotenv (2.1.1) + dotenv-rails (2.1.1) + dotenv (= 2.1.1) + railties (>= 4.0, < 5.1) draper (2.1.0) actionpack (>= 3.0) activemodel (>= 3.0) @@ -129,21 +131,21 @@ GEM eventmachine (>= 0.12.9) http_parser.rb (~> 0.6.0) erubis (2.7.0) - eventmachine (1.0.8) + eventmachine (1.2.0.1) execjs (2.6.0) - factory_girl (4.5.0) + factory_girl (4.7.0) activesupport (>= 3.0.0) - factory_girl_rails (4.5.0) - factory_girl (~> 4.5.0) + factory_girl_rails (4.7.0) + factory_girl (~> 4.7.0) railties (>= 3.0.0) faraday (0.9.2) multipart-post (>= 1.2, < 3) - ffaker (2.1.0) + ffaker (2.2.0) ffi (1.9.10) - font-awesome-rails (4.5.0.0) - railties (>= 3.2, < 5.0) + font-awesome-rails (4.6.2.0) + railties (>= 3.2, < 5.1) formatador (0.2.5) - fullcalendar-rails (2.5.0.0) + fullcalendar-rails (2.6.1.0) jquery-rails (>= 4.0.5, < 5.0.0) jquery-ui-rails (>= 5.0.2) momentjs-rails (>= 2.9.0) @@ -162,12 +164,12 @@ GEM shellany (~> 0.0) thor (>= 0.18.1) guard-compat (1.2.1) - guard-livereload (2.5.1) + guard-livereload (2.5.2) em-websocket (~> 0.5) guard (~> 2.8) guard-compat (~> 1.0) multi_json (~> 1.8) - guard-rspec (4.6.4) + guard-rspec (4.6.5) guard (~> 2.1) guard-compat (~> 1.1) rspec (>= 2.99.0, < 4.0) @@ -177,20 +179,20 @@ GEM http_parser.rb (0.6.0) i18n (0.7.0) icalendar (2.3.0) - inline_svg (0.6.2) + inline_svg (0.7.0) activesupport (>= 4.0.4) loofah (>= 2.0) nokogiri (~> 1.6) jbuilder (2.4.1) activesupport (>= 3.0.0, < 5.1) multi_json (~> 1.2) - jquery-datatables-rails (3.3.0) + jquery-datatables-rails (3.4.0) actionpack (>= 3.1) jquery-rails railties (>= 3.1) sass-rails - jquery-rails (4.0.5) - rails-dom-testing (~> 1.0) + jquery-rails (4.1.1) + rails-dom-testing (>= 1, < 3) railties (>= 4.2.0) thor (>= 0.14, < 2.0) jquery-ui-rails (5.0.5) @@ -208,31 +210,34 @@ GEM actionmailer (>= 3.2) letter_opener (~> 1.0) railties (>= 3.2) - libv8 (3.16.14.13) - listen (3.0.5) - rb-fsevent (>= 0.9.3) - rb-inotify (>= 0.9) + libv8 (3.16.14.15) + listen (3.1.4) + rb-fsevent (~> 0.9, >= 0.9.4) + rb-inotify (~> 0.9, >= 0.9.7) + ruby_dep (~> 1.2) loofah (2.0.3) nokogiri (>= 1.5.9) lumberjack (1.0.10) - mail (2.6.3) - mime-types (>= 1.16, < 3) + mail (2.6.4) + mime-types (>= 1.16, < 4) method_source (0.8.2) - mime-types (2.99) + mime-types (3.0) + mime-types-data (~> 3.2015) + mime-types-data (3.2016.0221) mimemagic (0.3.0) mini_portile2 (2.0.0) minitest (5.8.4) - momentjs-rails (2.10.6) + momentjs-rails (2.11.1) railties (>= 3.1) - multi_json (1.11.2) + multi_json (1.12.0) multipart-post (2.0.0) - mysql2 (0.4.2) - nenv (0.2.0) + mysql2 (0.4.4) + nenv (0.3.0) nested_form (0.3.2) - net-ldap (0.13.0) + net-ldap (0.14.0) net-scp (1.2.1) net-ssh (>= 2.6.5) - net-ssh (3.0.2) + net-ssh (3.1.1) nilify_blanks (1.2.1) activerecord (>= 3.0.0) activesupport (>= 3.0.0) @@ -244,17 +249,17 @@ GEM octokit (3.8.0) sawyer (~> 0.6.0, >= 0.5.3) orm_adapter (0.5.0) - paperclip (4.3.2) + paperclip (4.3.6) activemodel (>= 3.2.0) activesupport (>= 3.2.0) cocaine (~> 0.5.5) mime-types mimemagic (= 0.3.0) - parser (2.2.3.0) - ast (>= 1.1, < 3.0) + parser (2.3.1.0) + ast (~> 2.2) party_foul (1.5.5) octokit (~> 3.1) - permanent_records (4.1.0) + permanent_records (4.1.5) activerecord (>= 4.2.0) activesupport (>= 4.2.0) pg (0.18.4) @@ -263,8 +268,8 @@ GEM coderay (~> 1.1.0) method_source (~> 0.8.1) slop (~> 3.4) - pry-byebug (3.3.0) - byebug (~> 8.0) + pry-byebug (3.4.0) + byebug (~> 9.0) pry (~> 0.10) pry-rails (0.3.4) pry (>= 0.9.10) @@ -275,24 +280,24 @@ GEM binding_of_caller (>= 0.7) pry (>= 0.9.11) rack (1.6.4) - rack-mini-profiler (0.9.8) - rack (>= 1.1.3) + rack-mini-profiler (0.9.9.2) + rack (>= 1.2.0) rack-pjax (0.8.0) nokogiri (~> 1.5) rack (~> 1.1) rack-test (0.6.3) rack (>= 1.0) - rack-timeout (0.3.2) - rails (4.2.5) - actionmailer (= 4.2.5) - actionpack (= 4.2.5) - actionview (= 4.2.5) - activejob (= 4.2.5) - activemodel (= 4.2.5) - activerecord (= 4.2.5) - activesupport (= 4.2.5) + rack-timeout (0.4.2) + rails (4.2.6) + actionmailer (= 4.2.6) + actionpack (= 4.2.6) + actionview (= 4.2.6) + activejob (= 4.2.6) + activemodel (= 4.2.6) + activerecord (= 4.2.6) + activesupport (= 4.2.6) bundler (>= 1.3.0, < 2.0) - railties (= 4.2.5) + railties (= 4.2.6) sprockets-rails rails-deprecated_sanitizer (1.0.3) activesupport (>= 4.2.0.alpha) @@ -300,7 +305,7 @@ GEM activesupport (>= 4.2.0.beta, < 5.0) nokogiri (~> 1.6.0) rails-deprecated_sanitizer (>= 1.0.1) - rails-html-sanitizer (1.0.2) + rails-html-sanitizer (1.0.3) loofah (~> 2.0) rails4-autocomplete (1.1.1) rails (>= 3.0) @@ -321,30 +326,30 @@ GEM remotipart (~> 1.0) safe_yaml (~> 1.0) sass-rails (>= 4.0, < 6) - rails_serve_static_assets (0.0.4) - rails_stdout_logging (0.0.4) - railties (4.2.5) - actionpack (= 4.2.5) - activesupport (= 4.2.5) + rails_serve_static_assets (0.0.5) + rails_stdout_logging (0.0.5) + railties (4.2.6) + actionpack (= 4.2.6) + activesupport (= 4.2.6) rake (>= 0.8.7) thor (>= 0.18.1, < 2.0) - rainbow (2.0.0) - raindrops (0.15.0) - rake (10.4.2) + rainbow (2.1.0) + raindrops (0.16.0) + rake (11.1.2) rb-fsevent (0.9.7) - rb-inotify (0.9.5) + rb-inotify (0.9.7) ffi (>= 0.5.0) redcarpet (3.3.4) ref (2.0.0) remotipart (1.2.1) - request_store (1.3.0) - responders (2.1.1) + request_store (1.3.1) + responders (2.2.0) railties (>= 4.2.0, < 5.1) rspec (3.4.0) rspec-core (~> 3.4.0) rspec-expectations (~> 3.4.0) rspec-mocks (~> 3.4.0) - rspec-core (3.4.1) + rspec-core (3.4.4) rspec-support (~> 3.4.0) rspec-expectations (3.4.0) diff-lcs (>= 1.2.0, < 2.0) @@ -352,7 +357,7 @@ GEM rspec-mocks (3.4.1) diff-lcs (>= 1.2.0, < 2.0) rspec-support (~> 3.4.0) - rspec-rails (3.4.0) + rspec-rails (3.4.2) actionpack (>= 3.0, < 4.3) activesupport (>= 3.0, < 4.3) railties (>= 3.0, < 4.3) @@ -361,19 +366,19 @@ GEM rspec-mocks (~> 3.4.0) rspec-support (~> 3.4.0) rspec-support (3.4.1) - rubocop (0.35.1) - astrolabe (~> 1.3) - parser (>= 2.2.3.0, < 3.0) + rubocop (0.40.0) + parser (>= 2.3.1.0, < 3.0) powerpack (~> 0.1) rainbow (>= 1.99.1, < 3.0) ruby-progressbar (~> 1.7) - tins (<= 1.6.0) - ruby-progressbar (1.7.5) + unicode-display_width (~> 1.0, >= 1.0.1) + ruby-progressbar (1.8.1) + ruby_dep (1.3.1) rubycas-client (2.3.9) activesupport - rubyzip (1.1.7) + rubyzip (1.2.0) safe_yaml (1.0.4) - sass (3.4.21) + sass (3.4.22) sass-rails (5.0.4) railties (>= 4.0.0, < 5.0) sass (~> 3.1) @@ -383,31 +388,31 @@ GEM sawyer (0.6.0) addressable (~> 2.3.5) faraday (~> 0.8, < 0.10) - select2-rails (4.0.1) + select2-rails (4.0.2) thor (~> 0.14) shellany (0.0.1) - shoulda-matchers (3.0.1) + shoulda-matchers (3.1.1) activesupport (>= 4.0.0) simple_form (3.2.1) actionpack (> 4, < 5.1) activemodel (> 4, < 5.1) - simplecov (0.11.1) + simplecov (0.11.2) docile (~> 1.1.0) json (~> 1.8) simplecov-html (~> 0.10.0) simplecov-html (0.10.0) slop (3.6.0) - spring (1.6.2) + spring (1.7.1) spring-commands-rspec (1.0.4) spring (>= 0.9.1) - sprockets (3.5.2) + sprockets (3.6.0) concurrent-ruby (~> 1.0) rack (> 1, < 3) - sprockets-rails (3.0.0) + sprockets-rails (3.0.4) actionpack (>= 4.0) activesupport (>= 4.0) sprockets (>= 3.0.0) - sshkit (1.8.1) + sshkit (1.10.0) net-scp (>= 1.1.2) net-ssh (>= 2.8.0) therubyracer (0.12.2) @@ -419,19 +424,17 @@ GEM rack (~> 1.0) thor (0.19.1) thread_safe (0.3.5) - tilt (2.0.2) - tins (1.6.0) + tilt (2.0.3) tzinfo (1.2.2) thread_safe (~> 0.1) - uglifier (2.7.2) - execjs (>= 0.3.0) - json (>= 1.8.0) - unicorn (5.0.1) + uglifier (3.0.0) + execjs (>= 0.3.0, < 3) + unicode-display_width (1.0.5) + unicorn (5.1.0) kgio (~> 2.6) - rack raindrops (~> 0.7) uniform_notifier (1.9.0) - warden (1.2.4) + warden (1.2.6) rack (>= 1.0) whenever (0.9.4) chronic (>= 0.6.3) @@ -446,73 +449,73 @@ DEPENDENCIES aws-sdk (< 2.0) bootstrap-sass (~> 3.3.6) bullet (~> 5.0.0) - cancancan (~> 1.13.1) - capistrano (= 3.4.0) + cancancan (~> 1.14.0) + capistrano (= 3.5.0) capistrano-bundler (~> 1.1.4) - capistrano-rails (~> 1.1.5) + capistrano-rails (~> 1.1.6) capistrano-rvm (~> 0.1.2) - capybara (~> 2.5.0) - capybara-webkit (~> 1.7.1) - cocoon (~> 1.2.6) - codeclimate-test-reporter (~> 0.4.8) + capybara (~> 2.7.1) + capybara-webkit (~> 1.11.1) + cocoon (~> 1.2.9) + codeclimate-test-reporter (~> 0.5.0) coffee-rails (~> 4.1.1) - database_cleaner (~> 1.5.1) - devise (~> 3.5.3) - devise_cas_authenticatable (~> 1.7.1) - dotenv-rails (~> 2.0.2) + database_cleaner (~> 1.5.3) + devise (~> 4.1.1) + devise_cas_authenticatable (~> 1.9.1) + dotenv-rails (~> 2.1.1) draper (~> 2.1.0) - factory_girl_rails (~> 4.5.0) - ffaker (~> 2.1.0) - font-awesome-rails (~> 4.5.0) - fullcalendar-rails (~> 2.5.0.0) + factory_girl_rails (~> 4.7.0) + ffaker (~> 2.2.0) + font-awesome-rails (~> 4.6.2.0) + fullcalendar-rails (~> 2.6.1.0) fuubar (~> 2.0.0) - guard-livereload (~> 2.5.1) - guard-rspec (~> 4.6.4) + guard-livereload (~> 2.5.2) + guard-rspec (~> 4.6.5) highline (~> 1.7.8) icalendar (~> 2.3.0) - inline_svg (~> 0.6.2) + inline_svg (~> 0.7.0) jbuilder (~> 2.4.0) - jquery-datatables-rails (~> 3.3.0) - jquery-rails (~> 4.0.5) + jquery-datatables-rails (~> 3.4.0) + jquery-rails (~> 4.1.1) jquery-ui-rails (~> 5.0.5) kaminari (~> 0.16.3) letter_opener (~> 1.4.1) letter_opener_web (~> 1.3.0) - momentjs-rails (~> 2.10.6) - mysql2 (~> 0.4.2) - net-ldap (~> 0.13.0) + momentjs-rails (~> 2.11.1) + mysql2 (~> 0.4.4) + net-ldap (~> 0.14.0) nilify_blanks (~> 1.2.1) - paperclip (~> 4.3.2) + paperclip (~> 4.3.6) party_foul (~> 1.5.5) - permanent_records (~> 4.1.0) + permanent_records (~> 4.1.5) pg (~> 0.18.4) pry (~> 0.10.3) - pry-byebug (~> 3.3.0) + pry-byebug (~> 3.4.0) pry-rails (~> 0.3.4) pry-remote (~> 0.1.8) pry-stack_explorer (~> 0.4.9.2) - rack-mini-profiler (~> 0.9.8) - rack-timeout (~> 0.3.2) - rails (~> 4.2.5) + rack-mini-profiler (~> 0.9.9) + rack-timeout (~> 0.4.2) + rails (~> 4.2.6) rails4-autocomplete (~> 1.1.1) rails_12factor (~> 0.0.3) rails_admin (~> 0.8.1) - rake (~> 10.4.2) + rake (~> 11.1.2) redcarpet (~> 3.3.4) - rspec-rails (~> 3.4.0) - rubocop (~> 0.35.1) - ruby-progressbar (~> 1.7.5) - rubyzip (~> 1.1.7) + rspec-rails (~> 3.4.2) + rubocop (~> 0.40.0) + ruby-progressbar (~> 1.8.1) + rubyzip (~> 1.2.0) sass-rails (~> 5.0.4) - select2-rails (~> 4.0.1) - shoulda-matchers (~> 3.0.1) + select2-rails (~> 4.0.2) + shoulda-matchers (~> 3.1.1) simple_form (~> 3.2.1) - spring (~> 1.6.2) + spring (~> 1.7.1) spring-commands-rspec (~> 1.0.4) therubyracer (~> 0.12.2) thin (~> 1.6.4) - uglifier (~> 2.7.2) - unicorn (~> 5.0.1) + uglifier (~> 3.0.0) + unicorn (~> 5.1.0) whenever (~> 0.9.4) BUNDLED WITH diff --git a/app/controllers/app_configs_controller.rb b/app/controllers/app_configs_controller.rb index 2ce4cfb48..836d98cf9 100644 --- a/app/controllers/app_configs_controller.rb +++ b/app/controllers/app_configs_controller.rb @@ -39,19 +39,20 @@ def update def app_config_params params.require(:app_config) - .permit(:site_title, :admin_email, :department_name, - :contact_link_location, :home_link_text, :home_link_location, - :upcoming_checkin_email_body, :upcoming_checkin_email_active, - :upcoming_checkout_email_body, :upcoming_checkout_email_active, - :overdue_checkin_email_body, :overdue_checkin_email_active, - :reservation_confirmation_email_active, :request_text, - :enable_new_users, :res_exp_time, :blackout_exp_time, - :send_notifications_for_deleted_missed_reservations, - :deleted_missed_reservation_email_body, :enable_guests, - :default_per_cat_page, :terms_of_service, :favicon, - :checkout_persons_can_edit, :enable_renewals, - :override_on_create, :override_at_checkout, :require_phone, - :notify_admin_on_create, :disable_user_emails, - :autodeactivate_on_archive) + .permit(:site_title, :admin_email, :department_name, + :contact_link_location, :home_link_text, :home_link_location, + :upcoming_checkin_email_body, :upcoming_checkin_email_active, + :upcoming_checkout_email_body, + :upcoming_checkout_email_active, + :overdue_checkin_email_body, :overdue_checkin_email_active, + :reservation_confirmation_email_active, :request_text, + :enable_new_users, :res_exp_time, :blackout_exp_time, + :send_notifications_for_deleted_missed_reservations, + :deleted_missed_reservation_email_body, :enable_guests, + :default_per_cat_page, :terms_of_service, :favicon, + :checkout_persons_can_edit, :enable_renewals, + :override_on_create, :override_at_checkout, :require_phone, + :notify_admin_on_create, :disable_user_emails, + :autodeactivate_on_archive) end end diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index f6e518757..4ed77083b 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -101,7 +101,7 @@ def set_view_mode def check_active_admin_permission return if can? :access, :active_admin - fail CanCan::AccessDenied.new, 'Access Denied.' + raise CanCan::AccessDenied.new, 'Access Denied.' end def check_view_mode @@ -116,7 +116,7 @@ def check_view_mode end def fix_cart_date - cart.start_date = (Time.zone.today) if cart.start_date < Time.zone.today + cart.start_date = Time.zone.today if cart.start_date < Time.zone.today cart.fix_due_date end @@ -210,11 +210,13 @@ def current_ability # rubocop:disable MethodLength, AbcSize def prepare_catalog_index_vars(eq_models = nil) # prepare the catalog - eq_models ||= EquipmentModel.active - .order('categories.sort_order ASC, equipment_models.name ASC') - .includes(:category, :requirements) - .page(params[:page]) - .per(session[:items_per_page]) + eq_models ||= + EquipmentModel.active + .order('categories.sort_order ASC, '\ + 'equipment_models.name ASC') + .includes(:category, :requirements) + .page(params[:page]) + .per(session[:items_per_page]) @eq_models_by_category = eq_models.to_a.group_by(&:category) @available_string = 'available from '\ @@ -252,10 +254,10 @@ def prepare_catalog_index_vars(eq_models = nil) # have requirements as part of equipment model itself restricted = em.model_restricted?(cart.reserver_id) - if restricted - @qualifications_hash[em.id] = Requirement.list_requirement_admins( - reserver, em).html_safe - end + next unless restricted + @qualifications_hash[em.id] = Requirement.list_requirement_admins( + reserver, em + ).html_safe end @page_eq_models_by_category = eq_models @@ -286,7 +288,7 @@ def deactivate # Finds the current model (EM, EI, Category) @items_class2 = params[:controller].singularize.titleize.delete(' ') - .constantize.find(params[:id]) + .constantize.find(params[:id]) # Deactivate the model you had originally intended to deactivate @items_class2.destroy flash[:notice] = 'Successfully deactivated '\ @@ -300,7 +302,7 @@ def activate # Finds the current model (EM, EI, Category) @model_to_activate = params[:controller].singularize.titleize.delete(' ') - .constantize.find(params[:id]) + .constantize.find(params[:id]) activate_parents(@model_to_activate) @model_to_activate.revive flash[:notice] = 'Successfully reactivated '\ @@ -337,6 +339,7 @@ def create_guest_user first_name: 'Guest', last_name: 'User', role: 'guest', - view_mode: 'guest') + view_mode: 'guest' + ) end end diff --git a/app/controllers/blackouts_controller.rb b/app/controllers/blackouts_controller.rb index 516a111e2..1bbca5513 100644 --- a/app/controllers/blackouts_controller.rb +++ b/app/controllers/blackouts_controller.rb @@ -69,7 +69,7 @@ def create # rubocop:disable MethodLength # check for conflicts res = Reservation.overlaps_with_date_range(p[:start_date], p[:end_date]) - .active + .active # save and exit if res.empty? && @blackout.save @@ -118,7 +118,7 @@ def destroy_recurring def blackout_params params.require(:blackout) - .permit(:start_date, :end_date, :notice, :blackout_type, :created_by, - :set_id) + .permit(:start_date, :end_date, :notice, :blackout_type, :created_by, + :set_id) end end diff --git a/app/controllers/categories_controller.rb b/app/controllers/categories_controller.rb index e8f7f4550..a99bce7ab 100644 --- a/app/controllers/categories_controller.rb +++ b/app/controllers/categories_controller.rb @@ -15,11 +15,11 @@ def set_current_category # --------- end before filter methods -------- # def index - if params[:show_deleted] - @categories = Category.all - else - @categories = Category.active - end + @categories = if params[:show_deleted] + Category.all + else + Category.active + end respond_to do |format| format.html format.zip { download_equipment_data } @@ -72,7 +72,7 @@ def deactivate @category.equipment_models.each do |em| Reservation.for_eq_model(em.id).finalized.each do |r| r.archive(current_user, 'The category was deactivated.') - .save(validate: false) + .save(validate: false) end end super @@ -86,9 +86,9 @@ def deactivate def category_params params.require(:category) - .permit(:name, :max_per_user, :max_checkout_length, :deleted_at, - :max_renewal_times, :max_renewal_length, :sort_order, - :renewal_days_before_due) + .permit(:name, :max_per_user, :max_checkout_length, :deleted_at, + :max_renewal_times, :max_renewal_length, :sort_order, + :renewal_days_before_due) end def generate_calendar_reservations diff --git a/app/controllers/concerns/calendarable.rb b/app/controllers/concerns/calendarable.rb index b8ad5617b..f305d5c82 100644 --- a/app/controllers/concerns/calendarable.rb +++ b/app/controllers/concerns/calendarable.rb @@ -105,14 +105,14 @@ def calendar_end_date # This method should return the relevant list of reservations to display in # the calendar def generate_calendar_reservations - fail NotImplementedError + raise NotImplementedError end ## # This method should return the relevant instance of the current controller's # model (e.g. the equipment model whose calendar is being requested) def generate_calendar_resource - fail NotImplementedError + raise NotImplementedError end ## @@ -127,6 +127,6 @@ def generate_source_path # is a symbol that will be called on an instance of Reservation whose return # value should accept a #name method (e.g. `reserver` or `equipment_model`) def calendar_name_method - fail NotImplementedError + raise NotImplementedError end end diff --git a/app/controllers/equipment_items_controller.rb b/app/controllers/equipment_items_controller.rb index 1ccae164b..8a8dfe9d4 100644 --- a/app/controllers/equipment_items_controller.rb +++ b/app/controllers/equipment_items_controller.rb @@ -87,7 +87,8 @@ def deactivate @equipment_item.current_reservation.archive( current_user, 'The equipment item was deactivated for the following reason: '\ - "**#{params[:deactivation_reason]}**").save(validate: false) + "**#{params[:deactivation_reason]}**" + ).save(validate: false) end super elsif params[:deactivation_cancelled] @@ -112,8 +113,8 @@ def activate def equipment_item_params params.require(:equipment_item) - .permit(:name, :serial, :deleted_at, :equipment_model_id, - :deactivation_reason, :notes) + .permit(:name, :serial, :deleted_at, :equipment_model_id, + :deactivation_reason, :notes) end def generate_calendar_reservations diff --git a/app/controllers/equipment_models_controller.rb b/app/controllers/equipment_models_controller.rb index 91a37af84..09b92e79d 100644 --- a/app/controllers/equipment_models_controller.rb +++ b/app/controllers/equipment_models_controller.rb @@ -47,11 +47,11 @@ def show # rubocop:disable AbcSize, MethodLength calendar_length = 1.month @reservation_data = relevant_reservations.collect do |r| - if r.overdue - end_date = Time.zone.today + calendar_length - else - end_date = r.due_date - end + end_date = if r.overdue + Time.zone.today + calendar_length + else + r.due_date + end { start: r.start_date, end: end_date } # the above code mimics the current available? setup to show overdue # equipment as permanently 'out'. @@ -68,9 +68,10 @@ def show # rubocop:disable AbcSize, MethodLength @restricted = @equipment_model.model_restricted?(cart.reserver_id) # For pending reservations table - @pending = relevant_reservations.reserved - .overlaps_with_date_range(Time.zone.today, - Time.zone.today + 8.days) + @pending = + relevant_reservations.reserved + .overlaps_with_date_range(Time.zone.today, + Time.zone.today + 8.days) # Future reservations using Query object @future = @pending.future end @@ -118,7 +119,7 @@ def deactivate elsif params[:deactivation_confirmed] Reservation.for_eq_model(@equipment_model.id).finalized.each do |r| r.archive(current_user, 'The equipment model was deactivated.') - .save(validate: false) + .save(validate: false) end super else @@ -149,7 +150,7 @@ def delete_files 'clear_photo' => :photo } # only keep pairs that occur as keys with non-nil values in params - types.select! { |k, v| params.keys.member?((k)) && !v.nil? } + types.select! { |k, v| params.keys.member?(k) && !v.nil? } types.each { |_k, attr| params[:equipment_model][attr] = nil } end @@ -158,13 +159,13 @@ def equipment_model_params # don't have fixed hash keys (check to see if they exist first # to resolve test failures) params.require(:equipment_model) - .permit(:name, :category_id, :category, :description, :late_fee, - :replacement_fee, :max_per_user, :document_attributes, - :deleted_at, :photo, :documentation, :max_renewal_times, - :max_renewal_length, :renewal_days_before_due, :late_fee_max, - { associated_equipment_model_ids: [] }, :requirement_ids, - :requirements, :max_checkout_length) - .tap do |whitelisted| + .permit(:name, :category_id, :category, :description, :late_fee, + :replacement_fee, :max_per_user, :document_attributes, + :deleted_at, :photo, :documentation, :max_renewal_times, + :max_renewal_length, :renewal_days_before_due, :late_fee_max, + { associated_equipment_model_ids: [] }, :requirement_ids, + :requirements, :max_checkout_length) + .tap do |whitelisted| whitelisted[:checkin_procedures_attributes] = params[:equipment_model][:checkin_procedures_attributes] if params[:equipment_model][:checkin_procedures_attributes] diff --git a/app/controllers/reports_controller.rb b/app/controllers/reports_controller.rb index b7cee54f6..078b6a535 100644 --- a/app/controllers/reports_controller.rb +++ b/app/controllers/reports_controller.rb @@ -7,8 +7,7 @@ class ReportsController < ApplicationController ['Returned On Time', :returned_on_time, :count], ['Returned Overdue', :returned_overdue, :count], ['Avg Planned Duration', :all, :duration], - ['Avg Time Checked Out', :all, :time_checked_out] - ] + ['Avg Time Checked Out', :all, :time_checked_out]].freeze RES_COLUMNS = [['Reserver', :all, :name, :reserver], ['Equipment Model', :all, :name, :equipment_model], ['Equipment Item', :all, :name, :equipment_item], @@ -16,7 +15,7 @@ class ReportsController < ApplicationController ['Start Date', :all, :display, :start_date], ['Checked Out', :all, :display, :checked_out], ['Due Date', :all, :display, :due_date], - ['Checked In', :all, :display, :checked_in]] + ['Checked In', :all, :display, :checked_in]].freeze before_action :set_dates, only: [:index, :subreport] @@ -70,7 +69,7 @@ def subreport end reservations = Reservation.starts_on_days(@start_date, @end_date) - .where(id_symbol => id) + .where(id_symbol => id) @data_tables = build_subreports reservations diff --git a/app/controllers/requirements_controller.rb b/app/controllers/requirements_controller.rb index 55f5fe72d..1a0f4e307 100644 --- a/app/controllers/requirements_controller.rb +++ b/app/controllers/requirements_controller.rb @@ -49,7 +49,8 @@ def destroy def requirement_params params.require(:requirement) - .permit(:user_id, :user_ids, :description, { equipment_model_ids: [] }, - :equipment_model_id, :notes, :contact_info, :contact_name) + .permit(:user_id, :user_ids, :equipment_model_id, :contact_info, + :description, { equipment_model_ids: [] }, :notes, + :contact_name) end end diff --git a/app/controllers/reservations_controller.rb b/app/controllers/reservations_controller.rb index 1d7139460..5d5d65c06 100644 --- a/app/controllers/reservations_controller.rb +++ b/app/controllers/reservations_controller.rb @@ -69,17 +69,17 @@ def index @filter = set_filter @view_all = session[:all_dates] - if can? :manage, Reservation - source = Reservation - else - source = current_user.reservations - end - - if session[:all_dates] - time = source - else - time = source.starts_on_days(@start_date, @end_date) - end + source = if can? :manage, Reservation + Reservation + else + current_user.reservations + end + + time = if session[:all_dates] + source + else + source.starts_on_days(@start_date, @end_date) + end set_counts(source, time) @reservations_set = time.send(@filter) @@ -181,7 +181,7 @@ def create # rubocop:disable all def edit @option_array = @reservation.equipment_model.equipment_items - .collect { |e| [e.name, e.id] } + .collect { |e| [e.name, e.id] } end # for editing reservations; not for checkout or check-in @@ -297,7 +297,7 @@ def checkout # rubocop:disable all checked_out_reservations.each do |r| r.save! # update equipment item notes - new_notes = params[:reservations]["#{r.id}"][:notes] + new_notes = params[:reservations][r.id.to_s][:notes] r.equipment_item.make_reservation_notes('checked out', r, r.checkout_handler, new_notes, r.checked_out) @@ -354,7 +354,7 @@ def checkin # rubocop:disable all checked_in_reservations.each do |r| r.save! # update equipment item notes - new_notes = params[:reservations]["#{r.id}"][:notes] + new_notes = params[:reservations][r.id.to_s][:notes] r.equipment_item.make_reservation_notes('checked in', r, r.checkin_handler, new_notes, r.checked_in) @@ -409,7 +409,7 @@ def current def send_receipt if UserMailer.reservation_status_update(@reservation, 'checked out') - .deliver_now + .deliver_now flash[:notice] = 'Successfully delivered receipt email.' else flash[:error] = 'Unable to deliver receipt email. Please contact '\ @@ -487,13 +487,14 @@ def archive # rubocop:disable all begin @reservation.archive(current_user, params[:archive_note]) - .save(validate: false) + .save(validate: false) # archive equipment item if checked out if @reservation.equipment_item @reservation.equipment_item - .make_reservation_notes('archived', @reservation, current_user, - params[:archive_note], - @reservation.checked_in) + .make_reservation_notes('archived', + @reservation, current_user, + params[:archive_note], + @reservation.checked_in) if AppConfig.check(:autodeactivate_on_archive) @reservation.equipment_item.deactivate(user: current_user, reason: params[:archive_note]) @@ -511,10 +512,10 @@ def archive # rubocop:disable all def reservation_params params.require(:reservation) - .permit(:checkout_handler_id, :checkin_handler_id, - :checked_out, :checked_in, :equipment_item, :due_date, - :equipment_item_id, :notes, :notes_unsent, :times_renewed, - :reserver_id, :reserver, :start_date, :equipment_model_id) + .permit(:checkout_handler_id, :checkin_handler_id, + :checked_out, :checked_in, :equipment_item, :due_date, + :equipment_item_id, :notes, :notes_unsent, :times_renewed, + :reserver_id, :reserver, :start_date, :equipment_model_id) end def format_errors(errors) diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index e979964a8..69bb2dacf 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -30,11 +30,11 @@ def check_cas_auth # ------------ end before filter methods ------------ # def index - if params[:show_banned] - @users = User.order('username ASC') - else - @users = User.active.order('username ASC') - end + @users = if params[:show_banned] + User.order('username ASC') + else + User.active.order('username ASC') + end respond_to do |format| format.html diff --git a/app/decorators/application_decorator.rb b/app/decorators/application_decorator.rb index 8e86573bc..113ae573a 100644 --- a/app/decorators/application_decorator.rb +++ b/app/decorators/application_decorator.rb @@ -8,7 +8,7 @@ def make_deactivate_btn(onclick_str = nil) else link_to 'Deactivate', [:deactivate, object], class: 'btn btn-danger', method: :put, - onclick: "#{onclick_str}" + onclick: onclick_str.to_s end end end diff --git a/app/decorators/category_decorator.rb b/app/decorators/category_decorator.rb index 33e1f08f2..76fc3779e 100644 --- a/app/decorators/category_decorator.rb +++ b/app/decorators/category_decorator.rb @@ -15,10 +15,11 @@ def make_deactivate_btn # find reservations for models in the category in the next week res = 0 object.equipment_models.each do |em| - res += Reservation.for_eq_model(em.id).active - .overlaps_with_date_range(Time.zone.today - 1.day, - Time.zone.today + 7.days) - .count + res += + Reservation.for_eq_model(em.id).active + .overlaps_with_date_range(Time.zone.today - 1.day, + Time.zone.today + 7.days) + .count end onclick_str = "handleBigDeactivation(this, #{res}, 'category');" end diff --git a/app/decorators/equipment_model_decorator.rb b/app/decorators/equipment_model_decorator.rb index 7f489e12d..af1bc1a51 100644 --- a/app/decorators/equipment_model_decorator.rb +++ b/app/decorators/equipment_model_decorator.rb @@ -13,10 +13,11 @@ class EquipmentModelDecorator < ApplicationDecorator def make_deactivate_btn unless object.deleted_at # find reservations in the next week - res = Reservation.for_eq_model(object.id).active - .overlaps_with_date_range(Time.zone.today - 1.day, - Time.zone.today + 7.days) - .count + res = + Reservation.for_eq_model(object.id).active + .overlaps_with_date_range(Time.zone.today - 1.day, + Time.zone.today + 7.days) + .count onclick_str = "handleBigDeactivation(this, #{res}, 'equipment model');" end super(onclick_str) diff --git a/app/helpers/layout_helper.rb b/app/helpers/layout_helper.rb index 8203d633b..d55813b90 100644 --- a/app/helpers/layout_helper.rb +++ b/app/helpers/layout_helper.rb @@ -37,8 +37,9 @@ def reservations_count else # this variable is called in _navbar.html.erb to list a user's current # reservations in the dropdown. - @current_reservations = current_or_guest_user.reservations - .active_or_requested.includes(:equipment_model) + @current_reservations = + current_or_guest_user.reservations + .active_or_requested.includes(:equipment_model) count = @current_reservations.size end end diff --git a/app/mailers/user_mailer.rb b/app/mailers/user_mailer.rb index 3a88f6af6..73d977ea6 100644 --- a/app/mailers/user_mailer.rb +++ b/app/mailers/user_mailer.rb @@ -13,7 +13,7 @@ class UserMailer < ActionMailer::Base VALID_STATUSES = ['checked out', 'denied', 'due today', 'missed', 'overdue', 'request approved', 'requested', 'returned', - 'returned overdue', 'starts today'] + 'returned overdue', 'starts today'].freeze def reservation_status_update(reservation, force = '') # rubocop:disable all if AppConfig.get(:disable_user_emails) diff --git a/app/models/blackout.rb b/app/models/blackout.rb index b7dd0c639..2f097b801 100644 --- a/app/models/blackout.rb +++ b/app/models/blackout.rb @@ -20,13 +20,13 @@ class Blackout < ActiveRecord::Base def self.get_notices_for_date(date, type = :all) # get a string of all notices for a given date # default to all blackouts - if type == :soft - blackouts = Blackout.soft.for_date(date) - elsif type == :hard - blackouts = Blackout.hard.for_date(date) - else - blackouts = Blackout.for_date(date) - end + blackouts = if type == :soft + Blackout.soft.for_date(date) + elsif type == :hard + Blackout.hard.for_date(date) + else + Blackout.for_date(date) + end messages = [] blackouts.for_date(date).each do |b| messages << b.notice diff --git a/app/models/cart_validations.rb b/app/models/cart_validations.rb index 7dbc85201..f495557ad 100644 --- a/app/models/cart_validations.rb +++ b/app/models/cart_validations.rb @@ -26,7 +26,7 @@ def validate_all(renew = false) # rubocop:disable AbcSize, MethodLength source_res = Reservation.where(equipment_model_id: items.keys) - .overlaps_with_date_range(start_date, due_date).active.all + .overlaps_with_date_range(start_date, due_date).active.all models.each do |model, quantity| errors += check_availability(model, quantity, source_res) @@ -52,8 +52,9 @@ def check_consecutive # rubocop:disable AbcSize models = get_items.keys models.each do |model| next unless model.maximum_per_user == 1 && model.maximum_checkout_length - consecutive = Reservation.for_reserver(reserver).for_eq_model(model) - .consecutive_with(start_date, due_date) + consecutive = + Reservation.for_reserver(reserver).for_eq_model(model) + .consecutive_with(start_date, due_date) consecutive.each do |c| next unless c.duration + duration > model.maximum_checkout_length @@ -131,7 +132,7 @@ def check_max_ems count_hash = get_items relevant = Reservation.for_reserver(reserver_id).active - .includes(:equipment_model).all + .includes(:equipment_model).all check_max_items(count_hash, relevant, :number_for_model_on_date) end @@ -146,7 +147,7 @@ def check_max_cat cat_hash[ems[index].category] += q end relevant = Reservation.for_reserver(reserver_id).active - .with_categories.all + .with_categories.all check_max_items(cat_hash, relevant, :number_for_category_on_date) end @@ -154,7 +155,7 @@ def check_availability(model = EquipmentModel.find(items.keys.first), quantity = 1, source_res = Reservation.for_eq_model(items.keys.first) - .active.all) + .active.all) # checks that the model is available for the given quantity given the # existence of the source_reservations diff --git a/app/models/category.rb b/app/models/category.rb index a5e97ea4a..891316d9f 100644 --- a/app/models/category.rb +++ b/app/models/category.rb @@ -15,7 +15,8 @@ class Category < ActiveRecord::Base numericality: { allow_nil: true, integer_only: true, - greater_than_or_equal_to: 0 } + greater_than_or_equal_to: 0 + } nilify_blanks only: [:deleted_at] diff --git a/app/models/concerns/linkable.rb b/app/models/concerns/linkable.rb index c6a38942d..489c44c07 100644 --- a/app/models/concerns/linkable.rb +++ b/app/models/concerns/linkable.rb @@ -9,7 +9,7 @@ def default_url_options def md_link(text = name) url_method = "#{self.class.to_s.underscore}_url" - id ? "[#{text}](#{send(url_method, self, only_path: false)})" : "#{text}" + id ? "[#{text}](#{send(url_method, self, only_path: false)})" : text.to_s end end end diff --git a/app/models/equipment_item.rb b/app/models/equipment_item.rb index 99fca7331..3f6880c95 100644 --- a/app/models/equipment_item.rb +++ b/app/models/equipment_item.rb @@ -20,9 +20,9 @@ class EquipmentItem < ActiveRecord::Base searchable_on(:name, :serial) def status - if self.deleted? && deactivation_reason + if deleted? && deactivation_reason "Deactivated (#{deactivation_reason})" - elsif self.deleted? + elsif deleted? 'Deactivated' elsif r = current_reservation # rubocop:disable AssignmentInCondition "checked out by #{r.reserver.name} through "\ @@ -57,11 +57,11 @@ def make_reservation_notes(procedure_verb, reservation, handler, new_notes, new_str = "#### #{reservation.md_link(procedure_verb.capitalize)} by "\ "#{handler.md_link} for #{reservation.reserver.md_link} on "\ "#{time.to_s(:long)}\n" - if new_notes.empty? - new_str += "\n" - else - new_str += "##### Notes:\n#{new_notes}\n\n" - end + new_str += if new_notes.empty? + "\n" + else + "##### Notes:\n#{new_notes}\n\n" + end new_str += notes update_attributes(notes: new_str) end @@ -71,37 +71,34 @@ def make_switch_notes(old_res, new_res, handler) old_res_msg = old_res ? old_res.md_link : 'available' new_res_msg = new_res ? new_res.md_link : 'available' update_attributes(notes: "#### Switched by #{handler.md_link} from "\ - "#{old_res_msg} to #{new_res_msg} on "\ - "#{Time.zone.now.to_s(:long)}\n\n" + notes) + "#{old_res_msg} to #{new_res_msg} on "\ + "#{Time.zone.now.to_s(:long)}\n\n" + notes) end def update(current_user, new_params) # rubocop:disable all assign_attributes(new_params) changes = self.changes - if changes.empty? - return self - else - new_notes = "#### Edited at #{Time.zone.now.to_s(:long)} by "\ - "#{current_user.md_link}\n\n" - new_notes += "\n\n#### Changes:" - changes.each do |param, diff| - case param - when 'name' - name = 'Name' - old_val = diff[0].to_s - new_val = diff[1].to_s - when 'serial' - name = 'Serial' - old_val = diff[0].to_s - new_val = diff[1].to_s - when 'equipment_model_id' - name = 'Equipment Model' - old_val = diff[0] ? EquipmentModel.find(diff[0]).name : 'nil' - new_val = diff[1] ? EquipmentModel.find(diff[1]).name : 'nil' - end - new_notes += "\n#{name} changed from " + old_val + ' to ' + new_val\ - + '.' if old_val && new_val + return self if changes.empty? + new_notes = "#### Edited at #{Time.zone.now.to_s(:long)} by "\ + "#{current_user.md_link}\n\n" + new_notes += "\n\n#### Changes:" + changes.each do |param, diff| + case param + when 'name' + name = 'Name' + old_val = diff[0].to_s + new_val = diff[1].to_s + when 'serial' + name = 'Serial' + old_val = diff[0].to_s + new_val = diff[1].to_s + when 'equipment_model_id' + name = 'Equipment Model' + old_val = diff[0] ? EquipmentModel.find(diff[0]).name : 'nil' + new_val = diff[1] ? EquipmentModel.find(diff[1]).name : 'nil' end + new_notes += "\n#{name} changed from " + old_val + ' to ' + new_val\ + + '.' if old_val && new_val end new_notes += "\n\n" + notes self.notes = new_notes.strip @@ -126,7 +123,7 @@ def deactivate(options = {}) "#{options[:user].md_link}\n#{options[:reason]}\n\n" + notes self.notes = new_notes self.deactivation_reason = options[:reason] - self.save! + save! destroy self end diff --git a/app/models/equipment_model.rb b/app/models/equipment_model.rb index a132ce05d..86ce2636e 100644 --- a/app/models/equipment_model.rb +++ b/app/models/equipment_model.rb @@ -74,7 +74,8 @@ def not_associated_with_self large: { geometry: '500x500', format: 'png' }, medium: { geometry: '250x250', format: 'png' }, small: { geometry: '150x150', format: 'png' }, - thumbnail: { geometry: '260x180', format: 'png' } }, + thumbnail: { geometry: '260x180', format: 'png' } + }, convert_options: { large: '-background none -gravity center -extent 500x500', @@ -83,7 +84,8 @@ def not_associated_with_self small: '-background none -gravity center -extent 150x150', thumbnail: - '-background none -gravity center -extent 260x180' }, + '-background none -gravity center -extent 260x180' + }, url: '/attachments/equipment_models/:attachment/:id/'\ ':style/:basename.:extension', path: ':rails_root/public/attachments/equipment_models/'\ @@ -191,9 +193,10 @@ def num_available_from_source(start_date, due_date, source_reservations) def num_available(start_date, due_date) # for if you just want the number available, 1 query to get # relevant reservations - relevant_reservations = Reservation.for_eq_model(id).active - .overlaps_with_date_range(start_date, due_date) - .all + relevant_reservations = + Reservation.for_eq_model(id).active + .overlaps_with_date_range(start_date, due_date) + .all num_available_from_source(start_date, due_date, relevant_reservations) end @@ -230,8 +233,10 @@ def availability(date) def available_item_select_options equipment_items.includes(:reservations).active.select(&:available?)\ - .sort_by(&:name)\ - .collect { |item| "" }\ - .join.html_safe + .sort_by(&:name)\ + .collect do |item| + "" + end\ + .join.html_safe end end diff --git a/app/models/report.rb b/app/models/report.rb index 1c109e680..4753e9134 100644 --- a/app/models/report.rb +++ b/app/models/report.rb @@ -6,7 +6,7 @@ class Report ['Overdue', :overdue, :count], ['Returned On Time', :returned_on_time, :count], ['Returned Overdue', :returned_overdue, :count], - ['User Count', :all, :count, :reserver_id]] + ['User Count', :all, :count, :reserver_id]].freeze # Reports are extremely powerful 2D reservation statistics tables # See #build_new for the main constructor method used in the controller. @@ -46,7 +46,8 @@ class Row def self.item_to_row(item) r = Row.new r.link_path = Rails.application.routes.url_helpers.subreport_path( - id: item.id, class: item.class.to_s.underscore.downcase) + id: item.id, class: item.class.to_s.underscore.downcase + ) begin r.name = item.name if item.class == Reservation @@ -64,7 +65,7 @@ def self.item_to_row(item) # get the average of an array of values, discounting nil values def self.average2(arr) arr = arr.reject(&:nil?) - if arr.size == 0 + if arr.empty? 'N/A' else (arr.inject { |a, e| a + e }.to_f / arr.size).round(2) @@ -158,11 +159,11 @@ def initialize_columns(col_array, reservations, row_item_type) columns.each do |col| # only instantiate the fields that we need relation = reservations.send(col.filter) - if col.data_type == :count && col.data_field.nil? - col.res_set = relation.collect(&row_item_type) - else - col.res_set = relation.to_a - end + col.res_set = if col.data_type == :count && col.data_field.nil? + relation.collect(&row_item_type) + else + relation.to_a + end end end diff --git a/app/models/reservation.rb b/app/models/reservation.rb index 013461544..f32b0cf47 100644 --- a/app/models/reservation.rb +++ b/app/models/reservation.rb @@ -37,7 +37,7 @@ class Reservation < ActiveRecord::Base # or where('flags & ? = 0', FLAGS[:flag]) for not flagged FLAGS = { request: (1 << 1), broken: (1 << 2), lost: (1 << 3), fined: (1 << 4), missed_email_sent: (1 << 5), - expired: (1 << 6) } + expired: (1 << 6) }.freeze ## Scopes ## # general scopes @@ -58,7 +58,8 @@ class Reservation < ActiveRecord::Base } scope :active_or_requested, lambda { where(status: Reservation.statuses.values_at( - *%w(requested reserved checked_out))) + *%w(requested reserved checked_out) + )) } # overdue / request scopes @@ -200,12 +201,7 @@ def time_checked_out def late_fee return 0 unless overdue - if checked_in - end_date = checked_in.to_date - else - end_date = Time.zone.today - end - fee = equipment_model.late_fee * (end_date - due_date) + fee = equipment_model.late_fee * (end_date.to_date - due_date) if fee < 0 fee = 0 elsif equipment_model.late_fee_max > 0 @@ -280,11 +276,9 @@ def to_cart def renew(user) # renew the reservation and return error messages if unsuccessful - unless self.eligible_for_renew? - return 'Reservation not eligible for renewal' - end + return 'Reservation not eligible for renewal' unless eligible_for_renew? self.due_date = find_renewal_date - self.notes = "#{notes}" + "\n\n### Renewed on "\ + self.notes = notes.to_s + "\n\n### Renewed on "\ "#{Time.zone.now.to_s(:long)} by #{user.md_link}\n\nThe new due date "\ "is #{due_date.to_s(:long)}." self.times_renewed += 1 @@ -374,56 +368,53 @@ def update(current_user, new_params, new_notes) # rubocop:disable all assign_attributes(new_params) changes = self.changes new_notes = '' unless new_notes - if new_notes.empty? && changes.empty? - return self - else - # write notes header - header = "### Edited on #{Time.zone.now.to_s(:long)} by "\ - "#{current_user.md_link}\n" - self.notes = notes ? notes + "\n\n" + header : header - - # add notes if they exist - self.notes += "\n\n#### Notes:\n#{new_notes}" unless new_notes.empty? - - # record changes - # rubocop:disable BlockNesting - unless changes.empty? - self.notes += "\n\n#### Changes:" - changes.each do |param, diff| - case param - when 'reserver_id' - name = 'Reserver' - old_val = diff[0] ? User.find(diff[0]).md_link : 'nil' - new_val = diff[1] ? User.find(diff[1]).md_link : 'nil' - when 'start_date' - name = 'Start Date' - old_val = diff[0].to_s(:long) - new_val = diff[1].to_s(:long) - when 'due_date' - name = 'Due Date' - old_val = diff[0].to_s(:long) - new_val = diff[1].to_s(:long) - if checked_out? - if overdue? && diff[1] >= Time.zone.today - overdue_str = "\nReservation marked as not overdue." - elsif !overdue? && diff[1] < Time.zone.today - overdue_str = "\nReservation marked as overdue." - end + return self if new_notes.empty? && changes.empty? + # write notes header + header = "### Edited on #{Time.zone.now.to_s(:long)} by "\ + "#{current_user.md_link}\n" + self.notes = notes ? notes + "\n\n" + header : header + + # add notes if they exist + self.notes += "\n\n#### Notes:\n#{new_notes}" unless new_notes.empty? + + # record changes + # rubocop:disable BlockNesting + unless changes.empty? + self.notes += "\n\n#### Changes:" + changes.each do |param, diff| + case param + when 'reserver_id' + name = 'Reserver' + old_val = diff[0] ? User.find(diff[0]).md_link : 'nil' + new_val = diff[1] ? User.find(diff[1]).md_link : 'nil' + when 'start_date' + name = 'Start Date' + old_val = diff[0].to_s(:long) + new_val = diff[1].to_s(:long) + when 'due_date' + name = 'Due Date' + old_val = diff[0].to_s(:long) + new_val = diff[1].to_s(:long) + if checked_out? + if overdue? && diff[1] >= Time.zone.today + overdue_str = "\nReservation marked as not overdue." + elsif !overdue? && diff[1] < Time.zone.today + overdue_str = "\nReservation marked as overdue." end - when 'equipment_item_id' - name = 'Item' - old_val = diff[0] ? EquipmentItem.find(diff[0]).md_link : 'nil' - new_val = diff[1] ? EquipmentItem.find(diff[1]).md_link : 'nil' end - self.notes += "\n#{name} changed from " + old_val + ' to '\ - + new_val + '.' + overdue_str.to_s + when 'equipment_item_id' + name = 'Item' + old_val = diff[0] ? EquipmentItem.find(diff[0]).md_link : 'nil' + new_val = diff[1] ? EquipmentItem.find(diff[1]).md_link : 'nil' end + self.notes += "\n#{name} changed from " + old_val + ' to '\ + + new_val + '.' + overdue_str.to_s end - # rubocop:enable BlockNesting - - self.notes = self.notes.strip - self end + # rubocop:enable BlockNesting + + self.notes = self.notes.strip + self end # rubocop:disable PerceivedComplexity diff --git a/app/models/user.rb b/app/models/user.rb index ab3e7c0b7..2ca16efd9 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -93,11 +93,11 @@ def self.search_ldap(login) return nil if login.blank? return nil unless ENV['USE_LDAP'] - if ENV['CAS_AUTH'] - filter_param = Rails.application.secrets.ldap_login - else - filter_param = Rails.application.secrets.ldap_email - end + filter_param = if ENV['CAS_AUTH'] + Rails.application.secrets.ldap_login + else + Rails.application.secrets.ldap_email + end # store affiliation parameters aff_params = Rails.application.secrets.ldap_affiliation @@ -135,7 +135,7 @@ def self.search_ldap(login) # deal with affiliation out[:affiliation] = aff_params.map { |param| result[param.to_sym][0] } - .select { |s| s && s.length > 0 }.join(' ') + .select { |s| s && !s.empty? }.join(' ') # define username based on authentication method if ENV['CAS_AUTH'] @@ -154,11 +154,11 @@ def self.search_ldap(login) def self.select_options User.order('last_name ASC').all - .collect { |item| ["#{item.last_name}, #{item.first_name}", item.id] } + .collect { |item| ["#{item.last_name}, #{item.first_name}", item.id] } end def render_name - ENV['CAS_AUTH'] ? "#{name} #{username}" : "#{name}" + ENV['CAS_AUTH'] ? "#{name} #{username}" : name.to_s end # ---- Reservation methods ---- # diff --git a/app/queries/query_base.rb b/app/queries/query_base.rb index fdea62f00..a5a7274f5 100644 --- a/app/queries/query_base.rb +++ b/app/queries/query_base.rb @@ -4,10 +4,10 @@ class << self end def initialize - fail NotImplementedError + raise NotImplementedError end def call - fail NotImplementedError + raise NotImplementedError end end diff --git a/app/queries/reservations/future_query.rb b/app/queries/reservations/future_query.rb index 901bb9308..de3a2a6f0 100644 --- a/app/queries/reservations/future_query.rb +++ b/app/queries/reservations/future_query.rb @@ -2,7 +2,7 @@ module Reservations class FutureQuery < Reservations::ReservationsQueryBase def call @relation.where('start_date > ?', Time.zone.today.beginning_of_day) - .reserved + .reserved end end end diff --git a/app/views/layouts/_navbar.html.erb b/app/views/layouts/_navbar.html.erb index c7d7f6f04..6248a9c7a 100644 --- a/app/views/layouts/_navbar.html.erb +++ b/app/views/layouts/_navbar.html.erb @@ -133,7 +133,7 @@ diff --git a/config/deploy.rb b/config/deploy.rb index 965f082ef..520ab70b4 100644 --- a/config/deploy.rb +++ b/config/deploy.rb @@ -1,5 +1,5 @@ # config valid only for Capistrano 3.1 -lock '3.4.0' +lock '3.5.0' set :application, "reservations-#{ENV['IDENTIFIER']}" set :repo_url, 'https://github.com/YaleSTC/reservations.git' diff --git a/config/initializers/00_devise.rb b/config/initializers/00_devise.rb index 3a01c095a..8d3fcec08 100644 --- a/config/initializers/00_devise.rb +++ b/config/initializers/00_devise.rb @@ -10,11 +10,11 @@ # 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. - if AppConfig.table_exists? && !AppConfig.first.nil? - config.mailer_sender = AppConfig.first.admin_email - else - config.mailer_sender = 'admin@reservations.app' - end + config.mailer_sender = if AppConfig.table_exists? && !AppConfig.first.nil? + AppConfig.first.admin_email + else + config.mailer_sender = 'admin@reservations.app' + end # ==> ORM configuration # Load and configure the ORM. Supports :active_record (default) and diff --git a/config/initializers/authentication.rb b/config/initializers/authentication.rb index 72ad7deed..52bfd48a2 100644 --- a/config/initializers/authentication.rb +++ b/config/initializers/authentication.rb @@ -10,7 +10,7 @@ if ENV['CAS_AUTH'] && user && (user.username != user.cas_login) # if there are any users that don't have cas_logins, we can't use CAS if User.where(cas_login: ['', nil]).count > 0 - fail 'There are users missing their CAS logins, you cannot use CAS '\ + raise 'There are users missing their CAS logins, you cannot use CAS '\ 'authentication.' else User.update_all 'username = cas_login' diff --git a/config/initializers/days_of_the_week.rb b/config/initializers/days_of_the_week.rb index 8c8a5c493..a776403e2 100644 --- a/config/initializers/days_of_the_week.rb +++ b/config/initializers/days_of_the_week.rb @@ -11,6 +11,7 @@ def days_of_the_week_short def days_of_the_week_short_with_index days_of_the_week_short_with_index = [ [0, 'Sun'], [1, 'Mon'], [2, 'Tues'], [3, 'Wed'], [4, 'Thurs'], [5, 'Fri'], - [6, 'Sat']] + [6, 'Sat'] + ] end # rubocop:enable UselessAssignment diff --git a/config/initializers/rails_admin.rb b/config/initializers/rails_admin.rb index 1ef39bc6d..b4b5c7835 100644 --- a/config/initializers/rails_admin.rb +++ b/config/initializers/rails_admin.rb @@ -40,11 +40,7 @@ elsif request.delete? # DESTROY # optionally pass the force parameter - if @object.has_attribute?(:deleted_at) - opt = :force - else - opt = nil - end + opt = :force if @object.has_attribute?(:deleted_at) redirect_path = nil @auditing_adapter && diff --git a/db/seeds.rb b/db/seeds.rb index a7ea63730..067d592a5 100644 --- a/db/seeds.rb +++ b/db/seeds.rb @@ -71,7 +71,7 @@ IMAGES = Dir.glob(File.join(Rails.root, 'db', 'seed_images', '*')) # Progress bar format string -PROGRESS_STR = '%t: [%B] %P%% | %c / %C | %E' +PROGRESS_STR = '%t: [%B] %P%% | %c / %C | %E'.freeze #-------METHODS @@ -254,8 +254,8 @@ def mark_checked_in(res, checkout_length) res.checked_in = time_rand(res.checked_out, res.checked_out.next_week, checkout_length).to_datetime res.checkin_handler_id = User.where('role = ? OR role = ? OR role = ?', - 'checkout', 'admin', 'superuser' - ).all.sample.id + 'checkout', 'admin', 'superuser') + .all.sample.id end end @@ -268,8 +268,8 @@ def mark_checked_out(res) res.checked_out = res.start_date res.equipment_item = res.equipment_model.equipment_items.all.sample res.checkout_handler_id = User.where('role = ? OR role = ? OR role = ?', - 'checkout', 'admin', 'superuser' - ).all.sample.id + 'checkout', 'admin', 'superuser') + .all.sample.id end end @@ -318,7 +318,7 @@ def generate_reservation def generate_objs(method, obj, n) return if n == 0 progress = ProgressBar.create(format: PROGRESS_STR, total: n) - n.times.map do + n.times do progress.increment send(method) end @@ -352,13 +352,12 @@ def generate_objs(method, obj, n) if ENV['CAS_AUTH'] prompt_field(u, :cas_login) u.username = u.cas_login - u.save else u.username = u.email u.password = 'passw0rd' u.password_confirmation = u.password - u.save end + u.save else puts 'We need to create an account for you first.' \ 'Please enter the following info:' diff --git a/lib/activation_helper.rb b/lib/activation_helper.rb index a6aa42ad5..0a2a90ab0 100644 --- a/lib/activation_helper.rb +++ b/lib/activation_helper.rb @@ -6,7 +6,8 @@ def activate_parents(current_item) # Reactivate the current item's category and/or Equipment Model if # deactivated category = Category.find( - EquipmentModel.find(current_item.equipment_model_id).category_id) + EquipmentModel.find(current_item.equipment_model_id).category_id + ) category.revive if category.deleted_at em = EquipmentModel.find(current_item.equipment_model_id) if em.deleted_at diff --git a/lib/autocomplete.rb b/lib/autocomplete.rb index c31fcf2f9..c07343bb1 100644 --- a/lib/autocomplete.rb +++ b/lib/autocomplete.rb @@ -5,6 +5,7 @@ def get_autocomplete_items(parameters) 'nickname LIKE ? OR first_name LIKE ? OR last_name LIKE ? OR username '\ "LIKE ? OR CONCAT_WS(' ',first_name,last_name) LIKE ? OR "\ "CONCAT_WS(' ',nickname,last_name) LIKE ?", query, query, query, query, - query, query) + query, query + ) end end diff --git a/lib/capistrano/tasks/deployment_tasks.rake b/lib/capistrano/tasks/deployment_tasks.rake index f21564848..cdd6fc5ce 100644 --- a/lib/capistrano/tasks/deployment_tasks.rake +++ b/lib/capistrano/tasks/deployment_tasks.rake @@ -9,7 +9,7 @@ namespace :config do if test "[ -e #{fetch(:param_file)} ]" execute "cp -rf #{fetch(:param_file)} #{release_path}/.env" else - fail Capistrano::Error, 'You must specify a valid parameter file.' + raise Capistrano::Error, 'You must specify a valid parameter file.' end end end @@ -35,7 +35,7 @@ namespace :config do on roles(:app) do # check for Party Foul parameter in .env file env_lines = File.foreach("#{release_path}/.env") - if env_lines.grep(/PARTY_FOUL_TOKEN/).length > 0 + unless env_lines.grep(/PARTY_FOUL_TOKEN/).empty? # copy initializer execute "cp -rf #{release_path}/config/initializers/party_foul.rb"\ ".example #{release_path}/config/initializers/party_foul.rb" diff --git a/lib/csv_export.rb b/lib/csv_export.rb index 1f9313876..a469f5ab3 100644 --- a/lib/csv_export.rb +++ b/lib/csv_export.rb @@ -3,7 +3,7 @@ module CsvExport require 'zip' PROTECTED_COLS = %w(id encrypted_password reset_password_token - reset_password_sent_at) + reset_password_sent_at).freeze # generates a csv from the given model data # columns is optional; defaults to all columns except protected diff --git a/lib/csv_import.rb b/lib/csv_import.rb index 092c6c575..b0d3ddf29 100644 --- a/lib/csv_import.rb +++ b/lib/csv_import.rb @@ -47,15 +47,11 @@ def import_users(array_of_user_data, overwrite = false, user_type = 'normal') array_of_user_data.each do |user_data| user_data[:role] = user_type user_data[:csv_import] = true - if attempt_save_with_csv_data?(user_data) - next + next if attempt_save_with_csv_data?(user_data) + if ENV['USE_LDAP'] + attempt_save_with_ldap(user_data) else - if ENV['USE_LDAP'] - attempt_save_with_ldap(user_data) - else - @array_of_fail << [user_data, 'Invalid user parameters.'] - end - next + @array_of_fail << [user_data, 'Invalid user parameters.'] end end @@ -101,13 +97,10 @@ def attempt_save_with_csv_data?(user_data) user.update_attributes(user_data) # if the updated or new user is valid, save to database and add to array # of successful imports - if user.valid? - user.save - @array_of_success << user - return true - else - return false - end + return false unless user.valid? + user.save + @array_of_success << user + true end # attempts to save a user with ldap lookup @@ -127,24 +120,24 @@ def attempt_save_with_ldap(user_data) if user.valid? user.save @array_of_success << user - return else @array_of_fail << [user_data, user.errors.full_messages.to_sentence.capitalize\ + '.'] - return end + nil end # sets the user based on the overwrite parameter # rubocop:disable AccessorMethodName def set_or_create_user_for_import(user_data) # set the user and attempt to save with given data - if @overwrite && (User.where('username = ?', user_data[:username]).size > 0) - user = User.where('username = ?', user_data[:username]).first - else - user = User.new(user_data) - end + user = if @overwrite && + !User.where('username = ?', user_data[:username]).empty? + User.where('username = ?', user_data[:username]).first + else + User.new(user_data) + end user end # rubocop:enable AccessorMethodName diff --git a/lib/equipment_import.rb b/lib/equipment_import.rb index beb37af8f..d45e2396d 100644 --- a/lib/equipment_import.rb +++ b/lib/equipment_import.rb @@ -4,6 +4,7 @@ module EquipmentImport # separately for now and we can always refactor later. # import categories + # rubocop:disable MethodLength def import_cats(processed_cats, cat_overwrite = false) # let's make sure that we're consistent w/ scope on these variables array_of_success = [] # will contain category items @@ -13,11 +14,12 @@ def import_cats(processed_cats, cat_overwrite = false) cat_data[:csv_import] = true # pick or create new category based on overwrite parameter - if cat_overwrite && (Category.where('name = ?', cat_data[:name]).size > 0) - cat = Category.where('name = ?', cat_data[:name]).first - else - cat = Category.new(cat_data) - end + cat = if cat_overwrite && + !Category.where('name = ?', cat_data[:name]).empty? + Category.where('name = ?', cat_data[:name]).first + else + Category.new(cat_data) + end cat.update_attributes(cat_data) # if updated / new category is valid, save to database and add to array @@ -36,6 +38,7 @@ def import_cats(processed_cats, cat_overwrite = false) # return hash of status arrays { success: array_of_success, fail: array_of_fail } end + # rubocop:enable MethodLength # import models # rubocop:disable MethodLength, PerceivedComplexity @@ -53,8 +56,8 @@ def import_models(processed_models, model_overwrite = false) Category.where('name = ?', model_data[:category]).first # pick or create new model based on overwrite parameter - if model_overwrite && (EquipmentModel.where('name = ?', - model_data[:name]).size > 0) + if model_overwrite && !EquipmentModel.where('name = ?', + model_data[:name]).empty? model = EquipmentModel.where('name = ?', model_data[:name]).first else model = EquipmentModel.new(model_data) @@ -107,11 +110,11 @@ def import_items(processed_items) # rubocop:disable MethodLength array_of_success << item # else, store to array of fail with error messages else - if item_data[:equipment_model].nil? - error = 'Equipment Model not found.' - else - error = item.errors.full_messages.to_sentence.capitalize + '.' - end + error = if item_data[:equipment_model].nil? + 'Equipment Model not found.' + else + item.errors.full_messages.to_sentence.capitalize + '.' + end array_of_fail << [item_data, error] end end diff --git a/lib/extras/simple_form_extensions.rb b/lib/extras/simple_form_extensions.rb index 8e940c1cb..ee2e8575f 100644 --- a/lib/extras/simple_form_extensions.rb +++ b/lib/extras/simple_form_extensions.rb @@ -7,7 +7,8 @@ def submit_button(*args, &block) if cancel = options.delete(:cancel) submit(*args, &block) + ' ' + template.link_to( template.button_tag(I18n.t('simple_form.buttons.cancel'), - type: 'button', class: 'btn btn-default'), cancel) + type: 'button', class: 'btn btn-default'), cancel + ) else submit(*args, &block) end diff --git a/lib/rails_extensions.rb b/lib/rails_extensions.rb index 829d69b63..55a43d064 100644 --- a/lib/rails_extensions.rb +++ b/lib/rails_extensions.rb @@ -5,5 +5,5 @@ def intersection(other) return nil if max < other.begin || other.max < self.begin [self.begin, other.begin].max..[max, other.max].min end - alias_method :&, :intersection + alias & intersection end diff --git a/lib/tasks/delete_missed_reservations.rake b/lib/tasks/delete_missed_reservations.rake index e2d64a041..232379cbf 100644 --- a/lib/tasks/delete_missed_reservations.rake +++ b/lib/tasks/delete_missed_reservations.rake @@ -10,7 +10,8 @@ def delete_missed_reservations return if AppConfig.first.blank? || AppConfig.first.res_exp_time.blank? time = AppConfig.first.res_exp_time missed_reservations = Reservation.where( - 'start_date < ?', Time.zone.today - time.days).missed + 'start_date < ?', Time.zone.today - time.days + ).missed Rails.logger.info "Found #{missed_reservations.size} reservations" missed_reservations.each do |missed_reservation| diff --git a/lib/tasks/flag_missed.rake b/lib/tasks/flag_missed.rake index 70a0d7d84..615c17383 100644 --- a/lib/tasks/flag_missed.rake +++ b/lib/tasks/flag_missed.rake @@ -1,7 +1,8 @@ desc 'Flag not checked out reservations starting yesterday as missed' task flag_missed: :environment do new_missed = Reservation.where( - 'start_date <= ?', Time.zone.today - 1.day).reserved + 'start_date <= ?', Time.zone.today - 1.day + ).reserved Rails.logger.info "Found #{new_missed.size} newly missed reservations" diff --git a/lib/tasks/setup_application.rake b/lib/tasks/setup_application.rake index 6a5447ce3..e066fa53d 100644 --- a/lib/tasks/setup_application.rake +++ b/lib/tasks/setup_application.rake @@ -100,16 +100,18 @@ namespace :app do upcoming_checkin_email_body = File.read(File.join(DEFAULT_MSGS, 'upcoming_checkin_email')) - upcoming_checkout_email_body = File.read(File.join(DEFAULT_MSGS, - 'upcoming_checkout_email' - )) + upcoming_checkout_email_body = File.read( + File.join(DEFAULT_MSGS, + 'upcoming_checkout_email') + ) overdue_checkin_email_body = File.read(File.join(DEFAULT_MSGS, 'overdue_email')) deleted_missed_reservation_email_body = File.read(File.join( DEFAULT_MSGS, - 'deleted_missed_email')) + 'deleted_missed_email' + )) request_text = 'The following equipment cannot be reserved because of admin '\ diff --git a/spec/controllers/app_configs_controller_spec.rb b/spec/controllers/app_configs_controller_spec.rb index 33fca2376..c6af22518 100644 --- a/spec/controllers/app_configs_controller_spec.rb +++ b/spec/controllers/app_configs_controller_spec.rb @@ -62,11 +62,12 @@ before(:each) do sign_in FactoryGirl.create(:admin) # Except paperclip attributes that trigger MassAssignment errors - @params = FactoryGirl.attributes_for(:app_config) - .reject do |k, _v| - [:favicon_file_name, :favicon_content_type, - :favicon_file_size, :favicon_updated_at].include? k - end + @params = + FactoryGirl.attributes_for(:app_config) + .reject do |k, _v| + [:favicon_file_name, :favicon_content_type, + :favicon_file_size, :favicon_updated_at].include? k + end end it 'assigns current configuration to @app_config' do @@ -116,11 +117,12 @@ # TODO: Simulate update_attributes failure before(:each) do # Except paperclip attributes that trigger MassAssignment errors - @params = FactoryGirl.attributes_for(:app_config, site_title: nil) - .reject do |k, _v| - [:favicon_file_name, :favicon_content_type, - :favicon_file_size, :favicon_updated_at].include? k - end + @params = + FactoryGirl.attributes_for(:app_config, site_title: nil) + .reject do |k, _v| + [:favicon_file_name, :favicon_content_type, + :favicon_file_size, :favicon_updated_at].include? k + end post :update, @params end # it { should render_template(:edit) } diff --git a/spec/controllers/blackouts_controller_spec.rb b/spec/controllers/blackouts_controller_spec.rb index bb58add01..82fa4aee2 100644 --- a/spec/controllers/blackouts_controller_spec.rb +++ b/spec/controllers/blackouts_controller_spec.rb @@ -104,7 +104,8 @@ @res = FactoryGirl.create(:valid_reservation, due_date: Time.zone.today + 1.day) @attributes = FactoryGirl.attributes_for( - :blackout, days: ["#{(Time.zone.today + 1.day).wday}"]) + :blackout, days: [(Time.zone.today + 1.day).wday.to_s] + ) post :create_recurring, blackout: @attributes end diff --git a/spec/controllers/contact_controller_spec.rb b/spec/controllers/contact_controller_spec.rb index 93cf2fd4e..b457e18e9 100644 --- a/spec/controllers/contact_controller_spec.rb +++ b/spec/controllers/contact_controller_spec.rb @@ -49,7 +49,7 @@ context 'with contact e-mail set' do before do AppConfig.first - .update_attributes(contact_link_location: 'contact@example.com') + .update_attributes(contact_link_location: 'contact@example.com') post :create, message: FactoryGirl.attributes_for(:message) end diff --git a/spec/controllers/equipment_items_controller_spec.rb b/spec/controllers/equipment_items_controller_spec.rb index 2a4c39fbc..d355333bd 100644 --- a/spec/controllers/equipment_items_controller_spec.rb +++ b/spec/controllers/equipment_items_controller_spec.rb @@ -178,7 +178,8 @@ it 'should save item with notes' do expect do post :create, equipment_item: FactoryGirl.attributes_for( - :equipment_item, equipment_model_id: item.equipment_model.id) + :equipment_item, equipment_model_id: item.equipment_model.id + ) end.to change(EquipmentItem, :count).by(1) expect(EquipmentItem.last.notes).not_to be_nil expect(EquipmentItem.last.notes).not_to be('') @@ -189,14 +190,16 @@ context 'without valid attributes' do before do post :create, equipment_item: FactoryGirl.attributes_for( - :equipment_item, name: nil) + :equipment_item, name: nil + ) end it { is_expected.not_to set_flash } it { is_expected.to render_template(:new) } it 'should not save' do expect do post :create, equipment_item: FactoryGirl.attributes_for( - :equipment_item, name: nil) + :equipment_item, name: nil + ) end.not_to change(EquipmentItem, :count) end it { is_expected.to render_template(:new) } diff --git a/spec/controllers/equipment_models_controller_spec.rb b/spec/controllers/equipment_models_controller_spec.rb index e1d76fd65..e76d5242c 100644 --- a/spec/controllers/equipment_models_controller_spec.rb +++ b/spec/controllers/equipment_models_controller_spec.rb @@ -147,13 +147,13 @@ FactoryGirl.create(:equipment_item, equipment_model: model) FactoryGirl.create(:missed_reservation, equipment_model: model) res_starting_today = - FactoryGirl.create(:reservation, equipment_model: model, - start_date: Time.zone.today, - due_date: Time.zone.today + 2.days) + FactoryGirl.create(:reservation, equipment_model: model, + start_date: Time.zone.today, + due_date: Time.zone.today + 2.days) res_starting_this_week = - FactoryGirl.create(:reservation, equipment_model: model, - start_date: Time.zone.today + 2.days, - due_date: Time.zone.today + 4.days) + FactoryGirl.create(:reservation, equipment_model: model, + start_date: Time.zone.today + 2.days, + due_date: Time.zone.today + 4.days) FactoryGirl.create(:reservation, equipment_model: model, start_date: Time.zone.today + 10.days, @@ -334,12 +334,14 @@ context 'with valid attributes' do before do post :create, equipment_model: FactoryGirl.attributes_for( - :equipment_model, category_id: model.category) + :equipment_model, category_id: model.category + ) end it 'should save model' do expect do post :create, equipment_model: FactoryGirl.attributes_for( - :equipment_model, category_id: model.category) + :equipment_model, category_id: model.category + ) end.to change(EquipmentModel, :count).by(1) end it { is_expected.to set_flash } @@ -349,14 +351,16 @@ context 'without valid attributes' do before do post :create, equipment_model: FactoryGirl.attributes_for( - :equipment_model, name: nil) + :equipment_model, name: nil + ) end it { is_expected.to set_flash } it { is_expected.to render_template(:new) } it 'should not save' do expect do post :create, equipment_model: FactoryGirl.attributes_for( - :equipment_model, name: nil) + :equipment_model, name: nil + ) end.not_to change(EquipmentModel, :count) end it { is_expected.to render_template(:new) } diff --git a/spec/controllers/reservations_controller_spec.rb b/spec/controllers/reservations_controller_spec.rb index caeab6b01..7b9a2e2cf 100644 --- a/spec/controllers/reservations_controller_spec.rb +++ b/spec/controllers/reservations_controller_spec.rb @@ -496,7 +496,7 @@ it 'assigns @option_array with the correct contents' do expect(assigns(:option_array)).to\ eq @reservation.equipment_model.equipment_items - .collect { |e| [e.name, e.id] } + .collect { |e| [e.name, e.id] } end it { is_expected.to render_template(:edit) } end @@ -1605,7 +1605,8 @@ context 'successfully emails' do before do @reservation.update_attributes( - FactoryGirl.attributes_for(:checked_out_reservation)) + FactoryGirl.attributes_for(:checked_out_reservation) + ) get :send_receipt, id: @reservation.id end it { is_expected.to redirect_to(@reservation) } @@ -1615,7 +1616,8 @@ context 'fails to send email' do before do allow(UserMailer).to receive_message_chain( - 'reservation_status_update.deliver_now').and_return(false) + 'reservation_status_update.deliver_now' + ).and_return(false) get :send_receipt, id: @reservation.id end it { is_expected.to redirect_to(@reservation) } @@ -1632,7 +1634,7 @@ it 'should assign all current requests except itself' do expect(assigns(:all_current_requests_by_user)).to\ eq @reservation.reserver.reservations.requested - .reject { |r| r.id == @reservation.id } + .reject { |r| r.id == @reservation.id } end it 'should assign errors' do expect(assigns(:errors)).to eq assigns(:reservation).validate diff --git a/spec/features/eq_model_spec.rb b/spec/features/eq_model_spec.rb index 2f5ccc3a6..01d15b4d3 100644 --- a/spec/features/eq_model_spec.rb +++ b/spec/features/eq_model_spec.rb @@ -37,13 +37,13 @@ page.all(:css, 'section#pending_reservations .giant-numbers div') expect(num_divs[0].text).to eq('1') expect(num_divs[1].text).to eq('2') - expect(page).to have_link "#{@today_res.id}", + expect(page).to have_link @today_res.id.to_s, href: reservation_path(@today_res) - expect(page).to have_link "#{@pending_res_1.id}", + expect(page).to have_link @pending_res_1.id.to_s, href: reservation_path(@pending_res_1) - expect(page).to have_link "#{@pending_res_2.id}", + expect(page).to have_link @pending_res_2.id.to_s, href: reservation_path(@pending_res_2) - expect(page).not_to have_link "#{@far_future_res.id}", + expect(page).not_to have_link @far_future_res.id.to_s, href: reservation_path(@far_future_res) end end diff --git a/spec/features/equipment_model_calendar_spec.rb b/spec/features/equipment_model_calendar_spec.rb index 683f88b71..138c42711 100644 --- a/spec/features/equipment_model_calendar_spec.rb +++ b/spec/features/equipment_model_calendar_spec.rb @@ -76,7 +76,7 @@ end def create_res_in_current_month(count = 1) - fail ArgumentError if count > 28 + raise ArgumentError if count > 28 day0 = Time.zone.today.beginning_of_month # to ensure it's in this month (1..count).each do |i| # make sure it's a 1-day reservation so there's only a single cell diff --git a/spec/features/guest_spec.rb b/spec/features/guest_spec.rb index 0a653dfcc..a4bab41eb 100644 --- a/spec/features/guest_spec.rb +++ b/spec/features/guest_spec.rb @@ -88,7 +88,8 @@ it 'can add items to cart' do expect(page.find(:css, '#list_items_in_cart')).to have_link( @eq_model.name, - href: equipment_model_path(@eq_model)) + href: equipment_model_path(@eq_model) + ) end it 'can remove items from cart' do @@ -99,7 +100,8 @@ visit '/' expect(page.find(:css, '#list_items_in_cart')).not_to have_link( @eq_model.name, - href: equipment_model_path(@eq_model)) + href: equipment_model_path(@eq_model) + ) end it 'can change item quantities' do diff --git a/spec/features/rails_admin_spec.rb b/spec/features/rails_admin_spec.rb index 5ff62f5d7..d622785d8 100644 --- a/spec/features/rails_admin_spec.rb +++ b/spec/features/rails_admin_spec.rb @@ -3,7 +3,7 @@ describe 'Active Admin', type: :feature do VALID_MODELS = [:announcement, :app_config, :blackout, :category, :checkin_procedure, :checkout_procedure, :equipment_item, - :equipment_model, :requirement, :reservation, :user] + :equipment_model, :requirement, :reservation, :user].freeze context 'as superuser' do before { sign_in_as_user(@superuser) } diff --git a/spec/features/reservations_spec.rb b/spec/features/reservations_spec.rb index 14f23a898..49bfa8b38 100644 --- a/spec/features/reservations_spec.rb +++ b/spec/features/reservations_spec.rb @@ -191,7 +191,7 @@ equipment_model: @eq_model @user.update_attributes(role: 'banned') visit manage_reservations_for_user_path(@user) - check "#{@checked_out_res.equipment_item.name}" + check @checked_out_res.equipment_item.name.to_s click_button 'Check-In Equipment' expect(page).to have_content 'Check-In Receipt' @@ -206,7 +206,7 @@ @user.update_attributes(role: 'banned') # check out visit manage_reservations_for_user_path(@user) - select "#{@eq_model.equipment_items.first.name}", from: 'Equipment Item' + select @eq_model.equipment_items.first.name.to_s, from: 'Equipment Item' click_button 'Check-Out Equipment' expect(page).to have_content 'Banned users cannot check out equipment' end @@ -245,7 +245,7 @@ it 'checks out and checks in successfully' do # check out visit manage_reservations_for_user_path(@user) - select "#{@eq_model.equipment_items.first.name}", from: 'Equipment Item' + select @eq_model.equipment_items.first.name.to_s, from: 'Equipment Item' click_button 'Check-Out Equipment' expect(page).to have_content 'Check-Out Receipt' @@ -264,7 +264,7 @@ # check in visit manage_reservations_for_user_path(@user) - check "#{@res.equipment_item.name}" + check @res.equipment_item.name.to_s click_button 'Check-In Equipment' expect(page).to have_content 'Check-In Receipt' @@ -282,7 +282,7 @@ it 'does not update equipment items for missing ToS checkbox' do @user.update_attributes(terms_of_service_accepted: false) visit manage_reservations_for_user_path(@user) - select "#{@eq_model.equipment_items.first.name}", from: 'Equipment Item' + select @eq_model.equipment_items.first.name.to_s, from: 'Equipment Item' click_button 'Check-Out Equipment' expect(page).to have_content 'You must confirm that the user accepts '\ @@ -298,9 +298,9 @@ reserver: @user, equipment_model: @eq_model visit manage_reservations_for_user_path(@user) - select "#{@eq_model.equipment_items.first.name}", + select @eq_model.equipment_items.first.name.to_s, from: "reservations_#{@res.id}_equipment_item_id" - select "#{@eq_model.equipment_items.first.name}", + select @eq_model.equipment_items.first.name.to_s, from: "reservations_#{@res2.id}_equipment_item_id" click_button 'Check-Out Equipment' @@ -362,7 +362,7 @@ it 'fails when the box isn\'t checked off' do # skip the checkbox - select "#{@eq_model.equipment_items.first.name}", + select @eq_model.equipment_items.first.name.to_s, from: 'Equipment Item' click_button 'Check-Out Equipment' @@ -374,7 +374,7 @@ it 'succeeds when the box is checked off' do check 'terms_of_service_accepted' - select "#{@eq_model.equipment_items.first.name}", + select @eq_model.equipment_items.first.name.to_s, from: 'Equipment Item' click_button 'Check-Out Equipment' @@ -569,7 +569,7 @@ avail_quantity = @eq_model.num_available(Time.zone.today, Time.zone.today + 1.day) fill_in "quantity_field_#{@eq_model.id}", # edit and submit - with: (avail_quantity) + with: avail_quantity quantity_forms[0].submit_form! # loading right page @@ -655,13 +655,14 @@ # valid change due_date = Time.zone.today + 2.days fill_in 'cart_due_date_cart', with: due_date - find(:xpath, "//input[@id='date_end_alt']").set due_date + find(:xpath, "//input[@id='date_end_alt']", visible: :all).set due_date find('#dates_form').submit_form! # loads right page expect(page).to have_content 'Confirm Reservation' expect(page).not_to have_content 'Confirm Reservation Request' # has correct date - expect(page).to have_selector("input[value='#{due_date}']") + expect(page).to have_selector("input[value='#{due_date}']", + visible: :all) end end @@ -677,13 +678,15 @@ bad_due_date = Time.zone.today + (@eq_model.maximum_checkout_length + 1).days fill_in 'cart_due_date_cart', with: bad_due_date - find(:xpath, "//input[@id='date_end_alt']").set bad_due_date + find(:xpath, "//input[@id='date_end_alt']", visible: :all) + .set bad_due_date find('#dates_form').submit_form! # loads right page expect(page).to have_content 'Confirm Reservation Request' expect(page).to have_content AppConfig.get(:request_text) # has altered date - expect(page).to have_selector("input[value='#{bad_due_date}']") + expect(page).to have_selector("input[value='#{bad_due_date}']", + visible: :all) end end @@ -699,18 +702,20 @@ bad_due_date = Time.zone.today + (@eq_model.maximum_checkout_length + 1).days fill_in 'cart_due_date_cart', with: bad_due_date - find(:xpath, "//input[@id='date_end_alt']").set bad_due_date + find(:xpath, "//input[@id='date_end_alt']", visible: :all) + .set bad_due_date find('#dates_form').submit_form! # changes back to valid date due_date = Time.zone.today + 1.day fill_in 'cart_due_date_cart', with: due_date - find(:xpath, "//input[@id='date_end_alt']").set due_date + find(:xpath, "//input[@id='date_end_alt']", visible: :all).set due_date find('#dates_form').submit_form! # redirect to right page expect(page).to have_content 'Confirm Reservation' expect(page).not_to have_content 'Confirm Reservation Request' # has correct dates - expect(page).to have_selector("input[value='#{due_date}']") + expect(page).to have_selector("input[value='#{due_date}']", + visible: :all) end end @@ -766,7 +771,7 @@ # change cart to have invalid properties, and check if it loads request quantity_forms = page.all('#quantity_form') fill_in "quantity_field_#{@eq_model.id}", - with: (@eq_model.max_per_user) + with: @eq_model.max_per_user quantity_forms[0].submit_form! expect(page).to have_content 'Confirm Reservation' end diff --git a/spec/features/users_spec.rb b/spec/features/users_spec.rb index 9f44cf0d8..0403023d0 100644 --- a/spec/features/users_spec.rb +++ b/spec/features/users_spec.rb @@ -5,7 +5,7 @@ shared_examples 'can ban other users' do it do visit user_path(@user) - expect(page).to have_link 'Ban', ban_user_path(@user) + expect(page).to have_link 'Ban', href: ban_user_path(@user) click_link 'Ban' expect { @user.reload }.to change { @user.role }.to('banned') end diff --git a/spec/lib/csv_export_spec.rb b/spec/lib/csv_export_spec.rb index a0ceac3b2..383c3cb48 100644 --- a/spec/lib/csv_export_spec.rb +++ b/spec/lib/csv_export_spec.rb @@ -4,9 +4,9 @@ describe CsvExport do before(:all) { FactoryGirl.create(:app_config) } - MODELS = [:user, :category, :equipment_model, :equipment_item] + MODELS = [:user, :category, :equipment_model, :equipment_item].freeze PROTECTED_COLS = %w(id encrypted_password reset_password_token - reset_password_sent_at) + reset_password_sent_at).freeze shared_examples 'builds a csv' do |model| let(:csv) do @@ -19,7 +19,8 @@ it 'has the appropriate columns' do expect(csv.first.split(',')).to eq( - FactoryGirl.build(model).attributes.keys - PROTECTED_COLS) + FactoryGirl.build(model).attributes.keys - PROTECTED_COLS + ) end it "doesn't include protected columns" do diff --git a/spec/lib/tasks/email_checkin_reminder_rake_spec.rb b/spec/lib/tasks/email_checkin_reminder_rake_spec.rb index 07bc83353..752cdb785 100644 --- a/spec/lib/tasks/email_checkin_reminder_rake_spec.rb +++ b/spec/lib/tasks/email_checkin_reminder_rake_spec.rb @@ -18,24 +18,28 @@ AppConfig.first.update_attributes(upcoming_checkin_email_active: true) expect(AppConfig.first.upcoming_checkin_email_active).to eq(true) expect { subject.invoke }.to( - change { ActionMailer::Base.deliveries.count }.by(1)) + change { ActionMailer::Base.deliveries.count }.by(1) + ) end it "doesn't send emails for non-checked-out reservations that end today" do @upcoming.update_attributes( FactoryGirl.attributes_for(:valid_reservation, start_date: Time.zone.today - 1.day, - due_date: Time.zone.today)) + due_date: Time.zone.today) + ) AppConfig.first.update_attributes(upcoming_checkin_email_active: true) expect(AppConfig.first.upcoming_checkin_email_active).to eq(true) expect(@upcoming.reserved?).to be_truthy expect { subject.invoke }.not_to( - change { ActionMailer::Base.deliveries.count }) + change { ActionMailer::Base.deliveries.count } + ) end it "doesn't send emails when upcoming_checkin_email_active is false" do AppConfig.first.update_attributes(upcoming_checkin_email_active: false) expect(AppConfig.first.upcoming_checkin_email_active).to eq(false) expect { subject.invoke }.not_to( - change { ActionMailer::Base.deliveries.count }) + change { ActionMailer::Base.deliveries.count } + ) end end diff --git a/spec/lib/tasks/email_checkout_reminder_rake_spec.rb b/spec/lib/tasks/email_checkout_reminder_rake_spec.rb index c4f1b013b..a2ff30739 100644 --- a/spec/lib/tasks/email_checkout_reminder_rake_spec.rb +++ b/spec/lib/tasks/email_checkout_reminder_rake_spec.rb @@ -19,13 +19,15 @@ AppConfig.first.update_attributes(upcoming_checkout_email_active: true) expect(AppConfig.first.upcoming_checkout_email_active).to eq(true) expect { subject.invoke }.to( - change { ActionMailer::Base.deliveries.count }.by(1)) + change { ActionMailer::Base.deliveries.count }.by(1) + ) end it "doesn't send emails when upcoming_checkout_email_active is false" do AppConfig.first.update_attributes(upcoming_checkout_email_active: false) expect(AppConfig.first.upcoming_checkout_email_active).to eq(false) expect { subject.invoke }.not_to( - change { ActionMailer::Base.deliveries.count }) + change { ActionMailer::Base.deliveries.count } + ) end end diff --git a/spec/lib/tasks/email_missed_reservations_rake_spec.rb b/spec/lib/tasks/email_missed_reservations_rake_spec.rb index 7722f8e1f..52d6abc6c 100644 --- a/spec/lib/tasks/email_missed_reservations_rake_spec.rb +++ b/spec/lib/tasks/email_missed_reservations_rake_spec.rb @@ -16,19 +16,22 @@ it 'updates flags after email is sent' do expect { subject.invoke }.to( change { Reservation.find(@missed.id).flagged?(:missed_email_sent) } - .from(false).to(true)) + .from(false).to(true) + ) end it 'sends emails for reservations that were missed' do expect(@missed.missed?).to be_truthy expect { subject.invoke }.to( - change { ActionMailer::Base.deliveries.count }.by(1)) + change { ActionMailer::Base.deliveries.count }.by(1) + ) end it "doesn't send emails if the missed_email_sent flag is set" do @missed.flag(:missed_email_sent) @missed.save! expect { subject.invoke }.to_not( - change { ActionMailer::Base.deliveries.count }) + change { ActionMailer::Base.deliveries.count } + ) end end diff --git a/spec/lib/tasks/email_notes_to_admins_rake_spec.rb b/spec/lib/tasks/email_notes_to_admins_rake_spec.rb index 3a4402677..97a4b56ae 100644 --- a/spec/lib/tasks/email_notes_to_admins_rake_spec.rb +++ b/spec/lib/tasks/email_notes_to_admins_rake_spec.rb @@ -6,7 +6,7 @@ before(:all) { FactoryGirl.create(:app_config) } - STATUSES = [:checked_out_reservation, :checked_in_reservation] + STATUSES = [:checked_out_reservation, :checked_in_reservation].freeze shared_examples 'sends appropriate emails' do |status| let(:notes) do @@ -23,7 +23,8 @@ it "doesn't sends emails for reservations without unsent notes" do expect(notes.notes_unsent).to be_falsey expect { subject.invoke }.to_not( - change { ActionMailer::Base.deliveries.count }) + change { ActionMailer::Base.deliveries.count } + ) end it 'sends emails for appropriate reservations with unsent notes' do @@ -31,7 +32,8 @@ expect(notes.notes_unsent).to be_truthy notes.save!(validate: false) expect { subject.invoke }.to( - change { ActionMailer::Base.deliveries.count }.by(1)) + change { ActionMailer::Base.deliveries.count }.by(1) + ) end end diff --git a/spec/lib/tasks/email_overdue_reminder_rake_spec.rb b/spec/lib/tasks/email_overdue_reminder_rake_spec.rb index ea27b894b..6bfe49ff0 100644 --- a/spec/lib/tasks/email_overdue_reminder_rake_spec.rb +++ b/spec/lib/tasks/email_overdue_reminder_rake_spec.rb @@ -16,13 +16,15 @@ AppConfig.first.update_attributes(overdue_checkin_email_active: true) expect(AppConfig.first.overdue_checkin_email_active).to eq(true) expect { subject.invoke }.to( - change { ActionMailer::Base.deliveries.count }.by(1)) + change { ActionMailer::Base.deliveries.count }.by(1) + ) end it "doesn't send emails when overdue_checkin_email_active is false" do AppConfig.first.update_attributes(overdue_checkin_email_active: false) expect(AppConfig.first.overdue_checkin_email_active).to eq(false) expect { subject.invoke }.not_to( - change { ActionMailer::Base.deliveries.count }) + change { ActionMailer::Base.deliveries.count } + ) end end diff --git a/spec/lib/tasks/flag_rake_spec.rb b/spec/lib/tasks/flag_rake_spec.rb index 321e02220..8f57921c4 100644 --- a/spec/lib/tasks/flag_rake_spec.rb +++ b/spec/lib/tasks/flag_rake_spec.rb @@ -10,15 +10,18 @@ it 'flags reservations due yesterday as overdue' do @res.update_attributes( - FactoryGirl.attributes_for(:overdue_reservation)) + FactoryGirl.attributes_for(:overdue_reservation) + ) @res.update_columns(overdue: false) expect { subject.invoke }.to( - change { Reservation.find(@res.id).overdue }.from(false).to(true)) + change { Reservation.find(@res.id).overdue }.from(false).to(true) + ) end it "doesn't flag not overdue reservations" do expect { subject.invoke }.not_to( - change { Reservation.find(@res.id).overdue }) + change { Reservation.find(@res.id).overdue } + ) end it 'flags past overdue reservations' do @@ -44,7 +47,8 @@ @res.update_attributes(start_date: Time.zone.yesterday, due_date: Time.zone.today) expect { subject.invoke }.to( - change { Reservation.find(@res.id).status }.from('reserved').to('missed')) + change { Reservation.find(@res.id).status }.from('reserved').to('missed') + ) end it "doesn't flag not missed reservations" do @@ -53,7 +57,8 @@ it "doesn't flag checked out reservations" do @res.update_attributes( - FactoryGirl.attributes_for(:checked_out_reservation)) + FactoryGirl.attributes_for(:checked_out_reservation) + ) expect { subject.invoke }.not_to change { Reservation.find(@res.id).status } end end @@ -70,14 +75,15 @@ @res.update_attributes(start_date: Time.zone.yesterday, due_date: Time.zone.today) expect { subject.invoke }.to( - change { Reservation.find(@res.id).status }.from( - 'requested').to('denied')) + change { Reservation.find(@res.id).status }.from('requested').to('denied') + ) expect(Reservation.find(@res.id).flagged?(:expired)).to be_truthy end it "doesn't flag missed non-requests" do @res.update_attributes( - FactoryGirl.attributes_for(:missed_reservation)) + FactoryGirl.attributes_for(:missed_reservation) + ) expect { subject.invoke }.not_to change { Reservation.find(@res.id).status } end @@ -92,6 +98,7 @@ due_date: Time.zone.today) @no_email = FactoryGirl.create(:missed_reservation) expect { subject.invoke }.to( - change { ActionMailer::Base.deliveries.count }.by(1)) + change { ActionMailer::Base.deliveries.count }.by(1) + ) end end diff --git a/spec/mailers/user_mailer_spec.rb b/spec/mailers/user_mailer_spec.rb index 1e71686b6..77b53eebe 100644 --- a/spec/mailers/user_mailer_spec.rb +++ b/spec/mailers/user_mailer_spec.rb @@ -55,7 +55,7 @@ end it 'logs if the env is set' do - env_wrapper('LOG_EMAILS' => '1') do + env_wrapper('LOG_EMAILS' => '1') do expect(Rails.logger).to receive(:info).with(/Sent/).once # force a request email; there is not an email for a basic reservation @mail = UserMailer.reservation_status_update(@res, @@ -76,7 +76,8 @@ expect(@res.denied?).to be_truthy @mail = UserMailer.reservation_status_update(@res).deliver_now expect(@mail.subject).to eq( - "[Reservations] #{@res.equipment_model.name} Denied") + "[Reservations] #{@res.equipment_model.name} Denied" + ) end it 'sends approved request notifications' do @@ -84,7 +85,8 @@ flags: Reservation::FLAGS[:request]) @mail = UserMailer.reservation_status_update(@res).deliver_now expect(@mail.subject).to eq( - "[Reservations] #{@res.equipment_model.name} Request Approved") + "[Reservations] #{@res.equipment_model.name} Request Approved" + ) end it 'sends approved request notifications for requests starting today' do @@ -96,7 +98,8 @@ UserMailer.reservation_status_update(@res, 'request approved').deliver_now expect(@mail.subject).to eq( - "[Reservations] #{@res.equipment_model.name} Request Approved") + "[Reservations] #{@res.equipment_model.name} Request Approved" + ) end it 'sends expired request notifications' do @@ -105,35 +108,42 @@ Reservation::FLAGS[:expired])) @mail = UserMailer.reservation_status_update(@res).deliver_now expect(@mail.subject).to eq( - "[Reservations] #{@res.equipment_model.name} Request Expired") + "[Reservations] #{@res.equipment_model.name} Request Expired" + ) end it 'sends reminders to check-out' do @res.update_attributes( - FactoryGirl.attributes_for(:upcoming_reservation)) + FactoryGirl.attributes_for(:upcoming_reservation) + ) @mail = UserMailer.reservation_status_update(@res).deliver_now expect(@mail.subject).to eq( - "[Reservations] #{@res.equipment_model.name} Starts Today") + "[Reservations] #{@res.equipment_model.name} Starts Today" + ) end it 'sends missed notifications' do @res.update_attributes(FactoryGirl.attributes_for(:missed_reservation)) @mail = UserMailer.reservation_status_update(@res).deliver_now expect(@mail.subject).to eq( - "[Reservations] #{@res.equipment_model.name} Missed") + "[Reservations] #{@res.equipment_model.name} Missed" + ) end it 'sends check-out receipts' do @res.update_attributes( - FactoryGirl.attributes_for(:checked_out_reservation)) + FactoryGirl.attributes_for(:checked_out_reservation) + ) @mail = UserMailer.reservation_status_update(@res).deliver_now expect(@mail.subject).to eq( - "[Reservations] #{@res.equipment_model.name} Checked Out") + "[Reservations] #{@res.equipment_model.name} Checked Out" + ) end it "doesn't sends check-out receipts if not checked out" do @res.update_attributes( - FactoryGirl.attributes_for(:valid_reservation)) + FactoryGirl.attributes_for(:valid_reservation) + ) expect(@res.checked_out).to be_nil @mail = UserMailer.reservation_status_update(@res, 'checked out').deliver_now @@ -143,11 +153,13 @@ it 'sends check-out receipts for reservations due today' do @res.update_attributes( FactoryGirl.attributes_for(:checked_out_reservation, - due_date: Time.zone.today)) + due_date: Time.zone.today) + ) @mail = UserMailer.reservation_status_update(@res, 'checked out').deliver_now expect(@mail.subject).to eq( - "[Reservations] #{@res.equipment_model.name} Checked Out") + "[Reservations] #{@res.equipment_model.name} Checked Out" + ) end it 'sends check-out receipts for overdue reservations' do @@ -155,31 +167,37 @@ @mail = UserMailer.reservation_status_update(@res, 'checked out').deliver_now expect(@mail.subject).to eq( - "[Reservations] #{@res.equipment_model.name} Checked Out") + "[Reservations] #{@res.equipment_model.name} Checked Out" + ) end it 'sends reminders to check-in' do @res.update_attributes( FactoryGirl.attributes_for(:checked_out_reservation, - due_date: Time.zone.today)) + due_date: Time.zone.today) + ) @mail = UserMailer.reservation_status_update(@res).deliver_now expect(@mail.subject).to eq( - "[Reservations] #{@res.equipment_model.name} Due Today") + "[Reservations] #{@res.equipment_model.name} Due Today" + ) end it 'sends check-in receipts' do @res.update_attributes( - FactoryGirl.attributes_for(:checked_in_reservation)) + FactoryGirl.attributes_for(:checked_in_reservation) + ) @mail = UserMailer.reservation_status_update(@res).deliver_now expect(@mail.subject).to eq( - "[Reservations] #{@res.equipment_model.name} Returned") + "[Reservations] #{@res.equipment_model.name} Returned" + ) end it 'sends overdue equipment reminders' do @res.update_attributes(FactoryGirl.attributes_for(:overdue_reservation)) @mail = UserMailer.reservation_status_update(@res).deliver_now expect(@mail.subject).to eq( - "[Reservations] #{@res.equipment_model.name} Overdue") + "[Reservations] #{@res.equipment_model.name} Overdue" + ) end it 'sends fine emails for overdue equipment' do @@ -187,7 +205,8 @@ :overdue)) @mail = UserMailer.reservation_status_update(@res).deliver_now expect(@mail.subject).to eq( - "[Reservations] #{@res.equipment_model.name} Returned Overdue") + "[Reservations] #{@res.equipment_model.name} Returned Overdue" + ) end it "doesn't send fine emails when there is no late fee" do diff --git a/spec/models/cart_spec.rb b/spec/models/cart_spec.rb index 2178fa168..1ca9791ce 100644 --- a/spec/models/cart_spec.rb +++ b/spec/models/cart_spec.rb @@ -154,7 +154,7 @@ FactoryGirl.build(:reservation, equipment_model: @em, start_date: @start_date, due_date: @due_date) - .save(validate: false) + .save(validate: false) expect(@cart.check_availability).not_to eq([]) expect(@cart.validate_all).not_to eq([]) @@ -165,7 +165,7 @@ equipment_model: @em, start_date: @start_date, due_date: @due_date, equipment_item: @em.equipment_items.first) - .save(validate: false) + .save(validate: false) expect(@cart.check_availability).not_to eq([]) expect(@cart.validate_all).not_to eq([]) diff --git a/spec/models/equipment_model_spec.rb b/spec/models/equipment_model_spec.rb index e738a46ad..8de3d6a0d 100644 --- a/spec/models/equipment_model_spec.rb +++ b/spec/models/equipment_model_spec.rb @@ -160,14 +160,16 @@ name: 'Tumblr hipster woodstock PBR messenger bag', description: "You probably haven't heard of them jean shorts. "\ "Raw denim you probably haven't heard of them vegan 8-bit "\ - 'occupy mustache four loko.') + 'occupy mustache four loko.' + ) @another_model = FactoryGirl.create( :equipment_model, name: 'Tumblr hipster starbucks alternative music', description: 'Craft beer sartorial four loko blog jean shorts '\ 'chillwave aesthetic. Roof party art party banh mi '\ - 'aesthetic, ennui Marfa kitsch readymade vegan food truck bag.') + 'aesthetic, ennui Marfa kitsch readymade vegan food truck bag.' + ) end it 'Should return equipment_models with all of the query words in '\ 'either name or description' do diff --git a/spec/models/message_spec.rb b/spec/models/message_spec.rb index 9e1142572..ecc35aa7d 100644 --- a/spec/models/message_spec.rb +++ b/spec/models/message_spec.rb @@ -8,7 +8,7 @@ it { is_expected.to validate_presence_of(:body) } it do is_expected.not_to\ - allow_value('abc', '!s@abc.com', 'a@!d.com', 'a@a.c0m').for(:email) + allow_value('abc', '!s@abc.com', 'a@!d.com').for(:email) end it do is_expected.to\ diff --git a/spec/models/report_spec.rb b/spec/models/report_spec.rb index 38f767df5..d3731f28a 100644 --- a/spec/models/report_spec.rb +++ b/spec/models/report_spec.rb @@ -37,19 +37,19 @@ describe '.average2' do it 'returns N/A for arrays of size 0' do - expect(Report.average2 []).to eq('N/A') + expect(Report.average2([])).to eq('N/A') end it 'returns N/A for arrays consisting of nil' do - expect(Report.average2 [nil, nil]).to eq('N/A') + expect(Report.average2([nil, nil])).to eq('N/A') end it 'calculates averages correctly' do - expect(Report.average2 [1, 2, 3]).to eq(2) + expect(Report.average2([1, 2, 3])).to eq(2) end it 'throws out nils' do - expect(Report.average2 [1, 2, 3, nil]).to eq(2) + expect(Report.average2([1, 2, 3, nil])).to eq(2) end it 'rounds to 2 decimal places' do - expect(Report.average2 [0.12, 1.799, 4.3]).to eq(2.07) + expect(Report.average2([0.12, 1.799, 4.3])).to eq(2.07) end end @@ -72,7 +72,7 @@ ['Overdue', :overdue, :count], ['Returned On Time', :returned_on_time, :count], ['Returned Overdue', :returned_overdue, :count], - ['User Count', :all, :count, :reserver_id]] + ['User Count', :all, :count, :reserver_id]].freeze before(:each) do @id = :equipment_item_id @class = EquipmentItem @@ -113,7 +113,7 @@ it 'has the correctly headed rows' do items = @class.all items.each do |item| - expect(@report.rows).to include?(Report::Row.item_to_row item) + expect(@report.rows).to include?(Report::Row.item_to_row(item)) end end end diff --git a/spec/models/reservation_spec.rb b/spec/models/reservation_spec.rb index e6fbecd10..b1c04c934 100644 --- a/spec/models/reservation_spec.rb +++ b/spec/models/reservation_spec.rb @@ -576,13 +576,15 @@ end it 'the status should not be able to be changed if missed' do reservation.update_attributes( - FactoryGirl.attributes_for(:missed_reservation)) + FactoryGirl.attributes_for(:missed_reservation) + ) reservation.status = 'reserved' expect { reservation.save! }.to raise_error ActiveRecord::RecordInvalid end it 'the status should not be able to be changed if returned' do reservation.update_attributes( - FactoryGirl.attributes_for(:checked_in_reservation)) + FactoryGirl.attributes_for(:checked_in_reservation) + ) reservation.status = 'reserved' expect { reservation.save! }.to raise_error ActiveRecord::RecordInvalid end diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb index a8a9a9c77..42d587563 100644 --- a/spec/models/user_spec.rb +++ b/spec/models/user_spec.rb @@ -23,7 +23,7 @@ it { is_expected.to validate_presence_of(:email) } it do is_expected.not_to\ - allow_value('abc', '!s@abc.com', 'a@!d.com', 'a@a.c0m').for(:email) + allow_value('abc', '!s@abc.com', 'a@!d.com').for(:email) end it do is_expected.to\ diff --git a/spec/support/capybara_form_helper.rb b/spec/support/capybara_form_helper.rb index 627e4766b..8701b03be 100644 --- a/spec/support/capybara_form_helper.rb +++ b/spec/support/capybara_form_helper.rb @@ -4,7 +4,7 @@ module Capybara module Driver class Node def submit_form! - fail NotImplementedError + raise NotImplementedError end end end diff --git a/spec/support/feature_helpers.rb b/spec/support/feature_helpers.rb index 4c9516021..3e5a831dc 100644 --- a/spec/support/feature_helpers.rb +++ b/spec/support/feature_helpers.rb @@ -40,14 +40,15 @@ def fill_in_login(user = @user) def update_cart_start_date(new_date_str) # fill in both visible / datepicker and hidden field fill_in 'cart_start_date_cart', with: new_date_str - find(:xpath, "//input[@id='date_start_alt']").set new_date_str + find(:xpath, "//input[@id='date_start_alt']", visible: :all) + .set new_date_str find('#cart_form').submit_form! end def update_cart_due_date(new_date_str) # fill in both visible / datepicker and hidden field fill_in 'cart_due_date_cart', with: new_date_str - find(:xpath, "//input[@id='date_end_alt']").set new_date_str + find(:xpath, "//input[@id='date_end_alt']", visible: :all).set new_date_str find('#cart_form').submit_form! end