alki 0.3.0 → 0.4.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 +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
|