rspec-action_view 0.1.2 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.markdown CHANGED
@@ -1,6 +1,6 @@
1
1
  # Rspec for Rails 3 ActionView
2
2
 
3
- RSpec 2 library to make it simple to spec Rails 3 ActionView extensions
3
+ RSpec 2 library to make it simple to spec Rails 3 ActionView extensions.
4
4
 
5
5
  ## Install
6
6
 
@@ -9,39 +9,41 @@ RSpec 2 library to make it simple to spec Rails 3 ActionView extensions
9
9
  ## Usage
10
10
 
11
11
  <pre>
12
- describe "My ViewHelpers" do
13
- it "should render content as expected" do
14
- setup_action_view do
15
- tests MyViewHelper, MyOtherViewHelper
12
+ module MyView
13
+ module Tab
14
+ def tab_for(clazz, &block)
15
+ content = with_output_buffer(&block)
16
+ content_tag :li, content, :class => clazz
17
+ end
18
+ end
19
+
20
+ module Say
21
+ def hello(clazz, &block)
22
+ content = with_output_buffer(&block)
23
+ content_tag :div, content, :class => clazz
16
24
  end
17
25
 
18
- with_action_view do |view|
19
- view.tab_for('kristian') { 'hello' }.should match /kristian/
20
- view.hello('david') { 'hello' }.should match /david/
21
- end
22
-
23
- with_action_view do |view|
24
-
25
- view.set :posts => ['post 1', 'post 2'], :title => 'Blog posts index'
26
- view.instance_variable_get('@posts').should have(2).items
27
-
28
- res = view.with_template(%{
29
- <%= @title %>
30
- <%= tab_for('kristian') { 'hello' } %>
31
- <%= @posts.join(',') %>
32
- })
33
- res.should match /hello/
34
- res.should match /Blog posts index/
35
- res.should match /post 1/
36
-
37
- with_action_view do |view|
38
- view.with_template do %{
39
- <%= tab_for('kristian') { 'hello' } %>
40
- }
41
- end.should match /hello/
42
- end
26
+ def name
27
+ 'Kristian'
28
+ end
29
+ end
30
+ end
31
+
32
+ describe 'My View extensions!' do
33
+ extend_view_with MyView, :tab, :say
34
+
35
+ it "should work" do
36
+ with_engine(:erb) do |e|
37
+ e.run_template("hello <%= name %>").should match /Kristian/
38
+
39
+ e.run_template do
40
+ %{<%= tab_for :x do %>
41
+ <%= hello :blip do %>
42
+ ged
43
+ <% end %>
44
+ <% end %>}
45
+ end.should match /ged/
43
46
  end
44
-
45
47
  end
46
48
  end
47
49
  </pre>
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.2
1
+ 0.2.0
@@ -0,0 +1,89 @@
1
+ require 'action_view'
2
+ require 'action_view/context'
3
+
4
+ module RSpec
5
+ module ActionView
6
+ class ERBTemplateEngine
7
+
8
+ ERBHandler = ::ActionView::Template::Handlers::ERB
9
+
10
+ attr_accessor :output_buffer, :rendered
11
+
12
+ def initialize
13
+ @output_buffer = ActiveSupport::SafeBuffer.new
14
+ @rendered = ''
15
+ end
16
+
17
+ def render(options = {}, local_assigns = {}, &block)
18
+ view.assign(_assigns)
19
+ output = view.render(options, local_assigns, &block)
20
+ @rendered << output
21
+ output
22
+ end
23
+
24
+ module Locals
25
+ attr_accessor :locals
26
+ end
27
+
28
+ def locals
29
+ @locals ||= {}
30
+ end
31
+
32
+ def _get_view
33
+ view = ::ActionView::Base.new
34
+
35
+ # ???
36
+ # view.singleton_class.send :include, _helpers
37
+
38
+ view.extend(Locals)
39
+ view.locals = self.locals
40
+ view.output_buffer = self.output_buffer
41
+ view
42
+ end
43
+
44
+ def view
45
+ @view ||= _get_view
46
+ end
47
+
48
+ alias_method :_view, :view
49
+
50
+ EXCLUDE_IVARS = %w{
51
+ @_assertion_wrapped
52
+ @_result
53
+ @controller
54
+ @layouts
55
+ @locals
56
+ @method_name
57
+ @output_buffer
58
+ @partials
59
+ @rendered
60
+ @request
61
+ @routes
62
+ @templates
63
+ @test_passed
64
+ @view
65
+ @view_context_class
66
+ }
67
+
68
+ def _instance_variables
69
+ instance_variables.map(&:to_s) - EXCLUDE_IVARS
70
+ end
71
+
72
+ def _assigns
73
+ _instance_variables.inject({}) do |hash, var|
74
+ name = var[1..-1].to_sym
75
+ hash[name] = instance_variable_get(var)
76
+ hash
77
+ end
78
+ end
79
+
80
+ def run_template content=nil, &block
81
+ content ||= yield
82
+ render :inline => content
83
+ end
84
+ end
85
+ end
86
+ end
87
+
88
+
89
+
@@ -0,0 +1,13 @@
1
+ module RSpec::Core
2
+ class ExampleGroup
3
+ def with_engine type = :erb, &block
4
+ engine = RSpec::ActionView::ERBTemplateEngine.new
5
+
6
+ if block
7
+ block.arity < 1 ? engine.instance_eval(&block) : block.call(engine)
8
+ end
9
+ end
10
+
11
+ # include RSpec::ActionView::Macro
12
+ end
13
+ end
@@ -0,0 +1,26 @@
1
+ require 'active_support/railtie'
2
+ require 'rails3_plugin_toolbox'
3
+
4
+ module RSpec
5
+ module ActionView
6
+ module Macro
7
+ def extend_view_with_modules *modules
8
+ Rails3::PluginExtender.new do
9
+ # extend action_view with methods from some modules
10
+ extend_rails :view do
11
+ extend_with *modules
12
+ end
13
+ end
14
+ end
15
+
16
+ def extend_view_with base_name, *modules
17
+ Rails3::PluginExtender.new do
18
+ # extend action_view with methods from some modules
19
+ extend_rails :view do
20
+ extend_from_module base_name, *modules
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -1,51 +1,8 @@
1
1
  require 'rspec'
2
- require 'action_view'
3
- require 'active_support/railtie'
4
- require 'action_view/template/handlers/erb'
2
+ require 'require_all'
5
3
 
6
- class ActionViewTester
7
- include ActionView::Helpers::TagHelper
8
- include ActionView::Helpers::CaptureHelper
4
+ require_all File.dirname(__FILE__) + '/rspec-action_view'
9
5
 
10
- def initialize &block
11
- if block
12
- block.arity < 1 ? self.instance_eval(&block) : block.call(self)
13
- end
14
- end
15
-
16
- def set attributes={}
17
- attributes.each do |key, value|
18
- instance_var = "@#{key}"
19
- instance_variable_set(instance_var, value)
20
- end
21
- end
22
-
23
- def with_output_buffer(buf = nil)
24
- yield
25
- end
26
-
27
- def with_template content=nil, &block
28
- require 'erb'
29
- content ||= yield
30
- template = ERB.new content
31
- template.result(binding)
32
- end
33
-
34
- def self.tests *helpers
35
- helpers.flatten.each do |name|
36
- include name.to_s.camelize.constantize
37
- end
38
- end
39
- end
40
-
41
- module RSpec::Core
42
- class ExampleGroup
43
- def with_action_view &block
44
- block.call(ActionViewTester.new)
45
- end
46
-
47
- def setup_action_view &block
48
- ActionViewTester.instance_eval(&block)
49
- end
50
- end
51
- end
6
+ RSpec.configure do |config|
7
+ config.extend RSpec::ActionView::Macro
8
+ end
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{rspec-action_view}
8
- s.version = "0.1.2"
8
+ s.version = "0.2.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Kristian Mandrup"]
12
- s.date = %q{2010-08-23}
12
+ s.date = %q{2010-08-25}
13
13
  s.description = %q{RSpec 2 library to make it simple to spec Rails 3 ActionView extensions}
14
14
  s.email = %q{kmandrup@gmail.com}
15
15
  s.extra_rdoc_files = [
@@ -25,8 +25,11 @@ Gem::Specification.new do |s|
25
25
  "Rakefile",
26
26
  "VERSION",
27
27
  "lib/rspec-action_view.rb",
28
+ "lib/rspec-action_view/erb_template_inline.rb",
29
+ "lib/rspec-action_view/rspec/example_group.rb",
30
+ "lib/rspec-action_view/rspec/macro.rb",
28
31
  "rspec-action_view.gemspec",
29
- "spec/rspec-action_view_spec.rb",
32
+ "spec/rspec-action_view/erb_tester_spec.rb",
30
33
  "spec/spec_helper.rb"
31
34
  ]
32
35
  s.homepage = %q{http://github.com/kristianmandrup/rspec-action_view}
@@ -35,7 +38,7 @@ Gem::Specification.new do |s|
35
38
  s.rubygems_version = %q{1.3.7}
36
39
  s.summary = %q{RSpec for Rails 3 ActionView extensions}
37
40
  s.test_files = [
38
- "spec/rspec-action_view_spec.rb",
41
+ "spec/rspec-action_view/erb_tester_spec.rb",
39
42
  "spec/spec_helper.rb"
40
43
  ]
41
44
 
@@ -0,0 +1,39 @@
1
+ require 'spec_helper'
2
+
3
+ module MyView
4
+ module Tab
5
+ def tab_for(clazz, &block)
6
+ content = with_output_buffer(&block)
7
+ content_tag :li, content, :class => clazz
8
+ end
9
+ end
10
+
11
+ module Say
12
+ def hello(clazz, &block)
13
+ content = with_output_buffer(&block)
14
+ content_tag :div, content, :class => clazz
15
+ end
16
+
17
+ def name
18
+ 'Kristian'
19
+ end
20
+ end
21
+ end
22
+
23
+ describe 'My View extensions!' do
24
+ extend_view_with MyView, :tab, :say
25
+
26
+ it "should work" do
27
+ with_engine(:erb) do |e|
28
+ e.run_template("hello <%= name %>").should match /Kristian/
29
+
30
+ e.run_template do
31
+ %{<%= tab_for :x do %>
32
+ <%= hello :blip do %>
33
+ ged
34
+ <% end %>
35
+ <% end %>}
36
+ end.should match /ged/
37
+ end
38
+ end
39
+ end
metadata CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
4
4
  prerelease: false
5
5
  segments:
6
6
  - 0
7
- - 1
8
7
  - 2
9
- version: 0.1.2
8
+ - 0
9
+ version: 0.2.0
10
10
  platform: ruby
11
11
  authors:
12
12
  - Kristian Mandrup
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-08-23 00:00:00 +02:00
17
+ date: 2010-08-25 00:00:00 +02:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -50,8 +50,11 @@ files:
50
50
  - Rakefile
51
51
  - VERSION
52
52
  - lib/rspec-action_view.rb
53
+ - lib/rspec-action_view/erb_template_inline.rb
54
+ - lib/rspec-action_view/rspec/example_group.rb
55
+ - lib/rspec-action_view/rspec/macro.rb
53
56
  - rspec-action_view.gemspec
54
- - spec/rspec-action_view_spec.rb
57
+ - spec/rspec-action_view/erb_tester_spec.rb
55
58
  - spec/spec_helper.rb
56
59
  has_rdoc: true
57
60
  homepage: http://github.com/kristianmandrup/rspec-action_view
@@ -86,5 +89,5 @@ signing_key:
86
89
  specification_version: 3
87
90
  summary: RSpec for Rails 3 ActionView extensions
88
91
  test_files:
89
- - spec/rspec-action_view_spec.rb
92
+ - spec/rspec-action_view/erb_tester_spec.rb
90
93
  - spec/spec_helper.rb
@@ -1,52 +0,0 @@
1
- require 'spec_helper'
2
-
3
- module MyViewHelper
4
- def tab_for(clazz, &block)
5
- content = with_output_buffer(&block)
6
- content_tag :li, content, :class => clazz
7
- end
8
- end
9
-
10
- module MyOtherViewHelper
11
- def hello(clazz, &block)
12
- content = with_output_buffer(&block)
13
- content_tag :div, content, :class => clazz
14
- end
15
- end
16
-
17
-
18
-
19
- describe "My ViewHelpers" do
20
- it "should render content as expected" do
21
- setup_action_view do
22
- tests MyViewHelper, MyOtherViewHelper
23
- end
24
-
25
- with_action_view do |view|
26
- view.tab_for('kristian') { 'hello' }.should match /kristian/
27
- view.hello('david') { 'hello' }.should match /david/
28
-
29
- with_action_view do |view|
30
- view.set :posts => ['post 1', 'post 2'], :title => 'Blog posts index'
31
- view.instance_variable_get('@posts').should have(2).items
32
-
33
- res = view.with_template do %{
34
- <%= @title %>
35
- <%= tab_for('kristian') { 'hello' } %>
36
- <%= @posts.join(',') %>
37
- }
38
- end
39
- res.should match /hello/
40
- res.should match /Blog posts index/
41
- res.should match /post 1/
42
-
43
- with_action_view do |view|
44
- view.with_template do %{
45
- <%= tab_for('kristian') { 'hello' } %>
46
- }
47
- end.should match /hello/
48
- end
49
- end
50
- end
51
- end
52
- end