Jam::Engine

Parent

Generated with Razzle Dazzle Redfish.
[Validate]

Jam Engine

The Engine class serves as the base class for the various Jam adapters.

Public Instance Methods

interpolate(node, data) click to toggle source

Interpolate data into document, returning the document object.

# File lib/jam/engine.rb, line 17
    def interpolate(node, data)
      interpolate_node(node, data)
    end

Private Instance Methods

interpolate_mapping(node, data) click to toggle source

Interpolate mapping.

# File lib/jam/engine.rb, line 62
    def interpolate_mapping(node, data)
      data = prepare_data(data)

      data.each do |id, val|
        att = false
        qry = id.to_s

        result = qry.match(/^((.*?)\/)?([@](.*?))$/);
        if result
          att = result[4]
          qry = result[2] #+ '[@' + att + ']'
        else
          att = false
        end

        if att
          #qry = qry + '[@' + att + ']';
          #search(node,qry).attr(att,val);
          if qry
            #if tag == false
            #  qry = '#' + qry
            #end
            nodeset = search(node, qry)
            attribute(nodeset, att, val)
          else
            attribute(node, att, val)
          end
        else
          nodeset = search(node, qry)
          #if nodeset.size > 0
            interpolate_node(nodeset, val)
          #end
        end
      end
    end
interpolate_node(node, data) click to toggle source

Interpolate data.

# File lib/jam/engine.rb, line 44
    def interpolate_node(node, data)
      case data
      when nil
        remove(node)
      when Array
        interpolate_sequence(node, data)
      when String, Numeric
        interpolate_scalar(node, data)
      when Hash
        interpolate_mapping(node, data)
      else
        interpolate_object(node, data)
      end
      return node
    end
interpolate_object(node, data) click to toggle source

Interpolate object.

# File lib/jam/engine.rb, line 100
    def interpolate_object(node, data)
      data = Hash[data.instance_variables.map{ |iv| [iv[1..-1], data.instance_variable_get(iv)] }]
      interpolate_mapping(node, data)
    end
interpolate_scalar(nodes, data) click to toggle source

Interpolate value.

TODO This should have some special HTML features ?

TODO Should we have two modes —one with and one without the extra HTML features?

# File lib/jam/engine.rb, line 130
    def interpolate_scalar(nodes, data)
      #var all_special = new Array;

      # text inputs
      #var special = this.find('input[@type=text]');
      #special.val(data.toString());
      #all_special.concat(special);
      # textarea
      # TODO

      #this.not(special).empty();
      #this.not(special).append(data.toString());
      #alert(data);
      #empty(node)
      replace_content_with_text(nodes, data.to_s)
    end
interpolate_sequence(nodes, data) click to toggle source

Interpolate array sequence.

# File lib/jam/engine.rb, line 113
    def interpolate_sequence(nodes, data)
      each_node(nodes) do |node|
        parent = node.parent
        data.each do |new_data|
          new_node = interpolate_node(node.dup, new_data)
          append(parent, new_node)
          remove(node)
        end
      end
    end
prepare_data(data) click to toggle source

Converts plain keys to css selectors.

TODO: Change to use special attribute instead of ‘id’?

# File lib/jam/engine.rb, line 27
    def prepare_data(data)
      d = {}
      data.each do |key, val|
        case key.to_s
        when /^<(.*?)>(.*)$/
          d["#{$1}#{$2}"] = val
        when /^\w/
          d["##{key}"] = val
        else
          d[key.to_s] = val
        end
      end
      return d
    end

Disabled; run with --debug to generate this.