- <% if signed_in? %>
- <% if !current_user.attends?(meetup.id) %>
- <%= link_to "I will be there!", attend_path(meetup.id), method: :put, class: "btn" %>
+
+ <% if false %>
+
+ <% if signed_in? %>
+ <% if !current_user.attends?(meetup.id) %>
+ <%= link_to "I will be there!", attend_path(meetup.id), method: :put, class: "btn" %>
+ <% else %>
+ <%= link_to "I can't make it!", cancel_path(meetup.id), method: :delete, class: "btn" %>
+ <% end %>
<% else %>
- <%= link_to "I can't make it!", cancel_path(meetup.id), method: :delete, class: "btn" %>
+ <%= link_to "Sign in using GitHub", auth_github_path(meetup: meetup.id), class: "btn" %>
<% end %>
- <% else %>
- <%= link_to "Sign in using GitHub", auth_github_path(meetup: meetup.id), class: "btn" %>
- <% end %>
-
+
+ <% end %>
+
<%= link_to participants_path(meetup.id, format: :json) do %>
<%= pluralize(meetup.participants.count(:all), "rubyist") %> will attend
<% end %>
- <%= map(meetup.map_src) %>
+
+ <%# Add map back in %>
+ <% map(meetup.map_src) %>
<% end %>
diff --git a/app/views/pages/home.html.erb b/app/views/pages/home.html.erb
index 51f3783..1b209c6 100644
--- a/app/views/pages/home.html.erb
+++ b/app/views/pages/home.html.erb
@@ -19,12 +19,12 @@
-<%= ribbon("Upcoming Meetup", class: "bottom") %>
+<%= ribbon("Last Meetup", class: "bottom") %>
<%= render 'meetups', meetups: [ruvetia_meetups.first] %>
-
+
<%= ribbon("Meet the Team", class: "top") %>
diff --git a/bin/bootstrap b/bin/bootstrap
deleted file mode 100755
index 57dc1d2..0000000
--- a/bin/bootstrap
+++ /dev/null
@@ -1,147 +0,0 @@
-#!/usr/bin/env ruby
-
-#
-# bootstrap
-#
-
-#
-# Welcome to the ruvetia Bootstrap Script
-#
-puts ""
-puts "Ruvetia.org bootstrap"
-puts "================ "
-puts ""
-puts "! Logs will be written to: log/boostrap.log"
-system ("echo 'Bootstrap started at #{Time.now}' > log/bootstrap.log")
-puts ""
-
-#
-# lol constants
-#
-puts "database user:"
-DB_USERNAME = gets.strip
-puts "database password:"
-DB_PASSWORD = gets.strip
-DB_HOST = "localhost"
-TEST_DATABASE = "ruvetia_test"
-DEV_DATABASE = "ruvetia_development"
-
-#
-# Check for PostgreSQL
-#
-unless system("which psql 2>&1 > /dev/null")
- puts "x You need to install PostgreSQL. If you use Homebrew, you can run:"
- puts " => brew install postgresql"
- exit(1)
-else
- puts "+ PostgreSQL found."
-end
-
-#
-# Check for Bundler
-#
-unless system("which bundle 2>&1 > /dev/null")
- puts "x You need to install Bundler:"
- puts " => gem install bundler"
- exit(1)
-else
- puts "+ Bundler found."
-end
-
-#
-# Check for Heroku toolbelt
-#
-unless system("which heroku 2>&1 > /dev/null")
- puts "+ You need to install the Heroku toolbelt:"
- puts " => https://toolbelt.heroku.com/"
- exit(1)
-else
- puts "+ Heroku toolbelt found."
-end
-
-
-#
-# Let's install some bundles
-#
-puts ""
-puts "Installing bundles..."
-system("bundle install >> log/bootstrap.log")
-
-require "bundler/setup"
-require 'erubis'
-
-#
-# Generate the database configuration
-#
-unless File.exists?("config/database.yml")
- input = File.read('config/database_template.yml.erb')
- template = Erubis::Eruby.new(input) # create Eruby object
-
- list = ['aaa', 'bbb', 'ccc']
- content = template.result(:development_database => DEV_DATABASE,
- :test_database => TEST_DATABASE,
- :username => DB_USERNAME,
- :password => DB_PASSWORD)
- File.open("config/database.yml", "w+") {|f| f.write content }
-end
-
-#
-# Prepare Database
-#
-puts ""
-puts "Should we set up the dev & test Databases for you?"
-puts "WARNING: This will destroy existing databases named '#{DEV_DATABASE}'and '#{TEST_DATABASE}'!"
-print "(y)es, (n)o => "
-
-case gets.strip
- when 'Y', 'y', 'yes'
- puts ""
- puts "Dropping all connections to #{DEV_DATABASE}..."
- system(%Q{psql postgres #{DB_USERNAME} --command="SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity WHERE pg_stat_activity.datname='#{DEV_DATABASE}';" >> log/bootstrap.log})
-
- puts "Deleting old #{DEV_DATABASE}..."
- system("dropdb #{DEV_DATABASE} --username=#{DB_USERNAME} >> log/bootstrap.log")
-
- puts "Creating #{DEV_DATABASE}..."
- system("createdb --owner=#{DB_USERNAME} --username=#{DB_USERNAME} #{DEV_DATABASE} >> log/bootstrap.log")
-
- puts "Migrating #{DEV_DATABASE}..."
- system("rake db:migrate >> log/bootstrap.log")
-
- puts "Seeding #{DEV_DATABASE}..."
- system("rake db:seed >> log/bootstrap.log")
-
- puts "Deleting old #{TEST_DATABASE}..."
- system("dropdb #{TEST_DATABASE} --username=#{DB_USERNAME} >> log/bootstrap.log")
-
- puts "Creating #{TEST_DATABASE}..."
- system("createdb --owner=#{DB_USERNAME} --username=#{DB_USERNAME} #{TEST_DATABASE} >> log/bootstrap.log")
-
- puts "Preparing #{TEST_DATABASE}..."
- system("rake db:test:prepare >> log/bootstrap.log")
- system("rake db:test:load >> log/bootstrap.log")
-
- puts ""
- puts "DATABASES ARE READY!"
-end
-
-
-#
-# Restart the Rails Server if it is running (for pow users)
-#
-puts ""
-puts "Restarting app..."
-system("touch tmp/restart.txt")
-
-#
-# RUN EM TESTS
-#
-puts ""
-puts "Running tests..."
-system("bundle exec rake test")
-
-#
-# DONE
-#
-puts ""
-puts "Sweet, my job here is done!"
diff --git a/bin/bundle b/bin/bundle
index 66e9889..50da5fd 100755
--- a/bin/bundle
+++ b/bin/bundle
@@ -1,3 +1,109 @@
#!/usr/bin/env ruby
-ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__)
-load Gem.bin_path('bundler', 'bundle')
+# frozen_string_literal: true
+
+#
+# This file was generated by Bundler.
+#
+# The application 'bundle' is installed as part of a gem, and
+# this file is here to facilitate running it.
+#
+
+require "rubygems"
+
+m = Module.new do
+ module_function
+
+ def invoked_as_script?
+ File.expand_path($0) == File.expand_path(__FILE__)
+ end
+
+ def env_var_version
+ ENV["BUNDLER_VERSION"]
+ end
+
+ def cli_arg_version
+ return unless invoked_as_script? # don't want to hijack other binstubs
+ return unless "update".start_with?(ARGV.first || " ") # must be running `bundle update`
+ bundler_version = nil
+ update_index = nil
+ ARGV.each_with_index do |a, i|
+ if update_index && update_index.succ == i && a.match?(Gem::Version::ANCHORED_VERSION_PATTERN)
+ bundler_version = a
+ end
+ next unless a =~ /\A--bundler(?:[= ](#{Gem::Version::VERSION_PATTERN}))?\z/
+ bundler_version = $1
+ update_index = i
+ end
+ bundler_version
+ end
+
+ def gemfile
+ gemfile = ENV["BUNDLE_GEMFILE"]
+ return gemfile if gemfile && !gemfile.empty?
+
+ File.expand_path("../Gemfile", __dir__)
+ end
+
+ def lockfile
+ lockfile =
+ case File.basename(gemfile)
+ when "gems.rb" then gemfile.sub(/\.rb$/, ".locked")
+ else "#{gemfile}.lock"
+ end
+ File.expand_path(lockfile)
+ end
+
+ def lockfile_version
+ return unless File.file?(lockfile)
+ lockfile_contents = File.read(lockfile)
+ return unless lockfile_contents =~ /\n\nBUNDLED WITH\n\s{2,}(#{Gem::Version::VERSION_PATTERN})\n/
+ Regexp.last_match(1)
+ end
+
+ def bundler_requirement
+ @bundler_requirement ||=
+ env_var_version ||
+ cli_arg_version ||
+ bundler_requirement_for(lockfile_version)
+ end
+
+ def bundler_requirement_for(version)
+ return "#{Gem::Requirement.default}.a" unless version
+
+ bundler_gem_version = Gem::Version.new(version)
+
+ bundler_gem_version.approximate_recommendation
+ end
+
+ def load_bundler!
+ ENV["BUNDLE_GEMFILE"] ||= gemfile
+
+ activate_bundler
+ end
+
+ def activate_bundler
+ gem_error = activation_error_handling do
+ gem "bundler", bundler_requirement
+ end
+ return if gem_error.nil?
+ require_error = activation_error_handling do
+ require "bundler/version"
+ end
+ return if require_error.nil? && Gem::Requirement.new(bundler_requirement).satisfied_by?(Gem::Version.new(Bundler::VERSION))
+ warn "Activating bundler (#{bundler_requirement}) failed:\n#{gem_error.message}\n\nTo install the version of bundler this project requires, run `gem install bundler -v '#{bundler_requirement}'`"
+ exit 42
+ end
+
+ def activation_error_handling
+ yield
+ nil
+ rescue StandardError, LoadError => e
+ e
+ end
+end
+
+m.load_bundler!
+
+if m.invoked_as_script?
+ load Gem.bin_path("bundler", "bundle")
+end
diff --git a/bin/dev b/bin/dev
new file mode 100755
index 0000000..a4e05fa
--- /dev/null
+++ b/bin/dev
@@ -0,0 +1,11 @@
+#!/usr/bin/env sh
+
+if ! gem list foreman -i --silent; then
+ echo "Installing foreman..."
+ gem install foreman
+fi
+
+# Default to port 3000 if not specified
+export PORT="${PORT:-3000}"
+
+exec foreman start -f Procfile.dev "$@"
diff --git a/bin/rails b/bin/rails
index 5191e69..efc0377 100755
--- a/bin/rails
+++ b/bin/rails
@@ -1,4 +1,4 @@
#!/usr/bin/env ruby
-APP_PATH = File.expand_path('../../config/application', __FILE__)
-require_relative '../config/boot'
-require 'rails/commands'
+APP_PATH = File.expand_path("../config/application", __dir__)
+require_relative "../config/boot"
+require "rails/commands"
diff --git a/bin/rake b/bin/rake
index 1724048..4fbf10b 100755
--- a/bin/rake
+++ b/bin/rake
@@ -1,4 +1,4 @@
#!/usr/bin/env ruby
-require_relative '../config/boot'
-require 'rake'
+require_relative "../config/boot"
+require "rake"
Rake.application.run
diff --git a/bin/setup b/bin/setup
index acdb2c1..d38bf9f 100755
--- a/bin/setup
+++ b/bin/setup
@@ -1,29 +1,36 @@
#!/usr/bin/env ruby
-require 'pathname'
+require "fileutils"
# path to your application root.
-APP_ROOT = Pathname.new File.expand_path('../../', __FILE__)
+APP_ROOT = File.expand_path("..", __dir__)
-Dir.chdir APP_ROOT do
- # This script is a starting point to setup your application.
- # Add necessary setup steps to this file:
+def system!(*args)
+ system(*args, exception: true)
+end
+
+FileUtils.chdir APP_ROOT do
+ # This script is a way to set up or update your development environment automatically.
+ # This script is idempotent, so that you can run it at any time and get an expectable outcome.
+ # Add necessary setup steps to this file.
puts "== Installing dependencies =="
- system "gem install bundler --conservative"
- system "bundle check || bundle install"
+ system! "gem install bundler --conservative"
+ system("bundle check") || system!("bundle install")
+
+ # Install JavaScript dependencies
+ system("yarn check --check-files") || system!("yarn install")
# puts "\n== Copying sample files =="
# unless File.exist?("config/database.yml")
- # system "cp config/database.yml.sample config/database.yml"
+ # FileUtils.cp "config/database.yml.sample", "config/database.yml"
# end
puts "\n== Preparing database =="
- system "bin/rake db:setup"
+ system! "bin/rails db:prepare"
puts "\n== Removing old logs and tempfiles =="
- system "rm -f log/*"
- system "rm -rf tmp/cache"
+ system! "bin/rails log:clear tmp:clear"
puts "\n== Restarting application server =="
- system "touch tmp/restart.txt"
+ system! "bin/rails restart"
end
diff --git a/config.ru b/config.ru
index 6c3d729..4a3c09a 100644
--- a/config.ru
+++ b/config.ru
@@ -1,4 +1,6 @@
# This file is used by Rack-based servers to start the application.
-require ::File.expand_path('../config/environment', __FILE__)
-run Ruvetia::Application
+require_relative "config/environment"
+
+run Rails.application
+Rails.application.load_server
diff --git a/config/application.rb b/config/application.rb
index 2ce9fea..5cd9b0e 100644
--- a/config/application.rb
+++ b/config/application.rb
@@ -1,35 +1,27 @@
-require File.expand_path('../boot', __FILE__)
+require_relative "boot"
-# require 'rails/all'
+require "rails/all"
-# customize loaded rails frameworks
-require "rails"
+# Require the gems listed in Gemfile, including any gems
+# you've limited to :test, :development, or :production.
+Bundler.require(*Rails.groups)
-[
- 'active_record',
- 'action_controller',
- # 'action_mailer',
- 'rails/test_unit',
- 'sprockets',
-].each do |framework|
- require "#{framework}/railtie"
-end
-
-# Assets should be precompiled for production (so we don't need the gems loaded then)
-Bundler.require(*Rails.groups(assets: %w(development test)))
-
-module Ruvetia
+module RuvetiaOrg
class Application < Rails::Application
- # Settings in config/environments/* take precedence over those specified here.
- # Application configuration should go into files in config/initializers
- # -- all .rb files in that directory are automatically loaded.
+ # Initialize configuration defaults for originally generated Rails version.
+ config.load_defaults 7.1
- # Set Time.zone default to the specified zone and make Active Record auto-convert to this zone.
- # Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC.
- config.time_zone = 'Bern'
+ # Please, add to the `ignore` list any other `lib` subdirectories that do
+ # not contain `.rb` files, or that should not be reloaded or eager loaded.
+ # Common ones are `templates`, `generators`, or `middleware`, for example.
+ config.autoload_lib(ignore: %w(assets tasks))
- # The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded.
- # config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s]
- # config.i18n.default_locale = :de
+ # Configuration for the application, engines, and railties goes here.
+ #
+ # These settings can be overridden in specific environments using the files
+ # in config/environments, which are processed later.
+ #
+ # config.time_zone = "Central Time (US & Canada)"
+ # config.eager_load_paths << Rails.root.join("extras")
end
end
diff --git a/config/boot.rb b/config/boot.rb
index 6b750f0..988a5dd 100644
--- a/config/boot.rb
+++ b/config/boot.rb
@@ -1,3 +1,4 @@
-ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__)
+ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__)
-require 'bundler/setup' # Set up gems listed in the Gemfile.
+require "bundler/setup" # Set up gems listed in the Gemfile.
+require "bootsnap/setup" # Speed up boot time by caching expensive operations.
diff --git a/config/cable.yml b/config/cable.yml
new file mode 100644
index 0000000..075066c
--- /dev/null
+++ b/config/cable.yml
@@ -0,0 +1,10 @@
+development:
+ adapter: async
+
+test:
+ adapter: test
+
+production:
+ adapter: redis
+ url: <%= ENV.fetch("REDIS_URL") { "redis://localhost:6379/1" } %>
+ channel_prefix: ruvetia_org_production
diff --git a/config/credentials.yml.enc b/config/credentials.yml.enc
new file mode 100644
index 0000000..3488451
--- /dev/null
+++ b/config/credentials.yml.enc
@@ -0,0 +1 @@
+CeINHff9utF/zcE+udDb/HfDFBO9W7zkOn7UnAog27PttrfU4YJX1RDmt7pBLq/MoYXi/JS/7BhyjBAZwFIJ42kW/ckMN4i7SMHbUvRPV8GbZYccesTWPcDyQ+FX6+9rFqilEHqPPjwHgWqmVR6Km8dfH6tZAu2NpOPTHFGgDV5tS+aic9KzAz5LRL7bZTQloNfI49F9qQMKmtZJrDVd852T5KUs1PPS3HgvDXl5jdvgmzaauF8H9Fk0F5pAOFDnqAwvrqRTUi9RqP5Zg3UYT7T8/76q2uvRSLhvkScOGPFLOcYAWQ1sBKb0yHQgqQk/cFrgqPRyJL3lNV0uepJFYmnz99PQ2mQZX0pcQiPi1Ee3qakcyhMXFTfx5MIKtbdnmxkLrQhNeBiXDugw7s5B++EubyN/--01heOlQOmtUtUN5d--7OLFzAKhO96kmz5OYkMeWQ==
\ No newline at end of file
diff --git a/config/database.yml b/config/database.yml
new file mode 100644
index 0000000..0f696a7
--- /dev/null
+++ b/config/database.yml
@@ -0,0 +1,84 @@
+# PostgreSQL. Versions 9.3 and up are supported.
+#
+# Install the pg driver:
+# gem install pg
+# On macOS with Homebrew:
+# gem install pg -- --with-pg-config=/usr/local/bin/pg_config
+# On Windows:
+# gem install pg
+# Choose the win32 build.
+# Install PostgreSQL and put its /bin directory on your path.
+#
+# Configure Using Gemfile
+# gem "pg"
+#
+default: &default
+ adapter: postgresql
+ encoding: unicode
+ # For details on connection pooling, see Rails configuration guide
+ # https://guides.rubyonrails.org/configuring.html#database-pooling
+ pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
+
+development:
+ <<: *default
+ database: ruvetia_org_development
+
+ # The specified database role being used to connect to PostgreSQL.
+ # To create additional roles in PostgreSQL see `$ createuser --help`.
+ # When left blank, PostgreSQL will use the default role. This is
+ # the same name as the operating system user running Rails.
+ #username: ruvetia_org
+
+ # The password associated with the PostgreSQL role (username).
+ #password:
+
+ # Connect on a TCP socket. Omitted by default since the client uses a
+ # domain socket that doesn't need configuration. Windows does not have
+ # domain sockets, so uncomment these lines.
+ #host: localhost
+
+ # The TCP port the server listens on. Defaults to 5432.
+ # If your server runs on a different port number, change accordingly.
+ #port: 5432
+
+ # Schema search path. The server defaults to $user,public
+ #schema_search_path: myapp,sharedapp,public
+
+ # Minimum log levels, in increasing order:
+ # debug5, debug4, debug3, debug2, debug1,
+ # log, notice, warning, error, fatal, and panic
+ # Defaults to warning.
+ #min_messages: notice
+
+# Warning: The database defined as "test" will be erased and
+# re-generated from your development database when you run "rake".
+# Do not set this db to the same as development or production.
+test:
+ <<: *default
+ database: ruvetia_org_test
+
+# As with config/credentials.yml, you never want to store sensitive information,
+# like your database password, in your source code. If your source code is
+# ever seen by anyone, they now have access to your database.
+#
+# Instead, provide the password or a full connection URL as an environment
+# variable when you boot the app. For example:
+#
+# DATABASE_URL="postgres://myuser:mypass@localhost/somedatabase"
+#
+# If the connection URL is provided in the special DATABASE_URL environment
+# variable, Rails will automatically merge its configuration values on top of
+# the values provided in this file. Alternatively, you can specify a connection
+# URL environment variable explicitly:
+#
+# production:
+# url: <%= ENV["MY_APP_DATABASE_URL"] %>
+#
+# Read https://guides.rubyonrails.org/configuring.html#configuring-a-database
+# for a full overview on how database connection configuration can be specified.
+#
+production:
+ <<: *default
+ database: ruvetia_org_production
+ username: ruvetia_org
+ password: <%= ENV["RUVETIA_ORG_DATABASE_PASSWORD"] %>
diff --git a/config/database_template.yml.erb b/config/database_template.yml.erb
deleted file mode 100644
index f0311b5..0000000
--- a/config/database_template.yml.erb
+++ /dev/null
@@ -1,25 +0,0 @@
-development:
- adapter: postgresql
- encoding: unicode
- database: <%= development_database %>
- pool: 5
- username: <%= username %>
- password: <%= password %>
- min_messages: warning
- encoding: UTF8
- host: localhost
-
-
-# Warning: The database defined as "test" will be erased and
-# re-generated from your development database when you run "rake".
-# Do not set this db to the same as development or production.
-test:
- adapter: postgresql
- encoding: unicode
- database: <%= test_database %>
- pool: 5
- username: <%= username %>
- password: <%= password %>
- min_messages: warning
- encoding: UTF8
- host: localhost
diff --git a/config/environment.rb b/config/environment.rb
index ee8d90d..cac5315 100644
--- a/config/environment.rb
+++ b/config/environment.rb
@@ -1,5 +1,5 @@
# Load the Rails application.
-require File.expand_path('../application', __FILE__)
+require_relative "application"
# Initialize the Rails application.
Rails.application.initialize!
diff --git a/config/environments/development.rb b/config/environments/development.rb
index e460641..2e7fb48 100644
--- a/config/environments/development.rb
+++ b/config/environments/development.rb
@@ -1,34 +1,76 @@
+require "active_support/core_ext/integer/time"
+
Rails.application.configure do
# Settings specified here will take precedence over those in config/application.rb.
- # In the development environment your application's code is reloaded on
- # every request. This slows down response time but is perfect for development
+ # In the development environment your application's code is reloaded any time
+ # it changes. 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
+ config.enable_reloading = true
# Do not eager load code on boot.
config.eager_load = false
- # Show full error reports and disable caching.
- config.consider_all_requests_local = true
- config.action_controller.perform_caching = false
+ # Show full error reports.
+ config.consider_all_requests_local = true
+
+ # Enable server timing
+ config.server_timing = true
+
+ # Enable/disable caching. By default caching is disabled.
+ # Run rails dev:cache to toggle caching.
+ if Rails.root.join("tmp/caching-dev.txt").exist?
+ config.action_controller.perform_caching = true
+ config.action_controller.enable_fragment_cache_logging = true
+
+ config.cache_store = :memory_store
+ config.public_file_server.headers = {
+ "Cache-Control" => "public, max-age=#{2.days.to_i}"
+ }
+ else
+ config.action_controller.perform_caching = false
+
+ config.cache_store = :null_store
+ end
+
+ # Store uploaded files on the local file system (see config/storage.yml for options).
+ config.active_storage.service = :local
+
+ # Don't care if the mailer can't send.
+ config.action_mailer.raise_delivery_errors = false
+
+ config.action_mailer.perform_caching = false
# Print deprecation notices to the Rails logger.
config.active_support.deprecation = :log
+ # Raise exceptions for disallowed deprecations.
+ config.active_support.disallowed_deprecation = :raise
+
+ # Tell Active Support which deprecation messages to disallow.
+ config.active_support.disallowed_deprecation_warnings = []
+
# Raise an error on page load if there are pending migrations.
config.active_record.migration_error = :page_load
- # Debug mode disables concatenation and preprocessing of assets.
- # This option may cause significant delays in view rendering with a large
- # number of complex assets.
- config.assets.debug = true
+ # Highlight code that triggered database queries in logs.
+ config.active_record.verbose_query_logs = true
+
+ # Highlight code that enqueued background job in logs.
+ config.active_job.verbose_enqueue_logs = true
+
+ # Suppress logger output for asset requests.
+ config.assets.quiet = true
+
+ # Raises error for missing translations.
+ # config.i18n.raise_on_missing_translations = true
+
+ # Annotate rendered view with file names.
+ # config.action_view.annotate_rendered_view_with_filenames = true
- # Adds additional error checking when serving assets at runtime.
- # Checks for improperly declared sprockets dependencies.
- # Raises helpful error messages.
- config.assets.raise_runtime_errors = true
+ # Uncomment if you wish to allow Action Cable access from any origin.
+ # config.action_cable.disable_request_forgery_protection = true
- # Raises error for missing translations
- # config.action_view.raise_on_missing_translations = true
+ # Raise error when a before_action's only/except options reference missing actions
+ config.action_controller.raise_on_missing_callback_actions = true
end
diff --git a/config/environments/production.rb b/config/environments/production.rb
index 5711fae..2b46be7 100644
--- a/config/environments/production.rb
+++ b/config/environments/production.rb
@@ -1,8 +1,10 @@
+require "active_support/core_ext/integer/time"
+
Rails.application.configure do
# Settings specified here will take precedence over those in config/application.rb.
# Code is not reloaded between requests.
- config.cache_classes = true
+ config.enable_reloading = false
# Eager load code on boot. This eager loads most of Rails and
# your application in memory, allowing both threaded web servers
@@ -11,69 +13,85 @@
config.eager_load = true
# Full error reports are disabled and caching is turned on.
- config.consider_all_requests_local = false
+ config.consider_all_requests_local = false
config.action_controller.perform_caching = true
- # Enable Rack::Cache to put a simple HTTP cache in front of your application
- # Add `rack-cache` to your Gemfile before enabling this.
- # For large-scale production use, consider using a caching reverse proxy like nginx, varnish or squid.
- # config.action_dispatch.rack_cache = true
+ # Ensures that a master key has been made available in ENV["RAILS_MASTER_KEY"], config/master.key, or an environment
+ # key such as config/credentials/production.key. This key is used to decrypt credentials (and other encrypted files).
+ # config.require_master_key = true
- # Disable Rails's static asset server (Apache or nginx will already do this).
- config.serve_static_assets = false
+ # Disable serving static files from `public/`, relying on NGINX/Apache to do so instead.
+ # config.public_file_server.enabled = false
- # Compress JavaScripts and CSS.
- config.assets.js_compressor = :uglifier
+ # Compress CSS using a preprocessor.
# config.assets.css_compressor = :sass
# 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
-
- # Version of your assets, change this if you want to expire all your assets.
- config.assets.version = '1.0'
+ # Enable serving of images, stylesheets, and JavaScripts from an asset server.
+ # config.asset_host = "http://assets.example.com"
# Specifies the header that your server uses for sending files.
- # config.action_dispatch.x_sendfile_header = "X-Sendfile" # for apache
- # config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for nginx
+ # config.action_dispatch.x_sendfile_header = "X-Sendfile" # for Apache
+ # config.action_dispatch.x_sendfile_header = "X-Accel-Redirect" # for NGINX
+
+ # Store uploaded files on the local file system (see config/storage.yml for options).
+ config.active_storage.service = :local
+
+ # Mount Action Cable outside main process or domain.
+ # config.action_cable.mount_path = nil
+ # config.action_cable.url = "wss://example.com/cable"
+ # config.action_cable.allowed_request_origins = [ "http://example.com", /http:\/\/example.*/ ]
+
+ # Assume all access to the app is happening through a SSL-terminating reverse proxy.
+ # Can be used together with config.force_ssl for Strict-Transport-Security and secure cookies.
+ # config.assume_ssl = true
# Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies.
- # config.force_ssl = true
+ config.force_ssl = true
- # Set to :debug to see everything in the log.
- config.log_level = :info
+ # Log to STDOUT by default
+ config.logger = ActiveSupport::Logger.new(STDOUT)
+ .tap { |logger| logger.formatter = ::Logger::Formatter.new }
+ .then { |logger| ActiveSupport::TaggedLogging.new(logger) }
# Prepend all log lines with the following tags.
- # config.log_tags = [ :subdomain, :uuid ]
+ config.log_tags = [ :request_id ]
- # Use a different logger for distributed setups.
- # config.logger = ActiveSupport::TaggedLogging.new(SyslogLogger.new)
+ # Info include generic and useful information about system operation, but avoids logging too much
+ # information to avoid inadvertent exposure of personally identifiable information (PII). If you
+ # want to log everything, set the level to "debug".
+ config.log_level = ENV.fetch("RAILS_LOG_LEVEL", "info")
# 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"
+ # Use a real queuing backend for Active Job (and separate queues per environment).
+ # config.active_job.queue_adapter = :resque
+ # config.active_job.queue_name_prefix = "ruvetia_org_production"
+
+ config.action_mailer.perform_caching = false
- # Precompile additional assets.
- # application.js, application.css, and all non-JS/CSS in app/assets folder are already added.
- # config.assets.precompile += %w( search.js )
+ # Ignore bad email addresses and do not raise email delivery errors.
+ # Set this to true and configure the email server for immediate delivery to raise delivery errors.
+ # config.action_mailer.raise_delivery_errors = false
# Enable locale fallbacks for I18n (makes lookups for any locale fall back to
# the I18n.default_locale when a translation cannot be found).
config.i18n.fallbacks = true
- # Send deprecation notices to registered listeners.
- config.active_support.deprecation = :notify
-
- # Disable automatic flushing of the log to improve performance.
- # config.autoflush_log = false
-
- # Use default logging formatter so that PID and timestamp are not suppressed.
- config.log_formatter = ::Logger::Formatter.new
+ # Don't log any deprecations.
+ config.active_support.report_deprecations = false
# Do not dump schema after migrations.
config.active_record.dump_schema_after_migration = false
+
+ # Enable DNS rebinding protection and other `Host` header attacks.
+ # config.hosts = [
+ # "example.com", # Allow requests from example.com
+ # /.*\.example\.com/ # Allow requests from subdomains like `www.example.com`
+ # ]
+ # Skip DNS rebinding protection for the default health check endpoint.
+ # config.host_authorization = { exclude: ->(request) { request.path == "/up" } }
end
diff --git a/config/environments/test.rb b/config/environments/test.rb
index 7977216..adbb4a6 100644
--- a/config/environments/test.rb
+++ b/config/environments/test.rb
@@ -1,36 +1,64 @@
+require "active_support/core_ext/integer/time"
+
+# The test environment is used exclusively to run your application's
+# 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!
+
Rails.application.configure do
# Settings specified here will take precedence over those in config/application.rb.
- # The test environment is used exclusively to run your application's
- # 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!
- config.cache_classes = true
+ # While tests run files are not watched, reloading is not necessary.
+ config.enable_reloading = false
- # 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
+ # Eager loading loads your entire application. When running a single test locally,
+ # this is usually not necessary, and can slow down your test suite. However, it's
+ # recommended that you enable it in continuous integration systems to ensure eager
+ # loading is working properly before deploying your code.
+ config.eager_load = ENV["CI"].present?
- # Configure static asset server for tests with Cache-Control for performance.
- config.serve_static_files = true
- config.static_cache_control = 'public, max-age=3600'
+ # 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=#{1.hour.to_i}"
+ }
# Show full error reports and disable caching.
- config.consider_all_requests_local = true
+ config.consider_all_requests_local = true
config.action_controller.perform_caching = false
+ config.cache_store = :null_store
- # Raise exceptions instead of rendering exception templates.
- config.action_dispatch.show_exceptions = false
+ # Render exception templates for rescuable exceptions and raise for other exceptions.
+ config.action_dispatch.show_exceptions = :rescuable
# Disable request forgery protection in test environment.
config.action_controller.allow_forgery_protection = false
+ # Store uploaded files on the local file system in a temporary directory.
+ config.active_storage.service = :test
+
+ 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
+
# Print deprecation notices to the stderr.
config.active_support.deprecation = :stderr
- # Raises error for missing translations
- # config.action_view.raise_on_missing_translations = true
+ # Raise exceptions for disallowed deprecations.
+ config.active_support.disallowed_deprecation = :raise
+
+ # Tell Active Support which deprecation messages to disallow.
+ config.active_support.disallowed_deprecation_warnings = []
+
+ # Raises error for missing translations.
+ # config.i18n.raise_on_missing_translations = true
+
+ # Annotate rendered view with file names.
+ # config.action_view.annotate_rendered_view_with_filenames = true
- config.active_support.test_order = :random
+ # Raise error when a before_action's only/except options reference missing actions
+ config.action_controller.raise_on_missing_callback_actions = true
end
diff --git a/config/initializers/assets.rb b/config/initializers/assets.rb
index 01ef3e6..2eeef96 100644
--- a/config/initializers/assets.rb
+++ b/config/initializers/assets.rb
@@ -1,11 +1,12 @@
# 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'
+Rails.application.config.assets.version = "1.0"
-# Add additional assets to the asset load path
+# 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 already added.
-# Rails.application.config.assets.precompile += %w( search.js )
+# application.js, application.css, and all non-JS/CSS in the app/assets
+# folder are already added.
+# Rails.application.config.assets.precompile += %w( admin.js admin.css )
diff --git a/config/initializers/backtrace_silencers.rb b/config/initializers/backtrace_silencers.rb
deleted file mode 100644
index 59385cd..0000000
--- a/config/initializers/backtrace_silencers.rb
+++ /dev/null
@@ -1,7 +0,0 @@
-# Be sure to restart your server when you modify this file.
-
-# You can add backtrace silencers for libraries that you're using but don't wish to see in your backtraces.
-# Rails.backtrace_cleaner.add_silencer { |line| line =~ /my_noisy_library/ }
-
-# You can also remove all the silencers if you're trying to debug a problem that might stem from framework code.
-# Rails.backtrace_cleaner.remove_silencers!
diff --git a/config/initializers/content_security_policy.rb b/config/initializers/content_security_policy.rb
new file mode 100644
index 0000000..b3076b3
--- /dev/null
+++ b/config/initializers/content_security_policy.rb
@@ -0,0 +1,25 @@
+# Be sure to restart your server when you modify this file.
+
+# Define an application-wide content security policy.
+# See the Securing Rails Applications Guide for more information:
+# https://guides.rubyonrails.org/security.html#content-security-policy-header
+
+# Rails.application.configure do
+# config.content_security_policy do |policy|
+# policy.default_src :self, :https
+# policy.font_src :self, :https, :data
+# policy.img_src :self, :https, :data
+# policy.object_src :none
+# policy.script_src :self, :https
+# policy.style_src :self, :https
+# # Specify URI for violation reports
+# # policy.report_uri "/csp-violation-report-endpoint"
+# end
+#
+# # Generate session nonces for permitted importmap, inline scripts, and inline styles.
+# config.content_security_policy_nonce_generator = ->(request) { request.session.id.to_s }
+# config.content_security_policy_nonce_directives = %w(script-src style-src)
+#
+# # Report violations without enforcing the policy.
+# # config.content_security_policy_report_only = true
+# end
diff --git a/config/initializers/cookies_serializer.rb b/config/initializers/cookies_serializer.rb
deleted file mode 100644
index ac5f8b6..0000000
--- a/config/initializers/cookies_serializer.rb
+++ /dev/null
@@ -1,3 +0,0 @@
-# Be sure to restart your server when you modify this file.
-
-Rails.application.config.action_dispatch.cookies_serializer = :marshal
diff --git a/config/initializers/filter_parameter_logging.rb b/config/initializers/filter_parameter_logging.rb
index 4a994e1..c2d89e2 100644
--- a/config/initializers/filter_parameter_logging.rb
+++ b/config/initializers/filter_parameter_logging.rb
@@ -1,4 +1,8 @@
# 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]
+# Configure parameters to be partially matched (e.g. passw matches password) and filtered from the log file.
+# Use this to limit dissemination of sensitive information.
+# See the ActiveSupport::ParameterFilter documentation for supported notations and behaviors.
+Rails.application.config.filter_parameters += [
+ :passw, :secret, :token, :_key, :crypt, :salt, :certificate, :otp, :ssn
+]
diff --git a/config/initializers/inflections.rb b/config/initializers/inflections.rb
index ac033bf..b55eecb 100644
--- a/config/initializers/inflections.rb
+++ b/config/initializers/inflections.rb
@@ -4,13 +4,13 @@
# 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.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(:en) do |inflect|
-# inflect.acronym 'RESTful'
-# end
+ActiveSupport::Inflector.inflections(:en) do |inflect|
+ inflect.acronym "BBQ"
+end
diff --git a/config/initializers/meetup_setup.rb b/config/initializers/meetup_setup.rb
deleted file mode 100644
index ed40d96..0000000
--- a/config/initializers/meetup_setup.rb
+++ /dev/null
@@ -1,72 +0,0 @@
-# -*- coding: utf-8 -*-
-$meetups = [
- Meetup.new(
- id: 8,
- number: 8,
- city: "Basel",
- location: "Werk 8",
- time: "08.05.2015 18:00",
- map_src: "https://www.google.com/maps/embed?pb=!1m14!1m8!1m3!1d5386.645932126084!2d7.594735293498037!3d47.54204262705834!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x4791b845fdb2acb3%3A0xcff581105a20a660!2sKantensprung+AG!5e0!3m2!1sen!2sch!4v1430826614995"
- ),
-
- Meetup.new(
- id: 7,
- number: 7,
- city: "Luzern",
- location: "Havanna Café & Bar",
- time: "31.10.2014 18:00",
- map_src: "https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d2718.6405381720174!2d8.307837999999993!3d47.047284!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x478ffba3cb1edf03%3A0x76e591b5fb5cb3c9!2sHavanna+Caf%C3%A9+%2B+Bar+GmbH!5e0!3m2!1sen!2sch!4v1413905565712"
- ),
-
- Meetup.new(
- id: 6,
- number: 6,
- city: "Bern",
- location: "Musigbistrot",
- time: "13.06.2014 18:00",
- map_src: "https://maps.google.ch/maps?q=musigbistrot+bern,+M%C3%BChlemattstrasse,+Bern&hl=de&ie=UTF8&ll=46.944769,7.433066&spn=0.009419,0.017209&sll=46.946161,7.432938&sspn=0.009419,0.017209&oq=musigbi&hq=musigbistrot+bern,+M%C3%BChlemattstrasse,+Bern&t=m&z=16"
- ),
-
- Meetup.new(
- id: 5,
- number: 4,
- city: "Lausanne",
- location: "Café Saint Pierre",
- time: "04.10.2013 18:30",
- map_src: "https://maps.google.ch/maps?q=Caf%C3%A9+Saint+Pierre,+Place+Benjamin-Constant,+Lausanne&hl=de&ie=UTF8&sll=46.835845,7.658535&sspn=1.275764,2.661438&oq=cafe+saint+pierr&hq=Caf%C3%A9+Saint+Pierre,&hnear=Place+Benjamin-Constant,+Lausanne,+Vaud&t=m&z=16"
- ),
-
- Bbq.new(
- id: 4,
- number: 3,
- city: "Bern",
- location: "A de Aare",
- time: "31.08.2013 12:00",
- map_src: "https://maps.google.ch/maps?q=46.981658,7.446174&hl=de&sll=46.813187,8.22421&sspn=2.552665,5.559082&t=m&z=16"
- ),
-
- Meetup.new(
- id: 3,
- number: 3,
- city: "Zug",
- location: "im Hof",
- time: "12.07.2013 18:00",
- map_src: "https://maps.google.ch/maps?q=Savi+im+Hof+GmbH&hl=de&ll=47.173845,8.511915&spn=0.037516,0.080509&cid=4429921772654024681&gl=CH&t=m&z=14&iwloc=A"
- ),
- Meetup.new(
- id: 2,
- number: 2,
- city: "Basel",
- location: "eoipso",
- time: "03.05.2013 18:00",
- map_src: "https://maps.google.com/maps?q=eoipso&hl=en&ll=47.550927,7.593269&spn=0.081913,0.181103&sll=31.428663,-82.880859&sspn=49.27302,92.724609&hq=eoipso&radius=15000&t=m&z=13&iwloc=A"
- ),
- Meetup.new(
- id: 1,
- number: 1,
- city: "Bern",
- location: "Musigbistrot",
- time: "15.03.2013 18:00",
- map_src: "https://maps.google.ch/maps?q=musigbistrot+bern,+M%C3%BChlemattstrasse,+Bern&hl=de&ie=UTF8&ll=46.944769,7.433066&spn=0.009419,0.017209&sll=46.946161,7.432938&sspn=0.009419,0.017209&oq=musigbi&hq=musigbistrot+bern,+M%C3%BChlemattstrasse,+Bern&t=m&z=16"
- )
- ]
diff --git a/config/initializers/mime_types.rb b/config/initializers/mime_types.rb
deleted file mode 100644
index dc18996..0000000
--- a/config/initializers/mime_types.rb
+++ /dev/null
@@ -1,4 +0,0 @@
-# Be sure to restart your server when you modify this file.
-
-# Add new mime types for use in respond_to blocks:
-# Mime::Type.register "text/richtext", :rtf
diff --git a/config/initializers/permissions_policy.rb b/config/initializers/permissions_policy.rb
new file mode 100644
index 0000000..7db3b95
--- /dev/null
+++ b/config/initializers/permissions_policy.rb
@@ -0,0 +1,13 @@
+# Be sure to restart your server when you modify this file.
+
+# Define an application-wide HTTP permissions policy. For further
+# information see: https://developers.google.com/web/updates/2018/06/feature-policy
+
+# Rails.application.config.permissions_policy do |policy|
+# policy.camera :none
+# policy.gyroscope :none
+# policy.microphone :none
+# policy.usb :none
+# policy.fullscreen :self
+# policy.payment :self, "https://secure.example.com"
+# end
diff --git a/config/initializers/secret_token.rb b/config/initializers/secret_token.rb
deleted file mode 100644
index 076bd6a..0000000
--- a/config/initializers/secret_token.rb
+++ /dev/null
@@ -1,12 +0,0 @@
-# Be sure to restart your server when you modify this file.
-
-# Your secret key for verifying the integrity of signed cookies.
-# If you change this key, all old signed cookies will become invalid!
-
-# Make sure the secret is at least 30 characters and all random,
-# no regular words or you'll be exposed to dictionary attacks.
-# You can use `rake secret` to generate a secure secret key.
-
-# Make sure your secret_key_base is kept private
-# if you're sharing your code publicly.
-Ruvetia::Application.config.secret_key_base = '703a8a02ae859cc20a9f4ff37c3cd6d1ab39c36322332654c884b5dac9f12f04a6b1d0f4952dd780893bff2136652483fe6e227f2866942f28fbd6ce0fd9d2a3'
diff --git a/config/initializers/session_store.rb b/config/initializers/session_store.rb
deleted file mode 100644
index 6ffefd1..0000000
--- a/config/initializers/session_store.rb
+++ /dev/null
@@ -1,3 +0,0 @@
-# Be sure to restart your server when you modify this file.
-
-Rails.application.config.session_store :cookie_store, key: '_ruvetia_session'
diff --git a/config/initializers/team_setup.rb b/config/initializers/team_setup.rb
deleted file mode 100644
index 41769e3..0000000
--- a/config/initializers/team_setup.rb
+++ /dev/null
@@ -1,35 +0,0 @@
-# -*- coding: utf-8 -*-
-$team = Team.new
-# ruvetia organizers in no particular order
-$team << Organizer.new(:senny, 'Yves Senn',
- social_media: { github: 'http://github.com/senny', twitter: 'https://twitter.com/yves_senn', web: 'http://blog.senny.ch' },
- gravatar_hash: "3d698e2872c07061a455d9e250861235",
- bio: "Yves started experimenting with Ruby in late 2007. Since then he worked on medium to large scale Rails applications with a strong focus on automated testing. He is a Rails committer and works on other Open Source projects like spring and queue_classic.")
-
-$team << Organizer.new(:therod, 'Rodrigo Haenggi',
- social_media: { github: 'http://github.com/therod', twitter: 'https://twitter.com/therod', web: 'http://rodrigohaenggi.com' },
- gravatar_hash: "961ce8457830cbe5607fd365f134710c",
- bio: "Rodrigo loves all things japanese - Ruby coming in on place three in his list, right after Anime and Matcha Tea. He has been programming since 2004, but only got really passionate about it after discovering Ruby and its wonderful community. He also loves whiskey, and what could be better than sharing a few drinks with fellow Rubyists? J-pop, maybe?")
-
-$team << Organizer.new(:danielpuglisi, 'Daniel Puglisi',
- social_media: { github: 'http://github.com/danielpuglisi', twitter: 'https://twitter.com/danielpuglisi', web: 'http://danielpuglisi.com' },
- gravatar_hash: "34fd3386654f1b625e1d3b8b6c43a217",
- bio: "Fascinated by Ruby's english like syntax, the Rails Framework and the awesome community behind it, Daniel decided to put Ruby into his design and programming toolbox. Ruvetia is his attempt to make Ruby more fundamental and popular in Switzerland and to spread the love about this beautiful programming language and its extraordinary people behind it.")
-
-$team << Organizer.new(:kschiess, 'Kaspar Schiess',
- social_media: {
- bitbucket: 'https://bitbucket.org/kschiess',
- github: 'http://github.com/kschiess',
- web: 'http://absurd.li',
- twitter: 'https://twitter.com/kasparschiess' },
- gravatar_hash: "ae4df18bf57748120b915d63b7e233d4",
- bio: "Kaspar has found Ruby in 2003 and since then told everyone who would"+
- " listen about it. Working hard to promote the language as general purpose"+
- " programming language, he likes to take a pick at Rails, but only in jest."+
- " Take a look at his box of gems on github and be delighted by the useful "+
- " and the obscure.")
-
-$team << Organizer.new(:nerdinand, 'Ferdinand Niedermann',
- social_media: { github: 'http://github.com/nerdinand', twitter: 'https://twitter.com/nerdinand' },
- gravatar_hash: "a69ea888ca7c5102e04e59a54d7db420",
- bio: "Ferdinand got started with Ruby and Rails during his time at the University of Basel. He was soon amazed by the helpful and very active community around Ruby and worked at different companies to apply his Rails knowledge.")
diff --git a/config/initializers/wrap_parameters.rb b/config/initializers/wrap_parameters.rb
deleted file mode 100644
index 33725e9..0000000
--- a/config/initializers/wrap_parameters.rb
+++ /dev/null
@@ -1,14 +0,0 @@
-# Be sure to restart your server when you modify this file.
-
-# This file contains settings for ActionController::ParamsWrapper which
-# is enabled by default.
-
-# Enable parameter wrapping for JSON. You can disable this by setting :format to an empty array.
-ActiveSupport.on_load(:action_controller) do
- wrap_parameters format: [:json] if respond_to?(:wrap_parameters)
-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
index 0653957..6c349ae 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -1,14 +1,14 @@
-# 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.
+# 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'
+# I18n.t "hello"
#
# In views, this is aliased to just `t`:
#
-# <%= t('hello') %>
+# <%= t("hello") %>
#
# To use a different locale, set it with `I18n.locale`:
#
@@ -16,8 +16,16 @@
#
# 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.
+# To learn more about the API, please read the Rails Internationalization guide
+# at https://guides.rubyonrails.org/i18n.html.
+#
+# Be aware that YAML interprets the following case-insensitive strings as
+# booleans: `true`, `false`, `on`, `off`, `yes`, `no`. Therefore, these strings
+# must be quoted to be interpreted as strings. For example:
+#
+# en:
+# "yes": yup
+# enabled: "ON"
en:
hello: "Hello world"
diff --git a/config/puma.rb b/config/puma.rb
new file mode 100644
index 0000000..afa809b
--- /dev/null
+++ b/config/puma.rb
@@ -0,0 +1,35 @@
+# This configuration file will be evaluated by Puma. The top-level methods that
+# are invoked here are part of Puma's configuration DSL. For more information
+# about methods provided by the DSL, see https://puma.io/puma/Puma/DSL.html.
+
+# Puma can serve each request in a thread from an internal thread pool.
+# The `threads` method setting takes two numbers: a minimum and maximum.
+# Any libraries that use thread pools should be configured to match
+# the maximum value specified for Puma. Default is set to 5 threads for minimum
+# and maximum; this matches the default thread size of Active Record.
+max_threads_count = ENV.fetch("RAILS_MAX_THREADS") { 5 }
+min_threads_count = ENV.fetch("RAILS_MIN_THREADS") { max_threads_count }
+threads min_threads_count, max_threads_count
+
+# Specifies that the worker count should equal the number of processors in production.
+if ENV["RAILS_ENV"] == "production"
+ require "concurrent-ruby"
+ worker_count = Integer(ENV.fetch("WEB_CONCURRENCY") { Concurrent.physical_processor_count })
+ workers worker_count if worker_count > 1
+end
+
+# Specifies the `worker_timeout` threshold that Puma will use to wait before
+# terminating a worker in development environments.
+worker_timeout 3600 if ENV.fetch("RAILS_ENV", "development") == "development"
+
+# Specifies the `port` that Puma will listen on to receive requests; default is 3000.
+port ENV.fetch("PORT") { 3000 }
+
+# Specifies the `environment` that Puma will run in.
+environment ENV.fetch("RAILS_ENV") { "development" }
+
+# Specifies the `pidfile` that Puma will use.
+pidfile ENV.fetch("PIDFILE") { "tmp/pids/server.pid" }
+
+# Allow puma to be restarted by `bin/rails restart` command.
+plugin :tmp_restart
diff --git a/config/routes.rb b/config/routes.rb
index 286dc12..bd31c97 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -1,4 +1,12 @@
-Ruvetia::Application.routes.draw do
+Rails.application.routes.draw do
+ # Define your application routes per the DSL in https://guides.rubyonrails.org/routing.html
+
+ # Reveal health status on /up that returns 200 if the app boots with no exceptions, otherwise 500.
+ # Can be used by load balancers and uptime monitors to verify that the app is live.
+ get "up" => "rails/health#show", as: :rails_health_check
+
+ # Defines the root path route ("/")
+ # root "posts#index"
# we don't want www
constraints(:host => /^www\./) do
diff --git a/config/secrets.yml b/config/secrets.yml
deleted file mode 100644
index b8e05a2..0000000
--- a/config/secrets.yml
+++ /dev/null
@@ -1,22 +0,0 @@
-# Be sure to restart your server when you modify this file.
-
-# Your secret key is used for verifying the integrity of signed cookies.
-# If you change this key, all old signed cookies will become invalid!
-
-# Make sure the secret is at least 30 characters and all random,
-# no regular words or you'll be exposed to dictionary attacks.
-# You can use `rake secret` to generate a secure secret key.
-
-# Make sure the secrets in this file are kept private
-# if you're sharing your code publicly.
-
-development:
- secret_key_base: 37964380eefdd182807a4799f48631791faddbf0c1c9e09046b602b7211ab765f8d63a1fb15d84e75235f965dfb3428807c0b04fde8cafcf04431c5cafef8d47
-
-test:
- secret_key_base: 93c7dcfe33b1110f366783f0d3a0d6467c3098ae1c2b1e85f8a4678e61a5a526a4e218c29480d5f2d948c9dad8e989b4b341c9395f1a8ed7ab1a9f7f1d30ef68
-
-# Do not keep production secrets in the repository,
-# instead read values from the environment.
-production:
- secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>
diff --git a/config/storage.yml b/config/storage.yml
new file mode 100644
index 0000000..4942ab6
--- /dev/null
+++ b/config/storage.yml
@@ -0,0 +1,34 @@
+test:
+ service: Disk
+ root: <%= Rails.root.join("tmp/storage") %>
+
+local:
+ service: Disk
+ root: <%= Rails.root.join("storage") %>
+
+# Use bin/rails credentials:edit to set the AWS secrets (as aws:access_key_id|secret_access_key)
+# amazon:
+# service: S3
+# access_key_id: <%= Rails.application.credentials.dig(:aws, :access_key_id) %>
+# secret_access_key: <%= Rails.application.credentials.dig(:aws, :secret_access_key) %>
+# region: us-east-1
+# bucket: your_own_bucket-<%= Rails.env %>
+
+# Remember not to checkin your GCS keyfile to a repository
+# google:
+# service: GCS
+# project: your_project
+# credentials: <%= Rails.root.join("path/to/gcs.keyfile") %>
+# bucket: your_own_bucket-<%= Rails.env %>
+
+# Use bin/rails credentials:edit to set the Azure Storage secret (as azure_storage:storage_access_key)
+# microsoft:
+# service: AzureStorage
+# storage_account_name: your_account_name
+# storage_access_key: <%= Rails.application.credentials.dig(:azure_storage, :storage_access_key) %>
+# container: your_container_name-<%= Rails.env %>
+
+# mirror:
+# service: Mirror
+# primary: local
+# mirrors: [ amazon, google, microsoft ]
diff --git a/config/travis.database.yml b/config/travis.database.yml
deleted file mode 100644
index c69ea6d..0000000
--- a/config/travis.database.yml
+++ /dev/null
@@ -1,21 +0,0 @@
-development:
- adapter: postgresql
- encoding: unicode
- database: ruvetia_development
- pool: 5
- username: postgres
- password:
- min_messages: warning
- encoding: UTF8
- host: localhost
-
-test:
- adapter: postgresql
- encoding: unicode
- database: ruvetia_test
- pool: 5
- username: postgres
- password:
- min_messages: warning
- encoding: UTF8
- host: localhost
diff --git a/db/migrate/20130301180004_create_members.rb b/db/migrate/20130301180004_create_members.rb
index a511474..66dc446 100644
--- a/db/migrate/20130301180004_create_members.rb
+++ b/db/migrate/20130301180004_create_members.rb
@@ -1,4 +1,4 @@
-class CreateMembers < ActiveRecord::Migration
+class CreateMembers < ActiveRecord::Migration[4.2]
def change
create_table :members do |t|
t.string :name
diff --git a/db/migrate/20130301184145_create_participations.rb b/db/migrate/20130301184145_create_participations.rb
index c5eb3f7..6367692 100644
--- a/db/migrate/20130301184145_create_participations.rb
+++ b/db/migrate/20130301184145_create_participations.rb
@@ -1,4 +1,4 @@
-class CreateParticipations < ActiveRecord::Migration
+class CreateParticipations < ActiveRecord::Migration[4.2]
def change
create_table :participations do |t|
t.integer :meetup_number
@@ -6,6 +6,7 @@ def change
t.timestamps
end
+
add_index :participations, [:meetup_number, :member_id], unique: true
end
end
diff --git a/db/migrate/20130430094913_change_github_id_to_integer.rb b/db/migrate/20130430094913_change_github_id_to_integer.rb
index e3aea2d..d2c6da6 100644
--- a/db/migrate/20130430094913_change_github_id_to_integer.rb
+++ b/db/migrate/20130430094913_change_github_id_to_integer.rb
@@ -1,4 +1,4 @@
-class ChangeGithubIdToInteger < ActiveRecord::Migration
+class ChangeGithubIdToInteger < ActiveRecord::Migration[4.2]
def up
execute 'ALTER TABLE members ALTER COLUMN github_id TYPE integer USING CAST(github_id AS INTEGER)'
end
diff --git a/db/migrate/20130807074014_change_meetup_number_to_meetup_id.rb b/db/migrate/20130807074014_change_meetup_number_to_meetup_id.rb
index 80844ca..f57ddf5 100644
--- a/db/migrate/20130807074014_change_meetup_number_to_meetup_id.rb
+++ b/db/migrate/20130807074014_change_meetup_number_to_meetup_id.rb
@@ -1,4 +1,4 @@
-class ChangeMeetupNumberToMeetupId < ActiveRecord::Migration
+class ChangeMeetupNumberToMeetupId < ActiveRecord::Migration[4.2]
def change
rename_column :participations, :meetup_number, :meetup_id
end
diff --git a/db/schema.rb b/db/schema.rb
index 7e03dd7..441f925 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -1,38 +1,35 @@
-# encoding: UTF-8
# This file is auto-generated from the current state of the database. Instead
# of editing this file, please use the migrations feature of Active Record to
# incrementally modify your database, and then regenerate this schema definition.
#
-# Note that this schema.rb definition is the authoritative source for your
-# database schema. If you need to create the application database on another
-# system, you should be using db:schema:load, not running all the migrations
-# from scratch. The latter is a flawed and unsustainable approach (the more migrations
-# you'll amass, the slower it'll run and the greater likelihood for issues).
+# This file is the source Rails uses to define your schema when running `bin/rails
+# db:schema:load`. When creating a new database, `bin/rails db:schema:load` tends to
+# be faster and is potentially less error prone than running all of your
+# migrations from scratch. Old migrations may fail to apply correctly if those
+# migrations use external dependencies or application code.
#
# It's strongly recommended that you check this file into your version control system.
-ActiveRecord::Schema.define(version: 20130807074014) do
-
+ActiveRecord::Schema[7.1].define(version: 2013_08_07_074014) do
# These are extensions that must be enabled in order to support this database
enable_extension "plpgsql"
- create_table "members", force: :cascade do |t|
- t.string "name"
- t.string "email"
- t.integer "github_id"
- t.string "github_login"
- t.string "github_oauth_token"
- t.datetime "created_at"
- t.datetime "updated_at"
+ create_table "members", id: :serial, force: :cascade do |t|
+ t.string "name"
+ t.string "email"
+ t.integer "github_id"
+ t.string "github_login"
+ t.string "github_oauth_token"
+ t.datetime "created_at", precision: nil
+ t.datetime "updated_at", precision: nil
end
- create_table "participations", force: :cascade do |t|
- t.integer "meetup_id"
- t.integer "member_id"
- t.datetime "created_at"
- t.datetime "updated_at"
+ create_table "participations", id: :serial, force: :cascade do |t|
+ t.integer "meetup_id"
+ t.integer "member_id"
+ t.datetime "created_at", precision: nil
+ t.datetime "updated_at", precision: nil
+ t.index ["meetup_id", "member_id"], name: "index_participations_on_meetup_id_and_member_id", unique: true
end
- add_index "participations", ["meetup_id", "member_id"], name: "index_participations_on_meetup_id_and_member_id", unique: true, using: :btree
-
end
diff --git a/lib/tasks/.gitkeep b/lib/assets/.keep
similarity index 100%
rename from lib/tasks/.gitkeep
rename to lib/assets/.keep
diff --git a/log/.gitkeep b/lib/tasks/.keep
similarity index 100%
rename from log/.gitkeep
rename to lib/tasks/.keep
diff --git a/vendor/assets/javascripts/.gitkeep b/log/.keep
similarity index 100%
rename from vendor/assets/javascripts/.gitkeep
rename to log/.keep
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..da8f9fd
--- /dev/null
+++ b/package.json
@@ -0,0 +1,10 @@
+{
+ "name": "app",
+ "private": "true",
+ "dependencies": {
+ "sass": "^1.69.6"
+ },
+ "scripts": {
+ "build:css": "sass ./app/assets/stylesheets/application.sass.scss:./app/assets/builds/application.css --no-source-map --load-path=node_modules"
+ }
+}
diff --git a/public/404.html b/public/404.html
index 9a48320..2be3af2 100644
--- a/public/404.html
+++ b/public/404.html
@@ -2,25 +2,66 @@
The page you were looking for doesn't exist (404)
-
-
+
-
The page you were looking for doesn't exist.
-
You may have mistyped the address or the page may have moved.
+
+
The page you were looking for doesn't exist.
+
You may have mistyped the address or the page may have moved.
+
+
If you are the application owner check the logs for more information.
diff --git a/public/422.html b/public/422.html
index 83660ab..c08eac0 100644
--- a/public/422.html
+++ b/public/422.html
@@ -2,25 +2,66 @@
The change you wanted was rejected (422)
-
-
+
-
The change you wanted was rejected.
-
Maybe you tried to change something you didn't have access to.
+
+
The change you wanted was rejected.
+
Maybe you tried to change something you didn't have access to.
+
+
If you are the application owner check the logs for more information.
diff --git a/public/500.html b/public/500.html
index f3648a0..78a030a 100644
--- a/public/500.html
+++ b/public/500.html
@@ -2,24 +2,65 @@
We're sorry, but something went wrong (500)
-
-
+
-
We're sorry, but something went wrong.
+
+
We're sorry, but something went wrong.
+
+
If you are the application owner check the logs for more information.
diff --git a/vendor/assets/stylesheets/.gitkeep b/public/apple-touch-icon-precomposed.png
similarity index 100%
rename from vendor/assets/stylesheets/.gitkeep
rename to public/apple-touch-icon-precomposed.png
diff --git a/vendor/plugins/.gitkeep b/public/apple-touch-icon.png
similarity index 100%
rename from vendor/plugins/.gitkeep
rename to public/apple-touch-icon.png
diff --git a/public/robots.txt b/public/robots.txt
index 085187f..c19f78a 100644
--- a/public/robots.txt
+++ b/public/robots.txt
@@ -1,5 +1 @@
-# See http://www.robotstxt.org/wc/norobots.html for documentation on how to use the robots.txt file
-#
-# To ban all spiders from the entire site uncomment the next two lines:
-# User-Agent: *
-# Disallow: /
+# See https://www.robotstxt.org/robotstxt.html for documentation on how to use the robots.txt file
diff --git a/storage/.keep b/storage/.keep
new file mode 100644
index 0000000..e69de29
diff --git a/test/application_system_test_case.rb b/test/application_system_test_case.rb
new file mode 100644
index 0000000..d19212a
--- /dev/null
+++ b/test/application_system_test_case.rb
@@ -0,0 +1,5 @@
+require "test_helper"
+
+class ApplicationSystemTestCase < ActionDispatch::SystemTestCase
+ driven_by :selenium, using: :chrome, screen_size: [1400, 1400]
+end
diff --git a/test/channels/application_cable/connection_test.rb b/test/channels/application_cable/connection_test.rb
new file mode 100644
index 0000000..6340bf9
--- /dev/null
+++ b/test/channels/application_cable/connection_test.rb
@@ -0,0 +1,13 @@
+require "test_helper"
+
+module ApplicationCable
+ class ConnectionTest < ActionCable::Connection::TestCase
+ # test "connects with cookies" do
+ # cookies.signed[:user_id] = 42
+ #
+ # connect
+ #
+ # assert_equal connection.user_id, "42"
+ # end
+ end
+end
diff --git a/test/system/.keep b/test/system/.keep
new file mode 100644
index 0000000..e69de29
diff --git a/test/test_helper.rb b/test/test_helper.rb
index 4a4979a..0c22470 100644
--- a/test/test_helper.rb
+++ b/test/test_helper.rb
@@ -1,19 +1,15 @@
-ENV["RAILS_ENV"] = "test"
-require File.expand_path('../../config/environment', __FILE__)
-require 'rails/test_help'
-require 'capybara/rails'
+ENV["RAILS_ENV"] ||= "test"
+require_relative "../config/environment"
+require "rails/test_help"
-class ActiveSupport::TestCase
-end
+module ActiveSupport
+ class TestCase
+ # Run tests in parallel with specified workers
+ parallelize(workers: :number_of_processors)
-class ActionDispatch::IntegrationTest
- # Make the Capybara DSL available in all integration tests
- include Capybara::DSL
- Capybara.app = Ruvetia::Application
- # Capybara.default_selector = :css
+ # Setup all fixtures in test/fixtures/*.yml for all tests in alphabetical order.
+ fixtures :all
- teardown do
- Capybara.reset_sessions! # Forget the (simulated) browser state
- Capybara.use_default_driver # Revert Capybara.current_driver to Capybara.default_driver
+ # Add more helper methods to be used by all tests here...
end
end
diff --git a/vendor/.keep b/vendor/.keep
new file mode 100644
index 0000000..e69de29
diff --git a/yarn.lock b/yarn.lock
new file mode 100644
index 0000000..7a447ca
--- /dev/null
+++ b/yarn.lock
@@ -0,0 +1,129 @@
+# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
+# yarn lockfile v1
+
+
+anymatch@~3.1.2:
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e"
+ integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==
+ dependencies:
+ normalize-path "^3.0.0"
+ picomatch "^2.0.4"
+
+binary-extensions@^2.0.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522"
+ integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==
+
+braces@~3.0.2:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789"
+ integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==
+ dependencies:
+ fill-range "^7.1.1"
+
+"chokidar@>=3.0.0 <4.0.0":
+ version "3.6.0"
+ resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b"
+ integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==
+ dependencies:
+ anymatch "~3.1.2"
+ braces "~3.0.2"
+ glob-parent "~5.1.2"
+ is-binary-path "~2.1.0"
+ is-glob "~4.0.1"
+ normalize-path "~3.0.0"
+ readdirp "~3.6.0"
+ optionalDependencies:
+ fsevents "~2.3.2"
+
+compass@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/compass/-/compass-0.1.1.tgz#5c56d5eb442d10c1ad5989ef5c5e925db60c60e1"
+ integrity sha512-9z+RjcAGig6/9uAFeCbWajTvrye1u61ca5QrqN6JTrHRYOOgAKs33Xv/3/fODYthxWC2C97AE0e45PLETNRicg==
+
+fill-range@^7.1.1:
+ version "7.1.1"
+ resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292"
+ integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==
+ dependencies:
+ to-regex-range "^5.0.1"
+
+fsevents@~2.3.2:
+ version "2.3.3"
+ resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6"
+ integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==
+
+glob-parent@~5.1.2:
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
+ integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
+ dependencies:
+ is-glob "^4.0.1"
+
+immutable@^4.0.0:
+ version "4.3.6"
+ resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.6.tgz#6a05f7858213238e587fb83586ffa3b4b27f0447"
+ integrity sha512-Ju0+lEMyzMVZarkTn/gqRpdqd5dOPaz1mCZ0SH3JV6iFw81PldE/PEB1hWVEA288HPt4WXW8O7AWxB10M+03QQ==
+
+is-binary-path@~2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09"
+ integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==
+ dependencies:
+ binary-extensions "^2.0.0"
+
+is-extglob@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
+ integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==
+
+is-glob@^4.0.1, is-glob@~4.0.1:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084"
+ integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==
+ dependencies:
+ is-extglob "^2.1.1"
+
+is-number@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
+ integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
+
+normalize-path@^3.0.0, normalize-path@~3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
+ integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
+
+picomatch@^2.0.4, picomatch@^2.2.1:
+ version "2.3.1"
+ resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42"
+ integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
+
+readdirp@~3.6.0:
+ version "3.6.0"
+ resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7"
+ integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==
+ dependencies:
+ picomatch "^2.2.1"
+
+sass@^1.69.6:
+ version "1.77.2"
+ resolved "https://registry.yarnpkg.com/sass/-/sass-1.77.2.tgz#18d4ed2eefc260cdc8099c5439ec1303fd5863aa"
+ integrity sha512-eb4GZt1C3avsX3heBNlrc7I09nyT00IUuo4eFhAbeXWU2fvA7oXI53SxODVAA+zgZCk9aunAZgO+losjR3fAwA==
+ dependencies:
+ chokidar ">=3.0.0 <4.0.0"
+ immutable "^4.0.0"
+ source-map-js ">=0.6.2 <2.0.0"
+
+"source-map-js@>=0.6.2 <2.0.0":
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.0.tgz#16b809c162517b5b8c3e7dcd315a2a5c2612b2af"
+ integrity sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==
+
+to-regex-range@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
+ integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
+ dependencies:
+ is-number "^7.0.0"