Search

Ideas that are…

Search Ideas


3388 ideas match your query.:

Not as of #330, they couldn’t.

#331​·​Dennis HackethalOP, over 1 year ago​·​CriticismCriticized1Archived

Hiccdown methods should live in their own, separate classes. How about they are called ‘displays’?

ruby
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:

ruby
display = @display_module.new
view_context.instance_variables.each do |iv|
display.instance_variable_set(
iv,
view_context.instance_variable_get(iv)
)
end

Then:

ruby
class ProductsDisplay
def index vc, # …
vc.some_helper_method(@products)
end
end
#330​·​Dennis HackethalOP revised over 1 year ago​·​Original #313​·​Criticized2Archived

That’s way too verbose.

#329​·​Dennis HackethalOP, over 1 year ago​·​CriticismArchived

They are: vc.instance_variable_get(:@foo)

#328​·​Dennis HackethalOP, over 1 year ago​·​CriticismCriticized1Archived

Instance variables are not available inside the methods.

#327​·​Dennis HackethalOP, over 1 year ago​·​CriticismArchived

I’m trying this now. Having to prepend every invocation of a helper method with vc. is getting really old really fast.

#326​·​Dennis HackethalOP, over 1 year ago​·​CriticismArchived

Hiccdown methods should live in their own, separate modules. How about they are called ‘displays’?

ruby
module ProductsDisplay
def self.index vc, # …
vc.some_helper_method
end
end

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.

#325​·​Dennis HackethalOP revised over 1 year ago​·​Original #313​·​Criticized2Archived

Tested, it works. self does indeed point to the view_context in the helper. Verified by printing object_ids.

#323​·​Dennis HackethalOP revised over 1 year ago​·​Original #322​·​CriticismArchived

Tested, it works.

#322​·​Dennis HackethalOP, over 1 year ago​·​CriticismCriticized1Archived

Test this!

#321​·​Dennis HackethalOP, over 1 year ago​·​CriticismCriticized1Archived

Maybe ‘Display’. ProductsDisplay

#320​·​Dennis HackethalOP, over 1 year ago​·​Archived

I don’t like the term ‘renderer’ yet. It’s too loaded with meaning, what with Rails already having a render method in controllers and another render method in views…

#319​·​Dennis HackethalOP, over 1 year ago​·​CriticismArchived

Then how would you call index from a helper method?

#317​·​Dennis HackethalOP revised over 1 year ago​·​Original #314​·​CriticismCriticized1Archived

Hiccdown methods should live in their own, separate modules. How about they are called ‘renderers’?

ruby
module ProductsRenderer
def self.index vc, # …
vc.some_helper_method
end
end

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 renderer, since renderers have the benefit of having unambiguously resolvable method names.

#316​·​Dennis HackethalOP revised over 1 year ago​·​Original #313​·​Criticized1Archived

I don’t think that’s something people would do a lot, but they still easily could: ProductsRenderer.index(self)

#315​·​Dennis HackethalOP, over 1 year ago​·​CriticismArchived

Then how would you call this from a helper method?

#314​·​Dennis HackethalOP, over 1 year ago​·​CriticismCriticized2Archived

Hiccdown methods should live in their own, separate modules. How about they are called ‘renderers’?

ruby
module ProductsRenderer
def self.index vc, # …
vc.some_helper_method
end
end
#313​·​Dennis HackethalOP, over 1 year ago​·​Archived

That would be mixing class methods an instance methods in Rails helper modules, which typically only contain instance methods. Not idiomatic Rails usage.

#312​·​Dennis HackethalOP, over 1 year ago​·​CriticismArchived

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

ruby
@helper_module.instance_method(@action_name).bind_call(view_context)

I would do

ruby
@helper_module.send(@action_name, view_context)

And the parameter list of each Hiccdown method would start accordingly:

ruby
module ProductsHelper
def self.index vc #, …
vc.some_helper_method
end
def some_helper_method
# …
end
end
#310​·​Dennis HackethalOP revised over 1 year ago​·​Original #307​·​CriticismArchived

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

ruby
@helper_module.instance_method(@action_name).bind_call(view_context)

I would do

ruby
@helper_module.send(@action_name, view_context)

And the parameter list of each Hiccdown method would start accordingly:

ruby
module ProductsHelper
def self.index vc #, …
# …
end
end
#308​·​Dennis HackethalOP revised over 1 year ago​·​Original #307​·​CriticismCriticized1Archived

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.

#307​·​Dennis HackethalOP, over 1 year ago​·​CriticismCriticized1Archived

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.

#305​·​Dennis HackethalOP revised over 1 year ago​·​Original #304​·​CriticismCriticized1Archived

Does that mean they wouldn’t have the view_context? If so, calling helper methods from inside these class methods wouldn’t be possible.

#304​·​Dennis HackethalOP, over 1 year ago​·​CriticismCriticized1Archived

Hiccdown methods should live in Rails helpers as class methods. That way, the problem described in #302 is solved – methods can be referenced unambiguously:

ruby
ProductsHelper.index
StoresHelper.index
#303​·​Dennis HackethalOP, over 1 year ago​·​Criticized3Archived

Hiccdown methods should live in Rails helpers as instance methods.

#302​·​Dennis HackethalOP revised over 1 year ago​·​Original #300​·​Criticized2Archived