class LtdTemplate::Code::Parameters
Attributes
named[R]
positional[R]
Public Class Methods
new(template, positional = [], named = nil)
click to toggle source
Create a parameter list builder with code to generate positional values and possibly code to generate named values.
Calls superclass method
LtdTemplate::Code::new
# File lib/ltdtemplate/code/parameters.rb, line 18 def initialize (template, positional = [], named = nil) super template # Save the code blocks for positional and named parameters. @positional, @named = positional, named end
Public Instance Methods
evaluate(opts = {})
click to toggle source
Evaluate the code provided for the positional and named parameters and return a corresponding Sarah.
@return [Sarah]
# File lib/ltdtemplate/code/parameters.rb, line 29 def evaluate (opts = {}) params = @template.factory :array # Process the positional parameters (pos1, ..., posN) @positional.each do |code| value = rubyversed(code).evaluate if value.is_a? LtdTemplate::Value::Array_Splat # Merge parameters from array/ or array% # RESOURCE array_growth: Increases in array sizes @template.use :array_growth, value.positional.size params.concat value.positional if value.named @template.use :array_growth, value.named.size / 2 params.set_pairs *value.named end else params.push value end end # Process the named parameters (.. key1, val1, ..., keyN, valN) if @named @named.each_slice(2) do |k_code, v_code| params[rubyversed(k_code).evaluate] = rubyversed(v_code).evaluate if v_code end end # Is this a candidate for scalar assignment? params.extend LtdTemplate::Univalue if !@named && params.size(:seq) == 1 params end