gauge-ruby 0.4.3 → 0.5.4

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.
Files changed (39) hide show
  1. checksums.yaml +5 -5
  2. data/lib/code_parser.rb +52 -41
  3. data/lib/configuration.rb +37 -26
  4. data/lib/datastore.rb +6 -18
  5. data/lib/executor.rb +29 -36
  6. data/lib/gauge.rb +6 -19
  7. data/lib/gauge_messages.rb +12 -18
  8. data/lib/gauge_runtime.rb +14 -66
  9. data/lib/gauge_screenshot.rb +52 -0
  10. data/lib/log.rb +34 -28
  11. data/lib/messages_pb.rb +331 -0
  12. data/lib/method_cache.rb +21 -18
  13. data/lib/processors/cache_file_processor.rb +20 -31
  14. data/lib/processors/datastore_init_processor.rb +23 -30
  15. data/lib/processors/execute_step_request_processor.rb +11 -23
  16. data/lib/processors/execution_handler.rb +33 -33
  17. data/lib/processors/execution_hook_processors.rb +23 -36
  18. data/lib/processors/implementation_file_list_processor.rb +8 -21
  19. data/lib/processors/implementation_glob_pattern_processor.rb +15 -0
  20. data/lib/processors/kill_request_processor.rb +5 -17
  21. data/lib/processors/refactor_step_request_processor.rb +16 -28
  22. data/lib/processors/step_name_request_processor.rb +15 -30
  23. data/lib/processors/step_names_request_processor.rb +8 -22
  24. data/lib/processors/step_positions_request_processor.rb +9 -22
  25. data/lib/processors/step_validation_request_processor.rb +23 -37
  26. data/lib/processors/stub_implementation_processor.rb +10 -22
  27. data/lib/service_handlers.rb +110 -0
  28. data/lib/services_pb.rb +15 -0
  29. data/lib/services_services_pb.rb +165 -0
  30. data/lib/spec_pb.rb +272 -0
  31. data/lib/static_loader.rb +10 -22
  32. data/lib/table.rb +5 -17
  33. data/lib/util.rb +31 -44
  34. metadata +80 -21
  35. data/lib/api.pb.rb +0 -273
  36. data/lib/connector.rb +0 -45
  37. data/lib/message_processor.rb +0 -59
  38. data/lib/messages.pb.rb +0 -413
  39. data/lib/spec.pb.rb +0 -319
@@ -0,0 +1,15 @@
1
+ =begin
2
+ * Copyright (c) ThoughtWorks, Inc.
3
+ * Licensed under the Apache License, Version 2.0
4
+ * See LICENSE.txt in the project root for license information.
5
+ =end
6
+ require_relative '../util'
7
+
8
+ module Gauge
9
+ module Processors
10
+ def process_implementation_glob_pattern_request(_request)
11
+ implPath = Util.get_step_implementation_dir
12
+ Messages::ImplementationFileGlobPatternResponse.new(globPatterns: ["#{implPath}/**/*.rb"])
13
+ end
14
+ end
15
+ end
@@ -1,20 +1,8 @@
1
- # Copyright 2015 ThoughtWorks, Inc.
2
-
3
- # This file is part of Gauge-Ruby.
4
-
5
- # Gauge-Ruby is free software: you can redistribute it and/or modify
6
- # it under the terms of the GNU General Public License as published by
7
- # the Free Software Foundation, either version 3 of the License, or
8
- # (at your option) any later version.
9
-
10
- # Gauge-Ruby is distributed in the hope that it will be useful,
11
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
12
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
- # GNU General Public License for more details.
14
-
15
- # You should have received a copy of the GNU General Public License
16
- # along with Gauge-Ruby. If not, see <http://www.gnu.org/licenses/>.
17
-
1
+ =begin
2
+ * Copyright (c) ThoughtWorks, Inc.
3
+ * Licensed under the Apache License, Version 2.0
4
+ * See LICENSE.txt in the project root for license information.
5
+ =end
18
6
  module Gauge
19
7
  # @api private
20
8
  module Processors
@@ -1,39 +1,27 @@
1
- # Copyright 2015 ThoughtWorks, Inc.
2
-
3
- # This file is part of Gauge-Ruby.
4
-
5
- # Gauge-Ruby is free software: you can redistribute it and/or modify
6
- # it under the terms of the GNU General Public License as published by
7
- # the Free Software Foundation, either version 3 of the License, or
8
- # (at your option) any later version.
9
-
10
- # Gauge-Ruby is distributed in the hope that it will be useful,
11
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
12
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
- # GNU General Public License for more details.
14
-
15
- # You should have received a copy of the GNU General Public License
16
- # along with Gauge-Ruby. If not, see <http://www.gnu.org/licenses/>.
17
-
1
+ =begin
2
+ * Copyright (c) ThoughtWorks, Inc.
3
+ * Licensed under the Apache License, Version 2.0
4
+ * See LICENSE.txt in the project root for license information.
5
+ =end
18
6
  require_relative '../code_parser'
19
7
 
20
8
  module Gauge
21
9
  module Processors
22
- def refactor_step(message)
23
- request = message.refactorRequest
24
- refactor_response = Messages::RefactorResponse.new(success: true)
10
+ def process_refactor_request(request)
11
+ response = Messages::RefactorResponse.new(success: true)
25
12
  begin
26
13
  step_info = get_step request.oldStepValue.stepValue
27
- refactored_code = CodeParser.refactor step_info, request.paramPositions, request.newStepValue
14
+ refactored_info = CodeParser.refactor step_info, request.paramPositions, request.newStepValue
28
15
  file = step_info[:locations][0][:file]
29
- File.write file, refactored_code if request.saveChanges
30
- refactor_response.filesChanged = [file]
31
- refactor_response.fileChanges = [Messages::FileChanges.new(:fileName => file, :fileContent => refactored_code)]
16
+ File.write file, refactored_info[:content] if request.saveChanges
17
+ response.filesChanged.push(file)
18
+ changes = Messages::FileChanges.new(fileName: file, fileContent: refactored_info[:content], diffs: refactored_info[:diffs])
19
+ response.fileChanges.push(changes)
32
20
  rescue Exception => e
33
- refactor_response.success = false
34
- refactor_response.error = e.message
21
+ response.success = false
22
+ response.error = e.message
35
23
  end
36
- Messages::Message.new(:messageType => Messages::Message::MessageType::RefactorResponse, :messageId => message.messageId, refactorResponse: refactor_response)
24
+ response
37
25
  end
38
26
 
39
27
  def get_step(step_text)
@@ -42,4 +30,4 @@ module Gauge
42
30
  MethodCache.get_step_info(step_text)
43
31
  end
44
32
  end
45
- end
33
+ end
@@ -1,35 +1,20 @@
1
- # Copyright 2018 ThoughtWorks, Inc.
2
-
3
- # This file is part of Gauge-Ruby.
4
-
5
- # Gauge-Ruby is free software: you can redistribute it and/or modify
6
- # it under the terms of the GNU General Public License as published by
7
- # the Free Software Foundation, either version 3 of the License, or
8
- # (at your option) any later version.
9
-
10
- # Gauge-Ruby is distributed in the hope that it will be useful,
11
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
12
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
- # GNU General Public License for more details.
14
-
15
- # You should have received a copy of the GNU General Public License
16
- # along with Gauge-Ruby. If not, see <http://www.gnu.org/licenses/>.
17
-
1
+ =begin
2
+ * Copyright (c) ThoughtWorks, Inc.
3
+ * Licensed under the Apache License, Version 2.0
4
+ * See LICENSE.txt in the project root for license information.
5
+ =end
18
6
  module Gauge
19
7
  module Processors
20
- def process_step_name_request(message)
21
- step_value = message.stepNameRequest.stepValue
22
- if MethodCache.valid_step?(step_value)
23
- step_text = MethodCache.get_step_text(step_value)
24
- has_alias = MethodCache.has_alias?(step_text)
25
- loc = MethodCache.get_step_info(step_value)[:locations][0]
26
- span = Gauge::Messages::Span.new(start: loc[:span].begin.line, end: loc[:span].end.line, startChar: loc[:span].begin.column, endChar: loc[:span].end.column)
27
- r = Messages::StepNameResponse.new(isStepPresent: true, stepName: [step_text], hasAlias: has_alias, fileName: loc[:file], span: span)
28
- Messages::Message.new(:messageType => Messages::Message::MessageType::StepNameResponse, :messageId => message.messageId, :stepNameResponse => r)
29
- else
30
- r = Messages::StepNameResponse.new(isStepPresent: false, stepName: [''], hasAlias: false, fileName: '', span: nil)
31
- Messages::Message.new(:messageType => Messages::Message::MessageType::StepNameResponse, :messageId => message.messageId, :stepNameResponse => r)
8
+ def process_step_name_request(request)
9
+ step_value = request.stepValue
10
+ unless MethodCache.valid_step?(step_value)
11
+ return Messages::StepNameResponse.new(isStepPresent: false, stepName: [""], hasAlias: false, fileName: "", span: nil)
32
12
  end
13
+ step_text = MethodCache.get_step_text(step_value)
14
+ has_alias = MethodCache.has_alias?(step_text)
15
+ loc = MethodCache.get_step_info(step_value)[:locations][0]
16
+ span = Gauge::Messages::Span.new(start: loc[:span].begin.line, end: loc[:span].end.line, startChar: loc[:span].begin.column, endChar: loc[:span].end.column)
17
+ Messages::StepNameResponse.new(isStepPresent: true, stepName: [step_text], hasAlias: has_alias, fileName: loc[:file], span: span)
33
18
  end
34
19
  end
35
- end
20
+ end
@@ -1,26 +1,12 @@
1
- # Copyright 2015 ThoughtWorks, Inc.
2
-
3
- # This file is part of Gauge-Ruby.
4
-
5
- # Gauge-Ruby is free software: you can redistribute it and/or modify
6
- # it under the terms of the GNU General Public License as published by
7
- # the Free Software Foundation, either version 3 of the License, or
8
- # (at your option) any later version.
9
-
10
- # Gauge-Ruby is distributed in the hope that it will be useful,
11
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
12
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
- # GNU General Public License for more details.
14
-
15
- # You should have received a copy of the GNU General Public License
16
- # along with Gauge-Ruby. If not, see <http://www.gnu.org/licenses/>.
17
-
1
+ =begin
2
+ * Copyright (c) ThoughtWorks, Inc.
3
+ * Licensed under the Apache License, Version 2.0
4
+ * See LICENSE.txt in the project root for license information.
5
+ =end
18
6
  module Gauge
19
7
  module Processors
20
- def process_step_names_request(message)
21
- step_names_response = Messages::StepNamesResponse.new(:steps => MethodCache.all_steps)
22
- Messages::Message.new(:messageType => Messages::Message::MessageType::StepNamesResponse,
23
- :messageId => message.messageId, :stepNamesResponse => step_names_response)
8
+ def process_step_names_request(_request)
9
+ Messages::StepNamesResponse.new(steps: MethodCache.all_steps)
24
10
  end
25
11
  end
26
- end
12
+ end
@@ -1,28 +1,15 @@
1
- # Copyright 2018 ThoughtWorks, Inc.
2
-
3
- # This file is part of Gauge-Ruby.
4
-
5
- # Gauge-Ruby is free software: you can redistribute it and/or modify
6
- # it under the terms of the GNU General Public License as published by
7
- # the Free Software Foundation, either version 3 of the License, or
8
- # (at your option) any later version.
9
-
10
- # Gauge-Ruby is distributed in the hope that it will be useful,
11
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
12
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
- # GNU General Public License for more details.
14
-
15
- # You should have received a copy of the GNU General Public License
16
- # along with Gauge-Ruby. If not, see <http://www.gnu.org/licenses/>.
17
-
1
+ =begin
2
+ * Copyright (c) ThoughtWorks, Inc.
3
+ * Licensed under the Apache License, Version 2.0
4
+ * See LICENSE.txt in the project root for license information.
5
+ =end
18
6
  module Gauge
19
7
  module Processors
20
- def process_step_positions_request(message)
21
- file = message.stepPositionsRequest.filePath
8
+ def process_step_positions_request(request)
9
+ file = request.filePath
22
10
  positions = MethodCache.step_positions(file)
23
11
  p = create_step_position_messages(positions)
24
- r = Messages::StepPositionsResponse.new(:stepPositions => p)
25
- Messages::Message.new(:messageType => Messages::Message::MessageType::StepPositionsResponse, :messageId => message.messageId, :stepPositionsResponse => r)
12
+ Messages::StepPositionsResponse.new(:stepPositions => p)
26
13
  end
27
14
 
28
15
  def create_step_position_messages(positions)
@@ -32,4 +19,4 @@ module Gauge
32
19
  end
33
20
  end
34
21
  end
35
- end
22
+ end
@@ -1,49 +1,35 @@
1
- # Copyright 2015 ThoughtWorks, Inc.
2
-
3
- # This file is part of Gauge-Ruby.
4
-
5
- # Gauge-Ruby is free software: you can redistribute it and/or modify
6
- # it under the terms of the GNU General Public License as published by
7
- # the Free Software Foundation, either version 3 of the License, or
8
- # (at your option) any later version.
9
-
10
- # Gauge-Ruby is distributed in the hope that it will be useful,
11
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
12
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
- # GNU General Public License for more details.
14
-
15
- # You should have received a copy of the GNU General Public License
16
- # along with Gauge-Ruby. If not, see <http://www.gnu.org/licenses/>.
17
-
1
+ =begin
2
+ * Copyright (c) ThoughtWorks, Inc.
3
+ * Licensed under the Apache License, Version 2.0
4
+ * See LICENSE.txt in the project root for license information.
5
+ =end
18
6
  module Gauge
19
7
  module Processors
20
- def process_step_validation_request(message)
21
- request = message.stepValidateRequest
22
- is_valid = true
23
- msg,suggestion = ''
24
- err_type = nil
8
+ def process_step_validation_request(request)
9
+ response = Messages::StepValidateResponse.new(isValid: true)
25
10
  if !MethodCache.valid_step? request.stepText
26
- is_valid = false
27
- msg = 'Step implementation not found'
28
- err_type = Messages::StepValidateResponse::ErrorType::STEP_IMPLEMENTATION_NOT_FOUND
29
- suggestion = create_suggestion(request.stepValue) unless request.stepValue.stepValue.empty?
11
+ suggestion = request.stepValue.stepValue.empty? ? '' : create_suggestion(request.stepValue)
12
+ response = Messages::StepValidateResponse.new(
13
+ isValid: false,
14
+ errorMessage: 'Step implementation not found',
15
+ errorType: Messages::StepValidateResponse::ErrorType::STEP_IMPLEMENTATION_NOT_FOUND,
16
+ suggestion: suggestion
17
+ )
30
18
  elsif MethodCache.multiple_implementation?(request.stepText)
31
- is_valid = false
32
- msg = "Multiple step implementations found for => '#{request.stepText}'"
33
- err_type = Messages::StepValidateResponse::ErrorType::DUPLICATE_STEP_IMPLEMENTATION
34
- suggestion = ''
19
+ response = Messages::StepValidateResponse.new(
20
+ isValid: false,
21
+ errorMessage: "Multiple step implementations found for => '#{request.stepText}'",
22
+ errorType: Messages::StepValidateResponse::ErrorType::DUPLICATE_STEP_IMPLEMENTATION
23
+ )
35
24
  end
36
- step_validate_response = Messages::StepValidateResponse.new(:isValid => is_valid, :errorMessage => msg, :errorType => err_type, :suggestion => suggestion)
37
- Messages::Message.new(:messageType => Messages::Message::MessageType::StepValidateResponse,
38
- :messageId => message.messageId,
39
- :stepValidateResponse => step_validate_response)
25
+ response
40
26
  end
41
27
 
42
28
  def create_suggestion(step_value)
43
29
  count = -1
44
- step_text = step_value.stepValue.gsub(/{}/) {"<arg#{count += 1}>"}
45
- params = step_value.parameters.map.with_index {|v,i| "arg#{i}"}.join ", "
30
+ step_text = step_value.stepValue.gsub(/{}/) { "<arg#{count += 1}>" }
31
+ params = step_value.parameters.map.with_index { |_v, i| "arg#{i}" }.join ', '
46
32
  "step '#{step_text}' do |#{params}|\n\traise 'Unimplemented Step'\nend"
47
33
  end
48
34
  end
49
- end
35
+ end
@@ -1,27 +1,15 @@
1
- # Copyright 2018 ThoughtWorks, Inc.
2
-
3
- # This file is part of Gauge-Ruby.
4
-
5
- # Gauge-Ruby is free software: you can redistribute it and/or modify
6
- # it under the terms of the GNU General Public License as published by
7
- # the Free Software Foundation, either version 3 of the License, or
8
- # (at your option) any later version.
9
-
10
- # Gauge-Ruby is distributed in the hope that it will be useful,
11
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
12
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
- # GNU General Public License for more details.
14
-
15
- # You should have received a copy of the GNU General Public License
16
- # along with Gauge-Ruby. If not, see <http://www.gnu.org/licenses/>.
17
-
1
+ =begin
2
+ * Copyright (c) ThoughtWorks, Inc.
3
+ * Licensed under the Apache License, Version 2.0
4
+ * See LICENSE.txt in the project root for license information.
5
+ =end
18
6
  require_relative '../../lib/util'
19
7
 
20
8
  module Gauge
21
9
  module Processors
22
- def process_stub_implementation_code_request(message)
23
- codes = message.stubImplementationCodeRequest.codes
24
- file_path = message.stubImplementationCodeRequest.implementationFilePath
10
+ def process_stub_implementation_code_request(request)
11
+ codes = request.codes
12
+ file_path = request.implementationFilePath
25
13
  content = ''
26
14
  if File.file? file_path
27
15
  content = File.read(file_path)
@@ -29,10 +17,10 @@ module Gauge
29
17
  file_path = Util.get_file_name
30
18
  end
31
19
  text_diffs = [Messages::TextDiff.new(span: create_span(content, codes), content: codes.join("\n"))]
32
- file_diff = Messages::FileDiff.new(filePath: file_path, textDiffs: text_diffs)
33
- Messages::Message.new(messageType: Messages::Message::MessageType::FileDiff, messageId: message.messageId, fileDiff: file_diff)
20
+ Messages::FileDiff.new(filePath: file_path, textDiffs: text_diffs)
34
21
  end
35
22
 
23
+ private
36
24
  def create_span(content, codes)
37
25
  unless content.empty?
38
26
  eof_char = content.strip.length == content.length ? "\n" : ''
@@ -0,0 +1,110 @@
1
+ =begin
2
+ * Copyright (c) ThoughtWorks, Inc.
3
+ * Licensed under the Apache License, Version 2.0
4
+ * See LICENSE.txt in the project root for license information.
5
+ =end
6
+ require_relative "services_services_pb"
7
+ Dir[File.join(File.dirname(__FILE__), "processors/*.rb")].each { |file| require file }
8
+
9
+ module Gauge
10
+ class ExecutionHandler < Messages::Runner::Service
11
+ include Processors
12
+
13
+ def initialize(server)
14
+ @server = server
15
+ end
16
+
17
+ def initialize_suite_data_store(request, _call)
18
+ process_suite_data_store_init_request(request)
19
+ end
20
+
21
+ def initialize_spec_data_store(request, _call)
22
+ process_spec_data_store_init_request(request)
23
+ end
24
+
25
+ def initialize_scenario_data_store(request, _call)
26
+ process_scenario_data_store_init_request(request)
27
+ end
28
+
29
+ def start_execution(request, _call)
30
+ process_execution_start_request(request)
31
+ end
32
+
33
+ def finish_execution(request, _call)
34
+ process_execution_end_request(request)
35
+ end
36
+
37
+ def start_spec_execution(request, _call)
38
+ process_spec_execution_start_request(request)
39
+ end
40
+
41
+ def finish_spec_execution(request, _call)
42
+ process_spec_execution_end_request(request)
43
+ end
44
+
45
+ def start_scenario_execution(request, _call)
46
+ process_scenario_execution_start_request(request)
47
+ end
48
+
49
+ def finish_scenario_execution(request, _call)
50
+ process_scenario_execution_end_request(request)
51
+ end
52
+
53
+ def start_step_execution(request, _call)
54
+ process_step_execution_start_request(request)
55
+ end
56
+
57
+ def finish_step_execution(request, _call)
58
+ process_step_execution_end_request(request)
59
+ end
60
+
61
+ def execute_step(request, _call)
62
+ process_execute_step_request(request)
63
+ end
64
+
65
+ def get_step_names(request, _call)
66
+ process_step_names_request(request)
67
+ end
68
+
69
+ def cache_file(request, _call)
70
+ process_cache_file_request(request)
71
+ end
72
+
73
+ def get_step_positions(request, _call)
74
+ process_step_positions_request(request)
75
+ end
76
+
77
+ def get_implementation_files(request, _call)
78
+ process_implementation_file_list_request(request)
79
+ end
80
+
81
+ def implement_stub(request, _call)
82
+ process_stub_implementation_code_request(request)
83
+ end
84
+
85
+ def refactor(request, _call)
86
+ process_refactor_request(request)
87
+ end
88
+
89
+ def get_step_name(request, _call)
90
+ process_step_name_request(request)
91
+ end
92
+
93
+ def get_glob_patterns(request, _call)
94
+ process_implementation_glob_pattern_request(request)
95
+ end
96
+
97
+ def validate_step(request, _call)
98
+ process_step_validation_request(request)
99
+ end
100
+
101
+ def kill(_request, _call)
102
+ Thread.new do
103
+ sleep 0.1
104
+ @server.stop
105
+ exit(0)
106
+ end.run
107
+ Messages::Empty.new
108
+ end
109
+ end
110
+ end