trailblazer-activity 0.10.0 → 0.10.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
2
  SHA256:
3
- metadata.gz: c7bfa65d9c33030f9512d1d465cbb47862336c4cff11be999ea64845bc8d8dff
4
- data.tar.gz: a28d2c3bd407fbc5db2cf0d250e68e13f169ae62297d50c51e0507bb743d641b
3
+ metadata.gz: c94f3dbe368043f005ec5d68fc099246c8f302dd6e1b366989b321665d5f2b98
4
+ data.tar.gz: 28f0b58b9d2de3b7adffd543860baed3e47eb25945161cbe7cc5f45a8f907abd
5
5
  SHA512:
6
- metadata.gz: 64a06dd8ff913d4ad708de7bcca3e846f81333eb1c70aaf1a2de132de6ac4044cee55fb6715865fd8580989ce5f944bb4e331e3e758ab925102330bb09397cd6
7
- data.tar.gz: 1e00a9ee8523d21901f7a912a02afc8e25038c13111775b367226cf792796da2edbbef6853e5a4ead885858021b92a4eb9d48e466bf94a84126956b716a3397a
6
+ metadata.gz: 78eaabeff700dd6b22ff61efe8efe993287875c02e7a80197ca6880c435bba2732d61ebaa41acc4da3737ad556ae669b8dc03f6dad445394486e7a1298d62569
7
+ data.tar.gz: '08b7cbeea9a42fc99a8d38f95439d6e265f0fe4051ccfa8e95a18f18c117e34bf6ae2824e07a8eb139db32e4559bd094c30d621e1fb82cc2c8e80916e7c6ee88'
data/CHANGES.md CHANGED
@@ -1,3 +1,7 @@
1
+ # 0.10.1
2
+
3
+ * Update IllegalSignalError exception for more clarity
4
+
1
5
  # 0.10.0
2
6
 
3
7
  * Require `developer` >= 0.0.7.
data/README.md CHANGED
@@ -1,22 +1,22 @@
1
1
  # Activity
2
2
 
3
- implements Intermediate, Implementation, compiler and `Activity::Implementation`, Activity::Interface
3
+ Implements Intermediate, Implementation and compiler
4
4
 
5
5
  The `activity` gem brings a light-weight DSL to define business processes, and the runtime logic to run those activities.
6
6
 
7
7
  A process is a set of arbitrary pieces of logic you define, chained together and put into a meaningful context by an activity. Activity lets you focus on the implementation of steps while Trailblazer takes care of the control flow.
8
8
 
9
- Please find the [full documentation on the Trailblazer website](http://trailblazer.to/api-docs). [Note that the docs are WIP.]
9
+ Please find the [full documentation on the Trailblazer website](https://2019.trailblazer.to/2.1/docs/activity.html). [Note that the docs are WIP.]
10
10
 
11
11
  ## Example
12
12
 
13
- The `activity` gem provides three default patterns to model processes: `Path`, `Railway` and `FastTrack`. Here's an example what a railway activity could look like, along with some more complex connections.
13
+ In conjunction with [`dsl-linear`](https://github.com/trailblazer/trailblazer-activity-dsl-linear), the `activity` gem provides three default patterns to model processes: `Path`, `Railway` and `FastTrack`. Here's an example of what a railway activity could look like, along with some more complex connections (you can read more about Railway strategy in the [docs](https://2019.trailblazer.to/2.1/docs/activity.html#activity-strategy-railway)).
14
14
 
15
15
  ```ruby
16
- module Memo::Update
17
- extend Trailblazer::Activity::Railway()
18
- module_function
16
+ require "trailblazer-activity"
17
+ require "trailblazer-activity-dsl-linear"
19
18
 
19
+ class Memo::Update < Trailblazer::Activity::Railway
20
20
  # here goes your business logic
21
21
  #
22
22
  def find_model(ctx, id:, **)
@@ -39,10 +39,10 @@ module Memo::Update
39
39
 
40
40
  # here comes the DSL describing the layout of the activity
41
41
  #
42
- step method(:find_model)
43
- step method(:validate), Output(:failure) => End(:validation_error)
44
- step method(:save)
45
- fail method(:log_error)
42
+ step :find_model
43
+ step :validate, Output(:failure) => End(:validation_error)
44
+ step :save
45
+ fail :log_error
46
46
  end
47
47
  ```
48
48
 
@@ -71,17 +71,22 @@ With Activity, modeling business processes turns out to be ridiculously simple:
71
71
  ## Features
72
72
 
73
73
  * Activities can model any process with arbitrary flow and connections.
74
- * Nesting and compositions are allowed and encouraged.
74
+ * Nesting and compositions are allowed and encouraged (via Trailblazer's [`dsl-linear`](https://github.com/trailblazer/trailblazer-activity-dsl-linear) gem).
75
75
  * Different step interfaces, manual processing of DSL options, etc is all possible.
76
76
  * Steps can be any kind of callable objects.
77
- * Tracing!
77
+ * Tracing! (via Trailblazer's [`developer`](https://github.com/trailblazer/trailblazer-developer) gem)
78
78
 
79
79
  ## Operation
80
80
 
81
- Trailblazer's [`Operation`](http://trailblazer.to/2.1/operation) internally uses an activity to model the processes.
81
+ Trailblazer's [`Operation`](https://2019.trailblazer.to/2.1/docs/operation.html#operation-overview) internally uses an activity to model the processes.
82
+
83
+ ## Workflow
84
+ Activities can be formed into bigger compounds and using workflow, you can build long-running processes such as a moderated blog post or a parcel delivery. Also, you don't have to use the DSL but can use the [`editor`](https://2019.trailblazer.to/2.1/docs/pro.html#pro-editor)instead(cool for more complex, long-running flows). Here comes a sample screenshot.
85
+
86
+ <img src="http://2019.trailblazer.to/2.1/dist/img/flow.png">
82
87
 
83
88
  ## License
84
89
 
85
90
  © Copyright 2018, Trailblazer GmbH
86
91
 
87
- Licensed under the LGPLv3 license. We also offer a [commercial-friendly license](http://trailblazer.to/pro).
92
+ Licensed under the LGPLv3 license. We also offer a commercial-friendly [license](https://2019.trailblazer.to/2.1/docs/pro.html#pro-license).
@@ -51,7 +51,16 @@ module Trailblazer
51
51
  # Stop execution of the circuit when we hit a stop event (< End). This could be an task's End or Suspend.
52
52
  return [ last_signal, args ] if @stop_events.include?(task) # DISCUSS: return circuit_options here?
53
53
 
54
- task = next_for(task, last_signal) or raise IllegalSignalError.new("<#{@name}>[#{task}][ #{last_signal.inspect} ]")
54
+ if (next_task = next_for(task, last_signal))
55
+ task = next_task
56
+ else
57
+ raise IllegalSignalError.new(
58
+ task,
59
+ signal: last_signal,
60
+ outputs: @map[task],
61
+ exec_context: circuit_options[:exec_context], # passed at run-time from DSL
62
+ )
63
+ end
55
64
  end
56
65
  end
57
66
 
@@ -67,7 +76,26 @@ module Trailblazer
67
76
  outputs[signal]
68
77
  end
69
78
 
79
+ # Common reasons to raise IllegalSignalError are
80
+ # * Returning invalid signal from custom Macros
81
+ # * Returning invalid signal from steps which are not taskWrapped, for example: `step task: method(:validate)`
82
+ #
83
+ # Rest assured, it won't be raised in case of below scenarios where they can return any value,
84
+ # * Steps with instance method signature, for example, `step :load_user`
85
+ # * Steps with proc signature, for example `step ->(ctx, **){}`
70
86
  class IllegalSignalError < RuntimeError
87
+ attr_reader :task, :signal
88
+
89
+ def initialize(task, signal:, outputs:, exec_context:)
90
+ @task = task
91
+ @signal = signal
92
+
93
+ message = "#{exec_context.class}: \n\t" \
94
+ "\sUnrecognized Signal `#{signal.inspect}` returned from #{task.inspect}. Registered signals are, \n" \
95
+ "- #{outputs.keys.join("\n- ")}"
96
+
97
+ super(message)
98
+ end
71
99
  end
72
100
  end
73
101
  end
@@ -1,7 +1,7 @@
1
1
  module Trailblazer
2
2
  module Version
3
3
  module Activity
4
- VERSION = "0.10.0"
4
+ VERSION = "0.10.1"
5
5
  end
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: trailblazer-activity
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.10.0
4
+ version: 0.10.1
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-09-23 00:00:00.000000000 Z
11
+ date: 2020-04-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: trailblazer-context
@@ -142,8 +142,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
142
142
  - !ruby/object:Gem::Version
143
143
  version: '0'
144
144
  requirements: []
145
- rubyforge_project:
146
- rubygems_version: 2.7.6
145
+ rubygems_version: 3.0.8
147
146
  signing_key:
148
147
  specification_version: 4
149
148
  summary: Runtime code for Trailblazer activities.