alki 0.11.0 → 0.12.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +1 -1
- data/alki.gemspec +1 -1
- data/config/assembly.rb +3 -5
- data/lib/alki/assembly/instance.rb +0 -1
- data/lib/alki/assembly/meta/tags.rb +2 -2
- data/lib/alki/assembly/types/factory.rb +2 -1
- data/lib/alki/assembly/types/group.rb +6 -5
- data/lib/alki/assembly/types/service.rb +2 -0
- data/lib/alki/dsls/assembly_group.rb +17 -3
- data/lib/alki/execution/factory.rb +16 -0
- data/lib/alki/execution/helpers.rb +5 -1
- data/lib/alki/version.rb +1 -1
- data/test/feature/factories_test.rb +24 -6
- data/test/feature/reference_overlays_test.rb +32 -0
- data/test/feature/tags_test.rb +14 -0
- data/test/fixtures/example/config/handlers.rb +3 -3
- data/test/fixtures/example/lib/alki_loader.rb +1 -0
- data/test/fixtures/example/lib/dsls/num_handler.rb +8 -0
- metadata +9 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d65c6ea707a3c2b160cf29edcb6cdd092a9239f3
|
4
|
+
data.tar.gz: 9ec9b017122f9a6a0cd2c5741835e2a0b0bd570b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ad08a969ea2df6707a7e92139a52d70d1cbf5549d5bf5566dfe11f1253b5b014d2e4db986dd94585db0a85faf9a0aacc93cffcd04d7e01efe41695f940e47216
|
7
|
+
data.tar.gz: b0ba6db2280081859a064f287b144ec7425de30f0d090370c900c8b0e37c2b56562a4599e9be97f4b2ba6044f9a4fb7f9102db2cb6cb1bec7e1c266777b03f9c
|
data/Gemfile
CHANGED
data/alki.gemspec
CHANGED
@@ -20,7 +20,7 @@ Gem::Specification.new do |spec|
|
|
20
20
|
|
21
21
|
spec.add_development_dependency "bundler", "~> 1.6"
|
22
22
|
spec.add_development_dependency "rake", '~> 10.0'
|
23
|
-
spec.add_dependency "alki-dsl", "~> 0.
|
23
|
+
spec.add_dependency "alki-dsl", "~> 0.5"
|
24
24
|
spec.add_dependency "alki-support", "~> 0.7"
|
25
25
|
spec.add_dependency "concurrent-ruby", "~> 1.0"
|
26
26
|
spec.add_dependency "ice_nine", "~> 0.11"
|
data/config/assembly.rb
CHANGED
@@ -7,13 +7,11 @@ Alki do
|
|
7
7
|
end
|
8
8
|
|
9
9
|
factory :build_service do
|
10
|
-
-> (klass, grp=nil) {
|
10
|
+
-> (klass, grp=nil, args=[]) {
|
11
11
|
klass = Alki.load klass
|
12
12
|
grp ||= parent
|
13
|
-
|
14
|
-
klass.uses.map {|path| grp.lookup path }
|
15
|
-
else
|
16
|
-
[]
|
13
|
+
if klass.respond_to? :uses
|
14
|
+
args += klass.uses.map {|path| grp.lookup path }
|
17
15
|
end
|
18
16
|
klass.new *args
|
19
17
|
}
|
@@ -1,5 +1,6 @@
|
|
1
1
|
Alki do
|
2
2
|
require 'alki/execution/value_helpers'
|
3
|
+
require 'alki/execution/factory'
|
3
4
|
|
4
5
|
attr :block
|
5
6
|
|
@@ -19,7 +20,7 @@ Alki do
|
|
19
20
|
if !args.empty? || blk
|
20
21
|
__create__ *args, &blk
|
21
22
|
else
|
22
|
-
method(:__create__)
|
23
|
+
Alki::Execution::Factory.new method(:__create__)
|
23
24
|
end
|
24
25
|
}
|
25
26
|
}
|
@@ -1,4 +1,5 @@
|
|
1
1
|
Alki do
|
2
|
+
require 'ostruct'
|
2
3
|
require 'alki/execution/helpers'
|
3
4
|
|
4
5
|
attr(:children){ {} }
|
@@ -8,9 +9,9 @@ Alki do
|
|
8
9
|
|
9
10
|
data[:tags] ||= {}
|
10
11
|
data[:tags] = data[:tags].inject({}) do |tags,(tag,tagged)|
|
11
|
-
tagged.each do |path|
|
12
|
+
tagged.each do |path,value|
|
12
13
|
if path.empty? || path[0] == key.to_sym
|
13
|
-
|
14
|
+
(tags[tag]||={})[(path[1..-1]||[])] = value
|
14
15
|
end
|
15
16
|
end
|
16
17
|
tags
|
@@ -22,8 +23,8 @@ Alki do
|
|
22
23
|
if target.size == 1 && target[0].to_s.start_with?('%')
|
23
24
|
tags = data[:tags][target[0].to_s[1..-1].to_sym]
|
24
25
|
if tags
|
25
|
-
tags.each do |
|
26
|
-
(no[
|
26
|
+
tags.keys.each do |path|
|
27
|
+
(no[path]||=[]).push *overlays
|
27
28
|
end
|
28
29
|
end
|
29
30
|
elsif target.empty? || target.shift == key.to_sym
|
@@ -46,7 +47,7 @@ Alki do
|
|
46
47
|
methods: {
|
47
48
|
children: -> {
|
48
49
|
children_names
|
49
|
-
}
|
50
|
+
},
|
50
51
|
},
|
51
52
|
proc: ->{self}
|
52
53
|
}
|
@@ -7,6 +7,7 @@ Alki do
|
|
7
7
|
overlays = (data[:overlays][[]]||[]).sort_by(&:order).group_by(&:type)
|
8
8
|
value_overlays = overlays[:value]||[]
|
9
9
|
reference_overlays = overlays[:reference]||[]
|
10
|
+
tags = data[:tags].inject({}){|tags,(tag,tagged)| tags[tag] = tagged[[]]; tags}
|
10
11
|
methods = {
|
11
12
|
__build__: block,
|
12
13
|
__apply_overlays__: -> obj, overlays {
|
@@ -34,6 +35,7 @@ Alki do
|
|
34
35
|
},
|
35
36
|
modules: [Alki::Execution::Helpers],
|
36
37
|
scope: data[:scope],
|
38
|
+
meta: {tags: tags}
|
37
39
|
}
|
38
40
|
end
|
39
41
|
end
|
@@ -6,6 +6,10 @@ Alki do
|
|
6
6
|
init do
|
7
7
|
ctx[:root] = build(:group,{})
|
8
8
|
ctx[:meta] = []
|
9
|
+
@addons = Array ctx[:addons]
|
10
|
+
@addons.each do |addon|
|
11
|
+
require_dsl addon
|
12
|
+
end
|
9
13
|
end
|
10
14
|
|
11
15
|
helper :add do |name,elem|
|
@@ -25,7 +29,7 @@ Alki do
|
|
25
29
|
Alki.load("alki/assembly/meta/#{type}").new *args
|
26
30
|
end
|
27
31
|
|
28
|
-
|
32
|
+
helper :add_overlay do |type,target,overlay,args|
|
29
33
|
(ctx[:meta]||=[]) << [
|
30
34
|
[],
|
31
35
|
build_meta(
|
@@ -48,11 +52,21 @@ Alki do
|
|
48
52
|
ctx[:meta].push *prefix_meta(*prefix,meta)
|
49
53
|
end
|
50
54
|
|
51
|
-
dsl_method :
|
55
|
+
dsl_method :use do |addon_name|
|
56
|
+
addon = Alki.load addon_name
|
57
|
+
if addon.respond_to?(:alki_addon)
|
58
|
+
addon = addon.alki_addon
|
59
|
+
end
|
60
|
+
require_dsl addon
|
61
|
+
@addons << addon
|
62
|
+
end
|
63
|
+
|
64
|
+
dsl_method :tag do |*tags,**value_tags|
|
52
65
|
unless tags.all?{|t| t.is_a? Symbol }
|
53
66
|
raise "Tags must be symbols"
|
54
67
|
end
|
55
|
-
|
68
|
+
tags.each {|tag| value_tags[tag] = true }
|
69
|
+
@tags = value_tags
|
56
70
|
end
|
57
71
|
|
58
72
|
dsl_method :config_dir do
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'forwardable'
|
2
|
+
|
3
|
+
module Alki
|
4
|
+
module Execution
|
5
|
+
class Factory
|
6
|
+
extend Forwardable
|
7
|
+
|
8
|
+
def initialize(method)
|
9
|
+
@method = method
|
10
|
+
end
|
11
|
+
|
12
|
+
def_delegators :@method, :call, :to_proc, :to_s, :[]
|
13
|
+
def_delegator :@method, :call, :new
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -10,7 +10,11 @@ module Alki
|
|
10
10
|
end
|
11
11
|
elem.to_s.split('.').inject(group) do |group,name|
|
12
12
|
raise "Invalid lookup elem" unless group.is_a? Helpers
|
13
|
-
|
13
|
+
if name =~ /^\d/
|
14
|
+
group[name.to_i]
|
15
|
+
else
|
16
|
+
group.send name.to_sym
|
17
|
+
end
|
14
18
|
end
|
15
19
|
end
|
16
20
|
end
|
data/lib/alki/version.rb
CHANGED
@@ -36,13 +36,31 @@ describe 'Factories' do
|
|
36
36
|
proc_counter.must_equal 2
|
37
37
|
end
|
38
38
|
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
39
|
+
describe 'if no arguments are provided' do
|
40
|
+
before do
|
41
|
+
assembly do
|
42
|
+
factory :test do
|
43
|
+
-> (val) { val + 1 }
|
44
|
+
end
|
43
45
|
end
|
44
46
|
end
|
45
|
-
|
46
|
-
|
47
|
+
|
48
|
+
def just_yield(*args)
|
49
|
+
yield *args
|
50
|
+
end
|
51
|
+
|
52
|
+
it 'should return object with call methods' do
|
53
|
+
obj.test.call(1).must_equal 2
|
54
|
+
obj.test[1].must_equal 2
|
55
|
+
obj.test.(1).must_equal 2
|
56
|
+
end
|
57
|
+
|
58
|
+
it 'should return object with #new method' do
|
59
|
+
obj.test.new(1).must_equal 2
|
60
|
+
end
|
61
|
+
|
62
|
+
it 'should return object that is convertible to a proc' do
|
63
|
+
just_yield(1,&obj.test).must_equal 2
|
64
|
+
end
|
47
65
|
end
|
48
66
|
end
|
@@ -21,4 +21,36 @@ describe 'Reference Overlays' do
|
|
21
21
|
end
|
22
22
|
assembly.new.svc.must_equal :oval_osvc_ofunc_of1_of2
|
23
23
|
end
|
24
|
+
|
25
|
+
it 'should work on tags across mounts' do
|
26
|
+
child = Alki.create_assembly do
|
27
|
+
set :val, :svc1
|
28
|
+
|
29
|
+
tag :tag1
|
30
|
+
service :svc1 do
|
31
|
+
val
|
32
|
+
end
|
33
|
+
|
34
|
+
reference_overlay '%tag2', :overlay
|
35
|
+
set :overlay, -> val { :"child_#{val.call}"}
|
36
|
+
end
|
37
|
+
|
38
|
+
assembly = Alki.create_assembly do
|
39
|
+
mount :child, child
|
40
|
+
|
41
|
+
set :val2, :svc2
|
42
|
+
|
43
|
+
tag :tag2
|
44
|
+
service :svc2 do
|
45
|
+
val2
|
46
|
+
end
|
47
|
+
|
48
|
+
reference_overlay '%tag1', :overlay
|
49
|
+
set :overlay, -> val { :"parent_#{val.call}"}
|
50
|
+
end
|
51
|
+
obj = assembly.new
|
52
|
+
|
53
|
+
obj.svc2.must_equal :child_svc2
|
54
|
+
obj.child.svc1.must_equal :parent_svc1
|
55
|
+
end
|
24
56
|
end
|
data/test/feature/tags_test.rb
CHANGED
@@ -1,6 +1,20 @@
|
|
1
1
|
require 'alki/feature_test'
|
2
2
|
|
3
3
|
describe 'Tags' do
|
4
|
+
it 'should allow accessing tags in services' do
|
5
|
+
assembly = Alki.create_assembly do
|
6
|
+
tag :tag1, tag2: false
|
7
|
+
group :grp do
|
8
|
+
tag :tag2, tag3: :value
|
9
|
+
service :svc1 do
|
10
|
+
meta[:tags]
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
obj = assembly.new
|
15
|
+
obj.grp.svc1.must_equal tag1: true, tag2: true, tag3: :value
|
16
|
+
end
|
17
|
+
|
4
18
|
it 'should allow setting overlays via tags' do
|
5
19
|
assembly = Alki.create_assembly do
|
6
20
|
tag :tag1, :tag2
|
@@ -1,4 +1,6 @@
|
|
1
1
|
Alki do
|
2
|
+
use 'example/dsls/num_handler'
|
3
|
+
|
2
4
|
factory :num_handler do
|
3
5
|
require 'num_handler'
|
4
6
|
-> (num,str) {
|
@@ -6,9 +8,7 @@ Alki do
|
|
6
8
|
}
|
7
9
|
end
|
8
10
|
|
9
|
-
|
10
|
-
num_handler 3, settings.fizz
|
11
|
-
end
|
11
|
+
num_handler :fizz, 3
|
12
12
|
|
13
13
|
service :buzz do
|
14
14
|
num_handler 5, settings.buzz
|
@@ -0,0 +1 @@
|
|
1
|
+
Alki::Loader.register 'dsls', builder: 'alki/dsls/dsl', name: 'example/dsls'
|
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.
|
4
|
+
version: 0.12.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matt Edlefsen
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-05-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -44,20 +44,14 @@ dependencies:
|
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '0.
|
48
|
-
- - ">="
|
49
|
-
- !ruby/object:Gem::Version
|
50
|
-
version: 0.4.2
|
47
|
+
version: '0.5'
|
51
48
|
type: :runtime
|
52
49
|
prerelease: false
|
53
50
|
version_requirements: !ruby/object:Gem::Requirement
|
54
51
|
requirements:
|
55
52
|
- - "~>"
|
56
53
|
- !ruby/object:Gem::Version
|
57
|
-
version: '0.
|
58
|
-
- - ">="
|
59
|
-
- !ruby/object:Gem::Version
|
60
|
-
version: 0.4.2
|
54
|
+
version: '0.5'
|
61
55
|
- !ruby/object:Gem::Dependency
|
62
56
|
name: alki-support
|
63
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -147,6 +141,7 @@ files:
|
|
147
141
|
- lib/alki/execution/cache_entry.rb
|
148
142
|
- lib/alki/execution/context.rb
|
149
143
|
- lib/alki/execution/context_class_builder.rb
|
144
|
+
- lib/alki/execution/factory.rb
|
150
145
|
- lib/alki/execution/helpers.rb
|
151
146
|
- lib/alki/execution/reference.rb
|
152
147
|
- lib/alki/execution/value_helpers.rb
|
@@ -177,7 +172,9 @@ files:
|
|
177
172
|
- test/fixtures/example/config/assembly.rb
|
178
173
|
- test/fixtures/example/config/handlers.rb
|
179
174
|
- test/fixtures/example/config/settings.rb
|
175
|
+
- test/fixtures/example/lib/alki_loader.rb
|
180
176
|
- test/fixtures/example/lib/array_output.rb
|
177
|
+
- test/fixtures/example/lib/dsls/num_handler.rb
|
181
178
|
- test/fixtures/example/lib/echo_handler.rb
|
182
179
|
- test/fixtures/example/lib/example.rb
|
183
180
|
- test/fixtures/example/lib/log_overlay.rb
|
@@ -233,7 +230,9 @@ test_files:
|
|
233
230
|
- test/fixtures/example/config/assembly.rb
|
234
231
|
- test/fixtures/example/config/handlers.rb
|
235
232
|
- test/fixtures/example/config/settings.rb
|
233
|
+
- test/fixtures/example/lib/alki_loader.rb
|
236
234
|
- test/fixtures/example/lib/array_output.rb
|
235
|
+
- test/fixtures/example/lib/dsls/num_handler.rb
|
237
236
|
- test/fixtures/example/lib/echo_handler.rb
|
238
237
|
- test/fixtures/example/lib/example.rb
|
239
238
|
- test/fixtures/example/lib/log_overlay.rb
|