trailblazer-operation 0.0.6 → 0.0.7
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 +5 -13
- data/CHANGES.md +4 -0
- data/Gemfile +0 -1
- data/Rakefile +0 -2
- data/lib/trailblazer/operation/pipetree.rb +37 -39
- data/lib/trailblazer/operation/version.rb +1 -1
- data/test/gemfiles/Gemfile.ruby-2.3 +0 -1
- data/test/pipetree_test.rb +17 -7
- data/trailblazer-operation.gemspec +1 -1
- metadata +25 -25
checksums.yaml
CHANGED
@@ -1,15 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
|
5
|
-
data.tar.gz: !binary |-
|
6
|
-
Y2M1MDU0Mzc4MDg0NGVlOGNlYjBkYWE2MTUyZmQyZGQ4ZGMwMjNkNA==
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: c0ec02e51e1d32a39bfcb2ae86381ada7fa9659a
|
4
|
+
data.tar.gz: eaa3b0ae603fa52a37e3f9cd9624a6522cd0d64d
|
7
5
|
SHA512:
|
8
|
-
metadata.gz:
|
9
|
-
|
10
|
-
YTBjZWM3MWNmNjhjN2QzZDY1MjY3Y2QwZGQyM2E0ZmQ5Zjk5ODdjOTc3OWI1
|
11
|
-
ODhhNWIwYWIyNzQ1M2Q0MGViNWEyYzc4MDA5MGRkMzNjN2FlZGQ=
|
12
|
-
data.tar.gz: !binary |-
|
13
|
-
NWQxZWU5YTc0YmY2NzNkNWFmMWFlMDYzYTEwNGM3NjZlZTFkMDU1YmZlZjRm
|
14
|
-
MDU3YTYxMThiOTY1ZjVkNTlhN2M3NzBiNGYzNWRmOWI3ZmEyMDdlMDU4NDZh
|
15
|
-
M2ZjOTJmMDY2YjllMjMxMzBjMzdjYzI0MTE1ZjQxODkyYTZlOGI=
|
6
|
+
metadata.gz: 7d6bfe1597f701fdbf17a581fe4edd2f52d304d46d0ac53d9d90544e9aa1fc30a522281fc02b4d67cf9ad0f278d89b3994336c58e6377ac306d0727fcbe51736
|
7
|
+
data.tar.gz: 4f21e43d502bc7abefa28b1f05261f34d90e2b4f32d72d1d63b5167a84e41637f4965d4fef7320344fc6f461844e9e73dd3db9ecebb57226b6cc2adeb1bee851
|
data/CHANGES.md
CHANGED
data/Gemfile
CHANGED
data/Rakefile
CHANGED
@@ -15,7 +15,7 @@ class Trailblazer::Operation
|
|
15
15
|
includer.extend DSL # ::|, ::> and friends.
|
16
16
|
|
17
17
|
includer.initialize_pipetree!
|
18
|
-
includer
|
18
|
+
includer._insert(:>>, New, name: "operation.new", wrap: false)
|
19
19
|
end
|
20
20
|
|
21
21
|
module ClassMethods
|
@@ -36,28 +36,35 @@ class Trailblazer::Operation
|
|
36
36
|
# Dry.RB provides it. It has to be executed with every subclassing.
|
37
37
|
def initialize_pipetree!
|
38
38
|
heritage.record :initialize_pipetree!
|
39
|
-
self["pipetree"] = ::Pipetree::Flow
|
39
|
+
self["pipetree"] = ::Pipetree::Flow.new
|
40
40
|
end
|
41
41
|
end
|
42
42
|
|
43
43
|
module DSL
|
44
44
|
# They all inherit.
|
45
|
-
def >>(*args); _insert(:>>, *args) end
|
46
45
|
def >(*args); _insert(:>, *args) end
|
47
46
|
def &(*args); _insert(:&, *args) end
|
48
47
|
def <(*args); _insert(:<, *args) end
|
49
48
|
|
50
|
-
# self.| ->(*) { }, before: "operation.new"
|
51
|
-
# self.| :some_method
|
52
49
|
def |(cfg, user_options={})
|
53
50
|
DSL.import(self, self["pipetree"], cfg, user_options) &&
|
54
51
|
heritage.record(:|, cfg, user_options)
|
55
52
|
end
|
56
53
|
|
57
|
-
alias_method :step,
|
54
|
+
alias_method :step, :|
|
58
55
|
alias_method :consider, :&
|
59
|
-
alias_method :failure,
|
60
|
-
alias_method :success,
|
56
|
+
alias_method :failure, :<
|
57
|
+
alias_method :success, :>
|
58
|
+
alias_method :override, :|
|
59
|
+
alias_method :~, :override
|
60
|
+
|
61
|
+
# :private:
|
62
|
+
# High-level user step API that allows ->(options) procs.
|
63
|
+
def _insert(operator, proc, options={})
|
64
|
+
heritage.record(:_insert, operator, proc, options)
|
65
|
+
|
66
|
+
DSL.insert(self["pipetree"], operator, proc, options, definer_name: self.name)
|
67
|
+
end
|
61
68
|
|
62
69
|
# :private:
|
63
70
|
module Option
|
@@ -101,37 +108,16 @@ class Trailblazer::Operation
|
|
101
108
|
pipe.send(operator, _proc, options) # ex: pipetree.> Validate, after: Model::Build
|
102
109
|
end
|
103
110
|
|
111
|
+
# note: does not calls heritage.record
|
104
112
|
def self.import(operation, pipe, cfg, user_options={})
|
105
|
-
|
106
|
-
mod, args, block = cfg
|
107
|
-
|
108
|
-
import = Import.new(pipe, user_options) # API object.
|
109
|
-
|
110
|
-
return mod.import!(operation, import, *args, &block)
|
111
|
-
end
|
112
|
-
|
113
|
-
insert(pipe, :>, cfg, user_options, {}) # DOEES NOOOT calls heritage.record
|
114
|
-
end
|
115
|
-
|
116
|
-
Macros = Module.new
|
117
|
-
def self.macro!(name, constant)
|
118
|
-
Macros.send :define_method, name do |*args, &block|
|
119
|
-
[constant, args, block]
|
120
|
-
end
|
121
|
-
end
|
122
|
-
|
123
|
-
# :private:
|
124
|
-
# High-level user step API that allows ->(options) procs.
|
125
|
-
def _insert(operator, proc, options={})
|
126
|
-
heritage.record(:_insert, operator, proc, options)
|
113
|
+
return insert(pipe, :>, cfg, user_options, {}) unless cfg.is_a?(Array)
|
127
114
|
|
128
|
-
|
129
|
-
|
115
|
+
# e.g. from Contract::Validate
|
116
|
+
mod, args, block = cfg
|
130
117
|
|
131
|
-
|
132
|
-
heritage.record(:~, cfg)
|
118
|
+
import = Import.new(pipe, user_options) # API object.
|
133
119
|
|
134
|
-
|
120
|
+
mod.import!(operation, import, *args, &block)
|
135
121
|
end
|
136
122
|
|
137
123
|
# Try to abstract as much as possible from the imported module. This is for
|
@@ -140,14 +126,26 @@ class Trailblazer::Operation
|
|
140
126
|
# low-level (input, options) interface.
|
141
127
|
Import = Struct.new(:pipetree, :user_options) do
|
142
128
|
def call(operator, step, options)
|
143
|
-
|
129
|
+
insert_options = options.merge(user_options)
|
130
|
+
|
131
|
+
# Inheritance: when the step is already defined in the pipe,
|
132
|
+
# simply replace it with the new.
|
133
|
+
if name = insert_options[:name]
|
134
|
+
insert_options[:replace] = name if pipetree.index(name)
|
135
|
+
end
|
136
|
+
|
137
|
+
pipetree.send operator, step, insert_options
|
144
138
|
end
|
139
|
+
end
|
145
140
|
|
146
|
-
|
147
|
-
|
141
|
+
Macros = Module.new
|
142
|
+
# create a class method on `target`, e.g. Contract::Validate() for step macros.
|
143
|
+
def self.macro!(name, constant, target=Macros)
|
144
|
+
target.send :define_method, name do |*args, &block|
|
145
|
+
[constant, args, block]
|
148
146
|
end
|
149
147
|
end
|
150
|
-
end
|
148
|
+
end # DSL
|
151
149
|
end
|
152
150
|
|
153
151
|
extend Pipetree::DSL::Macros
|
data/test/pipetree_test.rb
CHANGED
@@ -11,28 +11,32 @@ class PipetreeTest < Minitest::Spec
|
|
11
11
|
# ::|
|
12
12
|
# without options
|
13
13
|
class Create < Trailblazer::Operation
|
14
|
-
|
14
|
+
step [Validate]
|
15
15
|
end
|
16
16
|
|
17
17
|
it { Create["pipetree"].inspect.must_equal %{[>validate,>>operation.new]} }
|
18
18
|
|
19
19
|
# without any options or []
|
20
20
|
# class New < Trailblazer::Operation
|
21
|
-
#
|
21
|
+
# step Validate
|
22
22
|
# end
|
23
23
|
|
24
24
|
# it { New["pipetree"].inspect.must_equal %{[>validate,>>operation.new]} }
|
25
25
|
|
26
26
|
# with options
|
27
27
|
class Update < Trailblazer::Operation
|
28
|
-
|
28
|
+
step [Validate], after: "operation.new"
|
29
29
|
end
|
30
30
|
|
31
31
|
it { Update["pipetree"].inspect.must_equal %{[>>operation.new,>validate]} }
|
32
32
|
|
33
|
-
|
33
|
+
#---
|
34
|
+
# ::step
|
35
|
+
|
36
|
+
#-
|
37
|
+
#- with :symbol
|
34
38
|
class Delete < Trailblazer::Operation
|
35
|
-
|
39
|
+
step :call!
|
36
40
|
|
37
41
|
def call!(options)
|
38
42
|
self["x"] = options["params"]
|
@@ -41,9 +45,15 @@ class PipetreeTest < Minitest::Spec
|
|
41
45
|
|
42
46
|
it { Delete.("yo")["x"].must_equal "yo" }
|
43
47
|
|
48
|
+
#- inheritance
|
49
|
+
class Remove < Delete
|
50
|
+
end
|
51
|
+
|
52
|
+
it { Remove.("yo")["x"].must_equal "yo" }
|
53
|
+
|
44
54
|
# proc arguments
|
45
55
|
class Forward < Trailblazer::Operation
|
46
|
-
|
56
|
+
step ->(input, options) { puts "@@@@@ #{input.inspect}"; puts "@@@@@ #{options.inspect}" }
|
47
57
|
end
|
48
58
|
|
49
59
|
it { skip; Forward.({ id: 1 }) }
|
@@ -66,7 +76,7 @@ class PipetreeTest < Minitest::Spec
|
|
66
76
|
end
|
67
77
|
|
68
78
|
it { Right.( id: 1 ).slice(">", "method_name!", "callable").must_equal [1, 1, 1] }
|
69
|
-
it { Right["pipetree"].inspect.must_equal %{[>>operation.new,>PipetreeTest::Right:
|
79
|
+
it { Right["pipetree"].inspect.must_equal %{[>>operation.new,>PipetreeTest::Right:66,>method_name!,>PipetreeTest::Right::MyCallable]} }
|
70
80
|
|
71
81
|
#---
|
72
82
|
# inheritance
|
@@ -20,7 +20,7 @@ Gem::Specification.new do |spec|
|
|
20
20
|
|
21
21
|
spec.add_dependency "uber", ">= 0.1.0", "< 0.2.0"
|
22
22
|
spec.add_dependency "declarative"
|
23
|
-
spec.add_dependency "pipetree", ">= 0.0.
|
23
|
+
spec.add_dependency "pipetree", ">= 0.0.5", "< 0.1.0"
|
24
24
|
|
25
25
|
spec.add_development_dependency "bundler"
|
26
26
|
spec.add_development_dependency "rake"
|
metadata
CHANGED
@@ -1,109 +1,109 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: trailblazer-operation
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.7
|
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-
|
11
|
+
date: 2016-12-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: uber
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: 0.1.0
|
20
|
-
- - <
|
20
|
+
- - "<"
|
21
21
|
- !ruby/object:Gem::Version
|
22
22
|
version: 0.2.0
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
25
|
version_requirements: !ruby/object:Gem::Requirement
|
26
26
|
requirements:
|
27
|
-
- -
|
27
|
+
- - ">="
|
28
28
|
- !ruby/object:Gem::Version
|
29
29
|
version: 0.1.0
|
30
|
-
- - <
|
30
|
+
- - "<"
|
31
31
|
- !ruby/object:Gem::Version
|
32
32
|
version: 0.2.0
|
33
33
|
- !ruby/object:Gem::Dependency
|
34
34
|
name: declarative
|
35
35
|
requirement: !ruby/object:Gem::Requirement
|
36
36
|
requirements:
|
37
|
-
- -
|
37
|
+
- - ">="
|
38
38
|
- !ruby/object:Gem::Version
|
39
39
|
version: '0'
|
40
40
|
type: :runtime
|
41
41
|
prerelease: false
|
42
42
|
version_requirements: !ruby/object:Gem::Requirement
|
43
43
|
requirements:
|
44
|
-
- -
|
44
|
+
- - ">="
|
45
45
|
- !ruby/object:Gem::Version
|
46
46
|
version: '0'
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: pipetree
|
49
49
|
requirement: !ruby/object:Gem::Requirement
|
50
50
|
requirements:
|
51
|
-
- -
|
51
|
+
- - ">="
|
52
52
|
- !ruby/object:Gem::Version
|
53
|
-
version: 0.0.
|
54
|
-
- - <
|
53
|
+
version: 0.0.5
|
54
|
+
- - "<"
|
55
55
|
- !ruby/object:Gem::Version
|
56
56
|
version: 0.1.0
|
57
57
|
type: :runtime
|
58
58
|
prerelease: false
|
59
59
|
version_requirements: !ruby/object:Gem::Requirement
|
60
60
|
requirements:
|
61
|
-
- -
|
61
|
+
- - ">="
|
62
62
|
- !ruby/object:Gem::Version
|
63
|
-
version: 0.0.
|
64
|
-
- - <
|
63
|
+
version: 0.0.5
|
64
|
+
- - "<"
|
65
65
|
- !ruby/object:Gem::Version
|
66
66
|
version: 0.1.0
|
67
67
|
- !ruby/object:Gem::Dependency
|
68
68
|
name: bundler
|
69
69
|
requirement: !ruby/object:Gem::Requirement
|
70
70
|
requirements:
|
71
|
-
- -
|
71
|
+
- - ">="
|
72
72
|
- !ruby/object:Gem::Version
|
73
73
|
version: '0'
|
74
74
|
type: :development
|
75
75
|
prerelease: false
|
76
76
|
version_requirements: !ruby/object:Gem::Requirement
|
77
77
|
requirements:
|
78
|
-
- -
|
78
|
+
- - ">="
|
79
79
|
- !ruby/object:Gem::Version
|
80
80
|
version: '0'
|
81
81
|
- !ruby/object:Gem::Dependency
|
82
82
|
name: rake
|
83
83
|
requirement: !ruby/object:Gem::Requirement
|
84
84
|
requirements:
|
85
|
-
- -
|
85
|
+
- - ">="
|
86
86
|
- !ruby/object:Gem::Version
|
87
87
|
version: '0'
|
88
88
|
type: :development
|
89
89
|
prerelease: false
|
90
90
|
version_requirements: !ruby/object:Gem::Requirement
|
91
91
|
requirements:
|
92
|
-
- -
|
92
|
+
- - ">="
|
93
93
|
- !ruby/object:Gem::Version
|
94
94
|
version: '0'
|
95
95
|
- !ruby/object:Gem::Dependency
|
96
96
|
name: minitest
|
97
97
|
requirement: !ruby/object:Gem::Requirement
|
98
98
|
requirements:
|
99
|
-
- -
|
99
|
+
- - ">="
|
100
100
|
- !ruby/object:Gem::Version
|
101
101
|
version: '0'
|
102
102
|
type: :development
|
103
103
|
prerelease: false
|
104
104
|
version_requirements: !ruby/object:Gem::Requirement
|
105
105
|
requirements:
|
106
|
-
- -
|
106
|
+
- - ">="
|
107
107
|
- !ruby/object:Gem::Version
|
108
108
|
version: '0'
|
109
109
|
description: Trailblazer's operation object.
|
@@ -113,8 +113,8 @@ executables: []
|
|
113
113
|
extensions: []
|
114
114
|
extra_rdoc_files: []
|
115
115
|
files:
|
116
|
-
- .gitignore
|
117
|
-
- .travis.yml
|
116
|
+
- ".gitignore"
|
117
|
+
- ".travis.yml"
|
118
118
|
- CHANGES.md
|
119
119
|
- Gemfile
|
120
120
|
- README.md
|
@@ -150,17 +150,17 @@ require_paths:
|
|
150
150
|
- lib
|
151
151
|
required_ruby_version: !ruby/object:Gem::Requirement
|
152
152
|
requirements:
|
153
|
-
- -
|
153
|
+
- - ">="
|
154
154
|
- !ruby/object:Gem::Version
|
155
155
|
version: 1.9.3
|
156
156
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
157
157
|
requirements:
|
158
|
-
- -
|
158
|
+
- - ">="
|
159
159
|
- !ruby/object:Gem::Version
|
160
160
|
version: '0'
|
161
161
|
requirements: []
|
162
162
|
rubyforge_project:
|
163
|
-
rubygems_version: 2.
|
163
|
+
rubygems_version: 2.6.3
|
164
164
|
signing_key:
|
165
165
|
specification_version: 4
|
166
166
|
summary: Trailblazer's operation object with dependency management and pipetree flow.
|