trailblazer-macro-contract 2.1.0.rc12 → 2.1.0.rc13
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGES.md +4 -0
- data/Gemfile +1 -1
- data/lib/trailblazer/macro/contract/version.rb +1 -1
- data/lib/trailblazer/operation/contract.rb +2 -2
- data/lib/trailblazer/operation/persist.rb +1 -1
- data/lib/trailblazer/operation/validate.rb +3 -3
- data/test/docs/contract_test.rb +21 -21
- data/test/operation/contract_test.rb +5 -5
- data/test/operation/persist_test.rb +1 -1
- data/test/test_helper.rb +1 -0
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2f0af3fbe015d0d25b32b8cf099fdd66a26e27fe23cde4adc216ae588932d0d7
|
4
|
+
data.tar.gz: f54ca3d0c5e8135737b1a90c6a90babf0b1d518885d43596fcc641d3e499cdf8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 432875c4d2eb2c96c372c7e2ab5983bab79914a3b85ccf360590d56379549f3b98e0c3365bd3c360a53e877d6cc84fc63257a8030fe18f056b47c9ffd4bb3de7
|
7
|
+
data.tar.gz: 9e1c00d228337886d42fa69c571a329ddde3360f344041d5447a873f4681570f1af5b937d83d04873cee9fbdc07a0ba0059213adcf60be5a65f039fb4753da22
|
data/CHANGES.md
CHANGED
data/Gemfile
CHANGED
@@ -5,7 +5,7 @@ gemspec
|
|
5
5
|
gem "dry-auto_inject"
|
6
6
|
gem "dry-matcher"
|
7
7
|
|
8
|
-
gem "trailblazer-operation", path: "../trailblazer-operation"
|
8
|
+
# gem "trailblazer-operation", path: "../trailblazer-operation"
|
9
9
|
# gem "trailblazer-macro", path: "../trailblazer-macro"
|
10
10
|
# gem "trailblazer-activity", path: "../trailblazer-activity"
|
11
11
|
# gem "trailblazer-activity-dsl-linear", path: "../trailblazer-activity-dsl-linear"
|
@@ -16,9 +16,9 @@ module Trailblazer
|
|
16
16
|
# Build contract at runtime.
|
17
17
|
def self.call(options, circuit_options, name: "default", constant: nil, builder: nil)
|
18
18
|
# TODO: we could probably clean this up a bit at some point.
|
19
|
-
contract_class = constant || options["contract.#{name}.class"] # DISCUSS: Injection possible here?
|
19
|
+
contract_class = constant || options[:"contract.#{name}.class"] # DISCUSS: Injection possible here?
|
20
20
|
model = options[:model]
|
21
|
-
name = "contract.#{name}"
|
21
|
+
name = :"contract.#{name}"
|
22
22
|
|
23
23
|
options[name] = if builder
|
24
24
|
call_builder(options, circuit_options, builder: builder, constant: contract_class, name: name)
|
@@ -6,7 +6,7 @@ module Trailblazer
|
|
6
6
|
# Deviate to left track if optional key is not found in params.
|
7
7
|
# Deviate to left if validation result falsey.
|
8
8
|
def self.Validate(skip_extract: false, name: "default", representer: false, key: nil, constant: nil) # DISCUSS: should we introduce something like Validate::Deserializer?
|
9
|
-
params_path = "contract.#{name}.params" # extract_params! save extracted params here.
|
9
|
+
params_path = :"contract.#{name}.params" # extract_params! save extracted params here.
|
10
10
|
|
11
11
|
extract = Validate::Extract.new(key: key, params_path: params_path).freeze
|
12
12
|
validate = Validate.new(name: name, representer: representer, params_path: params_path, constant: constant).freeze
|
@@ -52,11 +52,11 @@ module Trailblazer
|
|
52
52
|
end
|
53
53
|
|
54
54
|
def validate!(options, representer: false, from: :document, params_path: nil)
|
55
|
-
path = "contract.#{@name}"
|
55
|
+
path = :"contract.#{@name}"
|
56
56
|
contract = @constant || options[path]
|
57
57
|
|
58
58
|
# this is for 1.1-style compatibility and should be removed once we have Deserializer in place:
|
59
|
-
options["result.#{path}"] = result =
|
59
|
+
options[:"result.#{path}"] = result =
|
60
60
|
if representer
|
61
61
|
# use :document as the body and let the representer deserialize to the contract.
|
62
62
|
# this will be simplified once we have Deserializer.
|
data/test/docs/contract_test.rb
CHANGED
@@ -37,7 +37,7 @@ class DocsContractOverviewTest < Minitest::Spec
|
|
37
37
|
=end
|
38
38
|
|
39
39
|
it do
|
40
|
-
assert Create.(params: {})["contract.default"].must_be_instance_of DocsContractOverviewTest::Create::MyContract
|
40
|
+
assert Create.(params: {})[:"contract.default"].must_be_instance_of DocsContractOverviewTest::Create::MyContract
|
41
41
|
end
|
42
42
|
|
43
43
|
#- result
|
@@ -45,13 +45,13 @@ class DocsContractOverviewTest < Minitest::Spec
|
|
45
45
|
#:result
|
46
46
|
result = Create.(params: { length: "A" })
|
47
47
|
|
48
|
-
result["result.contract.default"].success? #=> false
|
49
|
-
result["result.contract.default"].errors #=> Errors object
|
50
|
-
result["result.contract.default"].errors.messages #=> {:length=>["is not a number"]}
|
48
|
+
result[:"result.contract.default"].success? #=> false
|
49
|
+
result[:"result.contract.default"].errors #=> Errors object
|
50
|
+
result[:"result.contract.default"].errors.messages #=> {:length=>["is not a number"]}
|
51
51
|
|
52
52
|
#:result end
|
53
|
-
result["result.contract.default"].success?.must_equal false
|
54
|
-
result["result.contract.default"].errors.messages.must_equal ({:title=>["can't be blank"], :length=>["is not a number"]})
|
53
|
+
result[:"result.contract.default"].success?.must_equal false
|
54
|
+
result[:"result.contract.default"].errors.messages.must_equal ({:title=>["can't be blank"], :length=>["is not a number"]})
|
55
55
|
end
|
56
56
|
|
57
57
|
it "shows 2-level tracing" do
|
@@ -114,7 +114,7 @@ class DocsContractSeparateKeyTest < Minitest::Spec
|
|
114
114
|
step Contract::Persist( method: :sync )
|
115
115
|
|
116
116
|
def extract_params!(options, **)
|
117
|
-
options["contract.default.params"] = options[:params][type]
|
117
|
+
options[:"contract.default.params"] = options[:params][type]
|
118
118
|
end
|
119
119
|
end
|
120
120
|
#:key-extr end
|
@@ -160,7 +160,7 @@ class ContractConstantTest < Minitest::Spec
|
|
160
160
|
#:constant-result
|
161
161
|
result = Song::Create.(params: { title: "A" })
|
162
162
|
result.success? #=> false
|
163
|
-
result["contract.default"].errors.messages
|
163
|
+
result[:"contract.default"].errors.messages
|
164
164
|
#=> {:title=>["is too short (minimum is 2 characters)"], :length=>["is not a number"]}
|
165
165
|
#:constant-result end
|
166
166
|
|
@@ -181,7 +181,7 @@ class ContractConstantTest < Minitest::Spec
|
|
181
181
|
#:constant-new end
|
182
182
|
|
183
183
|
it { Song::New.(params: {}).inspect(:model).must_equal %{<Result:true [#<struct ContractConstantTest::Song title=nil, length=nil>] >} }
|
184
|
-
it { Song::New.(params: {})["contract.default"].model.inspect.must_equal %{#<struct ContractConstantTest::Song title=nil, length=nil>} }
|
184
|
+
it { Song::New.(params: {})[:"contract.default"].model.inspect.must_equal %{#<struct ContractConstantTest::Song title=nil, length=nil>} }
|
185
185
|
it do
|
186
186
|
#:constant-new-result
|
187
187
|
result = Song::New.(params: {})
|
@@ -218,8 +218,8 @@ class ContractConstantTest < Minitest::Spec
|
|
218
218
|
result = Song::ValidateOnly.(params: { title: "Rising Force", length: 13 })
|
219
219
|
|
220
220
|
result.success? #=> true
|
221
|
-
result[
|
222
|
-
result["contract.default"].title #=> "Rising Force"
|
221
|
+
result[:model] #=> #<struct Song title=nil, length=nil>
|
222
|
+
result[:"contract.default"].title #=> "Rising Force"
|
223
223
|
#:validate-only-result end
|
224
224
|
end
|
225
225
|
end
|
@@ -320,7 +320,7 @@ class ContractNamedConstantTest < Minitest::Spec
|
|
320
320
|
it do
|
321
321
|
#:name-res
|
322
322
|
result = Song::Create.(params: { title: "A" })
|
323
|
-
result["contract.form"].errors.messages #=> {:title=>["is too short (minimum is 2 ch...
|
323
|
+
result[:"contract.form"].errors.messages #=> {:title=>["is too short (minimum is 2 ch...
|
324
324
|
#:name-res end
|
325
325
|
end
|
326
326
|
end
|
@@ -349,12 +349,12 @@ class ContractInjectConstantTest < Minitest::Spec
|
|
349
349
|
#:di-contract-call
|
350
350
|
Create.(
|
351
351
|
params: { title: "Anthony's Song" },
|
352
|
-
"contract.default.class" => MyContract
|
352
|
+
:"contract.default.class" => MyContract
|
353
353
|
)
|
354
354
|
#:di-contract-call end
|
355
355
|
end
|
356
|
-
it { Create.(params: { title: "A" }, "contract.default.class" => MyContract).inspect(:model).must_equal %{<Result:false [#<struct ContractInjectConstantTest::Song id=nil, title=nil>] >} }
|
357
|
-
it { Create.(params: { title: "Anthony's Song" }, "contract.default.class" => MyContract).inspect(:model).must_equal %{<Result:true [#<struct ContractInjectConstantTest::Song id=nil, title="Anthony's Song">] >} }
|
356
|
+
it { Create.(params: { title: "A" }, :"contract.default.class" => MyContract).inspect(:model).must_equal %{<Result:false [#<struct ContractInjectConstantTest::Song id=nil, title=nil>] >} }
|
357
|
+
it { Create.(params: { title: "Anthony's Song" }, :"contract.default.class" => MyContract).inspect(:model).must_equal %{<Result:true [#<struct ContractInjectConstantTest::Song id=nil, title="Anthony's Song">] >} }
|
358
358
|
end
|
359
359
|
|
360
360
|
class DryValidationContractTest < Minitest::Spec
|
@@ -391,12 +391,12 @@ class DryValidationContractTest < Minitest::Spec
|
|
391
391
|
|
392
392
|
puts "@@@@@ #{Trailblazer::Developer.railway(Create, style: :rows)}"
|
393
393
|
|
394
|
-
it { Create.(params: {}).inspect("result.contract.default").must_include "Result:false"}
|
395
|
-
it { Create.(params: {}).inspect("result.contract.default").must_include "errors={:id=>[\"must be filled\""}
|
394
|
+
it { Create.(params: {}).inspect(:"result.contract.default").must_include "Result:false"}
|
395
|
+
it { Create.(params: {}).inspect(:"result.contract.default").must_include "errors={:id=>[\"must be filled\""}
|
396
396
|
|
397
|
-
it { Create.(params: { id: 1 }).inspect(:model, "result.contract.default").must_include "Result:false"}
|
398
|
-
it { Create.(params: { id: 1 }).inspect(:model, "result.contract.default").must_include "errors={:title=>[\"must be filled\", \"size cannot be less than 2\"]}"}
|
399
|
-
it { Create.(params: { id: 1 }).inspect(:model, "result.contract.default").wont_include ":id=>[\"must be filled\""}
|
397
|
+
it { Create.(params: { id: 1 }).inspect(:model, :"result.contract.default").must_include "Result:false"}
|
398
|
+
it { Create.(params: { id: 1 }).inspect(:model, :"result.contract.default").must_include "errors={:title=>[\"must be filled\", \"size cannot be less than 2\"]}"}
|
399
|
+
it { Create.(params: { id: 1 }).inspect(:model, :"result.contract.default").wont_include ":id=>[\"must be filled\""}
|
400
400
|
|
401
401
|
it { Create.(params: { id: 1, title: "" }).inspect(:model).must_equal %{<Result:false [#<struct DryValidationContractTest::Song id=nil, title=nil>] >} }
|
402
402
|
it { Create.(params: { id: 1, title: "Y" }).inspect(:model).must_equal %{<Result:false [#<struct DryValidationContractTest::Song id=nil, title=nil>] >} }
|
@@ -420,7 +420,7 @@ class DryValidationContractTest < Minitest::Spec
|
|
420
420
|
it "shows error messages" do
|
421
421
|
result = OpWithSchema.(params: {song: { title: nil }})
|
422
422
|
|
423
|
-
result["result.contract.default"].errors.must_equal(title: ["must be filled"])
|
423
|
+
result[:"result.contract.default"].errors.must_equal(title: ["must be filled"])
|
424
424
|
end
|
425
425
|
# key not found
|
426
426
|
it { OpWithSchema.(params: {}).success?.must_equal false }
|
@@ -26,16 +26,16 @@ class ContractTest < Minitest::Spec
|
|
26
26
|
it do
|
27
27
|
result = Update.(params: {title: "SVG"})
|
28
28
|
result.success?.must_equal true
|
29
|
-
result["result.contract.default"].success?.must_equal true
|
30
|
-
result["result.contract.default"].errors.messages.must_equal({})
|
29
|
+
result[:"result.contract.default"].success?.must_equal true
|
30
|
+
result[:"result.contract.default"].errors.messages.must_equal({})
|
31
31
|
end
|
32
32
|
|
33
33
|
# failure
|
34
34
|
it do
|
35
35
|
result = Update.(params: {title: nil})
|
36
36
|
result.success?.must_equal false
|
37
|
-
result["result.contract.default"].success?.must_equal false
|
38
|
-
result["result.contract.default"].errors.messages.must_equal({:title=>["can't be blank"]})
|
37
|
+
result[:"result.contract.default"].success?.must_equal false
|
38
|
+
result[:"result.contract.default"].errors.messages.must_equal({:title=>["can't be blank"]})
|
39
39
|
end
|
40
40
|
|
41
41
|
#---
|
@@ -63,7 +63,7 @@ class ContractTest < Minitest::Spec
|
|
63
63
|
#---
|
64
64
|
# contract.default.params gets set (TODO: change in 2.1)
|
65
65
|
it { Upsert.( params: {song: { title: "SVG" }})[:params].must_equal({:song=>{:title=>"SVG"}} ) }
|
66
|
-
it { Upsert.( params: {song: { title: "SVG" }})["contract.default.params"].must_equal({:title=>"SVG"} ) }
|
66
|
+
it { Upsert.( params: {song: { title: "SVG" }})[:"contract.default.params"].must_equal({:title=>"SVG"} ) }
|
67
67
|
|
68
68
|
#---
|
69
69
|
#- inheritance
|
@@ -42,7 +42,7 @@ class PersistTest < Minitest::Spec
|
|
42
42
|
class Update < Create
|
43
43
|
end
|
44
44
|
|
45
|
-
it { Trailblazer::Developer.railway(
|
45
|
+
it { Trailblazer::Developer.railway(Update).must_equal %{[>model.build,>contract.build,>contract.default.validate,<<PersistTest::Create::Fail1,>persist.save,<<PersistTest::Create::Fail2]} }
|
46
46
|
|
47
47
|
#---
|
48
48
|
it do
|
data/test/test_helper.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: trailblazer-macro-contract
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.1.0.
|
4
|
+
version: 2.1.0.rc13
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nick Sutterer
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-07-
|
11
|
+
date: 2019-07-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: reform
|
@@ -184,7 +184,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
184
184
|
version: 1.3.1
|
185
185
|
requirements: []
|
186
186
|
rubyforge_project:
|
187
|
-
rubygems_version: 2.7.
|
187
|
+
rubygems_version: 2.7.6
|
188
188
|
signing_key:
|
189
189
|
specification_version: 4
|
190
190
|
summary: 'Macros for form-objects: Build, Validate, Persist'
|