fortitude 0.0.7-java → 0.0.9-java
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.
- 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
@@ -25,7 +25,7 @@ end
|
|
25
25
|
const_set(constant_name, value)
|
26
26
|
end
|
27
27
|
|
28
|
-
def fortitude_append_as_attributes(output, prefix)
|
28
|
+
def fortitude_append_as_attributes(output, prefix, allows_bare_attributes)
|
29
29
|
raise ArgumentError, "You can only append to a String" unless output.kind_of?(String)
|
30
30
|
|
31
31
|
target = ::Hash::TARGET_BASE.dup
|
@@ -39,20 +39,35 @@ end
|
|
39
39
|
end
|
40
40
|
|
41
41
|
new_prefix.original_concat(::Hash::FORTITUDE_HYPHEN)
|
42
|
-
value.fortitude_append_as_attributes(target, new_prefix)
|
42
|
+
value.fortitude_append_as_attributes(target, new_prefix, allows_bare_attributes)
|
43
43
|
else
|
44
|
-
|
44
|
+
if value == nil || value == false
|
45
|
+
# nothing
|
46
|
+
else
|
47
|
+
target.original_concat(::Hash::FORTITUDE_SPACE)
|
45
48
|
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
49
|
+
case prefix
|
50
|
+
when String then target.original_concat(prefix)
|
51
|
+
when nil then nil
|
52
|
+
else raise ArgumentError, "You can only use a String as a prefix"
|
53
|
+
end
|
51
54
|
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
55
|
+
fortitude_append_to(key, target)
|
56
|
+
|
57
|
+
if value == true
|
58
|
+
if allows_bare_attributes
|
59
|
+
# nothing here
|
60
|
+
else
|
61
|
+
target.original_concat(::Hash::FORTITUDE_EQUALS_QUOTE)
|
62
|
+
fortitude_append_to(key, target)
|
63
|
+
target.original_concat(::Hash::FORTITUDE_QUOTE)
|
64
|
+
end
|
65
|
+
else
|
66
|
+
target.original_concat(::Hash::FORTITUDE_EQUALS_QUOTE)
|
67
|
+
fortitude_append_to(value, target)
|
68
|
+
target.original_concat(::Hash::FORTITUDE_QUOTE)
|
69
|
+
end
|
70
|
+
end
|
56
71
|
end
|
57
72
|
end
|
58
73
|
|
@@ -1,4 +1,6 @@
|
|
1
1
|
def assign_locals_from(assigns)
|
2
|
+
return assign_locals_from(assigns) if self.class.ensure_needs_methods_are_valid!
|
3
|
+
|
2
4
|
@_fortitude_raw_assigns = assigns
|
3
5
|
@_fortitude_raw_assigns = @_fortitude_raw_assigns.delete_if { |k,v| ! self.class.is_valid_ruby_method_name?(k) } # :if extra_assigns == :use
|
4
6
|
@_fortitude_default_assigns = { }
|
@@ -2,9 +2,9 @@
|
|
2
2
|
@_fortitude_extra_assigns.delete(:#{need}) # :if [ :error, :use ].include?(extra_assigns)
|
3
3
|
|
4
4
|
value = assigns.fetch(:#{need}, NOT_PRESENT_NEED)
|
5
|
-
if value
|
5
|
+
if value.equal?(NOT_PRESENT_NEED)
|
6
6
|
value = assigns.fetch('#{need}', NOT_PRESENT_NEED)
|
7
|
-
if value
|
7
|
+
if value.equal?(NOT_PRESENT_NEED)
|
8
8
|
value = nil # :if ! has_default
|
9
9
|
missing << :#{need} # :if ! has_default
|
10
10
|
have_missing = true # :if ! has_default
|
@@ -0,0 +1,94 @@
|
|
1
|
+
require 'active_support'
|
2
|
+
require 'active_support/core_ext/hash'
|
3
|
+
|
4
|
+
module Fortitude
|
5
|
+
module MethodTemplates
|
6
|
+
class SimpleCompiledTemplate
|
7
|
+
class << self
|
8
|
+
def template(name)
|
9
|
+
@templates ||= { }
|
10
|
+
@templates[name] ||= new(File.join(File.dirname(__FILE__), "#{name}.rb.smpl"))
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def initialize(source_file)
|
15
|
+
@source_file = source_file
|
16
|
+
method_text_lines = [
|
17
|
+
"def result",
|
18
|
+
" output = ''"
|
19
|
+
]
|
20
|
+
pending_fixed_strings = [ ]
|
21
|
+
|
22
|
+
File.read(source_file).split(/\r\n|\r|\n/).each do |line|
|
23
|
+
needs_end = false
|
24
|
+
line = line.chomp
|
25
|
+
|
26
|
+
if line =~ /^(.*)\#\s*\:if\s*(.*?)\s*$/i
|
27
|
+
if pending_fixed_strings.length > 0
|
28
|
+
method_text_lines << " output << <<EOS"
|
29
|
+
method_text_lines += pending_fixed_strings
|
30
|
+
method_text_lines << "EOS"
|
31
|
+
pending_fixed_strings = [ ]
|
32
|
+
end
|
33
|
+
|
34
|
+
line = $1
|
35
|
+
condition = $2
|
36
|
+
method_text_lines << " if #{condition}"
|
37
|
+
method_text_lines << " output << <<EOS"
|
38
|
+
method_text_lines << line
|
39
|
+
method_text_lines << "EOS"
|
40
|
+
method_text_lines << " end"
|
41
|
+
else
|
42
|
+
pending_fixed_strings << line
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
if pending_fixed_strings.length > 0
|
47
|
+
method_text_lines << " output << <<EOS"
|
48
|
+
method_text_lines += pending_fixed_strings
|
49
|
+
method_text_lines << "EOS"
|
50
|
+
pending_fixed_strings = [ ]
|
51
|
+
end
|
52
|
+
|
53
|
+
method_text_lines << " output"
|
54
|
+
method_text_lines << "end"
|
55
|
+
|
56
|
+
@method_text = method_text_lines.join("\n")
|
57
|
+
@evaluation_object = EvaluationObject.new
|
58
|
+
metaclass = (class << @evaluation_object; self; end)
|
59
|
+
metaclass.class_eval(method_text_lines.join("\n"))
|
60
|
+
end
|
61
|
+
|
62
|
+
class EvaluationObject
|
63
|
+
def initialize
|
64
|
+
@hash = nil
|
65
|
+
end
|
66
|
+
|
67
|
+
def hash=(h)
|
68
|
+
@hash = h.symbolize_keys
|
69
|
+
end
|
70
|
+
|
71
|
+
def define_hash_method!(name)
|
72
|
+
symbol_name = name.to_sym
|
73
|
+
string_name = name.to_s
|
74
|
+
|
75
|
+
metaclass = (class << self; self; end)
|
76
|
+
metaclass.send(:define_method, name) do
|
77
|
+
@hash[symbol_name]
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
def method_missing(name, *args)
|
82
|
+
define_hash_method!(name)
|
83
|
+
send(name, *args)
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
def result(bindings)
|
88
|
+
@evaluation_object.hash = bindings
|
89
|
+
out = @evaluation_object.result
|
90
|
+
out
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
@@ -23,7 +23,7 @@ def #{method_name}(content_or_attributes = nil, attributes = nil)
|
|
23
23
|
this_tag.validate_attributes(self, content_or_attributes) # :if needs_attribute_rules
|
24
24
|
this_tag.validate_id_uniqueness(self, content_or_attributes) # :if needs_id_uniqueness
|
25
25
|
o.#{concat_method}(#{partial_open_const})
|
26
|
-
content_or_attributes.fortitude_append_as_attributes(o, nil)
|
26
|
+
content_or_attributes.fortitude_append_as_attributes(o, nil, #{allows_bare_attributes})
|
27
27
|
|
28
28
|
if block_given?
|
29
29
|
_fortitude_raise_no_content_allowed_error(#{tag_object_const}) # :if ! content_allowed
|
@@ -36,7 +36,7 @@ def #{method_name}(content_or_attributes = nil, attributes = nil)
|
|
36
36
|
elsif (! attributes)
|
37
37
|
_fortitude_raise_no_content_allowed_error(#{tag_object_const}) # :if ! content_allowed
|
38
38
|
o.#{concat_method}(#{open_const})
|
39
|
-
rc.emitting_tag!(self, FORTITUDE_TEXT_PSEUDOTAG, content_or_attributes, nil) { } unless content_or_attributes.instance_variable_get(
|
39
|
+
rc.emitting_tag!(self, FORTITUDE_TEXT_PSEUDOTAG, content_or_attributes, nil) { } unless content_or_attributes.instance_variable_get('@html_safe') # :if record_emitting_tag
|
40
40
|
content_or_attributes.to_s.fortitude_append_escaped_string(o) # :if escape_direct_content
|
41
41
|
o.#{concat_method}(content_or_attributes.to_s) # :if ! escape_direct_content
|
42
42
|
if block_given?
|
@@ -49,10 +49,10 @@ def #{method_name}(content_or_attributes = nil, attributes = nil)
|
|
49
49
|
this_tag.validate_attributes(self, attributes) # :if needs_attribute_rules
|
50
50
|
this_tag.validate_id_uniqueness(self, attributes) # :if needs_id_uniqueness
|
51
51
|
o.#{concat_method}(#{partial_open_const})
|
52
|
-
attributes.fortitude_append_as_attributes(o, nil)
|
52
|
+
attributes.fortitude_append_as_attributes(o, nil, #{allows_bare_attributes})
|
53
53
|
o.#{concat_method}(#{partial_open_end_const})
|
54
54
|
|
55
|
-
rc.emitting_tag!(self, FORTITUDE_TEXT_PSEUDOTAG, content_or_attributes, nil) { } unless content_or_attributes.instance_variable_get(
|
55
|
+
rc.emitting_tag!(self, FORTITUDE_TEXT_PSEUDOTAG, content_or_attributes, nil) { } unless content_or_attributes.instance_variable_get('@html_safe') # :if record_emitting_tag
|
56
56
|
content_or_attributes.to_s.fortitude_append_escaped_string(o) # :if escape_direct_content
|
57
57
|
o.#{concat_method}(content_or_attributes.to_s) # :if ! escape_direct_content
|
58
58
|
if block_given?
|
@@ -1,7 +1,7 @@
|
|
1
1
|
def tag_text(s)
|
2
2
|
@_fortitude_rendering_context.about_to_output_non_whitespace! # :if format_output
|
3
3
|
|
4
|
-
unless s.instance_variable_get(
|
4
|
+
unless s.instance_variable_get('@html_safe') # :if record_emitting_tag
|
5
5
|
@_fortitude_rendering_context.emitting_tag!(self, FORTITUDE_TEXT_PSEUDOTAG, s, nil) { } # :if record_emitting_tag
|
6
6
|
end # :if record_emitting_tag
|
7
7
|
|
@@ -10,7 +10,7 @@ end
|
|
10
10
|
|
11
11
|
def tag_rawtext(s)
|
12
12
|
@_fortitude_rendering_context.about_to_output_non_whitespace! # :if format_output
|
13
|
-
@_fortitude_output_buffer_holder.output_buffer.original_concat(s)
|
13
|
+
@_fortitude_output_buffer_holder.output_buffer.original_concat(s) if s != nil
|
14
14
|
end
|
15
15
|
|
16
16
|
alias_method :text, :tag_text
|
@@ -151,13 +151,17 @@ module Fortitude
|
|
151
151
|
if File.directory?(directory)
|
152
152
|
filename = File.basename(full_path)
|
153
153
|
|
154
|
-
regexp1 =
|
154
|
+
regexp1 = /^_?#{Regexp.escape(filename)}\./
|
155
155
|
regexp2 = /\.rb$/i
|
156
156
|
applicable_entries = Dir.entries(directory).select do |entry|
|
157
157
|
((entry == filename) || (entry =~ regexp1 && entry =~ regexp2)) && File.file?(File.join(directory, entry))
|
158
158
|
end
|
159
159
|
return nil if applicable_entries.length == 0
|
160
160
|
|
161
|
+
# Prefer those without an underscore
|
162
|
+
without_underscore = applicable_entries.select { |e| e !~ /^_/ }
|
163
|
+
applicable_entries = without_underscore if without_underscore.length > 0
|
164
|
+
|
161
165
|
entry_to_use = applicable_entries.sort_by { |e| e.length }.reverse.first
|
162
166
|
return File.join(directory, entry_to_use)
|
163
167
|
end
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'active_support/concern'
|
2
|
+
require 'action_controller/metal/renderers'
|
2
3
|
|
3
4
|
module Fortitude
|
4
5
|
module Rails
|
@@ -19,55 +20,60 @@ module Fortitude
|
|
19
20
|
::Fortitude::RenderingContext.new(options)
|
20
21
|
end
|
21
22
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
23
|
+
def self._fortitude_render_widget(controller, widget, options)
|
24
|
+
if ::Fortitude::Erector.is_erector_widget_class?(widget) || ::Fortitude::Erector.is_erector_widget_class?(widget.class)
|
25
|
+
return ::Erector::Rails.render(widget, controller.view_context, { }, false, options)
|
26
|
+
end
|
27
|
+
|
28
|
+
if widget.kind_of?(Class)
|
29
|
+
if widget < ::Fortitude::Widget
|
30
|
+
widget = widget.new(widget.extract_needed_assigns_from(controller.view_context.assigns))
|
31
|
+
else
|
32
|
+
raise "You tried to render something using 'render :widget' that is a class, but not a subclass of Fortitude::Widget: #{widget.inspect}"
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
if (! widget.kind_of?(::Fortitude::Widget))
|
37
|
+
raise "You tried to render something using 'render :widget' that is neither an instance of a subclass of Fortitude::Widget, nor a class that inherits from Fortitude::Widget: #{widget.inspect}"
|
38
|
+
end
|
39
|
+
|
40
|
+
rendering_context = controller.create_fortitude_rendering_context(:helpers_object => controller.view_context)
|
41
|
+
widget.render_to(rendering_context)
|
42
|
+
|
43
|
+
passed_options = options.dup
|
44
|
+
passed_options.delete(:widget)
|
45
|
+
passed_options[:text] = rendering_context.output_buffer_holder.output_buffer.to_s
|
46
|
+
passed_options[:layout] = true unless passed_options.has_key?(:layout)
|
47
|
+
|
48
|
+
return controller.render_to_string(passed_options)
|
49
|
+
end
|
50
|
+
|
51
|
+
def self._fortitude_register_renderer!
|
52
|
+
::ActionController.add_renderer_without_fortitude(:widget) do |widget, options|
|
53
|
+
::Fortitude::Rails::RenderingMethods._fortitude_render_widget(self, widget, options)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
33
57
|
def render_with_fortitude(*args, &block)
|
34
|
-
if (options = args[0]).kind_of?(Hash)
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
rendering_context = fortitude_rendering_context_for(self, nil)
|
49
|
-
widget_class = Class.new(Fortitude::Widgets::Html5)
|
50
|
-
widget_class.use_instance_variables_for_assigns(true)
|
51
|
-
widget_class.extra_assigns(:use)
|
52
|
-
widget_class.send(:define_method, :content, &widget_block)
|
53
|
-
|
54
|
-
assigns = { }
|
55
|
-
instance_variables.each do |ivar_name|
|
56
|
-
value = instance_variable_get(ivar_name)
|
57
|
-
assigns[$1.to_sym] = value if ivar_name =~ /^@(.*)$/
|
58
|
-
end
|
59
|
-
assigns = assigns.merge(options[:locals] || { })
|
60
|
-
|
61
|
-
widget = widget_class.new(assigns)
|
62
|
-
widget.render_to(rendering_context)
|
63
|
-
|
64
|
-
options = options.dup
|
65
|
-
options[:text] = rendering_context.output_buffer_holder.output_buffer.html_safe
|
66
|
-
options[:layout] = true unless options.has_key?(:layout)
|
67
|
-
|
68
|
-
new_args = [ options ] + args[1..-1]
|
69
|
-
return render_without_fortitude(*new_args, &block)
|
58
|
+
if (options = args[0]).kind_of?(Hash) && (widget_block = options[:inline]) && (options[:type] == :fortitude)
|
59
|
+
options.delete(:inline)
|
60
|
+
|
61
|
+
rendering_context = fortitude_rendering_context_for(self, nil)
|
62
|
+
widget_class = Class.new(Fortitude::Widgets::Html5)
|
63
|
+
widget_class.use_instance_variables_for_assigns(true)
|
64
|
+
widget_class.extra_assigns(:use)
|
65
|
+
widget_class.send(:define_method, :content, &widget_block)
|
66
|
+
|
67
|
+
assigns = { }
|
68
|
+
instance_variables.each do |ivar_name|
|
69
|
+
value = instance_variable_get(ivar_name)
|
70
|
+
assigns[$1.to_sym] = value if ivar_name =~ /^@([^_].*)$/
|
70
71
|
end
|
72
|
+
assigns = assigns.merge(options[:locals] || { })
|
73
|
+
|
74
|
+
widget = widget_class.new(assigns)
|
75
|
+
new_args = [ options.merge(:widget => widget) ] + args[1..-1]
|
76
|
+
return render_without_fortitude(*new_args, &block)
|
71
77
|
end
|
72
78
|
|
73
79
|
return render_without_fortitude(*args, &block)
|
@@ -75,3 +81,16 @@ module Fortitude
|
|
75
81
|
end
|
76
82
|
end
|
77
83
|
end
|
84
|
+
|
85
|
+
::ActionController.module_eval do
|
86
|
+
class << self
|
87
|
+
def add_renderer_with_fortitude(key, *args, &block)
|
88
|
+
add_renderer_without_fortitude(key, *args, &block)
|
89
|
+
::Fortitude::Rails::RenderingMethods._fortitude_register_renderer!
|
90
|
+
end
|
91
|
+
|
92
|
+
alias_method_chain :add_renderer, :fortitude
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
::Fortitude::Rails::RenderingMethods._fortitude_register_renderer!
|
@@ -4,7 +4,6 @@ module Fortitude
|
|
4
4
|
module Rails
|
5
5
|
class TemplateHandler
|
6
6
|
def call(template, &block)
|
7
|
-
require_dependency template.identifier
|
8
7
|
widget_class_name = "views/#{template.identifier =~ %r(views/([^.]*)(\..*)?\.rb) && $1}".camelize
|
9
8
|
is_partial = !! (File.basename(template.identifier) =~ /^_/)
|
10
9
|
|
@@ -179,8 +179,8 @@ module Fortitude
|
|
179
179
|
|
180
180
|
NEWLINE = "\n"
|
181
181
|
|
182
|
-
def yield_from_widget(*args)
|
183
|
-
raise
|
182
|
+
def yield_from_widget(widget, *args)
|
183
|
+
raise Fortitude::Errors::NoBlockToYieldTo.new(widget) unless @yield_block
|
184
184
|
result = @yield_block.call(*args)
|
185
185
|
@output_buffer_holder.output_buffer << result if @render_yield_result
|
186
186
|
result
|
data/lib/fortitude/tags/tag.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
require 'fortitude/tags/tag_support'
|
2
|
-
require 'fortitude/method_templates/
|
2
|
+
require 'fortitude/method_templates/simple_compiled_template'
|
3
3
|
|
4
4
|
# Note on handling tags that have no content inside them:
|
5
5
|
#
|
@@ -118,7 +118,7 @@ module Fortitude
|
|
118
118
|
def define_method_on!(mod, options = {})
|
119
119
|
options.assert_valid_keys(
|
120
120
|
:record_emitting_tag, :enforce_attribute_rules, :enable_formatting,
|
121
|
-
:enforce_id_uniqueness, :close_void_tags)
|
121
|
+
:enforce_id_uniqueness, :close_void_tags, :allows_bare_attributes)
|
122
122
|
|
123
123
|
unless mod.respond_to?(:fortitude_tag_support_included?) && mod.fortitude_tag_support_included?
|
124
124
|
mod.send(:include, ::Fortitude::Tags::TagSupport)
|
@@ -148,11 +148,12 @@ module Fortitude
|
|
148
148
|
yield_call = "yield"
|
149
149
|
end
|
150
150
|
|
151
|
-
text = Fortitude::MethodTemplates::
|
151
|
+
text = Fortitude::MethodTemplates::SimpleCompiledTemplate.template('tag_method_template').result(
|
152
152
|
:name => name.to_s, :method_name => generated_method_name.to_s, :yield_call => yield_call, :concat_method => CONCAT_METHOD,
|
153
153
|
:record_emitting_tag => (!! options[:record_emitting_tag]),
|
154
154
|
:needs_attribute_rules => !! options[:enforce_attribute_rules],
|
155
155
|
:needs_id_uniqueness => !! options[:enforce_id_uniqueness],
|
156
|
+
:allows_bare_attributes => (!! options[:allows_bare_attributes]),
|
156
157
|
:needs_formatting => needs_formatting, :content_allowed => @content_allowed,
|
157
158
|
:newline_before => @newline_before,
|
158
159
|
:escape_direct_content => @escape_direct_content,
|
data/lib/fortitude/version.rb
CHANGED
data/lib/fortitude/widget.rb
CHANGED
@@ -27,7 +27,7 @@ module Fortitude
|
|
27
27
|
text += " " + (" " * index) + "#{method_name}(*args) do\n"
|
28
28
|
end
|
29
29
|
|
30
|
-
if
|
30
|
+
if use_localized_content_methods
|
31
31
|
text += " " + (" " * acm.length) + "the_locale = widget_locale\n"
|
32
32
|
text += " " + (" " * acm.length) + "locale_method_name = \"localized_content_\#{the_locale}\" if the_locale\n"
|
33
33
|
text += " " + (" " * acm.length) + "out = if locale_method_name && respond_to?(locale_method_name)\n"
|
@@ -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
|
|
6
6
|
module Fortitude
|
7
7
|
class Widget
|
@@ -15,10 +15,15 @@ module Fortitude
|
|
15
15
|
end
|
16
16
|
private :rebuilding
|
17
17
|
|
18
|
+
def invalidating(what, why, klass, &block)
|
19
|
+
ActiveSupport::Notifications.instrument("fortitude.invalidating", :what => what, :why => why, :originating_class => klass, :class => self, &block)
|
20
|
+
end
|
21
|
+
private :invalidating
|
22
|
+
|
18
23
|
# INTERNAL USE ONLY
|
19
24
|
def rebuild_text_methods!(why, klass = self)
|
20
25
|
rebuilding(:text_methods, why, klass) do
|
21
|
-
class_eval(Fortitude::MethodTemplates::
|
26
|
+
class_eval(Fortitude::MethodTemplates::SimpleCompiledTemplate.template('text_method_template').result(
|
22
27
|
:format_output => format_output,
|
23
28
|
:record_emitting_tag => self._fortitude_record_emitting_tag?))
|
24
29
|
direct_subclasses.each { |s| s.rebuild_text_methods!(why, klass) }
|
@@ -54,7 +59,7 @@ module Fortitude
|
|
54
59
|
|
55
60
|
_fortitude_on_class_inheritable_attribute_change(
|
56
61
|
:debug, :extra_assigns, :use_instance_variables_for_assigns) do |attribute_name, old_value, new_value|
|
57
|
-
|
62
|
+
invalidate_needs!(:"#{attribute_name}_changed")
|
58
63
|
end
|
59
64
|
|
60
65
|
_fortitude_on_class_inheritable_attribute_change(:implicit_shared_variable_access) do |attribute_name, old_value, new_value|
|
@@ -72,6 +77,10 @@ module Fortitude
|
|
72
77
|
remove_around_content :start_and_end_comments, :fail_if_not_present => false
|
73
78
|
end
|
74
79
|
end
|
80
|
+
|
81
|
+
_fortitude_on_class_inheritable_attribute_change(:use_localized_content_methods) do |attribute_name, old_value, new_value|
|
82
|
+
rebuild_run_content!(:use_localized_content_methods_changed)
|
83
|
+
end
|
75
84
|
end
|
76
85
|
end
|
77
86
|
end
|