smash_the_state 1.4.2 → 1.4.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: 6f0527df75d9fad254bc32ca2abece0d9a220ee86cb729dbbe87522c29a4150e
4
- data.tar.gz: 48ba7b4e6405244a8dbd65d4b3aa6ff9474d15d4283e34d8078e60e23b8be50b
3
+ metadata.gz: 591b5f213e895130ff25cf2bc2638275d6f89a054abbe01c0fb55ff5c6f3cc84
4
+ data.tar.gz: 249752c9f3aa7a7efea1adf1dcc4af85bfe135235bf0d07b6961fb3a5eca2a80
5
5
  SHA512:
6
- metadata.gz: 32815be847a37111eae15e282aab36384914fb99b17e3dad1c27b4bc8269b91fe448ba5daacc59a1a9c3a200fd6ebf55a9a70895bf32d76b8313fd543a93351d
7
- data.tar.gz: abf40fd2f6fa63d786d7433fc4fea4437058987bd2e46d44f6fad515b95d6b77da6252b46b80decd6598639b19e5897f57a8a8bf79cc403dd75b32f8f1d81a5f
6
+ metadata.gz: c74f691d3f1d7d9e6fe008e67d97b7da9cf24cef2d444a57744c1a4ee41f559358d39d6e1e74f5222f93c5d41c1eb9a53f3a61f9635a0cd522798fc77e0d2395
7
+ data.tar.gz: fbf4c5c27f114281a9db33f2d76d64a50f8f42594f1e2a5a84dfce2414893e1728dae5702e0ea8a65ccd4a3c82790ace05cba760e4634f08ab157e8b115c2e91
@@ -50,6 +50,11 @@ module SmashTheState
50
50
 
51
51
  def override_step(step_name, options = {}, &block)
52
52
  sequence.override_step(step_name, options, &block)
53
+
54
+ # also override the dry run step
55
+ return if dry_run_sequence.steps_for_name(step_name).length.zero?
56
+
57
+ dry_run_sequence.override_step(step_name, options, &block)
53
58
  end
54
59
 
55
60
  def error(*steps, &block)
@@ -131,6 +136,9 @@ module SmashTheState
131
136
 
132
137
  # also copy the state class over
133
138
  child_class.instance_variable_set(:@state_class, state_class && state_class.dup)
139
+
140
+ # also copy the dry run sequence
141
+ child_class.dry_run_sequence.steps.concat(dry_run_sequence.steps.map(&:dup))
134
142
  end
135
143
  end
136
144
  end
@@ -61,6 +61,7 @@ module SmashTheState
61
61
  sequence.side_effect_free
62
62
  end
63
63
 
64
+ seq.run_options[:dry] = true
64
65
  run_sequence(seq, params)
65
66
  end
66
67
  alias dry_call dry_run
@@ -32,7 +32,6 @@ module SmashTheState
32
32
  # return a copy without the steps that produce side-effects
33
33
  def side_effect_free
34
34
  dup.tap do |seq|
35
- seq.run_options[:dry] = true
36
35
  seq.instance_eval do
37
36
  @steps = seq.steps.select(&:side_effect_free?)
38
37
  end
@@ -1,3 +1,3 @@
1
1
  module SmashTheState
2
- VERSION = "1.4.2".freeze
2
+ VERSION = "1.4.3".freeze
3
3
  end
@@ -120,9 +120,9 @@ describe SmashTheState::Operation do
120
120
  step_name,
121
121
  step_options,
122
122
  &implementation
123
- ).and_return(token_result)
123
+ )
124
124
 
125
- expect(klass.override_step(step_name, step_options, &implementation)).to eq(token_result)
125
+ klass.override_step(step_name, step_options, &implementation)
126
126
  end
127
127
  end
128
128
 
@@ -147,6 +147,15 @@ describe SmashTheState::Operation do
147
147
  state.countup += "two"
148
148
  state
149
149
  end
150
+
151
+ dry_run_sequence do
152
+ step :one
153
+ step :two
154
+ step :three do |state|
155
+ state.countup += "blar"
156
+ state
157
+ end
158
+ end
150
159
  end
151
160
  end
152
161
  end
@@ -189,6 +198,10 @@ describe SmashTheState::Operation do
189
198
  too_large = child.call(countup: "")
190
199
  expect(too_large.errors[:countup]).to eq(["can't be blank"])
191
200
  end
201
+
202
+ it "populates the dry run sequence and honors overridden steps" do
203
+ expect(child.dry_run(countup: "zero").countup).to eq("zerooneoneandahalfblar")
204
+ end
192
205
  end
193
206
 
194
207
  describe "self#dynamic_schema" do
@@ -223,8 +236,8 @@ describe SmashTheState::Operation do
223
236
  describe "self#dry_run_sequence" do
224
237
  context "with a custom dry run sequence block" do
225
238
  before do
226
- klass.step :step_one do |state|
227
- state.name = state.name + " one"
239
+ klass.step :step_one do |state, _original_state, run_options|
240
+ state.name = state.name + " one " + run_options.to_json
228
241
  state
229
242
  end
230
243
 
@@ -253,16 +266,17 @@ describe SmashTheState::Operation do
253
266
  end
254
267
 
255
268
  it "provides a custom sequence for the dry run that " \
256
- "contains only side-effect free steps" do
269
+ "contains only side-effect free steps, and specifies " \
270
+ "whether the run is dry the run options" do
257
271
  result = klass.call(name: "Sam")
258
- expect(result.name).to eq("Sam one two three")
272
+ expect(result.name).to eq("Sam one {\"dry\":false} two three")
259
273
 
260
274
  expect(
261
275
  klass.dry_run_sequence.steps.all?(&:side_effect_free?)
262
276
  ).to eq(true)
263
277
 
264
278
  dry_result = klass.dry_run(name: "Sam")
265
- expect(dry_result.name).to eq("Sam one custom")
279
+ expect(dry_result.name).to eq("Sam one {\"dry\":true} custom")
266
280
  end
267
281
  end
268
282
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: smash_the_state
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.2
4
+ version: 1.4.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dan Connor
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-02-02 00:00:00.000000000 Z
11
+ date: 2021-04-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: active_model_attributes
@@ -83,8 +83,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
83
83
  - !ruby/object:Gem::Version
84
84
  version: '0'
85
85
  requirements: []
86
- rubyforge_project:
87
- rubygems_version: 2.7.6.2
86
+ rubygems_version: 3.1.4
88
87
  signing_key:
89
88
  specification_version: 4
90
89
  summary: A useful utility for transforming state that provides step sequencing, middleware,