cells 3.3.10 → 3.4.0.beta1
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGES +0 -8
- data/Gemfile +4 -1
- data/README.rdoc +91 -107
- data/Rakefile +0 -4
- data/lib/cell.rb +5 -6
- data/lib/{cells/cell → cell}/active_helper.rb +1 -1
- data/lib/cell/base.rb +134 -0
- data/lib/cell/base_methods.rb +100 -0
- data/lib/cell/caching.rb +153 -0
- data/lib/cell/rails.rb +239 -0
- data/lib/cells.rb +25 -3
- data/lib/cells/assertions_helper.rb +1 -1
- data/lib/cells/helpers/capture_helper.rb +3 -3
- data/lib/cells/rails.rb +65 -4
- data/lib/cells/version.rb +3 -1
- data/rails_generators/cell/cell_generator.rb +47 -35
- data/rails_generators/cell/templates/cell.rb +1 -1
- data/rails_generators/cells_install/cells_install_generator.rb +5 -3
- data/rails_generators/erb/cell_generator.rb +20 -0
- data/rails_generators/{cell → erb}/templates/view.html.erb +0 -0
- data/test/active_helper_test.rb +1 -0
- data/test/app/cells/bad_guitarist_cell.rb +2 -0
- data/test/app/cells/bassist_cell.rb +1 -1
- data/test/app/controllers/musician_controller.rb +16 -0
- data/test/assertions_helper_test.rb +8 -18
- data/test/base_methods_test.rb +40 -0
- data/test/cell_generator_test.rb +33 -21
- data/test/helper_test.rb +31 -123
- data/test/rails/caching_test.rb +215 -0
- data/test/rails/capture_test.rb +52 -0
- data/test/rails/cells_test.rb +88 -0
- data/test/rails/integration_test.rb +37 -0
- data/test/rails/render_test.rb +140 -0
- data/test/rails/router_test.rb +74 -0
- data/test/rails/view_test.rb +24 -0
- data/test/test_helper.rb +30 -29
- metadata +68 -133
- data/.gitignore +0 -3
- data/about.yml +0 -7
- data/cells.gemspec +0 -26
- data/lib/cells/cell.rb +0 -16
- data/lib/cells/cell/base.rb +0 -470
- data/lib/cells/cell/caching.rb +0 -163
- data/lib/cells/cell/test_case.rb +0 -158
- data/lib/cells/cell/view.rb +0 -55
- data/lib/cells/rails/action_controller.rb +0 -37
- data/lib/cells/rails/action_view.rb +0 -37
- data/rails/init.rb +0 -44
- data/rails_generators/cells_install/templates/tasks.rake +0 -6
- data/test/app/cells/a/another_state.html.erb +0 -1
- data/test/app/cells/a/existing_view.html.erb +0 -1
- data/test/app/cells/a/inherited_view.html.erb +0 -1
- data/test/app/cells/a/inherited_view.js.erb +0 -1
- data/test/app/cells/a/view_with_locals.html.erb +0 -1
- data/test/app/cells/a/view_with_render_call.html.erb +0 -1
- data/test/app/cells/b/existing_view.html.erb +0 -1
- data/test/app/cells/b/existing_view.js.erb +0 -1
- data/test/app/cells/b/layouts/metal.html.erb +0 -1
- data/test/app/cells/b/view_with_render_call.html.erb +0 -1
- data/test/app/cells/bassist/jam.html.erb +0 -3
- data/test/app/cells/bassist/play.html.erb +0 -1
- data/test/app/cells/cells_test_one/renamed_instance_view.html.erb +0 -1
- data/test/app/cells/cells_test_one/super_state.html.erb +0 -1
- data/test/app/cells/cells_test_one_cell.rb +0 -20
- data/test/app/cells/cells_test_two_cell.rb +0 -4
- data/test/app/cells/helper_using/state_using_application_helper.html.erb +0 -3
- data/test/app/cells/helper_using/state_with_automatic_helper_invocation.html.erb +0 -3
- data/test/app/cells/helper_using/state_with_helper_invocation.html.erb +0 -3
- data/test/app/cells/helper_using/state_with_helper_method_invocation.html.erb +0 -3
- data/test/app/cells/layouts/metal.html.erb +0 -1
- data/test/app/cells/my_child/hello.html.erb +0 -1
- data/test/app/cells/my_mother/bye.html.erb +0 -1
- data/test/app/cells/my_mother/hello.html.erb +0 -1
- data/test/app/cells/my_test/_broken_partial.html.erb +0 -1
- data/test/app/cells/my_test/_partial.html.erb +0 -1
- data/test/app/cells/my_test/state_with_instance_var.html.erb +0 -1
- data/test/app/cells/my_test/state_with_link_to.html.erb +0 -3
- data/test/app/cells/my_test/state_with_not_included_helper_method.html.erb +0 -8
- data/test/app/cells/my_test/view_containing_broken_partial.html.erb +0 -3
- data/test/app/cells/my_test/view_containing_nonexistant_partial.html.erb +0 -3
- data/test/app/cells/my_test/view_containing_partial.html.erb +0 -3
- data/test/app/cells/my_test/view_containing_partial_without_cell_name.html.erb +0 -3
- data/test/app/cells/my_test/view_in_local_test_views_dir.html.erb +0 -1
- data/test/app/cells/my_test/view_with_explicit_english_translation.en.html.erb +0 -1
- data/test/app/cells/my_test/view_with_explicit_english_translation.html.erb +0 -1
- data/test/app/cells/my_test/view_with_instance_var.html.erb +0 -4
- data/test/app/cells/really_module/nested/happy_state.html.erb +0 -1
- data/test/app/cells/really_module/nested_cell.rb +0 -11
- data/test/app/cells/simple/two_templates_state.html.mytpl +0 -1
- data/test/app/cells/simple_cell.rb +0 -7
- data/test/app/cells/test/beep.html.erb +0 -1
- data/test/app/cells/test/state_invoking_capture.html.erb +0 -7
- data/test/app/cells/test/state_invoking_content_for.html.erb +0 -7
- data/test/app/cells/test/state_invoking_content_for_twice.html.erb +0 -9
- data/test/app/cells/test/state_with_not_included_helper_method.html.erb +0 -8
- data/test/app/cells/two_helpers_including/state_using_another_helper.html.erb +0 -3
- data/test/bugs_test.rb +0 -23
- data/test/caching_test.rb +0 -270
- data/test/capture_helper_test.rb +0 -59
- data/test/cells_test.rb +0 -352
- data/test/rails_test.rb +0 -35
- data/test/render_test.rb +0 -305
- data/test/test_case_test.rb +0 -106
data/lib/cells/rails.rb
CHANGED
@@ -1,11 +1,72 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
-
require 'cells/rails/action_controller'
|
3
|
-
require 'cells/rails/action_view'
|
4
2
|
|
5
|
-
|
6
|
-
|
3
|
+
# These Methods are automatically added to all Controllers and Views when
|
4
|
+
# the cells plugin is loaded.
|
5
|
+
module Cells
|
6
|
+
module Rails
|
7
|
+
module ActionController
|
8
|
+
# Equivalent to ActionController#render_to_string, except it renders a cell
|
9
|
+
# rather than a regular templates.
|
10
|
+
def render_cell(name, state, opts={})
|
11
|
+
::Cell::Base.render_cell_for(self, name, state, opts)
|
12
|
+
end
|
13
|
+
|
14
|
+
# Expires the cached cell state view, similar to ActionController::expire_fragment.
|
15
|
+
# Usually, this method is used in Sweepers.
|
16
|
+
# Beside the obvious first two args <tt>cell_name</tt> and <tt>state</tt> you can pass
|
17
|
+
# in additional cache key <tt>args</tt> and cache store specific <tt>opts</tt>.
|
18
|
+
#
|
19
|
+
# Example:
|
20
|
+
#
|
21
|
+
# class ListSweeper < ActionController::Caching::Sweeper
|
22
|
+
# observe List, Item
|
23
|
+
#
|
24
|
+
# def after_save(record)
|
25
|
+
# expire_cell_state :my_listing, :display_list
|
26
|
+
# end
|
27
|
+
#
|
28
|
+
# will expire the view for state <tt>:display_list</tt> in the cell <tt>MyListingCell</tt>.
|
29
|
+
def expire_cell_state(cell_name, state, args={}, opts=nil)
|
30
|
+
key = ::Cell::Base.cache_key_for(cell_name, state, args)
|
31
|
+
::Cell::Base.expire_cache_key(key, opts)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
|
36
|
+
module ActionView
|
37
|
+
# Call a cell state and return its rendered view.
|
38
|
+
#
|
39
|
+
# ERB example:
|
40
|
+
# <div id="login">
|
41
|
+
# <%= render_cell :user, :login_prompt, :message => "Please login" %>
|
42
|
+
# </div>
|
43
|
+
#
|
44
|
+
# If you have a <tt>UserCell</tt> cell in <tt>app/cells/user_cell.rb</tt>, which has a
|
45
|
+
# <tt>UserCell#login_prompt</tt> method, this will call that method and then will
|
46
|
+
# find the view <tt>app/cells/user/login_prompt.html.erb</tt> and render it. This is
|
47
|
+
# called the <tt>:login_prompt</tt> <em>state</em> in Cells terminology.
|
48
|
+
#
|
49
|
+
# If this view file looks like this:
|
50
|
+
# <h1><%= @opts[:message] %></h1>
|
51
|
+
# <label>name: <input name="user[name]" /></label>
|
52
|
+
# <label>password: <input name="user[password]" /></label>
|
53
|
+
#
|
54
|
+
# The resulting view in the controller will be roughly equivalent to:
|
55
|
+
# <div id="login">
|
56
|
+
# <h1><%= "Please login" %></h1>
|
57
|
+
# <label>name: <input name="user[name]" /></label>
|
58
|
+
# <label>password: <input name="user[password]" /></label>
|
59
|
+
# </div>
|
60
|
+
def render_cell(name, state, opts = {})
|
61
|
+
::Cell::Base.render_cell_for(controller, name, state, opts)
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
|
66
|
+
end
|
7
67
|
end
|
8
68
|
|
69
|
+
|
9
70
|
# Add extended ActionController behaviour.
|
10
71
|
ActionController::Base.class_eval do
|
11
72
|
include ::Cells::Rails::ActionController
|
data/lib/cells/version.rb
CHANGED
@@ -1,51 +1,63 @@
|
|
1
|
-
require 'rails_generator/generators/components/controller/controller_generator'
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
1
|
+
#require 'rails_generator/generators/components/controller/controller_generator'
|
2
|
+
require 'rails/generators/named_base'
|
3
|
+
module Cells
|
4
|
+
module Generators
|
5
|
+
class CellGenerator < ::Rails::Generators::NamedBase
|
6
|
+
argument :actions, :type => :array, :default => [], :banner => "action action"
|
7
|
+
check_class_collision :suffix => "Cell"
|
8
|
+
|
9
|
+
def create_cell_files
|
10
|
+
template 'cell.rb', File.join('app/cells', class_path, "#{file_name}_cell.rb")
|
10
11
|
end
|
11
12
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
hook_for :template_engine
|
14
|
+
hook_for :test_framework
|
15
|
+
|
16
|
+
source_root File.expand_path(File.join(File.dirname(__FILE__), 'templates'))
|
17
|
+
|
18
|
+
|
19
|
+
#attr_reader :template_type
|
20
|
+
|
21
|
+
#def initialize(runtime_args, runtime_options = {})
|
22
|
+
# super
|
23
|
+
# @template_type = options[:haml] ? :haml : :erb
|
24
|
+
#end
|
16
25
|
|
26
|
+
#def ___manifest
|
17
27
|
# Directories
|
18
|
-
m.directory File.join('app/cells', class_path)
|
19
|
-
m.directory File.join('app/cells', class_path, file_name)
|
20
|
-
m.directory File.join('test/cells')
|
28
|
+
#m.directory File.join('app/cells', class_path)
|
29
|
+
#m.directory File.join('app/cells', class_path, file_name)
|
30
|
+
#m.directory File.join('test/cells')
|
21
31
|
|
22
32
|
# Cell
|
23
|
-
m.template 'cell.rb', File.join('app/cells', class_path, "#{file_name}_cell.rb")
|
33
|
+
#m.template 'cell.rb', File.join('app/cells', class_path, "#{file_name}_cell.rb")
|
24
34
|
|
25
35
|
# View template for each action.
|
26
|
-
actions.each do |action|
|
27
|
-
|
28
|
-
|
29
|
-
end
|
36
|
+
#actions.each do |action|
|
37
|
+
# path = File.join('app/cells', class_path, file_name, "#{action}.html.#{template_type}")
|
38
|
+
# m.template "view.html.#{template_type}", path, :assigns => { :action => action, :path => path }
|
39
|
+
#end
|
30
40
|
|
31
41
|
# Functional test for the widget.
|
32
|
-
m.template 'cell_test.rb', File.join('test/cells/', "#{file_name}_cell_test.rb"), :assigns => {:states => actions}
|
33
|
-
end
|
34
|
-
end
|
42
|
+
#m.template 'cell_test.rb', File.join('test/cells/', "#{file_name}_cell_test.rb"), :assigns => {:states => actions}
|
43
|
+
#end
|
44
|
+
#end
|
35
45
|
|
36
|
-
def add_options!(opt)
|
37
|
-
|
38
|
-
|
46
|
+
#def add_options!(opt)
|
47
|
+
# opt.separator ''
|
48
|
+
# opt.separator 'Options:'#
|
39
49
|
|
40
50
|
# Allow option to generate HAML views instead of ERB.
|
41
|
-
opt.on('--haml',
|
42
|
-
"Generate HAML output instead of the default ERB.") do |v|
|
43
|
-
|
44
|
-
end
|
45
|
-
end
|
51
|
+
#opt.on('--haml',
|
52
|
+
#"Generate HAML output instead of the default ERB.") do |v|
|
53
|
+
# options[:haml] = v
|
54
|
+
#end
|
55
|
+
#end
|
46
56
|
|
47
|
-
def banner
|
48
|
-
|
49
|
-
end
|
57
|
+
#def banner
|
58
|
+
# "Usage: #{$0} cell NAME a_view another_view ... [--haml]"
|
59
|
+
#end
|
50
60
|
|
51
61
|
end
|
62
|
+
|
63
|
+
end;end
|
@@ -1,10 +1,12 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
1
3
|
class CellsInstallGenerator < Rails::Generator::Base
|
4
|
+
|
2
5
|
def manifest
|
3
6
|
record do |m|
|
4
7
|
m.directory File.join('config', 'initializers')
|
5
|
-
m.directory File.join('lib', 'tasks')
|
6
8
|
m.template 'initializer.rb', File.join('config', 'initializers', 'cells.rb')
|
7
|
-
m.template 'tasks.rake', File.join('lib', 'tasks', 'cells.rake')
|
8
9
|
end
|
9
10
|
end
|
10
|
-
|
11
|
+
|
12
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'rails/generators/erb'
|
2
|
+
|
3
|
+
module Erb
|
4
|
+
module Generators
|
5
|
+
class CellGenerator < Base
|
6
|
+
argument :actions, :type => :array, :default => [], :banner => "action action"
|
7
|
+
|
8
|
+
def copy_view_files
|
9
|
+
base_path = File.join("app/cells", class_path, file_name)
|
10
|
+
empty_directory base_path
|
11
|
+
puts base_path.inspect
|
12
|
+
actions.each do |action|
|
13
|
+
@action = action
|
14
|
+
@path = File.join(base_path, filename_with_extensions(action))
|
15
|
+
template filename_with_extensions(:view), @path
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
File without changes
|
data/test/active_helper_test.rb
CHANGED
@@ -0,0 +1,16 @@
|
|
1
|
+
class MusicianController < ActionController::Base
|
2
|
+
def promotion
|
3
|
+
render :text => render_cell(:bassist, :play)
|
4
|
+
end
|
5
|
+
|
6
|
+
def featured
|
7
|
+
self.view_paths << File.expand_path(File.join(File.dirname(__FILE__), '../views'))
|
8
|
+
end
|
9
|
+
|
10
|
+
def skills
|
11
|
+
render :text => render_cell(:bassist, :listen)
|
12
|
+
end
|
13
|
+
|
14
|
+
|
15
|
+
def action_method?(name); true; end ### FIXME: fixes NameError: undefined local variable or method `_router' for MusicianController:Class
|
16
|
+
end
|
@@ -4,40 +4,30 @@ require File.join(File.dirname(__FILE__), 'test_helper')
|
|
4
4
|
class AssertionsHelperTest < ActionController::TestCase
|
5
5
|
context "A TestCase" do
|
6
6
|
setup do
|
7
|
-
|
8
|
-
def
|
9
|
-
end
|
10
|
-
end
|
11
|
-
|
12
|
-
context "calling #cell_mock" do
|
13
|
-
should "return a cell instance" do
|
14
|
-
assert_kind_of Cell::Base, cell_mock
|
15
|
-
end
|
16
|
-
|
17
|
-
should "accept a block" do
|
18
|
-
assert_respond_to cell_mock { def beep; end}, :beep
|
7
|
+
BassistCell.class_eval do
|
8
|
+
def play; render; end
|
19
9
|
end
|
20
10
|
end
|
21
11
|
|
22
12
|
should "respond to #render_cell" do
|
23
|
-
assert_equal "
|
13
|
+
assert_equal "Doo", render_cell(:bassist, :play)
|
24
14
|
end
|
25
15
|
|
26
16
|
should "respond to #assert_selekt" do
|
27
|
-
assert_selekt
|
17
|
+
assert_selekt "<p>Doo</p>", "p", "Doo"
|
28
18
|
end
|
29
19
|
|
30
20
|
should "respond to #cell" do
|
31
|
-
assert_kind_of
|
32
|
-
assert_not cell(:
|
21
|
+
assert_kind_of BassistCell, cell(:bassist)
|
22
|
+
assert_not cell(:bassist).respond_to? :opts
|
33
23
|
end
|
34
24
|
|
35
25
|
should "respond to #cell with a block" do
|
36
|
-
assert_respond_to cell(:
|
26
|
+
assert_respond_to cell(:bassist) { def opts; @opts; end }, :opts
|
37
27
|
end
|
38
28
|
|
39
29
|
should "respond to #cell with options and block" do
|
40
|
-
assert_equal({:topic => :peace}, cell(:
|
30
|
+
assert_equal({:topic => :peace}, cell(:bassist, :topic => :peace) { def opts; @opts; end }.opts)
|
41
31
|
end
|
42
32
|
end
|
43
33
|
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), 'test_helper')
|
2
|
+
|
3
|
+
class BaseMethodsTest < ActiveSupport::TestCase
|
4
|
+
context "Cell::Base" do
|
5
|
+
|
6
|
+
should "provide AbstractBase.render_cell_for" do
|
7
|
+
assert_equal "Doo", Cell::Base.render_cell_for(@controller, :bassist, :play)
|
8
|
+
end
|
9
|
+
|
10
|
+
should "provide possible_paths_for_state" do
|
11
|
+
assert_equal ["bad_guitarist/play", "bassist/play", "cell/rails/play"], cell(:bad_guitarist).possible_paths_for_state(:play)
|
12
|
+
end
|
13
|
+
|
14
|
+
should "provide cell_name" do
|
15
|
+
assert_equal 'bassist', cell(:bassist).cell_name
|
16
|
+
assert_equal cell(:bassist).cell_name, BassistCell.cell_name
|
17
|
+
end
|
18
|
+
|
19
|
+
should "provide cell_name for modules, too" do
|
20
|
+
class SingerCell
|
21
|
+
include Cell::BaseMethods
|
22
|
+
end
|
23
|
+
|
24
|
+
assert_equal "base_methods_test/singer", BaseMethodsTest::SingerCell.cell_name
|
25
|
+
end
|
26
|
+
|
27
|
+
|
28
|
+
should "provide class_from_cell_name" do
|
29
|
+
assert_equal BassistCell, ::Cell::Base.class_from_cell_name('bassist')
|
30
|
+
end
|
31
|
+
|
32
|
+
should "provide AbstractBase.default_template_format" do
|
33
|
+
cell(:bassist).class.default_template_format = :js
|
34
|
+
|
35
|
+
assert_equal :html, ::Cell::Base.default_template_format
|
36
|
+
assert_equal :js, cell(:bassist).class.default_template_format
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
end
|
data/test/cell_generator_test.rb
CHANGED
@@ -1,33 +1,45 @@
|
|
1
1
|
require File.join(File.dirname(__FILE__), *%w[test_helper])
|
2
|
-
require 'rails_generator'
|
3
|
-
require 'rails_generator/scripts/generate'
|
4
2
|
|
5
|
-
#
|
6
|
-
Rails::Generator::Base.append_sources Rails::Generator::PathSource.new(:cells, File.join(File.dirname(__FILE__)+'/../rails_generators'))
|
3
|
+
#require 'rails/generators/test_unit'
|
7
4
|
|
8
|
-
|
5
|
+
|
6
|
+
require '/home/nick/projects/rails/railties/lib/rails/test/isolation/abstract_unit'
|
7
|
+
#require '/home/nick/projects/rails/railties/test/generators/generators_test_helper'
|
8
|
+
require 'rails/generators'
|
9
|
+
require 'rails_generators/cell/cell_generator'
|
10
|
+
module Rails
|
11
|
+
def self.root
|
12
|
+
@root ||= File.expand_path(File.join(File.dirname(__FILE__), '..', 'fixtures'))
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
|
17
|
+
class CellGeneratorTest < Rails::Generators::TestCase
|
18
|
+
destination File.join(Rails.root, "tmp")
|
19
|
+
setup :prepare_destination
|
20
|
+
tests ::Cells::Generators::CellGenerator
|
21
|
+
|
22
|
+
|
9
23
|
context "Running script/generate cell" do
|
10
|
-
setup do
|
11
|
-
FileUtils.mkdir_p(fake_rails_root)
|
12
|
-
@original_files = file_list
|
13
|
-
end
|
14
|
-
|
15
|
-
teardown do
|
16
|
-
FileUtils.rm_r(fake_rails_root)
|
17
|
-
end
|
18
|
-
|
19
24
|
context "Blog post latest" do
|
20
25
|
should "create the standard assets" do
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
26
|
+
|
27
|
+
require "#{app_path}/config/environment" # we need Rails.application
|
28
|
+
|
29
|
+
|
30
|
+
run_generator ["Blog", "post", "latest"]
|
31
|
+
|
32
|
+
assert_file "app/cells/blog_cell.rb", /class BlogCell < Cell::Rails/
|
33
|
+
assert_file "app/cells/blog/post.html.erb", %r(app/cells/blog/post\.html\.erb)
|
34
|
+
assert_file "app/cells/blog/latest.html.erb", %r(app/cells/blog/latest\.html\.erb)
|
35
|
+
|
36
|
+
#assert files.include?(fake_rails_root+"/app/cells/blog/post.html.erb")
|
37
|
+
#assert files.include?(fake_rails_root+"/app/cells/blog/latest.html.erb")
|
38
|
+
#assert files.include?(fake_rails_root+"/test/cells/blog_cell_test.rb")
|
27
39
|
end
|
28
40
|
|
29
41
|
should "create haml assets with --haml" do
|
30
|
-
|
42
|
+
run_generator ["Blog", "post", "latest", "--haml"]
|
31
43
|
files = (file_list - @original_files)
|
32
44
|
assert files.include?(fake_rails_root+"/app/cells/blog_cell.rb")
|
33
45
|
assert files.include?(fake_rails_root+"/app/cells/blog/post.html.haml")
|
data/test/helper_test.rb
CHANGED
@@ -1,138 +1,46 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
require File.join(File.dirname(__FILE__), 'test_helper')
|
3
3
|
|
4
|
-
module
|
5
|
-
def
|
6
|
-
'mysterious'
|
7
|
-
end
|
4
|
+
module StringHelper
|
5
|
+
def pick; "plong"; end
|
8
6
|
end
|
9
7
|
|
10
|
-
|
11
|
-
|
12
|
-
|
8
|
+
class DrummerCell < Cell::Base
|
9
|
+
helper StringHelper
|
10
|
+
|
11
|
+
def assist
|
12
|
+
render :inline => "<%= pick %>"
|
13
13
|
end
|
14
14
|
end
|
15
15
|
|
16
|
-
class HelperUsingCell < ::Cell::Base
|
17
|
-
helper CellsTestHelper
|
18
|
-
helper_method :my_helper_method
|
19
|
-
|
20
|
-
def state_with_helper_invocation
|
21
|
-
render
|
22
|
-
end
|
23
|
-
|
24
|
-
def state_with_automatic_helper_invocation
|
25
|
-
render
|
26
|
-
end
|
27
|
-
|
28
|
-
def state_with_helper_method_invocation
|
29
|
-
render
|
30
|
-
end
|
31
|
-
|
32
|
-
def state_using_application_helper
|
33
|
-
render
|
34
|
-
end
|
35
|
-
|
36
|
-
protected
|
37
|
-
|
38
|
-
def my_helper_method
|
39
|
-
'helped by a method'
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
class TwoHelpersIncludingCell < HelperUsingCell
|
44
|
-
helper AnotherHelper
|
45
|
-
|
46
|
-
def state_using_another_helper
|
47
|
-
render
|
48
|
-
end
|
49
|
-
end
|
50
|
-
|
51
|
-
class HelperUsingSubCell < HelperUsingCell
|
52
|
-
end
|
53
16
|
|
54
17
|
class HelperTest < ActionController::TestCase
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
## FIXME: currently loading should happen in render_view_for_state, since
|
66
|
-
# there seems to be no automatic mechanism.
|
67
|
-
def dont_test_auto_helper
|
68
|
-
# ActionController::Base.helpers_dir = File.join(File.dirname(__FILE__), 'helpers')
|
69
|
-
::Cell::Base.helpers_dir = File.join(File.dirname(__FILE__), 'app', 'helpers')
|
70
|
-
setup
|
71
|
-
|
72
|
-
cell = HelperUsingCell.new(@controller)
|
73
|
-
c = cell.render_state(:state_with_automatic_helper_invocation)
|
74
|
-
|
75
|
-
assert_selekt c, 'p#stateWithAutomaticHelperInvocation', 'automatic'
|
76
|
-
end
|
77
|
-
|
78
|
-
def test_helper_method
|
79
|
-
cell = HelperUsingCell.new(@controller)
|
80
|
-
c = cell.render_state(:state_with_helper_method_invocation)
|
81
|
-
|
82
|
-
assert_selekt c, 'p#stateWithHelperMethodInvocation', 'helped by a method'
|
83
|
-
end
|
84
|
-
|
85
|
-
def test_helper_with_subclassing
|
86
|
-
cell = HelperUsingSubCell.new(@controller)
|
87
|
-
c = cell.render_state(:state_with_helper_invocation)
|
88
|
-
|
89
|
-
assert_selekt c, 'p#stateWithHelperInvocation', 'mysterious'
|
90
|
-
end
|
91
|
-
|
92
|
-
def test_helper_including_and_cleanup
|
93
|
-
# this cell includes a helper, and uses it:
|
94
|
-
cell = HelperUsingCell.new(@controller)
|
95
|
-
c = cell.render_state(:state_with_helper_invocation)
|
96
|
-
|
97
|
-
assert_selekt c, 'p#stateWithHelperInvocation', 'mysterious'
|
98
|
-
|
99
|
-
# this cell doesn't include the helper, but uses it anyway, which should
|
100
|
-
# produce an error:
|
101
|
-
cell = TestCell.new(@controller)
|
102
|
-
|
103
|
-
# assert_raises (NameError) do
|
104
|
-
assert_raises (::ActionView::TemplateError) do
|
105
|
-
cell.render_state(:state_with_not_included_helper_method)
|
18
|
+
context "a cell view" do
|
19
|
+
should "have access to all helpers" do
|
20
|
+
BassistCell.class_eval do
|
21
|
+
def assist
|
22
|
+
render :inline => "<%= submit_tag %>"
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
assert_equal "<input name=\"commit\" type=\"submit\" value=\"Save changes\" />", render_cell(:bassist, :assist)
|
106
27
|
end
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
assert_selekt c, 'p#stateUsingAnotherHelper', 'senseless'
|
118
|
-
end
|
119
|
-
|
120
|
-
def test_application_helper
|
121
|
-
cell = HelperUsingCell.new(@controller)
|
122
|
-
c = cell.render_state(:state_using_application_helper)
|
123
|
-
|
124
|
-
assert_selekt c, 'p#stateUsingApplicationHelper', 'global'
|
125
|
-
end
|
126
|
-
|
127
|
-
def test_rails_helper_url_for
|
128
|
-
cell = HelperUsingCell.new(@controller)
|
129
|
-
cell.instance_eval do
|
130
|
-
def state_with_url_for
|
131
|
-
render :inline => "<%= url_for '/test' %>"
|
28
|
+
|
29
|
+
should "have access to methods declared with helper_method" do
|
30
|
+
BassistCell.class_eval do
|
31
|
+
def help; "Great!"; end
|
32
|
+
helper_method :help
|
33
|
+
|
34
|
+
def assist
|
35
|
+
render :inline => "<%= help %>"
|
36
|
+
end
|
132
37
|
end
|
38
|
+
|
39
|
+
assert_equal "Great!", render_cell(:bassist, :assist)
|
40
|
+
end
|
41
|
+
|
42
|
+
should "have access to methods provided by helper" do
|
43
|
+
assert_equal "plong", render_cell(:drummer, :assist)
|
133
44
|
end
|
134
|
-
c = cell.render_state(:state_with_url_for)
|
135
|
-
|
136
|
-
assert_equal '/test', c
|
137
45
|
end
|
138
46
|
end
|