scientist 1.6.1 → 1.6.2
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/CONTRIBUTING.md +3 -3
- data/README.md +2 -2
- data/lib/scientist/experiment.rb +23 -0
- data/lib/scientist/version.rb +1 -1
- data/script/release +4 -4
- data/test/scientist/experiment_test.rb +21 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1e623b9acbede185a6ee8ca0ae2227a52707499c28bdf04e4fe8a2afcbd0f051
|
4
|
+
data.tar.gz: 560b1d3353829f6be217229546297fcd4102e6c47dc87fc12ffa963c5e2fa3f7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 593c2807ff16f1381a0189e4babdad3ab366ad66057e4af1b083611fb204d55ae9434bf989550f8371de7586be55fe4f8a760f84f2424323a9189803583e9243
|
7
|
+
data.tar.gz: 1239bb86dfad9fcee2b0dc4dc2fc8458306e877afd2aa1e722b9e4db7072b71658469bf48b425959c52111fac2cc8bb5dbbb11435263a199f036ad2ee4697228
|
data/CONTRIBUTING.md
CHANGED
@@ -10,9 +10,9 @@ Contributions to this project are [released](https://help.github.com/articles/gi
|
|
10
10
|
## Submitting a pull request
|
11
11
|
|
12
12
|
0. [Fork][fork] and clone the repository
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
1. Create a new branch: `git checkout -b my-branch-name`
|
14
|
+
2. Make your change, push to your fork and [submit a pull request][pr]
|
15
|
+
3. Pat your self on the back and wait for your pull request to be reviewed and merged.
|
16
16
|
|
17
17
|
Here are a few things you can do that will increase the likelihood of your pull request being accepted:
|
18
18
|
|
data/README.md
CHANGED
@@ -84,7 +84,7 @@ class MyExperiment
|
|
84
84
|
end
|
85
85
|
```
|
86
86
|
|
87
|
-
When `Scientist::Experiment` is included in a class, it automatically sets it as the default implementation via `Scientist::Experiment.set_default`. This `set_default` call is
|
87
|
+
When `Scientist::Experiment` is included in a class, it automatically sets it as the default implementation via `Scientist::Experiment.set_default`. This `set_default` call is skipped if you include `Scientist::Experiment` in a module.
|
88
88
|
|
89
89
|
Now calls to the `science` helper will load instances of `MyExperiment`.
|
90
90
|
|
@@ -129,7 +129,7 @@ class MyWidget
|
|
129
129
|
control.class == ArgumentError &&
|
130
130
|
candidate.class == ArgumentError &&
|
131
131
|
control.message.start_with?("Input has invalid characters") &&
|
132
|
-
candidate.message.
|
132
|
+
candidate.message.start_with?("Invalid characters in input")
|
133
133
|
end
|
134
134
|
|
135
135
|
e.compare_error do |control, candidate|
|
data/lib/scientist/experiment.rb
CHANGED
@@ -84,6 +84,7 @@ module Scientist::Experiment
|
|
84
84
|
#
|
85
85
|
# Returns the configured block.
|
86
86
|
def before_run(&block)
|
87
|
+
marshalize(block)
|
87
88
|
@_scientist_before_run = block
|
88
89
|
end
|
89
90
|
|
@@ -99,6 +100,7 @@ module Scientist::Experiment
|
|
99
100
|
#
|
100
101
|
# Returns the configured block.
|
101
102
|
def clean(&block)
|
103
|
+
marshalize(block)
|
102
104
|
@_scientist_cleaner = block
|
103
105
|
end
|
104
106
|
|
@@ -131,6 +133,7 @@ module Scientist::Experiment
|
|
131
133
|
#
|
132
134
|
# Returns the block.
|
133
135
|
def compare(*args, &block)
|
136
|
+
marshalize(block)
|
134
137
|
@_scientist_comparator = block
|
135
138
|
end
|
136
139
|
|
@@ -141,6 +144,7 @@ module Scientist::Experiment
|
|
141
144
|
#
|
142
145
|
# Returns the block.
|
143
146
|
def compare_errors(*args, &block)
|
147
|
+
marshalize(block)
|
144
148
|
@_scientist_error_comparator = block
|
145
149
|
end
|
146
150
|
|
@@ -159,6 +163,7 @@ module Scientist::Experiment
|
|
159
163
|
#
|
160
164
|
# This can be called more than once with different blocks to use.
|
161
165
|
def ignore(&block)
|
166
|
+
marshalize(block)
|
162
167
|
@_scientist_ignores ||= []
|
163
168
|
@_scientist_ignores << block
|
164
169
|
end
|
@@ -251,6 +256,7 @@ module Scientist::Experiment
|
|
251
256
|
|
252
257
|
# Define a block that determines whether or not the experiment should run.
|
253
258
|
def run_if(&block)
|
259
|
+
marshalize(block)
|
254
260
|
@_scientist_run_if_block = block
|
255
261
|
end
|
256
262
|
|
@@ -276,6 +282,7 @@ module Scientist::Experiment
|
|
276
282
|
|
277
283
|
# Register a named behavior for this experiment, default "candidate".
|
278
284
|
def try(name = nil, &block)
|
285
|
+
marshalize(block)
|
279
286
|
name = (name || "candidate").to_s
|
280
287
|
|
281
288
|
if behaviors.include?(name)
|
@@ -287,6 +294,7 @@ module Scientist::Experiment
|
|
287
294
|
|
288
295
|
# Register the control behavior for this experiment.
|
289
296
|
def use(&block)
|
297
|
+
marshalize(block)
|
290
298
|
try "control", &block
|
291
299
|
end
|
292
300
|
|
@@ -318,4 +326,19 @@ module Scientist::Experiment
|
|
318
326
|
control = observations.detect { |o| o.name == name }
|
319
327
|
Scientist::Result.new(self, observations, control)
|
320
328
|
end
|
329
|
+
|
330
|
+
private
|
331
|
+
|
332
|
+
# In order to support marshaling, we have to make the procs marshalable. Some
|
333
|
+
# CI providers attempt to marshal Scientist mismatch errors so that they can
|
334
|
+
# be sent out to different places (logs, etc.) The mismatch errors contain
|
335
|
+
# code from the experiment. This code contains Procs - which can't be
|
336
|
+
# marshaled until we run the following code.
|
337
|
+
def marshalize(block)
|
338
|
+
unless block.respond_to?(:_dump) || block.respond_to?(:_dump_data)
|
339
|
+
def block._dump(_)
|
340
|
+
to_s
|
341
|
+
end
|
342
|
+
end
|
343
|
+
end
|
321
344
|
end
|
data/lib/scientist/version.rb
CHANGED
data/script/release
CHANGED
@@ -12,10 +12,10 @@ cd $(dirname "$0")/..
|
|
12
12
|
rm -rf scientist-*.gem
|
13
13
|
gem build -q scientist.gemspec
|
14
14
|
|
15
|
-
# Make sure we're on the
|
15
|
+
# Make sure we're on the main branch.
|
16
16
|
|
17
|
-
(git branch --no-color | grep -q '*
|
18
|
-
echo "Only release from the
|
17
|
+
(git branch --no-color | grep -q '* main') || {
|
18
|
+
echo "Only release from the main branch."
|
19
19
|
exit 1
|
20
20
|
}
|
21
21
|
|
@@ -35,4 +35,4 @@ git fetch -t origin
|
|
35
35
|
# Tag it and bag it.
|
36
36
|
|
37
37
|
gem push scientist-*.gem && git tag "$tag" &&
|
38
|
-
git push origin
|
38
|
+
git push origin main && git push origin "$tag"
|
@@ -491,6 +491,27 @@ describe Scientist::Experiment do
|
|
491
491
|
assert_raises(Scientist::Experiment::MismatchError) { runner.call }
|
492
492
|
end
|
493
493
|
|
494
|
+
it "can be marshaled" do
|
495
|
+
Fake.raise_on_mismatches = true
|
496
|
+
@ex.before_run { "some block" }
|
497
|
+
@ex.clean { "some block" }
|
498
|
+
@ex.compare_errors { "some block" }
|
499
|
+
@ex.ignore { false }
|
500
|
+
@ex.run_if { "some block" }
|
501
|
+
@ex.try { "candidate" }
|
502
|
+
@ex.use { "control" }
|
503
|
+
@ex.compare { |control, candidate| control == candidate }
|
504
|
+
|
505
|
+
mismatch = nil
|
506
|
+
begin
|
507
|
+
@ex.run
|
508
|
+
rescue Scientist::Experiment::MismatchError => e
|
509
|
+
mismatch = e
|
510
|
+
end
|
511
|
+
|
512
|
+
assert_kind_of(String, Marshal.dump(mismatch))
|
513
|
+
end
|
514
|
+
|
494
515
|
describe "#raise_on_mismatches?" do
|
495
516
|
it "raises when there is a mismatch if the experiment instance's raise on mismatches is enabled" do
|
496
517
|
Fake.raise_on_mismatches = false
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: scientist
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.6.
|
4
|
+
version: 1.6.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- GitHub Open Source
|
@@ -12,7 +12,7 @@ authors:
|
|
12
12
|
autorequire:
|
13
13
|
bindir: bin
|
14
14
|
cert_chain: []
|
15
|
-
date: 2021-
|
15
|
+
date: 2021-11-04 00:00:00.000000000 Z
|
16
16
|
dependencies:
|
17
17
|
- !ruby/object:Gem::Dependency
|
18
18
|
name: minitest
|