Merge pull request #4278 from tomhughes/rails71

Upgrade to rails 7.1.1
This commit is contained in:
Andy Allan 2023-10-18 18:51:16 +01:00 committed by GitHub
commit 574231cf95
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
39 changed files with 568 additions and 318 deletions

View file

@ -91,7 +91,7 @@ jobs:
sudo -u postgres createuser -s $(id -un) sudo -u postgres createuser -s $(id -un)
createdb openstreetmap createdb openstreetmap
cp config/github.database.yml config/database.yml cp config/github.database.yml config/database.yml
bundle exec rails db:test:load bundle exec rails db:schema:load
- name: Run Annotate Models - name: Run Annotate Models
run: bundle exec rails annotate_models run: bundle exec rails annotate_models
- name: Fail if model annotations are out of date - name: Fail if model annotations are out of date

View file

@ -19,6 +19,7 @@ RUN apt-get update \
libvips-dev \ libvips-dev \
libxml2-dev \ libxml2-dev \
libxslt1-dev \ libxslt1-dev \
libyaml-dev \
locales \ locales \
postgresql-client \ postgresql-client \
ruby \ ruby \

View file

@ -1,7 +1,7 @@
source "https://rubygems.org" source "https://rubygems.org"
# Require rails # Require rails
gem "rails", "~> 7.0.0" gem "rails", "~> 7.1.0"
# Require json for multi_json # Require json for multi_json
gem "json" gem "json"
@ -48,7 +48,6 @@ gem "active_record_union"
gem "bootstrap", :github => "gravitystorm/bootstrap-rubygem", :branch => "dartsass_5_2_3" gem "bootstrap", :github => "gravitystorm/bootstrap-rubygem", :branch => "dartsass_5_2_3"
gem "bootstrap_form", "~> 5.0" gem "bootstrap_form", "~> 5.0"
gem "cancancan" gem "cancancan"
gem "composite_primary_keys", "~> 14.0.0"
gem "config" gem "config"
gem "delayed_job_active_record" gem "delayed_job_active_record"
gem "frozen_record" gem "frozen_record"
@ -114,7 +113,7 @@ gem "kgio"
gem "secure_headers" gem "secure_headers"
# Load canonical-rails to generate canonical URLs # Load canonical-rails to generate canonical URLs
gem "canonical-rails" gem "canonical-rails", :github => "tomhughes/canonical-rails", :branch => "rails71"
# Used to generate logstash friendly log files # Used to generate logstash friendly log files
gem "logstasher" gem "logstasher"

View file

@ -7,81 +7,100 @@ GIT
autoprefixer-rails (>= 9.1.0) autoprefixer-rails (>= 9.1.0)
popper_js (>= 2.11.6, < 3) popper_js (>= 2.11.6, < 3)
GIT
remote: https://github.com/tomhughes/canonical-rails.git
revision: e368572f7a3b609c73cc3d37d8e00d963c5e29f0
branch: rails71
specs:
canonical-rails (0.2.14)
actionmailer (>= 4.1, < 7.2)
activerecord (>= 4.1, < 7.2)
railties (>= 4.1, < 7.2)
sprockets-rails (~> 3.0)
GEM GEM
remote: https://rubygems.org/ remote: https://rubygems.org/
specs: specs:
aasm (5.5.0) aasm (5.5.0)
concurrent-ruby (~> 1.0) concurrent-ruby (~> 1.0)
actioncable (7.0.8) actioncable (7.1.1)
actionpack (= 7.0.8) actionpack (= 7.1.1)
activesupport (= 7.0.8) activesupport (= 7.1.1)
nio4r (~> 2.0) nio4r (~> 2.0)
websocket-driver (>= 0.6.1) websocket-driver (>= 0.6.1)
actionmailbox (7.0.8) zeitwerk (~> 2.6)
actionpack (= 7.0.8) actionmailbox (7.1.1)
activejob (= 7.0.8) actionpack (= 7.1.1)
activerecord (= 7.0.8) activejob (= 7.1.1)
activestorage (= 7.0.8) activerecord (= 7.1.1)
activesupport (= 7.0.8) activestorage (= 7.1.1)
activesupport (= 7.1.1)
mail (>= 2.7.1) mail (>= 2.7.1)
net-imap net-imap
net-pop net-pop
net-smtp net-smtp
actionmailer (7.0.8) actionmailer (7.1.1)
actionpack (= 7.0.8) actionpack (= 7.1.1)
actionview (= 7.0.8) actionview (= 7.1.1)
activejob (= 7.0.8) activejob (= 7.1.1)
activesupport (= 7.0.8) activesupport (= 7.1.1)
mail (~> 2.5, >= 2.5.4) mail (~> 2.5, >= 2.5.4)
net-imap net-imap
net-pop net-pop
net-smtp net-smtp
rails-dom-testing (~> 2.0) rails-dom-testing (~> 2.2)
actionpack (7.0.8) actionpack (7.1.1)
actionview (= 7.0.8) actionview (= 7.1.1)
activesupport (= 7.0.8) activesupport (= 7.1.1)
rack (~> 2.0, >= 2.2.4) nokogiri (>= 1.8.5)
rack (>= 2.2.4)
rack-session (>= 1.0.1)
rack-test (>= 0.6.3) rack-test (>= 0.6.3)
rails-dom-testing (~> 2.0) rails-dom-testing (~> 2.2)
rails-html-sanitizer (~> 1.0, >= 1.2.0) rails-html-sanitizer (~> 1.6)
actionpack-page_caching (1.2.4) actionpack-page_caching (1.2.4)
actionpack (>= 4.0.0) actionpack (>= 4.0.0)
actiontext (7.0.8) actiontext (7.1.1)
actionpack (= 7.0.8) actionpack (= 7.1.1)
activerecord (= 7.0.8) activerecord (= 7.1.1)
activestorage (= 7.0.8) activestorage (= 7.1.1)
activesupport (= 7.0.8) activesupport (= 7.1.1)
globalid (>= 0.6.0) globalid (>= 0.6.0)
nokogiri (>= 1.8.5) nokogiri (>= 1.8.5)
actionview (7.0.8) actionview (7.1.1)
activesupport (= 7.0.8) activesupport (= 7.1.1)
builder (~> 3.1) builder (~> 3.1)
erubi (~> 1.4) erubi (~> 1.11)
rails-dom-testing (~> 2.0) rails-dom-testing (~> 2.2)
rails-html-sanitizer (~> 1.1, >= 1.2.0) rails-html-sanitizer (~> 1.6)
active_record_union (1.3.0) active_record_union (1.3.0)
activerecord (>= 4.0) activerecord (>= 4.0)
activejob (7.0.8) activejob (7.1.1)
activesupport (= 7.0.8) activesupport (= 7.1.1)
globalid (>= 0.3.6) globalid (>= 0.3.6)
activemodel (7.0.8) activemodel (7.1.1)
activesupport (= 7.0.8) activesupport (= 7.1.1)
activerecord (7.0.8) activerecord (7.1.1)
activemodel (= 7.0.8) activemodel (= 7.1.1)
activesupport (= 7.0.8) activesupport (= 7.1.1)
timeout (>= 0.4.0)
activerecord-import (1.5.0) activerecord-import (1.5.0)
activerecord (>= 4.2) activerecord (>= 4.2)
activestorage (7.0.8) activestorage (7.1.1)
actionpack (= 7.0.8) actionpack (= 7.1.1)
activejob (= 7.0.8) activejob (= 7.1.1)
activerecord (= 7.0.8) activerecord (= 7.1.1)
activesupport (= 7.0.8) activesupport (= 7.1.1)
marcel (~> 1.0) marcel (~> 1.0)
mini_mime (>= 1.1.0) activesupport (7.1.1)
activesupport (7.0.8) base64
bigdecimal
concurrent-ruby (~> 1.0, >= 1.0.2) concurrent-ruby (~> 1.0, >= 1.0.2)
connection_pool (>= 2.2.5)
drb
i18n (>= 1.6, < 2) i18n (>= 1.6, < 2)
minitest (>= 5.1) minitest (>= 5.1)
mutex_m
tzinfo (~> 2.0) tzinfo (~> 2.0)
addressable (2.8.5) addressable (2.8.5)
public_suffix (>= 2.0.2, < 6.0) public_suffix (>= 2.0.2, < 6.0)
@ -122,6 +141,7 @@ GEM
erubi (~> 1.4) erubi (~> 1.4)
parser (>= 2.4) parser (>= 2.4)
smart_properties smart_properties
bigdecimal (3.1.4)
binding_of_caller (1.0.0) binding_of_caller (1.0.0)
debug_inspector (>= 0.0.1) debug_inspector (>= 0.0.1)
bootsnap (1.16.0) bootsnap (1.16.0)
@ -136,8 +156,6 @@ GEM
bzip2-ffi (1.1.1) bzip2-ffi (1.1.1)
ffi (~> 1.0) ffi (~> 1.0)
cancancan (3.5.0) cancancan (3.5.0)
canonical-rails (0.2.14)
rails (>= 4.1, <= 7.1)
capybara (3.39.2) capybara (3.39.2)
addressable addressable
matrix matrix
@ -147,8 +165,6 @@ GEM
rack-test (>= 0.6.3) rack-test (>= 0.6.3)
regexp_parser (>= 1.5, < 3.0) regexp_parser (>= 1.5, < 3.0)
xpath (~> 3.2) xpath (~> 3.2)
composite_primary_keys (14.0.6)
activerecord (~> 7.0.2)
concurrent-ruby (1.2.2) concurrent-ruby (1.2.2)
config (4.2.1) config (4.2.1)
deep_merge (~> 1.2, >= 1.2.1) deep_merge (~> 1.2, >= 1.2.1)
@ -182,6 +198,8 @@ GEM
doorkeeper-openid_connect (1.8.7) doorkeeper-openid_connect (1.8.7)
doorkeeper (>= 5.5, < 5.7) doorkeeper (>= 5.5, < 5.7)
jwt (>= 2.5) jwt (>= 2.5)
drb (2.1.1)
ruby2_keywords
dry-configurable (1.1.0) dry-configurable (1.1.0)
dry-core (~> 1.0, < 2) dry-core (~> 1.0, < 2)
zeitwerk (~> 2.6) zeitwerk (~> 2.6)
@ -283,6 +301,10 @@ GEM
ruby-vips (>= 2.0.17, < 3) ruby-vips (>= 2.0.17, < 3)
image_size (3.3.0) image_size (3.3.0)
in_threads (1.6.0) in_threads (1.6.0)
io-console (0.6.0)
irb (1.8.3)
rdoc
reline (>= 0.3.8)
jbuilder (2.11.5) jbuilder (2.11.5)
actionview (>= 5.0.0) actionview (>= 5.0.0)
activesupport (>= 5.0.0) activesupport (>= 5.0.0)
@ -315,7 +337,6 @@ GEM
marcel (1.0.2) marcel (1.0.2)
matrix (0.4.2) matrix (0.4.2)
maxminddb (0.1.22) maxminddb (0.1.22)
method_source (1.0.0)
mini_magick (4.12.0) mini_magick (4.12.0)
mini_mime (1.1.5) mini_mime (1.1.5)
mini_portile2 (2.8.4) mini_portile2 (2.8.4)
@ -323,6 +344,7 @@ GEM
msgpack (1.7.2) msgpack (1.7.2)
multi_json (1.15.0) multi_json (1.15.0)
multi_xml (0.6.0) multi_xml (0.6.0)
mutex_m (0.1.2)
net-imap (0.4.1) net-imap (0.4.1)
date date
net-protocol net-protocol
@ -389,6 +411,8 @@ GEM
pg (1.5.4) pg (1.5.4)
popper_js (2.11.8) popper_js (2.11.8)
progress (3.6.0) progress (3.6.0)
psych (5.1.1.1)
stringio
public_suffix (5.0.3) public_suffix (5.0.3)
puma (5.6.7) puma (5.6.7)
nio4r (~> 2.0) nio4r (~> 2.0)
@ -403,23 +427,28 @@ GEM
ruby-openid (>= 2.1.8) ruby-openid (>= 2.1.8)
rack-protection (3.1.0) rack-protection (3.1.0)
rack (~> 2.2, >= 2.2.4) rack (~> 2.2, >= 2.2.4)
rack-session (1.0.1)
rack (< 3)
rack-test (2.1.0) rack-test (2.1.0)
rack (>= 1.3) rack (>= 1.3)
rack-uri_sanitizer (0.0.2) rack-uri_sanitizer (0.0.2)
rails (7.0.8) rackup (1.0.0)
actioncable (= 7.0.8) rack (< 3)
actionmailbox (= 7.0.8) webrick
actionmailer (= 7.0.8) rails (7.1.1)
actionpack (= 7.0.8) actioncable (= 7.1.1)
actiontext (= 7.0.8) actionmailbox (= 7.1.1)
actionview (= 7.0.8) actionmailer (= 7.1.1)
activejob (= 7.0.8) actionpack (= 7.1.1)
activemodel (= 7.0.8) actiontext (= 7.1.1)
activerecord (= 7.0.8) actionview (= 7.1.1)
activestorage (= 7.0.8) activejob (= 7.1.1)
activesupport (= 7.0.8) activemodel (= 7.1.1)
activerecord (= 7.1.1)
activestorage (= 7.1.1)
activesupport (= 7.1.1)
bundler (>= 1.15.0) bundler (>= 1.15.0)
railties (= 7.0.8) railties (= 7.1.1)
rails-controller-testing (1.0.5) rails-controller-testing (1.0.5)
actionpack (>= 5.0.1.rc1) actionpack (>= 5.0.1.rc1)
actionview (>= 5.0.1.rc1) actionview (>= 5.0.1.rc1)
@ -434,19 +463,24 @@ GEM
rails-i18n (7.0.8) rails-i18n (7.0.8)
i18n (>= 0.7, < 2) i18n (>= 0.7, < 2)
railties (>= 6.0.0, < 8) railties (>= 6.0.0, < 8)
railties (7.0.8) railties (7.1.1)
actionpack (= 7.0.8) actionpack (= 7.1.1)
activesupport (= 7.0.8) activesupport (= 7.1.1)
method_source irb
rackup (>= 1.0.0)
rake (>= 12.2) rake (>= 12.2)
thor (~> 1.0) thor (~> 1.0, >= 1.2.2)
zeitwerk (~> 2.5) zeitwerk (~> 2.6)
rainbow (3.1.1) rainbow (3.1.1)
rake (13.0.6) rake (13.0.6)
rb-fsevent (0.11.2) rb-fsevent (0.11.2)
rb-inotify (0.10.1) rb-inotify (0.10.1)
ffi (~> 1.0) ffi (~> 1.0)
regexp_parser (2.8.2) rdoc (6.5.0)
psych (>= 4.0.0)
regexp_parser (2.8.1)
reline (0.3.9)
io-console (~> 0.5)
request_store (1.5.1) request_store (1.5.1)
rack (>= 1.4) rack (>= 1.4)
rexml (3.2.6) rexml (3.2.6)
@ -520,6 +554,7 @@ GEM
actionpack (>= 5.2) actionpack (>= 5.2)
activesupport (>= 5.2) activesupport (>= 5.2)
sprockets (>= 3.0.0) sprockets (>= 3.0.0)
stringio (3.0.8)
strong_migrations (1.6.3) strong_migrations (1.6.3)
activerecord (>= 5.2) activerecord (>= 5.2)
terminal-table (3.0.2) terminal-table (3.0.2)
@ -540,6 +575,7 @@ GEM
addressable (>= 2.8.0) addressable (>= 2.8.0)
crack (>= 0.3.2) crack (>= 0.3.2)
hashdiff (>= 0.4.0, < 2.0.0) hashdiff (>= 0.4.0, < 2.0.0)
webrick (1.8.1)
websocket (1.2.10) websocket (1.2.10)
websocket-driver (0.7.6) websocket-driver (0.7.6)
websocket-extensions (>= 0.1.0) websocket-extensions (>= 0.1.0)
@ -569,9 +605,8 @@ DEPENDENCIES
browser browser
bzip2-ffi bzip2-ffi
cancancan cancancan
canonical-rails canonical-rails!
capybara (>= 2.15) capybara (>= 2.15)
composite_primary_keys (~> 14.0.0)
config config
connection_pool connection_pool
dalli dalli
@ -621,7 +656,7 @@ DEPENDENCIES
r2 (~> 0.2.7) r2 (~> 0.2.7)
rack-cors rack-cors
rack-uri_sanitizer rack-uri_sanitizer
rails (~> 7.0.0) rails (~> 7.1.0)
rails-controller-testing rails-controller-testing
rails-i18n (~> 7.0.0) rails-i18n (~> 7.0.0)
rinku (>= 2.0.6) rinku (>= 2.0.6)

View file

@ -35,7 +35,7 @@ sudo apt-get install ruby ruby-dev ruby-bundler \
libvips-dev libxml2-dev libxslt1-dev nodejs \ libvips-dev libxml2-dev libxslt1-dev nodejs \
build-essential git-core \ build-essential git-core \
postgresql postgresql-contrib libpq-dev libsasl2-dev \ postgresql postgresql-contrib libpq-dev libsasl2-dev \
libffi-dev libgd-dev libarchive-dev libbz2-dev npm libffi-dev libgd-dev libarchive-dev libyaml-dev libbz2-dev npm
sudo npm install --global yarn sudo npm install --global yarn
``` ```
@ -51,7 +51,7 @@ sudo dnf install ruby ruby-devel rubygem-rdoc rubygem-bundler rubygems \
gcc gcc-c++ git \ gcc gcc-c++ git \
postgresql postgresql-server postgresql-contrib libpq-devel \ postgresql postgresql-server postgresql-contrib libpq-devel \
perl-podlators libffi-devel gd-devel libarchive-devel \ perl-podlators libffi-devel gd-devel libarchive-devel \
bzip2-devel nodejs-yarn vips-devel libyaml-devel bzip2-devel nodejs-yarn vips-devel
``` ```
If you didn't already have PostgreSQL installed then create a PostgreSQL instance and start the server: If you didn't already have PostgreSQL installed then create a PostgreSQL instance and start the server:

View file

@ -73,7 +73,7 @@ module UserHelper
if user.avatar.variable? if user.avatar.variable?
variant = user.avatar.variant(variant_options) variant = user.avatar.variant(variant_options)
# https://stackoverflow.com/questions/61893089/get-metadata-of-active-storage-variant/67228171 # https://stackoverflow.com/questions/61893089/get-metadata-of-active-storage-variant/67228171
if variant.processed? if variant.send(:processed?)
metadata = variant.processed.send(:record).image.blob.metadata metadata = variant.processed.send(:record).image.blob.metadata
if metadata["width"] if metadata["width"]
options[:width] = metadata["width"] options[:width] = metadata["width"]

View file

@ -12,8 +12,6 @@
# #
class ChangesetTag < ApplicationRecord class ChangesetTag < ApplicationRecord
self.primary_keys = "changeset_id", "k"
belongs_to :changeset belongs_to :changeset
validates :changeset, :associated => true validates :changeset, :associated => true

View file

@ -9,7 +9,7 @@ module GeoRecord
format("%<coord>.7f", :coord => self) format("%<coord>.7f", :coord => self)
end end
def as_json(_) def as_json(*)
format("%<coord>.7f", :coord => self).to_f format("%<coord>.7f", :coord => self).to_f
end end
end end

View file

@ -16,8 +16,6 @@
# #
class DiaryEntrySubscription < ApplicationRecord class DiaryEntrySubscription < ApplicationRecord
self.primary_keys = "user_id", "diary_entry_id"
belongs_to :user belongs_to :user
belongs_to :diary_entry belongs_to :diary_entry
end end

View file

@ -13,7 +13,6 @@
class NodeTag < ApplicationRecord class NodeTag < ApplicationRecord
self.table_name = "current_node_tags" self.table_name = "current_node_tags"
self.primary_keys = "node_id", "k"
belongs_to :node belongs_to :node

View file

@ -29,7 +29,6 @@ class OldNode < ApplicationRecord
include ConsistencyValidations include ConsistencyValidations
self.table_name = "nodes" self.table_name = "nodes"
self.primary_keys = "node_id", "version"
# NOTE: this needs to be included after the table name changes, or # NOTE: this needs to be included after the table name changes, or
# the queries generated by Redactable will use the wrong table name. # the queries generated by Redactable will use the wrong table name.
@ -49,7 +48,7 @@ class OldNode < ApplicationRecord
belongs_to :redaction, :optional => true belongs_to :redaction, :optional => true
belongs_to :current_node, :class_name => "Node", :foreign_key => "node_id", :inverse_of => :old_nodes belongs_to :current_node, :class_name => "Node", :foreign_key => "node_id", :inverse_of => :old_nodes
has_many :old_tags, :class_name => "OldNodeTag", :foreign_key => [:node_id, :version], :inverse_of => :old_node has_many :old_tags, :class_name => "OldNodeTag", :query_constraints => [:node_id, :version], :inverse_of => :old_node
def validate_position def validate_position
errors.add(:base, "Node is not in the world") unless in_world? errors.add(:base, "Node is not in the world") unless in_world?

View file

@ -9,14 +9,13 @@
# #
# Foreign Keys # Foreign Keys
# #
# node_tags_id_fkey (node_id => nodes.node_id) # node_tags_id_fkey (["node_id", "version"] => nodes.["node_id", "version"])
# #
class OldNodeTag < ApplicationRecord class OldNodeTag < ApplicationRecord
self.table_name = "node_tags" self.table_name = "node_tags"
self.primary_keys = "node_id", "version", "k"
belongs_to :old_node, :foreign_key => [:node_id, :version], :inverse_of => :old_tags belongs_to :old_node, :query_constraints => [:node_id, :version], :inverse_of => :old_tags
validates :old_node, :associated => true validates :old_node, :associated => true
validates :k, :v, :allow_blank => true, :length => { :maximum => 255 }, :characters => true validates :k, :v, :allow_blank => true, :length => { :maximum => 255 }, :characters => true

View file

@ -24,7 +24,6 @@ class OldRelation < ApplicationRecord
include ConsistencyValidations include ConsistencyValidations
self.table_name = "relations" self.table_name = "relations"
self.primary_keys = "relation_id", "version"
# NOTE: this needs to be included after the table name changes, or # NOTE: this needs to be included after the table name changes, or
# the queries generated by Redactable will use the wrong table name. # the queries generated by Redactable will use the wrong table name.
@ -34,8 +33,8 @@ class OldRelation < ApplicationRecord
belongs_to :redaction, :optional => true belongs_to :redaction, :optional => true
belongs_to :current_relation, :class_name => "Relation", :foreign_key => "relation_id", :inverse_of => :old_relations belongs_to :current_relation, :class_name => "Relation", :foreign_key => "relation_id", :inverse_of => :old_relations
has_many :old_members, -> { order(:sequence_id) }, :class_name => "OldRelationMember", :foreign_key => [:relation_id, :version], :inverse_of => :old_relation has_many :old_members, -> { order(:sequence_id) }, :class_name => "OldRelationMember", :query_constraints => [:relation_id, :version], :inverse_of => :old_relation
has_many :old_tags, :class_name => "OldRelationTag", :foreign_key => [:relation_id, :version], :inverse_of => :old_relation has_many :old_tags, :class_name => "OldRelationTag", :query_constraints => [:relation_id, :version], :inverse_of => :old_relation
validates :changeset, :associated => true validates :changeset, :associated => true
validates :timestamp, :presence => true validates :timestamp, :presence => true

View file

@ -15,14 +15,14 @@
# #
# Foreign Keys # Foreign Keys
# #
# relation_members_id_fkey (relation_id => relations.relation_id) # relation_members_id_fkey (["relation_id", "version"] => relations.["relation_id", "version"])
# #
class OldRelationMember < ApplicationRecord class OldRelationMember < ApplicationRecord
self.table_name = "relation_members" self.table_name = "relation_members"
self.primary_keys = "relation_id", "version", "sequence_id" self.primary_key = %w[relation_id version sequence_id]
belongs_to :old_relation, :foreign_key => [:relation_id, :version], :inverse_of => :old_members belongs_to :old_relation, :query_constraints => [:relation_id, :version], :inverse_of => :old_members
# A bit messy, referring to the current tables, should do for the data browser for now # A bit messy, referring to the current tables, should do for the data browser for now
belongs_to :member, :polymorphic => true belongs_to :member, :polymorphic => true

View file

@ -9,14 +9,13 @@
# #
# Foreign Keys # Foreign Keys
# #
# relation_tags_id_fkey (relation_id => relations.relation_id) # relation_tags_id_fkey (["relation_id", "version"] => relations.["relation_id", "version"])
# #
class OldRelationTag < ApplicationRecord class OldRelationTag < ApplicationRecord
self.table_name = "relation_tags" self.table_name = "relation_tags"
self.primary_keys = "relation_id", "version", "k"
belongs_to :old_relation, :foreign_key => [:relation_id, :version], :inverse_of => :old_tags belongs_to :old_relation, :query_constraints => [:relation_id, :version], :inverse_of => :old_tags
validates :old_relation, :associated => true validates :old_relation, :associated => true
validates :k, :v, :allow_blank => true, :length => { :maximum => 255 }, :characters => true validates :k, :v, :allow_blank => true, :length => { :maximum => 255 }, :characters => true

View file

@ -24,7 +24,6 @@ class OldWay < ApplicationRecord
include ConsistencyValidations include ConsistencyValidations
self.table_name = "ways" self.table_name = "ways"
self.primary_keys = "way_id", "version"
# NOTE: this needs to be included after the table name changes, or # NOTE: this needs to be included after the table name changes, or
# the queries generated by Redactable will use the wrong table name. # the queries generated by Redactable will use the wrong table name.
@ -34,8 +33,8 @@ class OldWay < ApplicationRecord
belongs_to :redaction, :optional => true belongs_to :redaction, :optional => true
belongs_to :current_way, :class_name => "Way", :foreign_key => "way_id", :inverse_of => :old_ways belongs_to :current_way, :class_name => "Way", :foreign_key => "way_id", :inverse_of => :old_ways
has_many :old_nodes, :class_name => "OldWayNode", :foreign_key => [:way_id, :version], :inverse_of => :old_way has_many :old_nodes, :class_name => "OldWayNode", :query_constraints => [:way_id, :version], :inverse_of => :old_way
has_many :old_tags, :class_name => "OldWayTag", :foreign_key => [:way_id, :version], :inverse_of => :old_way has_many :old_tags, :class_name => "OldWayTag", :query_constraints => [:way_id, :version], :inverse_of => :old_way
validates :changeset, :associated => true validates :changeset, :associated => true
validates :timestamp, :presence => true validates :timestamp, :presence => true

View file

@ -13,14 +13,13 @@
# #
# Foreign Keys # Foreign Keys
# #
# way_nodes_id_fkey (way_id => ways.way_id) # way_nodes_id_fkey (["way_id", "version"] => ways.["way_id", "version"])
# #
class OldWayNode < ApplicationRecord class OldWayNode < ApplicationRecord
self.table_name = "way_nodes" self.table_name = "way_nodes"
self.primary_keys = "way_id", "version", "sequence_id"
belongs_to :old_way, :foreign_key => [:way_id, :version], :inverse_of => :old_nodes belongs_to :old_way, :query_constraints => [:way_id, :version], :inverse_of => :old_nodes
# A bit messy, referring to current nodes and ways, should do for the data browser for now # A bit messy, referring to current nodes and ways, should do for the data browser for now
belongs_to :node belongs_to :node
belongs_to :way belongs_to :way

View file

@ -9,14 +9,13 @@
# #
# Foreign Keys # Foreign Keys
# #
# way_tags_id_fkey (way_id => ways.way_id) # way_tags_id_fkey (["way_id", "version"] => ways.["way_id", "version"])
# #
class OldWayTag < ApplicationRecord class OldWayTag < ApplicationRecord
self.table_name = "way_tags" self.table_name = "way_tags"
self.primary_keys = "way_id", "version", "k"
belongs_to :old_way, :foreign_key => [:way_id, :version], :inverse_of => :old_tags belongs_to :old_way, :query_constraints => [:way_id, :version], :inverse_of => :old_tags
validates :old_way, :associated => true validates :old_way, :associated => true
validates :k, :v, :allow_blank => true, :length => { :maximum => 255 }, :characters => true validates :k, :v, :allow_blank => true, :length => { :maximum => 255 }, :characters => true

View file

@ -19,7 +19,7 @@
class RelationMember < ApplicationRecord class RelationMember < ApplicationRecord
self.table_name = "current_relation_members" self.table_name = "current_relation_members"
self.primary_keys = "relation_id", "sequence_id" self.primary_key = %w[relation_id sequence_id]
belongs_to :relation belongs_to :relation
belongs_to :member, :polymorphic => true belongs_to :member, :polymorphic => true

View file

@ -13,7 +13,6 @@
class RelationTag < ApplicationRecord class RelationTag < ApplicationRecord
self.table_name = "current_relation_tags" self.table_name = "current_relation_tags"
self.primary_keys = "relation_id", "k"
belongs_to :relation belongs_to :relation

View file

@ -12,8 +12,6 @@
# #
class UserPreference < ApplicationRecord class UserPreference < ApplicationRecord
self.primary_keys = "user_id", "k"
belongs_to :user belongs_to :user
validates :user, :associated => true validates :user, :associated => true

View file

@ -18,7 +18,6 @@
class WayNode < ApplicationRecord class WayNode < ApplicationRecord
self.table_name = "current_way_nodes" self.table_name = "current_way_nodes"
self.primary_keys = "way_id", "sequence_id"
belongs_to :way belongs_to :way
belongs_to :node belongs_to :node

View file

@ -13,7 +13,6 @@
class WayTag < ApplicationRecord class WayTag < ApplicationRecord
self.table_name = "current_way_tags" self.table_name = "current_way_tags"
self.primary_keys = "way_id", "k"
belongs_to :way belongs_to :way

View file

@ -5,7 +5,7 @@ require "fileutils"
APP_ROOT = File.expand_path("..", __dir__) APP_ROOT = File.expand_path("..", __dir__)
def system!(*args) def system!(*args)
system(*args) || abort("\n== Command #{args} failed ==") system(*args, :exception => true)
end end
FileUtils.chdir APP_ROOT do FileUtils.chdir APP_ROOT do

View file

@ -11,13 +11,18 @@ module OpenStreetMap
# Initialize configuration defaults for originally generated Rails version. # Initialize configuration defaults for originally generated Rails version.
config.load_defaults 7.0 config.load_defaults 7.0
# Settings in config/environments/* take precedence over those specified here. # Please, add to the `ignore` list any other `lib` subdirectories that do
# Application configuration can go into files in config/initializers # not contain `.rb` files, or that should not be reloaded or eager loaded.
# -- all .rb files in that directory are automatically loaded after loading # Common ones are `templates`, `generators`, or `middleware`, for example.
# the framework and any gems in your application. config.autoload_lib(:ignore => %w[assets classic_pagination tasks])
# Custom directories with classes and modules you want to be autoloadable. # Configuration for the application, engines, and railties goes here.
config.autoload_paths += %W[#{config.root}/lib] #
# 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")
# Use SQL instead of Active Record's schema dumper when creating the database. # Use SQL instead of Active Record's schema dumper when creating the database.
# This is necessary if your schema can't be completely dumped by the schema dumper, # This is necessary if your schema can't be completely dumped by the schema dumper,

View file

@ -6,7 +6,7 @@ Rails.application.configure do
# In the development environment your application's code is reloaded any time # In the development environment your application's code is reloaded any time
# it changes. This slows down response time but is perfect for development # 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. # 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. # Do not eager load code on boot.
config.eager_load = false config.eager_load = false
@ -56,6 +56,9 @@ Rails.application.configure do
# Highlight code that triggered database queries in logs. # Highlight code that triggered database queries in logs.
config.active_record.verbose_query_logs = true unless Settings.status == "database_offline" config.active_record.verbose_query_logs = true unless Settings.status == "database_offline"
# Highlight code that enqueued background job in logs.
config.active_job.verbose_enqueue_logs = true
# Debug mode disables concatenation and preprocessing of assets. # Debug mode disables concatenation and preprocessing of assets.
# This option may cause significant delays in view rendering with a large # This option may cause significant delays in view rendering with a large
# number of complex assets. # number of complex assets.
@ -76,6 +79,9 @@ Rails.application.configure do
# Uncomment if you wish to allow Action Cable access from any origin. # Uncomment if you wish to allow Action Cable access from any origin.
# config.action_cable.disable_request_forgery_protection = true # 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
# Disable host validation. # Disable host validation.
config.hosts = [] config.hosts = []
end end

View file

@ -4,7 +4,7 @@ Rails.application.configure do
# Settings specified here will take precedence over those in config/application.rb. # Settings specified here will take precedence over those in config/application.rb.
# Code is not reloaded between requests. # 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 # Eager load code on boot. This eager loads most of Rails and
# your application in memory, allowing both threaded web servers # your application in memory, allowing both threaded web servers
@ -16,13 +16,12 @@ Rails.application.configure do
config.consider_all_requests_local = false config.consider_all_requests_local = false
config.action_controller.perform_caching = true config.action_controller.perform_caching = true
# Ensures that a master key has been made available in either ENV["RAILS_MASTER_KEY"] # Ensures that a master key has been made available in ENV["RAILS_MASTER_KEY"], config/master.key, or an environment
# or in config/master.key. This key is used to decrypt credentials (and other encrypted files). # key such as config/credentials/production.key. This key is used to decrypt credentials (and other encrypted files).
# config.require_master_key = true # config.require_master_key = true
# Disable serving static files from the `/public` folder by default since # Enable static file serving from the `/public` folder (turn off if using NGINX/Apache for it).
# Apache or NGINX already handles this. config.public_file_server.enabled = true
config.public_file_server.enabled = ENV["RAILS_SERVE_STATIC_FILES"].present?
# Compress JavaScripts and CSS. # Compress JavaScripts and CSS.
config.assets.js_compressor = Terser.new config.assets.js_compressor = Terser.new
@ -46,16 +45,26 @@ Rails.application.configure do
# config.action_cable.url = "wss://example.com/cable" # config.action_cable.url = "wss://example.com/cable"
# config.action_cable.allowed_request_origins = [ "http://example.com", /http:\/\/example.*/ ] # 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. # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies.
# config.force_ssl = true # config.force_ssl = true
# Include generic and useful information about system operation, but avoid logging too much # Log to STDOUT by default
# information to avoid inadvertent exposure of personally identifiable information (PII). # config.logger = ActiveSupport::Logger.new($stdout)
config.log_level = :info # .tap { |logger| logger.formatter = Logger::Formatter.new }
# .then { |logger| ActiveSupport::TaggedLogging.new(logger) }
# Prepend all log lines with the following tags. # Prepend all log lines with the following tags.
config.log_tags = [:request_id] config.log_tags = [:request_id]
# 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 log path in production. # Use a different log path in production.
config.paths["log"] = Settings.log_path if Settings.key?(:log_path) config.paths["log"] = Settings.log_path if Settings.key?(:log_path)
@ -82,24 +91,16 @@ Rails.application.configure do
# Don't log any deprecations. # Don't log any deprecations.
config.active_support.report_deprecations = false config.active_support.report_deprecations = false
# Use default logging formatter so that PID and timestamp are not suppressed.
config.log_formatter = Logger::Formatter.new
# Use a different logger for distributed setups.
# require "syslog/logger"
# config.logger = ActiveSupport::TaggedLogging.new(Syslog::Logger.new "app-name")
if ENV["RAILS_LOG_TO_STDOUT"].present?
logger = ActiveSupport::Logger.new($stdout)
logger.formatter = config.log_formatter
config.logger = ActiveSupport::TaggedLogging.new(logger)
end
# Do not dump schema after migrations. # Do not dump schema after migrations.
config.active_record.dump_schema_after_migration = false unless Settings.status == "database_offline" config.active_record.dump_schema_after_migration = false unless Settings.status == "database_offline"
# Enable autoloading of dependencies. # Enable DNS rebinding protection and other `Host` header attacks.
config.enable_dependency_loading = true # 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" } }
# Use delayed job to queue jobs in production. # Use delayed job to queue jobs in production.
config.active_job.queue_adapter = :delayed_job config.active_job.queue_adapter = :delayed_job

View file

@ -8,12 +8,13 @@ require "active_support/core_ext/integer/time"
Rails.application.configure do Rails.application.configure do
# Settings specified here will take precedence over those in config/application.rb. # Settings specified here will take precedence over those in config/application.rb.
# Turn false under Spring and add config.action_view.cache_template_loading = true # While tests run files are not watched, reloading is not necessary.
config.cache_classes = true config.enable_reloading = false
# Eager loading loads your whole application. When running a single test locally, # Eager loading loads your entire application. When running a single test locally,
# this probably isn't necessary. It's a good idea to do in a continuous integration # this is usually not necessary, and can slow down your test suite. However, it's
# system, or in some way before deploying your code. # 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? config.eager_load = ENV["CI"].present?
# Configure public file server for tests with Cache-Control for performance. # Configure public file server for tests with Cache-Control for performance.
@ -28,7 +29,7 @@ Rails.application.configure do
config.cache_store = :null_store config.cache_store = :null_store
# Raise exceptions instead of rendering exception templates. # Raise exceptions instead of rendering exception templates.
config.action_dispatch.show_exceptions = false config.action_dispatch.show_exceptions = :rescuable
# Disable request forgery protection in test environment. # Disable request forgery protection in test environment.
config.action_controller.allow_forgery_protection = false config.action_controller.allow_forgery_protection = false
@ -61,6 +62,9 @@ Rails.application.configure do
# Annotate rendered view with file names. # Annotate rendered view with file names.
# config.action_view.annotate_rendered_view_with_filenames = true # 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
# Use the test adapter for ActiveJob during testing. # Use the test adapter for ActiveJob during testing.
config.active_job.queue_adapter = :test config.active_job.queue_adapter = :test
end end

View file

@ -1,8 +1,8 @@
# Be sure to restart your server when you modify this file. # Be sure to restart your server when you modify this file.
# Define an application-wide content security policy # Define an application-wide content security policy.
# For further information see the following documentation # See the Securing Rails Applications Guide for more information:
# https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy # https://guides.rubyonrails.org/security.html#content-security-policy-header
# Rails.application.configure do # Rails.application.configure do
# config.content_security_policy do |policy| # config.content_security_policy do |policy|
@ -16,11 +16,10 @@
# # policy.report_uri "/csp-violation-report-endpoint" # # policy.report_uri "/csp-violation-report-endpoint"
# end # end
# #
# # Generate session nonces for permitted importmap and inline scripts # # 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_generator = ->(request) { request.session.id.to_s }
# config.content_security_policy_nonce_directives = %w(script-src) # config.content_security_policy_nonce_directives = %w(script-src style-src)
# #
# # Report CSP violations to a specified URI. See: # # Report violations without enforcing the policy.
# # https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy-Report-Only
# # config.content_security_policy_report_only = true # # config.content_security_policy_report_only = true
# end # end

View file

@ -1,6 +1,8 @@
# Be sure to restart your server when you modify this file. # Be sure to restart your server when you modify this file.
# Configure sensitive parameters which will be filtered from the log 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 += [ Rails.application.config.filter_parameters += [
:password, :pass_crypt, :pass_crypt_confirmation :password, :pass_crypt, :pass_crypt_confirmation
] ]

View file

@ -0,0 +1,223 @@
# Be sure to restart your server when you modify this file.
#
# This file eases your Rails 7.1 framework defaults upgrade.
#
# Uncomment each configuration one by one to switch to the new default.
# Once your application is ready to run with all new defaults, you can remove
# this file and set the `config.load_defaults` to `7.1`.
#
# Read the Guide for Upgrading Ruby on Rails for more info on each option.
# https://guides.rubyonrails.org/upgrading_ruby_on_rails.html
# No longer add autoloaded paths into `$LOAD_PATH`. This means that you won't be able
# to manually require files that are managed by the autoloader, which you shouldn't do anyway.
# This will reduce the size of the load path, making `require` faster if you don't use bootsnap, or reduce the size
# of the bootsnap cache if you use it.
# Rails.application.config.add_autoload_paths_to_load_path = false
# Remove the default X-Download-Options headers since it is used only by Internet Explorer.
# If you need to support Internet Explorer, add back `"X-Download-Options" => "noopen"`.
# Rails.application.config.action_dispatch.default_headers = {
# "X-Frame-Options" => "SAMEORIGIN",
# "X-XSS-Protection" => "0",
# "X-Content-Type-Options" => "nosniff",
# "X-Permitted-Cross-Domain-Policies" => "none",
# "Referrer-Policy" => "strict-origin-when-cross-origin"
# }
# Do not treat an `ActionController::Parameters` instance
# as equal to an equivalent `Hash` by default.
# Rails.application.config.action_controller.allow_deprecated_parameters_hash_equality = false
# Active Record Encryption now uses SHA-256 as its hash digest algorithm. Important: If you have
# data encrypted with previous Rails versions, there are two scenarios to consider:
#
# 1. If you have +config.active_support.key_generator_hash_digest_class+ configured as SHA1 (the default
# before Rails 7.0), you need to configure SHA-1 for Active Record Encryption too:
# Rails.application.config.active_record.encryption.hash_digest_class = OpenSSL::Digest::SHA1
# 2. If you have +config.active_support.key_generator_hash_digest_class+ configured as SHA256 (the new default
# in 7.0), then you need to configure SHA-256 for Active Record Encryption:
# Rails.application.config.active_record.encryption.hash_digest_class = OpenSSL::Digest::SHA256
#
# If you don't currently have data encrypted with Active Record encryption, you can disable this setting to
# configure the default behavior starting 7.1+:
# Rails.application.config.active_record.encryption.support_sha1_for_non_deterministic_encryption = false
# No longer run after_commit callbacks on the first of multiple Active Record
# instances to save changes to the same database row within a transaction.
# Instead, run these callbacks on the instance most likely to have internal
# state which matches what was committed to the database, typically the last
# instance to save.
# Rails.application.config.active_record.run_commit_callbacks_on_first_saved_instances_in_transaction = false
# Configures SQLite with a strict strings mode, which disables double-quoted string literals.
#
# SQLite has some quirks around double-quoted string literals.
# It first tries to consider double-quoted strings as identifier names, but if they don't exist
# it then considers them as string literals. Because of this, typos can silently go unnoticed.
# For example, it is possible to create an index for a non existing column.
# See https://www.sqlite.org/quirks.html#double_quoted_string_literals_are_accepted for more details.
# Rails.application.config.active_record.sqlite3_adapter_strict_strings_by_default = true
# Disable deprecated singular associations names
# Rails.application.config.active_record.allow_deprecated_singular_associations_name = false
# Enable the Active Job `BigDecimal` argument serializer, which guarantees
# roundtripping. Without this serializer, some queue adapters may serialize
# `BigDecimal` arguments as simple (non-roundtrippable) strings.
#
# When deploying an application with multiple replicas, old (pre-Rails 7.1)
# replicas will not be able to deserialize `BigDecimal` arguments from this
# serializer. Therefore, this setting should only be enabled after all replicas
# have been successfully upgraded to Rails 7.1.
# Rails.application.config.active_job.use_big_decimal_serializer = true
# Specify if an `ArgumentError` should be raised if `Rails.cache` `fetch` or
# `write` are given an invalid `expires_at` or `expires_in` time.
# Options are `true`, and `false`. If `false`, the exception will be reported
# as `handled` and logged instead.
# Rails.application.config.active_support.raise_on_invalid_cache_expiration_time = true
# Specify whether Query Logs will format tags using the SQLCommenter format
# (https://open-telemetry.github.io/opentelemetry-sqlcommenter/), or using the legacy format.
# Options are `:legacy` and `:sqlcommenter`.
# Rails.application.config.active_record.query_log_tags_format = :sqlcommenter
# Specify the default serializer used by `MessageEncryptor` and `MessageVerifier`
# instances.
#
# The legacy default is `:marshal`, which is a potential vector for
# deserialization attacks in cases where a message signing secret has been
# leaked.
#
# In Rails 7.1, the new default is `:json_allow_marshal` which serializes and
# deserializes with `ActiveSupport::JSON`, but can fall back to deserializing
# with `Marshal` so that legacy messages can still be read.
#
# In Rails 7.2, the default will become `:json` which serializes and
# deserializes with `ActiveSupport::JSON` only.
#
# Alternatively, you can choose `:message_pack` or `:message_pack_allow_marshal`,
# which serialize with `ActiveSupport::MessagePack`. `ActiveSupport::MessagePack`
# can roundtrip some Ruby types that are not supported by JSON, and may provide
# improved performance, but it requires the `msgpack` gem.
#
# For more information, see
# https://guides.rubyonrails.org/v7.1/configuring.html#config-active-support-message-serializer
#
# If you are performing a rolling deploy of a Rails 7.1 upgrade, wherein servers
# that have not yet been upgraded must be able to read messages from upgraded
# servers, first deploy without changing the serializer, then set the serializer
# in a subsequent deploy.
# Rails.application.config.active_support.message_serializer = :json_allow_marshal
# Enable a performance optimization that serializes message data and metadata
# together. This changes the message format, so messages serialized this way
# cannot be read by older versions of Rails. However, messages that use the old
# format can still be read, regardless of whether this optimization is enabled.
#
# To perform a rolling deploy of a Rails 7.1 upgrade, wherein servers that have
# not yet been upgraded must be able to read messages from upgraded servers,
# leave this optimization off on the first deploy, then enable it on a
# subsequent deploy.
# Rails.application.config.active_support.use_message_serializer_for_metadata = true
# Set the maximum size for Rails log files.
#
# `config.load_defaults 7.1` does not set this value for environments other than
# development and test.
#
# if Rails.env.local?
# Rails.application.config.log_file_size = 100 * 1024 * 1024
# end
# Enable raising on assignment to attr_readonly attributes. The previous
# behavior would allow assignment but silently not persist changes to the
# database.
# Rails.application.config.active_record.raise_on_assign_to_attr_readonly = true
# Enable validating only parent-related columns for presence when the parent is mandatory.
# The previous behavior was to validate the presence of the parent record, which performed an extra query
# to get the parent every time the child record was updated, even when parent has not changed.
# Rails.application.config.active_record.belongs_to_required_validates_foreign_key = false
# Enable precompilation of `config.filter_parameters`. Precompilation can
# improve filtering performance, depending on the quantity and types of filters.
# Rails.application.config.precompile_filter_parameters = true
# Enable before_committed! callbacks on all enrolled records in a transaction.
# The previous behavior was to only run the callbacks on the first copy of a record
# if there were multiple copies of the same record enrolled in the transaction.
# Rails.application.config.active_record.before_committed_on_all_records = true
# Disable automatic column serialization into YAML.
# To keep the historic behavior, you can set it to `YAML`, however it is
# recommended to explicitly define the serialization method for each column
# rather than to rely on a global default.
# Rails.application.config.active_record.default_column_serializer = nil
# Enable a performance optimization that serializes Active Record models
# in a faster and more compact way.
#
# To perform a rolling deploy of a Rails 7.1 upgrade, wherein servers that have
# not yet been upgraded must be able to read caches from upgraded servers,
# leave this optimization off on the first deploy, then enable it on a
# subsequent deploy.
# Rails.application.config.active_record.marshalling_format_version = 7.1
# Run `after_commit` and `after_*_commit` callbacks in the order they are defined in a model.
# This matches the behaviour of all other callbacks.
# In previous versions of Rails, they ran in the inverse order.
# Rails.application.config.active_record.run_after_transaction_callbacks_in_order_defined = true
# Whether a `transaction` block is committed or rolled back when exited via `return`, `break` or `throw`.
#
# Rails.application.config.active_record.commit_transaction_on_non_local_return = true
# Controls when to generate a value for <tt>has_secure_token</tt> declarations.
#
# Rails.application.config.active_record.generate_secure_token_on = :initialize
# ** Please read carefully, this must be configured in config/application.rb **
# Change the format of the cache entry.
# Changing this default means that all new cache entries added to the cache
# will have a different format that is not supported by Rails 7.0
# applications.
# Only change this value after your application is fully deployed to Rails 7.1
# and you have no plans to rollback.
# When you're ready to change format, add this to `config/application.rb` (NOT
# this file):
# config.active_support.cache_format_version = 7.1
# Configure Action View to use HTML5 standards-compliant sanitizers when they are supported on your
# platform.
#
# `Rails::HTML::Sanitizer.best_supported_vendor` will cause Action View to use HTML5-compliant
# sanitizers if they are supported, else fall back to HTML4 sanitizers.
#
# In previous versions of Rails, Action View always used `Rails::HTML4::Sanitizer` as its vendor.
#
# Rails.application.config.action_view.sanitizer_vendor = Rails::HTML::Sanitizer.best_supported_vendor
# Configure Action Text to use an HTML5 standards-compliant sanitizer when it is supported on your
# platform.
#
# `Rails::HTML::Sanitizer.best_supported_vendor` will cause Action Text to use HTML5-compliant
# sanitizers if they are supported, else fall back to HTML4 sanitizers.
#
# In previous versions of Rails, Action Text always used `Rails::HTML4::Sanitizer` as its vendor.
#
# Rails.application.config.action_text.sanitizer_vendor = Rails::HTML::Sanitizer.best_supported_vendor
# Configure the log level used by the DebugExceptions middleware when logging
# uncaught exceptions during requests
# Rails.application.config.action_dispatch.debug_exception_log_level = :error
# Configure the test helpers in Action View, Action Dispatch, and rails-dom-testing to use HTML5
# parsers.
#
# Nokogiri::HTML5 isn't supported on JRuby, so JRuby applications must set this to :html4.
#
# In previous versions of Rails, these test helpers always used an HTML4 parser.
#
# Rails.application.config.dom_testing_default_html_version = :html5

View file

@ -1,11 +1,13 @@
# Be sure to restart your server when you modify this file.
# Define an application-wide HTTP permissions policy. For further # Define an application-wide HTTP permissions policy. For further
# information see https://developers.google.com/web/updates/2018/06/feature-policy # information see: https://developers.google.com/web/updates/2018/06/feature-policy
#
# Rails.application.config.permissions_policy do |f| # Rails.application.config.permissions_policy do |policy|
# f.camera :none # policy.camera :none
# f.gyroscope :none # policy.gyroscope :none
# f.microphone :none # policy.microphone :none
# f.usb :none # policy.usb :none
# f.fullscreen :self # policy.fullscreen :self
# f.payment :self, "https://secure.example.com" # policy.payment :self, "https://secure.example.com"
# end # end

View file

@ -3393,122 +3393,122 @@ ALTER TABLE ONLY public.ways
SET search_path TO "$user", public; SET search_path TO "$user", public;
INSERT INTO "schema_migrations" (version) VALUES INSERT INTO "schema_migrations" (version) VALUES
('1'), ('9'),
('10'),
('11'),
('12'),
('13'),
('14'),
('15'),
('16'),
('17'),
('18'),
('19'),
('2'),
('20'),
('20100513171259'),
('20100516124737'),
('20100910084426'),
('20101114011429'),
('20110322001319'),
('20110508145337'),
('20110521142405'),
('20110925112722'),
('20111116184519'),
('20111212183945'),
('20120123184321'),
('20120208122334'),
('20120208194454'),
('20120214210114'),
('20120219161649'),
('20120318201948'),
('20120328090602'),
('20120404205604'),
('20120808231205'),
('20121005195010'),
('20121012044047'),
('20121119165817'),
('20121202155309'),
('20121203124841'),
('20130328184137'),
('20131212124700'),
('20140115192822'),
('20140117185510'),
('20140210003018'),
('20140507110937'),
('20140519141742'),
('20150110152606'),
('20150111192335'),
('20150222101847'),
('20150818224516'),
('20160822153055'),
('20161002153425'),
('20161011010929'),
('20170222134109'),
('20180204153242'),
('20181020114000'),
('20181031113522'),
('20190518115041'),
('20190623093642'),
('20190702193519'),
('20190716173946'),
('20191120140058'),
('20201004105659'),
('20201006213836'),
('20201006220807'),
('20201214144017'),
('20210510083027'),
('20210510083028'),
('20210511104518'),
('20211216185316'),
('20220201183346'),
('20220223140543'),
('20230816135800'),
('20230825162137'),
('20230830115219'),
('20230830115220'),
('20231007141103'),
('21'),
('22'),
('23'),
('24'),
('25'),
('26'),
('27'),
('28'),
('29'),
('3'),
('30'),
('31'),
('32'),
('33'),
('34'),
('35'),
('36'),
('37'),
('38'),
('39'),
('4'),
('40'),
('41'),
('42'),
('43'),
('44'),
('45'),
('46'),
('47'),
('48'),
('49'),
('5'),
('50'),
('51'),
('52'),
('53'),
('54'),
('55'),
('56'),
('57'),
('6'),
('7'),
('8'), ('8'),
('9'); ('7'),
('6'),
('57'),
('56'),
('55'),
('54'),
('53'),
('52'),
('51'),
('50'),
('5'),
('49'),
('48'),
('47'),
('46'),
('45'),
('44'),
('43'),
('42'),
('41'),
('40'),
('4'),
('39'),
('38'),
('37'),
('36'),
('35'),
('34'),
('33'),
('32'),
('31'),
('30'),
('3'),
('29'),
('28'),
('27'),
('26'),
('25'),
('24'),
('23'),
('22'),
('21'),
('20231007141103'),
('20230830115220'),
('20230830115219'),
('20230825162137'),
('20230816135800'),
('20220223140543'),
('20220201183346'),
('20211216185316'),
('20210511104518'),
('20210510083028'),
('20210510083027'),
('20201214144017'),
('20201006220807'),
('20201006213836'),
('20201004105659'),
('20191120140058'),
('20190716173946'),
('20190702193519'),
('20190623093642'),
('20190518115041'),
('20181031113522'),
('20181020114000'),
('20180204153242'),
('20170222134109'),
('20161011010929'),
('20161002153425'),
('20160822153055'),
('20150818224516'),
('20150222101847'),
('20150111192335'),
('20150110152606'),
('20140519141742'),
('20140507110937'),
('20140210003018'),
('20140117185510'),
('20140115192822'),
('20131212124700'),
('20130328184137'),
('20121203124841'),
('20121202155309'),
('20121119165817'),
('20121012044047'),
('20121005195010'),
('20120808231205'),
('20120404205604'),
('20120328090602'),
('20120318201948'),
('20120219161649'),
('20120214210114'),
('20120208194454'),
('20120208122334'),
('20120123184321'),
('20111212183945'),
('20111116184519'),
('20110925112722'),
('20110521142405'),
('20110508145337'),
('20110322001319'),
('20101114011429'),
('20100910084426'),
('20100516124737'),
('20100513171259'),
('20'),
('2'),
('19'),
('18'),
('17'),
('16'),
('15'),
('14'),
('13'),
('12'),
('11'),
('10'),
('1');

View file

@ -15,7 +15,7 @@ module RichText
include ActionView::Helpers::TextHelper include ActionView::Helpers::TextHelper
include ActionView::Helpers::OutputSafetyHelper include ActionView::Helpers::OutputSafetyHelper
def sanitize(text) def sanitize(text, _options = {})
Sanitize.clean(text, Sanitize::Config::OSM).html_safe Sanitize.clean(text, Sanitize::Config::OSM).html_safe
end end
end end

View file

@ -19,7 +19,7 @@ apt-get upgrade -y
apt-get install -y ruby ruby-dev ruby-bundler \ apt-get install -y ruby ruby-dev ruby-bundler \
libxml2-dev libxslt1-dev nodejs npm \ libxml2-dev libxslt1-dev nodejs npm \
build-essential git-core \ build-essential git-core \
postgresql postgresql-contrib libpq-dev libvips-dev \ postgresql postgresql-contrib libpq-dev libvips-dev libyaml-dev \
libsasl2-dev libffi-dev libgd-dev libarchive-dev libbz2-dev libsasl2-dev libffi-dev libgd-dev libarchive-dev libbz2-dev
npm install --global yarn npm install --global yarn

View file

@ -134,12 +134,14 @@ module Api
def test_create_wrong_method def test_create_wrong_method
auth_header = basic_authorization_header create(:user).email, "test" auth_header = basic_authorization_header create(:user).email, "test"
assert_raise ActionController::RoutingError do
get changeset_create_path, :headers => auth_header get changeset_create_path, :headers => auth_header
end assert_response :not_found
assert_raise ActionController::RoutingError do assert_template "rescues/routing_error"
post changeset_create_path, :headers => auth_header
end post changeset_create_path, :headers => auth_header
assert_response :not_found
assert_template "rescues/routing_error"
end end
## ##
@ -361,13 +363,13 @@ module Api
auth_header = basic_authorization_header user.email, "test" auth_header = basic_authorization_header user.email, "test"
assert_raise ActionController::RoutingError do get changeset_close_path(changeset), :headers => auth_header
get changeset_close_path(changeset), :headers => auth_header assert_response :not_found
end assert_template "rescues/routing_error"
assert_raise ActionController::RoutingError do post changeset_close_path(changeset), :headers => auth_header
post changeset_close_path(changeset), :headers => auth_header assert_response :not_found
end assert_template "rescues/routing_error"
end end
## ##

View file

@ -138,7 +138,7 @@ module Api
xml = "<osm><node lat='#{lat}' lon='#{lon}' changeset='#{changeset.id}'><tag k='foo' v='#{'x' * 256}'/></node></osm>" xml = "<osm><node lat='#{lat}' lon='#{lon}' changeset='#{changeset.id}'><tag k='foo' v='#{'x' * 256}'/></node></osm>"
put node_create_path, :params => xml, :headers => auth_header put node_create_path, :params => xml, :headers => auth_header
assert_response :bad_request, "node upload did not return bad_request status" assert_response :bad_request, "node upload did not return bad_request status"
assert_equal ["NodeTag ", " v: is too long (maximum is 255 characters) (\"#{'x' * 256}\")"], @response.body.split(/[0-9]+,foo:/) assert_match(/ v: is too long \(maximum is 255 characters\) /, @response.body)
end end
def test_show def test_show

View file

@ -695,9 +695,9 @@ class DiaryEntriesControllerTest < ActionDispatch::IntegrationTest
assert_template :show assert_template :show
# Try a non-integer ID # Try a non-integer ID
assert_raise ActionController::RoutingError do get "/user/#{CGI.escape(user.display_name)}/diary/#{diary_entry.id})"
get "/user/#{CGI.escape(user.display_name)}/diary/#{diary_entry.id})" assert_response :not_found
end assert_template "rescues/routing_error"
# Try a deleted entry # Try a deleted entry
diary_entry_deleted = create(:diary_entry, :user => user, :visible => false) diary_entry_deleted = create(:diary_entry, :user => user, :visible => false)

View file

@ -15,19 +15,7 @@ class UserDiariesTest < ActionDispatch::IntegrationTest
# We can now login # We can now login
post "/login", :params => { "username" => user.email, "password" => "test", :referer => "/diary/new" } post "/login", :params => { "username" => user.email, "password" => "test", :referer => "/diary/new" }
assert_response :redirect assert_response :redirect
# Check that there is some payload alerting the user to the redirect
# and allowing them to get to the page they are being directed to
assert_select "html:root" do
assert_select "body" do
assert_select "a[href='http://www.example.com/diary/new']"
end
end
# Required due to a bug in the rails testing framework
# http://markmail.org/message/wnslvi5xv5moqg7g
@html_document = nil
follow_redirect! follow_redirect!
assert_response :success assert_response :success
assert_template "diary_entries/new" assert_template "diary_entries/new"