Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
View components for Rails applications
Ruby

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
lib
spec
.coveralls.yml
.gitignore
.rspec
.travis.yml
Gemfile
Guardfile
MIT-LICENSE
README.md
Rakefile
active_component.gemspec

README.md

ActiveComponent

Gem Version Dependency Status Build Status Code Climate Coverage Status

A View-Component framework for Rails applications.

Usage

Add the gem to your gemfile

gem "active-component"

Or install it manually

$ gem install active-component

You will have accessible all the modules from the gem in your Rails application.

In order to create a new View-Component item in your application you can use a generator.

$ bundle exec rails generate component activity
      create  app/components/application_component.rb
      create  app/components/activity_component.rb
      create  app/templates/activity_component.mustache

You're going to be able to add methods to your component class and call them from the mustache template

class ActivityComponent < ActiveComponent::Base
  def name
    "Antonio"
  end

  def email
    "cavjzz@gmail.com"
  end

  def message
    "Has just signed up!"
  end
end

And in your template:

<li>
  <a href="mailto:{{ email }}">
    {{ name }}
  </a>
  <span>{{ message }}</span>
</li>

In your rails view

<%= render_component(:activity) %>

Features

Controller context from your component class

You can access the controller context from where the component is instanced

class ActivityComponent < ActiveComponent::Base
  def name
    controller.current_user.name
  end

  def message
    controller.activity.message
  end
end

Passing variables

You can pass variables in the object instance

class ActivityComponent < ActiveComponent::Base
  attr_accessor :name
end
<%= render_component(:activity, :name => current_user.name) %>

Collection Rendering

You can render component collections from the view or from another component

<%= render_component(:activity, :collection => activities, :as => :activity) %>

And pass local variables

<%= render_component(:activity, :collection => activities, :as => :activity, :locals => { :foo => "foo" }) %>

Where the :collection is an array of elements (database records, hashes, stings, etc), and the :as is the name of the instance attribute defined in your component class.

NOTICE In order to use the collection feature you have to define with attr_accessor the name of the attribute to be received by the component class.

Sinatra

You can add this gem to sinatra, with the following configuration in your app

require 'active_component'

class App < Sinatra::Base

  helpers ActiveComponent::Base

  get '/' do
    render_component(:activity)
  end

end

Future short term features

  • Dynamic instance variables, get rid of attr_accessor :foo
  • Support for more templating engines.
  • Dynamic attributes (get rid of attr accessible)

Inspired from Cells framework done by Apotonick.

This project rocks and uses MIT-LICENSE.

Something went wrong with that request. Please try again.