Module: Zafu::Process::Conditional
- Defined in:
- lib/zafu/process/conditional.rb
Overview
This module manages conditional rendering (if, else, elsif, case, when).
Instance Method Summary collapse
-
#expand_if(condition, new_node_context = self.node, alt_markup = @markup) ⇒ Object
Expand blocks with conditional processing enabled (else, elsif, etc).
- #r_case ⇒ Object
- #r_else ⇒ Object
- #r_elsif(cond = nil) ⇒ Object
- #r_if(cond = nil) ⇒ Object
- #r_when ⇒ Object
Instance Method Details
#expand_if(condition, new_node_context = self.node, alt_markup = @markup) ⇒ Object
Expand blocks with conditional processing enabled (else, elsif, etc).
Parameters
-
condition
- ruby condition for the conditional execution. -
new_node_context
- (optional) new node context to enter if the clause succeeds. -
alt_markup
- (optional) alternative markup to use for the ‘else’, ‘elsif’ clauses.
65 66 67 68 69 70 71 72 73 74 75 76 |
# File 'lib/zafu/process/conditional.rb', line 65 def (condition, new_node_context = self.node, alt_markup = @markup) res = "" res << "<% if #{condition} %>" with_context(:node => new_node_context) do res << wrap() end only = method == 'case' ? %r{^[A-Z]|else|elsif|when} : %w{else elsif when} res << (:in_if => true, :only => only, :markup => alt_markup) res << "<% end %>" res end |
#r_case ⇒ Object
11 12 13 |
# File 'lib/zafu/process/conditional.rb', line 11 def r_case r_if('false') end |
#r_else ⇒ Object
15 16 17 |
# File 'lib/zafu/process/conditional.rb', line 15 def r_else r_elsif('true') end |
#r_elsif(cond = nil) ⇒ Object
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
# File 'lib/zafu/process/conditional.rb', line 23 def r_elsif(cond = nil) return '' unless @context[:in_if] cond ||= get_condition return unless cond res = (:in_if => false, :markup => nil) # We use 'elsif' just in case there are more then one 'else' clause if markup = @context[:markup] if @markup.tag.blank? # Copy markup tag @markup.tag = markup.tag @markup.steal_html_params_from(@params) markup.params.each do |k, v| next if @markup.params[k] @markup.set_param(k, v) end markup.dyn_params.each do |k, v| next if @markup.params[k] || @markup.dyn_params[k] @markup.set_dyn_param(k, v) end inner = wrap(res) else markup.done = false # Wrap with both markup (ours and the else/elsif clause). inner = markup.wrap(wrap(res)) end out "<% elsif #{cond} %>#{inner}" # do not propagate else #@markup.done = true # never wrap else/elsif clause out "<% elsif #{cond} %>#{res}" # do not propagate end end |
#r_if(cond = nil) ⇒ Object
5 6 7 8 9 |
# File 'lib/zafu/process/conditional.rb', line 5 def r_if(cond = nil) cond ||= get_condition return unless cond (cond) end |
#r_when ⇒ Object
19 20 21 |
# File 'lib/zafu/process/conditional.rb', line 19 def r_when r_elsif end |