@@ -22,9 +22,9 @@ class Result < ApplicationRecord
2222
2323 ##### CLASS METHODS #####
2424
25- def self . record_a_science ( experiment , scientist_result )
25+ def self . record_a_science ( experiment , scientist_result , ** kwargs )
2626 self . create! ( experiment : experiment ) do |result |
27- result . record_a_science scientist_result
27+ result . record_a_science scientist_result , ** kwargs
2828 end
2929 end
3030
@@ -50,7 +50,7 @@ def compare_observations(io: $stdout, &block)
5050 return nil
5151 end
5252
53- def record_a_science ( scientist_result )
53+ def record_a_science ( scientist_result , diff_with : nil )
5454 unless scientist_result . kind_of? ( Scientist ::Result )
5555 raise ArgumentError , "expected a Scientist::Result but got #{ scientist_result . class } "
5656 end
@@ -59,7 +59,8 @@ def record_a_science(scientist_result)
5959
6060 record_observation scientist_result . control
6161 scientist_result . candidates . each do |candidate |
62- record_observation candidate
62+ diff = diff_with &.call ( scientist_result . control , candidate )
63+ record_observation candidate , diff : diff
6364 end
6465
6566 record_simple_stats scientist_result
@@ -93,8 +94,9 @@ def increment_experiment_counters
9394 end
9495 end
9596
96- def record_observation ( scientist_observation )
97+ def record_observation ( scientist_observation , attrs = { } )
9798 self . observations . build do |observation |
99+ observation . assign_attributes attrs if attrs . present?
98100 observation . record_a_science scientist_observation
99101 end
100102 end
0 commit comments