Sha256: 3629fc3f39d63eab078e324275bedd821d3a6b22ea3e4d94c8bce1b335b29a49

Contents?: true

Size: 1.54 KB

Versions: 1

Compression:

Stored size: 1.54 KB

Contents

require 'gherkin/parser/parser'
require 'gherkin/formatter/json_formatter'
require 'stringio'
require File.dirname(__FILE__) + "/dsl"

module CQL

  class Query
    include Dsl
    attr_reader :data, :what

    def format_to_ary_of_hsh data
      result = Array.new(data.size).map { |e| {} }
      @what.each do |w|
        CQL::MapReduce.send(w, data).each_with_index { |e, i| result[i][w]=e }
      end
      result.size == 1 ? result.first : result
    end

    def initialize features, &block
      @data = features
      @data = self.instance_eval(&block)

      #getting the children of features
      @data= CQL::MapReduce.feature_children(@data, 'what'=>@from[0, @from.size-1]) if @from != "features"

      @data= format_to_ary_of_hsh(@data)
    end
  end


  class Repository
    attr_reader :parsed_feature_files

    def initialize features_home_dir
      @parsed_feature_files = load_features list_features features_home_dir
    end

    def query &block
      Query.new(parsed_feature_files.clone, &block).data
    end

    private
    def list_features base_dir
      require 'find'
      res = []
      Find.find(base_dir) do |f|
        res << f if f.match(/\.feature\Z/)
      end
      res
    end

    def load_features sources
      io = StringIO.new
      formatter = Gherkin::Formatter::JSONFormatter.new(io)
      parser = Gherkin::Parser::Parser.new(formatter)
      sources.each { |s| parser.parse(IO.read(s), s, 0) }
      formatter.done
      JSON.parse(io.string)
    end

  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
cql-0.1.9 lib/cql.rb