Search

Ideas that are…

Search ideas


1644 ideas match your query.:

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.

#333·Dennis HackethalOP, about 1 year ago

#327 applies here, too: no access to instance variables inside helper class methods.

#332·Dennis HackethalOP, about 1 year ago·Criticism

Not as of #330, they couldn’t.

#331·Dennis HackethalOP, about 1 year ago·CriticismCriticized1oustanding criticism

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
#330·Dennis HackethalOP, about 1 year ago·Revision of #313·Criticized2oustanding criticisms

That’s way too verbose.

#329·Dennis HackethalOP, about 1 year ago·Criticism

They are: vc.instance_variable_get(:@foo)

#328·Dennis HackethalOP, about 1 year ago·CriticismCriticized1oustanding criticism

Instance variables are not available inside the methods.

#327·Dennis HackethalOP, about 1 year ago·Criticism

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, about 1 year ago·Criticism

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

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, about 1 year ago·Revision of #313·Criticized2oustanding criticisms

Superseded by #323. This comment was generated automatically.

#324·Dennis HackethalOP, about 1 year ago·Criticism

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

#323·Dennis HackethalOP, about 1 year ago·Revision of #322·Criticism

Tested, it works.

#322·Dennis HackethalOP, about 1 year ago·CriticismCriticized1oustanding criticism

Test this!

#321·Dennis HackethalOP, about 1 year ago·CriticismCriticized1oustanding criticism

Maybe ‘Display’. ProductsDisplay

#320·Dennis HackethalOP, about 1 year ago

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, about 1 year ago·Criticism

Superseded by #317. This comment was generated automatically.

#318·Dennis HackethalOP, about 1 year ago·Criticism

Then how would you call index from a helper method?

#317·Dennis HackethalOP, about 1 year ago·Revision of #314·CriticismCriticized1oustanding criticism

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

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, about 1 year ago·Revision of #313·Criticized1oustanding criticism

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

#315·Dennis HackethalOP, about 1 year ago·Criticism

Then how would you call this from a helper method?

#314·Dennis HackethalOP, about 1 year ago·CriticismCriticized2oustanding criticisms

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

module ProductsRenderer
  def self.index vc, # …
    vc.some_helper_method
  end
end
#313·Dennis HackethalOP, about 1 year ago

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, about 1 year ago·Criticism

Superseded by #310. This comment was generated automatically.

#311·Dennis HackethalOP, about 1 year ago·Criticism

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
#310·Dennis HackethalOP, about 1 year ago·Revision of #307·Criticism

Superseded by #308. This comment was generated automatically.

#309·Dennis HackethalOP, about 1 year ago·Criticism