cql 0.3.0 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml DELETED
@@ -1,15 +0,0 @@
1
- ---
2
- !binary "U0hBMQ==":
3
- metadata.gz: !binary |-
4
- ODIxODczMTZmOTQwODJjMGFjODIwZjE5Zjk2OWJhYzY2YTQ0MzMzNA==
5
- data.tar.gz: !binary |-
6
- OWMyODEwMzRmOGZkMDlkZGFhNzcyOTQ2OTNlZTViZmQ4OTVhOTk0Nw==
7
- !binary "U0hBNTEy":
8
- metadata.gz: !binary |-
9
- Yzg2YzE0YjNjZmY1NGMxNDMzY2QxNDFiZTMxOTU5NDE5NDNhMmZlMTJkY2Vi
10
- YzRiNjQwMzk2OGYyNjYzNTg1NzM3YmM3M2M1OTBhNzM2ZWY1NDZjN2I2N2Mx
11
- MjYzMmYyNTA2NzJiNzExOTk2MmFlMzI4NmQ3ZWFkNzliYTQwNzI=
12
- data.tar.gz: !binary |-
13
- NDg5MGNjNmYxZGRkODE0ODNmNmU1M2MyNjlkY2RhOGE0NDNjZDhiZjExYzhh
14
- YTAzNzE3YTc4NDU4ZDg1MGNkM2M0MGMxYmFhMGIyN2I5YjcxYWViOGQ1YmM5
15
- Nzk0ZTZlN2UyNmIzZGUzNTM4NWI5MDQxMDk0M2Y4MjI3ZjcwZjM=
data/lib/dsl.rb DELETED
@@ -1,111 +0,0 @@
1
- require File.dirname(__FILE__) + "/map_reduce"
2
- module CQL
3
- module Dsl
4
- #Select clause
5
- def select *what
6
- @what = what
7
- end
8
-
9
- (CQL::QUERY_VALUES + %w(all step_lines examples)).each do |method_name|
10
- define_method(method_name) { |*args|
11
- return method_name if args.size == 0
12
- {method_name=>args}
13
- }
14
- end
15
-
16
- alias :everything :all
17
- alias :complete :all
18
-
19
- def name *args
20
- return 'name' if args.size == 0
21
- CQL::NameFilter.new args[0]
22
- end
23
-
24
- def line *args
25
- return 'line' if args.size == 0
26
- CQL::LineFilter.new args.first
27
- end
28
-
29
- #from clause
30
- def from where
31
- @from = where
32
- @data
33
- end
34
-
35
- %w(features scenario_outlines scenarios).each do |method_name|
36
- define_method(method_name) { |*args|
37
- return method_name if args.size == 0
38
- {method_name=>args}
39
- }
40
- end
41
-
42
- #with clause
43
- def with filter
44
- @data = filter.execute(@data)
45
- end
46
-
47
- class Comparison
48
- attr_accessor :op, :amount
49
-
50
- def initialize op, amount
51
- @op = op
52
- @amount = amount
53
- end
54
-
55
- def operator
56
- {"lt"=>'<', 'lte'=>'<=', 'gt'=>'>', 'gte'=>'>='}[@op]
57
- end
58
-
59
- end
60
-
61
- def tc comparison
62
- if @from == 'features'
63
- FeatureTagCountFilter.new('tc', comparison)
64
- else
65
- SsoTagCountFilter.new 'tc', comparison
66
- end
67
- end
68
-
69
- def lc comparison
70
- CQL::SsoLineCountFilter.new('lc', comparison)
71
- end
72
-
73
- def ssoc comparison
74
- Filter.new('ssoc', comparison)
75
- end
76
-
77
- def sc comparison
78
- Filter.new('sc', comparison)
79
- end
80
-
81
- def soc comparison
82
- Filter.new('soc', comparison)
83
- end
84
-
85
- def gt amount
86
- Comparison.new 'gt', amount
87
- end
88
-
89
- def gte amount
90
- Comparison.new 'gte', amount
91
- end
92
-
93
- def lt amount
94
- Comparison.new 'lt', amount
95
- end
96
-
97
- def lte amount
98
- Comparison.new 'lte', amount
99
- end
100
-
101
- def tags *tags
102
- return "tags" if tags.size == 0
103
- if @from == 'features'
104
- FeatureTagFilter.new tags
105
- else
106
- CQL::SsoTagFilter.new tags
107
- end
108
- end
109
-
110
- end
111
- end
@@ -1,89 +0,0 @@
1
- module CQL
2
- class NameFilter
3
- attr_reader :name
4
-
5
- def initialize name
6
- @name = name
7
- end
8
-
9
- def execute input
10
- if name.class == String
11
- input = input.find_all { |feature| feature.name == name }
12
- elsif name.class == Regexp
13
- input = input.find_all { |feature| feature.name =~ name }
14
- end
15
-
16
- input
17
- end
18
- end
19
-
20
- class Filter
21
- attr_reader :type, :comparison
22
-
23
- def initialize type, comparison
24
- @type = type
25
- @comparison = comparison
26
- end
27
-
28
- def full_type
29
- {"sc"=>["Scenario"], "soc"=>["Scenario Outline"], "ssoc"=>["Scenario", "Scenario Outline"]}[@type]
30
- end
31
-
32
- def execute input
33
- input.find_all do |feature|
34
- size = feature.tests.find_all { |test|
35
-
36
- element_class = test.class.to_s[/::.*$/].gsub(':', '')
37
-
38
- case element_class
39
- when 'Outline'
40
- element_class = 'Scenario Outline'
41
- when 'Scenario'
42
- element_class = 'Scenario'
43
- else
44
- raise "Unknown class: #{element_class}"
45
- end
46
-
47
- full_type.include?(element_class)
48
- }.size
49
-
50
- size.send(comparison.operator, comparison.amount)
51
- end
52
- end
53
-
54
- end
55
-
56
- class FeatureTagCountFilter < Filter
57
- def execute input
58
- input.find_all do |feature|
59
- feature.tags && feature.tags.size.send(comparison.operator, comparison.amount)
60
- end
61
- end
62
- end
63
-
64
- class TagFilter
65
- attr_reader :tags
66
-
67
- def initialize tags
68
- @tags = tags
69
- end
70
-
71
- def has_tags given, search
72
- return false if given == nil
73
- search.count do |tag_for_search|
74
- given.map { |t| t["name"] }.include?(tag_for_search)
75
- end ==search.size
76
- end
77
- end
78
-
79
- class FeatureTagFilter < TagFilter
80
- def initialize tags
81
- super tags
82
- end
83
-
84
- def execute input
85
- input.find_all { |feature| has_tags feature.raw_element['tags'], tags }
86
- end
87
- end
88
-
89
- end
data/lib/map_reduce.rb DELETED
@@ -1,104 +0,0 @@
1
- require_relative "dsl"
2
- require_relative "feature_filters"
3
- require_relative "sso_filters"
4
-
5
- require 'set'
6
-
7
- module CQL
8
- QUERY_VALUES = %w(name uri line description type steps id tags examples)
9
-
10
- class MapReduce
11
-
12
- def self.name(data)
13
- data = data.dup
14
- data.map { |element| element.name }
15
- end
16
-
17
- def self.uri(data)
18
- data = data.dup
19
- data.map { |element| element.parent_element.path }
20
- end
21
-
22
- def self.description(data)
23
- data = data.dup
24
- data.map { |element| element.description.join("\n") }
25
- end
26
-
27
- def self.tags(data)
28
- data = data.dup
29
- data.map { |element| element.raw_element['tags'] }
30
- end
31
-
32
- def self.line(data)
33
- data = data.dup
34
- data.map { |element| element.source_line }
35
- end
36
-
37
- def self.examples(data)
38
- data = data.dup
39
- data.map { |element| element.examples.collect { |example| example.raw_element } }
40
- end
41
-
42
- def self.steps(data)
43
- data = data.dup
44
- data.map { |element| element.steps.collect { |step| step.raw_element } }
45
- end
46
-
47
- def self.type(data)
48
- data = data.dup
49
- data.map do |element|
50
- element_class = element.class.to_s[/::.*$/].gsub(':', '')
51
-
52
- case element_class
53
- when 'Outline'
54
- type = 'scenario_outline'
55
- when 'Scenario'
56
- type = 'scenario'
57
- else
58
- raise "Unknown class: #{element_class}"
59
- end
60
-
61
- type
62
- end
63
- end
64
-
65
- def self.id(data)
66
- data = data.dup
67
- data.map { |element| element.raw_element['id'] }
68
- end
69
-
70
- %w(all everything complete).each do |method_name|
71
- define_singleton_method(method_name) { |input| input }
72
- end
73
-
74
- def self.step_lines input
75
- input = [input] if input.class != Array
76
- steps(input).map do |scen|
77
- scen.map { |line| line['keyword'] + line['name'] }
78
- end
79
- end
80
-
81
- def self.feature_children input, args
82
- results = []
83
-
84
- input.each do |feature|
85
- feature.contains.each do |element|
86
-
87
- case args['what']
88
- when 'scenario'
89
- results.push element if element.class.to_s[/::.*$/].gsub(':', '') == 'Scenario'
90
- when 'scenario_outline'
91
- results.push element if element.class.to_s[/::.*$/].gsub(':', '') == 'Outline'
92
- else
93
- raise "Unknown type: #{args['what']}"
94
- end
95
-
96
- end
97
- end
98
-
99
- results
100
- end
101
-
102
- end
103
-
104
- end
data/lib/sso_filters.rb DELETED
@@ -1,82 +0,0 @@
1
- module CQL
2
-
3
- class SsoTagCountFilter < Filter
4
- def execute input
5
- input.each_with_index do |feature, index|
6
- filtered_elements= feature.tests.find_all do |sso|
7
- sso.tags.size.send(comparison.operator, comparison.amount)
8
- end
9
-
10
- input[index].tests = filtered_elements
11
- end
12
-
13
- input
14
- end
15
- end
16
-
17
- class SsoTagFilter < TagFilter
18
- def execute input
19
- input.each_with_index do |feature, index|
20
- features_with_contents_filtered = feature.tests.find_all do |sso|
21
- has_tags(sso.raw_element['tags'], tags)
22
- end
23
-
24
- input[index].tests = features_with_contents_filtered
25
- end
26
-
27
- input
28
- end
29
- end
30
-
31
- class SsoLineCountFilter < Filter
32
- def execute input
33
- input.each_with_index do |feature, index|
34
- filtered_elements = feature.tests.find_all do |sso|
35
- sso.steps.size.send(comparison.operator, comparison.amount)
36
- end
37
-
38
- input[index].tests = filtered_elements
39
- end
40
-
41
- input
42
- end
43
- end
44
-
45
- class LineFilter
46
- attr_reader :line
47
-
48
- def initialize line
49
- @line = line
50
- end
51
-
52
- def execute input
53
- input.each_with_index do |feature, index|
54
- filtered_elements = feature.tests.find_all do |sso|
55
- raw_step_lines = sso.steps.map { |sl| sl.base }
56
- result = nil
57
-
58
- if line.class == String
59
- result = raw_step_lines.include? line
60
- elsif line.class == Regexp
61
- result = filter_by_regexp(raw_step_lines)
62
- end
63
-
64
- result
65
- end
66
-
67
- input[index].tests = filtered_elements
68
- end
69
- end
70
-
71
- def filter_by_regexp(raw_step_lines)
72
- result = raw_step_lines.find { |l| l =~line }
73
- if result.class == String
74
- result = result.size > 0
75
- else
76
- result = false
77
- end
78
- result
79
- end
80
- end
81
-
82
- end