class Speculation::AndSpec
@private
Constants
- S
This is a Ruby translation of clojure.spec:
https://github.com/clojure/clojure/blob/master/src/clj/clojure/spec.clj
All credit belongs with Rich Hickey and contributors for their original work.
Public Class Methods
new(preds, gen = nil)
click to toggle source
# File lib/speculation/spec/and_spec.rb, line 13 def initialize(preds, gen = nil) @preds = preds @gen = gen @specs = Concurrent::Delay.new do preds.map { |pred| S.send(:specize, pred) } end end
Public Instance Methods
conform(value)
click to toggle source
# File lib/speculation/spec/and_spec.rb, line 21 def conform(value) @specs.value!.each do |spec| value = spec.conform(value) return :"Speculation/invalid" if S.invalid?(value) end value end
explain(path, via, inn, value)
click to toggle source
# File lib/speculation/spec/and_spec.rb, line 35 def explain(path, via, inn, value) S.explain_pred_list(@preds, path, via, inn, value) end
gen(overrides, path, rmap)
click to toggle source
# File lib/speculation/spec/and_spec.rb, line 43 def gen(overrides, path, rmap) if @gen @gen.call else S.gensub(@preds.first, overrides, path, rmap) end end
unform(value)
click to toggle source
# File lib/speculation/spec/and_spec.rb, line 31 def unform(value) @preds.reverse.reduce(value) { |val, pred| S.unform(pred, val) } end
with_gen(gen)
click to toggle source
# File lib/speculation/spec/and_spec.rb, line 39 def with_gen(gen) self.class.new(@preds, gen) end