alki 0.3.0 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +2 -0
- data/README.md +1 -1
- data/alki.gemspec +3 -0
- data/config/dsls.rb +4 -0
- data/lib/alki/assembly.rb +43 -0
- data/lib/alki/assembly_executor.rb +137 -0
- data/lib/alki/assembly_handler_base.rb +19 -0
- data/lib/alki/dsls/assembly.rb +24 -0
- data/lib/alki/dsls/assembly_type.rb +48 -0
- data/lib/alki/dsls/assembly_type_dsl.rb +21 -0
- data/lib/alki/dsls/assembly_types/assembly.rb +84 -0
- data/lib/alki/dsls/assembly_types/group.rb +46 -0
- data/lib/alki/dsls/assembly_types/load.rb +37 -0
- data/lib/alki/dsls/assembly_types/overlay.rb +9 -0
- data/lib/alki/dsls/assembly_types/service.rb +25 -0
- data/lib/alki/dsls/service.rb +22 -0
- data/lib/alki/test.rb +38 -18
- data/lib/alki/version.rb +1 -1
- data/lib/alki.rb +27 -21
- data/test/feature/create_package_test.rb +4 -3
- data/test/fixtures/example/config/{package.rb → assembly.rb} +5 -2
- data/test/fixtures/example/config/handlers.rb +1 -1
- data/test/fixtures/example/lib/example.rb +1 -1
- data/test/fixtures/example/lib/switch_handler.rb +2 -2
- data/test/fixtures/tlogger/config/assembly.rb +10 -0
- data/test/fixtures/tlogger/lib/tlogger.rb +3 -0
- data/test/integration/dsls/assembly_test.rb +28 -0
- data/test/integration/dsls/assembly_type_test.rb +58 -0
- data/test/integration/dsls/service_dsl_test.rb +57 -0
- metadata +69 -21
- data/lib/alki/class_builder.rb +0 -41
- data/lib/alki/dsl_builder.rb +0 -43
- data/lib/alki/group_builder.rb +0 -25
- data/lib/alki/group_dsl.rb +0 -98
- data/lib/alki/loader.rb +0 -32
- data/lib/alki/package.rb +0 -33
- data/lib/alki/package_builder.rb +0 -2
- data/lib/alki/package_executor.rb +0 -120
- data/lib/alki/package_processor.rb +0 -167
- data/lib/alki/standard_package.rb +0 -19
- data/lib/alki/util.rb +0 -35
- data/test/integration/class_builder_test.rb +0 -130
- data/test/integration/loader_test.rb +0 -36
- data/test/unit/package_processor_test.rb +0 -319
data/lib/alki.rb
CHANGED
@@ -1,33 +1,39 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
1
|
+
require 'alki/support'
|
2
|
+
require 'alki/assembly'
|
3
|
+
require 'alki/class_builder'
|
4
|
+
require 'alki/dsl'
|
5
5
|
|
6
|
+
module Alki
|
7
|
+
def self.create_assembly!(name=nil,root=nil)
|
6
8
|
if !root
|
7
|
-
root = Alki::
|
9
|
+
root = Alki::Support.find_root(caller_locations(1, 1)[0].absolute_path) do |dir|
|
10
|
+
File.exists?(File.join(dir,'config','assembly.rb'))
|
11
|
+
end
|
8
12
|
end
|
9
13
|
if !name
|
10
14
|
path = caller_locations(1,1)[0].absolute_path
|
11
15
|
lib_dir = File.join(root,'lib','')
|
12
16
|
unless path.start_with?(lib_dir) && path.end_with?('.rb')
|
13
|
-
raise "Can't auto-detect name of
|
17
|
+
raise "Can't auto-detect name of assembly"
|
14
18
|
end
|
15
19
|
name = path[lib_dir.size..-4]
|
16
20
|
end
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
21
|
+
config_root = File.join(root,'config')
|
22
|
+
Alki::ClassBuilder.build(
|
23
|
+
name: name,
|
24
|
+
class_modules: [Alki::Assembly],
|
25
|
+
type: :module,
|
26
|
+
class_methods: {
|
27
|
+
assembly_class: {
|
28
|
+
body: ->{
|
29
|
+
@assembly_class ||= Alki::Dsl.load(File.join(config_root,'assembly.rb'))[:class]
|
30
|
+
}
|
31
|
+
},
|
32
|
+
config_root: {
|
33
|
+
body: ->{ config_root }
|
34
|
+
}
|
35
|
+
}
|
36
|
+
)
|
37
|
+
Alki::Dsl.register_dir config_root, 'alki/dsls/assembly', prefix: File.join(name,'assembly')
|
32
38
|
end
|
33
39
|
end
|
@@ -4,13 +4,14 @@ describe 'Alki.create_package!' do
|
|
4
4
|
describe 'example' do
|
5
5
|
it 'should do fizzbuzz' do
|
6
6
|
$LOAD_PATH << File.join(fixtures_path,'example','lib')
|
7
|
+
$LOAD_PATH << File.join(fixtures_path,'tlogger','lib')
|
7
8
|
require 'example'
|
8
9
|
app = Example.new
|
9
10
|
app.range_handler.handle 1..20
|
10
11
|
app.output.to_a.must_equal [
|
11
|
-
|
12
|
-
|
13
|
-
|
12
|
+
"1","2","Fizz!","4","Buzz!","Fizz!","7", "8", "Fizz!",
|
13
|
+
"Buzz!", "11", "Fizz!", "13", "14", "Fizzbuzz!", "16",
|
14
|
+
"17", "Fizz!", "19", "Buzz!"
|
14
15
|
]
|
15
16
|
end
|
16
17
|
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require_relative '../../test_helper'
|
2
|
+
require 'alki/dsls/assembly'
|
3
|
+
require 'alki/assembly_processor'
|
4
|
+
|
5
|
+
describe Alki::Dsls::Assembly do
|
6
|
+
it 'should work' do
|
7
|
+
res = Alki::Dsls::Assembly.build do
|
8
|
+
service :test do
|
9
|
+
:val
|
10
|
+
end
|
11
|
+
|
12
|
+
load 'file'
|
13
|
+
|
14
|
+
group :group1 do
|
15
|
+
service :test2 do
|
16
|
+
:val2
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
p res[:class].assembly
|
21
|
+
res[:class].assembly.children[:file].name.must_equal 'file'
|
22
|
+
res[:class].assembly.children[:test].block.call.must_equal :val
|
23
|
+
res[:class].assembly.children[:group1].children[:test2].block.call.must_equal :val2
|
24
|
+
|
25
|
+
r = res[:class].assembly.lookup [:group1,:test2]
|
26
|
+
p r
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
require_relative '../../test_helper'
|
2
|
+
require 'alki/dsls/assembly_type'
|
3
|
+
|
4
|
+
describe Alki::Dsls::AssemblyType do
|
5
|
+
def build(&blk)
|
6
|
+
@klass = Alki::Dsls::AssemblyType.build(&blk)[:class]
|
7
|
+
end
|
8
|
+
|
9
|
+
def klass
|
10
|
+
@klass
|
11
|
+
end
|
12
|
+
|
13
|
+
describe :build do
|
14
|
+
it 'should create struct class with given attributes' do
|
15
|
+
build do
|
16
|
+
attr :attr1
|
17
|
+
attr :attr2
|
18
|
+
end
|
19
|
+
obj = klass.new(:val1,:val2)
|
20
|
+
obj.attr1.must_equal :val1
|
21
|
+
obj.attr2.must_equal :val2
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'should create index and output methods using given blocks' do
|
25
|
+
build do
|
26
|
+
index do
|
27
|
+
:val1
|
28
|
+
end
|
29
|
+
|
30
|
+
output do
|
31
|
+
:val2
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
obj = klass.new
|
36
|
+
obj.index(:data,:key).must_equal :val1
|
37
|
+
obj.output(:data).must_equal :val2
|
38
|
+
end
|
39
|
+
|
40
|
+
it 'should allow accessing attrs and processor/data/key from index/output methods' do
|
41
|
+
build do
|
42
|
+
attr :attr1
|
43
|
+
|
44
|
+
index do
|
45
|
+
[attr1,data,key].map(&:to_s).join
|
46
|
+
end
|
47
|
+
|
48
|
+
output do
|
49
|
+
[attr1,data].map(&:to_s).join
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
obj = klass.new(1)
|
54
|
+
obj.index(2,3).must_equal "123"
|
55
|
+
obj.output(2).must_equal "12"
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
require_relative '../../test_helper'
|
2
|
+
require 'alki/dsls/service'
|
3
|
+
|
4
|
+
describe Alki::Dsls::Service do
|
5
|
+
def build(&blk)
|
6
|
+
@c = Alki::Dsls::Service.build(&blk)[:class]
|
7
|
+
end
|
8
|
+
|
9
|
+
describe :use do
|
10
|
+
it 'should add second argument to ::uses' do
|
11
|
+
build do
|
12
|
+
use :test, 'test_service'
|
13
|
+
use :test2, :test_service2
|
14
|
+
end.uses.must_equal(['test_service','test_service2'])
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'should set instance variable for each use from new arguments' do
|
18
|
+
build do
|
19
|
+
use :test, 'test_service'
|
20
|
+
use :test2, 'test_service2'
|
21
|
+
end
|
22
|
+
obj = @c.new :val1, :val2
|
23
|
+
obj.instance_variable_get(:@test).must_equal :val1
|
24
|
+
obj.instance_variable_get(:@test2).must_equal :val2
|
25
|
+
end
|
26
|
+
|
27
|
+
it 'should raise error if number of new arguments doesn\'t match number of use statements' do
|
28
|
+
build do
|
29
|
+
use :test, 'test_service'
|
30
|
+
use :test2, 'test_service2'
|
31
|
+
end
|
32
|
+
assert_raises ArgumentError do
|
33
|
+
@c.new
|
34
|
+
end
|
35
|
+
assert_raises ArgumentError do
|
36
|
+
@c.new :val1
|
37
|
+
end
|
38
|
+
assert_raises ArgumentError do
|
39
|
+
@c.new :val1, :val2, :val3
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
it 'should use first argument as service name if none provided' do
|
44
|
+
build do
|
45
|
+
use :test
|
46
|
+
use :test2
|
47
|
+
end.uses.must_equal(['test','test2'])
|
48
|
+
end
|
49
|
+
|
50
|
+
it 'should allow hash syntax for arguments' do
|
51
|
+
build do
|
52
|
+
use test: 'ts'
|
53
|
+
use test2: 'ts2'
|
54
|
+
end.uses.must_equal(['ts','ts2'])
|
55
|
+
end
|
56
|
+
end
|
57
|
+
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.
|
4
|
+
version: 0.4.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: 2016-
|
11
|
+
date: 2016-11-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -38,6 +38,48 @@ dependencies:
|
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '10.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: minitest
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '5.9'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '5.9'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: alki-dsl
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0.2'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0.2'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: alki-support
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0.4'
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0.4'
|
41
83
|
description: Base library for building applications. Provides tools for organizing
|
42
84
|
and connection application units.
|
43
85
|
email:
|
@@ -52,26 +94,28 @@ files:
|
|
52
94
|
- README.md
|
53
95
|
- Rakefile
|
54
96
|
- alki.gemspec
|
97
|
+
- config/dsls.rb
|
55
98
|
- lib/alki.rb
|
56
|
-
- lib/alki/
|
57
|
-
- lib/alki/
|
58
|
-
- lib/alki/
|
59
|
-
- lib/alki/
|
60
|
-
- lib/alki/
|
99
|
+
- lib/alki/assembly.rb
|
100
|
+
- lib/alki/assembly_executor.rb
|
101
|
+
- lib/alki/assembly_handler_base.rb
|
102
|
+
- lib/alki/dsls/assembly.rb
|
103
|
+
- lib/alki/dsls/assembly_type.rb
|
104
|
+
- lib/alki/dsls/assembly_type_dsl.rb
|
105
|
+
- lib/alki/dsls/assembly_types/assembly.rb
|
106
|
+
- lib/alki/dsls/assembly_types/group.rb
|
107
|
+
- lib/alki/dsls/assembly_types/load.rb
|
108
|
+
- lib/alki/dsls/assembly_types/overlay.rb
|
109
|
+
- lib/alki/dsls/assembly_types/service.rb
|
110
|
+
- lib/alki/dsls/service.rb
|
61
111
|
- lib/alki/overlay_delegator.rb
|
62
|
-
- lib/alki/package.rb
|
63
|
-
- lib/alki/package_builder.rb
|
64
|
-
- lib/alki/package_executor.rb
|
65
|
-
- lib/alki/package_processor.rb
|
66
112
|
- lib/alki/service_delegator.rb
|
67
|
-
- lib/alki/standard_package.rb
|
68
113
|
- lib/alki/test.rb
|
69
|
-
- lib/alki/util.rb
|
70
114
|
- lib/alki/version.rb
|
71
115
|
- test/feature/create_package_test.rb
|
72
116
|
- test/fixtures/config.rb
|
117
|
+
- test/fixtures/example/config/assembly.rb
|
73
118
|
- test/fixtures/example/config/handlers.rb
|
74
|
-
- test/fixtures/example/config/package.rb
|
75
119
|
- test/fixtures/example/config/settings.rb
|
76
120
|
- test/fixtures/example/lib/array_output.rb
|
77
121
|
- test/fixtures/example/lib/echo_handler.rb
|
@@ -80,10 +124,12 @@ files:
|
|
80
124
|
- test/fixtures/example/lib/num_handler.rb
|
81
125
|
- test/fixtures/example/lib/range_handler.rb
|
82
126
|
- test/fixtures/example/lib/switch_handler.rb
|
83
|
-
- test/
|
84
|
-
- test/
|
127
|
+
- test/fixtures/tlogger/config/assembly.rb
|
128
|
+
- test/fixtures/tlogger/lib/tlogger.rb
|
129
|
+
- test/integration/dsls/assembly_test.rb
|
130
|
+
- test/integration/dsls/assembly_type_test.rb
|
131
|
+
- test/integration/dsls/service_dsl_test.rb
|
85
132
|
- test/test_helper.rb
|
86
|
-
- test/unit/package_processor_test.rb
|
87
133
|
homepage: https://github.com/medlefsen/alki
|
88
134
|
licenses:
|
89
135
|
- MIT
|
@@ -111,8 +157,8 @@ summary: Base library for building applications.
|
|
111
157
|
test_files:
|
112
158
|
- test/feature/create_package_test.rb
|
113
159
|
- test/fixtures/config.rb
|
160
|
+
- test/fixtures/example/config/assembly.rb
|
114
161
|
- test/fixtures/example/config/handlers.rb
|
115
|
-
- test/fixtures/example/config/package.rb
|
116
162
|
- test/fixtures/example/config/settings.rb
|
117
163
|
- test/fixtures/example/lib/array_output.rb
|
118
164
|
- test/fixtures/example/lib/echo_handler.rb
|
@@ -121,7 +167,9 @@ test_files:
|
|
121
167
|
- test/fixtures/example/lib/num_handler.rb
|
122
168
|
- test/fixtures/example/lib/range_handler.rb
|
123
169
|
- test/fixtures/example/lib/switch_handler.rb
|
124
|
-
- test/
|
125
|
-
- test/
|
170
|
+
- test/fixtures/tlogger/config/assembly.rb
|
171
|
+
- test/fixtures/tlogger/lib/tlogger.rb
|
172
|
+
- test/integration/dsls/assembly_test.rb
|
173
|
+
- test/integration/dsls/assembly_type_test.rb
|
174
|
+
- test/integration/dsls/service_dsl_test.rb
|
126
175
|
- test/test_helper.rb
|
127
|
-
- test/unit/package_processor_test.rb
|
data/lib/alki/class_builder.rb
DELETED
@@ -1,41 +0,0 @@
|
|
1
|
-
require 'alki/dsl_builder'
|
2
|
-
|
3
|
-
module Alki
|
4
|
-
class ClassBuilder
|
5
|
-
def initialize(*dsl_factories)
|
6
|
-
@dsl_factories = dsl_factories.flatten
|
7
|
-
end
|
8
|
-
|
9
|
-
def build(name=nil,&blk)
|
10
|
-
self.class.build(name,@dsl_factories,&blk)
|
11
|
-
end
|
12
|
-
|
13
|
-
def self.build(name=nil,dsl_factories,&blk)
|
14
|
-
Class.new.tap do |c|
|
15
|
-
builder = -> {
|
16
|
-
Module.new.tap do |m|
|
17
|
-
m.define_singleton_method :klass do
|
18
|
-
c
|
19
|
-
end
|
20
|
-
end
|
21
|
-
}
|
22
|
-
m = DslBuilder.build(c,dsl_factories,
|
23
|
-
builder: builder,exec: :class_exec,
|
24
|
-
&blk)
|
25
|
-
c.include m
|
26
|
-
if name
|
27
|
-
*ans, ln = name.to_s.split(/::/)
|
28
|
-
parent = Object
|
29
|
-
ans.each do |a|
|
30
|
-
unless parent.const_defined? a
|
31
|
-
parent.const_set a, Module.new
|
32
|
-
end
|
33
|
-
parent = parent.const_get a
|
34
|
-
end
|
35
|
-
|
36
|
-
parent.const_set ln, c
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
data/lib/alki/dsl_builder.rb
DELETED
@@ -1,43 +0,0 @@
|
|
1
|
-
module Alki
|
2
|
-
class DslBuilder
|
3
|
-
def initialize(*dsl_factories,builder: nil, exec: nil)
|
4
|
-
@builder = builder
|
5
|
-
@exec = exec
|
6
|
-
@dsl_factories = dsl_factories.flatten
|
7
|
-
end
|
8
|
-
|
9
|
-
def build(obj,&blk)
|
10
|
-
self.class.build(obj,@dsl_factories,
|
11
|
-
builder: @builder,
|
12
|
-
exec: @exec,
|
13
|
-
&blk)
|
14
|
-
end
|
15
|
-
|
16
|
-
def self.build(obj,dsl_factories,builder: nil, exec: nil, &blk)
|
17
|
-
builder ||= Object.method(:new)
|
18
|
-
exec ||= :instance_exec
|
19
|
-
unless dsl_factories.is_a?(Array)
|
20
|
-
dsl_factories = [dsl_factories]
|
21
|
-
end
|
22
|
-
builder = builder.call
|
23
|
-
dsls = []
|
24
|
-
dsl_factories.each do |dsl_factory|
|
25
|
-
if dsl_factory.respond_to? :new_dsl
|
26
|
-
dsl = dsl_factory.new_dsl obj
|
27
|
-
else
|
28
|
-
dsl = dsl_factory.new obj
|
29
|
-
end
|
30
|
-
dsl.dsl_methods.each do |method_name|
|
31
|
-
method = dsl.method(method_name)
|
32
|
-
builder.define_singleton_method method_name do |*args,&blk|
|
33
|
-
method.call *args, &blk
|
34
|
-
end
|
35
|
-
end
|
36
|
-
dsls << dsl
|
37
|
-
end
|
38
|
-
builder.send(exec,&blk)
|
39
|
-
dsls.each {|dsl| dsl.finalize if dsl.respond_to? :finalize }
|
40
|
-
builder
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|
data/lib/alki/group_builder.rb
DELETED
@@ -1,25 +0,0 @@
|
|
1
|
-
require 'alki/group_dsl'
|
2
|
-
require 'alki/dsl_builder'
|
3
|
-
|
4
|
-
module Alki
|
5
|
-
class GroupBuilder
|
6
|
-
def self.build(loader,obj = {},&dsl)
|
7
|
-
Alki::GroupBuilder.new(loader).build(obj,&dsl)
|
8
|
-
obj
|
9
|
-
end
|
10
|
-
|
11
|
-
def initialize(loader)
|
12
|
-
@loader = loader
|
13
|
-
@builder = Alki::DslBuilder.new(self)
|
14
|
-
end
|
15
|
-
|
16
|
-
def new_dsl(obj)
|
17
|
-
GroupDsl.new(obj,loader: @loader, group_builder: @builder)
|
18
|
-
end
|
19
|
-
|
20
|
-
def build(group={},&dsl)
|
21
|
-
@builder.build(group,&dsl)
|
22
|
-
group
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
data/lib/alki/group_dsl.rb
DELETED
@@ -1,98 +0,0 @@
|
|
1
|
-
require 'alki/util'
|
2
|
-
|
3
|
-
module Alki
|
4
|
-
class GroupDsl
|
5
|
-
def initialize(root,group_builder:,loader:)
|
6
|
-
@root = root
|
7
|
-
@group_builder = group_builder
|
8
|
-
@loader = loader
|
9
|
-
end
|
10
|
-
|
11
|
-
def dsl_methods
|
12
|
-
[:set,:service,:factory,:load,:import,:group,:overlay,:clear_overlays]
|
13
|
-
end
|
14
|
-
|
15
|
-
def set(name,value=nil,&blk)
|
16
|
-
service name, &(blk || -> { value })
|
17
|
-
end
|
18
|
-
|
19
|
-
def service(name,&blk)
|
20
|
-
name = name.to_sym
|
21
|
-
@root[name] = {
|
22
|
-
type: :service,
|
23
|
-
block: blk
|
24
|
-
}
|
25
|
-
end
|
26
|
-
|
27
|
-
def factory(name,&blk)
|
28
|
-
name = name.to_sym
|
29
|
-
@root[name] = {
|
30
|
-
type: :factory,
|
31
|
-
block: blk
|
32
|
-
}
|
33
|
-
end
|
34
|
-
|
35
|
-
def import(name)
|
36
|
-
instance_exec &@loader.load(name.to_s)
|
37
|
-
end
|
38
|
-
|
39
|
-
def load(name)
|
40
|
-
group(name.to_sym) do
|
41
|
-
import(name)
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
def package(name,pkg,klass=nil,&blk)
|
46
|
-
if pkg.is_a? String
|
47
|
-
require pkg
|
48
|
-
if klass == nil
|
49
|
-
pkg = Alki::Util.classify(pkg)
|
50
|
-
else
|
51
|
-
pkg = klass
|
52
|
-
end
|
53
|
-
end
|
54
|
-
if pkg.is_a? Class
|
55
|
-
pkg = pkg.new
|
56
|
-
end
|
57
|
-
if pkg.response_to? :package_definition
|
58
|
-
pkg = pkg.package_definition
|
59
|
-
end
|
60
|
-
unless pkg.is_a? Hash
|
61
|
-
raise "Invalid package: #{pkg.inspect}"
|
62
|
-
end
|
63
|
-
name = name.to_sym
|
64
|
-
overrides = {}
|
65
|
-
@group_builder.build(overrides,&blk) if blk
|
66
|
-
overrides[:original] = {
|
67
|
-
type: :package,
|
68
|
-
children: pkg,
|
69
|
-
overrides: {}
|
70
|
-
}
|
71
|
-
@root[name] = {
|
72
|
-
type: :package,
|
73
|
-
children: pkg,
|
74
|
-
overrides: overrides
|
75
|
-
}
|
76
|
-
end
|
77
|
-
|
78
|
-
def group(name,&blk)
|
79
|
-
name = name.to_sym
|
80
|
-
children = {}
|
81
|
-
@group_builder.build(children,&blk)
|
82
|
-
@root[name] = {
|
83
|
-
type: :group,
|
84
|
-
children: children
|
85
|
-
}
|
86
|
-
end
|
87
|
-
|
88
|
-
def overlay(&blk)
|
89
|
-
@root['overlays'] ||= []
|
90
|
-
@root['overlays'] << blk
|
91
|
-
end
|
92
|
-
|
93
|
-
def clear_overlays
|
94
|
-
@root['overlays'] ||= []
|
95
|
-
@root['overlays'] << :clear
|
96
|
-
end
|
97
|
-
end
|
98
|
-
end
|
data/lib/alki/loader.rb
DELETED
@@ -1,32 +0,0 @@
|
|
1
|
-
module Alki
|
2
|
-
class Loader
|
3
|
-
def self.load(config_file)
|
4
|
-
Fiber.new do
|
5
|
-
Kernel.load config_file
|
6
|
-
Thread.current[:alki_loader_current]
|
7
|
-
end.resume
|
8
|
-
end
|
9
|
-
|
10
|
-
def initialize(root_dir)
|
11
|
-
@root_dir = root_dir
|
12
|
-
end
|
13
|
-
|
14
|
-
def load_all
|
15
|
-
Dir[File.join(@root_dir,'**','*.rb')].inject({}) do |h,path|
|
16
|
-
file = path.gsub(File.join(@root_dir,''),'').gsub(/\.rb$/,'')
|
17
|
-
h.merge!(file => Loader.load(path))
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
def load(file)
|
22
|
-
Loader.load File.expand_path("#{file}.rb",@root_dir)
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
module Kernel
|
28
|
-
def Alki(&blk)
|
29
|
-
Thread.current[:alki_loader_current] = blk if blk
|
30
|
-
::Alki
|
31
|
-
end
|
32
|
-
end
|