theorem 1.2.2 → 1.2.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: fa09d87e0b219e171e02728791f787a6ecd68a759e8a21143e85302361f68a1d
4
- data.tar.gz: 739e1c4e6e19a3145d7c87c8ea688d10be70cce45735939e7f5d0bdf1817d385
3
+ metadata.gz: 510e3aaddc01eb3545cf4977b01d94b40940f390b9c8ddc91aa01db2eca6cf03
4
+ data.tar.gz: 357e1c62b31bd700fa3aff4671dedb777867e3879f5de8ab4738535ab0e4c726
5
5
  SHA512:
6
- metadata.gz: 49ef938d77de1eacfd29a61c312acb396de525adb5c9b9699d3698cd31d8511c05665c560b55de61bc0fb9884024b32dbc61771cc0e44ae5267f26301cd46a18
7
- data.tar.gz: 2fe7a59bec06dfd7b14c02e9245cdd0e9ca1ccf013f83254706cccd8e72a3aba9ac3048d9b0ed083b14f3d3e552c8cdd1b42ed75d24cc6ee67581740e5048f7f
6
+ metadata.gz: 4f7d8754fc5e3549ce677098c348d4d8aa7dc03018337d44634adcf1ff932bd0ad8666ae0faef01f2c95d4508e11450075cee5fc500b87a67cc66f6313a80dfd
7
+ data.tar.gz: 6d0333b789ea2e2d13707be0039533421ce65bef5b9b55064cc6683ac15323900a7040d23a34218d1a05858c150d60cded6445f440448a41c6ec68c4b5bf02f0
@@ -4,6 +4,7 @@ require_relative 'completed_test'
4
4
  require_relative 'beaker'
5
5
  require_relative 'registry'
6
6
  require_relative 'test'
7
+ require_relative 'let'
7
8
 
8
9
  module Theorem
9
10
  module Control
@@ -25,6 +26,7 @@ module Theorem
25
26
  block.call(@notary)
26
27
  end
27
28
 
29
+ klass.extend Let
28
30
  klass.extend ClassMethods
29
31
  klass.instance_eval do
30
32
  @before_all ||= Beaker.new
@@ -0,0 +1,59 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Theorem
4
+ module Control
5
+ # compatibility with let in rspec
6
+ module Let
7
+
8
+ def let(name, &block)
9
+ setup_let(name, &block)
10
+ instance_exec @let_registry do |registry|
11
+ @before_each.prepare do
12
+ define_singleton_method name do
13
+ raise "can't find #{name}" unless registry[:let][name]
14
+
15
+ registry[:let][name][:value] ||= instance_exec &registry[:let][name][:block]
16
+ end
17
+ end
18
+
19
+ @after_each.prepare do
20
+ registry[:let][name][:value] = nil
21
+ end
22
+ end
23
+ end
24
+ alias_method :each_with, :let
25
+
26
+ def let_it_be(name, &block)
27
+ setup_let(name, :let_it_be, &block)
28
+ something = binding
29
+ instance_exec @let_registry do |registry|
30
+ @before_all.prepare do
31
+ define_singleton_method name do
32
+ raise "can't find #{name}" unless registry[:let_it_be][name]
33
+
34
+ registry[:let_it_be][name][:value] ||= instance_exec &registry[:let_it_be][name][:block]
35
+ end
36
+ end
37
+ @after_all.prepare do
38
+ registry[:let_it_be][name][:value] = nil
39
+ end
40
+ end
41
+ end
42
+ alias_method :all_with, :let_it_be
43
+
44
+ private
45
+
46
+ def setup_let(name, type=:let, &block)
47
+ @let_registry ||= {}
48
+ @let_registry[type] ||= {}
49
+ @let_registry[type][name] = { block: block, value: nil }
50
+
51
+ define_singleton_method name do
52
+ raise "can't find #{name}" unless @let_registry[type][name]
53
+
54
+ @let_registry[type][name][:value] ||= @let_registry[type][name][:block].call
55
+ end
56
+ end
57
+ end
58
+ end
59
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: theorem
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.2
4
+ version: 1.2.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sean Gregory
@@ -124,6 +124,7 @@ files:
124
124
  - src/theorem/completed_test.rb
125
125
  - src/theorem/harness.rb
126
126
  - src/theorem/hypothesis.rb
127
+ - src/theorem/let.rb
127
128
  - src/theorem/notation.rb
128
129
  - src/theorem/registry.rb
129
130
  - src/theorem/reporter.rb