cucumber-messages 0.0.0 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/ISSUE_TEMPLATE.md +5 -0
- data/.github/PULL_REQUEST_TEMPLATE.md +5 -0
- data/.rspec +1 -0
- data/.rsync +4 -0
- data/.subrepo +1 -0
- data/.travis.yml +15 -0
- data/Gemfile +3 -0
- data/LICENSE +21 -0
- data/Makefile +9 -0
- data/README.md +2 -2
- data/Rakefile +23 -0
- data/cucumber-messages.gemspec +34 -0
- data/default.mk +33 -0
- data/lib/cucumber/messages.rb +32 -6
- data/lib/cucumber/messages_pb.rb +242 -0
- data/messages.proto +243 -0
- data/spec/capture_warnings.rb +74 -0
- data/spec/coverage.rb +7 -0
- data/spec/cucumber/messages/messages_spec.rb +23 -0
- metadata +51 -51
- data/VERSION +0 -1
- data/lib/cucumber/messages/id_generator.rb +0 -24
- data/lib/cucumber/messages/message/deserialization.rb +0 -37
- data/lib/cucumber/messages/message/serialization.rb +0 -70
- data/lib/cucumber/messages/message/utils.rb +0 -45
- data/lib/cucumber/messages/message.rb +0 -11
- data/lib/cucumber/messages/ndjson_to_message_enumerator.rb +0 -21
- data/lib/cucumber/messages/time_conversion.rb +0 -33
- data/lib/cucumber/messages.deserializers.rb +0 -1208
- data/lib/cucumber/messages.dtos.rb +0 -1782
data/messages.proto
ADDED
@@ -0,0 +1,243 @@
|
|
1
|
+
syntax = "proto3";
|
2
|
+
import "google/protobuf/timestamp.proto";
|
3
|
+
package io.cucumber.messages;
|
4
|
+
option ruby_package = "Cucumber.Messages";
|
5
|
+
option go_package = "messages";
|
6
|
+
|
7
|
+
// All messages sent between processes must be of type Wrapper
|
8
|
+
message Wrapper {
|
9
|
+
oneof message {
|
10
|
+
Source source = 1;
|
11
|
+
GherkinDocument gherkinDocument = 2;
|
12
|
+
Pickle pickle = 3;
|
13
|
+
Attachment attachment = 4;
|
14
|
+
TestCaseStarted testCaseStarted = 5;
|
15
|
+
TestStepStarted testStepStarted = 6;
|
16
|
+
TestStepFinished testStepFinished = 7;
|
17
|
+
TestCaseFinished testCaseFinished = 8;
|
18
|
+
}
|
19
|
+
}
|
20
|
+
|
21
|
+
////// Source
|
22
|
+
|
23
|
+
message SourceReference {
|
24
|
+
string uri = 1;
|
25
|
+
Location location = 2;
|
26
|
+
}
|
27
|
+
|
28
|
+
message Location {
|
29
|
+
uint32 line = 1;
|
30
|
+
uint32 column = 2;
|
31
|
+
}
|
32
|
+
|
33
|
+
message Attachment {
|
34
|
+
SourceReference source = 1;
|
35
|
+
string data = 2;
|
36
|
+
Media media = 3;
|
37
|
+
}
|
38
|
+
|
39
|
+
message Media {
|
40
|
+
string encoding = 1;
|
41
|
+
string content_type = 2;
|
42
|
+
}
|
43
|
+
|
44
|
+
message Source {
|
45
|
+
string uri = 1;
|
46
|
+
string data = 2;
|
47
|
+
Media media = 3;
|
48
|
+
}
|
49
|
+
|
50
|
+
////// Gherkin
|
51
|
+
|
52
|
+
message GherkinDocument {
|
53
|
+
string uri = 1;
|
54
|
+
Feature feature = 2;
|
55
|
+
repeated Comment comments = 3;
|
56
|
+
}
|
57
|
+
|
58
|
+
message Feature {
|
59
|
+
Location location = 1;
|
60
|
+
repeated Tag tags = 2;
|
61
|
+
string language = 3;
|
62
|
+
string keyword = 4;
|
63
|
+
string name = 5;
|
64
|
+
string description = 6;
|
65
|
+
repeated FeatureChild children = 7;
|
66
|
+
}
|
67
|
+
|
68
|
+
message FeatureChild {
|
69
|
+
oneof value {
|
70
|
+
Rule rule = 1;
|
71
|
+
Background background = 2;
|
72
|
+
Scenario scenario = 3;
|
73
|
+
}
|
74
|
+
}
|
75
|
+
|
76
|
+
message Rule {
|
77
|
+
Location location = 1;
|
78
|
+
string keyword = 2;
|
79
|
+
string name = 3;
|
80
|
+
string description = 4;
|
81
|
+
repeated RuleChild children = 5;
|
82
|
+
}
|
83
|
+
|
84
|
+
message RuleChild {
|
85
|
+
oneof value {
|
86
|
+
Background background = 1;
|
87
|
+
Scenario scenario = 2;
|
88
|
+
}
|
89
|
+
}
|
90
|
+
|
91
|
+
message Background {
|
92
|
+
Location location = 1;
|
93
|
+
string keyword = 2;
|
94
|
+
string name = 3;
|
95
|
+
string description = 4;
|
96
|
+
repeated Step steps = 5;
|
97
|
+
}
|
98
|
+
|
99
|
+
message Scenario {
|
100
|
+
Location location = 1;
|
101
|
+
repeated Tag tags = 2;
|
102
|
+
string keyword = 3;
|
103
|
+
string name = 4;
|
104
|
+
string description = 5;
|
105
|
+
repeated Step steps = 6;
|
106
|
+
repeated Examples examples = 7;
|
107
|
+
}
|
108
|
+
|
109
|
+
message Comment {
|
110
|
+
Location location = 1;
|
111
|
+
string text = 2;
|
112
|
+
}
|
113
|
+
|
114
|
+
message DataTable {
|
115
|
+
Location location = 1;
|
116
|
+
repeated TableRow rows = 2;
|
117
|
+
}
|
118
|
+
|
119
|
+
message DocString {
|
120
|
+
Location location = 1;
|
121
|
+
string content_type = 2;
|
122
|
+
string content = 3;
|
123
|
+
string delimiter = 4;
|
124
|
+
}
|
125
|
+
|
126
|
+
message Examples {
|
127
|
+
Location location = 1;
|
128
|
+
repeated Tag tags = 2;
|
129
|
+
string keyword = 3;
|
130
|
+
string name = 4;
|
131
|
+
string description = 5;
|
132
|
+
TableRow table_header = 6;
|
133
|
+
repeated TableRow table_body = 7;
|
134
|
+
}
|
135
|
+
|
136
|
+
message Step {
|
137
|
+
Location location = 1;
|
138
|
+
string keyword = 2;
|
139
|
+
string text = 3;
|
140
|
+
oneof argument {
|
141
|
+
DocString doc_string = 5;
|
142
|
+
DataTable data_table = 6;
|
143
|
+
}
|
144
|
+
}
|
145
|
+
|
146
|
+
message TableCell {
|
147
|
+
Location location = 1;
|
148
|
+
string value = 2;
|
149
|
+
}
|
150
|
+
|
151
|
+
message TableRow {
|
152
|
+
Location location = 1;
|
153
|
+
repeated TableCell cells = 2;
|
154
|
+
}
|
155
|
+
|
156
|
+
message Tag {
|
157
|
+
Location location = 1;
|
158
|
+
string name = 2;
|
159
|
+
}
|
160
|
+
|
161
|
+
////// Pickles
|
162
|
+
|
163
|
+
message Pickle {
|
164
|
+
string id = 1;
|
165
|
+
string uri = 2;
|
166
|
+
string name = 3;
|
167
|
+
string language = 4;
|
168
|
+
repeated PickleStep steps = 5;
|
169
|
+
repeated PickleTag tags = 6;
|
170
|
+
repeated Location locations = 7;
|
171
|
+
}
|
172
|
+
|
173
|
+
message PickleStep {
|
174
|
+
string text = 1;
|
175
|
+
repeated Location locations = 2;
|
176
|
+
oneof argument {
|
177
|
+
PickleDocString doc_string = 3;
|
178
|
+
PickleTable data_table = 4;
|
179
|
+
}
|
180
|
+
}
|
181
|
+
|
182
|
+
message PickleDocString {
|
183
|
+
Location location = 1;
|
184
|
+
string contentType = 2;
|
185
|
+
string content = 3;
|
186
|
+
}
|
187
|
+
|
188
|
+
message PickleTable {
|
189
|
+
repeated PickleTableRow rows = 1;
|
190
|
+
}
|
191
|
+
|
192
|
+
message PickleTableCell {
|
193
|
+
Location location = 1;
|
194
|
+
string value = 2;
|
195
|
+
}
|
196
|
+
|
197
|
+
message PickleTableRow {
|
198
|
+
repeated PickleTableCell cells = 1;
|
199
|
+
}
|
200
|
+
|
201
|
+
message PickleTag {
|
202
|
+
Location location = 1;
|
203
|
+
string name = 2;
|
204
|
+
}
|
205
|
+
|
206
|
+
////// Results
|
207
|
+
|
208
|
+
message TestCaseStarted {
|
209
|
+
string pickleId = 1;
|
210
|
+
google.protobuf.Timestamp timestamp = 2;
|
211
|
+
}
|
212
|
+
|
213
|
+
message TestCaseFinished {
|
214
|
+
string pickleId = 1;
|
215
|
+
google.protobuf.Timestamp timestamp = 2;
|
216
|
+
}
|
217
|
+
|
218
|
+
message TestStepStarted {
|
219
|
+
string pickleId = 1;
|
220
|
+
uint32 index = 2;
|
221
|
+
google.protobuf.Timestamp timestamp = 3;
|
222
|
+
}
|
223
|
+
|
224
|
+
message TestStepFinished {
|
225
|
+
string pickleId = 1;
|
226
|
+
uint32 index = 2;
|
227
|
+
TestResult testResult = 3;
|
228
|
+
google.protobuf.Timestamp timestamp = 4;
|
229
|
+
}
|
230
|
+
|
231
|
+
message TestResult {
|
232
|
+
Status status = 1;
|
233
|
+
string message = 2;
|
234
|
+
}
|
235
|
+
|
236
|
+
enum Status {
|
237
|
+
AMBIGUOUS = 0;
|
238
|
+
FAILED = 1;
|
239
|
+
PASSED = 2;
|
240
|
+
PENDING = 3;
|
241
|
+
SKIPPED = 4;
|
242
|
+
UNDEFINED = 5;
|
243
|
+
}
|
@@ -0,0 +1,74 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
# With thanks to @myronmarston
|
3
|
+
# https://github.com/vcr/vcr/blob/master/spec/capture_warnings.rb
|
4
|
+
|
5
|
+
module CaptureWarnings
|
6
|
+
def report_warnings(&block)
|
7
|
+
current_dir = Dir.pwd
|
8
|
+
warnings, errors = capture_error(&block).partition { |line| line.include?('warning') }
|
9
|
+
project_warnings, other_warnings = warnings.uniq.partition { |line| line.include?(current_dir) }
|
10
|
+
|
11
|
+
if errors.any?
|
12
|
+
puts errors.join("\n")
|
13
|
+
end
|
14
|
+
|
15
|
+
if other_warnings.any?
|
16
|
+
puts "#{ other_warnings.count } warnings detected, set VIEW_OTHER_WARNINGS=true to see them."
|
17
|
+
print_warnings('other', other_warnings) if ENV['VIEW_OTHER_WARNINGS']
|
18
|
+
end
|
19
|
+
|
20
|
+
# Until they fix https://bugs.ruby-lang.org/issues/10661
|
21
|
+
if RUBY_VERSION == "2.2.0"
|
22
|
+
project_warnings = project_warnings.reject { |w| w =~ /warning: possible reference to past scope/ }
|
23
|
+
end
|
24
|
+
|
25
|
+
if project_warnings.any?
|
26
|
+
puts "#{ project_warnings.count } warnings detected"
|
27
|
+
print_warnings('cucumber-expressions', project_warnings)
|
28
|
+
fail "Please remove all cucumber-expressions warnings."
|
29
|
+
end
|
30
|
+
|
31
|
+
ensure_system_exit_if_required
|
32
|
+
end
|
33
|
+
|
34
|
+
def capture_error(&block)
|
35
|
+
old_stderr = STDERR.clone
|
36
|
+
pipe_r, pipe_w = IO.pipe
|
37
|
+
pipe_r.sync = true
|
38
|
+
error = String.new
|
39
|
+
reader = Thread.new do
|
40
|
+
begin
|
41
|
+
loop do
|
42
|
+
error << pipe_r.readpartial(1024)
|
43
|
+
end
|
44
|
+
rescue EOFError
|
45
|
+
end
|
46
|
+
end
|
47
|
+
STDERR.reopen(pipe_w)
|
48
|
+
block.call
|
49
|
+
ensure
|
50
|
+
capture_system_exit
|
51
|
+
STDERR.reopen(old_stderr)
|
52
|
+
pipe_w.close
|
53
|
+
reader.join
|
54
|
+
return error.split("\n")
|
55
|
+
end
|
56
|
+
|
57
|
+
def print_warnings(type, warnings)
|
58
|
+
puts
|
59
|
+
puts "-" * 30 + " #{type} warnings: " + "-" * 30
|
60
|
+
puts
|
61
|
+
puts warnings.join("\n")
|
62
|
+
puts
|
63
|
+
puts "-" * 75
|
64
|
+
puts
|
65
|
+
end
|
66
|
+
|
67
|
+
def ensure_system_exit_if_required
|
68
|
+
raise @system_exit if @system_exit
|
69
|
+
end
|
70
|
+
|
71
|
+
def capture_system_exit
|
72
|
+
@system_exit = $!
|
73
|
+
end
|
74
|
+
end
|
data/spec/coverage.rb
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'cucumber/messages_pb'
|
2
|
+
require 'json'
|
3
|
+
|
4
|
+
module Cucumber
|
5
|
+
module Messages
|
6
|
+
describe Messages do
|
7
|
+
it "builds a pickle doc string" do
|
8
|
+
location = Location.new(line: 10, column: 20)
|
9
|
+
pickle_doc_tring = PickleDocString.new(
|
10
|
+
location: location,
|
11
|
+
contentType: 'text/plain',
|
12
|
+
content: 'some\ncontent\n'
|
13
|
+
)
|
14
|
+
expect(JSON.parse(PickleDocString.encode_json(pickle_doc_tring)))
|
15
|
+
.to(eq(
|
16
|
+
'location' => { 'line' => 10, 'column' => 20 },
|
17
|
+
'contentType' => 'text/plain',
|
18
|
+
'content' => 'some\ncontent\n'
|
19
|
+
))
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
metadata
CHANGED
@@ -1,118 +1,114 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cucumber-messages
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Aslak Hellesøy
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-09-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: google-protobuf
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - '='
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
20
|
-
type: :
|
19
|
+
version: 3.6.1
|
20
|
+
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - '='
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
26
|
+
version: 3.6.1
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: bundler
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - "~>"
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: '13.0'
|
34
31
|
- - ">="
|
35
32
|
- !ruby/object:Gem::Version
|
36
|
-
version:
|
33
|
+
version: '0'
|
37
34
|
type: :development
|
38
35
|
prerelease: false
|
39
36
|
version_requirements: !ruby/object:Gem::Requirement
|
40
37
|
requirements:
|
41
|
-
- - "~>"
|
42
|
-
- !ruby/object:Gem::Version
|
43
|
-
version: '13.0'
|
44
38
|
- - ">="
|
45
39
|
- !ruby/object:Gem::Version
|
46
|
-
version:
|
40
|
+
version: '0'
|
47
41
|
- !ruby/object:Gem::Dependency
|
48
|
-
name:
|
42
|
+
name: rake
|
49
43
|
requirement: !ruby/object:Gem::Requirement
|
50
44
|
requirements:
|
51
45
|
- - "~>"
|
52
46
|
- !ruby/object:Gem::Version
|
53
|
-
version: '3
|
47
|
+
version: '12.3'
|
54
48
|
type: :development
|
55
49
|
prerelease: false
|
56
50
|
version_requirements: !ruby/object:Gem::Requirement
|
57
51
|
requirements:
|
58
52
|
- - "~>"
|
59
53
|
- !ruby/object:Gem::Version
|
60
|
-
version: '3
|
54
|
+
version: '12.3'
|
61
55
|
- !ruby/object:Gem::Dependency
|
62
|
-
name:
|
56
|
+
name: rspec
|
63
57
|
requirement: !ruby/object:Gem::Requirement
|
64
58
|
requirements:
|
65
59
|
- - "~>"
|
66
60
|
- !ruby/object:Gem::Version
|
67
|
-
version:
|
61
|
+
version: '3.7'
|
68
62
|
type: :development
|
69
63
|
prerelease: false
|
70
64
|
version_requirements: !ruby/object:Gem::Requirement
|
71
65
|
requirements:
|
72
66
|
- - "~>"
|
73
67
|
- !ruby/object:Gem::Version
|
74
|
-
version:
|
68
|
+
version: '3.7'
|
75
69
|
- !ruby/object:Gem::Dependency
|
76
|
-
name:
|
70
|
+
name: coveralls
|
77
71
|
requirement: !ruby/object:Gem::Requirement
|
78
72
|
requirements:
|
79
|
-
- - "
|
73
|
+
- - ">="
|
80
74
|
- !ruby/object:Gem::Version
|
81
|
-
version:
|
75
|
+
version: '0'
|
82
76
|
type: :development
|
83
77
|
prerelease: false
|
84
78
|
version_requirements: !ruby/object:Gem::Requirement
|
85
79
|
requirements:
|
86
|
-
- - "
|
80
|
+
- - ">="
|
87
81
|
- !ruby/object:Gem::Version
|
88
|
-
version:
|
89
|
-
description:
|
82
|
+
version: '0'
|
83
|
+
description: Protocol Buffer messages for Cucumber's inter-process communication
|
90
84
|
email: cukes@googlegroups.com
|
91
85
|
executables: []
|
92
86
|
extensions: []
|
93
87
|
extra_rdoc_files: []
|
94
88
|
files:
|
89
|
+
- ".github/ISSUE_TEMPLATE.md"
|
90
|
+
- ".github/PULL_REQUEST_TEMPLATE.md"
|
91
|
+
- ".rspec"
|
92
|
+
- ".rsync"
|
93
|
+
- ".subrepo"
|
94
|
+
- ".travis.yml"
|
95
|
+
- Gemfile
|
96
|
+
- LICENSE
|
97
|
+
- Makefile
|
95
98
|
- README.md
|
96
|
-
-
|
97
|
-
-
|
98
|
-
-
|
99
|
+
- Rakefile
|
100
|
+
- cucumber-messages.gemspec
|
101
|
+
- default.mk
|
99
102
|
- lib/cucumber/messages.rb
|
100
|
-
- lib/cucumber/
|
101
|
-
-
|
102
|
-
-
|
103
|
-
-
|
104
|
-
-
|
105
|
-
|
106
|
-
- lib/cucumber/messages/time_conversion.rb
|
107
|
-
homepage: https://github.com/cucumber/messages-ruby#readme
|
103
|
+
- lib/cucumber/messages_pb.rb
|
104
|
+
- messages.proto
|
105
|
+
- spec/capture_warnings.rb
|
106
|
+
- spec/coverage.rb
|
107
|
+
- spec/cucumber/messages/messages_spec.rb
|
108
|
+
homepage: https://github.com/cucumber/cucumber-messages-ruby#readme
|
108
109
|
licenses:
|
109
110
|
- MIT
|
110
|
-
metadata:
|
111
|
-
bug_tracker_uri: https://github.com/cucumber/messages/issues
|
112
|
-
changelog_uri: https://github.com/cucumber/messages/blob/main/CHANGELOG.md
|
113
|
-
documentation_uri: https://www.rubydoc.info/github/cucumber/messages
|
114
|
-
mailing_list_uri: https://groups.google.com/forum/#!forum/cukes
|
115
|
-
source_code_uri: https://github.com/cucumber/messages
|
111
|
+
metadata: {}
|
116
112
|
post_install_message:
|
117
113
|
rdoc_options:
|
118
114
|
- "--charset=UTF-8"
|
@@ -122,15 +118,19 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
122
118
|
requirements:
|
123
119
|
- - ">="
|
124
120
|
- !ruby/object:Gem::Version
|
125
|
-
version:
|
121
|
+
version: 1.9.3
|
126
122
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
127
123
|
requirements:
|
128
124
|
- - ">="
|
129
125
|
- !ruby/object:Gem::Version
|
130
|
-
version:
|
126
|
+
version: '0'
|
131
127
|
requirements: []
|
132
|
-
|
128
|
+
rubyforge_project:
|
129
|
+
rubygems_version: 2.7.6
|
133
130
|
signing_key:
|
134
131
|
specification_version: 4
|
135
|
-
summary: cucumber-messages-
|
136
|
-
test_files:
|
132
|
+
summary: cucumber-messages-1.0.0
|
133
|
+
test_files:
|
134
|
+
- spec/capture_warnings.rb
|
135
|
+
- spec/coverage.rb
|
136
|
+
- spec/cucumber/messages/messages_spec.rb
|
data/VERSION
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
0.0.0
|
@@ -1,24 +0,0 @@
|
|
1
|
-
require 'securerandom'
|
2
|
-
|
3
|
-
module Cucumber
|
4
|
-
module Messages
|
5
|
-
module IdGenerator
|
6
|
-
class Incrementing
|
7
|
-
def initialize
|
8
|
-
@index = -1
|
9
|
-
end
|
10
|
-
|
11
|
-
def new_id
|
12
|
-
@index += 1
|
13
|
-
@index.to_s
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
class UUID
|
18
|
-
def new_id
|
19
|
-
SecureRandom.uuid
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
@@ -1,37 +0,0 @@
|
|
1
|
-
require 'cucumber/messages/message/utils'
|
2
|
-
require 'json'
|
3
|
-
|
4
|
-
module Cucumber
|
5
|
-
module Messages
|
6
|
-
class Message
|
7
|
-
include Cucumber::Messages::Message::Utils
|
8
|
-
|
9
|
-
module Deserialization
|
10
|
-
def self.included(other)
|
11
|
-
other.extend(ClassMethods)
|
12
|
-
end
|
13
|
-
|
14
|
-
module ClassMethods
|
15
|
-
##
|
16
|
-
# Returns a new Message - or messages into an array - deserialized from the given json document.
|
17
|
-
# CamelCased keys are properly converted to snake_cased attributes in the process
|
18
|
-
#
|
19
|
-
# Cucumber::Messages::Duration.from_json('{"seconds":1,"nanos":42}') # => #<Cucumber::Messages::Duration:0x00007efda134c290 @seconds=1, @nanos=42>
|
20
|
-
# Cucumber::Messages::PickleTag.from_json('{"name":"foo","astNodeId":"abc-def"}') # => #<Cucumber::Messages::PickleTag:0x00007efda138cdb8 @name="foo", @ast_node_id="abc-def">
|
21
|
-
#
|
22
|
-
# It is recursive so embedded messages are also processed.
|
23
|
-
#
|
24
|
-
# json_string = { location: { line: 2 }, text: "comment" }.to_json
|
25
|
-
# Cucumber::Messages::Comment.from_json(json_string) # => #<Cucumber::Messages::Comment:0x00007efda6abf888 @location=#<Cucumber::Messages::Location:0x00007efda6abf978 @line=2, @column=nil>, @text="comment">
|
26
|
-
#
|
27
|
-
# json_string = { uri: 'file:///...', comments: [{text: 'text comment'}, {text: 'another comment'}]}.to_json
|
28
|
-
# Cucumber::Messages::GherkinDocument.from_json(json_string) # => #<Cucumber::Messages::GherkinDocument:0x00007efda11e6a90 ... @comments=[#<Cucumber::Messages::Comment:0x00007efda11e6e50 ..., #<Cucumber::Messages::Comment:0x00007efda11e6b58 ...>]>
|
29
|
-
##
|
30
|
-
def from_json(json_string)
|
31
|
-
from_h(JSON.parse(json_string, { symbolize_names: true }))
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
@@ -1,70 +0,0 @@
|
|
1
|
-
require 'cucumber/messages/message/utils'
|
2
|
-
require 'json'
|
3
|
-
|
4
|
-
module Cucumber
|
5
|
-
module Messages
|
6
|
-
class Message
|
7
|
-
include Cucumber::Messages::Message::Utils
|
8
|
-
|
9
|
-
module Serialization
|
10
|
-
##
|
11
|
-
# Returns a new Hash formed from the message attributes
|
12
|
-
# If +camelize:+ keyword parameter is set to true, then keys will be camelized
|
13
|
-
# If +reject_nil_values:+ keyword parameter is set to true, resulting hash won't include nil values
|
14
|
-
#
|
15
|
-
# Cucumber::Messages::Duration.new(seconds: 1, nanos: 42).to_h # => { seconds: 1, nanos: 42 }
|
16
|
-
# Cucumber::Messages::PickleTag.new(name: 'foo', ast_node_id: 'abc-def').to_h(camelize: true) # => { name: 'foo', astNodeId: 'abc-def' }
|
17
|
-
# Cucumber::Messages::PickleTag.new(name: 'foo', ast_node_id: nil).to_h(reject_nil_values: true) # => { name: 'foo' }
|
18
|
-
#
|
19
|
-
# It is recursive so embedded messages are also processed
|
20
|
-
#
|
21
|
-
# location = Cucumber::Messages::Location.new(line: 2)
|
22
|
-
# Cucumber::Messages::Comment.new(location: location, text: 'comment').to_h # => { location: { line: 2, :column: nil }, text: "comment" }
|
23
|
-
##
|
24
|
-
def to_h(camelize: false, reject_nil_values: false)
|
25
|
-
resulting_hash = self.instance_variables.map do |variable_name|
|
26
|
-
h_key = variable_name[1..-1]
|
27
|
-
h_key = Cucumber::Messages::Message.camelize(h_key) if camelize
|
28
|
-
|
29
|
-
h_value = prepare_value(
|
30
|
-
self.instance_variable_get(variable_name),
|
31
|
-
camelize: camelize,
|
32
|
-
reject_nil_values: reject_nil_values
|
33
|
-
)
|
34
|
-
|
35
|
-
[ h_key.to_sym, h_value ]
|
36
|
-
end.to_h
|
37
|
-
|
38
|
-
resulting_hash.reject! { |_, value| value.nil? } if reject_nil_values
|
39
|
-
resulting_hash
|
40
|
-
end
|
41
|
-
|
42
|
-
##
|
43
|
-
# Generates a JSON document from the message.
|
44
|
-
# Keys are camelized during the process. Null values are not part of the json document.
|
45
|
-
#
|
46
|
-
# Cucumber::Messages::Duration.new(seconds: 1, nanos: 42).to_json # => '{"seconds":1,"nanos":42}'
|
47
|
-
# Cucumber::Messages::PickleTag.new(name: 'foo', ast_node_id: 'abc-def').to_json # => '{"name":"foo","astNodeId":"abc-def"}'
|
48
|
-
# Cucumber::Messages::PickleTag.new(name: 'foo', ast_node_id: nil).to_json # => '{"name":"foo"}'
|
49
|
-
#
|
50
|
-
# As #to_h, the method is recursive
|
51
|
-
#
|
52
|
-
# location = Cucumber::Messages::Location.new(line: 2)
|
53
|
-
# Cucumber::Messages::Comment.new(location: location, text: 'comment').to_json # => '{"location":{"line":2,"column":null},"text":"comment"}'
|
54
|
-
##
|
55
|
-
def to_json
|
56
|
-
to_h(camelize: true, reject_nil_values: true).to_json
|
57
|
-
end
|
58
|
-
|
59
|
-
private
|
60
|
-
|
61
|
-
def prepare_value(value, camelize:, reject_nil_values:)
|
62
|
-
return value.to_h(camelize: camelize, reject_nil_values: reject_nil_values) if value.is_a?(Cucumber::Messages::Message)
|
63
|
-
return value.map { |v| prepare_value(v, camelize: camelize, reject_nil_values: reject_nil_values) } if value.is_a?(Array)
|
64
|
-
|
65
|
-
value
|
66
|
-
end
|
67
|
-
end
|
68
|
-
end
|
69
|
-
end
|
70
|
-
end
|