aboutsummaryrefslogtreecommitdiff
path: root/config
diff options
context:
space:
mode:
Diffstat (limited to 'config')
-rw-r--r--config/application.rb29
-rw-r--r--config/boot.rb6
-rw-r--r--config/cable.yml10
-rw-r--r--config/credentials.yml.enc1
-rw-r--r--config/database.yml25
-rw-r--r--config/environment.rb7
-rw-r--r--config/environments/development.rb78
-rw-r--r--config/environments/production.rb103
-rw-r--r--config/environments/test.rb66
-rw-r--r--config/importmap.rb11
-rw-r--r--config/initializers/assets.rb14
-rw-r--r--config/initializers/content_security_policy.rb26
-rw-r--r--config/initializers/filter_parameter_logging.rb11
-rw-r--r--config/initializers/inflections.rb17
-rw-r--r--config/initializers/locale.rb6
-rw-r--r--config/initializers/mime_types.rb3
-rw-r--r--config/initializers/permissions_policy.rb14
-rw-r--r--config/locales/ca.yml129
-rw-r--r--config/locales/en.yml131
-rw-r--r--config/puma.rb37
-rw-r--r--config/routes.rb27
-rw-r--r--config/storage.yml34
22 files changed, 785 insertions, 0 deletions
diff --git a/config/application.rb b/config/application.rb
new file mode 100644
index 0000000..1c5d017
--- /dev/null
+++ b/config/application.rb
@@ -0,0 +1,29 @@
+# frozen_string_literal: true
+
+require_relative 'boot'
+
+require 'rails/all'
+
+# Require the gems listed in Gemfile, including any gems
+# you've limited to :test, :development, or :production.
+Bundler.require(*Rails.groups)
+
+module Operum
+ class Application < Rails::Application
+ # Initialize configuration defaults for originally generated Rails version.
+ config.load_defaults 7.1
+
+ # 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])
+
+ # 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
new file mode 100644
index 0000000..c04863f
--- /dev/null
+++ b/config/boot.rb
@@ -0,0 +1,6 @@
+# frozen_string_literal: true
+
+ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../Gemfile', __dir__)
+
+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..8747fc1
--- /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: operum_production
diff --git a/config/credentials.yml.enc b/config/credentials.yml.enc
new file mode 100644
index 0000000..9c7c0cb
--- /dev/null
+++ b/config/credentials.yml.enc
@@ -0,0 +1 @@
+pIht0KY2mizAwrCdTEzPaWNu6vu/NQpI564SwxPwhLNexvZyWSrZ7L0YcGGENLlIW5xBH9gwVZJHpupRi0G1DcdP0NgHqVUHYqxnFXf6ngp7L15t/rWd4691K3HWF/9rebrjRwB33joitCvQQ/fud8SwIZ5nEQEq1edJzZywAX/9L+eMuI3hkxyq0+APQMnuOXN2yK38qTTdG46hI3lkcWm+ZcfOXKDg0oscjExdGT6zVpNoIqgtIdYbT+s1DXPzsxLt+Z4T0eSByQjSgfEHmNK0zmPpFR6LSpe97MCkqDM00rotJBQQpNeXqPOP6omdzJKsgiCst/PCJMYk74NtX+iv1SY4WvCzu8ReqnwDZyJ4MAzlAGLMO5ENwcoidugPoo72daoIcGVCX7iUEF6DUb4CZYtf--1M9Bc6cWdSUi6Y8k--dp3GZYMgAU4gvlnD+FlEhQ== \ No newline at end of file
diff --git a/config/database.yml b/config/database.yml
new file mode 100644
index 0000000..796466b
--- /dev/null
+++ b/config/database.yml
@@ -0,0 +1,25 @@
+# SQLite. Versions 3.8.0 and up are supported.
+# gem install sqlite3
+#
+# Ensure the SQLite 3 gem is defined in your Gemfile
+# gem "sqlite3"
+#
+default: &default
+ adapter: sqlite3
+ pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
+ timeout: 5000
+
+development:
+ <<: *default
+ database: storage/development.sqlite3
+
+# 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: storage/test.sqlite3
+
+production:
+ <<: *default
+ database: storage/production.sqlite3
diff --git a/config/environment.rb b/config/environment.rb
new file mode 100644
index 0000000..d5abe55
--- /dev/null
+++ b/config/environment.rb
@@ -0,0 +1,7 @@
+# frozen_string_literal: true
+
+# Load the Rails application.
+require_relative 'application'
+
+# Initialize the Rails application.
+Rails.application.initialize!
diff --git a/config/environments/development.rb b/config/environments/development.rb
new file mode 100644
index 0000000..80e0587
--- /dev/null
+++ b/config/environments/development.rb
@@ -0,0 +1,78 @@
+# frozen_string_literal: true
+
+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 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.enable_reloading = true
+
+ # Do not eager load code on boot.
+ config.eager_load = 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
+
+ # 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
+
+ # Uncomment if you wish to allow Action Cable access from any origin.
+ # config.action_cable.disable_request_forgery_protection = 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
new file mode 100644
index 0000000..a9e4d6d
--- /dev/null
+++ b/config/environments/production.rb
@@ -0,0 +1,103 @@
+# frozen_string_literal: true
+
+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.enable_reloading = false
+
+ # Eager load code on boot. This eager loads most of Rails and
+ # your application in memory, allowing both threaded web servers
+ # and those relying on copy on write to perform better.
+ # Rake tasks automatically ignore this option for performance.
+ config.eager_load = true
+
+ # Full error reports are disabled and caching is turned on.
+ config.consider_all_requests_local = false
+ config.action_controller.perform_caching = true
+
+ # 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 serving static files from `public/`, relying on NGINX/Apache to do so instead.
+ # config.public_file_server.enabled = false
+
+ # Compress CSS using a preprocessor.
+ # config.assets.css_compressor = :sass
+
+ # Do not fall back to assets pipeline if a precompiled asset is missed.
+ config.assets.compile = false
+
+ # 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
+
+ # 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
+
+ # 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 = [:request_id]
+
+ # "info" includes 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
+
+ # 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 = "operum_production"
+
+ config.action_mailer.perform_caching = false
+
+ # Ignore bad email addresses and do not raise email delivery errors. Set this
+ # to true and configure the email server for immediate delivery to raise
+ # delivery errors.
+ # config.action_mailer.raise_delivery_errors = false
+
+ # Enable locale fallbacks for I18n (makes lookups for any locale fall back to
+ # the I18n.default_locale when a translation cannot be found).
+ config.i18n.fallbacks = true
+
+ # 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
new file mode 100644
index 0000000..f1d2fb5
--- /dev/null
+++ b/config/environments/test.rb
@@ -0,0 +1,66 @@
+# frozen_string_literal: true
+
+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.
+
+ # While tests run files are not watched, reloading is not necessary.
+ config.enable_reloading = 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 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.action_controller.perform_caching = false
+ config.cache_store = :null_store
+
+ # 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
+
+ # 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
+
+ # 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/importmap.rb b/config/importmap.rb
new file mode 100644
index 0000000..bca5021
--- /dev/null
+++ b/config/importmap.rb
@@ -0,0 +1,11 @@
+# frozen_string_literal: true
+
+# Pin npm packages by running ./bin/importmap
+
+pin 'application'
+pin '@hotwired/turbo-rails', to: 'turbo.min.js'
+pin '@hotwired/stimulus', to: 'stimulus.min.js'
+pin '@hotwired/stimulus-loading', to: 'stimulus-loading.js'
+pin_all_from 'app/javascript/controllers', under: 'controllers'
+pin 'trix'
+pin '@rails/actiontext', to: 'actiontext.esm.js'
diff --git a/config/initializers/assets.rb b/config/initializers/assets.rb
new file mode 100644
index 0000000..bcafccd
--- /dev/null
+++ b/config/initializers/assets.rb
@@ -0,0 +1,14 @@
+# frozen_string_literal: true
+
+# Be sure to restart your server when you modify this file.
+
+# Version of your assets, change this if you want to expire all your assets.
+Rails.application.config.assets.version = '1.0'
+
+# Add additional assets to the asset load path.
+# Rails.application.config.assets.paths << Emoji.images_path
+
+# Precompile additional assets.
+# application.js, application.css, and all non-JS/CSS in the app/assets
+# folder are already added.
+# Rails.application.config.assets.precompile += %w( admin.js admin.css )
diff --git a/config/initializers/content_security_policy.rb b/config/initializers/content_security_policy.rb
new file mode 100644
index 0000000..af395e4
--- /dev/null
+++ b/config/initializers/content_security_policy.rb
@@ -0,0 +1,26 @@
+# frozen_string_literal: true
+# 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/filter_parameter_logging.rb b/config/initializers/filter_parameter_logging.rb
new file mode 100644
index 0000000..7231487
--- /dev/null
+++ b/config/initializers/filter_parameter_logging.rb
@@ -0,0 +1,11 @@
+# frozen_string_literal: true
+
+# Be sure to restart your server when you modify this file.
+
+# 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 += %i[
+ passw secret token _key crypt salt certificate otp ssn
+]
diff --git a/config/initializers/inflections.rb b/config/initializers/inflections.rb
new file mode 100644
index 0000000..6c78420
--- /dev/null
+++ b/config/initializers/inflections.rb
@@ -0,0 +1,17 @@
+# frozen_string_literal: true
+# Be sure to restart your server when you modify this file.
+
+# Add new inflection rules using the following format. Inflections
+# are locale specific, and you may define rules for as many different
+# locales as you wish. All of these examples are active by default:
+# ActiveSupport::Inflector.inflections(:en) do |inflect|
+# inflect.plural /^(ox)$/i, "\\1en"
+# inflect.singular /^(ox)en/i, "\\1"
+# inflect.irregular "person", "people"
+# inflect.uncountable %w( fish sheep )
+# end
+
+# These inflection rules are supported but not enabled by default:
+# ActiveSupport::Inflector.inflections(:en) do |inflect|
+# inflect.acronym "RESTful"
+# end
diff --git a/config/initializers/locale.rb b/config/initializers/locale.rb
new file mode 100644
index 0000000..f3d7af7
--- /dev/null
+++ b/config/initializers/locale.rb
@@ -0,0 +1,6 @@
+# frozen_string_literal: true
+
+I18n.available_locales = %i[en ca]
+I18n.default_locale = ENV.fetch('OPERUM_DEFAULT_LOCALE', :ca).to_sym
+
+Rails.logger.info "Locale: #{I18n.default_locale}"
diff --git a/config/initializers/mime_types.rb b/config/initializers/mime_types.rb
new file mode 100644
index 0000000..6043616
--- /dev/null
+++ b/config/initializers/mime_types.rb
@@ -0,0 +1,3 @@
+# frozen_string_literal: true
+
+Mime::Type.register 'application/x-tex', :uoc
diff --git a/config/initializers/permissions_policy.rb b/config/initializers/permissions_policy.rb
new file mode 100644
index 0000000..b635b52
--- /dev/null
+++ b/config/initializers/permissions_policy.rb
@@ -0,0 +1,14 @@
+# frozen_string_literal: true
+# 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/locales/ca.yml b/config/locales/ca.yml
new file mode 100644
index 0000000..ae9983c
--- /dev/null
+++ b/config/locales/ca.yml
@@ -0,0 +1,129 @@
+ca:
+ ##
+ # Rails thingies.
+
+ activerecord:
+ models:
+ comment: Comentari
+ tag: Etiqueta
+ thing: Font
+ attributes:
+ comment:
+ content: Contingut
+ tag:
+ name: Nom
+ thing:
+ target: Identificador
+ title: Títol
+ publisher: Editorial
+ address: Adreça
+ year: Any
+ url: Enllaç
+ access: Última data de consulta
+ location: Lloc
+ insideof: Dins de
+ pages: Pàgines
+ rate: Qualificació
+ status: Estat
+ kind: Tipus
+ note: Notes
+ authors: Autors
+ editors: Editors d'una col·lecció
+ bought_at: Data de compra
+ where_is_it: Per on para?
+ user:
+ username: Nom d'usuari
+ password: Contrasenya
+
+ helpers:
+ submit:
+ create: Afegeix
+ update: Actualitza
+
+ ##
+ # App-specific strings.
+
+ general:
+ sure: N'estàs segur?
+ edit: edita
+ delete: elimina
+ new: nou
+ create: Afegeix
+ list: llista
+ in: a
+ back-to-list: torna a la llista
+ or: o
+ cancel: cancel·la
+ insideof: Dins de
+ insideof-vowel: Dins d'
+
+ comments:
+ title: Comentari
+ title-plural: Comentaris
+ new: Comenta
+ none: De moment no sha fet cap comentari
+ edit-title: Edita comnetari
+ delete-title: Esborra comentari
+ bad-create: "No s'ha pogut afegir el comentari per motius desconeguts"
+ bad-update: "No s'ha pogut actualitzar el comentari per motius desconeguts"
+
+ layout:
+ created-by: Creat per
+ this-page-license: Aquesta pàgina és programari lliure i està sota la llicència
+ source-code: codi font
+
+ license:
+ title: Llicència
+ at: El codi font es pot trobar
+ here: aquí
+
+ sessions:
+ title: Benvingut!
+ wrong-credentials: Usuari o contrasenya incorrectes
+ sign-in: Entra
+ sign-out: Tanca la sessió
+
+ searches:
+ title: Cerca
+ object: cerca
+ home: Tot
+ save: guarda cerca
+ public: Públic
+
+ shared:
+ title: Cerques públiques
+ none: De moment no s'ha compartit cap cerca
+
+ export:
+ action: exporta
+ note: ATENCIÓ
+ note-msg: només s'inclourà informació que pugui ser utilitzada per a escriure una secció de bibliografia
+ chapter: Bibliografia
+
+ tags:
+ title: Etiquetes
+ new: Etiqueta nova
+ new-action: nova
+ create-success: Etiqueta creada correctament
+ destroy-success: Etiqueta esborrada correctament
+
+ things:
+ object: font
+ create-another: Afegeix-ne una altra
+ create-success: Nova font creada correctament
+ update-success: Font actualitzada correctament
+ destroy-success: Font esborrada correctament
+
+ status:
+ read: Llegit
+ notread: Per llegir
+ tobepublished: Per publicar
+
+ kind:
+ other: Altre
+ poetry: Poesia
+ theater: Teatre
+ essay: Assaig
+ shorts: Narració breu
+ novel: Novel·la
+ paper: Article
diff --git a/config/locales/en.yml b/config/locales/en.yml
new file mode 100644
index 0000000..f00d7e5
--- /dev/null
+++ b/config/locales/en.yml
@@ -0,0 +1,131 @@
+en:
+ ##
+ # Rails thingies.
+
+ activerecord:
+ models:
+ comment: Comment
+ tag: Tag
+ thing: Source
+ attributes:
+ comment:
+ content: Content
+ tag:
+ name: Name
+ thing:
+ target: Identifier
+ title: Title
+ publisher: Publisher
+ address: Address
+ year: Year
+ url: URL
+ access: Last consulted at
+ location: Place
+ insideof: Inside of
+ pages: Pages
+ rate: Rate
+ status: Status
+ kind: Kind
+ note: Notes
+ authors: Authors
+ editors: Editors of a collection
+ bought_at: Bought at
+ where_is_it: Where is it?
+ user:
+ username: Username
+ password: Password
+
+ helpers:
+ submit:
+ create: Create
+ update: Update
+
+ ##
+ # App-specific strings.
+
+ general:
+ sure: Are you sure?
+ edit: edit
+ delete: delete
+ new: new
+ create: create
+ list: list
+ in: in
+ back-to-list: back to list
+ or: or
+ cancel: cancel
+ insideof: Inside of
+ insideof-vowel: Inside of
+
+ comments:
+ title: Comment
+ title-plural: Comments
+ new: New comment
+ none: 'No comments have been made so far'
+ edit-title: Edit comment
+ delete-title: Delete comment
+ bad-create: Could not add comment for unknown reasons
+ bad-update: Could not update comment for unknown reasons
+
+ layout:
+ created-by: Created by
+ this-page-license: This site is free software and is under the
+ source-code: source code
+
+ license:
+ title: License
+ at: You can find the source code
+ here: here
+
+ sessions:
+ title: Welcome!
+ wrong-credentials: Wrong credentials
+ sign-in: Sign in
+ sign-out: Sign out
+
+ searches:
+ title: Search
+ object: search
+ home: Home
+ save: save search
+ public: Public
+
+ shared:
+ title: Public searches
+ none: 'No searches have been shared for now'
+
+ export:
+ action: export
+ note: 'NOTE'
+ note-msg: only information that can be used for building up a bibliography section will be included
+ chapter: Bibliography
+
+ tags:
+ title: Tags
+ new: New tag
+ new-action: new
+
+ create-success: Tag was successfully created
+ destroy-success: Tag was successfully deleted
+
+ things:
+ object: source
+ create-another: Create another one
+
+ create-success: New source was successfully created
+ update-success: Source was successfully updated
+ destroy-success: Source was successfully deleted
+
+ status:
+ read: Read
+ notread: Not read
+ tobepublished: To be published
+
+ kind:
+ other: Other
+ poetry: Poetry
+ theater: Theater
+ essay: Essay
+ shorts: Shorts
+ novel: Novel
+ paper: Paper
diff --git a/config/puma.rb b/config/puma.rb
new file mode 100644
index 0000000..7ed4157
--- /dev/null
+++ b/config/puma.rb
@@ -0,0 +1,37 @@
+# frozen_string_literal: true
+
+# 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
new file mode 100644
index 0000000..1e5eedb
--- /dev/null
+++ b/config/routes.rb
@@ -0,0 +1,27 @@
+# frozen_string_literal: true
+
+Rails.application.routes.draw do
+ resources :searches do
+ collection do
+ get 'search'
+ get 'shared' => 'shared_searches#index'
+ end
+
+ get 'shared' => 'shared_searches#show'
+
+ resource :exports, only: %i[new show]
+ end
+
+ resources :tags, only: %i[index new create destroy]
+ resources :things, except: %i[index] do
+ resources :comments, only: %i[create update destroy]
+ end
+
+ resource :license, only: %i[show]
+ resource :sessions, only: %i[new create destroy]
+
+ # Provided by Rails for health checking :)
+ get 'up' => 'rails/health#show', as: :rails_health_check
+
+ root 'searches#index'
+end
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 ]