trailblazer 2.1.2 → 2.1.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: 9408be91d18dd6ffcfd37798706abcd9c3ec53ec60b6b99aff17368bc2c8cba1
4
- data.tar.gz: 545fbb44de7d6078941e0304c4390e28c92984a7b44cc75dc74f7c160917bffc
3
+ metadata.gz: 0d0ac4db20919678e762365a02e94e4882b21f933e8fec565ab277fc081a5d5b
4
+ data.tar.gz: d150482451d566d56d3ef1815d6d080c756001ca619769db3fe4ab914466de50
5
5
  SHA512:
6
- metadata.gz: fc0cc222a82c69e04bfe3c53ee0f166a9705acb09d665a49418b9a61a1e7ae61531609d36d4444e0db386828871fdc6ee9a13ad6df215e96e3560e8d65bd3e8c
7
- data.tar.gz: af02a1954582ca6c9b767d98613b51b1ca96922b988c3b6a24cd122caf7d998d8a8d60a0c945b01392432983e2cc94eb2921a6b5982796a497e72df15cc7a12a
6
+ metadata.gz: d48bc5c565745d3ee6293b4cc6b50c44e71618151d93e5e091a8338b8d1b38f45793b24daec644e458b71700f4cbd58f5a934813e314f4e18f843fcbc8de7676
7
+ data.tar.gz: f30443b34b86d148f2a9a35d60a97b593157c3f346a365664be96b7987df42d6bd29378e451000359a2eca289cd948f9a13f2c5043a82dcc4dcfee04a2082d5c
@@ -1,6 +1,3 @@
1
- ## This file is managed by Terraform.
2
- ## Do not modify this file directly, as it may be overwritten.
3
- ## Please open an issue instead.
4
1
  name: CI
5
2
  on: [push, pull_request]
6
3
  jobs:
@@ -8,12 +5,12 @@ jobs:
8
5
  strategy:
9
6
  fail-fast: false
10
7
  matrix:
11
- ruby: [2.7, '3.0', '3.1']
8
+ ruby: [2.5, 2.6, 2.7, '3.0', '3.1', '3.2', 'head', 'jruby']
12
9
  runs-on: ubuntu-latest
13
10
  steps:
14
11
  - uses: actions/checkout@v3
15
12
  - uses: ruby/setup-ruby@v1
16
13
  with:
17
14
  ruby-version: ${{ matrix.ruby }}
18
- bundler-cache: true
15
+ bundler-cache: true # runs 'bundle install' and caches installed gems automatically
19
16
  - run: bundle exec rake
data/CHANGES.md CHANGED
@@ -1,7 +1,21 @@
1
+ # 2.1.3
1
2
 
3
+ * Require `trailblazer-developer` 0.1 line which brings tracing performance increase by
4
+ factor 4-10.
5
+ * Introduce `Operation.left` as an alias for `#fail`.
6
+ * Better debugging API for the upcoming web debugger.
2
7
 
3
- # 2.1
8
+ # 2.1.2
9
+
10
+ * Use `trailblazer-activity-dsl-linear` >= 1.1.0.
11
+
12
+ # 2.1.1
13
+
14
+ * Use `trailblazer-activity-dsl-linear` >= 1.0.0.
15
+
16
+ # 2.1.0
4
17
 
18
+ * Remove `declarative` dependency.
5
19
  * Macros now always have to provide an `:id`. This was a bit fuzzy in 2.0.
6
20
 
7
21
  * Nested
@@ -23,27 +37,9 @@
23
37
 
24
38
  Always write to `options`.
25
39
 
26
- * self[] removed
27
40
  * Fixed `Guard` where procs could receive one argument, only. Guards follow the step interface: `Policy::Guard( ->(options, **) { .. } )
28
41
  * Removed `Operation::Callback` which was a poor idea and luckily no one was using it.
29
42
 
30
- TODO:
31
- document Task API and define step API
32
- deprecate step->(options) ?
33
- injectable, per-operation step arguments strategy?
34
-
35
- # 2.1.2
36
-
37
- * Use `trailblazer-activity-dsl-linear` >= 1.1.0.
38
-
39
- # 2.1.1
40
-
41
- * Use `trailblazer-activity-dsl-linear` >= 1.0.0.
42
-
43
- # 2.1.0
44
-
45
- * Remove `declarative` dependency.
46
-
47
43
  # 2.1.0.rc13
48
44
 
49
45
  * Use newest `macro` and `macro-context`. They use symbols keys now everywhere.
data/README.md CHANGED
@@ -1,203 +1,109 @@
1
1
  # Trailblazer
2
2
 
3
- _Trailblazer provides new high-level abstractions for Ruby frameworks. It gently enforces encapsulation, an intuitive code structure and approaches the modeling of complex business workflows with a functional mind-set._
3
+ _Battle-tested Ruby framework to help structuring your business logic._
4
4
 
5
- [![Zulip chat](https://img.shields.io/badge/zulip-join_chat-brightgreen.svg)](https://trailblazer.zulipchat.com)
6
- [![TRB Newsletter](https://img.shields.io/badge/TRB-newsletter-lightgrey.svg)](http://trailblazer.to/newsletter/)
7
5
  [![Gem Version](https://badge.fury.io/rb/trailblazer.svg)](http://badge.fury.io/rb/trailblazer)
8
- [![Open Source Helpers](https://www.codetriage.com/trailblazer/trailblazer/badges/users.svg)](https://www.codetriage.com/trailblazer/trailblazer)
9
6
 
10
- ## Documentation
11
-
12
- * **The current version is Trailblazer 2.1.** We do have [comprehensive API documenation](https://trailblazer.to/2.1/docs/trailblazer.html) ready for you. If you're new to TRB start with our [LEARN page](https://trailblazer.to/2.1/learn.html).
13
- * A migration guide from 2.0 can be found [on our website](https://trailblazer.to/2.1/docs/trailblazer.html#trailblazer-2-1-migration).
14
- * The [1.x documentation is here](http://trailblazer.to/2.0/gems/operation/1.1/index.html).
15
-
16
- Make sure to check out the new beginner's guide to learning Trailblazer. The [brand-new book](https://leanpub.com/buildalib) discusses all aspects in a step-wise approach you need to understand Trailblazer's mechanics and design ideas.
17
-
18
- <a href="https://leanpub.com/buildalib"><img src="https://trailblazer.to/images/2.1/buildalib-cover.png"></a>
19
-
20
- ## Screencasts
21
-
22
- Watch our series of screencasts [**TRAILBLAZER TALES**](https://www.youtube.com/channel/UCi2P0tFMtjMUsWLYAD1Ezsw) if you prefer learning from videos!
23
-
24
- <a href="https://www.youtube.com/embed/9elpobV4HSw"><img src="https://trailblazer.to/images/2.1/01-operation-basics.png"></a>
25
-
26
- ## Trailblazer In A Nutshell
27
-
28
- 1. All business logic is encapsulated in [operations](#operation) (service objects).
29
- 3. [Controllers](#controllers) instantly delegate to an operation. No business code in controllers, only HTTP-specific logic.
30
- 4. [Models](#models) are persistence-only and solely define associations and scopes. No business code is to be found here. No validations, no callbacks.
31
- 5. The presentation layer offers optional [view models](#views) (Cells) and [representers](#representers) for document APIs.
32
- 6. More complex business flows and life-cycles are modeled using workflows.
33
-
34
- Want code? Jump [right here](#controllers)!
35
-
36
- ## Mission
37
-
38
- While _Trailblazer_ offers you abstraction layers for all aspects of Ruby On Rails, it does _not_ missionize you. Wherever you want, you may fall back to the "Rails Way" with fat models, monolithic controllers, global helpers, etc. This is not a bad thing, but allows you to step-wise introduce Trailblazer's encapsulation in your app without having to rewrite it.
39
-
40
- Trailblazer is all about structure. It helps re-organize existing code into smaller components where different concerns are handled in separated classes.
7
+ ## What's Trailblazer?
41
8
 
42
- Again, you can pick which layers you want. Trailblazer doesn't impose technical implementations, it offers mature solutions for recurring problems in all types of Rails applications.
9
+ Trailblazer introduces new abstraction layers into Ruby applications to help you structure your business logic.
43
10
 
44
- Trailblazer is no "complex web of objects and indirection". It solves many problems that have been around for years with a cleanly layered architecture. Only use what you like. And that's the bottom line.
11
+ It ships with our canonical "service object" implementation called *operation*, many conventions, gems for testing, Rails support, optional form objects and much more.
45
12
 
46
- ## Concepts over Technology
13
+ ## Should I use Trailblazer?
47
14
 
48
- Trailblazer offers you a new, more intuitive file layout in applications.
15
+ Give us a chance if you say "yes" to this!
49
16
 
50
- ```
51
- app
52
- ├── concepts
53
- │ ├── song
54
- │ │ ├── operation
55
- │ │ │ ├── create.rb
56
- │ │ │ ├── update.rb
57
- │ │ ├── contract
58
- │ │ │ ├── create.rb
59
- │ │ │ ├── update.rb
60
- │ │ ├── cell
61
- │ │ │ ├── show.rb
62
- │ │ │ ├── index.rb
63
- │ │ ├── view
64
- │ │ │ ├── show.haml
65
- │ │ │ ├── index.rb
66
- │ │ │ ├── song.css.sass
67
- ```
68
-
69
- Instead of grouping by technology, classes and views are structured by *concept*, and then by technology. A concept can relate to a model, or can be a completely abstract concern such as `invoicing`.
70
-
71
- Within a concept, you can have any level of nesting. For example, `invoicing/pdf/` could be one.
72
-
73
-
74
- ## Architecture
75
-
76
- Trailblazer extends the conventional MVC stack in Rails. Keep in mind that adding layers doesn't necessarily mean adding more code and complexity.
77
-
78
- The opposite is the case: Controller, view and model become lean endpoints for HTTP, rendering and persistence. Redundant code gets eliminated by putting very little application code into the right layer.
17
+ * You hate messy controller code but don't know where to put it?
18
+ * Moving business code into the "fat model" gives you nightmares?
19
+ * "Service objects" are great?
20
+ * Anyhow, you're tired of 12 different "service object" implementations throughout your app?
21
+ * You keep asking for additional layers such as forms, policies, decorators?
79
22
 
80
- ![The Trailblazer stack.](https://raw.github.com/apotonick/trailblazer/master/doc/operation-2017.png)
23
+ Yes? Then we got a well-seasoned framework for you: [Trailblazer](https://trailblazer.to/2.1).
81
24
 
82
- ## Routing
25
+ Here are the main concepts.
83
26
 
84
- Trailblazer uses Rails routing to map URLs to controllers, because it works.
85
-
86
- ```ruby
87
- Rails.application.routes.draw do
88
- resources :songs
89
- end
90
- ```
91
-
92
- ## Controllers
93
-
94
- Controllers are lean endpoints for HTTP. They do not contain any business logic. Actions immediately dispatch to an operation.
27
+ ## Operation
95
28
 
96
- ```ruby
97
- class SongsController < ApplicationController
98
- def create
99
- run Song::Create # Song::Create is an operation class.
100
- end
101
- end
102
- ```
29
+ The operation encapsulates business logic and is the heart of the Trailblazer architecture.
103
30
 
104
- The `#run` method invokes the operation. It allows you to run a conditional block of logic if the operation was successful.
31
+ An operation is not just a monolithic replacement for your business code. It's a simple orchestrator between the form objects, models, your business code and all other layers needed to get the job done.
105
32
 
106
33
  ```ruby
107
- class SongsController < ApplicationController
108
- def create
109
- run Song::Create do |op|
110
- return redirect_to(song_path op.model) # success!
34
+ # app/concepts/song/operation/create.rb
35
+ module Song::Operation
36
+ class Create < Trailblazer::Operation
37
+ step :create_model
38
+ step :validate
39
+ left :handle_errors
40
+ step :notify
41
+
42
+ def create_model(ctx, **)
43
+ # do whatever you feel like.
44
+ ctx[:model] = Song.new
111
45
  end
112
46
 
113
- render :new # invalid. re-render form.
47
+ def validate(ctx, params:, **)
48
+ # ..
49
+ end
50
+ # ...
114
51
  end
115
52
  end
116
53
  ```
117
54
 
118
- Again, the controller only dispatchs to the operation and handles successful/invalid processing on the HTTP level. For instance by redirecting, setting flash messages, or signing in a user.
55
+ The `step` DSL takes away the pain of flow control and error handling. You focus on _what_ happens: creating models, validating data, sending out notifications.
119
56
 
120
- [Learn more.](http://trailblazer.to/gems/operation/controller.html)
121
-
122
- ## Operation
57
+ ### Control flow
123
58
 
124
- Operations encapsulate business logic and are the heart of a Trailblazer architecture.
59
+ The operation takes care _when_ things happen: the flow control. Internally, this works as depicted in this beautiful diagram.
125
60
 
126
- The bare bones operation without any Trailblazery is implemented in [the `trailblazer-operation` gem](https://github.com/trailblazer/trailblazer-operation) and can be used without our stack.
61
+ ![Flow diagram of a typical operation.](https://github.com/trailblazer/trailblazer/blob/master/doc/song_operation_create.png?raw=true)
127
62
 
128
- Operations don't know about HTTP or the environment. You could use an operation in Rails, Hanami, or Roda, it wouldn't know.
129
-
130
- An operation is not just a monolithic replacement for your business code. It's a simple orchestrator between the form objects, models, your business code and all other layers needed to get the job done.
63
+ The best part: the only way to invoke this operation is `Operation.call`. The single entry-point saves programmers from shenanigans with instances and internal state - it's proven to be an almost bullet-proof concept in the past 10 years.
131
64
 
132
65
  ```ruby
133
- class Song::Create < Trailblazer::Operation
134
- step :model
135
- step :validate
136
-
137
- def model(ctx, **)
138
- # do whatever you feel like.
139
- ctx[:model] = Song.new
140
- end
141
-
142
- def validate(ctx, params:, **)
143
- # ..
144
- end
145
- end
146
- ```
147
-
148
- Operations define the flow of their logic using the DSL and implement the particular steps with pure Ruby.
66
+ result = Song::Operation::Create.(params: {title: "Hear Us Out", band: "Rancid"})
149
67
 
150
- You cannot instantiate them per design. The only way to invoke them is `call`.
151
-
152
- ```ruby
153
- Song::Create.(params: {whatever: "goes", in: "here"})
68
+ result.success? #=> true
69
+ result[:model] #=> #<Song title="Hear Us Out" ...>
154
70
  ```
155
71
 
156
- Their high degree of encapsulation makes them a [replacement for test factories](#tests), too.
72
+ Data, computed values, statuses or models from within the operation run are exposed through the `result` object.
157
73
 
158
- [Learn more.](https://2019.trailblazer.to/2.1/docs/operation.html#operation-overview)
74
+ Operations can be nested, use composition and inheritance patterns, provide [variable mapping](https://trailblazer.to/2.1/docs/activity#activity-variable-mapping) around each step, support dependency injection, and save you from reinventing the wheel - over and over, again.
159
75
 
160
- ## Models
76
+ Leveraging those functional mechanics, operations encourage a high degree of encapsulation while giving you all the conventions and tools for free (except for a bit of a learning curve).
161
77
 
162
- Models for persistence can be implemented using any ORM you fancy, for instance [ActiveRecord](https://github.com/rails/rails/tree/master/activerecord#active-record--object-relational-mapping-in-rails) or [Datamapper](http://datamapper.org/).
78
+ ### Tracing
163
79
 
164
- In Trailblazer, models are completely empty. They solely contain associations and finders. No business logic is allowed in models.
80
+ In the past years, we learnt from some old mistakes and improved developer experience. As a starter, check out our built-in tracing!
165
81
 
166
82
  ```ruby
167
- class Song < ActiveRecord::Base
168
- belongs_to :thing
169
-
170
- scope :latest, lambda { all.limit(9).order("id DESC") }
171
- end
83
+ result = Song::Operation::Create.wtf?(params: {title: "", band: "Rancid"})
172
84
  ```
173
85
 
174
- Only operations and views/cells can access models directly.
86
+ ![Tracing the internal flow of an operation.](https://github.com/trailblazer/trailblazer/blob/master/doc/song_operation_create_trace.png?raw=true)
175
87
 
176
- ## Tests
88
+ Within a second you know which step failed - a thing that might seem trivial, but when things grow and a deeply nested step in an iteration fails, you will start loving `#wtf?`! It has saved us days of debugging.
177
89
 
178
- In Trailblazer, you only have operation unit tests and integration smoke tests to test the operation/controller wiring.
90
+ We even provide a [visual debugger](https://trailblazer.to/2.1/pro) to inspect traces on the webs.
179
91
 
180
- Operations completely replace the need for leaky factories.
92
+ ## There's a lot more
181
93
 
182
- ```ruby
183
- describe Song::Update do
184
- let(:song) { Song::Create.(song: {body: "[That](http://trailblazer.to)!"}) }
185
- end
186
- ```
94
+ All our abstraction layers such as [operations](https://trailblazer.to/2.1/docs/operation), [form objects](https://trailblazer.to/2.1/docs/reform.html), [view components](https://trailblazer.to/2.1/docs/cells.html), [test gems](https://trailblazer.to/2.1/docs/test) and much more are used in [hundreds of OSS projects](https://github.com/trailblazer/trailblazer/network/dependents) and commercial applications in the Ruby world.
187
95
 
188
- ## Workflow
189
- Operations are a great way to clean up controllers and models. However, Trailblazer goes further and provides an approach to model entire life-cycles of business objects, such as "a song" or "the root user" using workflow ([`pro feature`](https://2019.trailblazer.to/2.1/docs/pro.html#pro-1)). 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.
96
+ We provide a [visual debugger](https://pro.trailblazer.to), a [BPMN editor](https://trailblazer.to/2.1/docs/workflow) for long-running business processes, [thorough documentation](https://trailblazer.to/2.1/docs/trailblazer.html) and a growing list of onboarding videos ([**TRAILBLAZER TALES**](https://www.youtube.com/channel/UCi2P0tFMtjMUsWLYAD1Ezsw)).
190
97
 
191
- <img src="http://2019.trailblazer.to/2.1/dist/img/flow.png">
98
+ Trailblazer is both used for refactoring legacy apps (we support Ruby 2.5+) and helps big teams organizing, structuring and debugging modern, growing (Rails) applications.
192
99
 
193
- ## Installation
100
+ ## Documentation
194
101
 
195
- The obvious needs to be in your `Gemfile`.
102
+ * **The current version is Trailblazer 2.1.** We do have comprehensive [API documenation](https://trailblazer.to/2.1/docs/trailblazer.html) ready for you. If you're new to TRB start with our [LEARN page](https://trailblazer.to/2.1/learn.html).
103
+ * A migration guide from 2.0 can be found [on our website](https://trailblazer.to/2.1/docs/trailblazer.html#trailblazer-2-1-migration).
104
+ * The [1.x documentation is here](http://trailblazer.to/2.0/gems/operation/1.1/index.html).
196
105
 
197
- ```ruby
198
- gem "trailblazer"
199
- gem "trailblazer-rails" # if you are in rails.
200
- gem "trailblazer-cells"
201
- ```
106
+ Make sure to check out the new beginner's guide to learning Trailblazer. The [new book](https://leanpub.com/buildalib) discusses all aspects in a step-wise approach you need to understand Trailblazer's mechanics and design ideas.
107
+
108
+ ![The new begginer's guide.](https://github.com/trailblazer/trailblazer/blob/master/doc/s_hero.png?raw=true)
202
109
 
203
- Cells is _not_ required per default! Add it if you use it, which is highly recommended.
@@ -1,5 +1,5 @@
1
1
  module Trailblazer
2
2
  module Version
3
- VERSION = "2.1.2"
3
+ VERSION = "2.1.3"
4
4
  end
5
5
  end
data/test/test_helper.rb CHANGED
@@ -1,38 +1,3 @@
1
- require "pp"
2
- require "delegate"
3
- require "trailblazer"
4
1
  require "minitest/autorun"
5
2
 
6
- # TODO: convert tests to non-rails.
7
- require "reform"
8
- require "reform/form/active_model/validations"
9
- Reform::Form.class_eval do
10
- include Reform::Form::ActiveModel::Validations
11
- end
12
- # require "trailblazer/deprecation/context.rb"
13
-
14
- module Mock
15
- class Result
16
- def initialize(bool); @bool = bool end
17
- def success?; @bool end
18
- def errors; ["hihi"] end
19
- end
20
- end
21
-
22
- module Test
23
- module ReturnCall
24
- def self.included(includer)
25
- includer._insert :_insert, ReturnResult, {replace: Trailblazer::Operation::Result::Build}, ReturnResult, ""
26
- end
27
- end
28
- ReturnResult = ->(last, input, options) { input }
29
- end
30
-
31
- Minitest::Spec::Operation = Trailblazer::Operation
32
-
33
- Memo = Struct.new(:id, :body) do
34
- def self.find(id)
35
- return new(id, "Yo!") if id
36
- nil
37
- end
38
- end
3
+ require "trailblazer"
@@ -0,0 +1,99 @@
1
+ require "test_helper"
2
+ require "reform/form/dry"
3
+ require "trailblazer/macro"
4
+ require "trailblazer/macro/contract"
5
+
6
+ class TrailblazerTest < Minitest::Spec
7
+ Song = Struct.new(:title)
8
+
9
+
10
+ class Create < Trailblazer::Operation
11
+ class Form < Reform::Form
12
+ include Reform::Form::Dry
13
+ property :title
14
+
15
+ validation do
16
+ params do
17
+ required(:title).filled(min_size?: 2)
18
+ end
19
+ end
20
+ end
21
+
22
+ step Model(Song, :new)
23
+ step Contract::Build(constant: Form)
24
+ step Contract::Validate()
25
+ step Contract::Persist(method: :sync)
26
+ end
27
+
28
+ it do
29
+ result = nil
30
+
31
+ output, _ = capture_io do
32
+ result = Create.wtf?(params: {title: "Dead and Gone"})
33
+ end
34
+
35
+ assert_equal output, %(TrailblazerTest::Create
36
+ |-- \e[32mStart.default\e[0m
37
+ |-- \e[32mmodel.build\e[0m
38
+ |-- \e[32mcontract.build\e[0m
39
+ |-- contract.default.validate
40
+ | |-- \e[32mStart.default\e[0m
41
+ | |-- \e[32mcontract.default.params_extract\e[0m
42
+ | |-- \e[32mcontract.default.call\e[0m
43
+ | `-- End.success
44
+ |-- \e[32mpersist.save\e[0m
45
+ `-- End.success
46
+ )
47
+ assert_equal result.success?, true
48
+ assert_equal result[:model].to_h, {:title=>"Dead and Gone"}
49
+
50
+ # invalid!
51
+ result = Create.wtf?(params: {})
52
+ output, _ = capture_io do
53
+ result = Create.wtf?(params: {})
54
+ end
55
+
56
+ assert_equal output, %(TrailblazerTest::Create
57
+ |-- \e[32mStart.default\e[0m
58
+ |-- \e[32mmodel.build\e[0m
59
+ |-- \e[32mcontract.build\e[0m
60
+ |-- contract.default.validate
61
+ | |-- \e[32mStart.default\e[0m
62
+ | |-- \e[32mcontract.default.params_extract\e[0m
63
+ | |-- \e[33mcontract.default.call\e[0m
64
+ | `-- End.failure
65
+ `-- End.failure
66
+ )
67
+
68
+ assert_equal result.success?, false
69
+ assert_equal result[:mode].to_h, {}
70
+ end
71
+ end
72
+
73
+ # Song = Struct.new(:title)
74
+ # class Song
75
+ # module Operation
76
+ # class Create < Trailblazer::Operation
77
+ # step :create_model
78
+ # step :validate
79
+ # fail :handle_errors
80
+ # step :notify
81
+
82
+ # def create_model(ctx, **)
83
+ # # do whatever you feel like.
84
+ # ctx[:model] = Song.new
85
+ # end
86
+
87
+ # def validate(ctx, params:, **)
88
+ # # ..
89
+ # end
90
+
91
+ # def handle_errors(ctx, **)
92
+ # true
93
+ # end
94
+ # end
95
+
96
+ # end
97
+ # end
98
+
99
+ # Song::Operation::Create.wtf?(params: {})
data/trailblazer.gemspec CHANGED
@@ -7,9 +7,8 @@ Gem::Specification.new do |spec|
7
7
  spec.version = Trailblazer::Version::VERSION
8
8
  spec.authors = ["Nick Sutterer"]
9
9
  spec.email = ["apotonick@gmail.com"]
10
- spec.description = %q{A high-level architecture introducing new abstractions such as operations and control flow, form objects and policies.}
11
- spec.summary = %q{A high-level architecture for Ruby and Rails.}
12
- spec.homepage = "http://trailblazer.to"
10
+ spec.summary = %q{Ruby framework for structuring your business logic.}
11
+ spec.homepage = "https://trailblazer.to"
13
12
  spec.license = "LGPL-3.0"
14
13
  spec.metadata = {
15
14
  "bug_tracker_uri" => "https://github.com/trailblazer/trailblazer/issues",
@@ -27,14 +26,17 @@ Gem::Specification.new do |spec|
27
26
  spec.test_files = `git ls-files -z test`.split("\x0")
28
27
  spec.require_paths = ["lib"]
29
28
 
30
- spec.add_dependency "trailblazer-macro", ">= 2.1.12", "< 2.2.0"
29
+ spec.add_dependency "trailblazer-macro", ">= 2.1.15", "< 2.2.0"
30
+ spec.add_dependency "trailblazer-developer", ">= 0.1.0", "< 0.2.0"
31
31
  spec.add_dependency "trailblazer-macro-contract", ">= 2.1.4", "< 2.2.0"
32
32
  spec.add_dependency "trailblazer-operation", ">= 0.9.0", "< 1.0.0"
33
+ spec.add_dependency "trailblazer-activity-dsl-linear", ">= 1.2.3", "< 1.3.0" # this can be removed at some point.
33
34
 
34
35
  spec.add_development_dependency "bundler"
35
36
  spec.add_development_dependency "rake"
36
37
  spec.add_development_dependency "minitest"
37
38
  spec.add_development_dependency "minitest-line"
39
+ spec.add_development_dependency "dry-validation"
38
40
 
39
- spec.required_ruby_version = '>= 2.1.0'
41
+ spec.required_ruby_version = '>= 2.5.0'
40
42
  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.1.2
4
+ version: 2.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nick Sutterer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-12-14 00:00:00.000000000 Z
11
+ date: 2023-06-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: trailblazer-macro
@@ -16,7 +16,7 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 2.1.12
19
+ version: 2.1.15
20
20
  - - "<"
21
21
  - !ruby/object:Gem::Version
22
22
  version: 2.2.0
@@ -26,10 +26,30 @@ dependencies:
26
26
  requirements:
27
27
  - - ">="
28
28
  - !ruby/object:Gem::Version
29
- version: 2.1.12
29
+ version: 2.1.15
30
30
  - - "<"
31
31
  - !ruby/object:Gem::Version
32
32
  version: 2.2.0
33
+ - !ruby/object:Gem::Dependency
34
+ name: trailblazer-developer
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: 0.1.0
40
+ - - "<"
41
+ - !ruby/object:Gem::Version
42
+ version: 0.2.0
43
+ type: :runtime
44
+ prerelease: false
45
+ version_requirements: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - ">="
48
+ - !ruby/object:Gem::Version
49
+ version: 0.1.0
50
+ - - "<"
51
+ - !ruby/object:Gem::Version
52
+ version: 0.2.0
33
53
  - !ruby/object:Gem::Dependency
34
54
  name: trailblazer-macro-contract
35
55
  requirement: !ruby/object:Gem::Requirement
@@ -70,6 +90,26 @@ dependencies:
70
90
  - - "<"
71
91
  - !ruby/object:Gem::Version
72
92
  version: 1.0.0
93
+ - !ruby/object:Gem::Dependency
94
+ name: trailblazer-activity-dsl-linear
95
+ requirement: !ruby/object:Gem::Requirement
96
+ requirements:
97
+ - - ">="
98
+ - !ruby/object:Gem::Version
99
+ version: 1.2.3
100
+ - - "<"
101
+ - !ruby/object:Gem::Version
102
+ version: 1.3.0
103
+ type: :runtime
104
+ prerelease: false
105
+ version_requirements: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - ">="
108
+ - !ruby/object:Gem::Version
109
+ version: 1.2.3
110
+ - - "<"
111
+ - !ruby/object:Gem::Version
112
+ version: 1.3.0
73
113
  - !ruby/object:Gem::Dependency
74
114
  name: bundler
75
115
  requirement: !ruby/object:Gem::Requirement
@@ -126,8 +166,21 @@ dependencies:
126
166
  - - ">="
127
167
  - !ruby/object:Gem::Version
128
168
  version: '0'
129
- description: A high-level architecture introducing new abstractions such as operations
130
- and control flow, form objects and policies.
169
+ - !ruby/object:Gem::Dependency
170
+ name: dry-validation
171
+ requirement: !ruby/object:Gem::Requirement
172
+ requirements:
173
+ - - ">="
174
+ - !ruby/object:Gem::Version
175
+ version: '0'
176
+ type: :development
177
+ prerelease: false
178
+ version_requirements: !ruby/object:Gem::Requirement
179
+ requirements:
180
+ - - ">="
181
+ - !ruby/object:Gem::Version
182
+ version: '0'
183
+ description:
131
184
  email:
132
185
  - apotonick@gmail.com
133
186
  executables: []
@@ -136,9 +189,6 @@ extra_rdoc_files: []
136
189
  files:
137
190
  - ".github/dependabot.yml"
138
191
  - ".github/workflows/ci.yml"
139
- - ".github/workflows/ci_jruby.yml"
140
- - ".github/workflows/ci_legacy.yml"
141
- - ".github/workflows/ci_truffleruby.yml"
142
192
  - ".gitignore"
143
193
  - CHANGES.md
144
194
  - COMM-LICENSE
@@ -151,8 +201,9 @@ files:
151
201
  - lib/trailblazer.rb
152
202
  - lib/trailblazer/version.rb
153
203
  - test/test_helper.rb
204
+ - test/trailblazer_test.rb
154
205
  - trailblazer.gemspec
155
- homepage: http://trailblazer.to
206
+ homepage: https://trailblazer.to
156
207
  licenses:
157
208
  - LGPL-3.0
158
209
  metadata:
@@ -171,7 +222,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
171
222
  requirements:
172
223
  - - ">="
173
224
  - !ruby/object:Gem::Version
174
- version: 2.1.0
225
+ version: 2.5.0
175
226
  required_rubygems_version: !ruby/object:Gem::Requirement
176
227
  requirements:
177
228
  - - ">="
@@ -181,6 +232,7 @@ requirements: []
181
232
  rubygems_version: 3.2.3
182
233
  signing_key:
183
234
  specification_version: 4
184
- summary: A high-level architecture for Ruby and Rails.
235
+ summary: Ruby framework for structuring your business logic.
185
236
  test_files:
186
237
  - test/test_helper.rb
238
+ - test/trailblazer_test.rb
@@ -1,19 +0,0 @@
1
- ## This file is managed by Terraform.
2
- ## Do not modify this file directly, as it may be overwritten.
3
- ## Please open an issue instead.
4
- name: CI JRuby
5
- on: [push, pull_request]
6
- jobs:
7
- test:
8
- strategy:
9
- fail-fast: false
10
- matrix:
11
- ruby: [jruby, jruby-head]
12
- runs-on: ubuntu-latest
13
- steps:
14
- - uses: actions/checkout@v3
15
- - uses: ruby/setup-ruby@v1
16
- with:
17
- ruby-version: ${{ matrix.ruby }}
18
- bundler-cache: true
19
- - run: bundle exec rake
@@ -1,19 +0,0 @@
1
- ## This file is managed by Terraform.
2
- ## Do not modify this file directly, as it may be overwritten.
3
- ## Please open an issue instead.
4
- name: CI with EOL ruby versions
5
- on: [push, pull_request]
6
- jobs:
7
- test:
8
- strategy:
9
- fail-fast: false
10
- matrix:
11
- ruby: [2.5, 2.6]
12
- runs-on: ubuntu-latest
13
- steps:
14
- - uses: actions/checkout@v3
15
- - uses: ruby/setup-ruby@v1
16
- with:
17
- ruby-version: ${{ matrix.ruby }}
18
- bundler-cache: true
19
- - run: bundle exec rake
@@ -1,19 +0,0 @@
1
- ## This file is managed by Terraform.
2
- ## Do not modify this file directly, as it may be overwritten.
3
- ## Please open an issue instead.
4
- name: CI TruffleRuby
5
- on: [push, pull_request]
6
- jobs:
7
- test:
8
- strategy:
9
- fail-fast: false
10
- matrix:
11
- ruby: [truffleruby, truffleruby-head]
12
- runs-on: ubuntu-latest
13
- steps:
14
- - uses: actions/checkout@v3
15
- - uses: ruby/setup-ruby@v1
16
- with:
17
- ruby-version: ${{ matrix.ruby }}
18
- bundler-cache: true
19
- - run: bundle exec rake