diff --git a/Gemfile b/Gemfile index 31db6aa..2ef9bed 100644 --- a/Gemfile +++ b/Gemfile @@ -1,54 +1,41 @@ source 'https://rubygems.org' # Bundle edge Rails instead: gem 'rails', github: 'rails/rails' -gem 'rails', '4.2.0' - -# Use sqlite3 as the database for Active Record -# gem 'sqlite3' +gem 'rails', '~> 5.0.0', '>= 5.0.0.1' +# Use Puma as the app server +gem 'puma', '~> 3.0' # Use SCSS for stylesheets gem 'sass-rails', '~> 5.0' - # Use Uglifier as compressor for JavaScript assets gem 'uglifier', '>= 1.3.0' - -# Use CoffeeScript for .js.coffee assets and views -gem 'coffee-rails', '~> 4.1.0' - -# See https://github.com/sstephenson/execjs#readme for more supported runtimes -gem 'therubyracer', platforms: :ruby +# Use CoffeeScript for .coffee assets and views +gem 'coffee-rails', '~> 4.2' +# See https://github.com/rails/execjs#readme for more supported runtimes +# gem 'therubyracer', platforms: :ruby # Use jquery as the JavaScript library gem 'jquery-rails' - -# Turbolinks makes following links in your web application faster. Read more: https://github.com/rails/turbolinks -# Funky side-effects - so we better not use Turbolinks -#gem 'turbolinks' - +# Turbolinks makes navigating your web application faster. Read more: https://github.com/turbolinks/turbolinks +gem 'turbolinks', '~> 5' # Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder -gem 'jbuilder', '~> 2.0' - -group :doc do - # bundle exec rake doc:rails generates the API under doc/api. - gem 'sdoc', '~> 0.4.0' -end - +gem 'jbuilder', '~> 2.5' +# Use Redis adapter to run Action Cable in production +# gem 'redis', '~> 3.0' # Use ActiveModel has_secure_password -# gem 'bcrypt-ruby', '~> 3.0.0' - -# Use unicorn as the app server -# gem 'unicorn' +# gem 'bcrypt', '~> 3.1.7' # Use Capistrano for deployment -# gem 'capistrano', group: :development +# gem 'capistrano-rails', group: :development -# Use debugger -#gem 'debugger', group: [:development, :test] - -# PostgreSQL support -gem 'pg' group :development do + # Access an IRB console on exception pages or by using <%= console %> anywhere in the code. + gem 'web-console' + gem 'listen', '~> 3.0.5' + # Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring + gem 'spring' + gem 'spring-watcher-listen', '~> 2.0.0' gem "better_errors" gem "binding_of_caller" @@ -57,13 +44,28 @@ group :development do # Call 'byebug' anywhere in the code to stop execution and get a debugger console gem 'byebug' - # Access an IRB console on exception pages or by using <%= console %> in views - gem 'web-console', '~> 2.0' - # Chrome Rails debugging app #gem 'meta_request' end +# Windows does not include zoneinfo files, so bundle the tzinfo-data gem +gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby] + + + + +# See https://github.com/sstephenson/execjs#readme for more supported runtimes +gem 'therubyracer', platforms: :ruby + +group :doc do + # bundle exec rake doc:rails generates the API under doc/api. + gem 'sdoc', '~> 0.4.0' +end + +# PostgreSQL support +gem 'pg' + + group :development, :test do # Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring gem 'spring' @@ -74,6 +76,9 @@ group :development, :test do gem 'minitest-rails' gem 'guard-minitest' gem 'minitest-reporters' + + # Call 'byebug' anywhere in the code to stop execution and get a debugger console + gem 'byebug', platform: :mri end # Zurb Foundation @@ -89,7 +94,7 @@ gem 'will_paginate' #gem 'will_paginate-foundation' # Lightbox image viewer for full-sized images -gem 'fancybox2-rails', '~> 0.2.8' +gem 'fancybox2-rails' # Trying pg_search for full-text search… too slow with ranking… screw PostgreSQL gem 'pg_search' @@ -98,7 +103,7 @@ gem 'pg_search' gem 'slim-rails' # Attachment/image handling -gem "paperclip", "~> 4.2" +gem "paperclip" # Comply with stupid european cookie law gem 'cookies_eu' @@ -113,3 +118,7 @@ gem 'devise' gem "font-awesome-rails" gem "recaptcha", require: "recaptcha/rails" + +gem "sprockets", '3.6.3' + +#gem "activemodel-serializers-xml" diff --git a/Gemfile.lock b/Gemfile.lock index 127adec..62fa465 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -7,43 +7,45 @@ GIT GEM remote: https://rubygems.org/ specs: - actionmailer (4.2.0) - actionpack (= 4.2.0) - actionview (= 4.2.0) - activejob (= 4.2.0) + actioncable (5.0.0.1) + actionpack (= 5.0.0.1) + nio4r (~> 1.2) + websocket-driver (~> 0.6.1) + actionmailer (5.0.0.1) + actionpack (= 5.0.0.1) + actionview (= 5.0.0.1) + activejob (= 5.0.0.1) mail (~> 2.5, >= 2.5.4) - rails-dom-testing (~> 1.0, >= 1.0.5) - actionpack (4.2.0) - actionview (= 4.2.0) - activesupport (= 4.2.0) - rack (~> 1.6.0) - rack-test (~> 0.6.2) - rails-dom-testing (~> 1.0, >= 1.0.5) - rails-html-sanitizer (~> 1.0, >= 1.0.1) - actionview (4.2.0) - activesupport (= 4.2.0) + rails-dom-testing (~> 2.0) + actionpack (5.0.0.1) + actionview (= 5.0.0.1) + activesupport (= 5.0.0.1) + rack (~> 2.0) + rack-test (~> 0.6.3) + rails-dom-testing (~> 2.0) + rails-html-sanitizer (~> 1.0, >= 1.0.2) + actionview (5.0.0.1) + activesupport (= 5.0.0.1) builder (~> 3.1) erubis (~> 2.7.0) - rails-dom-testing (~> 1.0, >= 1.0.5) - rails-html-sanitizer (~> 1.0, >= 1.0.1) - activejob (4.2.0) - activesupport (= 4.2.0) - globalid (>= 0.3.0) - activemodel (4.2.0) - activesupport (= 4.2.0) - builder (~> 3.1) - activerecord (4.2.0) - activemodel (= 4.2.0) - activesupport (= 4.2.0) - arel (~> 6.0) - activesupport (4.2.0) + rails-dom-testing (~> 2.0) + rails-html-sanitizer (~> 1.0, >= 1.0.2) + activejob (5.0.0.1) + activesupport (= 5.0.0.1) + globalid (>= 0.3.6) + activemodel (5.0.0.1) + activesupport (= 5.0.0.1) + activerecord (5.0.0.1) + activemodel (= 5.0.0.1) + activesupport (= 5.0.0.1) + arel (~> 7.0) + activesupport (5.0.0.1) + concurrent-ruby (~> 1.0, >= 1.0.2) i18n (~> 0.7) - json (~> 1.7, >= 1.7.7) minitest (~> 5.1) - thread_safe (~> 0.3, >= 0.3.4) tzinfo (~> 1.1) ansi (1.5.0) - arel (6.0.3) + arel (7.1.4) babel-source (5.8.35) babel-transpiler (0.7.0) babel-source (>= 4.0, < 6) @@ -56,24 +58,23 @@ GEM binding_of_caller (0.7.2) debug_inspector (>= 0.0.1) builder (3.2.2) - byebug (9.0.5) + byebug (9.0.6) choice (0.2.0) climate_control (0.0.3) activesupport (>= 3.0) cocaine (0.5.8) climate_control (>= 0.0.3, < 1.0) coderay (1.1.1) - coffee-rails (4.1.1) + coffee-rails (4.2.1) coffee-script (>= 2.2.0) - railties (>= 4.0.0, < 5.1.x) + railties (>= 4.0.0, < 5.2.x) coffee-script (2.4.1) coffee-script-source execjs coffee-script-source (1.10.0) concurrent-ruby (1.0.2) - cookies_eu (1.3.0) - jquery-cookie-rails - jquery-rails + cookies_eu (1.6.0) + js_cookie_rails debug_inspector (0.0.2) devise (4.2.0) bcrypt (~> 3.0) @@ -83,13 +84,13 @@ GEM warden (~> 1.2.3) erubis (2.7.0) execjs (2.7.0) - fancybox2-rails (0.2.8) - railties (>= 3.1.0, < 5.0) + fancybox2-rails (0.2.7) + railties (>= 3.1.0) ffi (1.9.14) - font-awesome-rails (4.6.3.1) + font-awesome-rails (4.7.0.0) railties (>= 3.2, < 5.1) formatador (0.2.5) - foundation-rails (6.2.3.0) + foundation-rails (6.2.4.0) railties (>= 3.1.0) sass (>= 3.3.0, < 3.5) sprockets-es6 (>= 0.9.0) @@ -115,18 +116,17 @@ GEM jbuilder (2.6.0) activesupport (>= 3.0.0, < 5.1) multi_json (~> 1.2) - jquery-cookie-rails (1.3.1.1) - railties (>= 3.2.0, < 5.0) - jquery-rails (4.1.1) + jquery-rails (4.2.1) rails-dom-testing (>= 1, < 3) railties (>= 4.2.0) thor (>= 0.14, < 2.0) + js_cookie_rails (2.1.3) + railties (>= 3.1) json (1.8.3) libv8 (3.16.14.15) - listen (3.1.5) + listen (3.0.8) 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) @@ -136,88 +136,86 @@ GEM mime-types (3.1) mime-types-data (~> 3.2015) mime-types-data (3.2016.0521) - mimemagic (0.3.0) + mimemagic (0.3.2) mini_portile2 (2.1.0) - minitest (5.9.0) - minitest-rails (2.2.1) - minitest (~> 5.7) - railties (~> 4.1) - minitest-reporters (1.1.11) + minitest (5.9.1) + minitest-rails (3.0.0) + minitest (~> 5.8) + railties (~> 5.0) + minitest-reporters (1.1.12) ansi builder minitest (>= 5.0) ruby-progressbar multi_json (1.12.1) nenv (0.3.0) - nokogiri (1.6.8) + nio4r (1.2.1) + nokogiri (1.6.8.1) mini_portile2 (~> 2.1.0) - pkg-config (~> 1.1.7) notiffany (0.1.1) nenv (~> 0.1) shellany (~> 0.0) orm_adapter (0.5.0) - paperclip (4.3.7) - activemodel (>= 3.2.0) - activesupport (>= 3.2.0) + paperclip (5.1.0) + activemodel (>= 4.2.0) + activesupport (>= 4.2.0) cocaine (~> 0.5.5) mime-types - mimemagic (= 0.3.0) - pg (0.18.4) + mimemagic (~> 0.3.0) + pg (0.19.0) pg_search (1.0.6) activerecord (>= 3.1) activesupport (>= 3.1) arel - pkg-config (1.1.7) pry (0.10.4) coderay (~> 1.1.0) method_source (~> 0.8.1) slop (~> 3.4) - rack (1.6.4) + puma (3.6.0) + rack (2.0.1) rack-test (0.6.3) rack (>= 1.0) - rails (4.2.0) - actionmailer (= 4.2.0) - actionpack (= 4.2.0) - actionview (= 4.2.0) - activejob (= 4.2.0) - activemodel (= 4.2.0) - activerecord (= 4.2.0) - activesupport (= 4.2.0) + rails (5.0.0.1) + actioncable (= 5.0.0.1) + actionmailer (= 5.0.0.1) + actionpack (= 5.0.0.1) + actionview (= 5.0.0.1) + activejob (= 5.0.0.1) + activemodel (= 5.0.0.1) + activerecord (= 5.0.0.1) + activesupport (= 5.0.0.1) bundler (>= 1.3.0, < 2.0) - railties (= 4.2.0) - sprockets-rails - rails-deprecated_sanitizer (1.0.3) - activesupport (>= 4.2.0.alpha) - rails-dom-testing (1.0.7) - activesupport (>= 4.2.0.beta, < 5.0) + railties (= 5.0.0.1) + sprockets-rails (>= 2.0.0) + rails-dom-testing (2.0.1) + activesupport (>= 4.2.0, < 6.0) nokogiri (~> 1.6.0) - rails-deprecated_sanitizer (>= 1.0.1) - rails-erd (1.4.7) + rails-erd (1.5.0) activerecord (>= 3.2) activesupport (>= 3.2) choice (~> 0.2.0) ruby-graphviz (~> 1.2) rails-html-sanitizer (1.0.3) loofah (~> 2.0) - railties (4.2.0) - actionpack (= 4.2.0) - activesupport (= 4.2.0) + railties (5.0.0.1) + actionpack (= 5.0.0.1) + activesupport (= 5.0.0.1) + method_source rake (>= 0.8.7) thor (>= 0.18.1, < 2.0) - rake (11.2.2) - rb-fsevent (0.9.7) + rake (11.3.0) + rb-fsevent (0.9.8) rb-inotify (0.9.7) ffi (>= 0.5.0) rdoc (4.2.2) json (~> 1.4) - recaptcha (3.3.0) + recaptcha (3.4.0) json ref (2.0.0) - responders (2.2.0) + responders (2.3.0) railties (>= 4.2.0, < 5.1) ruby-graphviz (1.2.2) ruby-progressbar (1.8.1) - ruby_dep (1.3.1) sass (3.4.22) sass-rails (5.0.6) railties (>= 4.0.0, < 6) @@ -225,27 +223,31 @@ GEM sprockets (>= 2.8, < 4.0) sprockets-rails (>= 2.0, < 4.0) tilt (>= 1.1, < 3) - sdoc (0.4.1) + sdoc (0.4.2) json (~> 1.7, >= 1.7.7) rdoc (~> 4.0) shellany (0.0.1) slim (3.0.7) temple (~> 0.7.6) tilt (>= 1.3.3, < 2.1) - slim-rails (3.1.0) + slim-rails (3.1.1) actionpack (>= 3.1) railties (>= 3.1) slim (~> 3.0) slop (3.6.0) - spring (1.7.2) - sprockets (3.7.0) + spring (2.0.0) + activesupport (>= 4.2) + spring-watcher-listen (2.0.1) + listen (>= 2.7, < 4.0) + spring (>= 1.2, < 3.0) + sprockets (3.6.3) concurrent-ruby (~> 1.0) rack (> 1, < 3) - sprockets-es6 (0.9.0) + sprockets-es6 (0.9.2) babel-source (>= 5.8.11) babel-transpiler sprockets (>= 3.0.0) - sprockets-rails (3.1.1) + sprockets-rails (3.2.0) actionpack (>= 4.0) activesupport (>= 4.0) sprockets (>= 3.0.0) @@ -256,18 +258,24 @@ GEM thor (0.19.1) thread_safe (0.3.5) tilt (2.0.5) + turbolinks (5.0.1) + turbolinks-source (~> 5) + turbolinks-source (5.0.0) tzinfo (1.2.2) thread_safe (~> 0.1) - uglifier (3.0.1) + uglifier (3.0.3) execjs (>= 0.3.0, < 3) warden (1.2.6) rack (>= 1.0) - web-console (2.3.0) - activemodel (>= 4.0) - binding_of_caller (>= 0.7.2) - railties (>= 4.0) - sprockets-rails (>= 2.0, < 4.0) - will_paginate (3.1.0) + web-console (3.3.1) + actionview (>= 5.0) + activemodel (>= 5.0) + debug_inspector + railties (>= 5.0) + websocket-driver (0.6.4) + websocket-extensions (>= 0.1.0) + websocket-extensions (0.1.2) + will_paginate (3.1.5) PLATFORMS ruby @@ -277,32 +285,38 @@ DEPENDENCIES binding_of_caller byebug bzip2-ruby! - coffee-rails (~> 4.1.0) + coffee-rails (~> 4.2) cookies_eu devise - fancybox2-rails (~> 0.2.8) + fancybox2-rails font-awesome-rails foundation-rails (~> 6.2) guard-minitest guard-rails - jbuilder (~> 2.0) + jbuilder (~> 2.5) jquery-rails + listen (~> 3.0.5) minitest-rails minitest-reporters - paperclip (~> 4.2) + paperclip pg pg_search - rails (= 4.2.0) + puma (~> 3.0) + rails (~> 5.0.0, >= 5.0.0.1) rails-erd recaptcha sass-rails (~> 5.0) sdoc (~> 0.4.0) slim-rails spring + spring-watcher-listen (~> 2.0.0) + sprockets (= 3.6.3) therubyracer + turbolinks (~> 5) + tzinfo-data uglifier (>= 1.3.0) - web-console (~> 2.0) + web-console will_paginate BUNDLED WITH - 1.12.5 + 1.13.6 diff --git a/app/assets/stylesheets/_settings.scss b/app/assets/stylesheets/_settings.scss index f55b409..c4099c8 100644 --- a/app/assets/stylesheets/_settings.scss +++ b/app/assets/stylesheets/_settings.scss @@ -912,4 +912,9 @@ a.black } .inputfile + label { cursor: pointer; /* "hand" cursor */ -} \ No newline at end of file +} + +/* Foundation sets file buttons to 100% width. Fix that */ +[type='file'] { + width: inherit !important; +} diff --git a/app/assets/stylesheets/logs.scss b/app/assets/stylesheets/logs.scss deleted file mode 100644 index 4f6a162..0000000 --- a/app/assets/stylesheets/logs.scss +++ /dev/null @@ -1,3 +0,0 @@ -// Place all the styles related to the logs controller here. -// They will automatically be included in application.css. -// You can use Sass (SCSS) here: http://sass-lang.com/ diff --git a/app/controllers/packages_controller.rb b/app/controllers/packages_controller.rb index d1bf376..bc93a01 100644 --- a/app/controllers/packages_controller.rb +++ b/app/controllers/packages_controller.rb @@ -34,7 +34,10 @@ class PackagesController < ApplicationController @images = [] # Save the images already if they are valid. - params[:screenshot][:image].each do |img| + # params[:screenshot][:image].each do |img| + successful_upload_count = 0 + + params[:file].each do |img| new_screenshot = @package.screenshots.new(image: img) # Check if the image was valid diff --git a/app/jobs/application_job.rb b/app/jobs/application_job.rb new file mode 100644 index 0000000..a009ace --- /dev/null +++ b/app/jobs/application_job.rb @@ -0,0 +1,2 @@ +class ApplicationJob < ActiveJob::Base +end diff --git a/app/models/application_record.rb b/app/models/application_record.rb new file mode 100644 index 0000000..10a4cba --- /dev/null +++ b/app/models/application_record.rb @@ -0,0 +1,3 @@ +class ApplicationRecord < ActiveRecord::Base + self.abstract_class = true +end diff --git a/app/models/log.rb b/app/models/log.rb index 02fa7cf..4618711 100644 --- a/app/models/log.rb +++ b/app/models/log.rb @@ -1,6 +1,6 @@ # require 'pry' -class Log < ActiveRecord::Base +class Log < ApplicationRecord validates :message, presence: true validates :section, presence: true diff --git a/app/models/package.rb b/app/models/package.rb index 7dcfad9..b0e26d5 100644 --- a/app/models/package.rb +++ b/app/models/package.rb @@ -1,7 +1,7 @@ require 'open-uri' # allows to load URLs using open() require 'json' -class Package < ActiveRecord::Base +class Package < ApplicationRecord # PostgreSQL-based full-text search: # https://github.com/Casecommons/pg_search include PgSearch diff --git a/app/models/screenshot.rb b/app/models/screenshot.rb index 5cad301..8e2f047 100644 --- a/app/models/screenshot.rb +++ b/app/models/screenshot.rb @@ -1,4 +1,4 @@ -class Screenshot < ActiveRecord::Base +class Screenshot < ApplicationRecord belongs_to :package, :inverse_of=>:screenshots has_attached_file :image, diff --git a/app/models/user.rb b/app/models/user.rb index d77ec1e..3e194d8 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -1,4 +1,4 @@ -class User < ActiveRecord::Base +class User < ApplicationRecord # Include default devise modules. Others available are: # :confirmable, :lockable, :timeoutable and :omniauthable devise :database_authenticatable, diff --git a/app/views/packages/upload.slim b/app/views/packages/upload.slim index 047ad7b..76a8afe 100644 --- a/app/views/packages/upload.slim +++ b/app/views/packages/upload.slim @@ -1,5 +1,5 @@ .row - h1 = "Upload a screenshot for #{@package.name}" + h1 = "Upload screenshots for #{@package.name}" .row .small-7.columns @@ -7,20 +7,33 @@ p ' You are about to upload a screenshot for the #{@package.name} ' package. Thanks for your contribution. - - if @package.screenshots.any? - p + + = form_tag(upload_image_path, multipart: true) + + .row + .small-6.columns + input.hidden-inputfile type="file" name="file[]" id="file" multiple=true + label for="file" + a.button id="file-select-button" + = fa_stacked_icon "image", base: "circle-thin" + span id="file-label" + ' Select screenshot file(s) + + .small-6.columns + button.button type="submit" id="file-submit" + = fa_stacked_icon "upload", base: "circle-thin" + ' Start upload + + p + - if @package.screenshots.any? ' Just for your information - these screenshots have already been uploaded. - .small-up-1.medium-up-3.large-up-4.grid-thumbnails - - @package.screenshots.all.each do |ss| - a.black.fancybox href=ss.image.url(:large, timestamp: false) rel='fancybox-thumb' title=ss.caption - = image_tag(ss.image.url(:thumb, timestamp: false), alt: ss.caption, class: 'thumbnail') - - // = render partial: 'packages/grid_thumbnail', locals: { pkg: pkg } - - - else - ' There are no screenshots yet for #{@package.name}. + .small-up-1.medium-up-3.large-up-4.grid-thumbnails + - @package.screenshots.all.each do |ss| + a.black.fancybox href=ss.image.url(:large, timestamp: false) rel='fancybox-thumb' title=ss.caption + = image_tag(ss.image.url(:thumb, timestamp: false), alt: ss.caption, class: 'thumbnail') +// <<<<<<< HEAD = form_for :screenshot, url: upload_image_path, html: { multipart: true, id: 'file-form' } do |f| / = form_tag(upload_image_path, multipart: true, id: 'file-form') @@ -34,11 +47,14 @@ = fa_stacked_icon "image", base: "circle-thin" span id="file-label" ' Select screenshot files +// ======= + // = render partial: 'packages/grid_thumbnail', locals: { pkg: pkg } + + //- else + // ' There are no screenshots yet for #{@package.name}. Your upload will + // ' be the first. +// >>>>>>> 652c2d4126c628403bb8223ffd5f6fb633da95de - .small-6.columns - button.button type="submit" id="file-submit" - = fa_stacked_icon "upload", base: "circle-thin" - ' Start upload .small-5.columns.bigpanel @@ -58,7 +74,7 @@ li ' will be reduced if it is lager than 800x600 pixels. ' So don't try to capture too much detail in a screenshot. It may become - ' unreadable. Shrink the applications window if possible. + ' unreadable. Shrink the application's window if possible. li ' will be made public and can freely be used by anyone. li diff --git a/config/application.rb b/config/application.rb index 07e0cc3..4f76acb 100644 --- a/config/application.rb +++ b/config/application.rb @@ -1,25 +1,16 @@ -require File.expand_path('../boot', __FILE__) +require_relative 'boot' require 'rails/all' # Require the gems listed in Gemfile, including any gems # you've limited to :test, :development, or :production. -Bundler.require(:default, Rails.env) +Bundler.require(*Rails.groups) module Debshots class Application < Rails::Application # Settings in config/environments/* take precedence over those specified here. # Application configuration should go into files in config/initializers # -- all .rb files in that directory are automatically loaded. - config.autoload_paths << Rails.root.join('lib') - - # Set Time.zone default to the specified zone and make Active Record auto-convert to this zone. - # Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC. - # config.time_zone = 'Central Time (US & Canada)' - - # The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded. - # config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s] - # config.i18n.default_locale = :de end end diff --git a/config/boot.rb b/config/boot.rb index 3596736..30f5120 100644 --- a/config/boot.rb +++ b/config/boot.rb @@ -1,4 +1,3 @@ -# Set up gems listed in the Gemfile. -ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__) +ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../Gemfile', __dir__) -require 'bundler/setup' if File.exists?(ENV['BUNDLE_GEMFILE']) +require 'bundler/setup' # Set up gems listed in the Gemfile. diff --git a/config/cable.yml b/config/cable.yml new file mode 100644 index 0000000..0bbde6f --- /dev/null +++ b/config/cable.yml @@ -0,0 +1,9 @@ +development: + adapter: async + +test: + adapter: async + +production: + adapter: redis + url: redis://localhost:6379/1 diff --git a/config/environment.rb b/config/environment.rb index 7e1eee9..426333b 100644 --- a/config/environment.rb +++ b/config/environment.rb @@ -1,5 +1,5 @@ # Load the Rails application. -require File.expand_path('../application', __FILE__) +require_relative 'application' # Initialize the Rails application. -Debshots::Application.initialize! +Rails.application.initialize! diff --git a/config/environments/development.rb b/config/environments/development.rb index 58982ce..65a74d5 100644 --- a/config/environments/development.rb +++ b/config/environments/development.rb @@ -1,4 +1,4 @@ -Debshots::Application.configure do +Rails.application.configure do # Settings specified here will take precedence over those in config/application.rb. # In the development environment your application's code is reloaded on @@ -9,24 +9,32 @@ Debshots::Application.configure do # Do not eager load code on boot. config.eager_load = false - # Show full error reports - config.consider_all_requests_local = true + # Show full error reports. + config.consider_all_requests_local = true - # Disable caching (except for working on caching) - config.action_controller.perform_caching = false - # config.action_controller.perform_caching = true - # config.cache_store = :file_store, "#{Rails.root.to_s}/tmp/cache/filestore" + # Enable/disable caching. By default caching is disabled. + if Rails.root.join('tmp/caching-dev.txt').exist? + config.action_controller.perform_caching = true + + config.cache_store = :memory_store + config.public_file_server.headers = { + 'Cache-Control' => 'public, max-age=172800' + } + else + config.action_controller.perform_caching = false + + config.cache_store = :null_store + end # Don't care if the mailer can't send. config.action_mailer.raise_delivery_errors = false - # config.action_mailer.default_url_options = { :host => 'localhost:3000' } - config.action_mailer.default_url_options = { host: 'localhost', port: 3000 } + config.action_mailer.perform_caching = false # Print deprecation notices to the Rails logger. config.active_support.deprecation = :log - # Raise an error on page load if there are pending migrations + # Raise an error on page load if there are pending migrations. config.active_record.migration_error = :page_load # Debug mode disables concatenation and preprocessing of assets. @@ -34,8 +42,18 @@ Debshots::Application.configure do # number of complex assets. config.assets.debug = true - # ActiveRecord errors propagate normally (forward deprecation to Rails 5) - config.active_record.raise_in_transactional_callbacks = true + # Suppress logger output for asset requests. + config.assets.quiet = true + + # Raises error for missing translations + # config.action_view.raise_on_missing_translations = true + + # Use an evented file watcher to asynchronously detect changes in source code, + # routes, locales, etc. This feature depends on the listen gem. + config.file_watcher = ActiveSupport::EventedFileUpdateChecker + + # Suppress logger output for asset requests. + config.assets.quiet = true # DEB package repositories to parse when running "rake debshots:... tasks" config.package_sources = [ @@ -45,6 +63,8 @@ Debshots::Application.configure do #components: ['main','restricted','universe','multiverse'] } ] + # Raises error for missing translations + # config.action_view.raise_on_missing_translations = true # Example file for development to avoid queries to online service config.ubuntu_reviews_api_url = 'test/files/ubuntu-review-api/cream' diff --git a/config/environments/production.rb b/config/environments/production.rb index 03cc44a..6ae68a1 100644 --- a/config/environments/production.rb +++ b/config/environments/production.rb @@ -1,93 +1,97 @@ -Debshots::Application.configure do +Rails.application.configure do # Settings specified here will take precedence over those in config/application.rb. # Code is not reloaded between requests. config.cache_classes = true # Eager load code on boot. This eager loads most of Rails and - # your application in memory, allowing both thread web servers + # your application in memory, allowing both threaded web servers # and those relying on copy on write to perform better. # Rake tasks automatically ignore this option for performance. config.eager_load = true - # ActiveRecord errors propagate normally (forward deprecation to Rails 5) - config.active_record.raise_in_transactional_callbacks = true - - # Full error reports are disabled + # Full error reports are disabled and caching is turned on. config.consider_all_requests_local = false - - # Caching turned on config.action_controller.perform_caching = true - config.cache_store = :file_store, "#{Rails.root.to_s}/tmp/cache/filestore" - # Enable Rack::Cache to put a simple HTTP cache in front of your application - # Add `rack-cache` to your Gemfile before enabling this. - # For large-scale production use, consider using a caching reverse proxy like nginx, varnish or squid. - # config.action_dispatch.rack_cache = true - - # Disable Rails's static asset server (Apache or nginx will already do this). - config.serve_static_files = false + # Disable serving static files from the `/public` folder by default since + # Apache or NGINX already handles this. + config.public_file_server.enabled = ENV['RAILS_SERVE_STATIC_FILES'].present? # Compress JavaScripts and CSS. config.assets.js_compressor = :uglifier config.assets.css_compressor = :sass # Do not fallback to assets pipeline if a precompiled asset is missed. - config.assets.compile = false + # config.assets.compile = false + config.assets.precompile += %w( vendor/modernizr.js ) - # Generate digests for assets URLs. - config.assets.digest = true - # Version of your assets, change this if you want to expire all your assets. - config.assets.version = '1.0' + # `config.assets.precompile` and `config.assets.version` have moved to config/initializers/assets.rb + + # Enable serving of images, stylesheets, and JavaScripts from an asset server. + # config.action_controller.asset_host = 'http://assets.example.com' # Specifies the header that your server uses for sending files. - # config.action_dispatch.x_sendfile_header = "X-Sendfile" # for apache - config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for nginx + # config.action_dispatch.x_sendfile_header = 'X-Sendfile' # for Apache + config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for NGINX + + # Mount Action Cable outside main process or domain + # config.action_cable.mount_path = nil + # config.action_cable.url = 'wss://example.com/cable' + # config.action_cable.allowed_request_origins = [ 'http://example.com', /http:\/\/example.*/ ] # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies. config.force_ssl = true - # Set to :debug to see everything in the log. - # config.log_level = :info + # Use the lowest log level to ensure availability of diagnostic information + # when problems arise. + # config.log_level = :debug config.log_level = :warn # Prepend all log lines with the following tags. - # config.log_tags = [ :subdomain, :uuid ] - - # Use a different logger for distributed setups. - # config.logger = ActiveSupport::TaggedLogging.new(SyslogLogger.new) + config.log_tags = [ :request_id ] # Use a different cache store in production. # config.cache_store = :mem_cache_store - # Enable serving of images, stylesheets, and JavaScripts from an asset server. - # config.action_controller.asset_host = "http://assets.example.com" - - # Precompile additional assets. - # application.js, application.css, and all non-JS/CSS in app/assets folder are already added. - # config.assets.precompile += %w( search.js ) - config.assets.precompile += %w( vendor/modernizr.js ) + # Use a real queuing backend for Active Job (and separate queues per environment) + # config.active_job.queue_adapter = :resque + # config.active_job.queue_name_prefix = "debshots_#{Rails.env}" + config.action_mailer.perform_caching = false # Ignore bad email addresses and do not raise email delivery errors. # Set this to true and configure the email server for immediate delivery to raise delivery errors. # config.action_mailer.raise_delivery_errors = false # Enable locale fallbacks for I18n (makes lookups for any locale fall back to - # the I18n.default_locale when a translation can not be found). + # the I18n.default_locale when a translation cannot be found). config.i18n.fallbacks = true # Send deprecation notices to registered listeners. config.active_support.deprecation = :notify - # Disable automatic flushing of the log to improve performance. - # config.autoflush_log = false - # Use default logging formatter so that PID and timestamp are not suppressed. config.log_formatter = ::Logger::Formatter.new - # URL prefix leading to the static images that should get delivered by the web server - # config.images_path_prefix = '/screenshots' + # Use a different logger for distributed setups. + # require 'syslog/logger' + # config.logger = ActiveSupport::TaggedLogging.new(Syslog::Logger.new 'app-name') + + if ENV["RAILS_LOG_TO_STDOUT"].present? + logger = ActiveSupport::Logger.new(STDOUT) + logger.formatter = config.log_formatter + config.logger = ActiveSupport::TaggedLogging.new(logger) + end + + # Do not dump schema after migrations. + config.active_record.dump_schema_after_migration = false + + # Disable Rails's static asset server (Apache or nginx will already do this). + config.serve_static_files = false + # Disable serving static files from the `/public` folder by default since + # Apache or NGINX already handles this. + config.public_file_server.enabled = ENV['RAILS_SERVE_STATIC_FILES'].present? config.package_sources = [ { @@ -106,4 +110,5 @@ Debshots::Application.configure do large: '800x600', small: '160x120', } + end diff --git a/config/puma.rb b/config/puma.rb new file mode 100644 index 0000000..c7f311f --- /dev/null +++ b/config/puma.rb @@ -0,0 +1,47 @@ +# Puma can serve each request in a thread from an internal thread pool. +# The `threads` method setting takes two numbers a minimum and maximum. +# Any libraries that use thread pools should be configured to match +# the maximum value specified for Puma. Default is set to 5 threads for minimum +# and maximum, this matches the default thread size of Active Record. +# +threads_count = ENV.fetch("RAILS_MAX_THREADS") { 5 }.to_i +threads threads_count, threads_count + +# Specifies the `port` that Puma will listen on to receive requests, default is 3000. +# +port ENV.fetch("PORT") { 3000 } + +# Specifies the `environment` that Puma will run in. +# +environment ENV.fetch("RAILS_ENV") { "development" } + +# Specifies the number of `workers` to boot in clustered mode. +# Workers are forked webserver processes. If using threads and workers together +# the concurrency of the application would be max `threads` * `workers`. +# Workers do not work on JRuby or Windows (both of which do not support +# processes). +# +# workers ENV.fetch("WEB_CONCURRENCY") { 2 } + +# Use the `preload_app!` method when specifying a `workers` number. +# This directive tells Puma to first boot the application and load code +# before forking the application. This takes advantage of Copy On Write +# process behavior so workers use less memory. If you use this option +# you need to make sure to reconnect any threads in the `on_worker_boot` +# block. +# +# preload_app! + +# The code in the `on_worker_boot` will be called if you are using +# clustered mode by specifying a number of `workers`. After each worker +# process is booted this block will be run, if you are using `preload_app!` +# option you will want to use this block to reconnect to any threads +# or connections that may have been created at application boot, Ruby +# cannot share connections between processes. +# +# on_worker_boot do +# ActiveRecord::Base.establish_connection if defined?(ActiveRecord) +# end + +# Allow puma to be restarted by `rails restart` command. +plugin :tmp_restart diff --git a/config/secrets.yml b/config/secrets.yml new file mode 100644 index 0000000..58f9ff7 --- /dev/null +++ b/config/secrets.yml @@ -0,0 +1,22 @@ +# Be sure to restart your server when you modify this file. + +# Your secret key is used for verifying the integrity of signed cookies. +# If you change this key, all old signed cookies will become invalid! + +# Make sure the secret is at least 30 characters and all random, +# no regular words or you'll be exposed to dictionary attacks. +# You can use `rails secret` to generate a secure secret key. + +# Make sure the secrets in this file are kept private +# if you're sharing your code publicly. + +development: + secret_key_base: a56c90bd0290e572226364c5343415893fd4d17ef92e1b9b88619a6f6482ac22e807a5970eb8e0fe5379548730ec8da8c7553a5eaffcc74092acf07c2ce90623 + +test: + secret_key_base: 882eb71d8e500f3d9fe15a475aa5ea9f1e87f9902828f5d0d14d845e2bb29041124b1666a9222e47b42fb4b317bac258e5e1e98e6ef048db0886e73c8a954455 + +# Do not keep production secrets in the repository, +# instead read values from the environment. +production: + secret_key_base: <%= ENV["SECRET_KEY_BASE"] %> diff --git a/config/spring.rb b/config/spring.rb new file mode 100644 index 0000000..c9119b4 --- /dev/null +++ b/config/spring.rb @@ -0,0 +1,6 @@ +%w( + .ruby-version + .rbenv-vars + tmp/restart.txt + tmp/caching-dev.txt +).each { |path| Spring.watch(path) } diff --git a/db/schema.rb b/db/schema.rb index aa54496..da59cf8 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -1,4 +1,3 @@ -# encoding: UTF-8 # This file is auto-generated from the current state of the database. Instead # of editing this file, please use the migrations feature of Active Record to # incrementally modify your database, and then regenerate this schema definition. @@ -39,10 +38,10 @@ ActiveRecord::Schema.define(version: 20160812085722) do t.datetime "created_at" t.datetime "updated_at" t.integer "visits", default: 0 + t.index "(((setweight(to_tsvector('english'::regconfig, COALESCE((name)::text, ''::text)), 'A'::\"char\") || setweight(to_tsvector('english'::regconfig, COALESCE((description)::text, ''::text)), 'B'::\"char\")) || setweight(to_tsvector('english'::regconfig, COALESCE(long_description, ''::text)), 'C'::\"char\")))", name: "packages_fts", using: :gin + t.index ["name"], name: "packages_name_key", unique: true, using: :btree end - add_index "packages", ["name"], name: "packages_name_key", unique: true, using: :btree - create_table "screenshots", force: :cascade do |t| t.integer "package_id" t.string "version", limit: 50 @@ -59,13 +58,14 @@ ActiveRecord::Schema.define(version: 20160812085722) do t.integer "image_file_size" t.datetime "image_updated_at" t.string "image_fingerprint" + t.index ["id", "approved"], name: "id_approved", using: :btree + t.index ["id", "uploaderhash"], name: "id_uploaderhash", using: :btree end - add_index "screenshots", ["id", "approved"], name: "id_approved", using: :btree - add_index "screenshots", ["id", "uploaderhash"], name: "id_uploaderhash", using: :btree - create_table "users", force: :cascade do |t| t.text "realname" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false t.string "email", default: "", null: false t.string "encrypted_password", default: "", null: false t.integer "sign_in_count", default: 0, null: false @@ -76,11 +76,8 @@ ActiveRecord::Schema.define(version: 20160812085722) do t.integer "failed_attempts", default: 0, null: false t.string "unlock_token" t.datetime "locked_at" - t.datetime "created_at", null: false - t.datetime "updated_at", null: false + t.index ["email"], name: "index_users_on_email", unique: true, using: :btree end - add_index "users", ["email"], name: "index_users_on_email", unique: true, using: :btree - add_foreign_key "screenshots", "packages", name: "screenshots_package_id_fkey" end diff --git a/debshots.komodoproject b/debshots.komodoproject deleted file mode 100644 index 83f072c..0000000 --- a/debshots.komodoproject +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/debshots2.sublime-project b/debshots2.sublime-project index 24db303..269510e 100644 --- a/debshots2.sublime-project +++ b/debshots2.sublime-project @@ -1,8 +1,9 @@ { + "binary_file_patterns": ["*.jpg", "*.jpeg", "*.png", "*.gif", "*.ttf", "*.tga", "*.dds", "*.ico", "*.eot", "*.pdf", "*.swf", "*.jar", "*.zip", "tmp/**"], "folders": [ { "path": "." } - ] + ], } diff --git a/lib/tasks/import_debian.rake b/lib/tasks/import_debian.rake index 9ba97bb..f136df6 100644 --- a/lib/tasks/import_debian.rake +++ b/lib/tasks/import_debian.rake @@ -23,15 +23,11 @@ BLACKLIST_NAME_PATTERN=[ # /?...$ is used because Ubuntu adds their own section - e.g. multiverse/debug BLACKLIST_SECTION_PATTERN = [ /^debian-installer$/, - /\/?text$/, /\/?translations$/, /\/?debug$/, /\/?kernel$/, - /\/?libs$/, /\/?localization$/, /\/?oldlibs$/, - /\/?otherosfs$/, - /\/?doc$/, /\/?libdevel$/, /\/?cli-mono$/, ]