hiptest-publisher 0.6.3 → 0.6.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: da8ec8699aae12338c795fa1fb399a78ecd748ff
4
- data.tar.gz: 7d73cb2f8c7d16f650af43472c07f4f5308a4d78
3
+ metadata.gz: be7fd459ab07a79f34477a18657baa1367f26e81
4
+ data.tar.gz: 5548f034c80c2ecddc9e7b1ffdc3c17a64606e6b
5
5
  SHA512:
6
- metadata.gz: 4fbebc2dddcc47b090219432ff98adebe85182947db14086450153b86779af7db619d60040046f230e4751c693c992e2a8f2fa5f3403f19e361523d878f2a661
7
- data.tar.gz: 409ffd0c3c4e37196e6d3e74d2f40a966442ae60f6ae6faacf0e4820eebf90a0adbf113ef98ea7f1b43755830abbdc994bbfa40e3d2821bc9c611257992dcecb
6
+ metadata.gz: e715cabfcb276bb95d66ef79da2ec30f730775f193cbf2add0a311a309399fd3b44bf4405e44116a9c4e3f81aac1caee8651af7d5f4d45fdd89cf2d1a1d0a6c3
7
+ data.tar.gz: 54f46b5ad213a4a94a0ec1f90059ced3ffefb64564849d7a5ad7b2cd776d7b7a15dc048712f3d61808dffadecb423a692eedd75aeb2d56408ce8774b5a332491
@@ -18,8 +18,8 @@ module Hiptest
18
18
  return Hiptest::Renderer.render(self, rendering_context)
19
19
  end
20
20
 
21
- def each_sub_nodes(*types)
22
- return to_enum(:each_sub_nodes, *types) unless block_given?
21
+ def each_sub_nodes(*types, deep: false)
22
+ return to_enum(:each_sub_nodes, *types, deep: deep) unless block_given?
23
23
  path = [self]
24
24
  parsed_nodes_id = Set.new
25
25
 
@@ -28,11 +28,12 @@ module Hiptest
28
28
 
29
29
  if current_node.is_a?(Node)
30
30
  next if parsed_nodes_id.include? current_node.object_id
31
+ parsed_nodes_id << current_node.object_id
31
32
 
32
33
  if types.empty? || types.any? {|type| current_node.is_a?(type)}
33
34
  yield current_node
35
+ next unless deep
34
36
  end
35
- parsed_nodes_id << current_node.object_id
36
37
  current_node.children.each_value {|item| path << item}
37
38
  elsif current_node.is_a?(Array)
38
39
  current_node.each {|item| path << item}
@@ -1,6 +1,14 @@
1
1
  module Hiptest
2
2
  module Nodes
3
3
  class Walker
4
+
5
+ def walk_node(node)
6
+ walk_children(node)
7
+
8
+ node.each {|item| walk_node(item)} if node.is_a? Array
9
+ call_node_walker(node)
10
+ end
11
+
4
12
  private
5
13
 
6
14
  def walk_children(node)
@@ -16,30 +24,10 @@ module Hiptest
16
24
  end
17
25
  end
18
26
 
19
- def walk_method_name(node)
20
- walk_method_names[node.class] ||= "walk_#{node.kind}".to_sym
21
- end
27
+ WALK_METHOD_NAMES = {}
22
28
 
23
- def walk_method_names
24
- @walk_method_names ||= {}
25
- end
26
- end
27
-
28
- class ParentFirstWalker < Walker
29
- def walk_node(node)
30
- call_node_walker(node)
31
- node.each {|item| walk_node(item)} if node.is_a? Array
32
-
33
- walk_children(node)
34
- end
35
- end
36
-
37
- class ChildrenFirstWalker < Walker
38
- def walk_node(node)
39
- walk_children(node)
40
-
41
- node.each {|item| walk_node(item)} if node.is_a? Array
42
- call_node_walker(node)
29
+ def walk_method_name(node)
30
+ WALK_METHOD_NAMES[node.class] ||= "walk_#{node.kind}".to_sym
43
31
  end
44
32
  end
45
33
  end
@@ -2,135 +2,103 @@ require 'hiptest-publisher/nodes_walker'
2
2
 
3
3
  module Hiptest
4
4
  module Nodes
5
- class ParameterTypeAdder < ParentFirstWalker
5
+ class ParameterTypeAdder
6
6
  attr_reader :call_types
7
7
 
8
8
  def self.add(project)
9
- walker = Hiptest::Nodes::ParameterTypeAdder.new
10
- walker.walk_node(project)
11
-
12
- Hiptest::Nodes::TypeWriter.new(walker.call_types).walk_node(project)
9
+ Hiptest::Nodes::ParameterTypeAdder.new.process(project)
13
10
  end
14
11
 
15
- def walk_project(project)
12
+ def initialize
16
13
  @call_types = CallTypes.new
17
14
  end
18
15
 
19
- def walk_call(call)
20
- @call_types.add_callable_item(call.children[:actionword])
21
- end
22
-
23
- def walk_argument(arg)
24
- get_literal_values(arg).each {|value|
25
- @call_types.add_argument(arg.children[:name], value[0], value[1])
26
- }
16
+ def process(project)
17
+ gather_scenarios_argument_types(project)
18
+ gather_call_argument_types(project)
19
+ write_parameter_types(project)
27
20
  end
28
21
 
29
- def walk_actionword(actionword)
30
- @call_types.add_callable_item(actionword.children[:name])
31
- end
32
-
33
- def walk_scenario(scenario)
34
- @call_types.add_callable_item(scenario.children[:name])
22
+ def gather_scenarios_argument_types(project)
23
+ project.children[:scenarios].children[:scenarios].each do |scenario|
24
+ @call_types.add_callable_item(scenario.children[:name])
25
+ add_arguments_from(scenario.children[:datatable])
26
+ end
35
27
  end
36
28
 
37
- private
38
-
39
- def get_literal_values(node)
40
- values = []
41
- node.each_sub_nodes(StringLiteral, NumericLiteral, BooleanLiteral) do |literal|
42
- values << [literal.class, literal.children[:value]]
29
+ def gather_call_argument_types(project)
30
+ project.each_sub_nodes(Call) do |call|
31
+ @call_types.add_callable_item(call.children[:actionword])
32
+ add_arguments_from(call)
43
33
  end
44
- values << [NullLiteral, nil] if values.empty?
45
- values
46
34
  end
47
- end
48
35
 
49
- class TypeWriter < ParentFirstWalker
50
- def initialize(call_types)
51
- @call_types = call_types
52
- @callable_item_name = nil
36
+ def write_parameter_types(project)
37
+ project.each_sub_nodes(Actionword, Scenario) do |callable_item|
38
+ callable_item.each_sub_nodes(Parameter) do |parameter|
39
+ parameter.children[:type] = @call_types.type_of(callable_item.children[:name], parameter.children[:name])
40
+ end
41
+ end
53
42
  end
54
43
 
55
- def walk_actionword actionword
56
- @callable_item_name = actionword.children[:name]
44
+ def add_arguments_from(node)
45
+ node.each_sub_nodes(Argument) do |argument|
46
+ @call_types.add_argument_type(argument.children[:name], get_type(argument))
47
+ end
57
48
  end
58
49
 
59
- def walk_scenario(scenario)
60
- @callable_item_name = scenario.children[:name]
61
- end
50
+ private
62
51
 
63
- def walk_parameter parameter
64
- parameter.children[:type] = @call_types.type_of(@callable_item_name, parameter.children[:name])
52
+ def get_type(node)
53
+ value = node.children[:value]
54
+ case value
55
+ when StringLiteral, Template then :String
56
+ when NumericLiteral then value.children[:value].include?(".") ? :float : :int
57
+ when BooleanLiteral then :bool
58
+ else :null
59
+ end
65
60
  end
66
61
  end
67
62
 
68
63
  class CallTypes
69
64
  def initialize
70
65
  @callable_items = {}
71
- @current = nil
72
- end
73
-
74
- def select_callable_item(name)
75
- @current = @callable_items[name]
66
+ @current_callable_item = nil
76
67
  end
77
68
 
78
69
  def add_callable_item(name)
79
- @callable_items[name] = {} unless @callable_items.has_key?(name)
80
- select_callable_item(name)
70
+ @callable_items[name] ||= {}
71
+ @current_callable_item = @callable_items[name]
81
72
  end
82
73
 
83
- def add_argument(name, type, value)
84
- add_parameter(name)
85
- @current[name][:values] << {type: type, value: value}
86
- end
87
-
88
- def add_default_value(name, type, value)
89
- add_parameter(name)
90
- @current[name][:default] = {type: type, value: value}
74
+ def add_argument_type(name, type)
75
+ @current_callable_item[name] ||= {types: Set.new}
76
+ @current_callable_item[name][:types] << type
91
77
  end
92
78
 
93
79
  def type_of(item_name, parameter_name)
94
- return unless @callable_items.has_key?(item_name)
95
- parameter = @callable_items[item_name][parameter_name]
80
+ callable_item = @callable_items[item_name]
81
+ return :String if callable_item.nil?
82
+ parameter = callable_item[parameter_name]
96
83
 
97
- return :String if parameter.nil? || parameter[:values].empty?
98
- return type_from_values(parameter[:values])
84
+ return :String if parameter.nil?
85
+ return type_from_types(parameter[:types])
99
86
  end
100
87
 
101
88
  private
102
89
 
103
- def add_parameter(name)
104
- return if @current.has_key?(name)
105
- @current[name] = {default: nil, values: []}
106
- end
107
-
108
- def type_from_values(values)
109
- types = values.map {|val| val[:type] unless val[:type] == Hiptest::Nodes::NullLiteral}.compact.uniq
110
-
90
+ def type_from_types(types)
91
+ types = types - [:null]
111
92
  if types.empty?
112
93
  :null
113
94
  elsif types.length == 1
114
- if types.first == Hiptest::Nodes::StringLiteral
115
- :String
116
- elsif types.first == Hiptest::Nodes::BooleanLiteral
117
- :bool
118
- elsif types.first == Hiptest::Nodes::NumericLiteral
119
- determine_numeric(values)
120
- end
95
+ types.first
96
+ elsif types == Set[:float, :int]
97
+ :float
121
98
  else
122
99
  :String
123
100
  end
124
101
  end
125
-
126
- def determine_numeric(values)
127
- types = values.map do |val|
128
- next unless val[:type] == Hiptest::Nodes::NumericLiteral
129
- return :float if val[:value].include?(".")
130
- end.compact.uniq
131
-
132
- :int
133
- end
134
102
  end
135
103
  end
136
104
  end
@@ -1,16 +1,16 @@
1
+ require 'hiptest-publisher/nodes_walker'
2
+
1
3
  module Hiptest
2
4
  module Nodes
3
- class ParentAdder < ParentFirstWalker
5
+ class ParentAdder
4
6
  def self.add(project)
5
- Hiptest::Nodes::ParentAdder.new.walk_node(project)
7
+ Hiptest::Nodes::ParentAdder.new.process(project)
6
8
  end
7
9
 
8
- def walk_node(node)
9
- super(node)
10
- return unless node.is_a? Hiptest::Nodes::Node
11
-
10
+ def process(node)
12
11
  node.each_direct_children {|child|
13
12
  child.parent ||= node
13
+ process(child)
14
14
  }
15
15
  end
16
16
  end
@@ -93,7 +93,7 @@ module Hiptest
93
93
  private
94
94
 
95
95
  def has_step?(item)
96
- item.each_sub_nodes do |node|
96
+ item.each_sub_nodes(deep: true) do |node|
97
97
  return true if node.is_a?(Hiptest::Nodes::Step)
98
98
  end
99
99
  false
@@ -6,7 +6,7 @@ require 'hiptest-publisher/handlebars_helper'
6
6
  require 'hiptest-publisher/render_context_maker'
7
7
 
8
8
  module Hiptest
9
- class Renderer < Hiptest::Nodes::ChildrenFirstWalker
9
+ class Renderer < Hiptest::Nodes::Walker
10
10
  attr_reader :rendered
11
11
  include RenderContextMaker
12
12
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hiptest-publisher
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.3
4
+ version: 0.6.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Hiptest R&D
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-10-21 00:00:00.000000000 Z
11
+ date: 2015-10-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: colorize