Hiccdown Development Notes
Discussion started by Dennis Hackethal
Log in or sign up to participate in this discussion.
With an account, you can revise, criticize, and comment on ideas, and submit new ideas.Notes about developing the Ruby gem Hiccdown.
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.index
StoresHelper.index
Does that mean they wouldn’t have access to the view_context
? If so, calling helper methods from inside these class methods wouldn’t be possible.
If so, there might be a way to bind them to the view_context
. Or I could definitely pass the view_context
explicitly as the first parameter:
So instead of
@helper_module.instance_method(@action_name).bind_call(view_context)
I would do
@helper_module.send(@action_name, view_context)
And the parameter list of each Hiccdown method would start accordingly:
module ProductsHelper
def self.index vc #, …
vc.some_helper_method
end
def some_helper_method
# …
end
end
Hiccdown methods should live in their own, separate classes. How about they are called ‘displays’?
class ProductsDisplay
def index vc, # …
vc.some_helper_method
end
end
Behind the scenes, the Hiccdown gem would need to make the instance variables available to the display class:
display = @display_module.new
view_context.instance_variables.each do |iv|
display.instance_variable_set(
iv,
view_context.instance_variable_get(iv)
)
end
Then:
class ProductsDisplay
def index vc, # …
vc.some_helper_method(@products)
end
end
Then how would you call index
from a helper method?
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.