trailblazer 1.1.2 → 2.0.0.beta1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +10 -7
- data/CHANGES.md +108 -0
- data/COMM-LICENSE +91 -0
- data/Gemfile +18 -4
- data/LICENSE.txt +7 -20
- data/README.md +55 -15
- data/Rakefile +21 -2
- data/draft-1.2.rb +7 -0
- data/lib/trailblazer.rb +17 -4
- data/lib/trailblazer/dsl.rb +47 -0
- data/lib/trailblazer/operation/auto_inject.rb +47 -0
- data/lib/trailblazer/operation/builder.rb +18 -18
- data/lib/trailblazer/operation/callback.rb +31 -38
- data/lib/trailblazer/operation/contract.rb +46 -0
- data/lib/trailblazer/operation/controller.rb +45 -27
- data/lib/trailblazer/operation/guard.rb +24 -0
- data/lib/trailblazer/operation/model.rb +41 -33
- data/lib/trailblazer/operation/nested.rb +43 -0
- data/lib/trailblazer/operation/params.rb +13 -0
- data/lib/trailblazer/operation/persist.rb +13 -0
- data/lib/trailblazer/operation/policy.rb +26 -72
- data/lib/trailblazer/operation/present.rb +19 -0
- data/lib/trailblazer/operation/procedural/contract.rb +15 -0
- data/lib/trailblazer/operation/procedural/validate.rb +22 -0
- data/lib/trailblazer/operation/pundit.rb +42 -0
- data/lib/trailblazer/operation/representer.rb +25 -92
- data/lib/trailblazer/operation/rescue.rb +23 -0
- data/lib/trailblazer/operation/resolver.rb +18 -24
- data/lib/trailblazer/operation/validate.rb +50 -0
- data/lib/trailblazer/operation/wrap.rb +37 -0
- data/lib/trailblazer/version.rb +1 -1
- data/test/{operation/controller_test.rb → controller_test.rb} +8 -4
- data/test/docs/auto_inject_test.rb +30 -0
- data/test/docs/contract_test.rb +429 -0
- data/test/docs/dry_test.rb +31 -0
- data/test/docs/guard_test.rb +143 -0
- data/test/docs/nested_test.rb +117 -0
- data/test/docs/policy_test.rb +2 -0
- data/test/docs/pundit_test.rb +109 -0
- data/test/docs/representer_test.rb +268 -0
- data/test/docs/rescue_test.rb +153 -0
- data/test/docs/wrap_test.rb +174 -0
- data/test/gemfiles/Gemfile.ruby-1.9 +3 -0
- data/test/gemfiles/Gemfile.ruby-2.0 +12 -0
- data/test/gemfiles/Gemfile.ruby-2.3 +12 -0
- data/test/module_test.rb +22 -15
- data/test/operation/builder_test.rb +66 -18
- data/test/operation/callback_test.rb +70 -0
- data/test/operation/contract_test.rb +385 -15
- data/test/operation/dsl/callback_test.rb +18 -30
- data/test/operation/dsl/contract_test.rb +209 -19
- data/test/operation/dsl/representer_test.rb +42 -15
- data/test/operation/guard_test.rb +1 -147
- data/test/operation/model_test.rb +105 -0
- data/test/operation/params_test.rb +36 -0
- data/test/operation/persist_test.rb +44 -0
- data/test/operation/pipedream_test.rb +59 -0
- data/test/operation/pipetree_test.rb +104 -0
- data/test/operation/present_test.rb +24 -0
- data/test/operation/pundit_test.rb +104 -0
- data/test/{representer_test.rb → operation/representer_test.rb} +58 -42
- data/test/operation/resolver_test.rb +34 -70
- data/test/operation_test.rb +57 -189
- data/test/test_helper.rb +23 -3
- data/trailblazer.gemspec +8 -7
- metadata +91 -59
- data/gemfiles/Gemfile.rails.lock +0 -130
- data/gemfiles/Gemfile.reform-2.0 +0 -6
- data/gemfiles/Gemfile.reform-2.1 +0 -7
- data/lib/trailblazer/autoloading.rb +0 -15
- data/lib/trailblazer/endpoint.rb +0 -31
- data/lib/trailblazer/operation.rb +0 -175
- data/lib/trailblazer/operation/collection.rb +0 -6
- data/lib/trailblazer/operation/dispatch.rb +0 -3
- data/lib/trailblazer/operation/model/dsl.rb +0 -29
- data/lib/trailblazer/operation/model/external.rb +0 -34
- data/lib/trailblazer/operation/policy/guard.rb +0 -35
- data/lib/trailblazer/operation/uploaded_file.rb +0 -77
- data/test/callback_test.rb +0 -104
- data/test/collection_test.rb +0 -57
- data/test/model_test.rb +0 -148
- data/test/operation/external_model_test.rb +0 -71
- data/test/operation/policy_test.rb +0 -97
- data/test/operation/reject_test.rb +0 -34
- data/test/rollback_test.rb +0 -47
data/test/operation_test.rb
CHANGED
@@ -7,73 +7,18 @@ module Inspect
|
|
7
7
|
alias_method :to_s, :inspect
|
8
8
|
end
|
9
9
|
|
10
|
-
class
|
11
|
-
class OperationSetupParam < Trailblazer::Operation
|
12
|
-
def process(params)
|
13
|
-
@model = params
|
14
|
-
end
|
15
|
-
|
16
|
-
def setup_params!(params)
|
17
|
-
params.merge!(garrett: "Rocks!")
|
18
|
-
end
|
19
|
-
|
20
|
-
include Inspect
|
21
|
-
end
|
22
|
-
|
23
|
-
# allows you changing params in #setup_params!.
|
24
|
-
it { OperationSetupParam.run({valid: true}).to_s.must_equal "[true, <OperationSetupParam @model={:valid=>true, :garrett=>\"Rocks!\"}>]" }
|
25
|
-
end
|
26
|
-
|
27
|
-
class OperationParamsTest < MiniTest::Spec
|
28
|
-
class Operation < Trailblazer::Operation
|
29
|
-
def process(params)
|
30
|
-
@model = "#{params} and #{@params==params}"
|
31
|
-
end
|
32
|
-
|
33
|
-
def params!(params)
|
34
|
-
{ params: params }
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
# allows you returning new params in #params!.
|
39
|
-
it { Operation.({valid: true}).model.to_s.must_equal "{:params=>{:valid=>true}} and true" }
|
40
|
-
end
|
41
|
-
|
42
|
-
# Operation#model.
|
43
|
-
class OperationModelTest < MiniTest::Spec
|
44
|
-
class Operation < Trailblazer::Operation
|
45
|
-
def process(params)
|
46
|
-
end
|
47
|
-
|
48
|
-
def model!(params)
|
49
|
-
params
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
# #model.
|
54
|
-
it { Operation.(Object).model.must_equal Object }
|
55
|
-
end
|
56
|
-
|
57
|
-
# Operation#model=.
|
58
|
-
class OperationModelWriterTest < MiniTest::Spec
|
10
|
+
class OperationRunTest < MiniTest::Spec
|
59
11
|
class Operation < Trailblazer::Operation
|
60
|
-
def process(params)
|
61
|
-
self.model = "#{params}"
|
62
|
-
end
|
63
|
-
end
|
64
12
|
|
65
|
-
|
66
|
-
|
13
|
+
require "trailblazer/operation/contract"
|
14
|
+
include Contract::Explicit
|
67
15
|
|
68
|
-
class OperationRunTest < MiniTest::Spec
|
69
|
-
class Operation < Trailblazer::Operation
|
70
16
|
# allow providing your own contract.
|
71
|
-
self.
|
17
|
+
self["contract.default.class"] = class MyContract
|
72
18
|
def initialize(*)
|
73
19
|
end
|
74
|
-
def
|
75
|
-
|
76
|
-
false
|
20
|
+
def call(params)
|
21
|
+
Mock::Result.new(params)
|
77
22
|
end
|
78
23
|
|
79
24
|
def errors
|
@@ -84,192 +29,115 @@ class OperationRunTest < MiniTest::Spec
|
|
84
29
|
|
85
30
|
def process(params)
|
86
31
|
model = Object
|
87
|
-
validate(params, model)
|
32
|
+
validate(params, model: model)
|
88
33
|
end
|
89
34
|
|
90
35
|
include Inspect
|
91
36
|
end
|
92
37
|
|
93
|
-
# contract is inferred from self::contract_class.
|
94
|
-
# ::run returns result set when run without block.
|
95
|
-
it { Operation.run("not true").to_s.must_equal %{[false, <Operation @model=>]} }
|
96
|
-
it { Operation.run("yes, true").to_s.must_equal %{[true, <Operation @model=>]} }
|
97
|
-
|
98
|
-
# ::call raises exception when invalid.
|
99
|
-
it do
|
100
|
-
exception = assert_raises(Trailblazer::Operation::InvalidContract) { Operation.("not true") }
|
101
|
-
exception.message.must_equal "Op just calls #to_s on Errors!"
|
102
|
-
end
|
103
|
-
|
104
|
-
# return operation when ::call
|
105
|
-
it { Operation.("yes, true").to_s.must_equal %{<Operation @model=>} }
|
106
|
-
# #[] is alias for .()
|
107
|
-
it { Operation["yes, true"].to_s.must_equal %{<Operation @model=>} }
|
108
|
-
|
109
|
-
|
110
|
-
# ::run with block returns operation.
|
111
|
-
# valid executes block.
|
112
|
-
it "block" do
|
113
|
-
outcome = nil
|
114
|
-
res = Operation.run("yes, true") do
|
115
|
-
outcome = "true"
|
116
|
-
end
|
117
|
-
|
118
|
-
outcome.must_equal "true" # block was executed.
|
119
|
-
res.to_s.must_equal %{<Operation @model=>}
|
120
|
-
end
|
121
|
-
|
122
|
-
# invalid doesn't execute block.
|
123
|
-
it "block, invalid" do
|
124
|
-
outcome = nil
|
125
|
-
res = Operation.run("no, not true, false") do
|
126
|
-
outcome = "true"
|
127
|
-
end
|
128
|
-
|
129
|
-
outcome.must_equal nil # block was _not_ executed.
|
130
|
-
res.to_s.must_equal %{<Operation @model=>}
|
131
|
-
end
|
132
|
-
|
133
|
-
# block yields operation
|
134
|
-
it do
|
135
|
-
outcome = nil
|
136
|
-
res = Operation.run("yes, true") do |op|
|
137
|
-
outcome = op
|
138
|
-
end
|
139
|
-
|
140
|
-
outcome.to_s.must_equal %{<Operation @model=>} # block was executed.
|
141
|
-
res.to_s.must_equal %{<Operation @model=>}
|
142
|
-
end
|
143
|
-
|
144
|
-
# # Operation#contract returns @contract
|
145
|
-
it { Operation.("yes, true").contract.class.to_s.must_equal "OperationRunTest::Operation::Contract" }
|
146
|
-
|
147
|
-
|
148
38
|
|
39
|
+
describe "Raise" do
|
40
|
+
class Follow < Trailblazer::Operation
|
41
|
+
require "trailblazer/operation/raise"
|
42
|
+
require "trailblazer/operation/contract"
|
43
|
+
include Contract::Explicit
|
44
|
+
contract do
|
45
|
+
end
|
149
46
|
|
150
|
-
|
151
|
-
|
152
|
-
|
47
|
+
module Validate
|
48
|
+
def validate(is_valid)
|
49
|
+
is_valid
|
50
|
+
end
|
51
|
+
end
|
52
|
+
include Validate
|
53
|
+
include Contract::Raise
|
153
54
|
|
154
|
-
def
|
155
|
-
|
55
|
+
def process(params)
|
56
|
+
validate(params[:is_valid])
|
156
57
|
end
|
157
58
|
end
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
it {
|
59
|
+
# #validate raises exception when invalid.
|
60
|
+
it do
|
61
|
+
exception = assert_raises(Trailblazer::Operation::InvalidContract) { Follow.(is_valid: false) }
|
62
|
+
# exception.message.must_equal "Op just calls #to_s on Errors!"
|
63
|
+
end
|
64
|
+
it { Follow.(is_valid:true).success?.must_equal true }
|
164
65
|
end
|
165
66
|
end
|
166
67
|
|
167
68
|
|
168
69
|
class OperationTest < MiniTest::Spec
|
169
|
-
# test #invalid!
|
170
|
-
class OperationWithoutValidateCall < Trailblazer::Operation
|
171
|
-
def process(params)
|
172
|
-
params || invalid!(params)
|
173
|
-
end
|
174
|
-
|
175
|
-
include Inspect
|
176
|
-
end
|
177
|
-
|
178
|
-
# ::run
|
179
|
-
it { OperationWithoutValidateCall.run(true).to_s.must_equal %{[true, <OperationWithoutValidateCall @model=>]} }
|
180
|
-
# invalid.
|
181
|
-
it { OperationWithoutValidateCall.run(false).to_s.must_equal %{[false, <OperationWithoutValidateCall @model=>]} }
|
182
|
-
|
183
|
-
|
184
70
|
# #validate yields contract when valid
|
185
71
|
class OperationWithValidateBlock < Trailblazer::Operation
|
186
|
-
|
72
|
+
require "trailblazer/operation/contract"
|
73
|
+
include Contract::Explicit
|
74
|
+
self["contract.default.class"] = class Contract
|
187
75
|
def initialize(*)
|
188
76
|
end
|
189
77
|
|
190
|
-
def
|
191
|
-
params
|
78
|
+
def call(params)
|
79
|
+
Mock::Result.new(params)
|
192
80
|
end
|
81
|
+
|
82
|
+
attr_reader :errors
|
193
83
|
self
|
194
84
|
end
|
195
85
|
|
196
86
|
def process(params)
|
197
|
-
validate(params, Object.new) do |c|
|
198
|
-
|
87
|
+
validate(params, model: Object.new) do |c|
|
88
|
+
self["secret_contract"] = c.class
|
199
89
|
end
|
200
90
|
end
|
201
|
-
|
202
|
-
attr_reader :secret_contract
|
203
91
|
end
|
204
92
|
|
205
|
-
it { OperationWithValidateBlock.
|
206
|
-
it { OperationWithValidateBlock.(true)
|
93
|
+
it { OperationWithValidateBlock.(false)["secret_contract"].must_equal nil }
|
94
|
+
it { OperationWithValidateBlock.(true)["secret_contract"].to_s.must_equal "Mock::Result" }
|
207
95
|
|
208
96
|
|
209
97
|
# test validate wit if/else
|
210
98
|
class OperationWithValidateAndIf < Trailblazer::Operation
|
211
|
-
|
99
|
+
require "trailblazer/operation/contract"
|
100
|
+
include Contract::Explicit
|
101
|
+
self["contract.default.class"] = class Contract
|
212
102
|
def initialize(*)
|
213
103
|
end
|
214
104
|
|
215
|
-
def
|
216
|
-
params
|
105
|
+
def call(params)
|
106
|
+
Mock::Result.new(params)
|
217
107
|
end
|
108
|
+
attr_reader :errors
|
218
109
|
self
|
219
110
|
end
|
220
111
|
|
221
112
|
def process(params)
|
222
|
-
if validate(params, Object.new)
|
223
|
-
|
113
|
+
if validate(params, model: Object.new)
|
114
|
+
self["secret_contract"] = contract.class
|
224
115
|
else
|
225
|
-
|
116
|
+
self["secret_contract"] = "so wrong!"
|
226
117
|
end
|
227
118
|
end
|
228
|
-
|
229
|
-
attr_reader :secret_contract
|
230
|
-
end
|
231
|
-
|
232
|
-
it { OperationWithValidateAndIf.run(false).last.secret_contract.must_equal "so wrong!" }
|
233
|
-
it { OperationWithValidateAndIf.(true).secret_contract.must_equal OperationWithValidateAndIf::Contract }
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
# ::present only runs #setup! which runs #model!.
|
238
|
-
class ContractOnlyOperation < Trailblazer::Operation
|
239
|
-
self.contract_class = class Contract
|
240
|
-
def initialize(model)
|
241
|
-
@_model = model
|
242
|
-
end
|
243
|
-
attr_reader :_model
|
244
|
-
self
|
245
|
-
end
|
246
|
-
|
247
|
-
def model!(params)
|
248
|
-
Object
|
249
|
-
end
|
250
|
-
|
251
|
-
def process(params)
|
252
|
-
raise "This is not run!"
|
253
|
-
end
|
254
119
|
end
|
255
120
|
|
256
|
-
it {
|
121
|
+
it { OperationWithValidateAndIf.(false)["secret_contract"].must_equal "so wrong!" }
|
122
|
+
it { OperationWithValidateAndIf.(true)["secret_contract"].must_equal OperationWithValidateAndIf::Contract }
|
257
123
|
end
|
258
124
|
|
259
125
|
|
260
126
|
class OperationErrorsTest < MiniTest::Spec
|
261
127
|
class Operation < Trailblazer::Operation
|
128
|
+
require "trailblazer/operation/contract"
|
129
|
+
include Contract::Explicit
|
262
130
|
contract do
|
263
|
-
property :title, validates: {presence: true}
|
131
|
+
property :title, validates: { presence: true }
|
264
132
|
end
|
265
133
|
|
266
134
|
def process(params)
|
267
|
-
validate(params, OpenStruct.new) {}
|
135
|
+
validate(params, model: OpenStruct.new) {}
|
268
136
|
end
|
269
137
|
end
|
270
138
|
|
271
139
|
it do
|
272
|
-
|
273
|
-
|
140
|
+
result = Operation.({})
|
141
|
+
result["errors.contract"].to_s.must_equal "{:title=>[\"can't be blank\"]}"
|
274
142
|
end
|
275
143
|
end
|
data/test/test_helper.rb
CHANGED
@@ -1,9 +1,29 @@
|
|
1
|
-
require
|
2
|
-
require
|
1
|
+
require "trailblazer"
|
2
|
+
require "minitest/autorun"
|
3
3
|
|
4
|
+
# TODO: convert tests to non-rails.
|
5
|
+
require "reform"
|
4
6
|
require "reform/form/active_model/validations"
|
5
7
|
Reform::Form.class_eval do
|
6
8
|
include Reform::Form::ActiveModel::Validations
|
7
9
|
end
|
8
10
|
|
9
|
-
require "trailblazer/operation/
|
11
|
+
require "trailblazer/operation/callback"
|
12
|
+
require "trailblazer/operation/procedural/validate"
|
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
|
data/trailblazer.gemspec
CHANGED
@@ -7,19 +7,19 @@ Gem::Specification.new do |spec|
|
|
7
7
|
spec.version = Trailblazer::VERSION
|
8
8
|
spec.authors = ["Nick Sutterer"]
|
9
9
|
spec.email = ["apotonick@gmail.com"]
|
10
|
-
spec.description = %q{A high-level
|
10
|
+
spec.description = %q{A high-level architecture for Ruby introducing new abstractions such as operations, form objects or policies.}
|
11
11
|
spec.summary = %q{A high-level architecture for Ruby and Rails.}
|
12
12
|
spec.homepage = "http://trailblazer.to"
|
13
|
-
spec.license = "
|
13
|
+
spec.license = "LGPL-3.0"
|
14
14
|
|
15
15
|
spec.files = `git ls-files`.split($/)
|
16
16
|
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
17
17
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
18
18
|
spec.require_paths = ["lib"]
|
19
19
|
|
20
|
-
|
21
|
-
spec.add_dependency "uber", ">= 0.0
|
22
|
-
spec.add_dependency "reform", ">= 2.
|
20
|
+
spec.add_dependency "trailblazer-operation"
|
21
|
+
spec.add_dependency "uber", ">= 0.1.0", "< 0.2.0"
|
22
|
+
spec.add_dependency "reform", ">= 2.2.0", "< 3.0.0"
|
23
23
|
spec.add_dependency "declarative"
|
24
24
|
|
25
25
|
spec.add_development_dependency "activemodel" # for Reform::AM::V
|
@@ -27,8 +27,9 @@ Gem::Specification.new do |spec|
|
|
27
27
|
spec.add_development_dependency "bundler"
|
28
28
|
spec.add_development_dependency "rake"
|
29
29
|
spec.add_development_dependency "minitest"
|
30
|
-
spec.add_development_dependency "
|
31
|
-
spec.add_development_dependency "database_cleaner"
|
30
|
+
spec.add_development_dependency "nokogiri"
|
32
31
|
|
33
32
|
spec.add_development_dependency "roar"
|
33
|
+
# spec.required_ruby_version = '>= 1.9.3'
|
34
|
+
spec.required_ruby_version = '>= 2.0.0'
|
34
35
|
end
|
metadata
CHANGED
@@ -1,42 +1,56 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: trailblazer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.0.beta1
|
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-
|
11
|
+
date: 2016-12-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: trailblazer-operation
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
13
27
|
- !ruby/object:Gem::Dependency
|
14
28
|
name: uber
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|
16
30
|
requirements:
|
17
31
|
- - ">="
|
18
32
|
- !ruby/object:Gem::Version
|
19
|
-
version: 0.0
|
33
|
+
version: 0.1.0
|
20
34
|
- - "<"
|
21
35
|
- !ruby/object:Gem::Version
|
22
|
-
version: 0.
|
36
|
+
version: 0.2.0
|
23
37
|
type: :runtime
|
24
38
|
prerelease: false
|
25
39
|
version_requirements: !ruby/object:Gem::Requirement
|
26
40
|
requirements:
|
27
41
|
- - ">="
|
28
42
|
- !ruby/object:Gem::Version
|
29
|
-
version: 0.0
|
43
|
+
version: 0.1.0
|
30
44
|
- - "<"
|
31
45
|
- !ruby/object:Gem::Version
|
32
|
-
version: 0.
|
46
|
+
version: 0.2.0
|
33
47
|
- !ruby/object:Gem::Dependency
|
34
48
|
name: reform
|
35
49
|
requirement: !ruby/object:Gem::Requirement
|
36
50
|
requirements:
|
37
51
|
- - ">="
|
38
52
|
- !ruby/object:Gem::Version
|
39
|
-
version: 2.
|
53
|
+
version: 2.2.0
|
40
54
|
- - "<"
|
41
55
|
- !ruby/object:Gem::Version
|
42
56
|
version: 3.0.0
|
@@ -46,7 +60,7 @@ dependencies:
|
|
46
60
|
requirements:
|
47
61
|
- - ">="
|
48
62
|
- !ruby/object:Gem::Version
|
49
|
-
version: 2.
|
63
|
+
version: 2.2.0
|
50
64
|
- - "<"
|
51
65
|
- !ruby/object:Gem::Version
|
52
66
|
version: 3.0.0
|
@@ -121,21 +135,7 @@ dependencies:
|
|
121
135
|
- !ruby/object:Gem::Version
|
122
136
|
version: '0'
|
123
137
|
- !ruby/object:Gem::Dependency
|
124
|
-
name:
|
125
|
-
requirement: !ruby/object:Gem::Requirement
|
126
|
-
requirements:
|
127
|
-
- - ">="
|
128
|
-
- !ruby/object:Gem::Version
|
129
|
-
version: '0'
|
130
|
-
type: :development
|
131
|
-
prerelease: false
|
132
|
-
version_requirements: !ruby/object:Gem::Requirement
|
133
|
-
requirements:
|
134
|
-
- - ">="
|
135
|
-
- !ruby/object:Gem::Version
|
136
|
-
version: '0'
|
137
|
-
- !ruby/object:Gem::Dependency
|
138
|
-
name: database_cleaner
|
138
|
+
name: nokogiri
|
139
139
|
requirement: !ruby/object:Gem::Requirement
|
140
140
|
requirements:
|
141
141
|
- - ">="
|
@@ -162,8 +162,8 @@ dependencies:
|
|
162
162
|
- - ">="
|
163
163
|
- !ruby/object:Gem::Version
|
164
164
|
version: '0'
|
165
|
-
description: A high-level
|
166
|
-
|
165
|
+
description: A high-level architecture for Ruby introducing new abstractions such
|
166
|
+
as operations, form objects or policies.
|
167
167
|
email:
|
168
168
|
- apotonick@gmail.com
|
169
169
|
executables: []
|
@@ -173,6 +173,7 @@ files:
|
|
173
173
|
- ".gitignore"
|
174
174
|
- ".travis.yml"
|
175
175
|
- CHANGES.md
|
176
|
+
- COMM-LICENSE
|
176
177
|
- Gemfile
|
177
178
|
- LICENSE.txt
|
178
179
|
- README.md
|
@@ -181,51 +182,68 @@ files:
|
|
181
182
|
- TODO.md
|
182
183
|
- doc/Trb-The-Stack.png
|
183
184
|
- doc/trb.jpg
|
184
|
-
-
|
185
|
-
- gemfiles/Gemfile.reform-2.0
|
186
|
-
- gemfiles/Gemfile.reform-2.1
|
185
|
+
- draft-1.2.rb
|
187
186
|
- lib/trailblazer.rb
|
188
|
-
- lib/trailblazer/
|
189
|
-
- lib/trailblazer/
|
190
|
-
- lib/trailblazer/operation.rb
|
187
|
+
- lib/trailblazer/dsl.rb
|
188
|
+
- lib/trailblazer/operation/auto_inject.rb
|
191
189
|
- lib/trailblazer/operation/builder.rb
|
192
190
|
- lib/trailblazer/operation/callback.rb
|
193
|
-
- lib/trailblazer/operation/
|
191
|
+
- lib/trailblazer/operation/contract.rb
|
194
192
|
- lib/trailblazer/operation/controller.rb
|
195
|
-
- lib/trailblazer/operation/
|
193
|
+
- lib/trailblazer/operation/guard.rb
|
196
194
|
- lib/trailblazer/operation/model.rb
|
197
|
-
- lib/trailblazer/operation/model/dsl.rb
|
198
|
-
- lib/trailblazer/operation/model/external.rb
|
199
195
|
- lib/trailblazer/operation/module.rb
|
196
|
+
- lib/trailblazer/operation/nested.rb
|
197
|
+
- lib/trailblazer/operation/params.rb
|
198
|
+
- lib/trailblazer/operation/persist.rb
|
200
199
|
- lib/trailblazer/operation/policy.rb
|
201
|
-
- lib/trailblazer/operation/
|
200
|
+
- lib/trailblazer/operation/present.rb
|
201
|
+
- lib/trailblazer/operation/procedural/contract.rb
|
202
|
+
- lib/trailblazer/operation/procedural/validate.rb
|
203
|
+
- lib/trailblazer/operation/pundit.rb
|
202
204
|
- lib/trailblazer/operation/representer.rb
|
205
|
+
- lib/trailblazer/operation/rescue.rb
|
203
206
|
- lib/trailblazer/operation/resolver.rb
|
204
|
-
- lib/trailblazer/operation/
|
207
|
+
- lib/trailblazer/operation/validate.rb
|
208
|
+
- lib/trailblazer/operation/wrap.rb
|
205
209
|
- lib/trailblazer/version.rb
|
206
|
-
- test/
|
207
|
-
- test/
|
208
|
-
- test/
|
210
|
+
- test/controller_test.rb
|
211
|
+
- test/docs/auto_inject_test.rb
|
212
|
+
- test/docs/contract_test.rb
|
213
|
+
- test/docs/dry_test.rb
|
214
|
+
- test/docs/guard_test.rb
|
215
|
+
- test/docs/nested_test.rb
|
216
|
+
- test/docs/policy_test.rb
|
217
|
+
- test/docs/pundit_test.rb
|
218
|
+
- test/docs/representer_test.rb
|
219
|
+
- test/docs/rescue_test.rb
|
220
|
+
- test/docs/wrap_test.rb
|
221
|
+
- test/gemfiles/Gemfile.ruby-1.9
|
222
|
+
- test/gemfiles/Gemfile.ruby-2.0
|
223
|
+
- test/gemfiles/Gemfile.ruby-2.3
|
209
224
|
- test/module_test.rb
|
210
225
|
- test/operation/builder_test.rb
|
226
|
+
- test/operation/callback_test.rb
|
211
227
|
- test/operation/contract_test.rb
|
212
|
-
- test/operation/controller_test.rb
|
213
228
|
- test/operation/dsl/callback_test.rb
|
214
229
|
- test/operation/dsl/contract_test.rb
|
215
230
|
- test/operation/dsl/representer_test.rb
|
216
|
-
- test/operation/external_model_test.rb
|
217
231
|
- test/operation/guard_test.rb
|
218
|
-
- test/operation/
|
219
|
-
- test/operation/
|
232
|
+
- test/operation/model_test.rb
|
233
|
+
- test/operation/params_test.rb
|
234
|
+
- test/operation/persist_test.rb
|
235
|
+
- test/operation/pipedream_test.rb
|
236
|
+
- test/operation/pipetree_test.rb
|
237
|
+
- test/operation/present_test.rb
|
238
|
+
- test/operation/pundit_test.rb
|
239
|
+
- test/operation/representer_test.rb
|
220
240
|
- test/operation/resolver_test.rb
|
221
241
|
- test/operation_test.rb
|
222
|
-
- test/representer_test.rb
|
223
|
-
- test/rollback_test.rb
|
224
242
|
- test/test_helper.rb
|
225
243
|
- trailblazer.gemspec
|
226
244
|
homepage: http://trailblazer.to
|
227
245
|
licenses:
|
228
|
-
-
|
246
|
+
- LGPL-3.0
|
229
247
|
metadata: {}
|
230
248
|
post_install_message:
|
231
249
|
rdoc_options: []
|
@@ -235,12 +253,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
235
253
|
requirements:
|
236
254
|
- - ">="
|
237
255
|
- !ruby/object:Gem::Version
|
238
|
-
version:
|
256
|
+
version: 2.0.0
|
239
257
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
240
258
|
requirements:
|
241
|
-
- - "
|
259
|
+
- - ">"
|
242
260
|
- !ruby/object:Gem::Version
|
243
|
-
version:
|
261
|
+
version: 1.3.1
|
244
262
|
requirements: []
|
245
263
|
rubyforge_project:
|
246
264
|
rubygems_version: 2.6.3
|
@@ -248,22 +266,36 @@ signing_key:
|
|
248
266
|
specification_version: 4
|
249
267
|
summary: A high-level architecture for Ruby and Rails.
|
250
268
|
test_files:
|
251
|
-
- test/
|
252
|
-
- test/
|
253
|
-
- test/
|
269
|
+
- test/controller_test.rb
|
270
|
+
- test/docs/auto_inject_test.rb
|
271
|
+
- test/docs/contract_test.rb
|
272
|
+
- test/docs/dry_test.rb
|
273
|
+
- test/docs/guard_test.rb
|
274
|
+
- test/docs/nested_test.rb
|
275
|
+
- test/docs/policy_test.rb
|
276
|
+
- test/docs/pundit_test.rb
|
277
|
+
- test/docs/representer_test.rb
|
278
|
+
- test/docs/rescue_test.rb
|
279
|
+
- test/docs/wrap_test.rb
|
280
|
+
- test/gemfiles/Gemfile.ruby-1.9
|
281
|
+
- test/gemfiles/Gemfile.ruby-2.0
|
282
|
+
- test/gemfiles/Gemfile.ruby-2.3
|
254
283
|
- test/module_test.rb
|
255
284
|
- test/operation/builder_test.rb
|
285
|
+
- test/operation/callback_test.rb
|
256
286
|
- test/operation/contract_test.rb
|
257
|
-
- test/operation/controller_test.rb
|
258
287
|
- test/operation/dsl/callback_test.rb
|
259
288
|
- test/operation/dsl/contract_test.rb
|
260
289
|
- test/operation/dsl/representer_test.rb
|
261
|
-
- test/operation/external_model_test.rb
|
262
290
|
- test/operation/guard_test.rb
|
263
|
-
- test/operation/
|
264
|
-
- test/operation/
|
291
|
+
- test/operation/model_test.rb
|
292
|
+
- test/operation/params_test.rb
|
293
|
+
- test/operation/persist_test.rb
|
294
|
+
- test/operation/pipedream_test.rb
|
295
|
+
- test/operation/pipetree_test.rb
|
296
|
+
- test/operation/present_test.rb
|
297
|
+
- test/operation/pundit_test.rb
|
298
|
+
- test/operation/representer_test.rb
|
265
299
|
- test/operation/resolver_test.rb
|
266
300
|
- test/operation_test.rb
|
267
|
-
- test/representer_test.rb
|
268
|
-
- test/rollback_test.rb
|
269
301
|
- test/test_helper.rb
|