Activity Feed
#4330·Dennis HackethalOP, 8 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, 10 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, 8 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, 8 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, 10 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, 10 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, 8 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.
Understanding in the Age of AI:
https://libertythroughreason.com/understanding-in-the-age-of-ai/
#5265·Dennis Hackethal, 2 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?