once-ler 0.1.2 → 1.1.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 65613dd5474beb96d101223913f52f5ebf2d5009
4
- data.tar.gz: 75e10a5c47a3e5dbfa0bb926e4ce88a9a39c1be8
2
+ SHA256:
3
+ metadata.gz: 994d38083ec48a1954601ccde89242bc6183272d2533aa3f9ac580356bf96d9f
4
+ data.tar.gz: 9d7205e0a400aa673dc9fbc4f9c84fc47ea4162bb5df3d45d28e7f06bd220acf
5
5
  SHA512:
6
- metadata.gz: 0e8df6f934edb66a1c47ccb8c7b521d87d893673b89328d586f3bd126b7e1fc6c84bd7a64ee73f4e74c1111f196e7b37ef9460cde0629064cbc7b11fa319d03c
7
- data.tar.gz: e2303a7c869da96c0a3eb58e16abd920a500e6f3eec7320ad808d0c096e7b13232646f745c2530bf003c7601922ea04728ec09caf0b63678d9f62cd6f1616b17
6
+ metadata.gz: b68997b82367df5f4e22ce7e791528b0b85afb2e8ccbd8a9b78b711210cadbccc2662af387fe86fcd558a4116a73f78fb3d4ae83f120c541439113bc673fc701
7
+ data.tar.gz: fc434921ddb4f6d238e3ec5cdc03a715e51b88e02bf87e5b4918060ceae5372ef6e1920889e69fa4853378b62b03ebdba18b9c7ad6e5be7d2464a91e6f958680
data/README.md CHANGED
@@ -36,6 +36,19 @@ Change a slow `let` (or `let!`) to `let_once` to speed it up.
36
36
 
37
37
  Change a slow `subject` (or `subject!`) to `subject_once` to speed it up.
38
38
 
39
+ ### around(:once) { ... }
40
+
41
+ Need to run something around all of your once blocks (like freezing time)?
42
+ Use this.
43
+
44
+ ### around(:once_and_each) { ... }
45
+
46
+ Shorthand for around(:once) + around(:each). Be careful, as you cannot
47
+ share state with instance variables between arounds and examples, so
48
+ use local variables if you want to say freeze time consistently
49
+ between all before(*) and examples. Also, the block is called twice (once for
50
+ :once and once for :each), so be careful using, e.g. Time.now in the block.
51
+
39
52
  ## Ambitious usage
40
53
 
41
54
  If you're feeling bold, you can automatically speed up all
data/lib/onceler.rb CHANGED
@@ -1,7 +1,14 @@
1
1
  require "rspec"
2
+ require "rubygems"
3
+
2
4
  require "onceler/basic_helpers"
3
5
  require "onceler/configuration"
4
6
  require "onceler/extensions/active_record"
7
+
5
8
  if defined?(DatabaseCleaner)
9
+ unless !DatabaseCleaner.const_defined?("VERSION") ||
10
+ Gem::Requirement.new(">= 1.7").satisfied_by?(Gem::Version.new(DatabaseCleaner::VERSION))
11
+ raise "Onceler in only compatible with DatabaseCleaner >= 1.7."
12
+ end
6
13
  require "onceler/extensions/database_cleaner"
7
14
  end
@@ -28,6 +28,11 @@ module Onceler
28
28
  alias_method :subject, name if name != :subject
29
29
  end
30
30
 
31
+ def around_once(&block)
32
+ onceler(:create).add_around(block)
33
+ add_onceler_hooks!
34
+ end
35
+
31
36
  def before_once(&block)
32
37
  onceler(:create) << block
33
38
  add_onceler_hooks!
@@ -82,6 +87,19 @@ module Onceler
82
87
  end
83
88
  end
84
89
 
90
+ def around(*args, &block)
91
+ scope = args.first
92
+ case scope
93
+ when *once_scopes
94
+ around_once(&block)
95
+ when :once_and_each
96
+ around_once(&block)
97
+ around(:each, &block)
98
+ else
99
+ super(*args, &block)
100
+ end
101
+ end
102
+
85
103
  def onceler(create_own = false)
86
104
  if create_own
87
105
  @onceler ||= Recorder.new(self)
@@ -1,7 +1,19 @@
1
1
  require "active_record"
2
2
 
3
- if ActiveRecord::VERSION::STRING >= "4.1."
4
- require "onceler/extensions/active_record_4_1"
5
- else
6
- require "onceler/extensions/active_record_4_0"
3
+ # monkey-patch this to not clear connections so that we don't lose our
4
+ # transactions
5
+
6
+ module ActiveRecord::TestFixtures
7
+ def teardown_fixtures
8
+ # Rollback changes if a transaction is active.
9
+ if run_in_transaction?
10
+ @fixture_connections.each do |connection|
11
+ connection.rollback_transaction if connection.transaction_open?
12
+ end
13
+ @fixture_connections.clear
14
+ else
15
+ ActiveRecord::FixtureSet.reset_cache
16
+ end
17
+ ### ONCELER'd
18
+ end
7
19
  end
@@ -27,6 +27,7 @@ module Onceler
27
27
  @group_class = group_class
28
28
  @recordings = []
29
29
  @named_recordings = []
30
+ @arounds = []
30
31
  end
31
32
 
32
33
  def parent_tape
@@ -50,6 +51,14 @@ module Onceler
50
51
  end
51
52
  end
52
53
 
54
+ def add_around(block)
55
+ @arounds.unshift(block)
56
+ end
57
+
58
+ def arounds
59
+ (parent ? parent.arounds : []) + @arounds
60
+ end
61
+
53
62
  def record!
54
63
  Onceler.recording = true
55
64
  begin_transactions!
@@ -63,9 +72,18 @@ module Onceler
63
72
  @recordings.each do |recording|
64
73
  recording.prepare_medium!(@tape)
65
74
  end
66
- @recordings.each do |recording|
67
- recording.record_onto!(@tape)
75
+
76
+ # wrap the before in a lambda
77
+ stack = -> do
78
+ @recordings.each do |recording|
79
+ recording.record_onto!(@tape)
80
+ end
68
81
  end
82
+ # and then stack each around block on top
83
+ arounds.inject(stack) do |old_stack, hook|
84
+ -> { @tape.instance_exec(old_stack, &hook) }
85
+ end.call
86
+
69
87
  run_after_hooks(:record, @tape)
70
88
  @data = @tape.__data
71
89
  ensure
@@ -1,2 +1,2 @@
1
1
  require "active_record"
2
- require "onceler/transactions/active_record_4"
2
+ require "onceler/transactions/active_record"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: once-ler
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 1.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jon Jensen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-07-26 00:00:00.000000000 Z
11
+ date: 2021-05-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -16,28 +16,62 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '4.0'
19
+ version: '5.2'
20
+ - - "<"
21
+ - !ruby/object:Gem::Version
22
+ version: '6.1'
20
23
  type: :runtime
21
24
  prerelease: false
22
25
  version_requirements: !ruby/object:Gem::Requirement
23
26
  requirements:
24
27
  - - ">="
25
28
  - !ruby/object:Gem::Version
26
- version: '4.0'
29
+ version: '5.2'
30
+ - - "<"
31
+ - !ruby/object:Gem::Version
32
+ version: '6.1'
27
33
  - !ruby/object:Gem::Dependency
28
34
  name: rspec
29
35
  requirement: !ruby/object:Gem::Requirement
30
36
  requirements:
31
37
  - - ">="
32
38
  - !ruby/object:Gem::Version
33
- version: '3.0'
39
+ version: '3.6'
34
40
  type: :runtime
35
41
  prerelease: false
36
42
  version_requirements: !ruby/object:Gem::Requirement
37
43
  requirements:
38
44
  - - ">="
39
45
  - !ruby/object:Gem::Version
40
- version: '3.0'
46
+ version: '3.6'
47
+ - !ruby/object:Gem::Dependency
48
+ name: appraisal
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "~>"
52
+ - !ruby/object:Gem::Version
53
+ version: '2.2'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - "~>"
59
+ - !ruby/object:Gem::Version
60
+ version: '2.2'
61
+ - !ruby/object:Gem::Dependency
62
+ name: byebug
63
+ requirement: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: '0'
68
+ type: :development
69
+ prerelease: false
70
+ version_requirements: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: '0'
41
75
  description: once-ler supercharges your let's and before's with the performance of
42
76
  before(:all)
43
77
  email: jon@instructure.com
@@ -52,15 +86,14 @@ files:
52
86
  - lib/onceler/basic_helpers.rb
53
87
  - lib/onceler/configuration.rb
54
88
  - lib/onceler/extensions/active_record.rb
55
- - lib/onceler/extensions/active_record_4_0.rb
56
- - lib/onceler/extensions/active_record_4_1.rb
57
89
  - lib/onceler/extensions/database_cleaner.rb
58
90
  - lib/onceler/recordable.rb
59
91
  - lib/onceler/recorder.rb
60
92
  - lib/onceler/transactions.rb
61
- - lib/onceler/transactions/active_record_4.rb
62
- homepage: http://github.com/instructure/onceler
63
- licenses: []
93
+ - lib/onceler/transactions/active_record.rb
94
+ homepage: http://github.com/instructure/once-ler
95
+ licenses:
96
+ - MIT
64
97
  metadata: {}
65
98
  post_install_message:
66
99
  rdoc_options: []
@@ -70,15 +103,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
70
103
  requirements:
71
104
  - - ">="
72
105
  - !ruby/object:Gem::Version
73
- version: 1.9.3
106
+ version: '2.6'
74
107
  required_rubygems_version: !ruby/object:Gem::Requirement
75
108
  requirements:
76
109
  - - ">="
77
110
  - !ruby/object:Gem::Version
78
- version: 1.3.5
111
+ version: 2.6.0
79
112
  requirements: []
80
- rubyforge_project:
81
- rubygems_version: 2.6.11
113
+ rubygems_version: 3.1.6
82
114
  signing_key:
83
115
  specification_version: 4
84
116
  summary: rspec supercharger
@@ -1,19 +0,0 @@
1
- # monkey-patch this to not clear connections so that we don't lose our
2
- # transactions
3
-
4
- module ActiveRecord::TestFixtures
5
- def teardown_fixtures
6
- return if ActiveRecord::Base.configurations.blank?
7
-
8
- # Rollback changes if a transaction is active.
9
- if run_in_transaction?
10
- @fixture_connections.each do |connection|
11
- connection.rollback_transaction if connection.transaction_open?
12
- end
13
- @fixture_connections.clear
14
- else
15
- ActiveRecord::FixtureSet.reset_cache
16
- end
17
- ### ONCELER'd
18
- end
19
- end
@@ -1,17 +0,0 @@
1
- # monkey-patch this to not clear connections so that we don't lose our
2
- # transactions
3
-
4
- module ActiveRecord::TestFixtures
5
- def teardown_fixtures
6
- # Rollback changes if a transaction is active.
7
- if run_in_transaction?
8
- @fixture_connections.each do |connection|
9
- connection.rollback_transaction if connection.transaction_open?
10
- end
11
- @fixture_connections.clear
12
- else
13
- ActiveRecord::FixtureSet.reset_cache
14
- end
15
- ### ONCELER'd
16
- end
17
- end