Browse Source

2017 refactor

development
Godwin 7 years ago
parent
commit
d1db46ffaf
  1. 4
      .gitignore
  2. 133
      Gemfile
  3. 633
      Gemfile.lock
  4. 25
      Guardfile
  5. 5
      README.md
  6. 31
      Rakefile
  7. BIN
      app/assets/images/test-poster.png
  8. 1
      app/assets/javascripts/userfield.js
  9. 23
      app/assets/stylesheets/_application.scss
  10. 194
      app/assets/stylesheets/bumbleberry-settings.json
  11. 398
      app/assets/stylesheets/user-mailer.scss
  12. 102
      app/controllers/administration_controller.rb
  13. 302
      app/controllers/application_controller.rb
  14. 146
      app/controllers/conference_administration_controller.rb
  15. 71
      app/controllers/conferences_controller.rb
  16. 101
      app/controllers/oauths_controller.rb
  17. 8
      app/controllers/workshops_controller.rb
  18. 163
      app/helpers/admin_helper.rb
  19. 2219
      app/helpers/application_helper.rb
  20. 407
      app/helpers/bike_bike_form_helper.rb
  21. 729
      app/helpers/form_helper.rb
  22. 100
      app/helpers/geocoder_helper.rb
  23. 74
      app/helpers/i18n_helper.rb
  24. 88
      app/helpers/page_helper.rb
  25. 30
      app/helpers/registration_helper.rb
  26. 366
      app/helpers/table_helper.rb
  27. 288
      app/helpers/widgets_helper.rb
  28. 4
      app/mailers/user_mailer.rb
  29. 3
      app/models/authentication.rb
  30. 166
      app/models/city.rb
  31. 21
      app/models/city_cache.rb
  32. 37
      app/models/comment.rb
  33. 160
      app/models/conference.rb
  34. 2
      app/models/conference_admin.rb
  35. 4
      app/models/conference_administrator.rb
  36. 4
      app/models/conference_host_organization.rb
  37. 74
      app/models/conference_registration.rb
  38. 4
      app/models/conference_registration_form_field.rb
  39. 5
      app/models/conference_registration_response.rb
  40. 7
      app/models/conference_type.rb
  41. 40
      app/models/email_confirmation.rb
  42. 20
      app/models/event.rb
  43. 25
      app/models/event_location.rb
  44. 2
      app/models/event_type.rb
  45. 21
      app/models/location.rb
  46. 6
      app/models/locations_organization.rb
  47. 77
      app/models/organization.rb
  48. 2
      app/models/organization_status.rb
  49. 75
      app/models/registration_form_field.rb
  50. 68
      app/models/user.rb
  51. 11
      app/models/user_organization_relationship.rb
  52. 2
      app/models/version.rb
  53. 180
      app/models/workshop.rb
  54. 2
      app/models/workshop_facilitator.rb
  55. 4
      app/models/workshop_interest.rb
  56. 2
      app/models/workshop_presentation_style.rb
  57. 2
      app/models/workshop_requested_resource.rb
  58. 2
      app/models/workshop_resource.rb
  59. 2
      app/models/workshop_stream.rb
  60. 104
      app/uploaders/avatar_uploader.rb
  61. 54
      app/uploaders/cover_uploader.rb
  62. 57
      app/uploaders/logo_uploader.rb
  63. 69
      app/uploaders/poster_uploader.rb
  64. 2
      app/views/admin/new.html.haml
  65. 3
      app/views/application/500.html.haml
  66. 2
      app/views/application/_contact.html.haml
  67. 2
      app/views/application/_login.html.haml
  68. 2
      app/views/application/_login_confirm.html.haml
  69. 6
      app/views/application/_login_confirmation_sent.html.haml
  70. 2
      app/views/application/_not_a_translator.html.haml
  71. 2
      app/views/application/_translator_login.html.haml
  72. 16
      app/views/application/contact.html.haml
  73. 3
      app/views/application/home.html.haml
  74. 16
      app/views/application/permission_denied.html.haml
  75. 2
      app/views/application/update_user.html.haml
  76. 2
      app/views/application/user_settings.html.haml
  77. 10
      app/views/conference_administration/_administrators.html.haml
  78. 6
      app/views/conference_administration/_broadcast.html.haml
  79. 2
      app/views/conference_administration/_dates.html.haml
  80. 2
      app/views/conference_administration/_description.html.haml
  81. 4
      app/views/conference_administration/_events.html.haml
  82. 6
      app/views/conference_administration/_locations.html.haml
  83. 4
      app/views/conference_administration/_meals.html.haml
  84. 2
      app/views/conference_administration/_payment_message.html.haml
  85. 2
      app/views/conference_administration/_paypal.html.haml
  86. 2
      app/views/conference_administration/_poster.html.haml
  87. 2
      app/views/conference_administration/_providers.html.haml
  88. 4
      app/views/conference_administration/_publish_schedule.html.haml
  89. 2
      app/views/conference_administration/_registration_status.html.haml
  90. 2
      app/views/conference_administration/_registrations.html.haml
  91. 167
      app/views/conference_administration/_schedule.html.haml
  92. 2
      app/views/conference_administration/_suggested_amounts.html.haml
  93. 4
      app/views/conference_administration/_workshop_times.html.haml
  94. 6
      app/views/conferences/_administration.html.haml
  95. 29
      app/views/conferences/_conference.html.haml
  96. 20
      app/views/conferences/_confirm_email.html.haml
  97. 4
      app/views/conferences/_contact_info.html.haml
  98. 2
      app/views/conferences/_done.html.haml
  99. 10
      app/views/conferences/_email_confirm.html.haml
  100. 4
      app/views/conferences/_hosting.html.haml

4
.gitignore

@ -47,10 +47,6 @@ rerun.txt
pickle-email-*.html
.project
# Ignore Gemfile.lock so that we always get the most up to date gems
# We'll be testing in 'preview' to avoid clashes
Gemfile.lock
# Ignore Redis' dataset snapshot
dump.rdb

133
Gemfile

@ -10,93 +10,106 @@ gem 'rack-mini-profiler'
gem 'haml'
gem 'nokogiri', '~> 1.6.8.rc2'
gem 'tzinfo-data'
gem 'sass'
gem 'sass-rails'
gem 'uglifier', '>= 1.3.0'
# replace this once these changes are merged in sorcery
gem 'sorcery', git: 'https://github.com/tg90nor/sorcery.git', branch: 'make-facebook-provider-use-json-token-parser'
gem 'carrierwave'
gem 'carrierwave-imageoptimizer'
gem 'mini_magick'
gem 'activerecord-session_store'
gem 'premailer-rails'
gem 'sidekiq'
gem 'letter_opener'
gem 'launchy'
if Dir.exists?('../lingua_franca')
gem 'lingua_franca', :path => '../lingua_franca'
gem 'lingua_franca', path: '../lingua_franca'
else
gem 'lingua_franca', :git => 'git://github.com/lingua-franca/lingua_franca.git'
gem 'lingua_franca', git: 'https://github.com/lingua-franca/lingua_franca.git', :branch => '2017'
end
gem 'tzinfo-data'
gem 'sass'
gem 'sass-rails'
if Dir.exists?('../marmara')
gem 'marmara', path: '../marmara'
else
gem 'marmara', git: 'https://github.com/lingua-franca/marmara.git'
end
if Dir.exists?('../bumbleberry')
gem 'bumbleberry', :path => "../bumbleberry"
if Dir.exists?('../bikecollectives_core')
gem 'bikecollectives_core', path: '../bikecollectives_core'
else
gem 'bumbleberry', :git => 'git://github.com/bumbleberry/bumbleberry.git'
gem 'bikecollectives_core', git: 'https://github.com/bikebike/bikecollectives_core.git'
end
if Dir.exists?('../paypal-express')
gem 'paypal-express', :path => "../paypal-express"
if Dir.exists?('../bumbleberry')
gem 'bumbleberry', path: '../bumbleberry'
else
gem 'paypal-express', :git => 'git://github.com/bikebike/paypal-express.git'
gem 'bumbleberry', git: 'https://github.com/bumbleberry/bumbleberry.git'
end
gem 'uglifier', '>= 1.3.0'
gem 'sorcery', '>= 0.8.1'
gem 'oauth2', '~> 0.8.0'
gem 'carrierwave'
gem 'carrierwave-imageoptimizer'
gem 'mini_magick'
# gem 'paper_trail', '~> 3.0.5'
# Bike!Bike! specific stuff
gem 'paypal-express', git: 'https://github.com/ianfleeton/paypal-express'
gem 'geocoder'
gem 'paper_trail', '~> 3.0.5'
gem 'sitemap_generator'
gem 'activerecord-session_store'
gem 'sass-json-vars'
gem 'premailer-rails'
gem 'redcarpet'
gem 'sidekiq'
gem 'letter_opener'
gem 'launchy'
gem 'to_spreadsheet', :git => 'git://github.com/glebm/to_spreadsheet.git'
group :test do
gem 'rspec'
gem 'rspec-rails'
end
gem 'to_spreadsheet', git: 'https://github.com/glebm/to_spreadsheet.git'
group :development do
gem 'better_errors'
gem 'binding_of_caller'
gem 'meta_request'
gem 'capistrano', '~> 3.1'
gem 'capistrano-rails', '~> 1.1'
gem 'capistrano-faster-assets', '~> 1.0'
gem 'eventmachine', :github => 'krzcho/eventmachine', :branch => 'master'
gem 'thin'# , :github => 'krzcho/thin', :branch => 'master'
gem 'better_errors'
gem 'binding_of_caller'
gem 'meta_request'
gem 'capistrano', '~> 3.1'
gem 'capistrano-rails', '~> 1.1'
gem 'capistrano-faster-assets', '~> 1.0'
gem 'eventmachine', git: 'https://github.com/krzcho/eventmachine', :branch => 'master'
gem 'thin'# , :github => 'krzcho/thin', :branch => 'master'
gem 'rubocop', require: false
gem 'haml-lint', require: false
end
group :test do
gem 'gherkin3', '>= 3.1.0'
gem 'cucumber'
gem 'cucumber-core'
gem 'cucumber-rails'
gem 'poltergeist'
gem 'guard-rspec'
gem 'factory_girl_rails'
gem 'coveralls', require: false
gem 'selenium-webdriver'
gem 'simplecov', require: false
gem 'webmock', require: false
gem 'database_cleaner'
gem 'mocha'
gem 'rspec'
gem 'rspec-rails'
gem 'gherkin3', '>= 3.1.0'
gem 'cucumber'
gem 'cucumber-core'
gem 'cucumber-rails', require: false
gem 'guard-cucumber'
gem 'poltergeist'
gem 'capybara-email'
# gem 'capybara-webkit'
gem 'guard-rspec'
gem 'factory_girl_rails'
gem 'coveralls', require: false
gem 'selenium-webdriver'
gem 'simplecov', require: false
gem 'webmock', require: false
gem 'database_cleaner'
gem 'mocha'
end
group :staging, :production, :preview do
gem 'rails_12factor'
gem 'rails_12factor'
end
group :production, :preview do
gem 'unicorn'
gem 'daemon-spawn'
gem 'daemons'
gem 'unicorn', require: false
gem 'daemon-spawn'
gem 'daemons'
end
platforms 'mswin', 'mingw' do
group :test do
gem 'wdm', '>= 0.1.0'
end
group :test do
gem 'wdm', '>= 0.1.0'
gem 'win32console', require: false
end
end

633
Gemfile.lock

@ -0,0 +1,633 @@
GIT
remote: https://github.com/glebm/to_spreadsheet.git
revision: 4c08455646dd18de51cc1ec05717fbb240c78a68
specs:
to_spreadsheet (1.0.6)
axlsx
chronic
nokogiri
rails
responders
GIT
remote: https://github.com/ianfleeton/paypal-express
revision: 629749621de4c65dd6651649f98410315520fb3d
specs:
paypal-express (0.8.1)
activesupport (>= 2.3)
attr_required (>= 0.0.5)
rest-client
GIT
remote: https://github.com/krzcho/eventmachine
revision: 651a35ee9df9826e048c3b3721e2c6b415c5a328
branch: master
specs:
eventmachine (1.2.1)
GIT
remote: https://github.com/tg90nor/sorcery.git
revision: 79b69a87ce168c47fab76921874aa7e8cb727002
branch: make-facebook-provider-use-json-token-parser
specs:
sorcery (0.10.3)
bcrypt (~> 3.1)
oauth (~> 0.4, >= 0.4.4)
oauth2 (~> 1.0, >= 0.8.0)
PATH
remote: ../bikecollectives_core
specs:
bikecollectives_core (0.1.0)
activerecord-session_store
carrierwave
carrierwave-imageoptimizer
haml
launchy
letter_opener
mini_magick
pg
premailer-rails
rails (~> 4.2.0)
redcarpet
sass
sass-json-vars
sass-rails
sidekiq
uglifier (>= 1.3.0)
PATH
remote: ../bumbleberry
specs:
bumbleberry (0.0.1)
blockspring
cairo
railties
rsvg2
sass-json-vars
sass-rails
PATH
remote: ../lingua_franca
specs:
lingua_franca (0.0.1)
diffy
forgery
http_accept_language
i18n
rails (~> 4.2.0.rc2)
rails-i18n
rubyzip
PATH
remote: ../marmara
specs:
marmara (1.0.2)
css_parser (>= 1.5.0.pre)
GEM
remote: http://rubygems.org/
specs:
actionmailer (4.2.0)
actionpack (= 4.2.0)
actionview (= 4.2.0)
activejob (= 4.2.0)
mail (~> 2.5, >= 2.5.4)
rails-dom-testing (~> 1.0, >= 1.0.5)
actionpack (4.2.0)
actionview (= 4.2.0)
activesupport (= 4.2.0)
rack (~> 1.6.0)
rack-test (~> 0.6.2)
rails-dom-testing (~> 1.0, >= 1.0.5)
rails-html-sanitizer (~> 1.0, >= 1.0.1)
actionview (4.2.0)
activesupport (= 4.2.0)
builder (~> 3.1)
erubis (~> 2.7.0)
rails-dom-testing (~> 1.0, >= 1.0.5)
rails-html-sanitizer (~> 1.0, >= 1.0.1)
activejob (4.2.0)
activesupport (= 4.2.0)
globalid (>= 0.3.0)
activemodel (4.2.0)
activesupport (= 4.2.0)
builder (~> 3.1)
activerecord (4.2.0)
activemodel (= 4.2.0)
activesupport (= 4.2.0)
arel (~> 6.0)
activerecord-session_store (1.0.0)
actionpack (>= 4.0, < 5.1)
activerecord (>= 4.0, < 5.1)
multi_json (~> 1.11, >= 1.11.2)
rack (>= 1.5.2, < 3)
railties (>= 4.0, < 5.1)
activesupport (4.2.0)
i18n (~> 0.7)
json (~> 1.7, >= 1.7.7)
minitest (~> 5.1)
thread_safe (~> 0.3, >= 0.3.4)
tzinfo (~> 1.1)
addressable (2.5.1)
public_suffix (~> 2.0, >= 2.0.2)
airbrussh (1.1.2)
sshkit (>= 1.6.1, != 1.7.0)
arel (6.0.4)
ast (2.3.0)
attr_required (1.0.1)
axlsx (2.0.1)
htmlentities (~> 4.3.1)
nokogiri (>= 1.4.1)
rubyzip (~> 1.0.0)
bcrypt (3.1.11-x64-mingw32)
bcrypt (3.1.11-x86-mingw32)
better_errors (2.1.1)
coderay (>= 1.0.0)
erubis (>= 2.6.6)
rack (>= 0.9.0)
binding_of_caller (0.7.2)
debug_inspector (>= 0.0.1)
blockspring (0.1.4)
rest-client (> 1.6.7)
builder (3.2.3)
cairo (1.15.5-x64-mingw32)
pkg-config (>= 1.1.5)
cairo (1.15.5-x86-mingw32)
pkg-config (>= 1.1.5)
callsite (0.0.11)
capistrano (3.8.0)
airbrussh (>= 1.0.0)
i18n
rake (>= 10.0.0)
sshkit (>= 1.9.0)
capistrano-bundler (1.2.0)
capistrano (~> 3.1)
sshkit (~> 1.2)
capistrano-faster-assets (1.0.2)
capistrano (>= 3.1)
capistrano-rails (1.2.3)
capistrano (~> 3.1)
capistrano-bundler (~> 1.1)
capybara (2.13.0)
addressable
mime-types (>= 1.16)
nokogiri (>= 1.3.3)
rack (>= 1.0.0)
rack-test (>= 0.5.4)
xpath (~> 2.0)
capybara-email (2.5.0)
capybara (~> 2.4)
mail
carrierwave (1.0.0)
activemodel (>= 4.0.0)
activesupport (>= 4.0.0)
mime-types (>= 1.16)
carrierwave-imageoptimizer (1.4.0)
carrierwave (>= 0.8, < 2.0)
image_optimizer (~> 1.6)
childprocess (0.6.3)
ffi (~> 1.0, >= 1.0.11)
chronic (0.10.2)
cliver (0.3.2)
coderay (1.1.1)
concurrent-ruby (1.0.5)
connection_pool (2.2.1)
coveralls (0.8.20)
json (>= 1.8, < 3)
simplecov (~> 0.14.1)
term-ansicolor (~> 1.3)
thor (~> 0.19.4)
tins (~> 1.6)
crack (0.4.3)
safe_yaml (~> 1.0.0)
css_parser (1.5.0.pre2)
addressable
cucumber (2.4.0)
builder (>= 2.1.2)
cucumber-core (~> 1.5.0)
cucumber-wire (~> 0.0.1)
diff-lcs (>= 1.1.3)
gherkin (~> 4.0)
multi_json (>= 1.7.5, < 2.0)
multi_test (>= 0.1.2)
cucumber-core (1.5.0)
gherkin (~> 4.0)
cucumber-rails (1.4.5)
capybara (>= 1.1.2, < 3)
cucumber (>= 1.3.8, < 4)
mime-types (>= 1.16, < 4)
nokogiri (~> 1.5)
railties (>= 3, < 5.1)
cucumber-wire (0.0.1)
daemon-spawn (0.4.2)
daemons (1.2.4)
database_cleaner (1.5.3)
debug_inspector (0.0.2)
diff-lcs (1.3)
diffy (3.2.0)
docile (1.1.5)
domain_name (0.5.20170404)
unf (>= 0.0.5, < 1.0.0)
erubis (2.7.0)
execjs (2.7.0)
factory_girl (4.8.0)
activesupport (>= 3.0.0)
factory_girl_rails (4.8.0)
factory_girl (~> 4.8.0)
railties (>= 3.0.0)
faraday (0.11.0)
multipart-post (>= 1.2, < 3)
ffi (1.9.18-x64-mingw32)
ffi (1.9.18-x86-mingw32)
forgery (0.6.0)
formatador (0.2.5)
gdk_pixbuf2 (3.1.1-x64-mingw32)
gio2 (= 3.1.1)
gdk_pixbuf2 (3.1.1-x86-mingw32)
gio2 (= 3.1.1)
geocoder (1.4.3)
gherkin (4.1.1)
gherkin3 (3.1.2)
gio2 (3.1.1-x64-mingw32)
glib2 (= 3.1.1)
gobject-introspection (= 3.1.1)
gio2 (3.1.1-x86-mingw32)
glib2 (= 3.1.1)
gobject-introspection (= 3.1.1)
git-version-bump (0.15.1)
glib2 (3.1.1-x64-mingw32)
cairo (>= 1.12.8)
pkg-config
glib2 (3.1.1-x86-mingw32)
cairo (>= 1.12.8)
pkg-config
globalid (0.3.7)
activesupport (>= 4.1.0)
gobject-introspection (3.1.1-x64-mingw32)
glib2 (= 3.1.1)
gobject-introspection (3.1.1-x86-mingw32)
glib2 (= 3.1.1)
guard (2.14.1)
formatador (>= 0.2.4)
listen (>= 2.7, < 4.0)
lumberjack (~> 1.0)
nenv (~> 0.1)
notiffany (~> 0.0)
pry (>= 0.9.12)
shellany (~> 0.0)
thor (>= 0.18.1)
guard-compat (1.2.1)
guard-cucumber (2.1.2)
cucumber (~> 2.0)
guard-compat (~> 1.0)
nenv (~> 0.1)
guard-rspec (4.7.3)
guard (~> 2.1)
guard-compat (~> 1.1)
rspec (>= 2.99.0, < 4.0)
haml (4.0.7)
tilt
haml-lint (0.999.999)
haml_lint
haml_lint (0.24.0)
haml (>= 4.0, < 5.1)
rainbow
rake (>= 10, < 13)
rubocop (>= 0.47.0)
sysexits (~> 1.1)
hashdiff (0.3.2)
htmlentities (4.3.4)
http-cookie (1.0.3)
domain_name (~> 0.5)
http_accept_language (2.1.0)
i18n (0.8.1)
image_optimizer (1.7.0)
json (1.8.6)
jwt (1.5.6)
kgio (2.11.0)
launchy (2.4.3)
addressable (~> 2.3)
letter_opener (1.4.1)
launchy (~> 2.2)
listen (3.1.5)
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.11)
mail (2.6.4)
mime-types (>= 1.16, < 4)
meta_request (0.4.0)
callsite (~> 0.0, >= 0.0.11)
rack-contrib (~> 1.1)
railties (>= 3.0.0, < 5.1.0)
metaclass (0.0.4)
method_source (0.8.2)
mime-types (3.1)
mime-types-data (~> 3.2015)
mime-types-data (3.2016.0521)
mini_magick (4.7.0)
mini_portile2 (2.1.0)
minitest (5.10.1)
mocha (1.2.1)
metaclass (~> 0.0.1)
multi_json (1.12.1)
multi_test (0.1.2)
multi_xml (0.6.0)
multipart-post (2.0.0)
nenv (0.3.0)
net-scp (1.2.1)
net-ssh (>= 2.6.5)
net-ssh (4.1.0)
netrc (0.11.0)
nokogiri (1.6.8.1-x64-mingw32)
mini_portile2 (~> 2.1.0)
nokogiri (1.6.8.1-x86-mingw32)
mini_portile2 (~> 2.1.0)
notiffany (0.1.1)
nenv (~> 0.1)
shellany (~> 0.0)
oauth (0.5.1)
oauth2 (1.3.1)
faraday (>= 0.8, < 0.12)
jwt (~> 1.0)
multi_json (~> 1.3)
multi_xml (~> 0.5)
rack (>= 1.2, < 3)
pango (3.1.1-x64-mingw32)
cairo (>= 1.14.0)
glib2 (= 3.1.1)
pango (3.1.1-x86-mingw32)
cairo (>= 1.14.0)
glib2 (= 3.1.1)
parser (2.4.0.0)
ast (~> 2.2)
pg (0.20.0-x64-mingw32)
pg (0.20.0-x86-mingw32)
pkg-config (1.1.7)
poltergeist (1.14.0)
capybara (~> 2.1)
cliver (~> 0.3.1)
websocket-driver (>= 0.2.0)
powerpack (0.1.1)
premailer (1.10.2)
addressable
css_parser (>= 1.4.10)
htmlentities (>= 4.0.0)
premailer-rails (1.9.5)
actionmailer (>= 3, < 6)
premailer (~> 1.7, >= 1.7.9)
pry (0.10.4)
coderay (~> 1.1.0)
method_source (~> 0.8.1)
slop (~> 3.4)
public_suffix (2.0.5)
rack (1.6.5)
rack-contrib (1.4.0)
git-version-bump (~> 0.15)
rack (~> 1.4)
rack-mini-profiler (0.10.2)
rack (>= 1.2.0)
rack-protection (1.5.3)
rack
rack-test (0.6.3)
rack (>= 1.0)
rails (4.2.0)
actionmailer (= 4.2.0)
actionpack (= 4.2.0)
actionview (= 4.2.0)
activejob (= 4.2.0)
activemodel (= 4.2.0)
activerecord (= 4.2.0)
activesupport (= 4.2.0)
bundler (>= 1.3.0, < 2.0)
railties (= 4.2.0)
sprockets-rails
rails-deprecated_sanitizer (1.0.3)
activesupport (>= 4.2.0.alpha)
rails-dom-testing (1.0.8)
activesupport (>= 4.2.0.beta, < 5.0)
nokogiri (~> 1.6)
rails-deprecated_sanitizer (>= 1.0.1)
rails-html-sanitizer (1.0.3)
loofah (~> 2.0)
rails-i18n (4.0.9)
i18n (~> 0.7)
railties (~> 4.0)
rails_12factor (0.0.3)
rails_serve_static_assets
rails_stdout_logging
rails_serve_static_assets (0.0.5)
rails_stdout_logging (0.0.5)
railties (4.2.0)
actionpack (= 4.2.0)
activesupport (= 4.2.0)
rake (>= 0.8.7)
thor (>= 0.18.1, < 2.0)
rainbow (2.2.1)
raindrops (0.18.0)
rake (11.1.2)
rb-fsevent (0.9.8)
rb-inotify (0.9.8)
ffi (>= 0.5.0)
redcarpet (3.4.0)
redis (3.3.3)
responders (2.3.0)
railties (>= 4.2.0, < 5.1)
rest-client (2.0.1-x64-mingw32)
ffi (~> 1.9)
http-cookie (>= 1.0.2, < 2.0)
mime-types (>= 1.16, < 4.0)
netrc (~> 0.8)
rest-client (2.0.1-x86-mingw32)
ffi (~> 1.9)
http-cookie (>= 1.0.2, < 2.0)
mime-types (>= 1.16, < 4.0)
netrc (~> 0.8)
rspec (3.5.0)
rspec-core (~> 3.5.0)
rspec-expectations (~> 3.5.0)
rspec-mocks (~> 3.5.0)
rspec-core (3.5.4)
rspec-support (~> 3.5.0)
rspec-expectations (3.5.0)
diff-lcs (>= 1.2.0, < 2.0)
rspec-support (~> 3.5.0)
rspec-mocks (3.5.0)
diff-lcs (>= 1.2.0, < 2.0)
rspec-support (~> 3.5.0)
rspec-rails (3.5.2)
actionpack (>= 3.0)
activesupport (>= 3.0)
railties (>= 3.0)
rspec-core (~> 3.5.0)
rspec-expectations (~> 3.5.0)
rspec-mocks (~> 3.5.0)
rspec-support (~> 3.5.0)
rspec-support (3.5.0)
rsvg2 (3.1.1-x64-mingw32)
cairo (>= 1.12.8)
gdk_pixbuf2 (= 3.1.1)
pango (>= 3.1.1)
rsvg2 (3.1.1-x86-mingw32)
cairo (>= 1.12.8)
gdk_pixbuf2 (= 3.1.1)
pango (>= 3.1.1)
rubocop (0.48.1)
parser (>= 2.3.3.1, < 3.0)
powerpack (~> 0.1)
rainbow (>= 1.99.1, < 3.0)
ruby-progressbar (~> 1.7)
unicode-display_width (~> 1.0, >= 1.0.1)
ruby-progressbar (1.8.1)
ruby_dep (1.3.1)
rubyzip (1.0.0)
safe_yaml (1.0.4)
sass (3.4.23)
sass-json-vars (0.3.3)
sass (>= 3.1)
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)
selenium-webdriver (3.3.0)
childprocess (~> 0.5)
rubyzip (~> 1.0)
websocket (~> 1.0)
shellany (0.0.1)
sidekiq (4.2.10)
concurrent-ruby (~> 1.0)
connection_pool (~> 2.2, >= 2.2.0)
rack-protection (>= 1.5.0)
redis (~> 3.2, >= 3.2.1)
simplecov (0.14.1)
docile (~> 1.1.0)
json (>= 1.8, < 3)
simplecov-html (~> 0.10.0)
simplecov-html (0.10.0)
sitemap_generator (5.3.1)
builder (~> 3.0)
slop (3.6.0)
sprockets (3.7.1)
concurrent-ruby (~> 1.0)
rack (> 1, < 3)
sprockets-rails (3.2.0)
actionpack (>= 4.0)
activesupport (>= 4.0)
sprockets (>= 3.0.0)
sshkit (1.13.1)
net-scp (>= 1.1.2)
net-ssh (>= 2.8.0)
sysexits (1.2.0)
term-ansicolor (1.5.0)
tins (~> 1.0)
thin (1.7.0)
daemons (~> 1.0, >= 1.0.9)
eventmachine (~> 1.0, >= 1.0.4)
rack (>= 1, < 3)
thor (0.19.4)
thread_safe (0.3.6)
tilt (2.0.7)
tins (1.13.2)
tzinfo (1.2.3)
thread_safe (~> 0.1)
tzinfo-data (1.2017.2)
tzinfo (>= 1.0.0)
uglifier (3.1.13)
execjs (>= 0.3.0, < 3)
unf (0.1.4)
unf_ext
unf_ext (0.0.7.2-x64-mingw32)
unf_ext (0.0.7.2-x86-mingw32)
unicode-display_width (1.1.3)
unicorn (5.3.0)
kgio (~> 2.6)
raindrops (~> 0.7)
wdm (0.1.1)
webmock (2.3.2)
addressable (>= 2.3.6)
crack (>= 0.3.2)
hashdiff
websocket (1.2.4)
websocket-driver (0.6.5)
websocket-extensions (>= 0.1.0)
websocket-extensions (0.1.2)
win32console (1.3.2-x86-mingw32)
xpath (2.0.0)
nokogiri (~> 1.3)
PLATFORMS
x64-mingw32
x86-mingw32
DEPENDENCIES
activerecord-session_store
better_errors
bikecollectives_core!
binding_of_caller
bumbleberry!
capistrano (~> 3.1)
capistrano-faster-assets (~> 1.0)
capistrano-rails (~> 1.1)
capybara-email
carrierwave
carrierwave-imageoptimizer
coveralls
cucumber
cucumber-core
cucumber-rails
daemon-spawn
daemons
database_cleaner
eventmachine!
factory_girl_rails
geocoder
gherkin3 (>= 3.1.0)
guard-cucumber
guard-rspec
haml
haml-lint
launchy
letter_opener
lingua_franca!
marmara!
meta_request
mini_magick
mocha
nokogiri (~> 1.6.8.rc2)
paypal-express!
pg
poltergeist
premailer-rails
rack-mini-profiler
rails (= 4.2.0)
rails_12factor
rake (= 11.1.2)
redcarpet
rspec
rspec-rails
rubocop
ruby_dep (= 1.3.1)
sass
sass-json-vars
sass-rails
selenium-webdriver
sidekiq
simplecov
sitemap_generator
sorcery!
thin
to_spreadsheet!
tzinfo-data
uglifier (>= 1.3.0)
unicorn
wdm (>= 0.1.0)
webmock
win32console
BUNDLED WITH
1.14.4

25
Guardfile

@ -22,3 +22,28 @@ guard :rspec do
watch(%r{^spec/acceptance/steps/(.+)_steps\.rb$}) { |m| Dir[File.join("**/#{m[1]}.feature")][0] || 'spec/acceptance' }
end
cucumber_options = {
# Below are examples overriding defaults
# cmd: 'bin/cucumber',
# cmd_additional_args: '--profile guard',
# all_after_pass: false,
# all_on_start: false,
# keep_failed: false,
# feature_sets: ['features/frontend', 'features/experimental'],
# run_all: { cmd_additional_args: '--profile guard_all' },
# focus_on: { 'wip' }, # @wip
# notification: false
}
guard "cucumber", cucumber_options do
watch(%r{^features/.+\.feature$})
watch(%r{^features/support/.+$}) { "features" }
watch(%r{^features/step_definitions/(.+)_steps\.rb$}) do |m|
Dir[File.join("**/#{m[1]}.feature")][0] || "features"
end
end

5
README.md

@ -150,3 +150,8 @@ On hold until our design team determines a director for our identity.
## Testing Practices ##
Our focus will be on integration testing using Capybara. While testing the app records all translations that it finds, whether or not they exist, and which pages that they were found on.
## Attribution ##
### Icons ###

31
Rakefile

@ -1,5 +1,8 @@
# Add your own tasks in files placed in lib/tasks ending in .rake,
# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
require 'rubygems'
require 'cucumber'
require 'cucumber/rake/task'
require File.expand_path('../config/application', __FILE__)
@ -61,3 +64,31 @@ task update_cities_fr: :environment do
c.save!
end
end
task :i18n do
LinguaFranca.test LinguaFranca::TestModes::RECORD do
Rake::Task[:cucumber].execute
end
end
task :css do
ENV['CSS_TEST'] = '1'
Rake::Task[:cucumber].execute
ENV['CSS_TEST'] = nil
end
task :a11y do
ENV['TEST_A11Y'] = '1'
Rake::Task[:cucumber].execute
ENV['TEST_A11Y'] = nil
end
task "cucumber:debug" do
ENV['TEST_DEBUG'] = '1'
Rake::Task[:cucumber].execute
ENV['TEST_DEBUG'] = nil
end
Cucumber::Rake::Task.new(:cucumber) do |t|
t.cucumber_opts = "features --format pretty"
end

BIN
app/assets/images/test-poster.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

1
app/assets/javascripts/userfield.js

@ -21,6 +21,7 @@
var field = fields[i];
var input = field.getElementsByTagName('input')[0];
var name = field.getElementsByClassName('user-name')[0];
}
}, false);
})();

23
app/assets/stylesheets/_application.scss

@ -1710,17 +1710,17 @@ ul.warnings {
a.policy {
background-color: $colour-5;
@include _(order, 1);
// @include _(order, 1);
}
a.about {
background-color: $colour-3;
@include _(order, 1);
// @include _(order, 1);
}
a.conferences {
background-color: $colour-2;
@include _(order, 1);
// @include _(order, 1);
}
form, .register {
@ -1728,7 +1728,8 @@ ul.warnings {
}
a, form {
width: 33%;
width: 33.333%;
float: left;
@include _(flex, 1);
}
@ -2948,12 +2949,11 @@ a.logo {
.conference-banner {
text-align: center;
padding: 0;
margin: 0 -1em 2em;
width: auto;
margin: 0;
.title {
font-size: 5vw;
margin: 1em auto 2em;
margin: 1em auto 0;
h1, h2 {
margin: 0;
@ -2971,6 +2971,7 @@ a.logo {
img {
max-width: 100%;
margin-top: 2em;
}
}
@ -3311,8 +3312,11 @@ body.error-locale-not-available {
body {
#primary-content {
@include _(transition, 'filter 250ms ease-in-out, -webkit-filter 250ms ease-in-out');
display: -webkit-flex;
flex-direction: column;
@if capable_of(flexbox, true) {
display: -webkit-flex;
flex-direction: column;
}
min-height: 100vh;
overflow: hidden;
}
@ -4617,6 +4621,7 @@ html[data-ontop] {
.nav a {
&[class] {
width: auto;
float: none;
overflow: visible;
margin-left: 0.725em;
padding: 0.25em 0.5em;

194
app/assets/stylesheets/bumbleberry-settings.json

@ -1,103 +1,105 @@
{
"stylesheets": ["application", "editor"],
"precompile": {
"test": {
"chrome": ["51"]
},
"development": {
"and_chr": ["55"],
"chrome": ["55"],
"edge": ["13"],
"firefox": ["50"],
"ie": ["11"],
"ios_saf": ["8", "9"]
}
"stylesheets": ["application", "editor"],
"precompile": {
"test": {
"safari": ["5"],
"chrome": ["55"]
},
"background-color": "#FFFEFE",
"breakpoint-unit": "px",
"unresponsive-width": 1000,
"row-width": 1000,
"total-columns": 12,
"platforms": {
"mobile": {
"range": [0,700]
},
"desktop": {
"range": [0,0]
}
"development": {
"safari": ["5"],
"and_chr": ["56"],
"chrome": ["56"],
"edge": ["13"],
"firefox": ["50"],
"ie": ["11"],
"ios_saf": ["8", "9"]
}
},
"background-color": "#FFFEFE",
"breakpoint-unit": "px",
"unresponsive-width": 1000,
"row-width": 1000,
"total-columns": 12,
"platforms": {
"mobile": {
"range": [0,700]
},
"desktop": {
"range": [0,0]
}
},
"breakpoints": {
"small": {
"range": [0],
"grid": "y",
"offset": "n",
"reset-order": "n"
},
"breakpoints": {
"small": {
"range": [0],
"grid": "y",
"offset": "n",
"reset-order": "n"
},
"medium": {
"range": [680],
"grid": "y",
"offset": "n",
"reset-order": "n"
},
"large": {
"range": [1024],
"grid": "y",
"offset": "n",
"reset-order": "n"
},
"small-only": {
"range": [0,319],
"grid": "n",
"offset": "n",
"reset-order": "n"
},
"medium-only": {
"range": [320,1023],
"grid": "n",
"offset": "n",
"reset-order": "n"
}
"medium": {
"range": [680],
"grid": "y",
"offset": "n",
"reset-order": "n"
},
"grid-push": [1, 2],
"grid-pull": [1, 2],
"font-loading-method": "http2",
"fonts": {
"primary": {
"name": "Sanchez Light",
"location": "Sanchez",
"svg_id": "wf",
"ttf_type": "ttf",
"fallback": ["Helvetica Neue", "Helvetica", "Arial", "Lucida Grande", "sans-serif"]
},
"secondary": {
"name": "AlteHaasGroteskBold",
"location": "AlteHaasGroteskBold",
"svg_id": "alte_haas_groteskbold",
"ttf_type": "ttf",
"fallback": ["Helvetica Neue", "Helvetica", "Arial", "Lucida Grande", "sans-serif"]
},
"monospace": {
"name": "NotCourierSans",
"location": "NotCourierSans",
"svg_id": "notcouriersans",
"ttf_type": "ttf",
"fallback": ["Courier New", "monospace"],
"auto_load": "n"
},
"monospace-bold": {
"name": "NotCourierSans",
"location": "NotCourierSans-Bold",
"svg_id": "notcouriersansbold",
"ttf_type": "ttf",
"fallback": ["Courier New", "monospace"],
"auto_load": "n",
"weight": "bold"
}
"large": {
"range": [1024],
"grid": "y",
"offset": "n",
"reset-order": "n"
},
"sprites": {
"icons": {
"bb-icon-logo": [0, 0, "182px", "149px"],
"bb-icon-logo-text": ["182px", 0, "136px", "149px"]
}
"small-only": {
"range": [0,319],
"grid": "n",
"offset": "n",
"reset-order": "n"
},
"medium-only": {
"range": [320,1023],
"grid": "n",
"offset": "n",
"reset-order": "n"
}
},
"grid-push": [1, 2],
"grid-pull": [1, 2],
"font-loading-method": "http2",
"fonts": {
"primary": {
"name": "Sanchez Light",
"location": "Sanchez",
"svg_id": "wf",
"ttf_type": "ttf",
"fallback": ["Helvetica Neue", "Helvetica", "Arial", "Lucida Grande", "sans-serif"]
},
"secondary": {
"name": "AlteHaasGroteskBold",
"location": "AlteHaasGroteskBold",
"svg_id": "alte_haas_groteskbold",
"ttf_type": "ttf",
"fallback": ["Helvetica Neue", "Helvetica", "Arial", "Lucida Grande", "sans-serif"]
},
"monospace": {
"name": "NotCourierSans",
"location": "NotCourierSans",
"svg_id": "notcouriersans",
"ttf_type": "ttf",
"fallback": ["Courier New", "monospace"],
"auto_load": "n"
},
"monospace-bold": {
"name": "NotCourierSans",
"location": "NotCourierSans-Bold",
"svg_id": "notcouriersansbold",
"ttf_type": "ttf",
"fallback": ["Courier New", "monospace"],
"auto_load": "n",
"weight": "bold"
}
},
"sprites": {
"icons": {
"bb-icon-logo": [0, 0, "182px", "149px"],
"bb-icon-logo-text": ["182px", 0, "136px", "149px"]
}
}
}

398
app/assets/stylesheets/user-mailer.scss

@ -1,268 +1,268 @@
@import "settings";
body {
width: 100% !important;
-webkit-text-size-adjust: 100%;
-ms-text-size-adjust: 100%;
margin: 1em;
padding: 0;
width: 100% !important;
-webkit-text-size-adjust: 100%;
-ms-text-size-adjust: 100%;
margin: 1em;
padding: 0;
}
.ExternalClass {
width: 100%;
line-height: 100%;
width: 100%;
line-height: 100%;
p, span, font, td, div {
line-height: 100%;
}
p, span, font, td, div {
line-height: 100%;
}
}
#backgroundTable {
margin: 0;
padding: 0;
width: 100% !important;
max-width: 100% !important;
line-height: 100% !important;
margin: 0;
padding: 0;
width: 100% !important;
max-width: 100% !important;
line-height: 100% !important;
}
img {
outline: none;
text-decoration: none;
-ms-interpolation-mode: bicubic;
outline: none;
text-decoration: none;
-ms-interpolation-mode: bicubic;
a & {
border: none;
}
a & {
border: none;
}
}
.image_fix {
display: block;
max-width: 100%;
display: block;
max-width: 100%;
}
a {
color: $colour-1;
#outlook & {
padding: 0;
}
&:link { color: $colour-1; }
&:visited { color: $colour-1; }
&:hover { color: $colour-5; }
@media only screen and (max-device-width: 480px) {
&[href^="tel"], &[href^="sms"] {
text-decoration: none;
color: $black;
pointer-events: none;
cursor: default;
}
.mobile_link &[href^="tel"], .mobile_link &[href^="sms"] {
text-decoration: default;
color: $colour-1 !important;
pointer-events: auto;
cursor: default;
}
}
color: $colour-1;
#outlook & {
padding: 0;
}
&:link { color: $colour-1; }
&:visited { color: $colour-1; }
&:hover { color: $colour-5; }
@media only screen and (max-device-width: 480px) {
&[href^="tel"], &[href^="sms"] {
text-decoration: none;
color: $black;
pointer-events: none;
cursor: default;
}
.mobile_link &[href^="tel"], .mobile_link &[href^="sms"] {
text-decoration: default;
color: $colour-1 !important;
pointer-events: auto;
cursor: default;
}
}
}
p {
color: $black !important;
font-size: 1.5em;
color: $black !important;
font-size: 1.5em;
}
p, blockquote {
margin: 1em;
line-height: 1.3333em;
margin: 1em;
line-height: 1.3333em;
}
blockquote {
font-size: 1em;
font-size: 1em;
}
h1 {
font-size: 2.5em;
line-height: 1.25em;
padding: 1em 0;
&:first-child {
padding-top: 0;
}
font-size: 2.5em;
line-height: 1.25em;
padding: 1em 0;
&:first-child {
padding-top: 0;
}
}
h2 {
font-size: 1.8em;
line-height: 1.25em;
padding-bottom: 1em;
font-size: 1.8em;
line-height: 1.25em;
padding-bottom: 1em;
}
blockquote {
font-style: italic;
margin-bottom: 2em;
color: #666 !important;
border: 0.1em solid #CCC;
padding: 1em;
border-style: none none solid solid;
background-color: #F8F8F8;
font-style: italic;
margin-bottom: 2em;
color: #666 !important;
border: 0.1em solid #CCC;
padding: 1em;
border-style: none none solid solid;
background-color: #F8F8F8;
}
h1, h2, h3, h4, h5, h6 {
color: $black !important;
a {
color: $colour-1 !important;
&:active {
color: $colour-4 !important;
}
&:visited {
color: $colour-2 !important;
}
}
color: $black !important;
a {
color: $colour-1 !important;
&:active {
color: $colour-4 !important;
}
&:visited {
color: $colour-2 !important;
}
}
}
table {
border-collapse: collapse;
max-width: 512px;
min-width: 280px;
mso-table-lspace: 0pt;
mso-table-rspace: 0pt;
td {
border-collapse: collapse;
}
th {
text-align: left;
}
border-collapse: collapse;
max-width: 512px;
min-width: 280px;
mso-table-lspace: 0pt;
mso-table-rspace: 0pt;
td {
border-collapse: collapse;
}
th {
text-align: left;
}
}
table#bb_full_width,
table#ecxbb_full_width {
&, table {
max-width: none;
width: 100%;
}
&, table {
max-width: none;
width: 100%;
}
}
.error-report {
width: 100%;
max-width: 100%;
border: 0.15em solid #CCC;
background-color: #EEE;
font-size: 1.25em;
margin-bottom: 2em;
th {
background-color: #CCC;
}
td, th {
padding: 0.25em 0.5em;
&:last-child {
border-left: 0.15em solid #CCC;
min-width: 40em;
}
}
td:last-child {
font-family: monospace;
word-break: break-word;
background-color: #FFF;
font-size: 0.75em;
}
width: 100%;
max-width: 100%;
border: 0.15em solid #CCC;
background-color: #EEE;
font-size: 1.25em;
margin-bottom: 2em;
th {
background-color: #CCC;
}
td, th {
padding: 0.25em 0.5em;
&:last-child {
border-left: 0.15em solid #CCC;
min-width: 40em;
}
}
td:last-child {
font-family: monospace;
word-break: break-word;
background-color: #FFF;
font-size: 0.75em;
}
}
code {
color: #C33;
font-size: 0.9em;
color: #C33;
font-size: 0.9em;
}
pre {
font-size: 1.5em;
padding: 1em;
background-color: #333;
color: antiquewhite;
word-break: break-word;
font-size: 1.5em;
padding: 1em;
background-color: #333;
color: antiquewhite;
word-break: break-word;
}
.diff, .ecxdiff {
margin: 1em 0 5em 1em;
overflow: auto;
ul {
list-style: none;
padding: 0;
margin: 0;
position: relative;
}
li {
width: 40%;
display: inline-block;
padding: 0.5em;
margin: 0;
border-bottom: 1px solid #DDD;
//white-space: nowrap;
&:nth-child(odd) {
margin-right: -3px;
float: left;
clear: left;
}
ins {
color: #080;//lighten($colour-3, 33%);
}
del {
color: #800;
}
}
margin: 1em 0 5em 1em;
overflow: auto;
ul {
list-style: none;
padding: 0;
margin: 0;
position: relative;
}
li {
width: 40%;
display: inline-block;
padding: 0.5em;
margin: 0;
border-bottom: 1px solid #DDD;
//white-space: nowrap;
&:nth-child(odd) {
margin-right: -3px;
float: left;
clear: left;
}
ins {
color: #080;//lighten($colour-3, 33%);
}
del {
color: #800;
}
}
}
// Buttons
h3 {
b {
padding: 10px 20px;
line-height: 50px;
a, a:visited {
color: #FFF !important;
background-color: $colour-5;
text-decoration: none !important;
border-radius: 4px;
padding: 10px 15px;
margin-left: 20px;
border-bottom: 3px solid darken($colour-5, 10%);
-webkit-box-shadow: 0 0.5em 1.5em -0.75em #000;
box-shadow: 0 0.5em 1.5em -0.75em #000;
cursor: pointer !important;
}
a:hover {
background-color: darken($colour-5, 10%);
}
}
b {
padding: 10px 20px;
line-height: 50px;
a, a:visited {
color: #FFF !important;
background-color: $colour-5;
text-decoration: none !important;
border-radius: 4px;
padding: 10px 15px;
margin-left: 20px;
border-bottom: 3px solid darken($colour-5, 10%);
-webkit-box-shadow: 0 0.5em 1.5em -0.75em #000;
box-shadow: 0 0.5em 1.5em -0.75em #000;
cursor: pointer !important;
}
a:hover {
background-color: darken($colour-5, 10%);
}
}
}
@media only screen and (min-device-width: 768px) and (max-device-width: 1024px) {
a[href^="tel"], a[href^="sms"] {
text-decoration: none;
color: $colour-1;
pointer-events: none;
cursor: default;