alki 0.6.0 → 0.6.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 +4 -4
- data/README.md +1 -1
- data/alki.gemspec +1 -1
- data/lib/alki/assembly.rb +38 -7
- data/lib/alki/assembly_builder.rb +1 -1
- data/lib/alki/assembly_executor.rb +0 -16
- data/lib/alki/dsls/assembly.rb +0 -4
- data/lib/alki/dsls/assembly_types/assembly.rb +21 -13
- data/lib/alki/dsls/assembly_types/group.rb +1 -1
- data/lib/alki/dsls/assembly_types/value.rb +78 -32
- data/lib/alki/version.rb +1 -1
- data/lib/alki.rb +1 -0
- data/test/feature/alki_test.rb +0 -1
- data/test/feature/example_test.rb +4 -0
- data/test/feature/overrides_test.rb +18 -0
- metadata +10 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bfc0e6ec1368d9f0df28e72d8978aef6afe37ecf
|
4
|
+
data.tar.gz: a251bd8975e08e982b0cf18710bb5abbea957cb0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6203b1f5a0914be306e711733aabe161f11346e286a4a2011eeea8d97cff7a2ebc8e5ed6ea41df0506917062b54dab07175b6061a6ccae32bf1cb29294009b91
|
7
|
+
data.tar.gz: 3a8d1da8bc5a4396fb5124c7e6b823747942f38b56e046e5933b77d806656b8567276f3e5d129caf1998f415ace2287e722adaf42958d951aa05a7083485467c
|
data/README.md
CHANGED
@@ -9,7 +9,7 @@ It's goal is to remove uncertainty and friction when building Ruby projects, all
|
|
9
9
|
Best place to start would be to check out some examples:
|
10
10
|
|
11
11
|
* https://github.com/alki-project/alki-example
|
12
|
-
* https://github.com/alki-project/alki/test/fixtures/example
|
12
|
+
* https://github.com/alki-project/alki/tree/master/test/fixtures/example
|
13
13
|
|
14
14
|
# The Alki Assembly
|
15
15
|
|
data/alki.gemspec
CHANGED
@@ -21,6 +21,6 @@ Gem::Specification.new do |spec|
|
|
21
21
|
spec.add_development_dependency "bundler", "~> 1.6"
|
22
22
|
spec.add_development_dependency "rake", '~> 10.0'
|
23
23
|
spec.add_dependency "minitest", "~> 5.9", '>= 5.9.1'
|
24
|
-
spec.add_dependency "alki-dsl", "~> 0.3"
|
24
|
+
spec.add_dependency "alki-dsl", "~> 0.3", '>= 0.3.1'
|
25
25
|
spec.add_dependency "alki-support", "~> 0.5"
|
26
26
|
end
|
data/lib/alki/assembly.rb
CHANGED
@@ -1,21 +1,52 @@
|
|
1
1
|
require 'alki/assembly_executor'
|
2
|
+
require 'alki/dsls/assembly'
|
2
3
|
|
3
4
|
module Alki
|
4
5
|
module Assembly
|
5
|
-
def new
|
6
|
-
Alki::Assembly::Instance.new
|
7
|
-
end
|
8
|
-
|
9
|
-
def assembly
|
10
|
-
self.definition.assembly
|
6
|
+
def new(overrides={})
|
7
|
+
Alki::Assembly::Instance.new create_assembly(overrides), self.assembly_options
|
11
8
|
end
|
12
9
|
|
13
10
|
def root
|
14
11
|
self.definition.root
|
15
12
|
end
|
16
13
|
|
14
|
+
private
|
15
|
+
|
16
|
+
def create_assembly(overrides={})
|
17
|
+
config_dir = if assembly_options[:load_path]
|
18
|
+
build_type :value, assembly_options[:load_path]
|
19
|
+
else
|
20
|
+
nil
|
21
|
+
end
|
22
|
+
|
23
|
+
build_type :assembly, root, config_dir, create_override_group(overrides)
|
24
|
+
end
|
25
|
+
|
26
|
+
|
27
|
+
def create_override_group(overrides)
|
28
|
+
unless overrides.empty?
|
29
|
+
root = build_type(:group)
|
30
|
+
overrides.each do |path,value|
|
31
|
+
set_override root, *path.to_s.split('.'), value
|
32
|
+
end
|
33
|
+
root
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def set_override(root,*parent_keys,key,value)
|
38
|
+
parent = parent_keys.inject(root) do |parent,key|
|
39
|
+
parent.children[key.to_sym] ||= build_type(:group)
|
40
|
+
end
|
41
|
+
parent.children[key.to_sym] = build_type(:value, value)
|
42
|
+
end
|
43
|
+
|
44
|
+
def build_type(type,*args)
|
45
|
+
Alki::Support.load_class("alki/assembly_types/#{type}").new *args
|
46
|
+
end
|
47
|
+
|
17
48
|
class Instance
|
18
|
-
def initialize(assembly,opts
|
49
|
+
def initialize(assembly,opts)
|
19
50
|
@assembly = assembly
|
20
51
|
@cache = {}
|
21
52
|
@opts = opts
|
@@ -55,7 +55,7 @@ module Alki
|
|
55
55
|
end
|
56
56
|
|
57
57
|
def set_config_directory(config_dir)
|
58
|
-
Alki::Dsl.register_dir config_dir, 'alki/dsls/assembly'
|
58
|
+
Alki::Dsl.register_dir config_dir, 'alki/dsls/assembly', {config_dir: config_dir}
|
59
59
|
@assembly_options[:load_path] = config_dir
|
60
60
|
end
|
61
61
|
|
@@ -49,13 +49,6 @@ module Alki
|
|
49
49
|
res.elem[:block].call evaluator
|
50
50
|
end
|
51
51
|
|
52
|
-
def service(res,path)
|
53
|
-
with_scope_context(res) do |ctx,blk|
|
54
|
-
svc = apply_overlays res, path, ctx.instance_exec(&blk)
|
55
|
-
-> { svc }
|
56
|
-
end
|
57
|
-
end
|
58
|
-
|
59
52
|
def apply_overlays(res,path,obj)
|
60
53
|
res.elem[:overlays].inject(obj) do |obj,overlay_elem|
|
61
54
|
unless res.cache[overlay_elem[:block]]
|
@@ -68,15 +61,6 @@ module Alki
|
|
68
61
|
end
|
69
62
|
end
|
70
63
|
|
71
|
-
def factory(res)
|
72
|
-
with_scope_context(res) do |ctx,blk|
|
73
|
-
factory = ctx.instance_exec(&blk)
|
74
|
-
-> (*args,&blk) {
|
75
|
-
factory.call *args, &blk
|
76
|
-
}
|
77
|
-
end
|
78
|
-
end
|
79
|
-
|
80
64
|
def group(res)
|
81
65
|
proc = -> (name,*args,&blk) {
|
82
66
|
call res.pkg, res.cache, res.elem[:scope][name], *args, &blk
|
data/lib/alki/dsls/assembly.rb
CHANGED
@@ -2,36 +2,44 @@ require 'alki/support'
|
|
2
2
|
|
3
3
|
Alki do
|
4
4
|
require_dsl 'alki/dsls/assembly_types/group'
|
5
|
+
require_dsl 'alki/dsls/assembly_types/value'
|
5
6
|
|
6
7
|
dsl_method :assembly do |name,pkg=name.to_s,&blk|
|
7
8
|
klass = Alki::Support.load_class pkg
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
klass.root
|
9
|
+
config_dir = klass.assembly_options[:load_path]
|
10
|
+
config_dir = build_value config_dir if config_dir
|
11
|
+
overrides = if blk
|
12
|
+
build_group_dsl(blk)
|
13
13
|
end
|
14
|
-
|
14
|
+
|
15
|
+
add_assembly name, klass.root, config_dir, overrides
|
15
16
|
end
|
16
17
|
|
17
18
|
element_type :assembly do
|
18
19
|
attr :root
|
20
|
+
attr :config_dir
|
19
21
|
attr :overrides, nil
|
20
22
|
|
21
23
|
index do
|
22
|
-
if
|
23
|
-
data.
|
24
|
-
|
25
|
-
override: data.dup,
|
26
|
-
)
|
27
|
-
override.index data, key
|
24
|
+
if key == :config_dir
|
25
|
+
data.merge! main_data
|
26
|
+
config_dir
|
28
27
|
else
|
29
|
-
|
28
|
+
if overrides
|
29
|
+
data.replace(
|
30
|
+
main: data.merge(main_data),
|
31
|
+
override: data.dup,
|
32
|
+
)
|
33
|
+
override.index data, key
|
34
|
+
else
|
35
|
+
root.index data.merge!(main_data), key
|
36
|
+
end
|
30
37
|
end
|
31
38
|
end
|
32
39
|
|
33
40
|
output do
|
34
41
|
scope = root.output(data)[:scope]
|
42
|
+
scope[:config_dir] = (data[:prefix]||[]) + [:config_dir]
|
35
43
|
scope.merge! overrides.output(data)[:scope] if overrides
|
36
44
|
{
|
37
45
|
type: :group,
|
@@ -1,54 +1,100 @@
|
|
1
1
|
Alki do
|
2
2
|
dsl_method :set do |name,value=nil,&blk|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
end
|
9
|
-
-> { val }
|
10
|
-
}
|
3
|
+
if blk
|
4
|
+
add_proc_value name, blk
|
5
|
+
else
|
6
|
+
add_value name, value
|
7
|
+
end
|
11
8
|
end
|
12
9
|
|
13
10
|
dsl_method :service do |name,&blk|
|
14
|
-
|
15
|
-
svc = evaluator.call blk
|
16
|
-
-> { svc }
|
17
|
-
}
|
11
|
+
add_service name, blk
|
18
12
|
end
|
19
13
|
|
20
14
|
dsl_method :factory do |name,&blk|
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
15
|
+
add_factory name, blk
|
16
|
+
end
|
17
|
+
|
18
|
+
dsl_method :func do |name,&blk|
|
19
|
+
add_func name, blk
|
20
|
+
end
|
21
|
+
|
22
|
+
element_type :value do
|
23
|
+
attr :value
|
24
|
+
|
25
|
+
output do
|
26
|
+
{
|
27
|
+
type: :value,
|
28
|
+
block: ->(_) {
|
29
|
+
val = value
|
30
|
+
->{ val }
|
31
|
+
},
|
32
|
+
scope: {}
|
33
|
+
}
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
element_type :proc_value do
|
38
|
+
attr :proc
|
39
|
+
|
40
|
+
output do
|
41
|
+
{
|
42
|
+
type: :value,
|
43
|
+
block: ->(e) {
|
44
|
+
val = e.call proc
|
45
|
+
->{ val }
|
46
|
+
},
|
47
|
+
scope: data[:scope]
|
25
48
|
}
|
26
|
-
|
49
|
+
end
|
27
50
|
end
|
28
51
|
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
52
|
+
element_type :service do
|
53
|
+
attr :block
|
54
|
+
output do
|
55
|
+
last_clear = data[:overlays].rindex(:clear)
|
56
|
+
overlays = last_clear ? data[:overlays][(last_clear + 1)..-1] : data[:overlays]
|
57
|
+
{
|
58
|
+
type: :value,
|
59
|
+
block: -> (evaluator) {
|
60
|
+
svc = evaluator.call block
|
61
|
+
-> { svc }
|
62
|
+
},
|
63
|
+
scope: data[:scope],
|
64
|
+
overlays: overlays
|
33
65
|
}
|
34
|
-
|
66
|
+
end
|
35
67
|
end
|
36
68
|
|
37
|
-
element_type :
|
38
|
-
attr :apply_overlays
|
69
|
+
element_type :factory do
|
39
70
|
attr :block
|
71
|
+
output do
|
72
|
+
{
|
73
|
+
type: :value,
|
74
|
+
block: -> (evaluator) {
|
75
|
+
factory = evaluator.call block
|
76
|
+
-> (*args,&blk) {
|
77
|
+
factory.call *args, &blk
|
78
|
+
}
|
79
|
+
},
|
80
|
+
scope: data[:scope]
|
81
|
+
}
|
82
|
+
end
|
83
|
+
end
|
40
84
|
|
85
|
+
element_type :func do
|
86
|
+
attr :block
|
41
87
|
output do
|
42
|
-
|
88
|
+
{
|
43
89
|
type: :value,
|
44
|
-
block:
|
45
|
-
|
90
|
+
block: ->(evaluator) {
|
91
|
+
value_blk = block
|
92
|
+
-> (*args,&blk) {
|
93
|
+
evaluator.call(value_blk,*args,&blk)
|
94
|
+
}
|
95
|
+
},
|
96
|
+
scope: data[:scope]
|
46
97
|
}
|
47
|
-
if apply_overlays
|
48
|
-
last_clear = data[:overlays].rindex(:clear)
|
49
|
-
result[:overlays] = last_clear ? data[:overlays][(last_clear + 1)..-1] : data[:overlays]
|
50
|
-
end
|
51
|
-
result
|
52
98
|
end
|
53
99
|
end
|
54
100
|
end
|
data/lib/alki/version.rb
CHANGED
data/lib/alki.rb
CHANGED
data/test/feature/alki_test.rb
CHANGED
@@ -0,0 +1,18 @@
|
|
1
|
+
require_relative '../test_helper'
|
2
|
+
|
3
|
+
$LOAD_PATH.unshift Alki::Test.fixture_path('tlogger','lib')
|
4
|
+
require 'tlogger'
|
5
|
+
require 'stringio'
|
6
|
+
|
7
|
+
describe 'Overrides' do
|
8
|
+
it 'should be possibly to override assembly values on initialize' do
|
9
|
+
assert_raises RuntimeError do
|
10
|
+
Tlogger.new.log << "test"
|
11
|
+
end
|
12
|
+
io = StringIO.new
|
13
|
+
logger = Tlogger.new(io: io)
|
14
|
+
logger.log << "test"
|
15
|
+
logger.log << "test"
|
16
|
+
io.string.must_equal "testtest"
|
17
|
+
end
|
18
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: alki
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.6.
|
4
|
+
version: 0.6.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matt Edlefsen
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-12-
|
11
|
+
date: 2016-12-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -65,6 +65,9 @@ dependencies:
|
|
65
65
|
- - "~>"
|
66
66
|
- !ruby/object:Gem::Version
|
67
67
|
version: '0.3'
|
68
|
+
- - ">="
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
version: 0.3.1
|
68
71
|
type: :runtime
|
69
72
|
prerelease: false
|
70
73
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -72,6 +75,9 @@ dependencies:
|
|
72
75
|
- - "~>"
|
73
76
|
- !ruby/object:Gem::Version
|
74
77
|
version: '0.3'
|
78
|
+
- - ">="
|
79
|
+
- !ruby/object:Gem::Version
|
80
|
+
version: 0.3.1
|
75
81
|
- !ruby/object:Gem::Dependency
|
76
82
|
name: alki-support
|
77
83
|
requirement: !ruby/object:Gem::Requirement
|
@@ -121,6 +127,7 @@ files:
|
|
121
127
|
- lib/alki/version.rb
|
122
128
|
- test/feature/alki_test.rb
|
123
129
|
- test/feature/example_test.rb
|
130
|
+
- test/feature/overrides_test.rb
|
124
131
|
- test/fixtures/example/config/assembly.rb
|
125
132
|
- test/fixtures/example/config/handlers.rb
|
126
133
|
- test/fixtures/example/config/settings.rb
|
@@ -164,6 +171,7 @@ summary: Base library for building applications.
|
|
164
171
|
test_files:
|
165
172
|
- test/feature/alki_test.rb
|
166
173
|
- test/feature/example_test.rb
|
174
|
+
- test/feature/overrides_test.rb
|
167
175
|
- test/fixtures/example/config/assembly.rb
|
168
176
|
- test/fixtures/example/config/handlers.rb
|
169
177
|
- test/fixtures/example/config/settings.rb
|