Activity Feed
#4330·Dennis HackethalOP, 9 months agoRedirects result in two additional requests, the first of which is a turbo-stream request that renders nothing, thus (presumably) prompting the browser to make another request for the same resource.
Doesn't reproduce as of e71df95. In the app in test/dummy, a form whose action redirects takes one POST and one GET in a headless browser, which a system test now checks.
Probably, and they're fixed. Hiccdown used to force a layout (layout: true, then layout: !request.format.turbo_stream?), overriding the layout method turbo-rails relies on, and turbo-stream requests failed with "no default layout" (fef00cb). cf92f06, in version 1.5.2, stopped forcing a layout. As of c5ce76f and 4a087e4, to be released in version 1.6.0, tests check that frame requests keep Turbo's frame layout and that turbo streams get none, and the app in test/dummy shows it in a browser.
A helper method that calls another action's helper method by name can get another helper's. Rails mixes every helper into every view, so calling index from ItemsHelper#create runs whichever helper's index Rails included last, such as PagesHelper#index:
module ItemsHelperdef index[:ul, @items.map { |i| [:li, i.name] }]enddef createindex # PagesHelper#index, not ItemsHelper#indexendend
Action names like index, show and edit are in many helpers, and the Readme encourages helper methods calling one another.
#5845·Dennis HackethalOP, 22 days ago·AI-assistedOn Rails 8.1, Hiccdown's
capturehands keyword arguments to the block as key-value pairs rather than as keywords.capture(text: 'foo') { |text:| text }raisesArgumentError: missing keyword: :textinstead of returning'foo', and a block that takes them as a hash,{ |options| … }, gets[:text, 'foo']instead of{text: 'foo'}.Earlier versions of Rails pass keywords on to the block as a hash, which Hiccdown leaves alone.
Fixed as of 99b6280, to be released in version 1.6.0.
On Rails 8.1, Hiccdown's capture hands keyword arguments to the block as key-value pairs rather than as keywords. capture(text: 'foo') { |text:| text } raises ArgumentError: missing keyword: :text instead of returning 'foo', and a block that takes them as a hash, { |options| … }, gets [:text, 'foo'] instead of {text: 'foo'}.
Earlier versions of Rails pass keywords on to the block as a hash, which Hiccdown leaves alone.
#4329·Dennis HackethalOP, 9 months agoIs there a way to teach user-built helpers how to process Hiccdown? Or maybe intercepting
capturealready took care of this?
Mostly, intercepting capture already took care of it: helpers of your own that pass a block on to Rails' helpers, or return Hiccdown, worked. Hiccdown given to Rails' helpers as content didn't, as in content_tag(:div, yield), tag.div([:span, 'foo']) or link_to([:span, 'foo'], path). As of 134deb9, to be released in version 1.6.0, it does.
#4328·Dennis HackethalOP, 9 months agoCould the application layout live in ApplicationHelper#layout?
Yes. As of 4fd7a0e, to be released in version 1.6.0, the layout named X lives in XHelper#layout, just as it would in layouts/X.html.erb, so the application layout lives in ApplicationHelper#layout. yield and yield(:title) work as in an ERB layout, and layout files keep working for a gradual migration.
#5840·Dennis HackethalOP, 22 days ago·AI-assistedHiccdown finds an action's helper method through
params[:action]rather than the controller'saction_name. When a controller runs without the router, as inProductsController.action(:show).call(env),params[:action]is nil and rendering raisesNoMethodError: undefined method 'to_sym' for nilinstead of callingProductsHelper#show.
Fixed as of 31cf174, to be released in version 1.6.0.
#5839·Dennis HackethalOP, 22 days ago·AI-assistedCalling
renderwith options only, such asrender status: :not_foundorrender layout: 'admin', skips the action's helper method and looks for an ERB template instead. Without one, it raisesActionView::MissingTemplate:rubyclass ProductsController < ApplicationControllerdef showrender status: :not_found # MissingTemplate, though ProductsHelper#show existsendendNaming the action works around it:
render :show, status: :not_found.
Fixed as of 9c46c61, to be released in version 1.6.0.
Hiccdown finds an action's helper method through params[:action] rather than the controller's action_name. When a controller runs without the router, as in ProductsController.action(:show).call(env), params[:action] is nil and rendering raises NoMethodError: undefined method 'to_sym' for nil instead of calling ProductsHelper#show.
Calling render with options only, such as render status: :not_found or render layout: 'admin', skips the action's helper method and looks for an ERB template instead. Without one, it raises ActionView::MissingTemplate:
class ProductsController < ApplicationControllerdef showrender status: :not_found # MissingTemplate, though ProductsHelper#show existsendend
Naming the action works around it: render :show, status: :not_found.
#4333·Dennis HackethalOP, 9 months agoWhen an empty block is passed to render, it results in an empty tag '<>'
Fixed as of c36fa5c, version 1.5.2.
Dennis Hackethal updated discussion ‘How Does Veritula Work?’.
The ‘About’ section changed as follows:
New to Veritula? Start here to get oriented.
#3974·Dennis HackethalOP, 9 months agoUndo/redo stack should preserve cursor position.
Steps to reproduce:
- Start with empty textarea.
- Type '('.
- Cursor is now inside '(|)'.
- Hit undo.
- Hit redo.
- Cursor is now behind '()|' but should be inside like in step 3.
Fixed as of ed8868b, version 1.3.1.
#5265·Dennis Hackethal, 3 months agoThere’s no need to single out corroboration or verisimilitude as special kinds of criticism.
Preference formation using either can easily be reduced to the method of counting pending criticisms:
Idea A fails to survive two tests.
Idea B fails to survive only one of the two.
Idea C says: I have only A and B; I don’t have time to create another; although both are false, I have to act; so for now I prefer B since at least it passes a test A doesn’t.If idea C has no pending criticisms, then we should adopt it. (And thus ‘transitively’ adopt B.)
This works if the tests are identical. What happens if idea A passes test 1 but fails test 2, while idea B passes test 2 but fails test 1?
Improve copy
Rational Decision-Making
It is rational to adopt only those ideas which, as written, don’t have pending criticisms, and to reject ideas that do.
If an idea, as written, has no pending criticisms, it’s rational to adopt it and irrational to reject it. What reason could you have to reject it? If it has no pending criticisms, then either 1) no reasons to reject it (ie, criticisms) have been suggested or 2) all suggested reasons have been addressed already.
If an idea, as written, does have pending criticisms, it’s irrational to adopt it and rational to reject it – by reference to those criticisms. What reason could you have to ignore the pending criticisms and adopt it anyway? After all, the previous paragraph applies to pending criticisms.
See also:
Rational Decision-Making
It’s rational to adopt only those ideas which, as written, don’t have pending criticisms, and to reject ideas that do.
If an idea, as written, has no pending criticisms, it’s rational to adopt it and irrational to reject it. What reason could you have to reject it? If it has no pending criticisms, then either no reasons to reject it (ie, criticisms) have been suggested or all suggested reasons have been addressed already.
If an idea, as written, does have pending criticisms, it’s irrational to adopt it and rational to reject it – by reference to those criticisms. What reason could you have to ignore the pending criticisms and adopt it anyway? After all, the previous paragraph applies to pending criticisms, too.
See also:
