Sha256: 8666e154ff521b8f37d12a2bd8957268d481964dea24a26e95fa393463d33808

Contents?: true

Size: 1.42 KB

Versions: 2

Compression:

Stored size: 1.42 KB

Contents

require_relative 'yasuri_node'
require_relative 'yasuri_text_node'
require_relative 'yasuri_struct_node'
require_relative 'yasuri_links_node'
require_relative 'yasuri_paginate_node'
require_relative 'yasuri_map_node'

module Yasuri
  class NodeGenerator
    def gen_recursive(&block)
      @nodes = []
      instance_eval(&block)
      @nodes
    end

    def method_missing(name, pattern=nil, **args, &block)
      node = NodeGenerator.gen(name, pattern, **args, &block)
      raise "Undefined Node Name '#{name}'" if node == nil
      @nodes << node
    end

    def self.gen(method_name, xpath, **opt, &block)
      children = Yasuri::NodeGenerator.new.gen_recursive(&block) if block

      case method_name
      when /^text_(.+)$/
        # Todo raise error xpath is not valid
        Yasuri::TextNode.new(xpath, $1, children || [], **opt)
      when /^struct_(.+)$/
        # Todo raise error xpath is not valid
        Yasuri::StructNode.new(xpath, $1, children || [], **opt)
      when /^links_(.+)$/
        # Todo raise error xpath is not valid
        Yasuri::LinksNode.new(xpath, $1, children || [], **opt)
      when /^pages_(.+)$/
        # Todo raise error xpath is not valid
        Yasuri::PaginateNode.new(xpath, $1, children || [], **opt)
      when /^map_(.+)$/
        Yasuri::MapNode.new($1, children, **opt)
      else
        nil
      end
    end # of self.gen(method_name, xpath, **opt, &block)
  end # of class NodeGenerator
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
yasuri-3.3.2 lib/yasuri/yasuri_node_generator.rb
yasuri-3.3.1 lib/yasuri/yasuri_node_generator.rb