fortitude 0.0.7-java → 0.0.9-java
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGES.md +73 -0
- data/CONTRIBUTORS.md +17 -0
- data/ext/com/fortituderuby/ext/fortitude/FortitudeNativeLibrary.java +23 -7
- data/ext/fortitude_native_ext/fortitude_native_ext.c +91 -54
- data/lib/fortitude/doctypes/html4.rb +4 -0
- data/lib/fortitude/doctypes/html5.rb +4 -0
- data/lib/fortitude/doctypes/unknown_doctype.rb +4 -0
- data/lib/fortitude/doctypes/xhtml10.rb +4 -0
- data/lib/fortitude/doctypes/xhtml11.rb +4 -0
- data/lib/fortitude/erector.rb +1 -0
- data/lib/fortitude/errors.rb +16 -0
- data/lib/fortitude/extensions/fortitude_ruby_ext.rb +27 -12
- data/lib/fortitude/method_templates/assign_locals_from_template.rb.smpl +2 -0
- data/lib/fortitude/method_templates/need_assignment_template.rb.smpl +2 -2
- data/lib/fortitude/method_templates/simple_compiled_template.rb +94 -0
- data/lib/fortitude/method_templates/tag_method_template.rb.smpl +4 -4
- data/lib/fortitude/method_templates/text_method_template.rb.smpl +2 -2
- data/lib/fortitude/rails/railtie.rb +5 -1
- data/lib/fortitude/rails/rendering_methods.rb +66 -47
- data/lib/fortitude/rails/template_handler.rb +0 -1
- data/lib/fortitude/rendering_context.rb +2 -2
- data/lib/fortitude/tags/tag.rb +4 -3
- data/lib/fortitude/version.rb +1 -1
- data/lib/fortitude/widget.rb +1 -1
- data/lib/fortitude/widget/content.rb +1 -1
- data/lib/fortitude/widget/integration.rb +12 -3
- data/lib/fortitude/widget/localization.rb +1 -37
- data/lib/fortitude/widget/needs.rb +41 -12
- data/lib/fortitude/widget/rendering.rb +25 -7
- data/lib/fortitude/widget/start_and_end_comments.rb +1 -0
- data/lib/fortitude/widget/tags.rb +2 -1
- data/lib/fortitude/widget/widget_class_inheritable_attributes.rb +1 -0
- data/lib/fortitude_jruby_native_ext.jar +0 -0
- data/spec/helpers/system_helpers.rb +4 -0
- data/spec/rails/class_loading_system_spec.rb +10 -2
- data/spec/rails/development_mode_system_spec.rb +91 -0
- data/spec/rails/erector_coexistence_system_spec.rb +16 -0
- data/spec/rails/layouts_system_spec.rb +8 -3
- data/spec/rails/rendering_system_spec.rb +24 -2
- data/spec/rails/templates/class_loading_system_spec/app/controllers/class_loading_system_spec_controller.rb +6 -2
- data/spec/rails/templates/class_loading_system_spec/app/views/class_loading_system_spec/_foo.rb +5 -0
- data/spec/rails/templates/class_loading_system_spec/app/views/class_loading_system_spec/bar.html.rb +5 -0
- data/spec/rails/templates/class_loading_system_spec/app/views/class_loading_system_spec/bar.rb +5 -0
- data/spec/rails/templates/class_loading_system_spec/app/views/class_loading_system_spec/foo.rb +5 -0
- data/spec/rails/templates/development_mode_system_spec/app/controllers/development_mode_system_spec_controller.rb +4 -0
- data/spec/rails/templates/development_mode_system_spec/app/views/base.rb +5 -0
- data/spec/rails/templates/development_mode_system_spec/app/views/development_mode_system_spec/form.rb +11 -0
- data/spec/rails/templates/erector_coexistence_system_spec/app/controllers/erector_coexistence_system_spec_controller.rb +16 -0
- data/spec/rails/templates/erector_coexistence_system_spec/app/views/erector_widget.rb +5 -0
- data/spec/rails/templates/erector_coexistence_system_spec/app/views/fortitude_widget.rb +5 -0
- data/spec/rails/templates/localization_system_spec/app/views/localization_system_spec/content_method.rb +2 -0
- data/spec/rails/templates/rendering_system_spec/app/controllers/rendering_system_spec_controller.rb +14 -1
- data/spec/rails/templates/rendering_system_spec/app/helpers/application_helper.rb +5 -0
- data/spec/rails/templates/rendering_system_spec/app/views/widget_to_render_class_only.rb +5 -0
- data/spec/rails/templates/rendering_system_spec/app/views/widget_to_render_with_helper.rb +5 -0
- data/spec/system/doctypes_system_spec.rb +30 -8
- data/spec/system/erector_compatibility_system_spec.rb +27 -0
- data/spec/system/localization_system_spec.rb +4 -0
- data/spec/system/needs_system_spec.rb +31 -0
- data/spec/system/rebuild_notifications_system_spec.rb +180 -85
- data/spec/system/setting_inheritance_system_spec.rb +47 -0
- data/spec/system/static_method_system_spec.rb +2 -0
- data/spec/system/tag_rendering_system_spec.rb +41 -0
- data/spec/system/void_tags_system_spec.rb +1 -0
- data/spec/system/yield_system_spec.rb +188 -0
- metadata +27 -5
- data/lib/fortitude/method_templates/simple_template.rb +0 -50
- data/spec/rails/templates/class_loading_system_spec/app/views/class_loading_system_spec/_underscore_widget.rb +0 -11
@@ -6,43 +6,7 @@ module Fortitude
|
|
6
6
|
module Localization
|
7
7
|
extend ActiveSupport::Concern
|
8
8
|
|
9
|
-
|
10
|
-
# RUBY CALLBACK
|
11
|
-
def method_added(method_name)
|
12
|
-
super(method_name)
|
13
|
-
check_localized_methods!
|
14
|
-
end
|
15
|
-
|
16
|
-
# RUBY CALLBACK
|
17
|
-
def method_removed(method_name)
|
18
|
-
super(method_name)
|
19
|
-
check_localized_methods!
|
20
|
-
end
|
21
|
-
|
22
|
-
# RUBY CALL
|
23
|
-
def include(*args)
|
24
|
-
super(*args)
|
25
|
-
check_localized_methods!
|
26
|
-
end
|
27
|
-
|
28
|
-
LOCALIZED_CONTENT_PREFIX = "localized_content_"
|
29
|
-
|
30
|
-
# INTERNAL USE ONLY
|
31
|
-
def check_localized_methods!(original_class = self)
|
32
|
-
currently_has = instance_methods(true).detect { |i| i =~ /^#{LOCALIZED_CONTENT_PREFIX}/i }
|
33
|
-
if currently_has != @last_localized_methods_check_has
|
34
|
-
@last_localized_methods_check_has = currently_has
|
35
|
-
rebuild_run_content!(:localized_methods_presence_changed, original_class)
|
36
|
-
end
|
37
|
-
direct_subclasses.each { |s| s.check_localized_methods!(original_class) }
|
38
|
-
end
|
39
|
-
|
40
|
-
# INTERNAL USE ONLY
|
41
|
-
def has_localized_content_methods?
|
42
|
-
!! (instance_methods(true).detect { |i| i =~ /^#{LOCALIZED_CONTENT_PREFIX}/i })
|
43
|
-
end
|
44
|
-
private :has_localized_content_methods?
|
45
|
-
end
|
9
|
+
LOCALIZED_CONTENT_PREFIX = "localized_content_"
|
46
10
|
|
47
11
|
# PUBLIC API
|
48
12
|
def t(key, *args)
|
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'active_support'
|
2
2
|
require 'active_support/concern'
|
3
3
|
|
4
|
-
require 'fortitude/method_templates/
|
4
|
+
require 'fortitude/method_templates/simple_compiled_template'
|
5
5
|
require 'fortitude/support/assigns_proxy'
|
6
6
|
|
7
7
|
module Fortitude
|
@@ -45,7 +45,7 @@ module Fortitude
|
|
45
45
|
@this_class_needs[name] = default_value.freeze
|
46
46
|
end
|
47
47
|
|
48
|
-
|
48
|
+
invalidate_needs!(:need_declared)
|
49
49
|
|
50
50
|
needs_as_hash
|
51
51
|
end
|
@@ -65,11 +65,11 @@ module Fortitude
|
|
65
65
|
end
|
66
66
|
|
67
67
|
# INTERNAL USE ONLY
|
68
|
-
def
|
69
|
-
|
68
|
+
def invalidate_needs!(why, klass = self)
|
69
|
+
invalidating(:needs, why, klass) do
|
70
70
|
@_fortitude_needs_as_hash = nil
|
71
|
-
|
72
|
-
direct_subclasses.each { |s| s.
|
71
|
+
invalidate_my_needs_methods!
|
72
|
+
direct_subclasses.each { |s| s.invalidate_needs!(why, klass) }
|
73
73
|
end
|
74
74
|
end
|
75
75
|
|
@@ -96,30 +96,59 @@ module Fortitude
|
|
96
96
|
end
|
97
97
|
|
98
98
|
# INTERNAL USE ONLY
|
99
|
+
def invalidate_my_needs_methods!
|
100
|
+
@_fortitude_my_needs_methods_valid = false
|
101
|
+
end
|
102
|
+
|
103
|
+
def ensure_needs_methods_are_valid!(originating_class = self)
|
104
|
+
out = false
|
105
|
+
out ||= superclass.ensure_needs_methods_are_valid!(originating_class) if superclass.respond_to?(:ensure_needs_methods_are_valid!)
|
106
|
+
|
107
|
+
unless @_fortitude_my_needs_methods_valid
|
108
|
+
rebuilding(:needs, :invalid, originating_class) do
|
109
|
+
rebuild_my_needs_methods!
|
110
|
+
@_fortitude_my_needs_methods_valid = true
|
111
|
+
end
|
112
|
+
|
113
|
+
out = true
|
114
|
+
end
|
115
|
+
|
116
|
+
out
|
117
|
+
end
|
118
|
+
|
99
119
|
def rebuild_my_needs_methods!
|
100
120
|
n = needs_as_hash
|
101
121
|
|
122
|
+
start_time = Time.now
|
102
123
|
needs_text = n.map do |need, default_value|
|
103
|
-
Fortitude::MethodTemplates::
|
124
|
+
Fortitude::MethodTemplates::SimpleCompiledTemplate.template('need_assignment_template').result(:extra_assigns => extra_assigns,
|
104
125
|
:need => need, :has_default => (default_value != REQUIRED_NEED),
|
105
126
|
:ivar_name => instance_variable_name_for_need(need)
|
106
127
|
)
|
107
128
|
end.join("\n\n")
|
108
129
|
|
109
|
-
assign_locals_from_text = Fortitude::MethodTemplates::
|
130
|
+
assign_locals_from_text = Fortitude::MethodTemplates::SimpleCompiledTemplate.template('assign_locals_from_template').result(
|
110
131
|
:extra_assigns => extra_assigns, :needs_text => needs_text)
|
111
|
-
class_eval(assign_locals_from_text)
|
112
132
|
|
133
|
+
needs_methods_text = ""
|
113
134
|
n.each do |need, default_value|
|
114
|
-
|
135
|
+
needs_methods_text << (Fortitude::MethodTemplates::SimpleCompiledTemplate.template('need_method_template').result(
|
115
136
|
:need => need, :ivar_name => instance_variable_name_for_need(need),
|
116
|
-
:debug => self.debug)
|
117
|
-
needs_module.module_eval(text)
|
137
|
+
:debug => self.debug))
|
118
138
|
end
|
139
|
+
|
140
|
+
class_eval(assign_locals_from_text)
|
141
|
+
needs_module.module_eval(needs_methods_text)
|
119
142
|
end
|
143
|
+
|
120
144
|
private :rebuild_my_needs_methods!
|
121
145
|
end
|
122
146
|
|
147
|
+
def assign_locals_from(assigns)
|
148
|
+
self.class.ensure_needs_methods_are_valid!
|
149
|
+
assign_locals_from(assigns)
|
150
|
+
end
|
151
|
+
|
123
152
|
# PUBLIC API
|
124
153
|
def shared_variables
|
125
154
|
@_fortitude_rendering_context.instance_variable_set
|
@@ -23,17 +23,19 @@ module Fortitude
|
|
23
23
|
end
|
24
24
|
end
|
25
25
|
|
26
|
-
def render_to(rendering_context)
|
26
|
+
def render_to(rendering_context, &block_for_content_method)
|
27
27
|
@_fortitude_rendering_context = rendering_context
|
28
28
|
@_fortitude_output_buffer_holder = rendering_context.output_buffer_holder
|
29
|
+
@_fortitude_block_for_content_method = block_for_content_method
|
29
30
|
|
30
|
-
block = lambda { |*args|
|
31
|
+
block = lambda { |*args| yield_from_widget(*args) }
|
31
32
|
|
32
33
|
rendering_context.record_widget(self) do
|
33
34
|
begin
|
34
35
|
run_content(&block)
|
35
36
|
ensure
|
36
37
|
@_fortitude_rendering_context = nil
|
38
|
+
@_fortitude_block_for_content_method = nil
|
37
39
|
end
|
38
40
|
end
|
39
41
|
end
|
@@ -50,12 +52,12 @@ module Fortitude
|
|
50
52
|
end
|
51
53
|
|
52
54
|
# PUBLIC API
|
53
|
-
def widget(w, hash = nil)
|
55
|
+
def widget(w, hash = nil, &block)
|
54
56
|
if w.respond_to?(:render_to)
|
55
|
-
w.render_to(@_fortitude_rendering_context)
|
57
|
+
w.render_to(@_fortitude_rendering_context, &block)
|
56
58
|
elsif w.kind_of?(Class)
|
57
59
|
hash ||= { }
|
58
|
-
w.new(hash).render_to(@_fortitude_rendering_context)
|
60
|
+
w.new(hash, &block).render_to(@_fortitude_rendering_context)
|
59
61
|
else
|
60
62
|
raise "You tried to render a widget, but this is not valid: #{w.inspect}(#{hash.inspect})"
|
61
63
|
end
|
@@ -67,8 +69,9 @@ module Fortitude
|
|
67
69
|
end
|
68
70
|
|
69
71
|
# PUBLIC API
|
70
|
-
def initialize(assigns = { })
|
72
|
+
def initialize(assigns = { }, &block)
|
71
73
|
assign_locals_from(assigns)
|
74
|
+
@_fortitude_constructor_block = block
|
72
75
|
end
|
73
76
|
|
74
77
|
# INTERNAL USE ONLY
|
@@ -96,9 +99,24 @@ module Fortitude
|
|
96
99
|
end
|
97
100
|
private :_fortitude_class_for_new_buffer
|
98
101
|
|
102
|
+
def _fortitude_yield_from_widget(*args)
|
103
|
+
if @_fortitude_block_for_content_method
|
104
|
+
@_fortitude_block_for_content_method.call(*args)
|
105
|
+
elsif @_fortitude_constructor_block
|
106
|
+
@_fortitude_constructor_block.call(*args)
|
107
|
+
else
|
108
|
+
@_fortitude_rendering_context.yield_from_widget(*args)
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
99
112
|
# PUBLIC API
|
100
113
|
def yield_from_widget(*args)
|
101
|
-
|
114
|
+
_fortitude_yield_from_widget(self, *args)
|
115
|
+
end
|
116
|
+
|
117
|
+
# PUBLIC API (Erector compatibility)
|
118
|
+
def call_block
|
119
|
+
_fortitude_yield_from_widget
|
102
120
|
end
|
103
121
|
end
|
104
122
|
end
|
@@ -35,6 +35,7 @@ module Fortitude
|
|
35
35
|
out << "(DEFAULT) " if assigns.is_default?(assign)
|
36
36
|
|
37
37
|
value_string = if value.respond_to?(:to_fortitude_comment_string) then value.to_fortitude_comment_string else value.inspect end
|
38
|
+
value_string ||= ''
|
38
39
|
if value_string.length > MAX_START_COMMENT_VALUE_STRING_LENGTH
|
39
40
|
value_string = value_string[0..(MAX_START_COMMENT_VALUE_STRING_LENGTH - START_COMMENT_VALUE_STRING_TOO_LONG_ELLIPSIS.length)] + START_COMMENT_VALUE_STRING_TOO_LONG_ELLIPSIS
|
40
41
|
end
|
@@ -48,7 +48,8 @@ module Fortitude
|
|
48
48
|
:record_emitting_tag => self._fortitude_record_emitting_tag?,
|
49
49
|
:enforce_attribute_rules => self.enforce_attribute_rules,
|
50
50
|
:enforce_id_uniqueness => self.enforce_id_uniqueness,
|
51
|
-
:close_void_tags => self.close_void_tags
|
51
|
+
:close_void_tags => self.close_void_tags,
|
52
|
+
:allows_bare_attributes => self.doctype.allows_bare_attributes?)
|
52
53
|
end
|
53
54
|
|
54
55
|
direct_subclasses.each { |s| s.rebuild_tag_methods!(why, which_tags_in, klass) }
|
Binary file
|
@@ -45,10 +45,18 @@ describe "Rails class-loading support", :type => :rails do
|
|
45
45
|
expect_exception('underscore_view', 'ActionView::MissingTemplate', /class_loading_system_spec\/underscore_view/)
|
46
46
|
end
|
47
47
|
|
48
|
-
it "should
|
49
|
-
|
48
|
+
it "should prefer widgets defined in a file without an underscore to those with" do
|
49
|
+
expect_match('foo', /foo WITHOUT underscore/)
|
50
50
|
end
|
51
51
|
|
52
|
+
it "should prefer widgets ending in .html.rb to those just ending in .rb" do
|
53
|
+
expect_match('bar', /bar WITH html/)
|
54
|
+
end
|
55
|
+
|
56
|
+
# it "should not let me define a widget in a file starting with an underscore, and autoload it" do
|
57
|
+
# expect_exception('underscore_widget', 'NameError', /uninitialized constant Views::ClassLoadingSystemSpec::UnderscoreWidget/)
|
58
|
+
# end
|
59
|
+
|
52
60
|
it "should not let me 'require' files in app/views without a views/ prefix" do
|
53
61
|
expect_exception('require_loaded_underscore_widget_without_views', 'LoadError', /(cannot load such file|no such file to load)/)
|
54
62
|
end
|
@@ -82,7 +82,98 @@ describe "Rails development-mode support", :type => :rails do
|
|
82
82
|
expect_match("namespace_reference", /before.*referenced.*after/mi)
|
83
83
|
end
|
84
84
|
|
85
|
+
it "should allow you to toggle back and forth between two forms of referencing a superclass" do
|
86
|
+
current_form = :full_reference
|
87
|
+
5.times do
|
88
|
+
if current_form == :full_reference
|
89
|
+
splat_full_reference_edit!
|
90
|
+
else
|
91
|
+
splat_partial_reference_edit!
|
92
|
+
end
|
93
|
+
|
94
|
+
sleep 1
|
95
|
+
$stderr.puts "checking for #{current_form.inspect}"
|
96
|
+
expect_match("edit", /#{Regexp.escape(current_form.to_s)}/i)
|
97
|
+
|
98
|
+
current_form = if current_form == :full_reference
|
99
|
+
:partial_reference
|
100
|
+
else
|
101
|
+
:full_reference
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
85
106
|
private
|
107
|
+
def splat_full_reference_edit!
|
108
|
+
widget_file = File.join(rails_server.rails_root, "app/views/development_mode_system_spec/edit.rb")
|
109
|
+
File.open(widget_file, 'w') do |f|
|
110
|
+
f.puts <<-EOS
|
111
|
+
module Views
|
112
|
+
module DevelopmentModeSystemSpec
|
113
|
+
if const_defined?(:Edit)
|
114
|
+
$stderr.puts "(full) Edit constant: \#{const_get(:Edit).inspect}"
|
115
|
+
$stderr.puts "(full) Edit superclass: \#{const_get(:Edit).superclass}/\#{const_get(:Edit).superclass.object_id}"
|
116
|
+
|
117
|
+
if (::Views.const_defined?(:Base))
|
118
|
+
$stderr.puts "(full) Views::Base already defined: \#{::Views::Base.object_id}"
|
119
|
+
else
|
120
|
+
$stderr.puts "(full) Views::Base not defined"
|
121
|
+
end
|
122
|
+
|
123
|
+
$stderr.puts "(full) ::Views::Base: \#{::Views::Base.name}/\#{::Views::Base.object_id}"
|
124
|
+
$stderr.puts "(full) Views::Base: \#{Views::Base.name}/\#{Views::Base.object_id}"
|
125
|
+
else
|
126
|
+
$stderr.puts "(full) No edit constant!"
|
127
|
+
end
|
128
|
+
|
129
|
+
class Edit < Views::Base
|
130
|
+
def content
|
131
|
+
widget(Views::DevelopmentModeSystemSpec::Form, :label => "full_reference")
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
135
|
+
$stderr.puts "(full) After definition: \#{::Views::Base.object_id}"
|
136
|
+
end
|
137
|
+
end
|
138
|
+
EOS
|
139
|
+
end
|
140
|
+
end
|
141
|
+
|
142
|
+
def splat_partial_reference_edit!
|
143
|
+
widget_file = File.join(rails_server.rails_root, "app/views/development_mode_system_spec/edit.rb")
|
144
|
+
File.open(widget_file, 'w') do |f|
|
145
|
+
f.puts <<-EOS
|
146
|
+
module Views
|
147
|
+
module DevelopmentModeSystemSpec
|
148
|
+
if const_defined?(:Edit)
|
149
|
+
$stderr.puts "(partial) Edit constant: \#{const_get(:Edit).inspect}"
|
150
|
+
$stderr.puts "(partial) Edit superclass: \#{const_get(:Edit).superclass}/\#{const_get(:Edit).superclass.object_id}"
|
151
|
+
|
152
|
+
if (::Views.const_defined?(:Base))
|
153
|
+
$stderr.puts "(partial) Views::Base already defined: \#{::Views::Base.object_id}"
|
154
|
+
else
|
155
|
+
$stderr.puts "(partial) Views::Base not defined"
|
156
|
+
end
|
157
|
+
|
158
|
+
$stderr.puts "(partial) ::Views::Base: \#{::Views::Base.name}/\#{::Views::Base.object_id}"
|
159
|
+
$stderr.puts "(partial) Views::Base: \#{Views::Base.name}/\#{Views::Base.object_id}"
|
160
|
+
else
|
161
|
+
$stderr.puts "(partial) No edit constant!"
|
162
|
+
end
|
163
|
+
|
164
|
+
class Edit < Views::Base
|
165
|
+
def content
|
166
|
+
widget(Form, :label => "partial_reference")
|
167
|
+
end
|
168
|
+
end
|
169
|
+
|
170
|
+
$stderr.puts "(partial) After definition: \#{::Views::Base.object_id}"
|
171
|
+
end
|
172
|
+
end
|
173
|
+
EOS
|
174
|
+
end
|
175
|
+
end
|
176
|
+
|
86
177
|
def splat_new_widget!
|
87
178
|
reload_file = File.join(rails_server.rails_root, 'app/views/development_mode_system_spec/reload_widget.rb')
|
88
179
|
File.open(reload_file, 'w') do |f|
|
@@ -29,5 +29,21 @@ describe "Erector coexistence support", :type => :rails do
|
|
29
29
|
it "should be able to render an Erector widget in app/v/views" do
|
30
30
|
expect_match("erector_widget_in_app_v_views", /<p\s+class\s*=\s*"some_class"\s*>this is Erector: foo = quux<\/p>/)
|
31
31
|
end
|
32
|
+
|
33
|
+
it "should be able to render a Fortitude widget using render :widget" do
|
34
|
+
expect_match("render_widget_fortitude", /this is a Fortitude widget/)
|
35
|
+
end
|
36
|
+
|
37
|
+
it "should be able to render an Erector widget using render :widget" do
|
38
|
+
expect_match("render_widget_erector", /this is an Erector widget/, :no_layout => true)
|
39
|
+
end
|
40
|
+
|
41
|
+
it "should be able to render a Fortitude widget with just a class using render :widget" do
|
42
|
+
expect_match("render_widget_fortitude_class", /this is a Fortitude widget/)
|
43
|
+
end
|
44
|
+
|
45
|
+
it "should be able to render an Erector widget with just a class using render :widget" do
|
46
|
+
expect_match("render_widget_erector_class", /this is an Erector widget/, :no_layout => true)
|
47
|
+
end
|
32
48
|
end
|
33
49
|
end
|
@@ -41,9 +41,14 @@ describe "Rails layout support", :type => :rails do
|
|
41
41
|
end
|
42
42
|
|
43
43
|
it "should let you turn off the layout with render :widget" do
|
44
|
-
|
45
|
-
|
46
|
-
|
44
|
+
unless rails_server.rails_version =~ /^3\.[01]\./
|
45
|
+
# Rails 3.0 and 3.1 simply don't pass the ":layout => false" option specified in the controller through to
|
46
|
+
# the renderer we add using ::ActionController.add_renderer. There's really nothing we can do about this,
|
47
|
+
# so we let this one particular case fail; it seems like a bug in Rails, not in our code.
|
48
|
+
data = get("render_widget_without_layout")
|
49
|
+
data.should_not match(/default_layout_erb/i)
|
50
|
+
data.should match(/this is the_render_widget/i)
|
51
|
+
end
|
47
52
|
end
|
48
53
|
|
49
54
|
it "should let you pick an alternate layout for render :widget" do
|
@@ -15,9 +15,31 @@ describe "Rails rendering support", :type => :rails do
|
|
15
15
|
expect(data).to match(/oop_rails_server_base_template/)
|
16
16
|
end
|
17
17
|
|
18
|
+
it "should always set a content-type of text/html when using 'render :widget'" do
|
19
|
+
response = get_response("render_widget")
|
20
|
+
expect(response['Content-Type']).to match(/^text\/html/)
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should let you use view helpers from within a widget passed to 'render :widget =>'" do
|
24
|
+
expect_match("render_widget_with_helper", /hello from a widget named Judy/)
|
25
|
+
end
|
26
|
+
|
27
|
+
it "should let you specify just a widget class with 'render :widget =>'" do
|
28
|
+
expect_match("render_widget_class_only", /hello from a simple widget/)
|
29
|
+
end
|
30
|
+
|
31
|
+
it "should let you specify just a widget class with 'render :widget =>', and pass assigns to it" do
|
32
|
+
expect_match("render_widget_class_and_assigns", /hello from a widget named Yaravan/)
|
33
|
+
end
|
34
|
+
|
18
35
|
it "should let you omit the layout with 'render :widget =>', if you ask for it" do
|
19
|
-
|
20
|
-
|
36
|
+
unless rails_server.rails_version =~ /^3\.[01]\./
|
37
|
+
# Rails 3.0 and 3.1 simply don't pass the ":layout => false" option specified in the controller through to
|
38
|
+
# the renderer we add using ::ActionController.add_renderer. There's really nothing we can do about this,
|
39
|
+
# so we let this one particular case fail; it seems like a bug in Rails, not in our code.
|
40
|
+
data = expect_match("render_widget_without_layout", /hello from a widget named Fred/, :no_layout => true)
|
41
|
+
expect(data).not_to match(/oop_rails_server_base_template/)
|
42
|
+
end
|
21
43
|
end
|
22
44
|
|
23
45
|
it "should set the Content-Type to text/html when using render :widget" do
|