lib/map_reduce.rb in cql-0.2.1 vs lib/map_reduce.rb in cql-0.3.0

- old
+ new

@@ -1,40 +1,104 @@ -require 'set' -require File.dirname(__FILE__) + "/dsl" -require File.dirname(__FILE__) + "/feature_filters" -require File.dirname(__FILE__) + "/sso_filters" -module CQL - QUERY_VALUES = %w(name uri line description type steps id tags examples) - - class MapReduce - CQL::QUERY_VALUES.each do |property| - define_singleton_method(property) do |input| - input = [input] if input.class != Array - input.map { |a| a[property] } - end - end - - %w(all everything complete).each do |method_name| - define_singleton_method(method_name) { |input| input } - end - - def self.step_lines input - input = [input] if input.class != Array - steps(input).map do |scen| - scen.map { |line| line['keyword'] + line['name'] } - end - end - - def self.feature_children input, args - results = [] - input = filter_features(input, 'feature'=>args['feature']) if args.has_key?('feature') - input.each do |feature| - feature['elements'].each do |element| - results.push element if element['type'] == args['what'] - end - end - results - end - - end - -end \ No newline at end of file +require_relative "dsl" +require_relative "feature_filters" +require_relative "sso_filters" + +require 'set' + +module CQL + QUERY_VALUES = %w(name uri line description type steps id tags examples) + + class MapReduce + + def self.name(data) + data = data.dup + data.map { |element| element.name } + end + + def self.uri(data) + data = data.dup + data.map { |element| element.parent_element.path } + end + + def self.description(data) + data = data.dup + data.map { |element| element.description.join("\n") } + end + + def self.tags(data) + data = data.dup + data.map { |element| element.raw_element['tags'] } + end + + def self.line(data) + data = data.dup + data.map { |element| element.source_line } + end + + def self.examples(data) + data = data.dup + data.map { |element| element.examples.collect { |example| example.raw_element } } + end + + def self.steps(data) + data = data.dup + data.map { |element| element.steps.collect { |step| step.raw_element } } + end + + def self.type(data) + data = data.dup + data.map do |element| + element_class = element.class.to_s[/::.*$/].gsub(':', '') + + case element_class + when 'Outline' + type = 'scenario_outline' + when 'Scenario' + type = 'scenario' + else + raise "Unknown class: #{element_class}" + end + + type + end + end + + def self.id(data) + data = data.dup + data.map { |element| element.raw_element['id'] } + end + + %w(all everything complete).each do |method_name| + define_singleton_method(method_name) { |input| input } + end + + def self.step_lines input + input = [input] if input.class != Array + steps(input).map do |scen| + scen.map { |line| line['keyword'] + line['name'] } + end + end + + def self.feature_children input, args + results = [] + + input.each do |feature| + feature.contains.each do |element| + + case args['what'] + when 'scenario' + results.push element if element.class.to_s[/::.*$/].gsub(':', '') == 'Scenario' + when 'scenario_outline' + results.push element if element.class.to_s[/::.*$/].gsub(':', '') == 'Outline' + else + raise "Unknown type: #{args['what']}" + end + + end + end + + results + end + + end + +end