erector 0.3.110 → 0.4.191

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.
Files changed (38) hide show
  1. data/README.txt +1 -1
  2. data/bin/erect +0 -0
  3. data/lib/erector.rb +13 -10
  4. data/lib/erector/doc.rb +138 -0
  5. data/lib/erector/erected.rb +1 -1
  6. data/lib/erector/rails.rb +6 -0
  7. data/lib/erector/rails/extensions/action_controller.rb +17 -0
  8. data/lib/erector/rails/extensions/action_view.rb +21 -0
  9. data/lib/erector/{helpers.rb → rails/extensions/widget.rb} +21 -14
  10. data/lib/erector/rails/supported_rails_versions.rb +11 -0
  11. data/lib/erector/rails/template_handlers/action_view_template_handler.rb +92 -0
  12. data/lib/erector/rhtml.treetop +6 -1
  13. data/lib/erector/unicode.rb +18185 -0
  14. data/lib/erector/unicode_builder.rb +67 -0
  15. data/lib/erector/widget.rb +86 -82
  16. data/spec/core_spec_suite.rb +3 -0
  17. data/spec/erect/erect_spec.rb +1 -4
  18. data/spec/erect/erected_spec.rb +1 -4
  19. data/spec/erect/rhtml_parser_spec.rb +9 -7
  20. data/spec/erector/doc_spec.rb +55 -0
  21. data/spec/erector/indentation_spec.rb +127 -0
  22. data/spec/erector/unicode_builder_spec.rb +75 -0
  23. data/spec/erector/widget_spec.rb +339 -175
  24. data/spec/erector/widgets/table_spec.rb +26 -37
  25. data/spec/rails_spec_suite.rb +3 -0
  26. data/spec/spec_helper.rb +11 -6
  27. data/spec/spec_suite.rb +44 -3
  28. metadata +54 -28
  29. data/lib/erector/extensions/action_controller.rb +0 -24
  30. data/lib/erector/extensions/action_view_template_handler.rb +0 -66
  31. data/lib/erector/html_parts.rb +0 -63
  32. data/spec/erector/extensions/render_widget_spec.rb +0 -68
  33. data/spec/erector/extensions/template_handler_spec.rb +0 -29
  34. data/spec/erector/rails_helpers_spec.rb +0 -149
  35. data/spec/rails/standard_helpers_spec.rb +0 -102
  36. data/spec/rails/view_spec.rb +0 -33
  37. data/spec/view_caching.rb +0 -30
  38. data/test/rails_root/app/views/template_handler_spec/test_page.rb +0 -8
@@ -1,68 +0,0 @@
1
- require File.expand_path("#{File.dirname(__FILE__)}/../../spec_helper")
2
-
3
- module BaseSpec
4
- class TestWidgetController < ActionController::Base
5
- def index_with_implicit_assigns
6
- @foobar = "foobar"
7
- render_widget Erector::TestWidget
8
- end
9
-
10
- def index_with_explicit_assigns
11
- render_widget Erector::TestWidget, :foobar => "foobar"
12
- end
13
-
14
- def index_with_render_colon_widget
15
- render :widget => Erector::TestWidget, :foobar => "foobar"
16
- end
17
- end
18
-
19
- class Erector::TestWidget < Erector::Widget
20
- def render
21
- text @foobar
22
- end
23
- end
24
-
25
- describe TestWidgetController, "rendering widgets" do
26
- before do
27
- @controller = BaseSpec::TestWidgetController.new
28
- @request = ActionController::TestRequest.new
29
- @response = ActionController::TestResponse.new
30
- @controller.send(:initialize_template_class, @response)
31
- @controller.send(:assign_shortcuts, @request, @response)
32
- class << @controller
33
- public :rendered_widget, :render
34
- end
35
- end
36
-
37
- describe "#render_widget" do
38
- it "assigns to @rendered_widget" do
39
- @controller.rendered_widget.should be_nil
40
- @controller.render_widget Erector::TestWidget
41
- @controller.rendered_widget.should be_instance_of(Erector::TestWidget)
42
- end
43
-
44
- it "instantiates a widget with implicit assigns" do
45
- @controller.index_with_implicit_assigns
46
- @response.body.should == "foobar"
47
- end
48
-
49
- it "instantiates a widget with explicit assigns" do
50
- @controller.index_with_explicit_assigns
51
- @response.body.should == "foobar"
52
- end
53
- end
54
-
55
- describe "#render :widget" do
56
- it "assigns to @rendered_widget" do
57
- @controller.rendered_widget.should be_nil
58
- @controller.render :widget => Erector::TestWidget
59
- @controller.rendered_widget.should be_instance_of(Erector::TestWidget)
60
- end
61
-
62
- it "instantiates a widget with explicit assigns" do
63
- @controller.index_with_render_colon_widget
64
- @response.body.should == "foobar"
65
- end
66
- end
67
- end
68
- end
@@ -1,29 +0,0 @@
1
- require File.expand_path("#{File.dirname(__FILE__)}/../../spec_helper")
2
-
3
- module TemplateHandlerSpec
4
-
5
- class TemplateHandlerSpecController < ActionController::Base
6
- end
7
-
8
- describe ActionView::TemplateHandlers::Erector do
9
-
10
- before do
11
- @controller = TemplateHandlerSpecController.new
12
- @request = ActionController::TestRequest.new
13
- @response = ActionController::TestResponse.new
14
- @controller.send(:initialize_template_class, @response)
15
- @controller.send(:assign_shortcuts, @request, @response)
16
- class << @controller
17
- public :rendered_widget, :render
18
- end
19
- @controller.append_view_path("#{RAILS_ROOT}/app/views")
20
- end
21
-
22
- it "assigns locals" do
23
- handler = ActionView::TemplateHandlers::Erector.new(@controller)
24
- handler.render("class Views::TemplateHandlerSpec::TestPartial", {:foo => "bar"}).should ==
25
- "<div class=\"partial\">bar</div>"
26
- end
27
- end
28
-
29
- end
@@ -1,149 +0,0 @@
1
- require File.expand_path("#{File.dirname(__FILE__)}/../spec_helper")
2
- require 'ostruct'
3
-
4
- module RailsHelpersSpec
5
-
6
- class RailsHelpersSpecController < ActionController::Base
7
- end
8
-
9
- describe "Rails helpers" do
10
-
11
- before do
12
- @controller = RailsHelpersSpecController.new
13
- @request = ActionController::TestRequest.new
14
- @response = ActionController::TestResponse.new
15
- @controller.send(:initialize_template_class, @response)
16
- @controller.send(:assign_shortcuts, @request, @response)
17
- @controller.send(:initialize_current_url)
18
- class << @controller
19
- public :rendered_widget, :render
20
-
21
- attr_accessor :user # dummy instance variable for assigns testing
22
- end
23
- @controller.append_view_path("#{RAILS_ROOT}/app/views")
24
- end
25
-
26
- describe "returning raw text" do
27
- it "image_tag" do
28
- class Erector::TestWidget < Erector::Widget
29
- def render
30
- image_tag("rails.png")
31
- end
32
- end
33
- @controller.render :widget => Erector::TestWidget
34
- @response.body.should == "<img alt=\"Rails\" src=\"/images/rails.png\" />"
35
- end
36
-
37
- it "javascript_include_tag" do
38
- class Erector::TestWidget < Erector::Widget
39
- def render
40
- javascript_include_tag("rails")
41
- end
42
- end
43
- @controller.render :widget => Erector::TestWidget
44
- @response.body.should == "<script src=\"/javascripts/rails.js\" type=\"text/javascript\"></script>"
45
- end
46
-
47
- it "define_javascript_functions" do
48
- class Erector::TestWidget < Erector::Widget
49
- def render
50
- define_javascript_functions
51
- end
52
- end
53
- @controller.render :widget => Erector::TestWidget
54
- @response.body.should =~ /^<script type=\"text\/javascript\">\n/
55
- end
56
-
57
- it "stylesheet_link_tag" do
58
- class Erector::TestWidget < Erector::Widget
59
- def render
60
- stylesheet_link_tag("rails")
61
- end
62
- end
63
- @controller.render :widget => Erector::TestWidget
64
- @response.body.should == "<link href=\"/stylesheets/rails.css\" media=\"screen\" rel=\"stylesheet\" type=\"text/css\" />"
65
- end
66
-
67
- def sortable_js_for(element_id, url)
68
- "Sortable.create(\"#{element_id}\", {onUpdate:function(){new Ajax.Request('#{url}', {asynchronous:true, evalScripts:true, parameters:Sortable.serialize(\"#{element_id}\")})}})"
69
- end
70
-
71
- it "sortable_element" do
72
- class Erector::TestWidget < Erector::Widget
73
- def render
74
- sortable_element("rails", :url => "/foo")
75
- end
76
- end
77
- @controller.render :widget => Erector::TestWidget
78
- @response.body.should ==
79
- "<script type=\"text/javascript\">\n//<![CDATA[\n" +
80
- sortable_js_for("rails", "/foo") +
81
- "\n//]]>\n</script>"
82
- end
83
-
84
- it "sortable_element_js" do
85
- class Erector::TestWidget < Erector::Widget
86
- def render
87
- sortable_element_js("rails", :url => "/foo")
88
- end
89
- end
90
- @controller.render :widget => Erector::TestWidget
91
- @response.body.should == sortable_js_for("rails", "/foo") + ";"
92
-
93
- end
94
-
95
- #Note: "text_field_with_auto_complete" is now a plugin, which makes it difficult to test inside the Erector project
96
- end
97
-
98
- # :link_to_function,
99
- # :link_to,
100
- # :link_to_remote,
101
- # :mail_to,
102
- # :button_to,
103
- # :submit_tag,
104
-
105
- describe "which html-escape their first parameter:" do
106
- it "link_to_function with name" do
107
- class Erector::TestWidget < Erector::Widget
108
- def render
109
- link_to_function("hi", "alert('hi')")
110
- end
111
- end
112
- @controller.render :widget => Erector::TestWidget
113
- @response.body.should == "<a href=\"#\" onclick=\"alert('hi'); return false;\">hi</a>"
114
- end
115
-
116
- it "link_to_function with block" do
117
- class Erector::TestWidget < Erector::Widget
118
- def render
119
- link_to_function("Show me more", nil, :id => "more_link") do |page|
120
- page[:details].visual_effect :toggle_blind
121
- page[:more_link].replace_html "Show me less"
122
- end
123
- end
124
- end
125
- @controller.render :widget => Erector::TestWidget
126
- @response.body.should == "<a href=\"#\" id=\"more_link\" onclick=\"$(&quot;details&quot;).visualEffect(&quot;toggle_blind&quot;);\n$(&quot;more_link&quot;).update(&quot;Show me less&quot;);; return false;\">Show me more</a>"
127
- end
128
- end
129
-
130
- describe "which render to the ERB stream:" do
131
- it "error_messages for, with object name" do
132
- pending("error_messages_for is broken")
133
- class Erector::TestWidget < Erector::Widget
134
- def render
135
- error_messages_for 'user'
136
- end
137
- end
138
- errors = ActiveRecord::Errors.new(nil)
139
- errors.add("name", "must be unpronounceable")
140
- @controller.user = OpenStruct.new({:name => 'bob', :errors => errors})
141
- @controller.render :widget => Erector::TestWidget
142
- @response.body.should == "<a href=\"#\" onclick=\"alert('hi'); return false;\">hi</a>"
143
- end
144
- end
145
-
146
- end
147
-
148
-
149
- end
@@ -1,102 +0,0 @@
1
- require File.dirname(__FILE__) + "/../spec_helper"
2
-
3
- describe "a view" do
4
- before(:each) do
5
- @view = ActionView::Base.new
6
- # hook in model and add error messages
7
- end
8
-
9
- describe "with errors" do
10
- before(:each) do
11
- class DummyView < ActionView::Base
12
- attr_accessor :model
13
- end
14
-
15
- class DummyModel
16
- # not sure what the best way is to mock out a model without
17
- # needing a database. But here's my attempt.
18
- attr_accessor :errors
19
-
20
- def self.human_attribute_name(attribute)
21
- attribute.to_s.capitalize
22
- end
23
- end
24
-
25
- @view = DummyView.new()
26
- model = DummyModel.new()
27
- model.errors = ActiveRecord::Errors.new(model)
28
- model.errors.add(:field, 'too silly')
29
- @view.model = model
30
- end
31
-
32
- it "was set up correctly" do
33
- @view.model.errors.full_messages.join(',').should == "Field too silly"
34
- end
35
-
36
- it "renders error messages" do
37
- pending("error_messages_for is broken") do
38
- message = Erector::Widget.new(@view) do
39
- error_messages_for(:model)
40
- end.to_s
41
- message.should include("too silly")
42
- message.should include("1 error")
43
- end
44
- end
45
-
46
- end
47
-
48
- it "renders links" do
49
- Erector::Widget.new(@view) do
50
- link_to 'This&that', '/foo?this=1&amp;that=1'
51
- end.to_s.should == "<a href=\"/foo?this=1&amp;that=1\">This&amp;that</a>"
52
- end
53
-
54
- it "#image_tag" do
55
- Erector::Widget.new(@view) do
56
- image_tag("/foo")
57
- end.to_s.should == %{<img alt="Foo" src="/foo" />}
58
- end
59
-
60
- it "#image_tag with parameters" do
61
- Erector::Widget.new(@view) do
62
- image_tag("/foo", :id => "photo_foo", :class => "a_photo_class")
63
- end.to_s.should == %{<img alt="Foo" class="a_photo_class" id="photo_foo" src="/foo" />}
64
- end
65
-
66
- it "renders non-forgery-protected forms via form_tag" do
67
- class << @view
68
- def protect_against_forgery?
69
- false
70
- end
71
- end
72
-
73
- Erector::Widget.new(@view) do
74
- form_tag("/foo") do
75
- p "I'm in a form"
76
- end
77
- end.to_s.should == "<form action=\"/foo\" method=\"post\"><p>I'm in a form</p></form>"
78
- end
79
-
80
- it "renders forgery-protected forms via form_tag" do
81
- class << @view
82
- def protect_against_forgery?
83
- true
84
- end
85
-
86
- def request_forgery_protection_token
87
-
88
- end
89
-
90
- def form_authenticity_token
91
- "token"
92
- end
93
- end
94
-
95
- Erector::Widget.new(@view) do
96
- form_tag("/foo") do
97
- p "I'm in a form"
98
- end
99
- end.to_s.should == "<form action=\"/foo\" method=\"post\"><div style=\"margin:0;padding:0\"><input name=\"\" type=\"hidden\" value=\"token\" /></div><p>I'm in a form</p></form>"
100
- end
101
- end
102
-
@@ -1,33 +0,0 @@
1
- require File.dirname(__FILE__) + "/../spec_helper"
2
-
3
- describe "a view" do
4
- before(:each) do
5
- @view = ActionView::Base.new
6
- # hook in model and add error messages
7
- end
8
-
9
- it "can capture with an erector block" do
10
- pending("needs some re-work (maybe how haml does it?)")
11
- message = Erector::Widget.new(@view) do
12
- captured = @helpers.capture do
13
- h1 'capture me!'
14
- end
15
- captured.should == "<h1>capture me!</h1>"
16
- end.to_s.should == ""
17
- end
18
-
19
- end
20
-
21
- describe "the case which fake_erbout handles" do
22
- it "works" do
23
- @view = ActionView::Base.new
24
- Erector::Widget.new(@view) do
25
- foo = capture() do
26
- fake_erbout do
27
- helpers.concat('foo')
28
- end
29
- end
30
- foo.should == 'foo'
31
- end.to_s.should == ""
32
- end
33
- end
@@ -1,30 +0,0 @@
1
- module ViewCaching
2
- def self.included(mod)
3
- mod.extend ClassMethods
4
- end
5
- module ClassMethods
6
- def view_cache
7
- @view_cache ||= {}
8
- end
9
- end
10
-
11
- def view_cache(&blk)
12
- cache = self.class.view_cache
13
- if cache.empty?
14
- cache[:body] = @body = yield
15
- cache[:doc] = @doc = Hpricot(@body)
16
- else
17
- @body = cache[:body]
18
- @doc = cache[:doc]
19
- end
20
- end
21
-
22
- def doc
23
- @doc
24
- end
25
-
26
- def body
27
- @body
28
- end
29
- alias_method :html, :body
30
- end
@@ -1,8 +0,0 @@
1
- class Views::TemplateHandlerSpec::TestPage < Erector::Widget
2
- def render
3
- div :class => 'page' do
4
- p @foo
5
- helpers.render :partial => 'test_partial', :locals => {:foo => @foo}
6
- end
7
- end
8
- end