cells 3.3.4 → 3.3.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Gemfile.lock +33 -0
- data/lib/cells.rb +1 -0
- data/lib/cells/cell/test_case.rb +135 -0
- data/lib/cells/version.rb +1 -1
- data/rails/tasks/log.rake +9 -0
- data/rails_generators/cells_install/cells_install_generator.rb +3 -5
- data/rails_generators/cells_install/templates/tasks.rake +6 -0
- data/test/test_case_test.rb +78 -0
- metadata +44 -5
data/Gemfile.lock
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
GEM
|
2
|
+
remote: http://rubygems.org/
|
3
|
+
specs:
|
4
|
+
actionmailer (2.3.9)
|
5
|
+
actionpack (= 2.3.9)
|
6
|
+
actionpack (2.3.9)
|
7
|
+
activesupport (= 2.3.9)
|
8
|
+
rack (~> 1.1.0)
|
9
|
+
active_helper (0.2.2)
|
10
|
+
activesupport (>= 2.3.0)
|
11
|
+
activerecord (2.3.9)
|
12
|
+
activesupport (= 2.3.9)
|
13
|
+
activeresource (2.3.9)
|
14
|
+
activesupport (= 2.3.9)
|
15
|
+
activesupport (2.3.9)
|
16
|
+
rack (1.1.0)
|
17
|
+
rails (2.3.9)
|
18
|
+
actionmailer (= 2.3.9)
|
19
|
+
actionpack (= 2.3.9)
|
20
|
+
activerecord (= 2.3.9)
|
21
|
+
activeresource (= 2.3.9)
|
22
|
+
activesupport (= 2.3.9)
|
23
|
+
rake (>= 0.8.3)
|
24
|
+
rake (0.8.7)
|
25
|
+
shoulda (2.11.3)
|
26
|
+
|
27
|
+
PLATFORMS
|
28
|
+
ruby
|
29
|
+
|
30
|
+
DEPENDENCIES
|
31
|
+
active_helper
|
32
|
+
rails (~> 2.3)
|
33
|
+
shoulda
|
data/lib/cells.rb
CHANGED
@@ -0,0 +1,135 @@
|
|
1
|
+
require "active_support/test_case"
|
2
|
+
module Cell
|
3
|
+
# Test your cells.
|
4
|
+
#
|
5
|
+
# This class is roughly equal to ActionController::TestCase, exposing the same semantics. It will try
|
6
|
+
# to infer the tested cell name from the test name if you use declarative testing. You can also set it
|
7
|
+
# with TestCase.tests.
|
8
|
+
#
|
9
|
+
# A declarative test would look like
|
10
|
+
#
|
11
|
+
# class SellOutTest < Cell::TestCase
|
12
|
+
# tests ShoppingCartCell
|
13
|
+
#
|
14
|
+
# it "should be rendered nicely" do
|
15
|
+
# invoke :order_button, :items => @fixture_items
|
16
|
+
#
|
17
|
+
# assert_select "button", "Order now!"
|
18
|
+
# end
|
19
|
+
#
|
20
|
+
# You can also do stuff yourself, like
|
21
|
+
#
|
22
|
+
# it "should be rendered even nicer" do
|
23
|
+
# html = render_cell(:shopping_cart, :order_button, , :items => @fixture_items)
|
24
|
+
# assert_selector "button", "Order now!", html
|
25
|
+
# end
|
26
|
+
#
|
27
|
+
# Or even unit test your cell:
|
28
|
+
#
|
29
|
+
# it "should provide #default_items" do
|
30
|
+
# assert_equal [@item1, @item2], cell(:shopping_cart).default_items
|
31
|
+
# end
|
32
|
+
#
|
33
|
+
# == Test helpers
|
34
|
+
#
|
35
|
+
# Basically, we got these new methods:
|
36
|
+
#
|
37
|
+
# +invoke+:: Renders the passed +state+ with your tested cell. You may pass options like in #render_cell.
|
38
|
+
# +render_cell+:: As in your views. Will return the rendered view.
|
39
|
+
# +assert_selector+:: Like #assert_select except that the last argument is the html markup you wanna test.
|
40
|
+
# +cell+:: Gives you a cell instance for unit testing and stuff.
|
41
|
+
class TestCase < ActiveSupport::TestCase
|
42
|
+
module AssertSelect
|
43
|
+
# Invokes assert_select for the last argument, the +content+ string.
|
44
|
+
#
|
45
|
+
# Example:
|
46
|
+
# assert_selector "h1", "The latest and greatest!", "<h1>The latest and greatest!</h1>"
|
47
|
+
#
|
48
|
+
# would be true.
|
49
|
+
def assert_selector(*args, &block)
|
50
|
+
rails_assert_select(HTML::Document.new(args.pop).root, *args, &block)
|
51
|
+
end
|
52
|
+
|
53
|
+
# Invokes assert_select on the markup set by the last #invoke.
|
54
|
+
#
|
55
|
+
# Example:
|
56
|
+
# invoke :latest
|
57
|
+
# assert_select "h1", "The latest and greatest!"
|
58
|
+
def assert_select(*args, &block)
|
59
|
+
super(HTML::Document.new(last_invoke).root, *args, &block)
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
module TestMethods
|
64
|
+
def setup
|
65
|
+
@controller = Class.new(ActionController::Base).new
|
66
|
+
@request = ::ActionController::TestRequest.new
|
67
|
+
@response = ::ActionController::TestResponse.new
|
68
|
+
@controller.request = @request
|
69
|
+
@controller.response = @response
|
70
|
+
@controller.params = {}
|
71
|
+
end
|
72
|
+
|
73
|
+
# Use this for functional tests of your application cells.
|
74
|
+
#
|
75
|
+
# Example:
|
76
|
+
# should "spit out a h1 title" do
|
77
|
+
# html = render_cell(:news, :latest)
|
78
|
+
# assert_selekt html, "h1", "The latest and greatest!"
|
79
|
+
def render_cell(*args)
|
80
|
+
@controller.render_cell(*args)
|
81
|
+
end
|
82
|
+
|
83
|
+
# Builds an instance of <tt>name</tt>Cell for unit testing.
|
84
|
+
# Passes the optional block to <tt>cell.instance_eval</tt>.
|
85
|
+
#
|
86
|
+
# Example:
|
87
|
+
# assert_equal "Banks kill planet!" cell(:news, :topic => :terror).latest_headline
|
88
|
+
def cell(name, opts={}, &block)
|
89
|
+
cell = ::Cell::Base.create_cell_for(@controller, name, opts)
|
90
|
+
cell.instance_eval &block if block_given?
|
91
|
+
cell
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
include TestMethods
|
96
|
+
include ActionController::Assertions::SelectorAssertions # imports "their" #assert_select.
|
97
|
+
alias_method :rails_assert_select, :assert_select # i hate that.
|
98
|
+
include AssertSelect
|
99
|
+
|
100
|
+
|
101
|
+
attr_reader :last_invoke
|
102
|
+
|
103
|
+
def invoke(state, *args)
|
104
|
+
@last_invoke = self.class.controller_class.new(@controller, *args).render_state(state)
|
105
|
+
end
|
106
|
+
|
107
|
+
|
108
|
+
class << self
|
109
|
+
# Sets the controller class name. Useful if the name can't be inferred from test class.
|
110
|
+
# Expects +controller_class+ as a constant. Example: <tt>tests WidgetController</tt>.
|
111
|
+
def tests(controller_class)
|
112
|
+
self.controller_class = controller_class
|
113
|
+
end
|
114
|
+
|
115
|
+
def controller_class=(new_class)
|
116
|
+
write_inheritable_attribute(:controller_class, new_class)
|
117
|
+
end
|
118
|
+
|
119
|
+
def controller_class
|
120
|
+
if current_controller_class = read_inheritable_attribute(:controller_class)
|
121
|
+
current_controller_class
|
122
|
+
else
|
123
|
+
self.controller_class = determine_default_controller_class(name)
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
def determine_default_controller_class(name)
|
128
|
+
name.sub(/Test$/, '').constantize
|
129
|
+
rescue NameError
|
130
|
+
nil
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
134
|
+
end
|
135
|
+
end
|
data/lib/cells/version.rb
CHANGED
@@ -1,12 +1,10 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
1
|
class CellsInstallGenerator < Rails::Generator::Base
|
4
|
-
|
5
2
|
def manifest
|
6
3
|
record do |m|
|
7
4
|
m.directory File.join('config', 'initializers')
|
5
|
+
m.directory File.join('lib', 'tasks')
|
8
6
|
m.template 'initializer.rb', File.join('config', 'initializers', 'cells.rb')
|
7
|
+
m.template 'tasks.rake', File.join('lib', 'tasks', 'cells.rake')
|
9
8
|
end
|
10
9
|
end
|
11
|
-
|
12
|
-
end
|
10
|
+
end
|
@@ -0,0 +1,78 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class TestCaseTest < Cell::TestCase
|
4
|
+
|
5
|
+
context "A TestCase" do
|
6
|
+
setup do
|
7
|
+
@test = Cell::TestCase.new(:cell_test)
|
8
|
+
|
9
|
+
BassistCell.class_eval do
|
10
|
+
def play; render; end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
|
15
|
+
should "respond to #render_cell" do
|
16
|
+
assert_equal "Doo", render_cell(:bassist, :play)
|
17
|
+
end
|
18
|
+
|
19
|
+
should "respond to #assert_selector with 3 args" do
|
20
|
+
assert_selector "p", "Doo", "<p>Doo</p>y"
|
21
|
+
end
|
22
|
+
|
23
|
+
should "respond to #cell" do
|
24
|
+
assert_kind_of BassistCell, cell(:bassist)
|
25
|
+
assert !cell(:bassist).respond_to?(:opts)
|
26
|
+
end
|
27
|
+
|
28
|
+
should "respond to #cell with a block" do
|
29
|
+
assert_respond_to cell(:bassist) { def opts; @opts; end }, :opts
|
30
|
+
end
|
31
|
+
|
32
|
+
should "respond to #cell with options and block" do
|
33
|
+
assert_equal({:topic => :peace}, cell(:bassist, :topic => :peace) { def opts; @opts; end }.opts)
|
34
|
+
end
|
35
|
+
|
36
|
+
context "in declarative tests" do
|
37
|
+
should "respond to TestCase.tests" do
|
38
|
+
self.class.tests BassistCell
|
39
|
+
assert_equal BassistCell, self.class.controller_class
|
40
|
+
end
|
41
|
+
|
42
|
+
should "infer the cell name" do
|
43
|
+
class SingerCell < Cell::Base
|
44
|
+
end
|
45
|
+
|
46
|
+
class SingerCellTest < Cell::TestCase
|
47
|
+
end
|
48
|
+
|
49
|
+
assert_equal SingerCell, SingerCellTest.new(:cell_test).class.controller_class
|
50
|
+
end
|
51
|
+
|
52
|
+
context "with invoke" do
|
53
|
+
setup do
|
54
|
+
self.class.tests BassistCell
|
55
|
+
end
|
56
|
+
|
57
|
+
should "provide #invoke" do
|
58
|
+
assert_equal "Doo", invoke(:play)
|
59
|
+
end
|
60
|
+
|
61
|
+
should "provide #last_invoke" do
|
62
|
+
assert_equal nil, last_invoke
|
63
|
+
assert_equal "Doo", invoke(:play)
|
64
|
+
assert_equal "Doo", last_invoke
|
65
|
+
end
|
66
|
+
|
67
|
+
should "provide #invoke accepting opts" do
|
68
|
+
#assert_equal "Doo", invoke(:play)
|
69
|
+
end
|
70
|
+
|
71
|
+
should "provide assert_select" do
|
72
|
+
invoke :play
|
73
|
+
assert_select "a", 0
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cells
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
hash: 1
|
5
|
+
prerelease: false
|
6
|
+
segments:
|
7
|
+
- 3
|
8
|
+
- 3
|
9
|
+
- 5
|
10
|
+
version: 3.3.5
|
5
11
|
platform: ruby
|
6
12
|
authors:
|
7
13
|
- Nick Sutterer
|
@@ -9,7 +15,7 @@ autorequire:
|
|
9
15
|
bindir: bin
|
10
16
|
cert_chain: []
|
11
17
|
|
12
|
-
date: 2010-06
|
18
|
+
date: 2010-10-06 00:00:00 +02:00
|
13
19
|
default_executable:
|
14
20
|
dependencies: []
|
15
21
|
|
@@ -24,6 +30,7 @@ extra_rdoc_files:
|
|
24
30
|
files:
|
25
31
|
- CHANGES
|
26
32
|
- Gemfile
|
33
|
+
- Gemfile.lock
|
27
34
|
- MIT-LICENSE
|
28
35
|
- README.rdoc
|
29
36
|
- Rakefile
|
@@ -34,6 +41,7 @@ files:
|
|
34
41
|
- lib/cells/cell/active_helper.rb
|
35
42
|
- lib/cells/cell/base.rb
|
36
43
|
- lib/cells/cell/caching.rb
|
44
|
+
- lib/cells/cell/test_case.rb
|
37
45
|
- lib/cells/cell/view.rb
|
38
46
|
- lib/cells/helpers.rb
|
39
47
|
- lib/cells/helpers/capture_helper.rb
|
@@ -42,6 +50,7 @@ files:
|
|
42
50
|
- lib/cells/rails/action_view.rb
|
43
51
|
- lib/cells/version.rb
|
44
52
|
- rails/init.rb
|
53
|
+
- rails/tasks/log.rake
|
45
54
|
- rails_generators/cell/USAGE
|
46
55
|
- rails_generators/cell/cell_generator.rb
|
47
56
|
- rails_generators/cell/templates/cell.rb
|
@@ -51,6 +60,29 @@ files:
|
|
51
60
|
- rails_generators/cells_install/USAGE
|
52
61
|
- rails_generators/cells_install/cells_install_generator.rb
|
53
62
|
- rails_generators/cells_install/templates/initializer.rb
|
63
|
+
- rails_generators/cells_install/templates/tasks.rake
|
64
|
+
- test/rails_test.rb
|
65
|
+
- test/active_helper_test.rb
|
66
|
+
- test/capture_helper_test.rb
|
67
|
+
- test/assertions_helper_test.rb
|
68
|
+
- test/cell_generator_test.rb
|
69
|
+
- test/test_helper.rb
|
70
|
+
- test/support/internal_assertions_helper.rb
|
71
|
+
- test/bugs_test.rb
|
72
|
+
- test/render_test.rb
|
73
|
+
- test/test_case_test.rb
|
74
|
+
- test/cells_test.rb
|
75
|
+
- test/helper_test.rb
|
76
|
+
- test/caching_test.rb
|
77
|
+
- test/app/controllers/cells_test_controller.rb
|
78
|
+
- test/app/cells/bassist_cell.rb
|
79
|
+
- test/app/cells/really_module/nested_cell.rb
|
80
|
+
- test/app/cells/cells_test_one_cell.rb
|
81
|
+
- test/app/cells/cells_test_two_cell.rb
|
82
|
+
- test/app/cells/simple_cell.rb
|
83
|
+
- test/app/cells/test_cell.rb
|
84
|
+
- test/app/helpers/application_helper.rb
|
85
|
+
- test/app/helpers/helper_using_cell_helper.rb
|
54
86
|
has_rdoc: true
|
55
87
|
homepage: http://cells.rubyforge.org
|
56
88
|
licenses: []
|
@@ -61,21 +93,27 @@ rdoc_options:
|
|
61
93
|
require_paths:
|
62
94
|
- lib
|
63
95
|
required_ruby_version: !ruby/object:Gem::Requirement
|
96
|
+
none: false
|
64
97
|
requirements:
|
65
98
|
- - ">="
|
66
99
|
- !ruby/object:Gem::Version
|
100
|
+
hash: 3
|
101
|
+
segments:
|
102
|
+
- 0
|
67
103
|
version: "0"
|
68
|
-
version:
|
69
104
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
70
106
|
requirements:
|
71
107
|
- - ">="
|
72
108
|
- !ruby/object:Gem::Version
|
109
|
+
hash: 3
|
110
|
+
segments:
|
111
|
+
- 0
|
73
112
|
version: "0"
|
74
|
-
version:
|
75
113
|
requirements: []
|
76
114
|
|
77
115
|
rubyforge_project:
|
78
|
-
rubygems_version: 1.3.
|
116
|
+
rubygems_version: 1.3.7
|
79
117
|
signing_key:
|
80
118
|
specification_version: 3
|
81
119
|
summary: Cells are lightweight controllers for Rails and can be rendered in controllers and views, providing an elegant and fast way for encapsulation and component-orientation.
|
@@ -89,6 +127,7 @@ test_files:
|
|
89
127
|
- test/support/internal_assertions_helper.rb
|
90
128
|
- test/bugs_test.rb
|
91
129
|
- test/render_test.rb
|
130
|
+
- test/test_case_test.rb
|
92
131
|
- test/cells_test.rb
|
93
132
|
- test/helper_test.rb
|
94
133
|
- test/caching_test.rb
|