trailblazer-loader 0.0.4 → 0.0.5
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 +4 -4
- data/CHANGES.md +4 -0
- data/README.md +16 -1
- data/lib/trailblazer/loader.rb +4 -3
- data/lib/trailblazer/loader/pipeline.rb +78 -0
- data/lib/trailblazer/loader/version.rb +1 -1
- data/trailblazer-loader.gemspec +0 -2
- metadata +3 -16
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e8c0e3c79507f5a6a5f4f2383e062cb120cb6ace
|
4
|
+
data.tar.gz: d8712b8524753c3e8c0b96300f0cd9b25fbbedde
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f103cc770a466b813f5142ec95b27a8f0665e7b74b041f178a5a0f0a40b613869114794638b1e1a4bf12cc2610dd5637884a42a819c591353286c9add8b7399a
|
7
|
+
data.tar.gz: f12a70084297229f4845f16d5dc637a3ab28b82c1feb9e0bdb3174cc59355d22d856f715a085f1517016ae719fe0a6d6567dbc5b1b55b596dfdb3acbdd01414e
|
data/CHANGES.md
CHANGED
data/README.md
CHANGED
@@ -115,7 +115,7 @@ app
|
|
115
115
|
│ │ ├── contracts
|
116
116
|
│ │ │ ├── create.rb
|
117
117
|
│ │ │ └── update.rb
|
118
|
-
│ │ ├──
|
118
|
+
│ │ ├── operations
|
119
119
|
│ │ │ ├── create.rb
|
120
120
|
│ │ │ └── update.rb
|
121
121
|
│ │ ├── admin
|
@@ -233,6 +233,21 @@ module Comment::Operation
|
|
233
233
|
|
234
234
|
## Debugging
|
235
235
|
|
236
|
+
TODO: document PrintFiles
|
237
|
+
|
238
|
+
Booting your app fails because the loading order is incorrect? This happens, as we can't cover every possible combination.
|
239
|
+
|
240
|
+
In any case, you can use `require` or `require_relative` and load files manually in the file depending on a specific class.
|
241
|
+
|
242
|
+
For example, say you derive in another order and you're using the explicit layout.
|
243
|
+
|
244
|
+
```ruby
|
245
|
+
require_relative "update.rb"
|
246
|
+
class Comment::Create < Comment::Update
|
247
|
+
```
|
248
|
+
|
249
|
+
Instead of painfully reconfiguring, require explicitly and save yourself a lot of pain. BTW, that's how every other programming language does dependency management and even [Matz is not too happy about autoloading anymore](https://twitter.com/yukihiro_matz/status/676170870226706432).
|
250
|
+
|
236
251
|
## Customizing
|
237
252
|
|
238
253
|
Trailblazer-loader allows you to inject your own sorting and filtering logic, should you refuse to go mainstream.
|
data/lib/trailblazer/loader.rb
CHANGED
@@ -1,5 +1,4 @@
|
|
1
1
|
require "trailblazer/loader/version"
|
2
|
-
require "representable/pipeline"
|
3
2
|
require "pp"
|
4
3
|
|
5
4
|
module Trailblazer
|
@@ -12,12 +11,12 @@ module Trailblazer
|
|
12
11
|
options[:concepts_root] ||= "app/concepts/"
|
13
12
|
options[:concept_dirs] = concept_dirs
|
14
13
|
|
15
|
-
pipeline = options[:pipeline] ||
|
14
|
+
pipeline = options[:pipeline] || Pipeline[
|
16
15
|
FindDirectories,
|
17
16
|
FindConcepts,
|
18
17
|
# PrintConcepts,
|
19
18
|
SortByLevel,
|
20
|
-
|
19
|
+
Pipeline::Collect[ConceptName, ConceptFiles, SortCreateFirst, SortOperationLast, AddConceptFiles] # per concept.
|
21
20
|
]
|
22
21
|
|
23
22
|
if args = options[:insert] # FIXME: this only implements a sub-set.
|
@@ -67,3 +66,5 @@ module Trailblazer
|
|
67
66
|
end
|
68
67
|
end
|
69
68
|
end
|
69
|
+
|
70
|
+
require "trailblazer/loader/pipeline"
|
@@ -0,0 +1,78 @@
|
|
1
|
+
module Trailblazer
|
2
|
+
# WARNING: this will be removed soon with Uber::Pipeline or CallSheet.
|
3
|
+
class Loader::Pipeline < Array
|
4
|
+
Stop = Class.new
|
5
|
+
|
6
|
+
# options is mutuable.
|
7
|
+
def call(input, options)
|
8
|
+
inject(input) do |memo, block|
|
9
|
+
res = evaluate(block, memo, options)
|
10
|
+
return(Stop)if Stop == res
|
11
|
+
res
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
def evaluate(block, input, options)
|
17
|
+
block.call(input, options)
|
18
|
+
end
|
19
|
+
|
20
|
+
|
21
|
+
module Macros # TODO: explicit test.
|
22
|
+
# Macro to quickly modify an array of functions via Pipeline::Insert and return a
|
23
|
+
# Pipeline instance.
|
24
|
+
def insert(functions, new_function, options)
|
25
|
+
Pipeline.new(Pipeline::Insert.(functions, new_function, options))
|
26
|
+
end
|
27
|
+
end
|
28
|
+
extend Macros
|
29
|
+
|
30
|
+
# Collect applies a pipeline to each element of input.
|
31
|
+
class Collect < self
|
32
|
+
# when stop, the element is skipped. (should that be Skip then?)
|
33
|
+
def call(input, options)
|
34
|
+
arr = []
|
35
|
+
input.each_with_index do |item_fragment, i|
|
36
|
+
result = super(item_fragment, options.merge(index: i)) # DISCUSS: NO :fragment set.
|
37
|
+
Stop == result ? next : arr << result
|
38
|
+
end
|
39
|
+
arr
|
40
|
+
end
|
41
|
+
end # Collect
|
42
|
+
|
43
|
+
module Function
|
44
|
+
class Insert
|
45
|
+
def call(arr, func, options)
|
46
|
+
arr = arr.dup
|
47
|
+
delete!(arr, func) if options[:delete]
|
48
|
+
replace!(arr, options[:replace], func) if options[:replace]
|
49
|
+
arr
|
50
|
+
end
|
51
|
+
|
52
|
+
private
|
53
|
+
def replace!(arr, old_func, new_func)
|
54
|
+
arr.each_with_index { |func, index|
|
55
|
+
if func.is_a?(Collect)
|
56
|
+
arr[index] = Collect[*Pipeline::Insert.(func, new_func, replace: old_func)]
|
57
|
+
end
|
58
|
+
|
59
|
+
arr[index] = new_func if func==old_func
|
60
|
+
}
|
61
|
+
end
|
62
|
+
|
63
|
+
def delete!(arr, removed_func)
|
64
|
+
arr.delete(removed_func)
|
65
|
+
|
66
|
+
# TODO: make nice.
|
67
|
+
arr.each_with_index { |func, index|
|
68
|
+
if func.is_a?(Collect)
|
69
|
+
arr[index] = Collect[*Pipeline::Insert.(func, removed_func, delete: true)]
|
70
|
+
end
|
71
|
+
}
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
Insert = Function::Insert.new
|
77
|
+
end
|
78
|
+
end
|
data/trailblazer-loader.gemspec
CHANGED
@@ -21,6 +21,4 @@ Gem::Specification.new do |spec|
|
|
21
21
|
spec.add_development_dependency "bundler", "~> 1.10"
|
22
22
|
spec.add_development_dependency "rake", "~> 10.0"
|
23
23
|
spec.add_development_dependency "minitest"
|
24
|
-
|
25
|
-
spec.add_dependency "representable", ">= 2.4.0" # NOTE: this is only until we agree on how to model pipelines (as in call_sheet, Pipeline, etc).
|
26
24
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: trailblazer-loader
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nick Sutterer
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-12-
|
11
|
+
date: 2015-12-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -52,20 +52,6 @@ dependencies:
|
|
52
52
|
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
|
-
- !ruby/object:Gem::Dependency
|
56
|
-
name: representable
|
57
|
-
requirement: !ruby/object:Gem::Requirement
|
58
|
-
requirements:
|
59
|
-
- - ">="
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: 2.4.0
|
62
|
-
type: :runtime
|
63
|
-
prerelease: false
|
64
|
-
version_requirements: !ruby/object:Gem::Requirement
|
65
|
-
requirements:
|
66
|
-
- - ">="
|
67
|
-
- !ruby/object:Gem::Version
|
68
|
-
version: 2.4.0
|
69
55
|
description: 'TOD: Write a longer description or delete this line.'
|
70
56
|
email:
|
71
57
|
- apotonick@gmail.com
|
@@ -82,6 +68,7 @@ files:
|
|
82
68
|
- call_sheet-notes.md
|
83
69
|
- lib/trailblazer-loader.rb
|
84
70
|
- lib/trailblazer/loader.rb
|
71
|
+
- lib/trailblazer/loader/pipeline.rb
|
85
72
|
- lib/trailblazer/loader/version.rb
|
86
73
|
- trailblazer-loader.gemspec
|
87
74
|
homepage: http://trailblazer.to/
|