alki 0.6.0 → 0.6.1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|