Frederik Ramm [Sun, 31 Jul 2016 21:32:27 +0000 (23:32 +0200)]
Reduce maximum changeset size to 10k changes
Ten thousand changes ought to be enough for any normal mapping activity.
Automatic edits and imports are controlled by scripts anyway so it doesn't
make a difference to them as they just have to adapt the limit.
The reason for my suggestion is that large changesets are becoming
increasingly difficult to handle due to frequent timeouts when trying
to load and process them.
The changeset size limit is returned by the API in the "capabilities" request
so client software that honours that information will automatically pick up
the new limit.
Solved the problem of <p> tags being given different padding or color by different clients, without having to copy-paste a string of CSS into every <p> tag in the templates.
The greeting includes the recipient's user name (as for the message notification mail), which should increase the recipient's trust that the message isn't spam. Greetings were reused from each language's respective locale flie.
The tests assumed that every part in the multipart emails that we send were either plain text or HTML. Now we have image attachments, against whose contents the tests were still trying to match regexes. The tests have been modified to only run regexes on the text parts of the mails.
Several notifications are about a message having been sent from one user to another via OSM. I've moved the code for the HTML table that holds the actual user message, with the avatar and the body text, to its own partial template, so that it can be reused. I've updated a second notifier message to the new template, diary_comment_notification.
Since all HTML mails will presumably share the same overall layout, and the markup is fairly dense, it makes sense to use Rails layouts to share the structure across mail templates. This commit moves the core structure of the HTML mail to a layout. It will need to be further refined so that notifications that involve a text message sent by another user can share the avatar-and-message-text structure.
Rather than including HTML markup in the locale file (which also has the inconvenience of requiring both a plain-text and an HTML duplicate of the same string), move the markup to the template. Also added a helper to reduce clutter in the template slightly.
Harry Wood [Tue, 3 Jan 2017 13:40:57 +0000 (13:40 +0000)]
ruby2.0->ruby 2.3
change dependancies. nokogiri requires a later ruby now as pointed out here: https://github.com/openstreetmap/openstreetmap-website/issues/1402 ruby2.0->ruby 2.3 ...which then entails a later ubuntu if we're installing from packages.
Make the file paths to image assets more compact. I investigated using `image_path` but could only get it to return the path for a public URL, which is different and also includes the asset pipeline digest.
Got rid of that big ugly base64 blob which was only a temporary crutch anyway. Added a png file instead. Use File.read rather than File.open for a 66% reduction in verbosity.
Removed some cargo-cult HTML attributes and CSS. Styling HTML for email clients is trickier than for browsers, I'm trying to keep the code as succinct but also as compatible as possible.
Tom Hughes [Fri, 2 Dec 2016 22:29:44 +0000 (22:29 +0000)]
Work around upcoming minitest insanity
Minitest 6 will not allow assert_equal to compare for equality
with nil and minitest 5 has already started warning about it.
That's fine if you're comparing with a nil constant, but if you're
comparing with an expression that is sometimes nil and sometimes
not nil it's an absolute pain in the rear end.
Tom Hughes [Fri, 2 Dec 2016 09:42:05 +0000 (09:42 +0000)]
Simplify monkey patch
The log method has grown new arguments which we weren't passing
on, but fortunately the exception translation is now delegated to
another method so we can patch that instead.
Matt Amos [Fri, 2 Dec 2016 09:31:45 +0000 (09:31 +0000)]
Make API and web roll back any open transactions on timeout
By default the exception thrown by Timeout::timeout is caught
using Kernel::catch so that it cannot be stopped by intermediate
exception handlers. The problem with that is that it stops any
database transactions that were in progress being rolled back
because they never see the exception.
Fortunately passing a class to Timeout::timeout changes it's
behaviour so that the exception is thrown and caught in the normal
way, allowing the database transactions to rollback.