trailblazer 2.0.0.rc1 → 2.0.0

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
2
  SHA1:
3
- metadata.gz: cb0eb777dc5afb25cb6200169ca06bf75a18db94
4
- data.tar.gz: 8ca6d1c9b0a5491ea9fa282cf5766552fcf8462a
3
+ metadata.gz: 9113e6cd01913594963d2bdd2007df2d82b1a162
4
+ data.tar.gz: 6f9970934e06c98054d76635cfb0dd9353f03bb3
5
5
  SHA512:
6
- metadata.gz: 939adb355c6875cf922f6dda5056ee2d13664c386149c3afd7d62c5f0a0b77b51d1c487e62ac4ea1c5af39aa481e9d1b7bef891bca55a0dc6af92fb5d764786a
7
- data.tar.gz: 5e1f1f2de36e85c4f6a0c84e655c329e22073027130c079e6f3b776de84c1046867056a8fb40aa915919ac83a6ec74300428d45c24a1b65eb06031c8d20d3296
6
+ metadata.gz: 5252542b46421e3972eda278e6184ee4dffb478db5682918706474d9e4dff31c6ba93c23c3ca3ab34334a05df1ef7e1c30ccf04a1cec16f8935a62f9066f259c
7
+ data.tar.gz: 03b85c2c94497c52f4017160fdedd11c670cbd22c2adc03af4fd920d266b5ddde1459aa3e03e3dabb0555b87b41c39c555add65796996d697486556de10bf713
data/CHANGES.md CHANGED
@@ -1,54 +1,10 @@
1
-
2
1
  # 2.0.0
3
2
 
4
- ## Operation API change:
5
-
6
- * You can now have any number of contracts, `contract [:name], constant/block`.
7
-
8
- `Contract`, Setup, Model
9
- expose via `result[:_invocations] = _invocations`
10
-
11
- * Changed `Operation#validate`: the signature now is `validate(params, model=self.model, options={}, contract_class)`.
12
- * Changed `Operation#contract`: the signature now is `contract(model=self.model, options={}, contract_class)`.
13
-
14
- Both changes simplify injecting additional dependencies into the contract, or making use of `Composition` contracts. Read more [here](http://trailblazer.to/gems/operation/contract.html). Note that in 1.2, there are deprecation mechanics to handle old code.
15
-
16
- * Added `Trailblazer::Builder` for a builder-and-call mechanism decoupled from the operation.
17
- * Finally removed `Operation::[]`. Be careful, this is now replaced and will return the specified competence.
18
-
19
- TRB 1.1
20
- build_operation(params).run
21
- process(@params)
22
- TRB 1.2
23
- build_operation(params, *).call(params)
24
-
25
- * Removed `Operation::reject`. This is available in `trailblazer-compat`.
26
- * `Operation#invalid!` is now an optional module `Trailblazer::Operation::Invalid`.
27
- * `Operation::present` is now optional. Include `Present`.
28
-
29
- # CHANGES:
30
- # * Removed `Operation::[]` in favor of `Operation::()`.
31
- # * `Operation#invalid!` doesn't accept a result anymore.
32
- # * Removed `Operation#valid?` in favor of the result object.
33
- #
34
-
35
- ## Model
36
-
37
- * The `model` method doesn't exist anymore, use `self["model"]` or write your own.
38
- * `find_by` diverts to left track.
39
- * `:create` is `:new` now.
40
-
41
- ## DI
42
-
43
- You can now inject the following objects via `::call`:
44
-
45
- * `"contract.default.class"`
46
- * `"contract"`: The contract instance.
47
- * `"model.class"`
3
+ All old semantics will be available via [trailblazer-compat](https://github.com/trailblazer/trailblazer-compat).
48
4
 
49
5
  * Removed `Operation::run` as it was a bad decision. Raising an exception on invalid is a very test-specific scenario and shouldn't have been handled in the core doce.
50
6
  * Removed `Operation::present`, since you can simply call `Operation::new` (without builders) or `Operation::build_operation` (with builders).
51
- * Removed `Operation::valid?`. This is in the result object via `result[:valid]`.
7
+ * Removed `Operation::valid?`. This is in the result object via `result.success?`.
52
8
  * Removed `Operation#errors`. This is in the result object via `result[:errors]` if the operation was invalid.
53
9
  * Removed the private option `:raise_on_invalid`. Use `Contract::Raise` instead, if you need it in tests.
54
10
 
@@ -57,6 +13,12 @@ You can now inject the following objects via `::call`:
57
13
  * Removed `Operation::contract_class`. Please use `Operation::["contract.default.class"]`.
58
14
  * Removed `Operation::contract_class=`. Please use `Operation::["contract.default.class"]=`. Doesn't inherit.
59
15
 
16
+ ## Model
17
+
18
+ * The `model` method doesn't exist anymore, use `self["model"]` or write your own.
19
+ * `:find_by` diverts to left track.
20
+ * `:create` is `:new` now.
21
+
60
22
  ## Builder
61
23
 
62
24
  * It's `include Builder` now, not `extend Builder`.
@@ -66,7 +28,7 @@ You can now inject the following objects via `::call`:
66
28
 
67
29
  * No exception anymore, but `Operation#["policy.result"]`.
68
30
  * Access the current user via `self["current_user"]` now.
69
- * `Policy` is `Policy::Pundit` now as `Policy` is Trailblazer's authorization style.
31
+ * `Policy` is `Policy::Pundit` now as `Policy` is Trailblazer's (upcoming) authorization style.
70
32
 
71
33
  ## Representer
72
34
 
@@ -82,13 +44,6 @@ You can now inject the following objects via `::call`:
82
44
 
83
45
  * Removed `Operation::Dispatch`, it's called `Operation::Callback`.
84
46
 
85
- ## #call
86
- * You can return whatever you want now by overriding `Op::call`.
87
- * Removed `Op.call().contract`, you now have to do `Op.call()[:operation].contract`.
88
-
89
-
90
- * Removed the deprecation for `validate`, signature is `(params[, model, options, contract_class])`.
91
- * Removed the deprecation for `contract`, signature is `([model, options, contract_class])`.
92
47
 
93
48
  ## Collection
94
49
 
@@ -96,16 +51,22 @@ You can now inject the following objects via `::call`:
96
51
 
97
52
  ## Controller
98
53
 
99
- * Removed `Controller#params!`, no one was using it.
54
+ * Removed `Controller`, this is now in [trailblazer-rails](https://github.com/trailblazer/trailblazer-rails/).
100
55
 
101
56
  ## Contract
102
57
 
103
- * You can't call `Create.().contract` anymore. The contract instance(s) are available through the `Result` object.
58
+ * You can't call `Create.().contract` anymore. The contract instance(s) are available through the `Result` object via `["contract.default"]`.
59
+ * Removed the deprecation for `validate`, signature is `(params[, model, options, contract_class])`.
60
+ * Removed the deprecation for `contract`, signature is `([model, options, contract_class])`.
104
61
 
105
62
  # 2.0.0.rc1
106
63
 
107
64
  * `consider` got removed since `step` now evaluates the step's result and deviates (or not).
108
65
 
66
+ # 2.0.0.rc2
67
+
68
+ * It's now Contract::Persist( name: "params" ) instead of ( name: "contract.params" ).
69
+
109
70
  # 2.0.0.beta3
110
71
 
111
72
  * New, very slick keyword arguments for steps.
@@ -13,11 +13,11 @@ class Trailblazer::Operation
13
13
  def self.build_contract!(operation, options, name:"default", constant:nil, builder: nil)
14
14
  # TODO: we could probably clean this up a bit at some point.
15
15
  contract_class = constant || options["contract.#{name}.class"]
16
- model = operation["model"] # FIXME: model.default
16
+ model = options["model"] # FIXME: model.default
17
17
 
18
- return operation["contract.#{name}"] = Uber::Option[builder].(operation, constant: contract_class, model: model) if builder
18
+ return options["contract.#{name}"] = Uber::Option[builder].(operation, constant: contract_class, model: model) if builder
19
19
 
20
- operation["contract.#{name}"] = contract_class.new(model)
20
+ options["contract.#{name}"] = contract_class.new(model)
21
21
  end
22
22
 
23
23
  def self.import!(operation, import, **args)
@@ -1,11 +1,10 @@
1
1
  class Trailblazer::Operation
2
2
  module Contract
3
3
  module Persist
4
- def self.import!(operation, import, options={})
5
- save_method = options[:method] || :save
6
- contract_name = options[:name] || "contract.default"
4
+ def self.import!(operation, import, method: :save, name: "default")
5
+ path = "contract.#{name}"
7
6
 
8
- import.(:&, ->(input, options) { options[contract_name].send(save_method) }, # TODO: test me.
7
+ import.(:&, ->(input, options) { options[path].send(method) }, # TODO: test me.
9
8
  name: "persist.save")
10
9
  end
11
10
  end
@@ -32,10 +32,10 @@ class Trailblazer::Operation
32
32
 
33
33
  def self.validate!(operation, options, name: nil, representer:false, from: "document", params_path:nil, **)
34
34
  path = "contract.#{name}"
35
- contract = operation[path]
35
+ contract = options[path]
36
36
 
37
37
  # this is for 1.1-style compatibility and should be removed once we have Deserializer in place:
38
- operation["result.#{path}"] = result =
38
+ options["result.#{path}"] = result =
39
39
  if representer
40
40
  # use "document" as the body and let the representer deserialize to the contract.
41
41
  # this will be simplified once we have Deserializer.
@@ -1,3 +1,3 @@
1
1
  module Trailblazer
2
- VERSION = "2.0.0.rc1"
2
+ VERSION = "2.0.0"
3
3
  end
@@ -217,7 +217,7 @@ class ContractNamedConstantTest < Minitest::Spec
217
217
  step Model( Song, :new )
218
218
  step Contract::Build( constant: MyContract, name: "form" )
219
219
  step Contract::Validate( name: "form" )
220
- step Contract::Persist( method: :sync, name: "contract.form" )
220
+ step Contract::Persist( method: :sync, name: "form" )
221
221
  end
222
222
  #:constant-name end
223
223
 
@@ -285,7 +285,7 @@ class DryValidationContractTest < Minitest::Spec
285
285
  step Model( Song, :new ) # create the op's main model.
286
286
  step Contract::Build( name: "form" ) # create the Reform contract.
287
287
  step Contract::Validate( name: "form" ) # validate the Reform contract.
288
- step Contract::Persist( method: :sync, name: "contract.form" ) # persist the contract's data via the model.
288
+ step Contract::Persist( method: :sync, name: "form" ) # persist the contract's data via the model.
289
289
  #~form end
290
290
  end
291
291
  #:dry-schema end
@@ -17,7 +17,7 @@ class DslContractTest < MiniTest::Spec
17
17
  includer.| Trailblazer::Operation::Model( OpenStruct, :new )
18
18
  includer.| Trailblazer::Operation::Contract::Build()
19
19
  includer.| Trailblazer::Operation::Contract::Validate()
20
- includer.| Trailblazer::Operation::Contract::Persist( save_method: :sync )
20
+ includer.| Trailblazer::Operation::Contract::Persist( method: :sync )
21
21
  # includer.> ->(op, *) { op["x"] = [] }
22
22
  end
23
23
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: trailblazer
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0.rc1
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nick Sutterer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-12-13 00:00:00.000000000 Z
11
+ date: 2016-12-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: trailblazer-operation
@@ -179,10 +179,8 @@ files:
179
179
  - README.md
180
180
  - Rakefile
181
181
  - THOUGHTS
182
- - TODO.md
183
182
  - doc/Trb-The-Stack.png
184
183
  - doc/trb.jpg
185
- - draft-1.2.rb
186
184
  - lib/trailblazer.rb
187
185
  - lib/trailblazer/dsl.rb
188
186
  - lib/trailblazer/operation/auto_inject.rb
@@ -193,7 +191,6 @@ files:
193
191
  - lib/trailblazer/operation/model.rb
194
192
  - lib/trailblazer/operation/module.rb
195
193
  - lib/trailblazer/operation/nested.rb
196
- - lib/trailblazer/operation/params.rb
197
194
  - lib/trailblazer/operation/persist.rb
198
195
  - lib/trailblazer/operation/policy.rb
199
196
  - lib/trailblazer/operation/procedural/contract.rb
@@ -255,12 +252,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
255
252
  version: 2.0.0
256
253
  required_rubygems_version: !ruby/object:Gem::Requirement
257
254
  requirements:
258
- - - ">"
255
+ - - ">="
259
256
  - !ruby/object:Gem::Version
260
- version: 1.3.1
257
+ version: '0'
261
258
  requirements: []
262
259
  rubyforge_project:
263
- rubygems_version: 2.6.3
260
+ rubygems_version: 2.4.8
264
261
  signing_key:
265
262
  specification_version: 4
266
263
  summary: A high-level architecture for Ruby and Rails.
data/TODO.md DELETED
@@ -1,11 +0,0 @@
1
- # Operation: External API
2
-
3
- * allow `Op[{body: "Great!"}, {additional: true}]` to save merge.
4
- * make `Op[]` not require wrap like `comment: {}`
5
- * in tests, make Op[].model return the reloaded model!
6
-
7
- # Operation: Internal API
8
-
9
- * don't populate the form in #present context, we don't need it (only the representer goes nuts)
10
- * don't pass contract in validate, we have #contract.
11
- * abstract validate/success/fail into methods to make it easily overrideable.
data/draft-1.2.rb DELETED
@@ -1,7 +0,0 @@
1
- representer :deserializer, Representer::Create (do)
2
- or
3
- Op.(representer.deserializer.class: Representer::Create)
4
-
5
-
6
- representer!(name)
7
- @options[representer.deserializer.class] || self.class[representer.deserializer.class]
@@ -1,13 +0,0 @@
1
- class Trailblazer::Operation
2
- module Params
3
- def self.included(includer)
4
- includer.> Replace, after: New
5
- end
6
- end
7
-
8
- # Returned object will replace "params". Original is saved in "params.original".
9
- Params::Replace = ->(input, options) {
10
- options["params.original"] = original = options["params"]
11
- options["params"] = input.params!(original)
12
- }
13
- end