Sha256: a50533ad74a0e17ba058042330f80895816bbb56fb0be03565a394f652d0204b

Contents?: true

Size: 1.03 KB

Versions: 1

Compression:

Stored size: 1.03 KB

Contents

module Kabutops
  class Recipe
    def initialize
      @items = {}
      @nested = false
    end

    def method_missing name, *args, &block
      if block_given?
        recipe = Recipe.new
        recipe.instance_eval &block
        @items[name] = RecipeItem.new(name, :recipe, recipe)
        @nested = true
      else
        type, value = args[0..1]
        @items[name] = RecipeItem.new(name, type, value)
      end
    end

    def process resource, page
      result = {}

      @items.each do |name, item|
        result[name] = case item.type
        when :var
          resource[item.value]
        when :recipe
          item.value.process(resource, page)
        when :css
          page.css(item.value).text
        when :xpath
          page.xpath(item.value).text
        when :lambda
          item.value.call(page)
        when :proc
          page.instance_eval &item.value
        else
          raise "unknown recipe item type '#{item.type}'"
        end
      end

      result
    end

    def nested?
      @nested
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
kabutops-0.0.1 lib/kabutops/recipe.rb