Activity feed

  Dennis Hackethal revised idea #334 and unmarked it as a criticism.

Accidentally marked as a criticism

About 1 year ago · ‘Hiccdown Development Notes’
  Dennis Hackethal criticized idea #333.

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

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.

About 1 year ago · ‘Hiccdown Development Notes’
  Dennis Hackethal submitted idea #333.

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.

About 1 year ago · ‘Hiccdown Development Notes’
  Dennis Hackethal criticized idea #303.

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
#303 · Dennis HackethalOP, about 1 year ago

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

About 1 year ago · ‘Hiccdown Development Notes’
  Dennis Hackethal addressed criticism #315.

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

Not as of #330, they couldn’t.

About 1 year ago · ‘Hiccdown Development Notes’
  Dennis Hackethal revised idea #325.
Hiccdown methods should live in their own, separate modules.classes. How about they are called ‘displays’?↵
↵
```ruby↵
module‘displays’?↵
↵
```ruby↵
class ProductsDisplay
  def self.indexindex 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 haveend↵
end↵
```↵
↵
Behind the scenes, the Hiccdown gem would need to make the benefit of having unambiguously resolvable method names.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↵
```
About 1 year ago · ‘Hiccdown Development Notes’
  Dennis Hackethal addressed criticism #328.

They are: vc.instance_variable_get(:@foo)

#328 · Dennis HackethalOP, about 1 year ago

That’s way too verbose.

About 1 year ago · ‘Hiccdown Development Notes’
  Dennis Hackethal addressed criticism #327.

Instance variables are not available inside the methods.

#327 · Dennis HackethalOP, about 1 year ago

They are: vc.instance_variable_get(:@foo)

About 1 year ago · ‘Hiccdown Development Notes’
  Dennis Hackethal criticized idea #325.

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

Instance variables are not available inside the methods.

About 1 year ago · ‘Hiccdown Development Notes’
  Dennis Hackethal criticized idea #325.

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

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

About 1 year ago · ‘Hiccdown Development Notes’
  Dennis Hackethal revised idea #316.
Hiccdown methods should live in their own, separate modules. How about they are called ‘renderers’?↵
↵
```ruby↵
module ProductsRenderer↵
‘displays’?↵
↵
```ruby↵
module ProductsDisplay↵
  def self.index vc, # …
 5 unchanged lines collapsed
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,display, since renderersdisplays have the benefit of having unambiguously resolvable method names.
About 1 year ago · ‘Hiccdown Development Notes’
  Dennis Hackethal revised idea #322.
Tested, it works. `self` does indeed point to the `view_context` in the helper. Verified by printing `object_id`s.
About 1 year ago · ‘Hiccdown Development Notes’
  Dennis Hackethal addressed criticism #321.

Test this!

#321 · Dennis HackethalOP, about 1 year ago

Tested, it works.

About 1 year ago · ‘Hiccdown Development Notes’
  Dennis Hackethal addressed criticism #315.

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

Test this!

About 1 year ago · ‘Hiccdown Development Notes’
  Dennis Hackethal commented on criticism #319.

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

Maybe ‘Display’. ProductsDisplay

About 1 year ago · ‘Hiccdown Development Notes’
  Dennis Hackethal criticized idea #316.

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

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…

About 1 year ago · ‘Hiccdown Development Notes’
  Dennis Hackethal revised idea #314.
Then how would you call this`index` from a helper method?
About 1 year ago · ‘Hiccdown Development Notes’
  Dennis Hackethal revised idea #313.
 6 unchanged lines collapsed
end↵ end↵ ```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.
About 1 year ago · ‘Hiccdown Development Notes’
  Dennis Hackethal addressed criticism #314.

Then how would you call this from a helper method?

#314 · Dennis HackethalOP, about 1 year ago

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

About 1 year ago · ‘Hiccdown Development Notes’
  Dennis Hackethal criticized idea #313.

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

Then how would you call this from a helper method?

About 1 year ago · ‘Hiccdown Development Notes’
  Dennis Hackethal submitted idea #313.

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
About 1 year ago · ‘Hiccdown Development Notes’
  Dennis Hackethal criticized idea #303.

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
#303 · 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.

About 1 year ago · ‘Hiccdown Development Notes’
  Dennis Hackethal revised idea #308.
 19 unchanged lines collapsed
vc.some_helper_method↵ end↵ ↵ def some_helper_method↵ # …
 3 unchanged lines collapsed
About 1 year ago · ‘Hiccdown Development Notes’
  Dennis Hackethal revised idea #307.
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.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↵
```
About 1 year ago · ‘Hiccdown Development Notes’
  Dennis Hackethal addressed criticism #305.

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

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.

About 1 year ago · ‘Hiccdown Development Notes’