Introduction
Introduction Statistics Contact Development Disclaimer Help
Merge pull request #47 from beardyjay/rails5 - warvox - VoIP based wardialing t…
Log
Files
Refs
README
---
commit 1ba5b2dcbb3af0cfcc15f09515149c3293fe753d
parent a1f6730b831422fc51fb5af175d279f97452983c
Author: HD Moore <[email protected]>
Date: Tue, 6 Sep 2016 14:29:00 -0500
Merge pull request #47 from beardyjay/rails5
Update to Rails 5
Diffstat:
M .gitignore | 7 +++++++
M .ruby-version | 2 +-
M Gemfile | 28 ++++++++++++++++------------
M Gemfile.lock | 234 ++++++++++++++++++-----------…
M README.md | 39 ++++++++++++++++++++---------…
A app/assets/config/manifest.js | 3 +++
R config/initializers/bootstrap.rb -… | 0
M app/controllers/analyze_controller… | 22 +++++++++++-----------
M app/controllers/application_contro… | 8 ++++----
M app/controllers/calls_controller.rb | 70 +++++++++++++++--------------…
R config/initializers/bootstrap.rb -… | 0
M app/controllers/home_controller.rb | 6 +++---
M app/controllers/jobs_controller.rb | 234 +++++++++++++++--------------…
M app/controllers/projects_controlle… | 50 +++++++++++++++++----------…
M app/controllers/providers_controll… | 44 ++++++++++++++++++---------…
M app/controllers/user_sessions_cont… | 16 +++++++++++-----
M app/controllers/users_controller.rb | 20 +++++++++++++-------
M app/helpers/application_helper.rb | 14 +++++++-------
A app/models/application_record.rb | 3 +++
M app/models/call.rb | 22 +++++++++++-----------
M app/models/call_medium.rb | 2 +-
R config/initializers/bootstrap.rb -… | 0
M app/models/job.rb | 54 +++++++++++++----------------…
M app/models/line.rb | 6 +++---
M app/models/line_attribute.rb | 2 +-
M app/models/project.rb | 14 ++++++--------
M app/models/provider.rb | 8 +++-----
M app/models/settings.rb | 4 ++--
M app/models/signature.rb | 2 +-
M app/models/signature_fp.rb | 2 +-
M app/models/user.rb | 6 +++---
M app/views/application/_nav.html.erb | 4 +++-
M app/views/home/about.html.erb | 2 +-
M app/views/layouts/login.html.erb | 4 +++-
M app/views/users/edit.html.erb | 2 +-
M bin/adduser | 2 +-
A bin/bundle | 3 +++
M bin/export_audio.rb | 2 +-
M bin/export_list.rb | 2 +-
M bin/iaxrecord.rb | 2 +-
M bin/import_audio.rb | 24 ++++++++++++------------
A bin/rails | 4 ++++
A bin/rake | 4 ++++
M bin/resetpw | 2 +-
A bin/setup | 34 +++++++++++++++++++++++++++++…
A bin/update | 29 +++++++++++++++++++++++++++++
M bin/warvox.rb | 2 +-
M bin/worker_manager.rb | 10 +++++-----
M config/application.rb | 65 ++++++++---------------------…
M config/boot.rb | 7 ++-----
A config/cable.yml | 9 +++++++++
M config/environment.rb | 9 ++++-----
M config/environments/development.rb | 56 ++++++++++++++++++++---------…
M config/environments/production.rb | 90 ++++++++++++++++++-----------…
M config/environments/test.rb | 41 +++++++++++++++++------------…
A config/initializers/application_co… | 6 ++++++
A config/initializers/assets.rb | 16 ++++++++++++++++
A config/initializers/cookies_serial… | 5 +++++
A config/initializers/filter_paramet… | 4 ++++
M config/initializers/inflections.rb | 11 ++++++-----
M config/initializers/mime_types.rb | 1 -
A config/initializers/new_framework_… | 24 ++++++++++++++++++++++++
D config/initializers/secret_token.rb | 1 -
M config/initializers/session_store.… | 7 +------
M config/initializers/wrap_parameter… | 10 +++++-----
M config/locales/en.yml | 22 ++++++++++++++++++++--
M config/routes.rb | 5 ++---
A config/secrets.yml.example | 8 ++++++++
R config/initializers/bootstrap.rb -… | 0
M db/migrate/20121228171549_initial_… | 107 +++++++++++++++------------…
M db/migrate/20130113004653_create_r… | 31 +++++++++++++++------------…
M db/schema.rb | 101 ++++++++++++++---------------…
A db/seeds.rb | 7 +++++++
R config/initializers/bootstrap.rb -… | 0
R config/initializers/bootstrap.rb -… | 0
M lib/warvox/audio/raw.rb | 2 +-
M lib/warvox/jobs/analysis.rb | 32 ++++++++++++++++-------------…
M lib/warvox/jobs/dialer.rb | 16 ++++++++--------
M lib/warvox/proto/iax2/client.rb | 8 ++++----
D script/rails | 6 ------
M spec/factories/settings.rb | 2 +-
M spec/rails_helper.rb | 12 ++++++++----
M spec/spec_helper.rb | 25 +++++++++++++++++--------
M spec/support/auth_logic_helpers.rb | 5 ++---
A spec/support/factory_girl.rb | 3 +++
85 files changed, 1019 insertions(+), 789 deletions(-)
---
diff --git a/.gitignore b/.gitignore
@@ -24,3 +24,10 @@ config/secrets.yml
# unless supporting rvm < 1.11.0 or doing something fancy, ignore this:
.rvmrc
+
+# vagrant and ansible files
+.vagrant
+playbook.retry
+
+TODO.md
+/public/assets
diff --git a/.ruby-version b/.ruby-version
@@ -1 +1 @@
-2.2.3
+2.2.5
diff --git a/Gemfile b/Gemfile
@@ -1,26 +1,24 @@
source 'https://rubygems.org'
gem 'unicorn'
-gem 'rails', '>=4.1.9', '< 4.2.0'
-gem 'pg', '>=0.17'
+gem 'rails', '~> 5.0', '>= 5.0.0.1'
+gem 'pg', '~> 0.18'
-gem 'jquery-rails', '>= 3.1.2'
+gem 'jquery-rails'
gem 'jquery-datatables-rails', git: 'https://github.com/rweng/jquery-datatable…
-#gem 'postgres_ext', :git => 'git://github.com/dockyard/postgres_ext.git'
gem 'kissfft'
gem 'rex', '~> 2.0.10'
gem 'bootstrap-sass', '>= 3.2.0'
-gem 'sass-rails', '~> 4.0.2'
-gem 'coffee-rails', '~> 4.0.1'
-gem 'uglifier', '>= 1.0.3'
-gem 'protected_attributes', '~> 1.0.7'
+gem 'sass-rails', '~> 5.0'
+gem 'coffee-rails', '~> 4.2'
+gem 'uglifier', '>= 1.3.0'
gem 'autoprefixer-rails'
-gem 'authlogic', '>= 3.4.0'
+gem 'authlogic', git: 'https://github.com/binarylogic/authlogic.git'
gem 'rails-settings-cached', '>= 0.4.1'
-gem "breadcrumbs_on_rails"
+gem 'breadcrumbs_on_rails'
gem 'formtastic', '>= 3.0.0'
gem 'formtastic-bootstrap', '>= 3.0.0'
@@ -28,7 +26,8 @@ gem 'therubyracer'
gem 'font-awesome-rails'
-gem 'reportable', :git => 'https://github.com/hdm/reportable.git', :require =>…
+gem 'reportable', git: 'https://github.com/hdm/reportable.git',
+ require: 'saulabs/reportable'
gem 'will_paginate', '~> 3.0'
gem 'will_paginate-bootstrap'
@@ -43,16 +42,21 @@ group :development do
gem 'rails_layout'
gem 'guard-livereload', '~> 2.4', require: false
gem 'annotate'
+ gem 'web-console'
end
group :development, :test do
gem 'factory_girl_rails'
gem 'faker'
- gem 'rspec-rails'
+ gem 'rspec-rails', '~> 3.5'
+ gem 'byebug', platform: :mri
end
group :test do
gem 'capybara'
+ gem 'pry'
gem 'database_cleaner'
gem 'launchy'
gem 'selenium-webdriver'
gem 'shoulda-matchers', '2.8'
end
+
+gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]
diff --git a/Gemfile.lock b/Gemfile.lock
@@ -1,4 +1,14 @@
GIT
+ remote: https://github.com/binarylogic/authlogic.git
+ revision: 28b13154af7a4850b52316275bd40233280ca516
+ specs:
+ authlogic (3.5.0)
+ activerecord (>= 3.2, < 5.1)
+ activesupport (>= 3.2, < 5.1)
+ request_store (~> 1.0)
+ scrypt (>= 1.2, < 4.0)
+
+GIT
remote: https://github.com/hdm/reportable.git
revision: 073bc1657ee301f4c961f14247ef1a58cf38bd1f
specs:
@@ -19,50 +29,57 @@ GIT
GEM
remote: https://rubygems.org/
specs:
- actionmailer (4.1.15)
- actionpack (= 4.1.15)
- actionview (= 4.1.15)
+ 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)
- actionpack (4.1.15)
- actionview (= 4.1.15)
- activesupport (= 4.1.15)
- rack (~> 1.5.2)
- rack-test (~> 0.6.2)
- actionview (4.1.15)
- activesupport (= 4.1.15)
+ 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)
- activemodel (4.1.15)
- activesupport (= 4.1.15)
- builder (~> 3.1)
- activerecord (4.1.15)
- activemodel (= 4.1.15)
- activesupport (= 4.1.15)
- arel (~> 5.0.0)
- activesupport (4.1.15)
- i18n (~> 0.6, >= 0.6.9)
- json (~> 1.7, >= 1.7.7)
+ 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)
minitest (~> 5.1)
- thread_safe (~> 0.1)
tzinfo (~> 1.1)
addressable (2.4.0)
annotate (2.7.1)
activerecord (>= 3.2, < 6.0)
rake (>= 10.4, < 12.0)
- arel (5.0.1.20140414130214)
- authlogic (3.4.6)
- activerecord (>= 3.2)
- activesupport (>= 3.2)
- request_store (~> 1.0)
- scrypt (>= 1.2, < 3.0)
- autoprefixer-rails (6.3.6.2)
+ arel (7.1.1)
+ autoprefixer-rails (6.4.1)
execjs
- bootstrap-sass (3.3.5)
- autoprefixer-rails (>= 5.0.0.1)
- sass (>= 3.2.19)
- breadcrumbs_on_rails (2.3.1)
+ bootstrap-sass (3.3.7)
+ autoprefixer-rails (>= 5.2.1)
+ sass (>= 3.3.4)
+ breadcrumbs_on_rails (3.0.1)
builder (3.2.2)
- capybara (2.7.1)
+ byebug (9.0.5)
+ capybara (2.8.1)
addressable
mime-types (>= 1.16)
nokogiri (>= 1.3.3)
@@ -72,14 +89,16 @@ GEM
childprocess (0.5.9)
ffi (~> 1.0, >= 1.0.11)
coderay (1.1.1)
- coffee-rails (4.0.1)
+ coffee-rails (4.2.1)
coffee-script (>= 2.2.0)
- railties (>= 4.0.0, < 5.0)
+ 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)
database_cleaner (1.5.3)
+ debug_inspector (0.0.2)
diff-lcs (1.2.5)
dynamic_form (1.1.4)
em-websocket (0.5.1)
@@ -93,10 +112,10 @@ GEM
factory_girl_rails (4.7.0)
factory_girl (~> 4.7.0)
railties (>= 3.0.0)
- faker (1.6.3)
+ faker (1.6.6)
i18n (~> 0.5)
- ffi (1.9.10)
- ffi-compiler (0.1.3)
+ ffi (1.9.14)
+ ffi-compiler (1.0.1)
ffi (>= 1.0.0)
rake
filesize (0.1.1)
@@ -107,6 +126,8 @@ GEM
actionpack (>= 3.2.13)
formtastic-bootstrap (3.1.1)
formtastic (>= 3.0)
+ globalid (0.3.7)
+ activesupport (>= 4.1.0)
guard (2.14.0)
formatador (>= 0.2.4)
listen (>= 2.7, < 4.0)
@@ -126,22 +147,22 @@ GEM
guard (~> 2.8)
guard-compat (~> 1.0)
multi_json (~> 1.8)
- guard-rails (0.7.2)
+ guard-rails (0.8.0)
guard (~> 2.11)
guard-compat (~> 1.0)
- guard-rspec (4.7.2)
+ guard-rspec (4.7.3)
guard (~> 2.1)
guard-compat (~> 1.1)
rspec (>= 2.99.0, < 4.0)
- hike (1.2.3)
http_parser.rb (0.6.0)
i18n (0.7.0)
- jquery-rails (3.1.4)
- railties (>= 3.0, < 5.0)
+ jquery-rails (4.2.1)
+ rails-dom-testing (>= 1, < 3)
+ railties (>= 4.2.0)
thor (>= 0.14, < 2.0)
jsobfu (0.4.1)
rkelly-remix (= 0.0.6)
- json (1.8.3)
+ json (2.0.2)
kgio (2.10.0)
kissfft (0.0.2)
launchy (2.4.3)
@@ -151,6 +172,8 @@ GEM
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.4)
mime-types (>= 1.16, < 4)
@@ -163,43 +186,50 @@ GEM
minitest (5.9.0)
multi_json (1.12.1)
nenv (0.3.0)
+ nio4r (1.2.1)
nokogiri (1.6.8)
mini_portile2 (~> 2.1.0)
pkg-config (~> 1.1.7)
- notiffany (0.1.0)
+ notiffany (0.1.1)
nenv (~> 0.1)
shellany (~> 0.0)
pg (0.18.4)
pkg-config (1.1.7)
- protected_attributes (1.0.9)
- activemodel (>= 4.0.1, < 5.0)
- pry (0.10.3)
+ pry (0.10.4)
coderay (~> 1.1.0)
method_source (~> 0.8.1)
slop (~> 3.4)
psych_shield (0.0.4)
- rack (1.5.5)
+ rack (2.0.1)
rack-test (0.6.3)
rack (>= 1.0)
- rails (4.1.15)
- actionmailer (= 4.1.15)
- actionpack (= 4.1.15)
- actionview (= 4.1.15)
- activemodel (= 4.1.15)
- activerecord (= 4.1.15)
- activesupport (= 4.1.15)
+ 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.1.15)
- sprockets-rails (~> 2.0)
- rails-settings-cached (0.4.1)
- rails (>= 4.0.0)
- rails_layout (1.0.29)
- railties (4.1.15)
- actionpack (= 4.1.15)
- activesupport (= 4.1.15)
+ 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-html-sanitizer (1.0.3)
+ loofah (~> 2.0)
+ rails-settings-cached (0.6.5)
+ rails (>= 4.2.0)
+ rails_layout (1.0.30)
+ 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)
- raindrops (0.16.0)
+ raindrops (0.17.0)
rake (11.2.2)
rb-fsevent (0.9.7)
rb-inotify (0.9.7)
@@ -221,7 +251,7 @@ GEM
rspec-core (~> 3.5.0)
rspec-expectations (~> 3.5.0)
rspec-mocks (~> 3.5.0)
- rspec-core (3.5.0)
+ rspec-core (3.5.3)
rspec-support (~> 3.5.0)
rspec-expectations (3.5.0)
diff-lcs (>= 1.2.0, < 2.0)
@@ -229,7 +259,7 @@ GEM
rspec-mocks (3.5.0)
diff-lcs (>= 1.2.0, < 2.0)
rspec-support (~> 3.5.0)
- rspec-rails (3.5.0)
+ rspec-rails (3.5.2)
actionpack (>= 3.0)
activesupport (>= 3.0)
railties (>= 3.0)
@@ -238,16 +268,17 @@ GEM
rspec-mocks (~> 3.5.0)
rspec-support (~> 3.5.0)
rspec-support (3.5.0)
- ruby_dep (1.3.1)
+ ruby_dep (1.4.0)
rubyzip (1.2.0)
- sass (3.2.19)
- sass-rails (4.0.5)
- railties (>= 4.0.0, < 5.0)
- sass (~> 3.2.2)
- sprockets (~> 2.8, < 3.0)
- sprockets-rails (~> 2.0)
- scrypt (2.1.1)
- ffi-compiler (>= 0.0.2)
+ sass (3.4.22)
+ sass-rails (5.0.6)
+ railties (>= 4.0.0, < 6)
+ sass (~> 3.1)
+ sprockets (>= 2.8, < 4.0)
+ sprockets-rails (>= 2.0, < 4.0)
+ tilt (>= 1.1, < 3)
+ scrypt (3.0.3)
+ ffi-compiler (>= 1.0.0)
rake
selenium-webdriver (2.53.4)
childprocess (~> 0.5)
@@ -257,29 +288,35 @@ GEM
shoulda-matchers (2.8.0)
activesupport (>= 3.0.0)
slop (3.6.0)
- sprockets (2.12.4)
- hike (~> 1.2)
- multi_json (~> 1.0)
- rack (~> 1.0)
- tilt (~> 1.1, != 1.3.0)
- sprockets-rails (2.3.3)
- actionpack (>= 3.0)
- activesupport (>= 3.0)
- sprockets (>= 2.8, < 4.0)
+ sprockets (3.7.0)
+ concurrent-ruby (~> 1.0)
+ rack (> 1, < 3)
+ sprockets-rails (3.2.0)
+ actionpack (>= 4.0)
+ activesupport (>= 4.0)
+ sprockets (>= 3.0.0)
therubyracer (0.12.2)
libv8 (~> 3.16.14.0)
ref
thor (0.19.1)
thread_safe (0.3.5)
- tilt (1.4.1)
+ tilt (2.0.5)
tzinfo (1.2.2)
thread_safe (~> 0.1)
- uglifier (3.0.0)
+ uglifier (3.0.2)
execjs (>= 0.3.0, < 3)
unicorn (5.1.0)
kgio (~> 2.6)
raindrops (~> 0.7)
+ web-console (3.3.1)
+ actionview (>= 5.0)
+ activemodel (>= 5.0)
+ debug_inspector
+ railties (>= 5.0)
websocket (1.2.3)
+ websocket-driver (0.6.4)
+ websocket-extensions (>= 0.1.0)
+ websocket-extensions (0.1.2)
will_paginate (3.1.0)
will_paginate-bootstrap (1.0.1)
will_paginate (>= 3.0.3)
@@ -291,12 +328,13 @@ PLATFORMS
DEPENDENCIES
annotate
- authlogic (>= 3.4.0)
+ authlogic!
autoprefixer-rails
bootstrap-sass (>= 3.2.0)
breadcrumbs_on_rails
+ byebug
capybara
- coffee-rails (~> 4.0.1)
+ coffee-rails (~> 4.2)
database_cleaner
dynamic_form (>= 1.1.4)
factory_girl_rails
@@ -309,27 +347,29 @@ DEPENDENCIES
guard-rails
guard-rspec
jquery-datatables-rails!
- jquery-rails (>= 3.1.2)
+ jquery-rails
kissfft
launchy
- pg (>= 0.17)
- protected_attributes (~> 1.0.7)
+ pg (~> 0.18)
+ pry
psych_shield
- rails (>= 4.1.9, < 4.2.0)
+ rails (~> 5.0, >= 5.0.0.1)
rails-settings-cached (>= 0.4.1)
rails_layout
reportable!
rex (~> 2.0.10)
- rspec-rails
- sass-rails (~> 4.0.2)
+ rspec-rails (~> 3.5)
+ sass-rails (~> 5.0)
scrypt
selenium-webdriver
shoulda-matchers (= 2.8)
therubyracer
- uglifier (>= 1.0.3)
+ tzinfo-data
+ uglifier (>= 1.3.0)
unicorn
+ web-console
will_paginate (~> 3.0)
will_paginate-bootstrap
BUNDLED WITH
- 1.11.2
+ 1.12.5
diff --git a/README.md b/README.md
@@ -1,5 +1,5 @@
-WarVOX
-==
+# WarVOX
+
WarVOX is released under a BSD-style license. See docs/LICENSE for more detail…
The latest version of this software is available from http://github.com/rapid7…
@@ -7,22 +7,20 @@ The latest version of this software is available from http://…
Questions and suggestions can be sent to:
x(at)hdm(dot)io
-Installing
---
-WarVOX 2.0.0 is still in development and the installation process is not ideal…
+ - [Installing](#installing)
-**DO NOT USE WARVOX 2.0.0-dev YET!**
+##installing
-WarVOX requires a Linux operating system, preferably Ubuntu or Debian, but Kal…
+WarVOX requires a Linux operating system, preferably Ubuntu or Debian.
WarVOX requires PostgreSQL 9.1 or newer with the "contrib" package installed f…
To get started, install the OS-level dependencies:
$ sudo apt-get install gnuplot lame build-essential libssl-dev libcurl…
- postgresql postgresql-contrib postgresql-common git-core curl libpq …
+ postgresql postgresql-contrib postgresql-common git-core curl libpq-…
-Install RVM to obtain Ruby 2.1.5 or later
+Install RVM to obtain Ruby 2.2.5 or later
$ \curl -L https://get.rvm.io | bash -s stable --autolibs=3 --rails
@@ -30,17 +28,17 @@ After RVM is installed you need to run the rvm script provi…
$ source /usr/local/rvm/scripts/rvm
-In case you have not installed Ruby 1.9.3 or later by now, do so using RVM.
+In case you have not installed Ruby 2.2.5 or later by now, do so using RVM.
- $ rvm install ruby-2.1
+ $ rvm install ruby-2.2.5
Clone this repository to the location you want to install WarVOX:
- $ git clone git://github.com/rapid7/warvox.git /home/warvox
+ $ git clone git://github.com/rapid7/warvox.git /opt/warvox
Configure WarVOX:
- $ cd /home/warvox
+ $ cd /opt/warvox
$ bundle install
$ make
@@ -62,6 +60,14 @@ Copy the example database configuration to database.yml:
$ cp config/database.yml.example config/database.yml
+Copy the example secrets configuration to secrets.yml:
+
+ $ cp config/secrets.yml.example config/secrets.yml
+
+Create a new secrect token:
+
+ $ rake secret > config/session.key
+
Modify config/database.yml to include the password set previously
Initialize the WarVOX database:
@@ -70,12 +76,17 @@ Initialize the WarVOX database:
Add an admin account to WarVOX
- $ bin/adduser admin
+ $ bin/adduser admin randompass
Start the WarVOX daemons:
$ bin/warvox.rb
+or to bind WarVox to all interfaces:
+
+ $ bin/warvox.rb --address 0.0.0.0
+
Access the web interface at http://127.0.0.1:7777/
At this point you can configure a new IAX2 provider, create a project, and sta…
+
diff --git a/app/assets/config/manifest.js b/app/assets/config/manifest.js
@@ -0,0 +1,3 @@
+//= link_tree ../images
+//= link_directory ../javascripts .js
+//= link_directory ../stylesheets .css
diff --git a/config/initializers/bootstrap.rb b/app/assets/images/.keep
diff --git a/app/controllers/analyze_controller.rb b/app/controllers/analyze_co…
@@ -2,8 +2,8 @@ class AnalyzeController < ApplicationController
def index
@jobs = Job.order('id DESC').paginate(
- :page => params[:page],
- :per_page => 30
+ page: params[:page],
+ per_page: 30
)
end
@@ -13,12 +13,12 @@ class AnalyzeController < ApplicationController
@shown = params[:show]
if request.format.html?
- ltypes = Call.select('DISTINCT line_type').where(:job_id => @job_id).map…
+ ltypes = Call.select('DISTINCT line_type').where(job_id: @job_id).map{|r…
res_types = {}
ltypes.each do |k|
next if not k
- res_types[k.capitalize.to_sym] = Call.where(:job_id => @job_id, :line_…
+ res_types[k.capitalize.to_sym] = Call.where(job_id: @job_id, line_type…
end
@lines_by_type = res_types
@@ -51,7 +51,7 @@ class AnalyzeController < ApplicationController
respond_to do |format|
format.html
format.json {
- render :content_type => 'application/json', :json => render_to_string(…
+ render content_type: 'application/json', json: render_to_string(partia…
}
end
@@ -60,9 +60,9 @@ class AnalyzeController < ApplicationController
def view_matches
@result = Call.find(params[:call_id])
@match_scopes = [
- { :scope => 'job', :label => 'This Job' },
- { :scope => 'project', :label => 'This Project' },
- { :scope => 'global', :label => 'All Projects' }
+ { scope: 'job', label: 'This Job' },
+ { scope: 'project', label: 'This Project' },
+ { scope: 'global', label: 'All Projects' }
]
@job_id = params[:job_id]
@@ -111,7 +111,7 @@ class AnalyzeController < ApplicationController
respond_to do |format|
format.html
format.json {
- render :content_type => 'application/json', :json => render_to_string(…
+ render content_type: 'application/json', json: render_to_string(partia…
}
end
@@ -122,7 +122,7 @@ class AnalyzeController < ApplicationController
cpath = nil
cdata = "File not found"
- res = CallMedium.where(:call_id => params[:result_id].to_i).first
+ res = CallMedium.where(call_id: params[:result_id].to_i).first
if res
case params[:rtype]
@@ -153,7 +153,7 @@ class AnalyzeController < ApplicationController
end
end
- send_data(cdata, :type => ctype, :disposition => 'inline')
+ send_data(cdata, type: ctype, disposition: 'inline')
end
#
diff --git a/app/controllers/application_controller.rb b/app/controllers/applic…
@@ -1,9 +1,9 @@
class ApplicationController < ActionController::Base
- protect_from_forgery
+ protect_from_forgery with: :exception
helper :all
helper_method :current_user_session, :current_user
- before_filter :require_user, :load_project
+ before_action :require_user, :load_project
add_breadcrumb :projects, :root_path
include ActionView::Helpers::NumberHelper
@@ -52,9 +52,9 @@ private
return true unless current_user
if params[:project_id]
- @project = Project.where(:id => params[:project_id].to_i).first
+ @project = Project.where(id: params[:project_id].to_i).first
elsif session[:project_id]
- @project = Project.where(:id => session[:project_id].to_i).first
+ @project = Project.where(id: session[:project_id].to_i).first
end
if @project and @project.id and not (session[:project_id] and session[:pro…
diff --git a/app/controllers/calls_controller.rb b/app/controllers/calls_contro…
@@ -1,40 +1,40 @@
class CallsController < ApplicationController
-
# GET /calls
# GET /calls.xml
def index
@jobs = @project.jobs.order('id DESC').where('task = ? AND completed_at IS…
- :page => params[:page],
- :per_page => 30
- )
+ page: params[:page],
+ per_page: 30
+ )
respond_to do |format|
format.html # index.html.erb
- format.xml { render :xml => @calls }
+ format.xml { render xml: @calls }
end
end
# GET /calls/1/view
# GET /calls/1/view.xml
def view
- @calls = Call.order('id DESC').where(:job_id => params[:id]).paginate(
- :page => params[:page],
- :per_page => 30
- )
-
- unless @calls and @calls.length > 0
- redirect_to :action => :index
- return
- end
- @call_results = {
- :Timeout => Call.count(:conditions =>['job_id = ? and answered = ?', para…
- :Busy => Call.count(:conditions =>['job_id = ? and busy = ?', params[:…
- :Answered => Call.count(:conditions =>['job_id = ? and answered = ?', para…
- }
+ @calls = Call.order('id DESC').where(job_id: params[:id]).paginate(
+ page: params[:page],
+ per_page: 30
+ )
+
+ unless @calls && [email protected]?
+ redirect_to action: :index
+ return
+ end
- respond_to do |format|
+ @call_results = {
+ Timeout: Call.count(conditions: ['job_id = ? and answered = ?', params[:…
+ Busy: Call.count(conditions: ['job_id = ? and busy = ?', params[:id], tr…
+ Answered: Call.count(conditions: ['job_id = ? and answered = ?', params[…
+ }
+
+ respond_to do |format|
format.html # index.html.erb
- format.xml { render :xml => @calls }
+ format.xml { render xml: @calls }
end
end
@@ -43,14 +43,14 @@ class CallsController < ApplicationController
def show
@call = Call.find(params[:id])
- unless @call
- redirect_to :action => :index
- return
- end
+ unless @call
+ redirect_to action: :index
+ return
+ end
respond_to do |format|
format.html # show.html.erb
- format.xml { render :xml => @call }
+ format.xml { render xml: @call }
end
end
@@ -61,7 +61,7 @@ class CallsController < ApplicationController
respond_to do |format|
format.html # new.html.erb
- format.xml { render :xml => @call }
+ format.xml { render xml: @call }
end
end
@@ -79,10 +79,10 @@ class CallsController < ApplicationController
if @call.save
flash[:notice] = 'Call was successfully created.'
format.html { redirect_to(@call) }
- format.xml { render :xml => @call, :status => :created, :location => …
+ format.xml { render xml: @call, status: :created, location: @call }
else
- format.html { render :action => "new" }
- format.xml { render :xml => @call.errors, :status => :unprocessable_e…
+ format.html { render action: 'new' }
+ format.xml { render xml: @call.errors, status: :unprocessable_entity }
end
end
end
@@ -98,8 +98,8 @@ class CallsController < ApplicationController
format.html { redirect_to(@call) }
format.xml { head :ok }
else
- format.html { render :action => "edit" }
- format.xml { render :xml => @call.errors, :status => :unprocessable_e…
+ format.html { render action: 'edit' }
+ format.xml { render xml: @call.errors, status: :unprocessable_entity }
end
end
end
@@ -107,14 +107,12 @@ class CallsController < ApplicationController
# DELETE /calls/1
# DELETE /calls/1.xml
def destroy
-
@job = Job.find(params[:id])
- @job.destroy
+ @job.destroy
respond_to do |format|
- format.html { redirect_to :action => 'index' }
+ format.html { redirect_to action: 'index' }
format.xml { head :ok }
end
end
-
end
diff --git a/config/initializers/bootstrap.rb b/app/controllers/concerns/.keep
diff --git a/app/controllers/home_controller.rb b/app/controllers/home_controll…
@@ -18,9 +18,9 @@ class HomeController < ApplicationController
def check
@has_project = ( Project.count > 0 )
- @has_provider = ( Provider.where(:enabled => true).count > 0 )
- @has_job = ( Job.where(:task => 'dialer').count > 0 )
- @has_result = ( Call.where(:answered => true ).count > 0 )
+ @has_provider = ( Provider.where(enabled: true).count > 0 )
+ @has_job = ( Job.where(task: 'dialer').count > 0 )
+ @has_result = ( Call.where(answered: true ).count > 0 )
@has_analysis = ( Call.where('analysis_completed_at IS NOT NULL').count > …
end
diff --git a/app/controllers/jobs_controller.rb b/app/controllers/jobs_controll…
@@ -1,24 +1,19 @@
class JobsController < ApplicationController
-
require 'shellwords'
def index
- @reload_interval = 20000
+ @reload_interval = 20_000
- @submitted_jobs = Job.where(:status => ['submitted', 'scheduled'], :comple…
- @active_jobs = Job.where(:status => 'running', :completed_at => nil)
- @inactive_jobs = Job.order('id DESC').where('status NOT IN (?)', ['submit…
- :page => params[:page],
- :per_page => 30
+ @submitted_jobs = Job.where(status: %w(submitted scheduled), completed_at:…
+ @active_jobs = Job.where(status: 'running', completed_at: nil)
+ @inactive_jobs = Job.order('id DESC').where('status NOT IN (?)', %w(submi…
+ page: params[:page],
+ per_page: 30
)
- if @active_jobs.length > 0
- @reload_interval = 5000
- end
+ @reload_interval = 5000 unless @active_jobs.empty?
- if @submitted_jobs.length > 0
- @reload_interval = 3000
- end
+ @reload_interval = 3000 unless @submitted_jobs.empty?
respond_to do |format|
format.html
@@ -27,8 +22,8 @@ class JobsController < ApplicationController
def results
@jobs = @project.jobs.order('id DESC').where('(task = ? OR task = ?) AND c…
- :page => params[:page],
- :per_page => 30
+ page: params[:page],
+ per_page: 30
)
respond_to do |format|
@@ -40,16 +35,17 @@ class JobsController < ApplicationController
@job = Job.find(params[:id])
@call_results = {
- :Timeout => @job.calls.count(:conditions => { :answered => false }),
- :Busy => @job.calls.count(:conditions => { :busy => true }),
- :Answered => @job.calls.count(:conditions => { :answered => true }),
+ Timeout: @job.calls.where(answered: false ).count,
+ Busy: @job.calls.where(busy: true).count,
+ Answered: @job.calls.where(answered: true).count,
}
- sort_by = params[:sort_by] || 'number'
+
+ sort_by = params[:sort_by] || 'number'
sort_dir = params[:sort_dir] || 'asc'
@results = []
- @results_total_count = @job.calls.count()
+ @results_total_count = @job.calls.count
if request.format.json?
if params[:iDisplayLength] == '-1'
@@ -61,14 +57,14 @@ class JobsController < ApplicationController
calls_search
@results = @job.calls.includes(:provider).where(@search_conditions).limi…
- @results_total_display_count = @job.calls.includes(:provider).where(@sea…
+ @results_total_display_count = @job.calls.includes(:provider).where(@sea…
end
respond_to do |format|
format.html
- format.json {
- render :content_type => 'application/json', :json => render_to_string(…
- }
+ format.json do
+ render content_type: 'application/json', json: render_to_string(partia…
+ end
end
end
@@ -77,20 +73,20 @@ class JobsController < ApplicationController
# Returns the SQL String.
def calls_sort_option
column = case params[:iSortCol_0].to_s
- when '1'
- 'number'
- when '2'
- 'caller_id'
- when '3'
- 'providers.name'
- when '4'
- 'answered'
- when '5'
- 'busy'
- when '6'
- 'audio_length'
- when '7'
- 'ring_length'
+ when '1'
+ 'number'
+ when '2'
+ 'caller_id'
+ when '3'
+ 'providers.name'
+ when '4'
+ 'answered'
+ when '5'
+ 'busy'
+ when '6'
+ 'audio_length'
+ when '7'
+ 'ring_length'
end
column + ' ' + (params[:sSortDir_0] =~ /^A/i ? 'asc' : 'desc') if column
end
@@ -98,41 +94,45 @@ class JobsController < ApplicationController
def calls_search
@search_conditions = []
terms = params[:sSearch].to_s
- terms = Shellword.shellwords(terms) rescue terms.split(/\s+/)
- where = ""
+ terms = begin
+ Shellword.shellwords(terms)
+ rescue
+ terms.split(/\s+/)
+ end
+ where = ''
param = []
- glue = ""
+ glue = ''
terms.each do |w|
- next if w.downcase == 'undefined'
+ next if w.casecmp('undefined').zero?
where << glue
case w
- when 'answered'
- where << "answered = ? "
- param << true
- when 'busy'
- where << "busy = ? "
- param << true
- else
- where << "( number ILIKE ? OR caller_id ILIKE ? ) "
- param << "%#{w}%"
- param << "%#{w}%"
+ when 'answered'
+ where << 'answered = ? '
+ param << true
+ when 'busy'
+ where << 'busy = ? '
+ param << true
+ else
+ where << '( number ILIKE ? OR caller_id ILIKE ? ) '
+ param << "%#{w}%"
+ param << "%#{w}%"
end
- glue = "AND " if glue.empty?
- @search_conditions = [ where, *param ]
+ glue = 'AND ' if glue.empty?
+ @search_conditions = [where, *param]
end
end
def new_dialer
@job = Job.new
- if @project
- @job.project = @project
- else
- @job.project = Project.last
- end
+ @job.project = if @project
+ @project
+ else
+ Project.last
+ end
if params[:result_ids]
- nums = ""
- Call.find_each(:conditions => { :id => params[:result_ids] }) do |call|
+ nums = ''
+ Call.find_each(conditions: { id: params[:result_ids] }) do |call|
nums << call.number + "\n"
end
@job.range = nums
@@ -140,13 +140,16 @@ class JobsController < ApplicationController
respond_to do |format|
format.html
- end
+ end
end
def purge_calls
- Call.delete_all(:id => params[:result_ids])
- CallMedium.delete_all(:call_id => params[:result_ids])
- flash[:notice] = "Purged #{params[:result_ids].length} calls"
+ unless params[:result_ids].blank?
+ Call.delete_all(id: params[:result_ids])
+ CallMedium.delete_all(call_id: params[:result_ids])
+ flash[:notice] = "Purged #{params[:result_ids].length} calls"
+ end
+
if params[:id]
@job = Job.find(params[:id])
redirect_to view_results_path(@job.project_id, @job.id)
@@ -156,37 +159,37 @@ class JobsController < ApplicationController
end
def dialer
- @job = Job.new(params[:job])
+ @job = Job.new(job_params)
@job.created_by = @current_user.login
@job.task = 'dialer'
@job.range.to_s.gsub!(/[^0-9X:,\n]/, '')
- @job.cid_mask.to_s.gsub!(/[^0-9X]/, '') if @job.cid_mask != "SELF"
+ @job.cid_mask.to_s.gsub!(/[^0-9X]/, '') if @job.cid_mask != 'SELF'
- if @job.range_file.to_s != ""
+ if @job.range_file.to_s != ''
@job.range = @job.range_file.read.gsub(/[^0-9X:,\n]/, '')
end
respond_to do |format|
if @job.schedule
flash[:notice] = 'Job was successfully created.'
- format.html { redirect_to :action => :index }
+ format.html { redirect_to action: :index }
else
- format.html { render :action => "new_dialer" }
+ format.html { render action: 'new_dialer' }
end
end
end
def new_analyze
@job = Job.new
- if @project
- @job.project = @project
- else
- @job.project = Project.last
- end
+ @job.project = if @project
+ @project
+ else
+ Project.last
+ end
if params[:result_ids]
- nums = ""
- Call.find_each(:conditions => { :id => params[:result_ids] }) do |call|
+ nums = ''
+ Call.find_each(conditions: { id: params[:result_ids] }) do |call|
nums << call.number + "\n"
end
@job.range = nums
@@ -194,20 +197,20 @@ class JobsController < ApplicationController
respond_to do |format|
format.html
- end
+ end
end
def new_identify
@job = Job.new
- if @project
- @job.project = @project
- else
- @job.project = Project.last
- end
+ @job.project = if @project
+ @project
+ else
+ Project.last
+ end
if params[:result_ids]
- nums = ""
- Call.find_each(:conditions => { :id => params[:result_ids] }) do |call|
+ nums = ''
+ Call.find_each(conditions: { id: params[:result_ids] }) do |call|
nums << call.number + "\n"
end
@job.range = nums
@@ -215,15 +218,13 @@ class JobsController < ApplicationController
respond_to do |format|
format.html
- end
+ end
end
def reanalyze_job
@job = Job.find(params[:id])
- @new = Job.new({
- :task => 'analysis', :scope => 'job', :target_id => @job.id, :force => t…
- :project_id => @project.id, :status => 'submitted'
- })
+ @new = Job.new(task: 'analysis', scope: 'job', target_id: @job.id, force: …
+ project_id: @project.id, status: 'submitted')
@new.created_by = @current_user.login
respond_to do |format|
if @new.schedule
@@ -241,16 +242,12 @@ class JobsController < ApplicationController
# Handle analysis of specific call IDs via checkbox submission
if params[:result_ids]
- @new = Job.new({
- :task => 'analysis', :scope => 'calls', :target_ids => params[:result_…
- :project_id => @project.id, :status => 'submitted'
- })
+ @new = Job.new(task: 'analysis', scope: 'calls', target_ids: params[:res…
+ project_id: @project.id, status: 'submitted')
else
- # Otherwise analyze the entire Job
- @new = Job.new({
- :task => 'analysis', :scope => 'job', :target_id => @job.id,
- :project_id => @project.id, :status => 'submitted'
- })
+ # Otherwise analyze the entire Job
+ @new = Job.new(task: 'analysis', scope: 'job', target_id: @job.id,
+ project_id: @project.id, status: 'submitted')
end
@new.created_by = @current_user.login
@@ -266,21 +263,15 @@ class JobsController < ApplicationController
end
end
-
def analyze_project
-
# Handle analysis of specific call IDs via checkbox submission
if params[:result_ids]
- @new = Job.new({
- :task => 'analysis', :scope => 'calls', :target_ids => params[:result_…
- :project_id => @project.id, :status => 'submitted'
- })
+ @new = Job.new(task: 'analysis', scope: 'calls', target_ids: params[:res…
+ project_id: @project.id, status: 'submitted')
else
- # Otherwise analyze the entire Project
- @new = Job.new({
- :task => 'analysis', :scope => 'project', :target_id => @project.id,
- :project_id => @project.id, :status => 'submitted'
- })
+ # Otherwise analyze the entire Project
+ @new = Job.new(task: 'analysis', scope: 'project', target_id: @project.i…
+ project_id: @project.id, status: 'submitted')
end
@new.created_by = @current_user.login
@@ -301,16 +292,12 @@ class JobsController < ApplicationController
# Handle identification of specific lines via checkbox submission
if params[:result_ids]
- @new = Job.new({
- :task => 'identify', :scope => 'calls', :target_ids => params[:result_…
- :project_id => @project.id, :status => 'submitted'
- })
+ @new = Job.new(task: 'identify', scope: 'calls', target_ids: params[:res…
+ project_id: @project.id, status: 'submitted')
else
- # Otherwise analyze the entire Job
- @new = Job.new({
- :task => 'identify', :scope => 'job', :target_id => @job.id,
- :project_id => @project.id, :status => 'submitted'
- })
+ # Otherwise analyze the entire Job
+ @new = Job.new(task: 'identify', scope: 'job', target_id: @job.id,
+ project_id: @project.id, status: 'submitted')
end
@new.created_by = @current_user.login
@@ -329,8 +316,8 @@ class JobsController < ApplicationController
def stop
@job = Job.find(params[:id])
@job.stop
- flash[:notice] = "Job has been cancelled"
- redirect_to :action => 'index'
+ flash[:notice] = 'Job has been cancelled'
+ redirect_to action: 'index'
end
def destroy
@@ -343,4 +330,9 @@ class JobsController < ApplicationController
end
end
+ private
+
+ def job_params
+ params.require(:job).permit(:project_id, :range, :range_file, :seconds, :l…
+ end
end
diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_…
@@ -2,34 +2,34 @@ class ProjectsController < ApplicationController
def index
@projects = Project.order('id DESC').paginate(
- :page => params[:page],
- :per_page => 10
+ page: params[:page],
+ per_page: 10
)
@new_project = Project.new
respond_to do |format|
format.html
- format.xml { render :xml => @projects }
+ format.xml { render xml: @projects }
end
end
def show
@project = Project.find(params[:id])
- @active_jobs = @project.jobs.where(:status => 'running', :completed_at => …
+ @active_jobs = @project.jobs.where(status: 'running', completed_at: nil)
@inactive_jobs = @project.jobs.order('id DESC').where('status NOT IN (?)'…
- :page => params[:page],
- :per_page => 30
+ page: params[:page],
+ per_page: 30
)
@boxes = {
- :called => { :cnt => @project.calls.count },
- :answered => { :cnt => @project.calls.where(:answered => true).count },
- :analyzed => { :cnt => @project.calls.where('analysis_completed_at IS N…
- :voice => { :cnt => @project.lines.where(:line_type => 'voice').coun…
- :voicemail => { :cnt => @project.lines.where(:line_type => 'voicemail').…
- :fax => { :cnt => @project.lines.where(:line_type => 'fax').count …
- :modem => { :cnt => @project.lines.where(:line_type => 'modem').coun…
+ called: { cnt: @project.calls.count },
+ answered: { cnt: @project.calls.where(answered: true).count },
+ analyzed: { cnt: @project.calls.where('analysis_completed_at IS NOT NULL…
+ voice: { cnt: @project.lines.where(line_type: 'voice').count },
+ voicemail: { cnt: @project.lines.where(line_type: 'voicemail').count },
+ fax: { cnt: @project.lines.where(line_type: 'fax').count },
+ modem: { cnt: @project.lines.where(line_type: 'modem').count }
}
if @boxes[:called][:cnt] == 0
@@ -78,7 +78,7 @@ class ProjectsController < ApplicationController
respond_to do |format|
format.html
- format.xml { render :xml => @project }
+ format.xml { render xml: @project }
end
end
@@ -86,7 +86,7 @@ class ProjectsController < ApplicationController
@new_project = Project.new
respond_to do |format|
format.html
- format.xml { render :xml => @new_project }
+ format.xml { render xml: @new_project }
end
end
@@ -96,16 +96,16 @@ class ProjectsController < ApplicationController
end
def create
- @new_project = Project.new(params[:project])
+ @new_project = Project.new(project_params)
@new_project.created_by = current_user.login
respond_to do |format|
if @new_project.save
format.html { redirect_to(project_path(@new_project)) }
- format.xml { render :xml => @project, :status => :created, :location …
+ format.xml { render xml: @project, status: :created, location: @new_p…
else
- format.html { render :action => "new" }
- format.xml { render :xml => @new_project.errors, :status => :unproces…
+ format.html { render action: "new" }
+ format.xml { render xml: @new_project.errors, status: :unprocessable_…
end
end
end
@@ -114,12 +114,12 @@ class ProjectsController < ApplicationController
@project = Project.find(params[:id])
respond_to do |format|
- if @project.update_attributes(params[:project])
+ if @project.update_attributes(project_params)
format.html { redirect_to projects_path }
format.xml { head :ok }
else
- format.html { render :action => "edit" }
- format.xml { render :xml => @project.errors, :status => :unprocessabl…
+ format.html { render action: "edit" }
+ format.xml { render xml: @project.errors, status: :unprocessable_enti…
end
end
end
@@ -133,4 +133,10 @@ class ProjectsController < ApplicationController
format.xml { head :ok }
end
end
+
+ private
+
+ def project_params
+ params.require(:project).permit(:name, :description)
+ end
end
diff --git a/app/controllers/providers_controller.rb b/app/controllers/provider…
@@ -3,8 +3,8 @@ class ProvidersController < ApplicationController
def index
@providers = Provider.order('id DESC').paginate(
- :page => params[:page],
- :per_page => 10
+ page: params[:page],
+ per_page: 10
)
@new_provider = Provider.new
@@ -12,38 +12,38 @@ class ProvidersController < ApplicationController
respond_to do |format|
format.html # index.html.erb
- format.xml { render :xml => @providers }
+ format.xml { render xml: @providers }
end
end
def new
@provider = Provider.new
- @provider.enabled = true
- @provider.port = 4569
+ @provider.enabled = true
+ @provider.port = 4569
respond_to do |format|
format.html # new.html.erb
- format.xml { render :xml => @provider }
+ format.xml { render xml: @provider }
end
end
def edit
@provider = Provider.find(params[:id])
- @provider.pass = "********"
+ @provider.pass = "********"
end
def create
- @provider = Provider.new(params[:provider])
- @provider.enabled = true
+ @provider = Provider.new(provider_params)
+ @provider.enabled = true
respond_to do |format|
if @provider.save
flash[:notice] = 'Provider was successfully created.'
format.html { redirect_to providers_path }
- format.xml { render :xml => @provider, :status => :created, :location…
+ format.xml { render xml: @provider, status: :created, location: provi…
else
- format.html { render :action => "new" }
- format.xml { render :xml => @provider.errors, :status => :unprocessab…
+ format.html { render action: "new" }
+ format.xml { render xml: @provider.errors, status: :unprocessable_ent…
end
end
end
@@ -52,19 +52,19 @@ class ProvidersController < ApplicationController
def update
@provider = Provider.find(params[:id])
- # Dont set the password if its the placeholder
- if params[:provider] and params[:provider][:pass] and params[:provider][:pas…
- params[:provider].delete(:pass)
- end
+ # Dont set the password if its the placeholder
+ if params[:provider] and params[:provider][:pass] and params[:provider][:p…
+ params[:provider].delete(:pass)
+ end
respond_to do |format|
- if @provider.update_attributes(params[:provider])
+ if @provider.update_attributes(provider_params)
flash[:notice] = 'Provider was successfully updated.'
format.html { redirect_to providers_path }
format.xml { head :ok }
else
- format.html { render :action => "edit" }
- format.xml { render :xml => @provider.errors, :status => :unprocessab…
+ format.html { render action: "edit" }
+ format.xml { render xml: @provider.errors, status: :unprocessable_ent…
end
end
end
@@ -78,4 +78,10 @@ class ProvidersController < ApplicationController
format.xml { head :ok }
end
end
+
+ private
+
+ def provider_params
+ params.require(:provider).permit(:name, :host, :port, :user, :pass, :lines)
+ end
end
diff --git a/app/controllers/user_sessions_controller.rb b/app/controllers/user…
@@ -1,6 +1,6 @@
class UserSessionsController < ApplicationController
- before_filter :require_no_user, :only => [:new, :create]
- before_filter :require_user, :only => :destroy
+ before_action :require_no_user, only: [:new, :create]
+ before_action :require_user, only: :destroy
layout 'login'
def new
@@ -8,16 +8,22 @@ class UserSessionsController < ApplicationController
end
def create
- @user_session = UserSession.new(params[:user_session])
+ @user_session = UserSession.new(user_session_params)
if @user_session.save
redirect_back_or_default projects_path
else
- render :action => :new
+ render action: :new
end
end
def destroy
current_user_session.destroy
- redirect_back_or_default login_url
+ redirect_back_or_default login_path
+ end
+
+ private
+
+ def user_session_params
+ params.require(:user_session).permit(:login, :password)
end
end
diff --git a/app/controllers/users_controller.rb b/app/controllers/users_contro…
@@ -1,18 +1,18 @@
class UsersController < ApplicationController
- before_filter :require_no_user, :only => [:new, :create]
- before_filter :require_user, :only => [:show, :edit, :update]
+ before_action :require_no_user, only: [:new, :create]
+ before_action :require_user, only: [:show, :edit, :update]
def new
@user = User.new
end
def create
- @user = User.new(params[:user])
+ @user = User.new(user_params)
if @user.save
flash[:notice] = "Account registered!"
redirect_back_or_default user_path(@user)
else
- render :action => :new
+ render action: :new
end
end
@@ -26,11 +26,17 @@ class UsersController < ApplicationController
def update
@user = @current_user # makes our views "cleaner" and more consistent
- if @user.update_attributes(params[:user])
+ if @user.update_attributes(user_params)
flash[:notice] = "Account updated!"
- redirect_to account_url
+ redirect_to user_path(@user)
else
- render :action => :edit
+ render action: :edit
end
end
+
+ private
+
+ def user_params
+ params.require(:user).permit(:login, :password, :password_confirmation)
+ end
end
diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper…
@@ -2,7 +2,7 @@
module ApplicationHelper
def select_tag_for_filter(nvpairs, params)
- _url = ( url_for :overwrite_params => { }).split('?')[0]
+ _url = ( url_for overwrite_params: { }).split('?')[0]
_html = %{<span class="pull-left filter-label">Filter: </span> }
_html << %{<select name="show" class="filter-select" }
_html << %{onchange="window.location='#{_url}' + '?show=' + this.value"> }
@@ -19,7 +19,7 @@ module ApplicationHelper
end
def select_match_scope(nvpairs, params)
- _url = ( url_for :overwrite_params => { }).split('?')[0]
+ _url = ( url_for overwrite_params: { }).split('?')[0]
_html = %{<span class="pull-left filter-label">Matching Scope: </span> }
_html << %{<select name="match_scope" class="filter-select" }
_html << %{onchange="window.location='#{_url}' + '?match_scope=' + this.va…
@@ -45,8 +45,8 @@ module ApplicationHelper
ttip = raw("<div class='task_args_formatted'>")
info.each_pair do |k,v|
- ttip << raw("<div class='task_args_var'>") + h(truncate(k.to_s, :lengt…
- ttip << raw("<div class='task_args_val'>") + h(truncate((v.to_s), :len…
+ ttip << raw("<div class='task_args_var'>") + h(truncate(k.to_s, length…
+ ttip << raw("<div class='task_args_val'>") + h(truncate((v.to_s), leng…
end
ttip << raw("</div>\n")
outp = raw("<span class='xpopover' rel='popover' data-title=\"#{job.task…
@@ -120,9 +120,9 @@ module ApplicationHelper
def submit_checkboxes_to(name, path, html={})
if html[:confirm]
confirm = html.delete(:confirm)
- link_to(name, "#", html.merge({:onclick => "if(confirm('#{h confirm}')){…
+ link_to(name, "#", html.merge({onclick: "if(confirm('#{h confirm}')){ su…
else
- link_to(name, "#", html.merge({:onclick => "submit_checkboxes_to('#{path…
+ link_to(name, "#", html.merge({onclick: "submit_checkboxes_to('#{path}',…
end
end
@@ -143,7 +143,7 @@ module ApplicationHelper
# Generate the markup for the call's row checkbox.
# Returns the String markup html, escaped for json.
def call_checkbox_tag(call)
- check_box_tag("result_ids[]", call.id, false, :id => nil).to_json.html_safe
+ check_box_tag("result_ids[]", call.id, false, id: nil).to_json.html_safe
end
def call_number_html(call)
diff --git a/app/models/application_record.rb b/app/models/application_record.rb
@@ -0,0 +1,3 @@
+class ApplicationRecord < ActiveRecord::Base
+ self.abstract_class = true
+end
diff --git a/app/models/call.rb b/app/models/call.rb
@@ -24,22 +24,22 @@
# fprint :integer is an Array
#
-class Call < ActiveRecord::Base
+class Call < ApplicationRecord
- reportable :hourly, :aggregation => :count, :grouping => :hour, :live_data =…
- reportable :daily, :aggregation => :count, :grouping => :day, :live_data => …
- reportable :weekly, :aggregation => :count, :grouping => :week, :live_data =…
- reportable :monthly, :aggregation => :count, :grouping => :month, :live_data…
+ reportable :hourly, aggregation: :count, grouping: :hour, live_data: true, c…
+ reportable :daily, aggregation: :count, grouping: :day, live_data: true, cac…
+ reportable :weekly, aggregation: :count, grouping: :week, live_data: true, c…
+ reportable :monthly, aggregation: :count, grouping: :month, live_data: true,…
- reportable :analyzed_hourly, :aggregation => :count, :grouping => :hour, :da…
- reportable :analyzed_daily, :aggregation => :count, :grouping => :day, :date…
- reportable :analyzed_weekly, :aggregation => :count, :grouping => :week, :da…
- reportable :analyzed_monthly, :aggregation => :count, :grouping => :month, :…
+ reportable :analyzed_hourly, aggregation: :count, grouping: :hour, date_colu…
+ reportable :analyzed_daily, aggregation: :count, grouping: :day, date_column…
+ reportable :analyzed_weekly, aggregation: :count, grouping: :week, date_colu…
+ reportable :analyzed_monthly, aggregation: :count, grouping: :month, date_co…
belongs_to :project
belongs_to :provider
belongs_to :job
- has_one :call_medium, :dependent => :delete
+ has_one :call_medium, dependent: :delete
def matches
# "AND (( icount(\'{#{fprint.map{|x| x.to_s}.join(",")}}\'::int[] & cal…
@@ -103,7 +103,7 @@ class Call < ActiveRecord::Base
args << min_match.to_f
query = [match_sql, *args]
- Call.paginate_by_sql(query, :page => page, :per_page => per_page)
+ Call.paginate_by_sql(query, page: page, per_page: per_page)
end
def media
diff --git a/app/models/call_medium.rb b/app/models/call_medium.rb
@@ -14,7 +14,7 @@
# png_sig_freq :binary
#
-class CallMedium < ActiveRecord::Base
+class CallMedium < ApplicationRecord
belongs_to :call
belongs_to :project
end
diff --git a/config/initializers/bootstrap.rb b/app/models/concerns/.keep
diff --git a/app/models/job.rb b/app/models/job.rb
@@ -18,12 +18,12 @@
# progress :integer default(0)
#
-class Job < ActiveRecord::Base
+class Job < ApplicationRecord
- reportable :hourly, :aggregation => :count, :grouping => :hour, :date_column…
- reportable :daily, :aggregation => :count, :grouping => :day, :date_column =…
- reportable :weeky, :aggregation => :count, :grouping => :week, :date_column …
- reportable :monthly, :aggregation => :count, :grouping => :month, :date_colu…
+ reportable :hourly, aggregation: :count, grouping: :hour, date_column: :crea…
+ reportable :daily, aggregation: :count, grouping: :day, date_column: :create…
+ reportable :weeky, aggregation: :count, grouping: :week, date_column: :creat…
+ reportable :monthly, aggregation: :count, grouping: :month, date_column: :cr…
class JobValidator < ActiveModel::Validator
def validate(record)
@@ -54,10 +54,10 @@ class Job < ActiveRecord::Base
unless ['calls', 'job', 'project', 'global'].include?(record.scope)
record.errors[:scope] << "Scope must be calls, job, project, or glob…
end
- if record.scope == "job" and Job.where(:id => record.target_id.to_i, :…
+ if record.scope == "job" and Job.where(id: record.target_id.to_i, task…
record.errors[:job_id] << "The job_id is not valid"
end
- if record.scope == "project" and Project.where(:id => record.target_id…
+ if record.scope == "project" and Project.where(id: record.target_id.to…
record.errors[:project_id] << "The project_id is not valid"
end
if record.scope == "calls" and (record.target_ids.nil? or record.targe…
@@ -71,17 +71,12 @@ class Job < ActiveRecord::Base
end
# XXX: Purging a single job will be slow, but deleting the project is fast
- has_many :calls, :dependent => :destroy
+ has_many :calls, dependent: :destroy
belongs_to :project
- attr_accessible :task, :status, :progress
-
validates_presence_of :project_id
- attr_accessible :project_id
-
-
# Allow the base Job class to be used for Dial Jobs
attr_accessor :range
attr_accessor :range_file
@@ -89,16 +84,11 @@ class Job < ActiveRecord::Base
attr_accessor :seconds
attr_accessor :cid_mask
- attr_accessible :range, :seconds, :lines, :cid_mask, :range_file
-
attr_accessor :scope
attr_accessor :force
attr_accessor :target_id
attr_accessor :target_ids
- attr_accessible :scope, :force, :target_id, :target_ids
-
-
validates_with JobValidator
def stop
@@ -107,9 +97,9 @@ class Job < ActiveRecord::Base
def update_progress(pct)
if pct >= 100
- self.class.where(id: self.id).update_all(:progress => pct, :completed_at…
+ self.class.where(id: self.id).update_all(progress: pct, completed_at: Ti…
else
- self.class.where(id: self.id).update_all(:progress => pct)
+ self.class.where(id: self.id).update_all(progress: pct)
end
end
@@ -122,10 +112,10 @@ class Job < ActiveRecord::Base
when 'dialer'
self.status = 'submitted'
self.args = Marshal.dump({
- :range => self.range,
- :lines => self.lines.to_i,
- :seconds => self.seconds.to_i,
- :cid_mask => self.cid_mask
+ range: self.range,
+ lines: self.lines.to_i,
+ seconds: self.seconds.to_i,
+ cid_mask: self.cid_mask
})
return self.save
@@ -133,18 +123,18 @@ class Job < ActiveRecord::Base
when 'analysis'
self.status = 'submitted'
d = {
- :scope => self.scope, # job / pr…
- :force => !!(self.force), # true / f…
- :target_id => self.target_id.to_i, # job_id o…
- :target_ids => (self.target_ids || []).map{|x|…
+ scope: self.scope, # job / project/ g…
+ force: !!(self.force), # true / false
+ target_id: self.target_id.to_i, # job_id or pr…
+ target_ids: (self.target_ids || []).map{|x| x.…
}
$stderr.puts d.inspect
self.args = Marshal.dump({
- :scope => self.scope, # job / project/ global
- :force => !!(self.force), # true / false
- :target_id => self.target_id.to_i, # job_id or project_id or nil
- :target_ids => (self.target_ids || []).map{|x| x.to_i }
+ scope: self.scope, # job / project/ global
+ force: !!(self.force), # true / false
+ target_id: self.target_id.to_i, # job_id or project_id or nil
+ target_ids: (self.target_ids || []).map{|x| x.to_i }
})
return self.save
else
diff --git a/app/models/line.rb b/app/models/line.rb
@@ -11,8 +11,8 @@
# notes :text
#
-class Line < ActiveRecord::Base
- has_many :line_attributes, :dependent => :delete_all
+class Line < ApplicationRecord
+ has_many :line_attributes, dependent: :delete_all
belongs_to :project
def set_attribute(name, value, ctype='text/plain')
@@ -24,6 +24,6 @@ class Line < ActiveRecord::Base
end
def get_attribute(name)
- LineAttribute.where(:line_id => self[:id], :name => name).first
+ LineAttribute.where(line_id: self[:id], name: name).first
end
end
diff --git a/app/models/line_attribute.rb b/app/models/line_attribute.rb
@@ -12,7 +12,7 @@
# content_type :string(255) default("text")
#
-class LineAttribute < ActiveRecord::Base
+class LineAttribute < ApplicationRecord
belongs_to :line
belongs_to :project
end
diff --git a/app/models/project.rb b/app/models/project.rb
@@ -12,17 +12,15 @@
# created_by :string(255)
#
-class Project < ActiveRecord::Base
+class Project < ApplicationRecord
validates_presence_of :name
validates_uniqueness_of :name
- attr_accessible :name, :description, :included, :excluded
-
# This is optimized for fast project deletion, even with thousands of calls/…
- has_many :lines, :dependent => :delete_all
- has_many :line_attributes, :dependent => :delete_all
- has_many :calls, :dependent => :delete_all
- has_many :call_media, :dependent => :delete_all
- has_many :jobs, :dependent => :delete_all
+ has_many :lines, dependent: :delete_all
+ has_many :line_attributes, dependent: :delete_all
+ has_many :calls, dependent: :delete_all
+ has_many :call_media, dependent: :delete_all
+ has_many :jobs, dependent: :delete_all
end
diff --git a/app/models/provider.rb b/app/models/provider.rb
@@ -14,12 +14,10 @@
# enabled :boolean default(TRUE)
#
-class Provider < ActiveRecord::Base
+class Provider < ApplicationRecord
has_many :dial_results
validates_presence_of :name, :host, :port, :user, :pass, :lines
- validates_numericality_of :port, :less_than => 65536, :greater_than => 0
- validates_numericality_of :lines, :less_than => 255, :greater_than => 0
-
- attr_accessible :enabled, :name, :host, :port, :user, :pass, :lines
+ validates_numericality_of :port, less_than: 65536, greater_than: 0
+ validates_numericality_of :lines, less_than: 255, greater_than: 0
end
diff --git a/app/models/settings.rb b/app/models/settings.rb
@@ -11,6 +11,6 @@
# updated_at :datetime
#
-class Settings < RailsSettings::CachedSettings
- attr_accessible :var
+class Settings < RailsSettings::Base
+ # attr_accessible :var
end
diff --git a/app/models/signature.rb b/app/models/signature.rb
@@ -13,7 +13,7 @@
# risk :integer
#
-class Signature < ActiveRecord::Base
+class Signature < ApplicationRecord
has_many :signature_fps
end
diff --git a/app/models/signature_fp.rb b/app/models/signature_fp.rb
@@ -1,4 +1,4 @@
-class SignatureFp < ActiveRecord::Base
+class SignatureFp < ApplicationRecord
belongs_to :signature
end
diff --git a/app/models/user.rb b/app/models/user.rb
@@ -23,12 +23,12 @@
# admin :boolean default(TRUE)
#
-class User < ActiveRecord::Base
+class User < ApplicationRecord
include RailsSettings::Extend
acts_as_authentic do |c|
c.validate_email_field = false
- c.merge_validates_length_of_password_field_options :minimum => 8
- c.merge_validates_length_of_password_confirmation_field_options :minimum =…
+ c.merge_validates_length_of_password_field_options minimum: 8
+ c.merge_validates_length_of_password_confirmation_field_options minimum: 8
c.logged_in_timeout = 1.day
end
end
diff --git a/app/views/application/_nav.html.erb b/app/views/application/_nav.h…
@@ -9,7 +9,9 @@
<span class="fa fa-bar"></span>
<span class="fa fa-bar"></span>
</button>
- <a class="navbar-brand" href="/"><img src="/assets/logo_light.png" borde…
+ <a class="navbar-brand" href="/">
+ <%= image_tag "logo_light.png", border: 0, alt: "WarVOX" %>
+ </a>
</div>
<div class="collapse navbar-collapse navbar-ex1-collapse">
diff --git a/app/views/home/about.html.erb b/app/views/home/about.html.erb
@@ -43,7 +43,7 @@ and research purposes only. The latest version of WarVOX can …
<td>
Active Jobs
</td>
- <td><%= Job.count(:conditions => { :completed_at => nil }) %></td>
+ <td><%= Job.where(:completed_at => nil).count %></td>
</tr>
<tr>
diff --git a/app/views/layouts/login.html.erb b/app/views/layouts/login.html.erb
@@ -23,7 +23,9 @@
</head>
<body id="login">
<div id="login-panel">
- <div id="login-logo"><img src="/assets/logo_bigger.png" border=0 alt="WarVOX…
+ <div id="login-logo">
+ <%= image_tag "logo_bigger.png", border: 0, alt: "WarVOX" %>
+ </div>
<div id="box">
<%= yield %>
</div>
diff --git a/app/views/users/edit.html.erb b/app/views/users/edit.html.erb
@@ -1,6 +1,6 @@
<h1>Edit My Account</h1>
-<% form_for @user, :url => user_path(@user) do |f| %>
+<%= form_for @user, :url => user_path(@user) do |f| %>
<%= f.error_messages %>
<%= render :partial => "form", :object => f %>
<%= f.submit "Update" %>
diff --git a/bin/adduser b/bin/adduser
@@ -9,7 +9,7 @@ require 'bundler/setup'
# rails/all must be required explicitly to get the railties that pro/ui/config…
require 'rails/all'
# require all the gems in the current environment
-Bundler.require(*Rails.groups(:assets => %w(development test cucumber)))
+Bundler.require(*Rails.groups(assets: %w(development test cucumber)))
APP_PATH = File.expand_path('../../config/application', __FILE__)
require File.expand_path('../../config/boot', __FILE__)
diff --git a/bin/bundle b/bin/bundle
@@ -0,0 +1,3 @@
+#!/usr/bin/env ruby
+ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__)
+load Gem.bin_path('bundler', 'bundle')
diff --git a/bin/export_audio.rb b/bin/export_audio.rb
@@ -49,7 +49,7 @@ end
FileUtils.mkdir_p(output)
begin
- cond = { :project_id => project_id.to_i, :answered => true, :busy => false }
+ cond = { project_id: project_id.to_i, answered: true, busy: false }
if line_type
cond[:line_type] = line_type.downcase
end
diff --git a/bin/export_list.rb b/bin/export_list.rb
@@ -51,7 +51,7 @@ end
fields = %W{ number line_type caller_id answered busy audio_length ring_length…
begin
$stdout.puts fields.to_csv
- cond = { :project_id => project_id.to_i }
+ cond = { project_id: project_id.to_i }
if line_type
cond[:line_type] = line_type.downcase
end
diff --git a/bin/iaxrecord.rb b/bin/iaxrecord.rb
@@ -16,7 +16,7 @@ require "optparse"
parser = OptionParser.new
opts = {
- :recording_time => 52
+ recording_time: 52
}
parser.banner = "Usage: #{$0} [options]"
diff --git a/bin/import_audio.rb b/bin/import_audio.rb
@@ -49,7 +49,7 @@ project = nil
provider = nil
if project_id
- project = Project.where(:id => project_id).first
+ project = Project.where(id: project_id).first
unless project
$stderr.puts "Error: Specified Project ID not found"
exit(1)
@@ -57,7 +57,7 @@ if project_id
end
if provider_id
- provider = Provider.where(:id => provider_id).first
+ provider = Provider.where(id: provider_id).first
unless provider
$stderr.puts "Error: Specified Provider ID not found"
exit(1)
@@ -66,21 +66,21 @@ end
unless project
project = Project.create(
- :name => "Import from #{dir} at #{Time.now.utc.to_s}",
- :created_by => "importer"
+ name: "Import from #{dir} at #{Time.now.utc.to_s}",
+ created_by: "importer"
)
end
provider = Provider.first
unless provider
provider = Provider.create(
- :name => 'Import Provider',
- :host => 'localhost',
- :port => 4369,
- :user => "null",
- :pass => "null",
- :lines => 1,
- :enabled => false
+ name: 'Import Provider',
+ host: 'localhost',
+ port: 4369,
+ user: "null",
+ pass: "null",
+ lines: 1,
+ enabled: false
)
end
@@ -92,7 +92,7 @@ job.locked_at = Time.now.utc
job.started_at = Time.now.utc
job.created_by = "importer"
job.task = "import"
-job.args = Marshal.dump({ :directory => dir, :project_id => project.id…
+job.args = Marshal.dump({ directory: dir, project_id: project.id, prov…
job.status = "running"
job.save!
diff --git a/bin/rails b/bin/rails
@@ -0,0 +1,4 @@
+#!/usr/bin/env ruby
+APP_PATH = File.expand_path('../config/application', __dir__)
+require_relative '../config/boot'
+require 'rails/commands'
diff --git a/bin/rake b/bin/rake
@@ -0,0 +1,4 @@
+#!/usr/bin/env ruby
+require_relative '../config/boot'
+require 'rake'
+Rake.application.run
diff --git a/bin/resetpw b/bin/resetpw
@@ -9,7 +9,7 @@ require 'bundler/setup'
# rails/all must be required explicitly to get the railties that pro/ui/config…
require 'rails/all'
# require all the gems in the current environment
-Bundler.require(*Rails.groups(:assets => %w(development test cucumber)))
+Bundler.require(*Rails.groups(assets: %w(development test cucumber)))
APP_PATH = File.expand_path('../../config/application', __FILE__)
require File.expand_path('../../config/boot', __FILE__)
diff --git a/bin/setup b/bin/setup
@@ -0,0 +1,34 @@
+#!/usr/bin/env ruby
+require 'pathname'
+require 'fileutils'
+include FileUtils
+
+# path to your application root.
+APP_ROOT = Pathname.new File.expand_path('../../', __FILE__)
+
+def system!(*args)
+ system(*args) || abort("\n== Command #{args} failed ==")
+end
+
+chdir APP_ROOT do
+ # This script is a starting point to setup your application.
+ # Add necessary setup steps to this file.
+
+ puts '== Installing dependencies =='
+ system! 'gem install bundler --conservative'
+ system('bundle check') || system!('bundle install')
+
+ # puts "\n== Copying sample files =="
+ # unless File.exist?('config/database.yml')
+ # cp 'config/database.yml.sample', 'config/database.yml'
+ # end
+
+ puts "\n== Preparing database =="
+ system! 'bin/rails db:setup'
+
+ puts "\n== Removing old logs and tempfiles =="
+ system! 'bin/rails log:clear tmp:clear'
+
+ puts "\n== Restarting application server =="
+ system! 'bin/rails restart'
+end
diff --git a/bin/update b/bin/update
@@ -0,0 +1,29 @@
+#!/usr/bin/env ruby
+require 'pathname'
+require 'fileutils'
+include FileUtils
+
+# path to your application root.
+APP_ROOT = Pathname.new File.expand_path('../../', __FILE__)
+
+def system!(*args)
+ system(*args) || abort("\n== Command #{args} failed ==")
+end
+
+chdir APP_ROOT do
+ # This script is a way to update your development environment automatically.
+ # Add necessary update steps to this file.
+
+ puts '== Installing dependencies =='
+ system! 'gem install bundler --conservative'
+ system('bundle check') || system!('bundle install')
+
+ puts "\n== Updating database =="
+ system! 'bin/rails db:migrate'
+
+ puts "\n== Removing old logs and tempfiles =="
+ system! 'bin/rails log:clear tmp:clear'
+
+ puts "\n== Restarting application server =="
+ system! 'bin/rails restart'
+end
diff --git a/bin/warvox.rb b/bin/warvox.rb
@@ -15,7 +15,7 @@ end
$:.unshift(File.join(File.expand_path(File.dirname(base)), '..', 'lib'))
voxroot = File.expand_path(File.join(File.dirname(base), '..'))
-voxserv = File.expand_path(File.join(File.expand_path(voxroot), 'script', 'rai…
+voxserv = File.expand_path(File.join(File.expand_path(voxroot), 'bin', 'rails'…
manager = File.expand_path(File.join(File.dirname(base), 'worker_manager.rb'))
require 'warvox'
diff --git a/bin/worker_manager.rb b/bin/worker_manager.rb
@@ -32,7 +32,7 @@ def stop
end
# Update the database
- Job.update_all({ :status => "stopped", :completed_at => Time.now.utc}, { :id…
+ Job.update_all({ status: "stopped", completed_at: Time.now.utc}, { id: @jobs…
# Signal running jobs to shut down
@jobs.map{|j| Process.kill("TERM", j[:pid]) rescue nil }
@@ -55,8 +55,8 @@ end
def schedule_job(j)
WarVOX::Log.debug("Worker Manager is launching job #{j.id}")
@jobs << {
- :id => j.id,
- :pid => Process.fork { exec("#{@worker_path} #{j.id}") }
+ id: j.id,
+ pid: Process.fork { exec("#{@worker_path} #{j.id}") }
}
end
@@ -67,7 +67,7 @@ def stop_cancelled_jobs
end
return if jids.length == 0
- Job.where(:status => 'cancelled', :id => jids).find_each do |j|
+ Job.where(status: 'cancelled', id: jids).find_each do |j|
job = @jobs.select{ |o| o[:id] == j.id }.first
next unless job and job[:pid]
pid = job[:pid]
@@ -131,7 +131,7 @@ def clear_stale_jobs
# Mark these jobs as abandoned
if dead.length > 0
WarVOX::Log.debug("Worker Manager is marking #{dead.length} jobs as abando…
- Job.where(:id => dead).update_all({locked_by: nil, status: 'abandoned'})
+ Job.where(id: dead).update_all({locked_by: nil, status: 'abandoned'})
end
end
diff --git a/config/application.rb b/config/application.rb
@@ -1,16 +1,17 @@
-require File.expand_path('../boot', __FILE__)
-require 'rails/all'
+require_relative 'boot'
-# Bootstrap the WarVOX code base
-$:.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
-require 'warvox'
+require "rails"
+# Pick the frameworks you want:
+require "active_model/railtie"
+require "active_record/railtie"
+require "action_controller/railtie"
+require "action_mailer/railtie"
+require "action_view/railtie"
+require "sprockets/railtie"
-if defined?(Bundler)
- # If you precompile assets before deploying to production, use this line
- Bundler.require(*Rails.groups(:assets => %w(development test)))
- # If you want your assets lazily compiled in production, use this line
- # Bundler.require(:default, :assets, Rails.env)
-end
+# Require the gems listed in Gemfile, including any gems
+# you've limited to :test, :development, or :production.
+Bundler.require(*Rails.groups)
module Web
class Application < Rails::Application
@@ -18,16 +19,6 @@ module Web
# Application configuration should go into files in config/initializers
# -- all .rb files in that directory are automatically loaded.
- # Custom directories with classes and modules you want to be autoloadable.
- # config.autoload_paths += %W(#{config.root}/extras)
-
- # Only load the plugins named here, in the order given (default is alphabe…
- # :all can be used as a placeholder for all plugins not explicitly named.
- # config.plugins = [ :exception_notification, :ssl_requirement, :all ]
-
- # Activate observers that should always be running.
- # config.active_record.observers = :cacher, :garbage_collector, :forum_obs…
-
# Set Time.zone default to the specified zone and make Active Record auto-…
# Run "rake -D time" for a list of tasks for finding time zone names. Defa…
# config.time_zone = 'Central Time (US & Canada)'
@@ -36,37 +27,13 @@ module Web
# config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml…
# config.i18n.default_locale = :de
- # Configure the default encoding used in templates for Ruby 1.9.
- config.encoding = "utf-8"
+ # Bootstrap the WarVOX code base
+ config.autoload_paths << "#{Rails.root}/lib"
+ require 'warvox'
- # Configure sensitive parameters which will be filtered from the log file.
- config.filter_parameters += [:password, :pass, :password, :password_confir…
+ config.encoding = "utf-8"
# Enable escaping HTML in JSON.
config.active_support.escape_html_entities_in_json = true
-
- # Use SQL instead of Active Record's schema dumper when creating the datab…
- # This is necessary if your schema can't be completely dumped by the schem…
- # like if you have constraints or database-specific column types
- # config.active_record.schema_format = :sql
-
- # Enforce whitelist mode for mass assignment.
- # This will create an empty whitelist of attributes available for mass-ass…
- # in your app. As such, your models will need to explicitly whitelist or b…
- # parameters by using an attr_accessible or attr_protected declaration.
- config.active_record.whitelist_attributes = true
-
- # Enable the asset pipeline
- config.assets.enabled = true
-
- # Version of your assets, change this if you want to expire all your assets
- config.assets.version = '1.0'
-
- # Config I8n
- I18n.enforce_available_locales = false
-
- # Configure sensitive parameters which will be filtered from the log file.
- config.session_store :cookie_store, :key => "_warvox"
- config.secret_token = WarVOX::Config.load_session_key
end
end
diff --git a/config/boot.rb b/config/boot.rb
@@ -1,6 +1,3 @@
-require 'rubygems'
+ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../Gemfile', __dir__)
-# Set up gems listed in the Gemfile.
-ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__)
-
-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
@@ -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
@@ -1,6 +1,5 @@
-# Load the rails application
-require File.expand_path('../application', __FILE__)
-
-# Initialize the rails application
-Web::Application.initialize!
+# Load the Rails application.
+require_relative 'application'
+# Initialize the Rails application.
+Rails.application.initialize!
diff --git a/config/environments/development.rb b/config/environments/developme…
@@ -1,40 +1,56 @@
-Web::Application.configure do
- # Settings specified here will take precedence over those in config/applicat…
+Rails.application.configure do
+ # Settings specified here will take precedence over those in config/applicat…
# In the development environment your application's code is reloaded on
# every request. This slows down response time but is perfect for development
# since you don't have to restart the web server when you make code changes.
config.cache_classes = false
- # Log error messages when you accidentally call methods on nil.
- config.whiny_nils = true
+ # Do not eager load code on boot.
+ config.eager_load = false
- # Show full error reports and disable caching
+ # Show full error reports and disable caching.
config.consider_all_requests_local = true
- config.action_controller.perform_caching = false
- # Don't care if the mailer can't send
+ # 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
- # Print deprecation notices to the Rails logger
- config.active_support.deprecation = :log
+ config.action_mailer.perform_caching = false
- # Only use best-standards-support built into browsers
- config.action_dispatch.best_standards_support = :builtin
+ # Print deprecation notices to the Rails logger.
+ config.active_support.deprecation = :log
- # Raise exception on mass assignment protection for Active Record models
- config.active_record.mass_assignment_sanitizer = :strict
+ # Raise an error on page load if there are pending migrations.
+ config.active_record.migration_error = :page_load
config.log_level = :debug
- # Do not compress assets
- config.assets.compress = false
-
- # Expands the lines which load the assets
+ # Debug mode disables concatenation and preprocessing of assets.
+ # This option may cause significant delays in view rendering with a large
+ # number of complex assets.
config.assets.debug = false
- # Eager load
- config.eager_load = false
+ # Suppress logger output for asset requests.
+ config.assets.quiet = true
+
+ # Raises error for missing translations
+ # config.action_view.raise_on_missing_translations = true
- config.serve_static_assets = true
+ # Use an evented file watcher to asynchronously detect changes in source cod…
+ # routes, locales, etc. This feature depends on the listen gem.
+ # config.file_watcher = ActiveSupport::EventedFileUpdateChecker
end
diff --git a/config/environments/production.rb b/config/environments/production…
@@ -1,67 +1,81 @@
-Web::Application.configure do
- # Settings specified here will take precedence over those in config/applicat…
+Rails.application.configure do
+ # Settings specified here will take precedence over those in config/applicat…
- # Code is not reloaded between requests
+ # Code is not reloaded between requests.
config.cache_classes = true
- # Full error reports are disabled and caching is turned on
+ # Eager load code on boot. This eager loads most of Rails and
+ # 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
+
+ # Full error reports are disabled and caching is turned on.
config.consider_all_requests_local = false
config.action_controller.perform_caching = true
- # Disable Rails's static asset server (Apache or nginx will already do this)
- config.serve_static_files = true
+ # 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.compress = false
+ # Compress JavaScripts and CSS.
+ config.assets.js_compressor = :uglifier
+ # config.assets.css_compressor = :sass
- # Don't fallback to assets pipeline if a precompiled asset is missed
- config.assets.compile = true
+ # Do not fallback to assets pipeline if a precompiled asset is missed.
+ config.assets.compile = false
- # Generate digests for assets URLs
- config.assets.digest = true
+ # `config.assets.precompile` and `config.assets.version` have moved to confi…
- # Defaults to nil and saved in location specified by config.assets.prefix
- # config.assets.manifest = YOUR_PATH
+ # Enable serving of images, stylesheets, and JavaScripts from an asset serve…
+ # 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
+ # 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
# Force all access to the app over SSL, use Strict-Transport-Security, and u…
# config.force_ssl = true
- # See everything in the log (default is :info)
- config.log_level = :warn
+ # Use the lowest log level to ensure availability of diagnostic information
+ # when problems arise.
+ config.log_level = :debug
- # Prepend all log lines with the following tags
- # config.log_tags = [ :subdomain, :uuid ]
+ # Prepend all log lines with the following tags.
+ config.log_tags = [ :request_id ]
- # Use a different logger for distributed setups
- # config.logger = ActiveSupport::TaggedLogging.new(SyslogLogger.new)
-
- # Use a different cache store in production
+ # 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…
- config.assets.precompile += %w( jquery.js )
+ # Use a real queuing backend for Active Job (and separate queues per environ…
+ # config.active_job.queue_adapter = :resque
+ # config.active_job.queue_name_prefix = "barerails5app_#{Rails.env}"
+ config.action_mailer.perform_caching = false
- # Disable delivery errors, bad email addresses will be ignored
+ # Ignore bad email addresses and do not raise email delivery errors.
+ # Set this to true and configure the email server for immediate delivery to …
# config.action_mailer.raise_delivery_errors = false
- # Enable threaded mode
- # config.threadsafe!
-
# 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
+ # Send deprecation notices to registered listeners.
config.active_support.deprecation = :notify
- # Eager load
- config.eager_load = true
+ # Use default logging formatter so that PID and timestamp are not suppressed.
+ config.log_formatter = ::Logger::Formatter.new
+
+ # Use a different logger for distributed setups.
+ # require 'syslog/logger'
+ # config.logger = ActiveSupport::TaggedLogging.new(Syslog::Logger.new 'app-n…
+
+ 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
end
diff --git a/config/environments/test.rb b/config/environments/test.rb
@@ -1,39 +1,42 @@
-Web::Application.configure do
- # Settings specified here will take precedence over those in config/environm…
+Rails.application.configure do
+ # Settings specified here will take precedence over those in config/applicat…
# The test environment is used exclusively to run your application's
- # test suite. You never need to work with it otherwise. Remember that
+ # test suite. You never need to work with it otherwise. Remember that
# your test database is "scratch space" for the test suite and is wiped
- # and recreated between test runs. Don't rely on the data there!
+ # and recreated between test runs. Don't rely on the data there!
config.cache_classes = true
- # Log error messages when you accidentally call methods on nil.
- config.whiny_nils = true
+ # Do not eager load code on boot. This avoids loading your whole application
+ # just for the purpose of running a single test. If you are using a tool that
+ # preloads Rails for running tests, you may have to set it to true.
+ config.eager_load = false
+
+ # Configure public file server for tests with Cache-Control for performance.
+ config.public_file_server.enabled = true
+ config.public_file_server.headers = {
+ 'Cache-Control' => 'public, max-age=3600'
+ }
- # Show full error reports and disable caching
+ # Show full error reports and disable caching.
config.consider_all_requests_local = true
config.action_controller.perform_caching = false
- # Raise exceptions instead of rendering exception templates
+ # Raise exceptions instead of rendering exception templates.
config.action_dispatch.show_exceptions = false
- # Disable request forgery protection in test environment
- config.action_controller.allow_forgery_protection = false
+ # Disable request forgery protection in test environment.
+ config.action_controller.allow_forgery_protection = false
+ config.action_mailer.perform_caching = false
# Tell Action Mailer not to deliver emails to the real world.
# The :test delivery method accumulates sent emails in the
# ActionMailer::Base.deliveries array.
config.action_mailer.delivery_method = :test
- # Use SQL instead of Active Record's schema dumper when creating the test da…
- # This is necessary if your schema can't be completely dumped by the schema …
- # like if you have constraints or database-specific column types
- # config.active_record.schema_format = :sql
-
- # Print deprecation notices to the stderr
+ # Print deprecation notices to the stderr.
config.active_support.deprecation = :stderr
- # Eager load
- config.eager_load = false
-
+ # Raises error for missing translations
+ # config.action_view.raise_on_missing_translations = true
end
diff --git a/config/initializers/application_controller_renderer.rb b/config/in…
@@ -0,0 +1,6 @@
+# Be sure to restart your server when you modify this file.
+
+# ApplicationController.renderer.defaults.merge!(
+# http_host: 'example.org',
+# https: false
+# )
diff --git a/config/initializers/assets.rb b/config/initializers/assets.rb
@@ -0,0 +1,16 @@
+# Be sure to restart your server when you modify this file.
+
+# Version of your assets, change this if you want to expire all your assets.
+Rails.application.config.assets.version = '1.0'
+
+# Add additional assets to the asset load path
+# Rails.application.config.assets.paths << Emoji.images_path
+
+# Precompile additional assets.
+# application.js, application.css, and all non-JS/CSS in app/assets folder are…
+# Rails.application.config.assets.precompile += %w( search.js )
+
+# Rails.application.config.assets.precompile += %w( jquery.js )
+
+Rails.application.config.assets.precompile += %w( html5.js )
+Rails.application.config.assets.precompile += %w(analyze/_index.coffee analyze…
diff --git a/config/initializers/cookies_serializer.rb b/config/initializers/co…
@@ -0,0 +1,5 @@
+# Be sure to restart your server when you modify this file.
+
+# Specify a serializer for the signed and encrypted cookie jars.
+# Valid options are :json, :marshal, and :hybrid.
+Rails.application.config.action_dispatch.cookies_serializer = :marshal
diff --git a/config/initializers/filter_parameter_logging.rb b/config/initializ…
@@ -0,0 +1,4 @@
+# Be sure to restart your server when you modify this file.
+
+# Configure sensitive parameters which will be filtered from the log file.
+Rails.application.config.filter_parameters += [:password, :pass, :password, :p…
diff --git a/config/initializers/inflections.rb b/config/initializers/inflectio…
@@ -1,15 +1,16 @@
# Be sure to restart your server when you modify this file.
-# Add new inflection rules using the following format
-# (all these examples are active by default):
-# ActiveSupport::Inflector.inflections do |inflect|
+# Add new inflection rules using the following format. Inflections
+# are locale specific, and you may define rules for as many different
+# locales as you wish. All of these examples are active by default:
+# ActiveSupport::Inflector.inflections(:en) do |inflect|
# inflect.plural /^(ox)$/i, '\1en'
# inflect.singular /^(ox)en/i, '\1'
# inflect.irregular 'person', 'people'
# inflect.uncountable %w( fish sheep )
# end
-#
+
# These inflection rules are supported but not enabled by default:
-# ActiveSupport::Inflector.inflections do |inflect|
+# ActiveSupport::Inflector.inflections(:en) do |inflect|
# inflect.acronym 'RESTful'
# end
diff --git a/config/initializers/mime_types.rb b/config/initializers/mime_types…
@@ -2,4 +2,3 @@
# Add new mime types for use in respond_to blocks:
# Mime::Type.register "text/richtext", :rtf
-# Mime::Type.register_alias "text/html", :iphone
diff --git a/config/initializers/new_framework_defaults.rb b/config/initializer…
@@ -0,0 +1,24 @@
+# Be sure to restart your server when you modify this file.
+#
+# This file contains migration options to ease your Rails 5.0 upgrade.
+#
+# Read the Rails 5.0 release notes for more info on each option.
+
+# Enable per-form CSRF tokens. Previous versions had false.
+Rails.application.config.action_controller.per_form_csrf_tokens = true
+
+# Enable origin-checking CSRF mitigation. Previous versions had false.
+Rails.application.config.action_controller.forgery_protection_origin_check = t…
+
+# Make Ruby 2.4 preserve the timezone of the receiver when calling `to_time`.
+# Previous versions had false.
+ActiveSupport.to_time_preserves_timezone = true
+
+# Require `belongs_to` associations by default. Previous versions had false.
+Rails.application.config.active_record.belongs_to_required_by_default = true
+
+# Do not halt callback chains when a callback returns false. Previous versions…
+ActiveSupport.halt_callback_chains_on_return_false = false
+
+# Configure SSL options to enable HSTS with subdomains. Previous versions had …
+Rails.application.config.ssl_options = { hsts: { subdomains: true } }
diff --git a/config/initializers/secret_token.rb b/config/initializers/secret_t…
@@ -1 +0,0 @@
-Web::Application.config.secret_token = WarVOX::Config.load_session_key
diff --git a/config/initializers/session_store.rb b/config/initializers/session…
@@ -1,8 +1,3 @@
# Be sure to restart your server when you modify this file.
-Web::Application.config.session_store :cookie_store, key: '_warvox_session'
-
-# Use the database for sessions instead of the cookie-based default,
-# which shouldn't be used to store highly confidential information
-# (create the session table with "rails generate session_migration")
-# Ttt::Application.config.session_store :active_record_store
+Rails.application.config.session_store :cookie_store, key: '_warvox_session'
diff --git a/config/initializers/wrap_parameters.rb b/config/initializers/wrap_…
@@ -1,5 +1,5 @@
# Be sure to restart your server when you modify this file.
-#
+
# This file contains settings for ActionController::ParamsWrapper which
# is enabled by default.
@@ -8,7 +8,7 @@ ActiveSupport.on_load(:action_controller) do
wrap_parameters format: [:json]
end
-# Disable root element in JSON by default.
-ActiveSupport.on_load(:active_record) do
- self.include_root_in_json = false
-end
+# To enable root element in JSON for ActiveRecord objects.
+# ActiveSupport.on_load(:active_record) do
+# self.include_root_in_json = true
+# end
diff --git a/config/locales/en.yml b/config/locales/en.yml
@@ -1,5 +1,23 @@
-# Sample localization file for English. Add more files in this directory for o…
-# See http://github.com/svenfuchs/rails-i18n/tree/master/rails%2Flocale for st…
+# Files in the config/locales directory are used for internationalization
+# and are automatically loaded by Rails. If you want to use locales other
+# than English, add the necessary files in this directory.
+#
+# To use the locales, use `I18n.t`:
+#
+# I18n.t 'hello'
+#
+# In views, this is aliased to just `t`:
+#
+# <%= t('hello') %>
+#
+# To use a different locale, set it with `I18n.locale`:
+#
+# I18n.locale = :es
+#
+# This would use the information in config/locales/es.yml.
+#
+# To learn more, please read the Rails Internationalization guide
+# available at http://guides.rubyonrails.org/i18n.html.
en:
hello: "Hello world"
diff --git a/config/routes.rb b/config/routes.rb
@@ -1,5 +1,4 @@
-Web::Application.routes.draw do
-
+Rails.application.routes.draw do
get "login" => "user_sessions#new", :as => "login"
get "logout" => "user_sessions#destroy", :as => "logout"
@@ -51,5 +50,5 @@ Web::Application.routes.draw do
get '/help' => 'home#help', :as => :help
get '/check' => 'home#check', :as => :check
- root :to => "projects#index"
+ root to: "projects#index"
end
diff --git a/config/secrets.yml.example b/config/secrets.yml.example
@@ -0,0 +1,8 @@
+development:
+ secret_key_base: <%= WarVOX::Config.load_session_key %>
+
+test:
+ secret_key_base: <%= WarVOX::Config.load_session_key %>
+
+production:
+ secret_key_base: <%= WarVOX::Config.load_session_key %
diff --git a/config/initializers/bootstrap.rb b/config/unicorn.rb
diff --git a/db/migrate/20121228171549_initial_schema.rb b/db/migrate/201212281…
@@ -1,45 +1,45 @@
-class InitialSchema < ActiveRecord::Migration
+# class InitialSchema < ActiveRecord::Migration
+class InitialSchema < ActiveRecord::Migration[5.0]
def up
-
# Require the intarray extension
execute("CREATE EXTENSION IF NOT EXISTS intarray")
create_table :settings do |t|
- t.string :var, :null => false
- t.text :value, :null => true
- t.integer :thing_id, :null => true
- t.string :thing_type, :limit => 30, :null => true
- t.timestamps
+ t.string :var, null: false
+ t.text :value, null: true
+ t.integer :thing_id, null: true
+ t.string :thing_type, limit: 30, null: true
+ t.timestamps null: false
end
- add_index :settings, [ :thing_type, :thing_id, :var ], :unique => true
+ add_index :settings, [ :thing_type, :thing_id, :var ], unique: true
create_table 'users' do |t|
- t.string :login, :null => false # option…
- t.string :email, :null => true # option…
- t.string :crypted_password, :null => false # option…
- t.string :password_salt, :null => false # option…
- t.string :persistence_token, :null => false # requir…
- t.string :single_access_token, :null => false # option…
- t.string :perishable_token, :null => false # option…
+ t.string :login, null: false # optional,…
+ t.string :email, null: true # optional,…
+ t.string :crypted_password, null: false # optional,…
+ t.string :password_salt, null: false # optional,…
+ t.string :persistence_token, null: false # required
+ t.string :single_access_token, null: false # optional,…
+ t.string :perishable_token, null: false # optional,…
# Magic columns, just like ActiveRecord's created_at and updated_at. The…
- t.integer :login_count, :null => false, :default => 0 # option…
- t.integer :failed_login_count, :null => false, :default => 0 # option…
+ t.integer :login_count, null: false, default: 0 # optional, se…
+ t.integer :failed_login_count, null: false, default: 0 # optional, se…
t.datetime :last_request_at # option…
t.datetime :current_login_at # option…
t.datetime :last_login_at # option…
t.string :current_login_ip # option…
t.string :last_login_ip # option…
- t.timestamps
- t.boolean "enabled", :default => true
- t.boolean "admin", :default => true
+ t.timestamps null: false
+ t.boolean "enabled", default: true
+ t.boolean "admin", default: true
end
create_table 'projects' do |t|
- t.timestamps
- t.text "name", :null => false
+ t.timestamps null: false
+ t.text "name", null: false
t.text "description"
t.text "included"
t.text "excluded"
@@ -47,44 +47,44 @@ class InitialSchema < ActiveRecord::Migration
end
create_table "jobs" do |t|
- t.timestamps
- t.integer "project_id", :null => false
+ t.timestamps null: false
+ t.integer "project_id", null: false
t.string "locked_by"
t.timestamp "locked_at"
t.timestamp "started_at"
t.timestamp "completed_at"
t.string "created_by"
- t.string "task", :null => false
+ t.string "task", null: false
t.binary "args"
t.string "status"
t.text "error"
- t.integer "progress", :default => 0
+ t.integer "progress", default: 0
end
create_table "lines" do |t|
- t.timestamps
- t.text "number", :null => false
- t.integer "project_id", :null => false
+ t.timestamps null: false
+ t.text "number", null: false
+ t.integer "project_id", null: false
t.text "line_type"
t.text "notes"
end
create_table "line_attributes" do |t|
- t.timestamps
- t.integer "line_id", :null => false
- t.integer "project_id", :null => false
- t.text "name", :null => false
- t.binary "value", :null => false
- t.string "content_type", :default => "text"
+ t.timestamps null: false
+ t.integer "line_id", null: false
+ t.integer "project_id", null: false
+ t.text "name", null: false
+ t.binary "value", null: false
+ t.string "content_type", default: "text"
end
create_table "calls" do |t|
# Created by the dialer job
- t.timestamps
- t.text "number", :null => false
- t.integer "project_id", :null => false
- t.integer "job_id", :null => false
- t.integer "provider_id", :null => false
+ t.timestamps null: false
+ t.text "number", null: false
+ t.integer "project_id", null: false
+ t.integer "job_id", null: false
+ t.integer "provider_id", null: false
t.boolean "answered"
t.boolean "busy"
t.text "error"
@@ -99,12 +99,12 @@ class InitialSchema < ActiveRecord::Migration
t.float "peak_freq"
t.text "peak_freq_data"
t.text "line_type"
- t.integer "fprint", :array => true
+ t.integer "fprint", array: true
end
create_table "call_media" do |t|
- t.integer "call_id", :null => false
- t.integer "project_id", :null => false
+ t.integer "call_id", null: false
+ t.integer "project_id", null: false
t.binary "audio"
t.binary "mp3"
t.binary "png_big"
@@ -115,8 +115,8 @@ class InitialSchema < ActiveRecord::Migration
end
create_table "signatures" do |t|
- t.timestamps
- t.text "name", :null => false
+ t.timestamps null: false
+ t.text "name", null: false
t.string "source"
t.text "description"
t.string "category"
@@ -125,19 +125,19 @@ class InitialSchema < ActiveRecord::Migration
end
create_table "signature_fp" do |t|
- t.integer "signature_id", :null => false
- t.integer "fprint", :array => true
+ t.integer "signature_id", null: false
+ t.integer "fprint", array: true
end
create_table "providers" do |t|
- t.timestamps
- t.text "name", :null => false
- t.text "host", :null => false
- t.integer "port", :null => false
+ t.timestamps null: false
+ t.text "name", null: false
+ t.text "host", null: false
+ t.integer "port", null: false
t.text "user"
t.text "pass"
- t.integer "lines", :null => false, :default => 1
- t.boolean "enabled", :default => true
+ t.integer "lines", null: false, default: 1
+ t.boolean "enabled", default: true
end
add_index :jobs, :project_id
@@ -151,7 +151,6 @@ class InitialSchema < ActiveRecord::Migration
add_index :call_media, :call_id
add_index :call_media, :project_id
add_index :signature_fp, :signature_id
-
end
def down
diff --git a/db/migrate/20130113004653_create_reportable_cache.rb b/db/migrate/…
@@ -1,16 +1,15 @@
-class CreateReportableCache < ActiveRecord::Migration
+class CreateReportableCache < ActiveRecord::Migration[5.0]
+ def up
+ create_table :reportable_cache, force: true do |t|
+ t.string :model_name, null: false, limit: 100
+ t.string :report_name, null: false, limit: 100
+ t.string :grouping, null: false, limit: 10
+ t.string :aggregation, null: false, limit: 10
+ t.string :conditions, null: false, limit: 100
+ t.float :value, null: false, default: 0
+ t.datetime :reporting_period, null: false
- def self.up
- create_table :reportable_cache, :force => true do |t|
- t.string :model_name, :null => false, :limit => 100
- t.string :report_name, :null => false, :limit => 100
- t.string :grouping, :null => false, :limit => 10
- t.string :aggregation, :null => false, :limit => 10
- t.string :conditions, :null => false, :limit => 100
- t.float :value, :null => false, :default =>…
- t.datetime :reporting_period, :null => false
-
- t.timestamps
+ t.timestamps null: false
end
add_index :reportable_cache, [
@@ -19,7 +18,7 @@ class CreateReportableCache < ActiveRecord::Migration
:grouping,
:aggregation,
:conditions
- ], :name => :name_model_grouping_agregation
+ ], name: :name_model_grouping_agregation
add_index :reportable_cache, [
:model_name,
:report_name,
@@ -27,12 +26,12 @@ class CreateReportableCache < ActiveRecord::Migration
:aggregation,
:conditions,
:reporting_period
- ], :unique => true, :name => :name_model_grouping_aggregation_period
+ ], unique: true, name: :name_model_grouping_aggregation_period
end
def self.down
- remove_index :reportable_cache, :name => :name_model_grouping_agregation
- remove_index :reportable_cache, :name => :name_model_grouping_aggregation_…
+ remove_index :reportable_cache, name: :name_model_grouping_agregation
+ remove_index :reportable_cache, name: :name_model_grouping_aggregation_per…
drop_table :reportable_cache
end
diff --git 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 definiti…
@@ -17,7 +16,7 @@ ActiveRecord::Schema.define(version: 20130113004653) do
enable_extension "plpgsql"
enable_extension "intarray"
- create_table "call_media", force: true do |t|
+ create_table "call_media", force: :cascade do |t|
t.integer "call_id", null: false
t.integer "project_id", null: false
t.binary "audio"
@@ -27,14 +26,13 @@ ActiveRecord::Schema.define(version: 20130113004653) do
t.binary "png_big_freq"
t.binary "png_sig"
t.binary "png_sig_freq"
+ t.index ["call_id"], name: "index_call_media_on_call_id", using: :btree
+ t.index ["project_id"], name: "index_call_media_on_project_id", using: :bt…
end
- add_index "call_media", ["call_id"], name: "index_call_media_on_call_id", us…
- add_index "call_media", ["project_id"], name: "index_call_media_on_project_i…
-
- create_table "calls", force: true do |t|
- t.datetime "created_at"
- t.datetime "updated_at"
+ create_table "calls", force: :cascade do |t|
+ t.datetime "created_at", null: false
+ t.datetime "updated_at", null: false
t.text "number", null: false
t.integer "project_id", null: false
t.integer "job_id", null: false
@@ -52,15 +50,14 @@ ActiveRecord::Schema.define(version: 20130113004653) do
t.text "peak_freq_data"
t.text "line_type"
t.integer "fprint", array: true
+ t.index ["job_id"], name: "index_calls_on_job_id", using: :btree
+ t.index ["number"], name: "index_calls_on_number", using: :btree
+ t.index ["provider_id"], name: "index_calls_on_provider_id", using: :btree
end
- add_index "calls", ["job_id"], name: "index_calls_on_job_id", using: :btree
- add_index "calls", ["number"], name: "index_calls_on_number", using: :btree
- add_index "calls", ["provider_id"], name: "index_calls_on_provider_id", usin…
-
- create_table "jobs", force: true do |t|
- t.datetime "created_at"
- t.datetime "updated_at"
+ create_table "jobs", force: :cascade do |t|
+ t.datetime "created_at", null: false
+ t.datetime "updated_at", null: false
t.integer "project_id", null: false
t.string "locked_by"
t.datetime "locked_at"
@@ -72,38 +69,35 @@ ActiveRecord::Schema.define(version: 20130113004653) do
t.string "status"
t.text "error"
t.integer "progress", default: 0
+ t.index ["project_id"], name: "index_jobs_on_project_id", using: :btree
end
- add_index "jobs", ["project_id"], name: "index_jobs_on_project_id", using: :…
-
- create_table "line_attributes", force: true do |t|
- t.datetime "created_at"
- t.datetime "updated_at"
+ create_table "line_attributes", force: :cascade do |t|
+ t.datetime "created_at", null: false
+ t.datetime "updated_at", null: false
t.integer "line_id", null: false
t.integer "project_id", null: false
t.text "name", null: false
t.binary "value", null: false
t.string "content_type", default: "text"
+ t.index ["line_id"], name: "index_line_attributes_on_line_id", using: :btr…
+ t.index ["project_id"], name: "index_line_attributes_on_project_id", using…
end
- add_index "line_attributes", ["line_id"], name: "index_line_attributes_on_li…
- add_index "line_attributes", ["project_id"], name: "index_line_attributes_on…
-
- create_table "lines", force: true do |t|
- t.datetime "created_at"
- t.datetime "updated_at"
+ create_table "lines", force: :cascade do |t|
+ t.datetime "created_at", null: false
+ t.datetime "updated_at", null: false
t.text "number", null: false
t.integer "project_id", null: false
t.text "line_type"
t.text "notes"
+ t.index ["number"], name: "index_lines_on_number", using: :btree
+ t.index ["project_id"], name: "index_lines_on_project_id", using: :btree
end
- add_index "lines", ["number"], name: "index_lines_on_number", using: :btree
- add_index "lines", ["project_id"], name: "index_lines_on_project_id", using:…
-
- create_table "projects", force: true do |t|
- t.datetime "created_at"
- t.datetime "updated_at"
+ create_table "projects", force: :cascade do |t|
+ t.datetime "created_at", null: false
+ t.datetime "updated_at", null: false
t.text "name", null: false
t.text "description"
t.text "included"
@@ -111,9 +105,9 @@ ActiveRecord::Schema.define(version: 20130113004653) do
t.string "created_by"
end
- create_table "providers", force: true do |t|
- t.datetime "created_at"
- t.datetime "updated_at"
+ create_table "providers", force: :cascade do |t|
+ t.datetime "created_at", null: false
+ t.datetime "updated_at", null: false
t.text "name", null: false
t.text "host", null: false
t.integer "port", null: false
@@ -123,7 +117,7 @@ ActiveRecord::Schema.define(version: 20130113004653) do
t.boolean "enabled", default: true
end
- create_table "reportable_cache", force: true do |t|
+ create_table "reportable_cache", force: :cascade do |t|
t.string "model_name", limit: 100, null: false
t.string "report_name", limit: 100, null: false
t.string "grouping", limit: 10, null: false
@@ -131,34 +125,31 @@ ActiveRecord::Schema.define(version: 20130113004653) do
t.string "conditions", limit: 100, null: false
t.float "value", default: 0.0, null: false
t.datetime "reporting_period", null: false
- t.datetime "created_at"
- t.datetime "updated_at"
+ t.datetime "created_at", null: false
+ t.datetime "updated_at", null: false
+ t.index ["model_name", "report_name", "grouping", "aggregation", "conditio…
+ t.index ["model_name", "report_name", "grouping", "aggregation", "conditio…
end
- add_index "reportable_cache", ["model_name", "report_name", "grouping", "agg…
- add_index "reportable_cache", ["model_name", "report_name", "grouping", "agg…
-
- create_table "settings", force: true do |t|
+ create_table "settings", force: :cascade do |t|
t.string "var", null: false
t.text "value"
t.integer "thing_id"
t.string "thing_type", limit: 30
- t.datetime "created_at"
- t.datetime "updated_at"
+ t.datetime "created_at", null: false
+ t.datetime "updated_at", null: false
+ t.index ["thing_type", "thing_id", "var"], name: "index_settings_on_thing_…
end
- add_index "settings", ["thing_type", "thing_id", "var"], name: "index_settin…
-
- create_table "signature_fp", force: true do |t|
+ create_table "signature_fp", force: :cascade do |t|
t.integer "signature_id", null: false
t.integer "fprint", array: true
+ t.index ["signature_id"], name: "index_signature_fp_on_signature_id", usin…
end
- add_index "signature_fp", ["signature_id"], name: "index_signature_fp_on_sig…
-
- create_table "signatures", force: true do |t|
- t.datetime "created_at"
- t.datetime "updated_at"
+ create_table "signatures", force: :cascade do |t|
+ t.datetime "created_at", null: false
+ t.datetime "updated_at", null: false
t.text "name", null: false
t.string "source"
t.text "description"
@@ -167,7 +158,7 @@ ActiveRecord::Schema.define(version: 20130113004653) do
t.integer "risk"
end
- create_table "users", force: true do |t|
+ create_table "users", force: :cascade do |t|
t.string "login", null: false
t.string "email"
t.string "crypted_password", null: false
@@ -182,8 +173,8 @@ ActiveRecord::Schema.define(version: 20130113004653) do
t.datetime "last_login_at"
t.string "current_login_ip"
t.string "last_login_ip"
- t.datetime "created_at"
- t.datetime "updated_at"
+ t.datetime "created_at", null: false
+ t.datetime "updated_at", null: false
t.boolean "enabled", default: true
t.boolean "admin", default: true
end
diff --git a/db/seeds.rb b/db/seeds.rb
@@ -0,0 +1,7 @@
+# This file should contain all the record creation needed to seed the database…
+# The data can then be loaded with the rails db:seed command (or created along…
+#
+# Examples:
+#
+# movies = Movie.create([{ name: 'Star Wars' }, { name: 'Lord of the Rings' …
+# Character.create(name: 'Luke', movie: movies.first)
diff --git a/config/initializers/bootstrap.rb b/lib/assets/.keep
diff --git a/config/initializers/bootstrap.rb b/lib/tasks/.keep
diff --git a/lib/warvox/audio/raw.rb b/lib/warvox/audio/raw.rb
@@ -88,7 +88,7 @@ class Raw
raise RuntimeError, "The sox binary could not be find, make sure it is i…
end
- o, s = Open3.capture2("#{sox} -t raw -b 16 -e signed-integer -r 8000 - -t …
+ o, s = Open3.capture2("#{sox} -t raw -b 16 -e signed-integer -r 8000 - -t …
o
end
diff --git a/lib/warvox/jobs/analysis.rb b/lib/warvox/jobs/analysis.rb
@@ -72,27 +72,27 @@ class Analysis < Base
case @conf[:scope]
when 'calls'
if @conf[:force]
- query = {:id => @conf[:target_ids], :answered => true, :busy => false}
+ query = {id: @conf[:target_ids], answered: true, busy: false}
else
- query = {:id => @conf[:target_ids], :answered => true, :busy => false,…
+ query = {id: @conf[:target_ids], answered: true, busy: false, analysis…
end
when 'job'
if @conf[:force]
- query = {:job_id => @conf[:target_id], :answered => true, :busy => fal…
+ query = {job_id: @conf[:target_id], answered: true, busy: false}
else
- query = {:job_id => @conf[:target_id], :answered => true, :busy => fal…
+ query = {job_id: @conf[:target_id], answered: true, busy: false, analy…
end
when 'project'
if @conf[:force]
- query = {:project_id => @conf[:target_id], :answered => true, :busy =>…
+ query = {project_id: @conf[:target_id], answered: true, busy: false}
else
- query = {:project_id => @conf[:target_id], :answered => true, :busy =>…
+ query = {project_id: @conf[:target_id], answered: true, busy: false, a…
end
when 'global'
if @conf[:force]
- query = {:answered => true, :busy => false}
+ query = {answered: true, busy: false}
else
- query = {:answered => true, :busy => false, :analysis_started_at => ni…
+ query = {answered: true, busy: false, analysis_started_at: nil}
end
else
# Bail if we don't have a valid scope
@@ -295,14 +295,14 @@ class Analysis < Base
sproc = Classifier.new
sproc.data =
{
- :raw => raw,
- :freq => freq,
- :fcnt => fcnt,
- :fft => fft,
- :pks => pks,
- :pkz => pkz,
- :maxf => maxf,
- :maxp => maxp
+ raw: raw,
+ freq: freq,
+ fcnt: fcnt,
+ fft: fft,
+ pks: pks,
+ pkz: pkz,
+ maxf: maxf,
+ maxp: maxp
}
WarVOX::Config.classifiers_load.each do |sigfile|
diff --git a/lib/warvox/jobs/dialer.rb b/lib/warvox/jobs/dialer.rb
@@ -48,15 +48,15 @@ class Dialer < Base
res = []
::ActiveRecord::Base.connection_pool.with_connection {
- ::Provider.where(:enabled => true).all.each do |prov|
+ ::Provider.where(enabled: true).all.each do |prov|
info = {
- :name => prov.name,
- :id => prov.id,
- :port => prov.port,
- :host => prov.host,
- :user => prov.user,
- :pass => prov.pass,
- :lines => prov.lines
+ name: prov.name,
+ id: prov.id,
+ port: prov.port,
+ host: prov.host,
+ user: prov.user,
+ pass: prov.pass,
+ lines: prov.lines
}
1.upto(prov.lines) {|i| res.push(info) }
end
diff --git a/lib/warvox/proto/iax2/client.rb b/lib/warvox/proto/iax2/client.rb
@@ -22,10 +22,10 @@ class Client
def initialize(uopts={})
opts = {
- :caller_number => '15555555555',
- :caller_name => '',
- :server_port => IAX2_DEFAULT_PORT,
- :context => { }
+ caller_number: '15555555555',
+ caller_name: '',
+ server_port: IAX2_DEFAULT_PORT,
+ context: { }
}.merge(uopts)
self.caller_name = opts[:caller_name]
diff --git a/script/rails b/script/rails
@@ -1,6 +0,0 @@
-#!/usr/bin/env ruby
-# This command will automatically be run when you run "rails" with Rails 3 gem…
-
-APP_PATH = File.expand_path('../../config/application', __FILE__)
-require File.expand_path('../../config/boot', __FILE__)
-require 'rails/commands'
diff --git a/spec/factories/settings.rb b/spec/factories/settings.rb
@@ -12,7 +12,7 @@
#
FactoryGirl.define do
- factory :setting, :class => 'Settings' do
+ factory :setting, class: 'Settings' do
var "CachedStuff"
end
diff --git a/spec/rails_helper.rb b/spec/rails_helper.rb
@@ -7,6 +7,8 @@ require 'spec_helper'
require 'rspec/rails'
# Add additional requires below this line. Rails is not loaded until this poin…
+require 'capybara/rails'
+
# Requires supporting ruby files with custom matchers and macros, etc, in
# spec/support/ and its subdirectories. Files matching `spec/**/*_spec.rb` are
# run as spec files by default. This means that files in spec/support that end
@@ -22,14 +24,11 @@ require 'rspec/rails'
#
Dir[Rails.root.join('spec/support/**/*.rb')].each { |f| require f }
-# Checks for pending migrations before tests are run.
+# Checks for pending migration and applies them before tests are run.
# If you are not using ActiveRecord, you can remove this line.
ActiveRecord::Migration.maintain_test_schema!
RSpec.configure do |config|
- # FactoryGirl Syntax
- config.include FactoryGirl::Syntax::Methods
-
# Remove this line if you're not using ActiveRecord or ActiveRecord fixtures
config.fixture_path = "#{::Rails.root}/spec/fixtures"
@@ -52,4 +51,9 @@ RSpec.configure do |config|
# The different available types are documented in the features, such as in
# https://relishapp.com/rspec/rspec-rails/docs
config.infer_spec_type_from_file_location!
+
+ # Filter lines from Rails gems in backtraces.
+ config.filter_rails_from_backtrace!
+ # arbitrary gems may also be filtered via:
+ # config.filter_gems_from_backtrace("gem name")
end
diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb
@@ -1,3 +1,5 @@
+require 'capybara/rspec'
+
# This file was generated by the `rails generate rspec:install` command. Conve…
# specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
# The generated `.rspec` file contains `--require spec_helper` which will cause
@@ -40,15 +42,22 @@ RSpec.configure do |config|
mocks.verify_partial_doubles = true
end
+ # This option will default to `:apply_to_host_groups` in RSpec 4 (and will
+ # have no way to turn it off -- the option exists only for backwards
+ # compatibility in RSpec 3). It causes shared context metadata to be
+ # inherited by the metadata hash of host groups and examples, rather than
+ # triggering implicit auto-inclusion in groups with matching metadata.
+ config.shared_context_metadata_behavior = :apply_to_host_groups
+
# The settings below are suggested to provide a good initial experience
# with RSpec, but feel free to customize to your heart's content.
=begin
- # These two settings work together to allow you to limit a spec run
- # to individual examples or groups you care about by tagging them with
- # `:focus` metadata. When nothing is tagged with `:focus`, all examples
- # get run.
- config.filter_run :focus
- config.run_all_when_everything_filtered = true
+ # This allows you to limit a spec run to individual examples or groups
+ # you care about by tagging them with `:focus` metadata. When nothing
+ # is tagged with `:focus`, all examples get run. RSpec also provides
+ # aliases for `it`, `describe`, and `context` that include `:focus`
+ # metadata: `fit`, `fdescribe` and `fcontext`, respectively.
+ config.filter_run_when_matching :focus
# Allows RSpec to persist some state between runs in order to support
# the `--only-failures` and `--next-failure` CLI options. We recommend
@@ -57,9 +66,9 @@ RSpec.configure do |config|
# Limits the available syntax to the non-monkey patched syntax that is
# recommended. For more details, see:
- # - http://myronmars.to/n/dev-blog/2012/06/rspecs-new-expectation-syntax
+ # - http://rspec.info/blog/2012/06/rspecs-new-expectation-syntax/
# - http://www.teaisaweso.me/blog/2013/05/27/rspecs-new-message-expectatio…
- # - http://myronmars.to/n/dev-blog/2014/05/notable-changes-in-rspec-3#new_…
+ # - http://rspec.info/blog/2014/05/notable-changes-in-rspec-3/#zero-monkey…
config.disable_monkey_patching!
# Many RSpec users commonly either run the entire suite or an individual
diff --git a/spec/support/auth_logic_helpers.rb b/spec/support/auth_logic_helpe…
@@ -2,7 +2,7 @@ module Authlogic
module TestHelper
def create_user_session(user)
visit login_path
- within "#new_user_session" do
+ within "form#new_user_session" do
expect(page).to have_content "Username"
expect(page).to have_content "Password"
fill_in "user_session_login", with: user.login
@@ -17,4 +17,4 @@ end
RSpec.configure do |config|
config.include Authlogic::TestHelper, type: :request
config.include Authlogic::TestHelper, type: :feature
-end
-\ No newline at end of file
+end
diff --git a/spec/support/factory_girl.rb b/spec/support/factory_girl.rb
@@ -0,0 +1,3 @@
+RSpec.configure do |config|
+ config.include FactoryGirl::Syntax::Methods
+end
You are viewing proxied material from jay.scot. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.