rspock 2.5.0 → 3.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 +4 -4
- data/.github/CODEOWNERS +1 -0
- data/.github/workflows/ci.yml +1 -1
- data/.gitignore +4 -1
- data/.ruby-version +1 -0
- data/CHANGELOG.md +29 -2
- data/Gemfile.lock +12 -14
- data/README.md +50 -35
- data/dependencies.rb +11 -0
- data/dev.yml +8 -0
- data/lib/rspock/ast/interaction_to_mocha_mock_transformation.rb +3 -1
- data/lib/rspock/ast/node.rb +19 -40
- data/lib/rspock/ast/parser/block.rb +2 -1
- data/lib/rspock/ast/parser/interaction_parser.rb +11 -4
- data/lib/rspock/ast/parser/statement_parser.rb +13 -5
- data/lib/rspock/ast/parser/test_method_parser.rb +4 -2
- data/lib/rspock/ast/statement_to_assertion_transformation.rb +2 -1
- data/lib/rspock/ast/test_method_def_transformation.rb +9 -8
- data/lib/rspock/ast/test_method_dstr_transformation.rb +5 -7
- data/lib/rspock/ast/test_method_transformation.rb +161 -111
- data/lib/rspock/ast/transformation.rb +1 -27
- data/lib/rspock/version.rb +1 -1
- data/lib/rspock.rb +0 -1
- data/rspock.gemspec +3 -4
- data/skills/rspock/SKILL.md +198 -0
- metadata +10 -39
- data/lib/generators/rspock/install_generator.rb +0 -17
- data/lib/generators/templates/rspock_initializer.rb +0 -2
- data/lib/minitest/rspock_plugin.rb +0 -10
- data/lib/rspock/ast/method_call_to_lvar_transformation.rb +0 -24
- data/lib/rspock/backtrace_filter.rb +0 -53
- data/lib/rspock/minitest/backtrace_filter.rb +0 -16
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: rspock
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version:
|
|
4
|
+
version: 3.0.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Jean-Philippe Duchesne
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2026-
|
|
11
|
+
date: 2026-07-24 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: bundler
|
|
@@ -114,14 +114,14 @@ dependencies:
|
|
|
114
114
|
requirements:
|
|
115
115
|
- - "~>"
|
|
116
116
|
- !ruby/object:Gem::Version
|
|
117
|
-
version: '
|
|
117
|
+
version: '3.0'
|
|
118
118
|
type: :runtime
|
|
119
119
|
prerelease: false
|
|
120
120
|
version_requirements: !ruby/object:Gem::Requirement
|
|
121
121
|
requirements:
|
|
122
122
|
- - "~>"
|
|
123
123
|
- !ruby/object:Gem::Version
|
|
124
|
-
version: '
|
|
124
|
+
version: '3.0'
|
|
125
125
|
- !ruby/object:Gem::Dependency
|
|
126
126
|
name: minitest
|
|
127
127
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -150,34 +150,6 @@ dependencies:
|
|
|
150
150
|
- - ">="
|
|
151
151
|
- !ruby/object:Gem::Version
|
|
152
152
|
version: '1.0'
|
|
153
|
-
- !ruby/object:Gem::Dependency
|
|
154
|
-
name: parser
|
|
155
|
-
requirement: !ruby/object:Gem::Requirement
|
|
156
|
-
requirements:
|
|
157
|
-
- - ">="
|
|
158
|
-
- !ruby/object:Gem::Version
|
|
159
|
-
version: '3.0'
|
|
160
|
-
type: :runtime
|
|
161
|
-
prerelease: false
|
|
162
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
163
|
-
requirements:
|
|
164
|
-
- - ">="
|
|
165
|
-
- !ruby/object:Gem::Version
|
|
166
|
-
version: '3.0'
|
|
167
|
-
- !ruby/object:Gem::Dependency
|
|
168
|
-
name: unparser
|
|
169
|
-
requirement: !ruby/object:Gem::Requirement
|
|
170
|
-
requirements:
|
|
171
|
-
- - ">="
|
|
172
|
-
- !ruby/object:Gem::Version
|
|
173
|
-
version: '0.6'
|
|
174
|
-
type: :runtime
|
|
175
|
-
prerelease: false
|
|
176
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
177
|
-
requirements:
|
|
178
|
-
- - ">="
|
|
179
|
-
- !ruby/object:Gem::Version
|
|
180
|
-
version: '0.6'
|
|
181
153
|
description: Data-driven testing framework.
|
|
182
154
|
email:
|
|
183
155
|
- jpduchesne89@gmail.com
|
|
@@ -188,9 +160,11 @@ files:
|
|
|
188
160
|
- ".claude/CLAUDE.md"
|
|
189
161
|
- ".cursor/rules/base.mdc"
|
|
190
162
|
- ".cursor/rules/best-practices.mdc"
|
|
163
|
+
- ".github/CODEOWNERS"
|
|
191
164
|
- ".github/workflows/ci.yml"
|
|
192
165
|
- ".github/workflows/release.yml"
|
|
193
166
|
- ".gitignore"
|
|
167
|
+
- ".ruby-version"
|
|
194
168
|
- CHANGELOG.md
|
|
195
169
|
- CODE_OF_CONDUCT.md
|
|
196
170
|
- Gemfile
|
|
@@ -202,15 +176,13 @@ files:
|
|
|
202
176
|
- bin/setup
|
|
203
177
|
- block_graph
|
|
204
178
|
- block_graph.png
|
|
179
|
+
- dependencies.rb
|
|
180
|
+
- dev.yml
|
|
205
181
|
- lib/Rakefile
|
|
206
|
-
- lib/generators/rspock/install_generator.rb
|
|
207
|
-
- lib/generators/templates/rspock_initializer.rb
|
|
208
|
-
- lib/minitest/rspock_plugin.rb
|
|
209
182
|
- lib/rspock.rb
|
|
210
183
|
- lib/rspock/ast/header_nodes_transformation.rb
|
|
211
184
|
- lib/rspock/ast/interaction_to_block_identity_assertion_transformation.rb
|
|
212
185
|
- lib/rspock/ast/interaction_to_mocha_mock_transformation.rb
|
|
213
|
-
- lib/rspock/ast/method_call_to_lvar_transformation.rb
|
|
214
186
|
- lib/rspock/ast/node.rb
|
|
215
187
|
- lib/rspock/ast/parser/block.rb
|
|
216
188
|
- lib/rspock/ast/parser/cleanup_block.rb
|
|
@@ -227,15 +199,14 @@ files:
|
|
|
227
199
|
- lib/rspock/ast/test_method_dstr_transformation.rb
|
|
228
200
|
- lib/rspock/ast/test_method_transformation.rb
|
|
229
201
|
- lib/rspock/ast/transformation.rb
|
|
230
|
-
- lib/rspock/backtrace_filter.rb
|
|
231
202
|
- lib/rspock/declarative.rb
|
|
232
203
|
- lib/rspock/helpers/block_capture.rb
|
|
233
|
-
- lib/rspock/minitest/backtrace_filter.rb
|
|
234
204
|
- lib/rspock/railtie.rb
|
|
235
205
|
- lib/rspock/tasks/rspock.rake
|
|
236
206
|
- lib/rspock/tasks/truth_table.rb
|
|
237
207
|
- lib/rspock/version.rb
|
|
238
208
|
- rspock.gemspec
|
|
209
|
+
- skills/rspock/SKILL.md
|
|
239
210
|
homepage: https://github.com/rspockframework/rspock
|
|
240
211
|
licenses:
|
|
241
212
|
- MIT
|
|
@@ -248,7 +219,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
248
219
|
requirements:
|
|
249
220
|
- - ">="
|
|
250
221
|
- !ruby/object:Gem::Version
|
|
251
|
-
version: '3.
|
|
222
|
+
version: '3.3'
|
|
252
223
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
253
224
|
requirements:
|
|
254
225
|
- - ">="
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
# 's' in Rspock is lowercase on purpose, so generator name is +rspock+ instead of +r_spock+
|
|
4
|
-
module Rspock
|
|
5
|
-
module Generators
|
|
6
|
-
class InstallGenerator < Rails::Generators::Base
|
|
7
|
-
source_root File.expand_path("../../templates", __FILE__)
|
|
8
|
-
desc "Creates RSpock initializer for your application"
|
|
9
|
-
|
|
10
|
-
def copy_initializer
|
|
11
|
-
template "rspock_initializer.rb", "config/initializers/rspock.rb"
|
|
12
|
-
|
|
13
|
-
puts "Install complete!"
|
|
14
|
-
end
|
|
15
|
-
end
|
|
16
|
-
end
|
|
17
|
-
end
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
require 'ast_transform/abstract_transformation'
|
|
3
|
-
|
|
4
|
-
module RSpock
|
|
5
|
-
module AST
|
|
6
|
-
class MethodCallToLVarTransformation < ASTTransform::AbstractTransformation
|
|
7
|
-
def initialize(*method_symbols)
|
|
8
|
-
@method_call_nodes = method_symbols.map { |method_sym|
|
|
9
|
-
s(:send, nil, method_sym)
|
|
10
|
-
}
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
def on_send(node)
|
|
14
|
-
return super unless method_call_node?(node)
|
|
15
|
-
|
|
16
|
-
node.updated(:lvar, [node.children[1]])
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
def method_call_node?(node)
|
|
20
|
-
@method_call_nodes.include?(node)
|
|
21
|
-
end
|
|
22
|
-
end
|
|
23
|
-
end
|
|
24
|
-
end
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
require 'ast_transform/source_map'
|
|
3
|
-
|
|
4
|
-
module RSpock
|
|
5
|
-
class BacktraceFilter
|
|
6
|
-
# Constructs a new BacktraceFilter instance.
|
|
7
|
-
#
|
|
8
|
-
# @param source_map_provider [::ASTTransform::SourceMap] The source map provider to be used.
|
|
9
|
-
def initialize(source_map_provider: ::ASTTransform::SourceMap)
|
|
10
|
-
@source_map_provider = source_map_provider
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
# Filters the backtrace of the given +exception+ and applies the filtered backtrace to the exception.
|
|
14
|
-
#
|
|
15
|
-
# @param exception [Exception] The exception to be filtered.
|
|
16
|
-
#
|
|
17
|
-
# @return [void]
|
|
18
|
-
def filter_exception(exception)
|
|
19
|
-
exception.set_backtrace(source_mapped_backtrace(exception))
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
# Filters the given location.
|
|
23
|
-
#
|
|
24
|
-
# @param location [String] A location string.
|
|
25
|
-
#
|
|
26
|
-
# @return [String] The filtered location.
|
|
27
|
-
def filter_string(location)
|
|
28
|
-
file_path, lineno = location.match(/([\S]+):(\d+)/).captures
|
|
29
|
-
lineno = lineno.to_i
|
|
30
|
-
absolute_path = File.expand_path(file_path)
|
|
31
|
-
|
|
32
|
-
source_map = @source_map_provider.for_file_path(absolute_path)
|
|
33
|
-
return location unless source_map
|
|
34
|
-
|
|
35
|
-
line_number = source_map.line(lineno) || '?'
|
|
36
|
-
location.sub("#{file_path}:#{lineno}", "#{source_map.source_file_path}:#{line_number}")
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
private
|
|
40
|
-
|
|
41
|
-
def source_mapped_backtrace(e)
|
|
42
|
-
e.backtrace_locations&.map(&method(:location_builder))
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
def location_builder(location)
|
|
46
|
-
source_map = @source_map_provider.for_file_path(location.absolute_path || location.path)
|
|
47
|
-
return location.to_s unless source_map
|
|
48
|
-
|
|
49
|
-
line_number = source_map.line(location.lineno) || '?'
|
|
50
|
-
"#{source_map.source_file_path}:#{line_number}"
|
|
51
|
-
end
|
|
52
|
-
end
|
|
53
|
-
end
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
require 'rspock/backtrace_filter'
|
|
3
|
-
|
|
4
|
-
module RSpock
|
|
5
|
-
module Minitest
|
|
6
|
-
class BacktraceFilter
|
|
7
|
-
def initialize
|
|
8
|
-
@backtrace_filter = RSpock::BacktraceFilter.new
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
def filter(backtrace)
|
|
12
|
-
backtrace.map { |line| @backtrace_filter.filter_string(line) }
|
|
13
|
-
end
|
|
14
|
-
end
|
|
15
|
-
end
|
|
16
|
-
end
|