aboutsummaryrefslogblamecommitdiffstats
path: root/railties/doc/guides/creating_plugins/view_helper.txt
blob: b03a190e1ab59537bd8464480fc4e7c4eae6ff78 (plain) (tree)




























































                                                                          
== Create a `squawk_info_for` view helper ==

Creating a view helper is a 3-step process:

 * Add an appropriately named file to the 'lib' directory.
 * Require the file and hooks in 'init.rb'.
 * Write the tests.

First, create the test to define the functionality you want:

[source, ruby]
---------------------------------------------------------------
# File: vendor/plugins/yaffle/test/view_helpers_test.rb

require File.dirname(__FILE__) + '/test_helper.rb'
include YaffleViewHelper

class ViewHelpersTest < Test::Unit::TestCase
  def test_squawk_info_for_should_return_the_text_and_date
    time = Time.now
    hickwall = Hickwall.new
    hickwall.last_squawk = "Hello World"
    hickwall.last_squawked_at = time
    assert_equal "Hello World, #{time.to_s}", squawk_info_for(hickwall)
  end
end
---------------------------------------------------------------

Then add the following statements to init.rb:

[source, ruby]
---------------------------------------------------------------
# File: vendor/plugins/yaffle/init.rb

require "view_helpers"
ActionView::Base.send :include, YaffleViewHelper
---------------------------------------------------------------

Then add the view helpers file and

[source, ruby]
---------------------------------------------------------------
# File: vendor/plugins/yaffle/lib/view_helpers.rb

module YaffleViewHelper
  def squawk_info_for(yaffle)
    returning "" do |result|
      result << yaffle.read_attribute(yaffle.class.yaffle_text_field)
      result << ", "
      result << yaffle.read_attribute(yaffle.class.yaffle_date_field).to_s
    end
  end
end
---------------------------------------------------------------

You can also test this in script/console by using the `helper` method:

---------------------------------------------------------------
$ ./script/console
>> helper.squawk_info_for(@some_yaffle_instance)
---------------------------------------------------------------