suture 1.1.2 → 1.2.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/workflows/main.yml +31 -0
- data/.gitignore +0 -1
- data/CHANGELOG.md +21 -3
- data/Gemfile +8 -0
- data/Gemfile.lock +120 -0
- data/README.md +3 -3
- data/Rakefile +15 -47
- data/bin/console +0 -4
- data/lib/suture/comparator.rb +1 -1
- data/lib/suture/config.rb +1 -1
- data/lib/suture/create/builds_plan.rb +6 -6
- data/lib/suture/create/validates_plan.rb +5 -5
- data/lib/suture/error/invalid_plan.rb +3 -3
- data/lib/suture/error/schema_version.rb +1 -1
- data/lib/suture/error/verification_failed.rb +3 -3
- data/lib/suture/surgeon/observer.rb +1 -1
- data/lib/suture/util/env.rb +4 -4
- data/lib/suture/util/scalpel.rb +1 -1
- data/lib/suture/value/result.rb +1 -1
- data/lib/suture/value/test_plan.rb +2 -2
- data/lib/suture/verify/administers_test.rb +2 -2
- data/lib/suture/verify/prescribes_test_plan.rb +5 -5
- data/lib/suture/verify/tests_patient.rb +2 -2
- data/lib/suture/version.rb +1 -1
- data/lib/suture/wrap/logger.rb +1 -1
- data/lib/suture/wrap/sqlite.rb +1 -1
- data/suture.gemspec +13 -31
- metadata +7 -122
- data/.travis.yml +0 -17
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 1326f7c00beb85b3516536b4a7c04783360dde2a15af83be7434201a112967b6
|
|
4
|
+
data.tar.gz: e099889a2efeccbafe0ef83733bd9b3488b6ec7c6e2eed43d2e640a09c0f0650
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: f198879578e76762c39a27ee395efbff86038f1f6c746ded31f46436761db14053d7f4a7c09abb327c6d28f822fdfb2cdbbeb4da6f1f30912f568fd480c36a5e
|
|
7
|
+
data.tar.gz: 4d8ddf4805fbe995f7c5a45cc1e64649f70c64e441127c2b2d9b0f2dccec9b8009529e9a49f6348e2ef94c0a23d71a9a3bae178d66bdf33401295284cab12eff
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
name: Ruby
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches:
|
|
6
|
+
- main
|
|
7
|
+
|
|
8
|
+
pull_request:
|
|
9
|
+
|
|
10
|
+
jobs:
|
|
11
|
+
build:
|
|
12
|
+
runs-on: ubuntu-latest
|
|
13
|
+
name: Ruby ${{ matrix.ruby }}
|
|
14
|
+
strategy:
|
|
15
|
+
matrix:
|
|
16
|
+
ruby:
|
|
17
|
+
- '3.2'
|
|
18
|
+
- '3.3'
|
|
19
|
+
- '3.4'
|
|
20
|
+
- '4.0'
|
|
21
|
+
|
|
22
|
+
steps:
|
|
23
|
+
- uses: actions/checkout@v7
|
|
24
|
+
- name: Set up Ruby
|
|
25
|
+
uses: ruby/setup-ruby@v1
|
|
26
|
+
with:
|
|
27
|
+
ruby-version: ${{ matrix.ruby }}
|
|
28
|
+
bundler-cache: true
|
|
29
|
+
- name: Run tests
|
|
30
|
+
run: bundle exec rake
|
|
31
|
+
|
data/.gitignore
CHANGED
data/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,26 @@
|
|
|
1
1
|
# Change Log
|
|
2
2
|
|
|
3
|
+
## [v1.2.0](https://github.com/testdouble/suture/tree/v1.2.0) (2026-09-18)
|
|
4
|
+
[Full Changelog](https://github.com/testdouble/suture/compare/v1.1.2...v1.2.0)
|
|
5
|
+
|
|
6
|
+
**Implemented enhancements:**
|
|
7
|
+
|
|
8
|
+
- Add support for Ruby 3.4 and 4.0, including fixes for missing stdlib gem dependencies
|
|
9
|
+
|
|
10
|
+
## [v1.1.2](https://github.com/testdouble/suture/tree/v1.1.2) (2018-11-12)
|
|
11
|
+
[Full Changelog](https://github.com/testdouble/suture/compare/v1.1.1...v1.1.2)
|
|
12
|
+
|
|
13
|
+
**Closed issues:**
|
|
14
|
+
|
|
15
|
+
- task to explode tests from recorded suture data? [\#69](https://github.com/testdouble/suture/issues/69)
|
|
16
|
+
|
|
17
|
+
**Merged pull requests:**
|
|
18
|
+
|
|
19
|
+
- Standardize [\#71](https://github.com/testdouble/suture/pull/71) ([searls](https://github.com/searls))
|
|
20
|
+
- Fix couple typos in README.md [\#70](https://github.com/testdouble/suture/pull/70) ([sharipov-ru](https://github.com/sharipov-ru))
|
|
21
|
+
- Make minor sentence changes to the README [\#66](https://github.com/testdouble/suture/pull/66) ([alexcameron89](https://github.com/alexcameron89))
|
|
22
|
+
- Add a Docker image [\#58](https://github.com/testdouble/suture/pull/58) ([seeflanigan](https://github.com/seeflanigan))
|
|
23
|
+
|
|
3
24
|
## [v1.1.1](https://github.com/testdouble/suture/tree/v1.1.1) (2016-09-19)
|
|
4
25
|
[Full Changelog](https://github.com/testdouble/suture/compare/v1.1.0...v1.1.1)
|
|
5
26
|
|
|
@@ -122,6 +143,3 @@
|
|
|
122
143
|
- Create/Initialize a sqlite database [\#2](https://github.com/testdouble/suture/issues/2)
|
|
123
144
|
- Create a new Suture [\#1](https://github.com/testdouble/suture/issues/1)
|
|
124
145
|
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
\* *This Change Log was automatically generated by [github_changelog_generator](https://github.com/skywinder/Github-Changelog-Generator)*
|
data/Gemfile
CHANGED
data/Gemfile.lock
ADDED
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
PATH
|
|
2
|
+
remote: .
|
|
3
|
+
specs:
|
|
4
|
+
suture (1.2.0)
|
|
5
|
+
backports
|
|
6
|
+
bar-of-progress (>= 0.1.3)
|
|
7
|
+
bigdecimal
|
|
8
|
+
sqlite3
|
|
9
|
+
|
|
10
|
+
GEM
|
|
11
|
+
remote: https://rubygems.org/
|
|
12
|
+
specs:
|
|
13
|
+
ast (2.4.2)
|
|
14
|
+
attr_extras (7.1.0)
|
|
15
|
+
backports (3.24.1)
|
|
16
|
+
bar-of-progress (0.1.3)
|
|
17
|
+
base64 (0.1.1)
|
|
18
|
+
bigdecimal (4.1.3)
|
|
19
|
+
concurrent-ruby (1.3.8)
|
|
20
|
+
diff-lcs (1.5.0)
|
|
21
|
+
erb (6.0.7)
|
|
22
|
+
gimme (0.5.0)
|
|
23
|
+
io-console (0.9.4)
|
|
24
|
+
irb (1.18.0)
|
|
25
|
+
pp (>= 0.6.0)
|
|
26
|
+
prism (>= 1.3.0)
|
|
27
|
+
rdoc (>= 4.0.0)
|
|
28
|
+
reline (>= 0.4.2)
|
|
29
|
+
json (2.6.3)
|
|
30
|
+
language_server-protocol (3.17.0.3)
|
|
31
|
+
lint_roller (1.1.0)
|
|
32
|
+
logger (1.7.0)
|
|
33
|
+
optimist (3.1.0)
|
|
34
|
+
ostruct (0.6.3)
|
|
35
|
+
parallel (1.23.0)
|
|
36
|
+
parser (3.2.2.3)
|
|
37
|
+
ast (~> 2.4.1)
|
|
38
|
+
racc
|
|
39
|
+
patience_diff (1.2.0)
|
|
40
|
+
optimist (~> 3.0)
|
|
41
|
+
pp (0.6.4)
|
|
42
|
+
prettyprint
|
|
43
|
+
prettyprint (0.2.0)
|
|
44
|
+
prism (1.9.0)
|
|
45
|
+
racc (1.7.1)
|
|
46
|
+
rainbow (3.1.1)
|
|
47
|
+
rake (13.0.6)
|
|
48
|
+
rbs (4.1.3)
|
|
49
|
+
logger
|
|
50
|
+
prism (>= 1.6.0)
|
|
51
|
+
tsort
|
|
52
|
+
rdoc (8.0.0)
|
|
53
|
+
erb
|
|
54
|
+
prism (>= 1.6.0)
|
|
55
|
+
rbs (>= 4.0.0)
|
|
56
|
+
tsort
|
|
57
|
+
regexp_parser (2.8.1)
|
|
58
|
+
reline (0.7.0)
|
|
59
|
+
io-console (~> 0.5)
|
|
60
|
+
rexml (3.4.4)
|
|
61
|
+
rubocop (1.56.4)
|
|
62
|
+
base64 (~> 0.1.1)
|
|
63
|
+
json (~> 2.3)
|
|
64
|
+
language_server-protocol (>= 3.17.0)
|
|
65
|
+
parallel (~> 1.10)
|
|
66
|
+
parser (>= 3.2.2.3)
|
|
67
|
+
rainbow (>= 2.2.2, < 4.0)
|
|
68
|
+
regexp_parser (>= 1.8, < 3.0)
|
|
69
|
+
rexml (>= 3.2.5, < 4.0)
|
|
70
|
+
rubocop-ast (>= 1.28.1, < 2.0)
|
|
71
|
+
ruby-progressbar (~> 1.7)
|
|
72
|
+
unicode-display_width (>= 2.4.0, < 3.0)
|
|
73
|
+
rubocop-ast (1.29.0)
|
|
74
|
+
parser (>= 3.2.1.0)
|
|
75
|
+
rubocop-performance (1.19.1)
|
|
76
|
+
rubocop (>= 1.7.0, < 2.0)
|
|
77
|
+
rubocop-ast (>= 0.4.0)
|
|
78
|
+
ruby-progressbar (1.13.0)
|
|
79
|
+
sqlite3 (2.9.6-arm64-darwin)
|
|
80
|
+
sqlite3 (2.9.6-x86_64-linux-gnu)
|
|
81
|
+
standard (1.31.1)
|
|
82
|
+
language_server-protocol (~> 3.17.0.2)
|
|
83
|
+
lint_roller (~> 1.0)
|
|
84
|
+
rubocop (~> 1.56.2)
|
|
85
|
+
standard-custom (~> 1.0.0)
|
|
86
|
+
standard-performance (~> 1.2)
|
|
87
|
+
standard-custom (1.0.2)
|
|
88
|
+
lint_roller (~> 1.0)
|
|
89
|
+
rubocop (~> 1.50)
|
|
90
|
+
standard-performance (1.2.0)
|
|
91
|
+
lint_roller (~> 1.1)
|
|
92
|
+
rubocop-performance (~> 1.19.0)
|
|
93
|
+
super_diff (0.10.0)
|
|
94
|
+
attr_extras (>= 6.2.4)
|
|
95
|
+
diff-lcs
|
|
96
|
+
patience_diff
|
|
97
|
+
tldr (0.6.0)
|
|
98
|
+
concurrent-ruby (~> 1.2)
|
|
99
|
+
super_diff (~> 0.10)
|
|
100
|
+
tsort (0.2.0)
|
|
101
|
+
unicode-display_width (2.4.2)
|
|
102
|
+
|
|
103
|
+
PLATFORMS
|
|
104
|
+
arm64-darwin-22
|
|
105
|
+
arm64-darwin-24
|
|
106
|
+
arm64-darwin-25
|
|
107
|
+
x86_64-linux
|
|
108
|
+
|
|
109
|
+
DEPENDENCIES
|
|
110
|
+
gimme
|
|
111
|
+
irb
|
|
112
|
+
logger
|
|
113
|
+
ostruct
|
|
114
|
+
rake
|
|
115
|
+
standard
|
|
116
|
+
suture!
|
|
117
|
+
tldr
|
|
118
|
+
|
|
119
|
+
BUNDLED WITH
|
|
120
|
+
4.0.20
|
data/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Suture 🏥
|
|
2
2
|
|
|
3
|
-
[](https://travis-ci.org/testdouble/suture) [](https://codeclimate.com/github/testdouble/suture) [](https://codeclimate.com/github/testdouble/suture/coverage)
|
|
4
4
|
|
|
5
5
|
A refactoring tool for Ruby, designed to make it safe to change code you don't
|
|
6
6
|
confidently understand. In fact, changing untrustworthy code is so fraught,
|
|
@@ -11,7 +11,7 @@ code, from local development, to a staging environment, and even in production.
|
|
|
11
11
|
|
|
12
12
|
# Video
|
|
13
13
|
|
|
14
|
-
Suture was unveiled at Ruby Kaigi 2016 as
|
|
14
|
+
Suture was unveiled at Ruby Kaigi 2016 as one approach that can make
|
|
15
15
|
refactors less scary and more predictable. You can watch the 45 minute screencast
|
|
16
16
|
here:
|
|
17
17
|
|
|
@@ -21,7 +21,7 @@ here:
|
|
|
21
21
|
|
|
22
22
|
Refactoring or reimplementing important code is an involved process! Instead of
|
|
23
23
|
listing out Suture's API without sufficient exposition, here is an example that
|
|
24
|
-
|
|
24
|
+
will take you through each stage of the lifecycle.
|
|
25
25
|
|
|
26
26
|
## Development
|
|
27
27
|
|
data/Rakefile
CHANGED
|
@@ -1,53 +1,21 @@
|
|
|
1
1
|
require "bundler/gem_tasks"
|
|
2
2
|
require "rake/testtask"
|
|
3
|
+
require "tldr/rake"
|
|
3
4
|
|
|
4
|
-
|
|
5
|
-
t.libs << "test"
|
|
6
|
-
t.libs << "lib"
|
|
7
|
-
t.test_files = FileList["test/helper.rb", "test/**/*_test.rb"]
|
|
8
|
-
end
|
|
5
|
+
TLDR::Task.new(:name => :unit)
|
|
9
6
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
7
|
+
TLDR::Task.new(:name => :safe, :config => TLDR::Config.new(
|
|
8
|
+
:parallel => false,
|
|
9
|
+
:load_paths => ["safe", "lib"],
|
|
10
|
+
:helper_paths => ["safe/helper.rb"],
|
|
11
|
+
:paths => FileList["safe/**/*_test.rb"]
|
|
12
|
+
))
|
|
15
13
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
"safe/support/code_climate",
|
|
22
|
-
"test/helper.rb",
|
|
23
|
-
"test/**/*_test.rb",
|
|
24
|
-
"safe/helper.rb",
|
|
25
|
-
"safe/**/*_test.rb"
|
|
26
|
-
]
|
|
27
|
-
end
|
|
14
|
+
TLDR::Task.new(:name => :test, :config => TLDR::Config.new(
|
|
15
|
+
:load_paths => ["safe", "test", "lib"],
|
|
16
|
+
:helper_paths => ["test/helper.rb", "safe/helper.rb"],
|
|
17
|
+
:paths => FileList["test/**/*_test.rb", "safe/**/*_test.rb"]
|
|
18
|
+
))
|
|
28
19
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
passed = system <<-SH
|
|
32
|
-
BUNDLE_GEMFILE="$PWD/Gemfile" bundle install --quiet
|
|
33
|
-
BUNDLE_GEMFILE="$PWD/Gemfile" bundle exec rake suture
|
|
34
|
-
SH
|
|
35
|
-
unless passed
|
|
36
|
-
raise StandardError, "Rails example failed!"
|
|
37
|
-
end
|
|
38
|
-
end
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
if Gem.ruby_version >= Gem::Version.new("2.2.2")
|
|
42
|
-
require "github_changelog_generator/task"
|
|
43
|
-
GitHubChangelogGenerator::RakeTask.new :changelog
|
|
44
|
-
task :changelog_commit do
|
|
45
|
-
require "suture"
|
|
46
|
-
cmd = "git commit -m \"Changelog for #{Suture::VERSION}\" -- CHANGELOG.md"
|
|
47
|
-
puts "-------> #{cmd}"
|
|
48
|
-
system cmd
|
|
49
|
-
end
|
|
50
|
-
Rake::Task["release:rubygem_push"].enhance([:changelog, :changelog_commit])
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
task :default => [:test, :example]
|
|
20
|
+
require "standard/rake"
|
|
21
|
+
task :default => [:test, :"standard:fix"]
|
data/bin/console
CHANGED
|
@@ -6,9 +6,5 @@ require "suture"
|
|
|
6
6
|
# You can add fixtures and/or initialization code here to make experimenting
|
|
7
7
|
# with your gem easier. You can also use a different console, if you like.
|
|
8
8
|
|
|
9
|
-
# (If you use this, don't forget to add pry to your Gemfile!)
|
|
10
|
-
# require "pry"
|
|
11
|
-
# Pry.start
|
|
12
|
-
|
|
13
9
|
require "irb"
|
|
14
10
|
IRB.start
|
data/lib/suture/comparator.rb
CHANGED
data/lib/suture/config.rb
CHANGED
|
@@ -4,15 +4,15 @@ require "suture/util/env"
|
|
|
4
4
|
module Suture
|
|
5
5
|
class BuildsPlan
|
|
6
6
|
UN_ENV_IABLE_OPTIONS = [:name, :old, :new, :args, :comparator, :after_new,
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
:after_old, :on_new_error, :on_old_error,
|
|
8
|
+
:expected_error_types]
|
|
9
9
|
|
|
10
10
|
def build(name, options = {})
|
|
11
11
|
Value::Plan.new(
|
|
12
|
-
Suture.config
|
|
13
|
-
merge(options)
|
|
14
|
-
merge(:name => name)
|
|
15
|
-
merge(Suture::Util::Env.to_map(UN_ENV_IABLE_OPTIONS))
|
|
12
|
+
Suture.config
|
|
13
|
+
.merge(options)
|
|
14
|
+
.merge(:name => name)
|
|
15
|
+
.merge(Suture::Util::Env.to_map(UN_ENV_IABLE_OPTIONS))
|
|
16
16
|
)
|
|
17
17
|
end
|
|
18
18
|
end
|
|
@@ -5,22 +5,22 @@ module Suture
|
|
|
5
5
|
REQUIREMENTS = {
|
|
6
6
|
:name => "in order to identify recorded calls",
|
|
7
7
|
:old => "in order to call the legacy code path (must respond to `:call`)",
|
|
8
|
-
:args => "in order to differentiate recorded calls (if the code you're changing doesn't take arguments, you can set :args to `[]` but should probably consider creating a seam inside of it which can--consult the README for more advice)"
|
|
8
|
+
:args => "in order to differentiate recorded calls (if the code you're changing doesn't take arguments, you can set :args to `[]` but should probably consider creating a seam inside of it which can--consult the README for more advice)"
|
|
9
9
|
}
|
|
10
10
|
|
|
11
11
|
VALIDATIONS = {
|
|
12
12
|
:name => {
|
|
13
13
|
:test => lambda { |name| name.to_s.size < 256 },
|
|
14
|
-
:message => "must be less than 256 characters"
|
|
14
|
+
:message => "must be less than 256 characters"
|
|
15
15
|
},
|
|
16
16
|
:old => CALLABLE_VALIDATION = {
|
|
17
17
|
:test => lambda { |old| old.respond_to?(:call) },
|
|
18
|
-
:message => "must respond to `call` (e.g. `dog.method(:bark)` or `->(*args){ dog.bark(*args) }`)"
|
|
18
|
+
:message => "must respond to `call` (e.g. `dog.method(:bark)` or `->(*args){ dog.bark(*args) }`)"
|
|
19
19
|
},
|
|
20
20
|
:new => CALLABLE_VALIDATION,
|
|
21
21
|
:comparator => CALLABLE_VALIDATION.merge(
|
|
22
22
|
:message => "must respond to `call` (e.g. `MyComparator.new` or `->(recorded, actual) { recorded == actual }`)"
|
|
23
|
-
)
|
|
23
|
+
)
|
|
24
24
|
}
|
|
25
25
|
|
|
26
26
|
CONFLICTS = [
|
|
@@ -102,7 +102,7 @@ module Suture
|
|
|
102
102
|
impact when set for other modes
|
|
103
103
|
MSG
|
|
104
104
|
end
|
|
105
|
-
}
|
|
105
|
+
}
|
|
106
106
|
]
|
|
107
107
|
|
|
108
108
|
def validate(plan)
|
|
@@ -8,7 +8,7 @@ module Suture::Error
|
|
|
8
8
|
|
|
9
9
|
The following options are required:
|
|
10
10
|
|
|
11
|
-
#{requirements.map {|(name, explanation)|
|
|
11
|
+
#{requirements.map { |(name, explanation)|
|
|
12
12
|
"* #{name.inspect} - #{explanation}"
|
|
13
13
|
}.join("\n ")}
|
|
14
14
|
MSG
|
|
@@ -20,7 +20,7 @@ module Suture::Error
|
|
|
20
20
|
|
|
21
21
|
The following options were invalid:
|
|
22
22
|
|
|
23
|
-
#{invalids.map {|(name, rule)|
|
|
23
|
+
#{invalids.map { |(name, rule)|
|
|
24
24
|
"* #{name.inspect} - #{rule[:message]}"
|
|
25
25
|
}.join("\n ")}
|
|
26
26
|
MSG
|
|
@@ -32,7 +32,7 @@ module Suture::Error
|
|
|
32
32
|
|
|
33
33
|
Suture isn't sure how to best handle the combination of options passed:
|
|
34
34
|
|
|
35
|
-
#{conflicts.map {|message|
|
|
35
|
+
#{conflicts.map { |message|
|
|
36
36
|
"* #{message}"
|
|
37
37
|
}.join("\n ")}
|
|
38
38
|
MSG
|
|
@@ -6,7 +6,7 @@ module Suture::Error
|
|
|
6
6
|
end
|
|
7
7
|
|
|
8
8
|
def message
|
|
9
|
-
"Your suture gem is too #{@expected > @actual ? "new" : "old"} for this schema. Either delete your database or #{@expected > @actual ? "upgrade" : "downgrade"} the gem (expected schema version #{@expected}, was #{@actual})"
|
|
9
|
+
"Your suture gem is too #{(@expected > @actual) ? "new" : "old"} for this schema. Either delete your database or #{(@expected > @actual) ? "upgrade" : "downgrade"} the gem (expected schema version #{@expected}, was #{@actual})"
|
|
10
10
|
end
|
|
11
11
|
end
|
|
12
12
|
end
|
|
@@ -14,7 +14,7 @@ module Suture::Error
|
|
|
14
14
|
describe_failures(@results.failed, @plan),
|
|
15
15
|
configuration(@plan),
|
|
16
16
|
summarize(@results),
|
|
17
|
-
progress(@plan, @results)
|
|
17
|
+
progress(@plan, @results)
|
|
18
18
|
].compact.join("\n").tap do
|
|
19
19
|
end
|
|
20
20
|
end
|
|
@@ -102,7 +102,7 @@ module Suture::Error
|
|
|
102
102
|
describe_failure(failure, index) if plan.error_message_limit.nil? || index < plan.error_message_limit
|
|
103
103
|
},
|
|
104
104
|
describe_squelched_failure_messages(failures.size, plan.error_message_limit),
|
|
105
|
-
describe_general_failure_advice(plan)
|
|
105
|
+
describe_general_failure_advice(plan)
|
|
106
106
|
].flatten.compact.join("\n")
|
|
107
107
|
end
|
|
108
108
|
|
|
@@ -117,7 +117,7 @@ module Suture::Error
|
|
|
117
117
|
Expected #{expected.result.errored? ? "error raised" : "returned value"}: ```
|
|
118
118
|
#{expected.result.value.inspect}
|
|
119
119
|
```
|
|
120
|
-
Actual #{failure[:error] || failure[:new_result].errored? ? "error raised" : "returned value"}: ```
|
|
120
|
+
Actual #{(failure[:error] || failure[:new_result].errored?) ? "error raised" : "returned value"}: ```
|
|
121
121
|
#{if failure[:error]
|
|
122
122
|
stringify_error(failure[:error])
|
|
123
123
|
else
|
data/lib/suture/util/env.rb
CHANGED
|
@@ -2,16 +2,16 @@ module Suture::Util
|
|
|
2
2
|
module Env
|
|
3
3
|
def self.to_map(excludes = {})
|
|
4
4
|
Hash[
|
|
5
|
-
ENV.keys
|
|
6
|
-
select { |k| k.start_with?("SUTURE_") }
|
|
7
|
-
map { |k| [to_sym(k), sanitize_value(ENV[k])] }
|
|
5
|
+
ENV.keys
|
|
6
|
+
.select { |k| k.start_with?("SUTURE_") }
|
|
7
|
+
.map { |k| [to_sym(k), sanitize_value(ENV[k])] }
|
|
8
8
|
].reject { |(k, _)| excludes.include?(k) }
|
|
9
9
|
end
|
|
10
10
|
|
|
11
11
|
# private
|
|
12
12
|
|
|
13
13
|
def self.to_sym(name)
|
|
14
|
-
name.gsub(/^
|
|
14
|
+
name.gsub(/^SUTURE_/, "").downcase.to_sym
|
|
15
15
|
end
|
|
16
16
|
|
|
17
17
|
def self.sanitize_value(value)
|
data/lib/suture/util/scalpel.rb
CHANGED
data/lib/suture/value/result.rb
CHANGED
|
@@ -31,8 +31,8 @@ module Suture::Value
|
|
|
31
31
|
|
|
32
32
|
def massage_values(attrs, names)
|
|
33
33
|
Hash[
|
|
34
|
-
attrs.select {|(k, _)| names.include?(k) }
|
|
35
|
-
map { |(k, v)| [k, v.nil? ? nil : yield(v)]}
|
|
34
|
+
attrs.select { |(k, _)| names.include?(k) }
|
|
35
|
+
.map { |(k, v)| [k, v.nil? ? nil : yield(v)] }
|
|
36
36
|
]
|
|
37
37
|
end
|
|
38
38
|
|
|
@@ -14,14 +14,14 @@ module Suture
|
|
|
14
14
|
result = Value::Result.returned(@scalpel.cut(test_plan, :subject, observation.args))
|
|
15
15
|
{
|
|
16
16
|
:new_result => result,
|
|
17
|
-
:passed => compares_results.compare(observation.result, result)
|
|
17
|
+
:passed => compares_results.compare(observation.result, result)
|
|
18
18
|
}
|
|
19
19
|
rescue => error
|
|
20
20
|
if observation.result.errored?
|
|
21
21
|
result = Value::Result.errored(error)
|
|
22
22
|
{
|
|
23
23
|
:new_result => result,
|
|
24
|
-
:passed => compares_results.compare(observation.result, result)
|
|
24
|
+
:passed => compares_results.compare(observation.result, result)
|
|
25
25
|
}
|
|
26
26
|
else
|
|
27
27
|
{:error => error, :passed => false}
|
|
@@ -4,13 +4,13 @@ require "suture/util/env"
|
|
|
4
4
|
module Suture
|
|
5
5
|
class PrescribesTestPlan
|
|
6
6
|
UN_ENV_IABLE_OPTIONS = [:name, :subject, :comparator, :after_subject,
|
|
7
|
-
|
|
7
|
+
:on_subject_error, :expected_error_types]
|
|
8
8
|
|
|
9
9
|
def prescribe(name, options = {})
|
|
10
|
-
Value::TestPlan.new(Suture.config
|
|
11
|
-
merge(options)
|
|
12
|
-
merge(:name => name)
|
|
13
|
-
merge(Suture::Util::Env.to_map(UN_ENV_IABLE_OPTIONS)))
|
|
10
|
+
Value::TestPlan.new(Suture.config
|
|
11
|
+
.merge(options)
|
|
12
|
+
.merge(:name => name)
|
|
13
|
+
.merge(Suture::Util::Env.to_map(UN_ENV_IABLE_OPTIONS)))
|
|
14
14
|
end
|
|
15
15
|
end
|
|
16
16
|
end
|
|
@@ -24,12 +24,12 @@ module Suture
|
|
|
24
24
|
if should_skip?(test_plan, experienced_failure_in_life, i, timer)
|
|
25
25
|
{
|
|
26
26
|
:observation => observation,
|
|
27
|
-
:ran => false
|
|
27
|
+
:ran => false
|
|
28
28
|
}
|
|
29
29
|
else
|
|
30
30
|
@administers_test.administer(test_plan, observation).merge({
|
|
31
31
|
:observation => observation,
|
|
32
|
-
:ran => true
|
|
32
|
+
:ran => true
|
|
33
33
|
}).tap { |r| experienced_failure_in_life = true unless r[:passed] }
|
|
34
34
|
end
|
|
35
35
|
})
|
data/lib/suture/version.rb
CHANGED
data/lib/suture/wrap/logger.rb
CHANGED
data/lib/suture/wrap/sqlite.rb
CHANGED
|
@@ -16,7 +16,7 @@ module Suture::Wrap
|
|
|
16
16
|
SQL
|
|
17
17
|
db.execute("insert or ignore into suture_schema_info values (?)", [SCHEMA_VERSION])
|
|
18
18
|
actual_schema_version = db.execute("select * from suture_schema_info").first[0]
|
|
19
|
-
if
|
|
19
|
+
if actual_schema_version != SCHEMA_VERSION
|
|
20
20
|
raise Suture::Error::SchemaVersion.new(SCHEMA_VERSION, actual_schema_version)
|
|
21
21
|
end
|
|
22
22
|
|
data/suture.gemspec
CHANGED
|
@@ -5,40 +5,22 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
|
5
5
|
require "suture/version"
|
|
6
6
|
|
|
7
7
|
Gem::Specification.new do |spec|
|
|
8
|
-
spec.name
|
|
9
|
-
spec.version
|
|
10
|
-
spec.authors
|
|
11
|
-
spec.email
|
|
12
|
-
|
|
13
|
-
spec.summary
|
|
14
|
-
spec.description
|
|
15
|
-
spec.homepage
|
|
16
|
-
|
|
17
|
-
spec.files
|
|
18
|
-
spec.bindir
|
|
19
|
-
spec.executables
|
|
8
|
+
spec.name = "suture"
|
|
9
|
+
spec.version = Suture::VERSION
|
|
10
|
+
spec.authors = ["Justin Searls"]
|
|
11
|
+
spec.email = ["searls@gmail.com"]
|
|
12
|
+
|
|
13
|
+
spec.summary = "A gem that helps people refactor or reimplement legacy code"
|
|
14
|
+
spec.description = "Provides tools to record calls to legacy code and verify new implementations still work"
|
|
15
|
+
spec.homepage = "https://github.com/testdouble/suture"
|
|
16
|
+
|
|
17
|
+
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(example|test|db|log|safe|spec|features)/}) }
|
|
18
|
+
spec.bindir = "exe"
|
|
19
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
|
20
20
|
spec.require_paths = ["lib"]
|
|
21
21
|
|
|
22
22
|
spec.add_dependency "sqlite3"
|
|
23
23
|
spec.add_dependency "backports"
|
|
24
24
|
spec.add_dependency "bar-of-progress", ">= 0.1.3"
|
|
25
|
-
|
|
26
|
-
spec.add_development_dependency "bundler", "~> 1.12"
|
|
27
|
-
spec.add_development_dependency "rake", "~> 10.0"
|
|
28
|
-
spec.add_development_dependency "pry", "~> 0.9.12.6"
|
|
29
|
-
spec.add_development_dependency "minitest", "~> 5.9"
|
|
30
|
-
spec.add_development_dependency "gimme", "~> 0.5"
|
|
31
|
-
|
|
32
|
-
if Gem.ruby_version >= Gem::Version.new("1.9.3")
|
|
33
|
-
spec.add_development_dependency "codeclimate-test-reporter"
|
|
34
|
-
spec.add_development_dependency "simplecov", "~> 0.11.2" # <--only here to lock
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
if Gem.ruby_version >= Gem::Version.new("2.2.0")
|
|
38
|
-
spec.add_development_dependency "standard"
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
if Gem.ruby_version >= Gem::Version.new("2.2.2")
|
|
42
|
-
spec.add_development_dependency "github_changelog_generator"
|
|
43
|
-
end
|
|
25
|
+
spec.add_dependency "bigdecimal"
|
|
44
26
|
end
|
metadata
CHANGED
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: suture
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.
|
|
4
|
+
version: 1.2.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Justin Searls
|
|
8
|
-
autorequire:
|
|
9
8
|
bindir: exe
|
|
10
9
|
cert_chain: []
|
|
11
|
-
date:
|
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
12
11
|
dependencies:
|
|
13
12
|
- !ruby/object:Gem::Dependency
|
|
14
13
|
name: sqlite3
|
|
@@ -53,125 +52,13 @@ dependencies:
|
|
|
53
52
|
- !ruby/object:Gem::Version
|
|
54
53
|
version: 0.1.3
|
|
55
54
|
- !ruby/object:Gem::Dependency
|
|
56
|
-
name:
|
|
55
|
+
name: bigdecimal
|
|
57
56
|
requirement: !ruby/object:Gem::Requirement
|
|
58
|
-
requirements:
|
|
59
|
-
- - "~>"
|
|
60
|
-
- !ruby/object:Gem::Version
|
|
61
|
-
version: '1.12'
|
|
62
|
-
type: :development
|
|
63
|
-
prerelease: false
|
|
64
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
65
|
-
requirements:
|
|
66
|
-
- - "~>"
|
|
67
|
-
- !ruby/object:Gem::Version
|
|
68
|
-
version: '1.12'
|
|
69
|
-
- !ruby/object:Gem::Dependency
|
|
70
|
-
name: rake
|
|
71
|
-
requirement: !ruby/object:Gem::Requirement
|
|
72
|
-
requirements:
|
|
73
|
-
- - "~>"
|
|
74
|
-
- !ruby/object:Gem::Version
|
|
75
|
-
version: '10.0'
|
|
76
|
-
type: :development
|
|
77
|
-
prerelease: false
|
|
78
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
79
|
-
requirements:
|
|
80
|
-
- - "~>"
|
|
81
|
-
- !ruby/object:Gem::Version
|
|
82
|
-
version: '10.0'
|
|
83
|
-
- !ruby/object:Gem::Dependency
|
|
84
|
-
name: pry
|
|
85
|
-
requirement: !ruby/object:Gem::Requirement
|
|
86
|
-
requirements:
|
|
87
|
-
- - "~>"
|
|
88
|
-
- !ruby/object:Gem::Version
|
|
89
|
-
version: 0.9.12.6
|
|
90
|
-
type: :development
|
|
91
|
-
prerelease: false
|
|
92
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
93
|
-
requirements:
|
|
94
|
-
- - "~>"
|
|
95
|
-
- !ruby/object:Gem::Version
|
|
96
|
-
version: 0.9.12.6
|
|
97
|
-
- !ruby/object:Gem::Dependency
|
|
98
|
-
name: minitest
|
|
99
|
-
requirement: !ruby/object:Gem::Requirement
|
|
100
|
-
requirements:
|
|
101
|
-
- - "~>"
|
|
102
|
-
- !ruby/object:Gem::Version
|
|
103
|
-
version: '5.9'
|
|
104
|
-
type: :development
|
|
105
|
-
prerelease: false
|
|
106
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
107
|
-
requirements:
|
|
108
|
-
- - "~>"
|
|
109
|
-
- !ruby/object:Gem::Version
|
|
110
|
-
version: '5.9'
|
|
111
|
-
- !ruby/object:Gem::Dependency
|
|
112
|
-
name: gimme
|
|
113
|
-
requirement: !ruby/object:Gem::Requirement
|
|
114
|
-
requirements:
|
|
115
|
-
- - "~>"
|
|
116
|
-
- !ruby/object:Gem::Version
|
|
117
|
-
version: '0.5'
|
|
118
|
-
type: :development
|
|
119
|
-
prerelease: false
|
|
120
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
121
|
-
requirements:
|
|
122
|
-
- - "~>"
|
|
123
|
-
- !ruby/object:Gem::Version
|
|
124
|
-
version: '0.5'
|
|
125
|
-
- !ruby/object:Gem::Dependency
|
|
126
|
-
name: codeclimate-test-reporter
|
|
127
|
-
requirement: !ruby/object:Gem::Requirement
|
|
128
|
-
requirements:
|
|
129
|
-
- - ">="
|
|
130
|
-
- !ruby/object:Gem::Version
|
|
131
|
-
version: '0'
|
|
132
|
-
type: :development
|
|
133
|
-
prerelease: false
|
|
134
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
135
|
-
requirements:
|
|
136
|
-
- - ">="
|
|
137
|
-
- !ruby/object:Gem::Version
|
|
138
|
-
version: '0'
|
|
139
|
-
- !ruby/object:Gem::Dependency
|
|
140
|
-
name: simplecov
|
|
141
|
-
requirement: !ruby/object:Gem::Requirement
|
|
142
|
-
requirements:
|
|
143
|
-
- - "~>"
|
|
144
|
-
- !ruby/object:Gem::Version
|
|
145
|
-
version: 0.11.2
|
|
146
|
-
type: :development
|
|
147
|
-
prerelease: false
|
|
148
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
149
|
-
requirements:
|
|
150
|
-
- - "~>"
|
|
151
|
-
- !ruby/object:Gem::Version
|
|
152
|
-
version: 0.11.2
|
|
153
|
-
- !ruby/object:Gem::Dependency
|
|
154
|
-
name: standard
|
|
155
|
-
requirement: !ruby/object:Gem::Requirement
|
|
156
|
-
requirements:
|
|
157
|
-
- - ">="
|
|
158
|
-
- !ruby/object:Gem::Version
|
|
159
|
-
version: '0'
|
|
160
|
-
type: :development
|
|
161
|
-
prerelease: false
|
|
162
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
163
57
|
requirements:
|
|
164
58
|
- - ">="
|
|
165
59
|
- !ruby/object:Gem::Version
|
|
166
60
|
version: '0'
|
|
167
|
-
|
|
168
|
-
name: github_changelog_generator
|
|
169
|
-
requirement: !ruby/object:Gem::Requirement
|
|
170
|
-
requirements:
|
|
171
|
-
- - ">="
|
|
172
|
-
- !ruby/object:Gem::Version
|
|
173
|
-
version: '0'
|
|
174
|
-
type: :development
|
|
61
|
+
type: :runtime
|
|
175
62
|
prerelease: false
|
|
176
63
|
version_requirements: !ruby/object:Gem::Requirement
|
|
177
64
|
requirements:
|
|
@@ -187,13 +74,14 @@ extensions: []
|
|
|
187
74
|
extra_rdoc_files: []
|
|
188
75
|
files:
|
|
189
76
|
- ".codeclimate.yml"
|
|
77
|
+
- ".github/workflows/main.yml"
|
|
190
78
|
- ".gitignore"
|
|
191
79
|
- ".projections.json"
|
|
192
80
|
- ".rubocop.yml"
|
|
193
81
|
- ".standard.yml"
|
|
194
|
-
- ".travis.yml"
|
|
195
82
|
- CHANGELOG.md
|
|
196
83
|
- Gemfile
|
|
84
|
+
- Gemfile.lock
|
|
197
85
|
- LICENSE.txt
|
|
198
86
|
- README.md
|
|
199
87
|
- Rakefile
|
|
@@ -245,7 +133,6 @@ files:
|
|
|
245
133
|
homepage: https://github.com/testdouble/suture
|
|
246
134
|
licenses: []
|
|
247
135
|
metadata: {}
|
|
248
|
-
post_install_message:
|
|
249
136
|
rdoc_options: []
|
|
250
137
|
require_paths:
|
|
251
138
|
- lib
|
|
@@ -260,9 +147,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
260
147
|
- !ruby/object:Gem::Version
|
|
261
148
|
version: '0'
|
|
262
149
|
requirements: []
|
|
263
|
-
|
|
264
|
-
rubygems_version: 2.7.6
|
|
265
|
-
signing_key:
|
|
150
|
+
rubygems_version: 4.0.21
|
|
266
151
|
specification_version: 4
|
|
267
152
|
summary: A gem that helps people refactor or reimplement legacy code
|
|
268
153
|
test_files: []
|
data/.travis.yml
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
language: ruby
|
|
2
|
-
sudo: false
|
|
3
|
-
rvm:
|
|
4
|
-
- 1.8.7
|
|
5
|
-
- 1.9
|
|
6
|
-
- 2.0
|
|
7
|
-
- 2.1
|
|
8
|
-
- 2.2
|
|
9
|
-
- 2.3.3
|
|
10
|
-
before_install:
|
|
11
|
-
- gem install bundler
|
|
12
|
-
- cd example/rails_app && ./script/setup.sh && cd ../..
|
|
13
|
-
after_success:
|
|
14
|
-
- bundle exec codeclimate-test-reporter
|
|
15
|
-
addons:
|
|
16
|
-
code_climate:
|
|
17
|
-
repo_token: 05e3e31164d59aa626b730b92eb9b7418326dbf23420a4b87eab2555840b39ef
|