Giter Club home page Giter Club logo

show_for's Introduction

ShowFor

ShowFor allows you to quickly show a model information with I18n features.

<%= show_for @user do |u| %>
  <%= u.attribute :name %>
  <%= u.attribute :nickname, :in => :profile %>
  <%= u.attribute :confirmed? %>
  <%= u.attribute :created_at, :format => :short %>
  <%= u.attribute :last_sign_in_at, :if_blank => "User did not access yet",
                  :wrapper_html => { :id => "sign_in_timestamp" } %>

  <% u.attribute :photo do %>
    <%= image_tag(@user.photo_url) %>
  <% end %>

  <%= u.association :company %>
  <%= u.association :tags, :to_sentence => true %>
<% end %>

Installation

Install the gem:

sudo gem install show_for

Run the generator:

rails generate show_for:install

And you are ready to go. Since this branch is aims Rails 3 support, if you want to use it with Rails 2.3 you should check this branch:

http://github.com/plataformatec/show_for/tree/v0.1

Usage

ShowFor allows you to quickly show a model information with I18n features.

<%= show_for @admin do |a| %>
  <%= a.attribute :name %>
  <%= a.attribute :confirmed? %>
  <%= a.attribute :created_at, :format => :short %>
  <%= a.attribute :last_sign_in_at, :if_blank => "Administrator did not access yet"
                  :wrapper_html => { :id => "sign_in_timestamp" } %>

  <% a.attribute :photo do %>
    <%= image_tag(@admin.photo_url) %>
  <% end %>
<% end %>

Will generate something like:

<div id="admin_1" class="show_for admin">
  <p class="wrapper admin_name">
    <strong class="label">Name</strong><br />
    José Valim
  </p>
  <p class="wrapper admin_confirmed">
    <strong class="label">Confirmed?</strong><br />
    Yes
  </p>
  <p class="wrapper admin_created_at">
    <strong class="label">Created at</strong><br />
    13/12/2009 - 19h17
  </p>
  <p id="sign_in_timestamp" class="wrapper admin_last_sign_in_at">
    <strong class="label">Last sign in at</strong><br />
    Administrator did not access yet
  </p>
  <p class="wrapper admin_photo">
    <strong class="label">Photo</strong><br />
    <img src="path/to/photo" />
  </p>
</div>

You also have the possibility to show a list of attributes, useful if you don’t need to change any configuration:

<%= show_for @admin do |a| %>
  <%= a.attributes :name, :confirmed?, :created_at %>
<% end %>

Value lookup

To show the proper value, before retrieving the attribute value, show_for first looks if a block without argument was given, otherwise checks if a :“human_#{attribute}” method is defined and, if not, only then retrieve the attribute.

Options

show_for handles a series of options. Those are:

  • :escape * - When the attribute should be escaped. True by default.

  • :format * - Sent to I18n.localize when the attribute is a date/time object.

  • :if_blank * - An object to be used if the value is blank. Not escaped as well.

Besides, all containers (:label, :content and :wrapper) can have their html options configured through the :label_html, :content_html and :wrapper_html options. Containers can have their tags configured on demand as well through :label_tag, :content_tag and :wrapper_tag options.

Label

show_for also exposes the label method. In case you want to use the default human_attribute_name lookup and the default wrapping:

a.label :name                     #=> <strong class="label">Name</strong>
a.label "Name", :id => "my_name"  #=> <strong class="label" id="my_name">Name</strong>

Optionally, if you want to wrap the inner part of the label with some text (e.g. adding a semicolon), you can do so by specifying a proc for ShowFor.label_proc that will be called with any label text. E.g.:

ShowFor.label_proc = lambda { |l| l + ":" }

When taking this route, you can also skip on a per label basis by passing the :wrap_label option with a value of false.

Associations

show_for also supports associations.

<%= show_for @artwork do |a| %>
  <%= a.association :artist %>
  <%= a.association :artist, :using => :name_with_title %>
  <%= a.attribute :name_with_title, :in => :artist %>

  <%= a.association :tags %>
  <%= a.association :tags, :to_sentence => true %>
  <% a.association :tags do
    @artwork.tags.map(&:name).to_sentence
  end %>

  <% a.association :fans, :collection_tag => :ol do |fan| %>
    <li><%= link_to fan.name, fan %></li>
  <% end %>
<% end %>

The first is a has_one or belongs_to association, which works like an attribute to show_for, except it will retrieve the artist association and try to find a proper method from ShowFor.association_methods to be used. You can pass the option :using to tell (and not guess) which method from the association to use.

:tags is a has_and_belongs_to_many association which will return a collection. show_for can handle collections by default by wrapping them in list (<ul> with each item wrapped by an <li>). However, it also allows you to give :to_sentence or :join it you want to render them inline.

You can also pass a block which expects an argument to association. In such cases, a wrapper for the collection is still created and the block just iterates over the collection objects.

Maintainers

Contributors

Bugs and Feedback

If you discover any bugs or want to drop a line, feel free to create an issue on GitHub.

github.com/plataformatec/show_for/issues

MIT License. Copyright 2010 Plataforma Tecnologia. blog.plataformatec.com.br

show_for's People

Contributors

adzap avatar carlosantoniodasilva avatar eugenebolshakov avatar grimen avatar jnicklas avatar josevalim avatar jque avatar reu avatar sutto avatar

Stargazers

 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.