Hiccdown Development Notes
When an empty block is passed to render, it results in an empty tag '<>'
Some Reagent-like way to make things reactive using proc as first element? And then the server keeps track of which procs have been rendered, which items have changed, and re-renders that part of the template in a turbo stream?
Use frame layout for turbo frame requests? https://discuss.rubyonrails.org/t/the-right-way-to-override-render-method/84765/2
Redirects 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.
Is there a way to teach user-built helpers how to process Hiccdown? Or maybe intercepting capture already took care of this?
Hiccdown should have support for ids and class names in the tag symbol. Like Hiccup.
[:'div#my-id.my-class.another-class']# => <div id="my-id" class="my-class another-class"></div>
It should also allow mixing:
[:'div#my-id.my-class.another-class', {id: 'override', class: 'additive'}]# => <div id="override" class="my-class another-class additive"></div>
In other words, the id from the hash would override the id from the symbol, and the class from the hash would be added to the classes from the symbol.
Hiccdown methods should live in their own, separate classes. How about they are called ‘displays’?
class ProductsDisplaydef index vc, # …vc.some_helper_methodendend
Behind the scenes, the Hiccdown gem would need to make the instance variables available to the display class:
display = @display_module.newview_context.instance_variables.each do |iv|display.instance_variable_set(iv,view_context.instance_variable_get(iv))end
Then:
class ProductsDisplaydef index vc, # …vc.some_helper_method(@products)endend
Hiccdown methods should live in their own, separate classes. How about they are called ‘displays’?
class ProductsDisplaydef index vc, # …vc.some_helper_methodendend
Behind the scenes, the Hiccdown gem would need to make the instance variables available to the display class:
display = @display_module.newview_context.instance_variables.each do |iv|display.instance_variable_set(iv,view_context.instance_variable_get(iv))end
Then:
class ProductsDisplaydef index vc, # …vc.some_helper_method(@products)endend
Hiccdown methods should live in Rails helpers as class methods. That way, the problem described in #302 is solved – methods can be referenced unambiguously:
ProductsHelper.indexStoresHelper.index
Hiccdown methods should live in Rails helpers as class methods. That way, the problem described in #302 is solved – methods can be referenced unambiguously:
ProductsHelper.indexStoresHelper.index
Hiccdown methods should live in Rails helpers as instance methods.
Hiccdown methods should live in Rails helpers as instance methods.
It doesn’t really matter. This would be like calling a controller action from a helper method. Not something people do.
Accidentally marked as a criticism
I think the thing I’m really fighting here is Rails being object-oriented. Which I can’t do anything about.
Not sure the Rails team realizes how much OOP reduces the extensibility of Rails.
I think the thing I’m really fighting here is Rails being object-oriented. Which I can’t do anything about.
Not sure the Rails team realizes how much OOP reduces the extensibility of Rails.
#333·Dennis HackethalOP, over 1 year agoHaving explored three different ideas, I believe #302 – having regular helper methods to render Hiccdown structures – is the best.
The idea is not without its flaws, but having to qualify a method name by, say, calling it
idea_forminstead offormis still better than manually having to pass the view context around all the time and not being able to trivially access instance variables.So I’ll stick with #302 for now, which is the status quo already.
I think the thing I’m really fighting here is Rails being object-oriented. Which I can’t do anything about.
Not sure the Rails team realizes how much OOP reduces the extensibility of Rails.
Having explored three different ideas, I believe #302 – having regular helper methods to render Hiccdown structures – is the best.
The idea is not without its flaws, but having to qualify a method name by, say, calling it idea_form instead of form is still better than manually having to pass the view context around all the time and not being able to trivially access instance variables.
So I’ll stick with #302 for now, which is the status quo already.
#303·Dennis HackethalOP, over 1 year agoHiccdown methods should live in Rails helpers as class methods. That way, the problem described in #302 is solved – methods can be referenced unambiguously:
rubyProductsHelper.indexStoresHelper.index
#327 applies here, too: no access to instance variables inside helper class methods.
#315·Dennis HackethalOP, over 1 year agoI don’t think that’s something people would do a lot, but they still easily could:
ProductsRenderer.index(self)
Not as of #330, they couldn’t.
Hiccdown methods should live in their own, separate modules. How about they are called ‘displays’?
module ProductsDisplaydef self.index vc, # …vc.some_helper_methodendend
A benefit of this approach is that, when people start a new Rails app, they may end up putting whatever they’d otherwise put in a helper in a display, since displays have the benefit of having unambiguously resolvable method names.
Hiccdown methods should live in their own, separate classes. How about they are called ‘displays’?
class ProductsDisplaydef index vc, # …vc.some_helper_methodendend
Behind the scenes, the Hiccdown gem would need to make the instance variables available to the display class:
display = @display_module.newview_context.instance_variables.each do |iv|display.instance_variable_set(iv,view_context.instance_variable_get(iv))end
Then:
class ProductsDisplaydef index vc, # …vc.some_helper_method(@products)endend