alki 0.11.0 → 0.12.0
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/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
|