Skip to content
Trailblazer's file structure for Cells.
Ruby HTML
Branch: master
Clone or download

Latest commit

Fetching latest commit…
Cannot retrieve the latest commit at this time.

Files

Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
lib/trailblazer
test
.gitignore
.rubocop.yml
.rubocop_todo.yml
.travis.yml
CHANGES.md
Gemfile
LICENSE.txt
README.md
Rakefile
trailblazer-cells.gemspec

README.md

Trailblazer::Cells

Trailblazer's file layout for Cells.

View Prefixes

In Trailblazer, class structures such as the following are very common, let's say for a post concept, here are the class headers, and where the view directory gets resolved to.

module Post
  module Cell
    class New < Trailblazer::Cell         # => app/concepts/post/view
    class Show < Trailblazer::Cell        # => app/concepts/post/view
      class SideBar < Trailblazer::Cell   # => app/concepts/post/view

Automatic show

You don't have to define a show method, Trailblazer::Cell will have one that looks as follows.

class Trailblazer::Cell
  def show
    render
  end

View Name

When calling render, the view name is inferred from the class name.

module Post
  module Cell
    class New < Trailblazer::Cell         # => new.erb
    class Show < Trailblazer::Cell        # => show.erb
      class SideBar < Trailblazer::Cell   # => side_bar.erb

You can still override using render view: :name.

Layout

You can pass a layout cell into every Trailblazer::Cell which will render the layout.

Post::Cell::Show.new(post, layout: Gemgem::Cell::Layout).()

The :layout option has to refer to a cell class. When invoked, the layout cell will receive the content of the actual cell under :content, resulting in a call as follows.

Gemgem::Cell::Layout.new(post,
  content: Post::Cell::Show.new(post)
)

The layout cell's show view can sit in any directory, for example gemgem/view/layout.rb.

<html>
Yay, I'm the layout!

<%= content %>
</html>

It's up to you what you do with the :content option. Here's the Trailblazer way.

class Gemgem::Cell::Layout < Trailblazer::Cell
  self.view_paths = ["gemgem"]
  def content
    @options[:content]
  end
end

Cells with layout cells allow replacing a frameworks entire view stack, e.g. ActionView.

Namespaces

It works identical with namespaces.

View Paths

Some projects do not use the app/concept view path. This can be changed as follows.

Trailblazer::Cell.view_paths = ["concepts"]

Note that this will change for all cells, including bundled in gems. Introduce an Application::Cell if you don't like that.

Dependencies

This gem has only one dependency: cells. Note that it does not need trailblazer.

You can’t perform that action at this time.