alki 0.4.1 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +0 -6
- data/alki.gemspec +2 -2
- data/lib/alki/assembly.rb +3 -3
- data/lib/alki/assembly_builder.rb +102 -0
- data/lib/alki/assembly_executor.rb +29 -14
- data/lib/alki/dsls/assembly.rb +2 -2
- data/lib/alki/dsls/assembly_types/load.rb +4 -10
- data/lib/alki/dsls/assembly_types/value.rb +54 -0
- data/lib/alki/version.rb +1 -1
- data/lib/alki.rb +8 -35
- data/test/feature/alki_test.rb +59 -0
- data/test/feature/example_test.rb +45 -0
- data/test/fixtures/example/config/assembly.rb +12 -1
- data/test/fixtures/example/config/handlers.rb +1 -1
- data/test/integration/dsls/assembly_test.rb +4 -7
- metadata +12 -9
- data/lib/alki/dsls/assembly_types/service.rb +0 -25
- data/test/feature/create_package_test.rb +0 -18
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b62e2164cbf952d15c45aa1845bdd03afac913b0
|
4
|
+
data.tar.gz: 749ebc7d797b44ec3ecd900d4cb48b2e45af625d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 56a1e7009e25e8c846f13cbeefa8e5043f3d1148675534f6082358f8ed4de0f0a53f146af5ec19219e0d9ec9ecf618abb9e290e1db731d86d28b51cd133c6ef3
|
7
|
+
data.tar.gz: db587ec5e1a2a6f3594ec7081729b96aa666da5bc2ebceba4c3360fa723befb900c45e9c24e07d4d4c9b29f94a49af8c644ce491f41beb27516737a8c8b62893
|
data/Gemfile
CHANGED
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.
|
25
|
-
spec.add_dependency "alki-support", "~> 0.
|
24
|
+
spec.add_dependency "alki-dsl", "~> 0.3"
|
25
|
+
spec.add_dependency "alki-support", "~> 0.5"
|
26
26
|
end
|
data/lib/alki/assembly.rb
CHANGED
@@ -3,15 +3,15 @@ require 'alki/assembly_executor'
|
|
3
3
|
module Alki
|
4
4
|
module Assembly
|
5
5
|
def new
|
6
|
-
Alki::Assembly::Instance.new assembly,
|
6
|
+
Alki::Assembly::Instance.new assembly, self.assembly_options
|
7
7
|
end
|
8
8
|
|
9
9
|
def assembly
|
10
|
-
self.
|
10
|
+
self.definition.assembly
|
11
11
|
end
|
12
12
|
|
13
13
|
def root
|
14
|
-
self.
|
14
|
+
self.definition.root
|
15
15
|
end
|
16
16
|
|
17
17
|
class Instance
|
@@ -0,0 +1,102 @@
|
|
1
|
+
require 'alki/assembly'
|
2
|
+
require 'alki/class_builder'
|
3
|
+
require 'alki/dsl'
|
4
|
+
require 'alki/support'
|
5
|
+
|
6
|
+
module Alki
|
7
|
+
class AssemblyBuilder
|
8
|
+
def initialize
|
9
|
+
@assembly_options = {}
|
10
|
+
@assembly_name = nil
|
11
|
+
@definition = nil
|
12
|
+
end
|
13
|
+
|
14
|
+
attr_reader :assembly_options, :assembly_name, :definition
|
15
|
+
|
16
|
+
def self.build(opts={},&blk)
|
17
|
+
new.build(opts,&blk)
|
18
|
+
end
|
19
|
+
|
20
|
+
def build(opts={},&blk)
|
21
|
+
build_assembly blk if blk
|
22
|
+
set_config_directory opts[:config_dir] if opts[:config_dir]
|
23
|
+
set_assembly_name opts[:name] if opts[:name]
|
24
|
+
detect_from_path opts[:path] if opts[:path]
|
25
|
+
load_assembly_file opts[:primary_config] unless definition
|
26
|
+
build_empty_assembly unless definition
|
27
|
+
build_class
|
28
|
+
end
|
29
|
+
|
30
|
+
def detect_from_path(path)
|
31
|
+
root = Alki::Support.find_root(path) do |dir|
|
32
|
+
File.exists?(File.join(dir,'config','assembly.rb')) ||
|
33
|
+
File.exists?(File.join(dir,'Gemfile')) ||
|
34
|
+
!Dir.glob(File.join(dir,'*.gemspec')).empty?
|
35
|
+
end
|
36
|
+
if root
|
37
|
+
unless @assembly_options[:load_path]
|
38
|
+
config_dir = File.join(root,'config')
|
39
|
+
set_config_directory config_dir if File.exists? config_dir
|
40
|
+
end
|
41
|
+
|
42
|
+
unless @assembly_name
|
43
|
+
lib_dir = File.join(root,'lib')
|
44
|
+
name = Alki::Support.path_name path, lib_dir
|
45
|
+
unless name
|
46
|
+
raise "Can't auto-detect name of assembly"
|
47
|
+
end
|
48
|
+
set_assembly_name name
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def set_assembly_name(name)
|
54
|
+
@assembly_name = name
|
55
|
+
end
|
56
|
+
|
57
|
+
def set_config_directory(config_dir)
|
58
|
+
Alki::Dsl.register_dir config_dir, 'alki/dsls/assembly'
|
59
|
+
@assembly_options[:load_path] = config_dir
|
60
|
+
end
|
61
|
+
|
62
|
+
def load_assembly_file(name = nil)
|
63
|
+
name ||= 'assembly'
|
64
|
+
if @assembly_options[:load_path]
|
65
|
+
assembly_config_path = File.join(@assembly_options[:load_path],"#{name}.rb")
|
66
|
+
if File.exists? assembly_config_path
|
67
|
+
@definition = Alki::Dsl.load(assembly_config_path)[:class]
|
68
|
+
true
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
def build_empty_assembly
|
74
|
+
build_assembly ->{}
|
75
|
+
end
|
76
|
+
|
77
|
+
def build_assembly(blk)
|
78
|
+
@definition = Alki::Dsl.build('alki/dsls/assembly', &blk)[:class]
|
79
|
+
end
|
80
|
+
|
81
|
+
def build_class
|
82
|
+
assembly_options = @assembly_options
|
83
|
+
definition = @definition
|
84
|
+
Alki::ClassBuilder.build(
|
85
|
+
prefix: '',
|
86
|
+
name: @assembly_name,
|
87
|
+
class_modules: [Alki::Assembly],
|
88
|
+
type: :module,
|
89
|
+
class_methods: {
|
90
|
+
definition: {
|
91
|
+
body: ->{
|
92
|
+
definition
|
93
|
+
}
|
94
|
+
},
|
95
|
+
assembly_options: {
|
96
|
+
body: ->{ assembly_options }
|
97
|
+
}
|
98
|
+
}
|
99
|
+
)
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'alki/service_delegator'
|
2
2
|
require 'alki/overlay_delegator'
|
3
|
+
require 'alki/class_builder'
|
3
4
|
|
4
5
|
module Alki
|
5
6
|
class AssemblyExecutor
|
@@ -26,10 +27,8 @@ module Alki
|
|
26
27
|
raise "Path not found: #{path.join('.')}" unless elem
|
27
28
|
res = Resource.new assembly, cache, elem
|
28
29
|
cache[path] = case elem[:type]
|
29
|
-
when :
|
30
|
-
|
31
|
-
when :factory
|
32
|
-
factory res, &blk
|
30
|
+
when :value
|
31
|
+
value res, path
|
33
32
|
when :group
|
34
33
|
group res
|
35
34
|
end
|
@@ -37,6 +36,19 @@ module Alki
|
|
37
36
|
cache[path].call *args, &blk
|
38
37
|
end
|
39
38
|
|
39
|
+
def value(res,path)
|
40
|
+
evaluator = -> (value_block,*args,&blk) {
|
41
|
+
with_scope_context(res,value_block) do |ctx|
|
42
|
+
val = ctx.__call__(*args,&blk)
|
43
|
+
if res.elem[:overlays]
|
44
|
+
val = apply_overlays res, path, val
|
45
|
+
end
|
46
|
+
val
|
47
|
+
end
|
48
|
+
}
|
49
|
+
res.elem[:block].call evaluator
|
50
|
+
end
|
51
|
+
|
40
52
|
def service(res,path)
|
41
53
|
with_scope_context(res) do |ctx,blk|
|
42
54
|
svc = apply_overlays res, path, ctx.instance_exec(&blk)
|
@@ -47,8 +59,8 @@ module Alki
|
|
47
59
|
def apply_overlays(res,path,obj)
|
48
60
|
res.elem[:overlays].inject(obj) do |obj,overlay_elem|
|
49
61
|
unless res.cache[overlay_elem[:block]]
|
50
|
-
with_scope_context(res.with_elem(overlay_elem)) do |ctx
|
51
|
-
res.cache[overlay_elem[:block]] = ctx.
|
62
|
+
with_scope_context(res.with_elem(overlay_elem)) do |ctx|
|
63
|
+
res.cache[overlay_elem[:block]] = ctx.__call__
|
52
64
|
end
|
53
65
|
end
|
54
66
|
local_path = path[overlay_elem[:scope][:root].size..-1].join('.')
|
@@ -60,11 +72,7 @@ module Alki
|
|
60
72
|
with_scope_context(res) do |ctx,blk|
|
61
73
|
factory = ctx.instance_exec(&blk)
|
62
74
|
-> (*args,&blk) {
|
63
|
-
|
64
|
-
factory.call *args, &blk
|
65
|
-
else
|
66
|
-
factory
|
67
|
-
end
|
75
|
+
factory.call *args, &blk
|
68
76
|
}
|
69
77
|
end
|
70
78
|
end
|
@@ -77,12 +85,19 @@ module Alki
|
|
77
85
|
-> { group }
|
78
86
|
end
|
79
87
|
|
80
|
-
def with_scope_context(res)
|
88
|
+
def with_scope_context(res,blk = nil)
|
81
89
|
proc = -> (name,*args,&blk) {
|
82
90
|
call res.pkg, res.cache, res.elem[:scope][name], *args, &blk
|
83
91
|
}
|
84
92
|
|
85
|
-
|
93
|
+
context_class = Alki::ClassBuilder.build(
|
94
|
+
super_class: ValueContext,
|
95
|
+
instance_methods: {
|
96
|
+
__call__: { body: (blk || res.elem[:block])}
|
97
|
+
}
|
98
|
+
)
|
99
|
+
|
100
|
+
yield context_class.new(proc, res.elem[:scope].keys)
|
86
101
|
end
|
87
102
|
|
88
103
|
class Context
|
@@ -104,7 +119,7 @@ module Alki
|
|
104
119
|
end
|
105
120
|
end
|
106
121
|
|
107
|
-
class
|
122
|
+
class ValueContext < Context
|
108
123
|
def lookup(path)
|
109
124
|
unless path.is_a?(String) or path.is_a?(Symbol)
|
110
125
|
raise ArgumentError.new("lookup can only take Strings or Symbols")
|
data/lib/alki/dsls/assembly.rb
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
Alki do
|
2
2
|
require_dsl 'alki/dsls/class'
|
3
3
|
require_dsl 'alki/dsls/assembly_types/group'
|
4
|
-
require_dsl 'alki/dsls/assembly_types/
|
5
|
-
require_dsl 'alki/dsls/assembly_types/service'
|
4
|
+
require_dsl 'alki/dsls/assembly_types/value'
|
6
5
|
require_dsl 'alki/dsls/assembly_types/assembly'
|
6
|
+
require_dsl 'alki/dsls/assembly_types/load'
|
7
7
|
require_dsl 'alki/dsls/assembly_types/overlay'
|
8
8
|
|
9
9
|
init do
|
@@ -2,11 +2,10 @@ require 'alki/support'
|
|
2
2
|
|
3
3
|
Alki do
|
4
4
|
dsl_method :load do |group_name,name=group_name.to_s|
|
5
|
-
add_load group_name,
|
5
|
+
add_load group_name, name
|
6
6
|
end
|
7
7
|
|
8
8
|
element_type :load do
|
9
|
-
attr :prefix
|
10
9
|
attr :name
|
11
10
|
|
12
11
|
index do
|
@@ -19,17 +18,12 @@ Alki do
|
|
19
18
|
|
20
19
|
def group
|
21
20
|
unless (data[:loaded]||={})[name]
|
22
|
-
if data[:load_path]
|
23
|
-
|
24
|
-
else
|
25
|
-
require name
|
26
|
-
end
|
27
|
-
prefixed_name = if prefix
|
28
|
-
File.join(prefix,name)
|
21
|
+
path = if data[:load_path]
|
22
|
+
File.join(data[:load_path],"#{name}.rb")
|
29
23
|
else
|
30
24
|
name
|
31
25
|
end
|
32
|
-
data[:loaded][name] = Alki::
|
26
|
+
data[:loaded][name] = Alki::Dsl.load(path)[:class].root
|
33
27
|
end
|
34
28
|
data[:loaded][name]
|
35
29
|
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
Alki do
|
2
|
+
dsl_method :set do |name,value=nil,&blk|
|
3
|
+
add_value name, false, -> (evaluator) {
|
4
|
+
val = if blk
|
5
|
+
evaluator.call blk
|
6
|
+
else
|
7
|
+
value
|
8
|
+
end
|
9
|
+
-> { val }
|
10
|
+
}
|
11
|
+
end
|
12
|
+
|
13
|
+
dsl_method :service do |name,&blk|
|
14
|
+
add_value name, true, -> (evaluator) {
|
15
|
+
svc = evaluator.call blk
|
16
|
+
-> { svc }
|
17
|
+
}
|
18
|
+
end
|
19
|
+
|
20
|
+
dsl_method :factory do |name,&blk|
|
21
|
+
add_value name, false, -> (evaluator) {
|
22
|
+
factory = evaluator.call blk
|
23
|
+
-> (*args,&blk) {
|
24
|
+
factory.call *args, &blk
|
25
|
+
}
|
26
|
+
}
|
27
|
+
end
|
28
|
+
|
29
|
+
dsl_method :func do |name,&value_blk|
|
30
|
+
add_value name, false, -> (evaluator) {
|
31
|
+
-> (*args,&blk) {
|
32
|
+
evaluator.call(value_blk,*args,&blk)
|
33
|
+
}
|
34
|
+
}
|
35
|
+
end
|
36
|
+
|
37
|
+
element_type :value do
|
38
|
+
attr :apply_overlays
|
39
|
+
attr :block
|
40
|
+
|
41
|
+
output do
|
42
|
+
result = {
|
43
|
+
type: :value,
|
44
|
+
block: block,
|
45
|
+
scope: data[:scope].merge(root: [])
|
46
|
+
}
|
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
|
+
end
|
53
|
+
end
|
54
|
+
end
|
data/lib/alki/version.rb
CHANGED
data/lib/alki.rb
CHANGED
@@ -1,39 +1,12 @@
|
|
1
|
-
require 'alki/
|
2
|
-
require 'alki/assembly'
|
3
|
-
require 'alki/class_builder'
|
4
|
-
require 'alki/dsl'
|
1
|
+
require 'alki/assembly_builder'
|
5
2
|
|
6
3
|
module Alki
|
7
|
-
def self.create_assembly!(
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
path = caller_locations(1,1)[0].absolute_path
|
15
|
-
lib_dir = File.join(root,'lib','')
|
16
|
-
unless path.start_with?(lib_dir) && path.end_with?('.rb')
|
17
|
-
raise "Can't auto-detect name of assembly"
|
18
|
-
end
|
19
|
-
name = path[lib_dir.size..-4]
|
20
|
-
end
|
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')
|
4
|
+
def self.create_assembly!(opts={},&blk)
|
5
|
+
opts[:path] ||= caller_locations(1,1)[0].absolute_path
|
6
|
+
AssemblyBuilder.build(opts,&blk)
|
7
|
+
end
|
8
|
+
|
9
|
+
def self.create_assembly(opts={},&blk)
|
10
|
+
AssemblyBuilder.build(opts,&blk)
|
38
11
|
end
|
39
12
|
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
require_relative '../test_helper'
|
2
|
+
require 'alki'
|
3
|
+
|
4
|
+
describe Alki do
|
5
|
+
describe :create_assembly do
|
6
|
+
def build(opts={},&blk)
|
7
|
+
Alki.create_assembly opts, &blk
|
8
|
+
end
|
9
|
+
|
10
|
+
it 'should return module with ::assembly, ::root, and ::new methods' do
|
11
|
+
klass = build
|
12
|
+
klass.must_respond_to :assembly
|
13
|
+
klass.must_respond_to :root
|
14
|
+
klass.must_respond_to :new
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'should use provided block to provide assembly definition' do
|
18
|
+
klass = build do
|
19
|
+
service :svc do
|
20
|
+
:val1
|
21
|
+
end
|
22
|
+
end
|
23
|
+
klass.new.svc.must_equal :val1
|
24
|
+
end
|
25
|
+
|
26
|
+
it 'should load assembly definition from config_dir if provided' do
|
27
|
+
build(config_dir: fixture_path('tlogger','config')).new.must_respond_to :log
|
28
|
+
end
|
29
|
+
|
30
|
+
it 'should load file other than assembly if provided with primary_config' do
|
31
|
+
build(
|
32
|
+
config_dir: fixture_path('example','config'),
|
33
|
+
primary_config: 'settings'
|
34
|
+
).new.must_respond_to :fizz
|
35
|
+
end
|
36
|
+
|
37
|
+
it 'should create class if provided with a name' do
|
38
|
+
klass = build(name: 'alki_test/test_assembly')
|
39
|
+
AlkiTest::TestAssembly.must_equal klass
|
40
|
+
Object.send :remove_const, :AlkiTest
|
41
|
+
end
|
42
|
+
|
43
|
+
it 'should automatically determine config_dir and name if path provided' do
|
44
|
+
was_defined = defined? Tlogger
|
45
|
+
Object.send :remove_const, :Tlogger if was_defined
|
46
|
+
klass = build(path: fixture_path('tlogger','lib','tlogger.rb'))
|
47
|
+
Tlogger.must_equal klass
|
48
|
+
klass.new.must_respond_to :log
|
49
|
+
Object.send :remove_const, :Tlogger unless was_defined
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
describe :create_assembly! do
|
54
|
+
it 'should automatically set path option using path of caller' do
|
55
|
+
require fixture_path('tlogger','lib','tlogger.rb')
|
56
|
+
Tlogger.new.must_respond_to :log
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
require_relative '../test_helper'
|
2
|
+
|
3
|
+
|
4
|
+
$LOAD_PATH.unshift Alki::Test.fixture_path('example','lib')
|
5
|
+
$LOAD_PATH.unshift Alki::Test.fixture_path('tlogger','lib')
|
6
|
+
|
7
|
+
describe 'Example' do
|
8
|
+
before do
|
9
|
+
require 'example'
|
10
|
+
|
11
|
+
@expected = [
|
12
|
+
"1","2","Fizz!","4","Buzz!","Fizz!","7", "8", "Fizz!",
|
13
|
+
"Buzz!", "11", "Fizz!", "13", "14", "Fizzbuzz!", "16",
|
14
|
+
"17", "Fizz!", "19", "Buzz!"
|
15
|
+
]
|
16
|
+
@handlers = [
|
17
|
+
['fizzbuzz', /Fizzbuzz!/],
|
18
|
+
['fizz', /Fizz!/],
|
19
|
+
['buzz', /Buzz!/],
|
20
|
+
['echo', /\d+/],
|
21
|
+
]
|
22
|
+
end
|
23
|
+
|
24
|
+
describe 'run' do
|
25
|
+
before do
|
26
|
+
@app = Example.new
|
27
|
+
@app.run 1..20
|
28
|
+
end
|
29
|
+
|
30
|
+
it 'should set output to correct fizzbuzz results' do
|
31
|
+
@app.output.to_a.must_equal @expected
|
32
|
+
end
|
33
|
+
|
34
|
+
it 'should log calls to handlers due to overlay' do
|
35
|
+
log_lines = @app.log_io.string.split(/\n/)
|
36
|
+
|
37
|
+
@expected.each.with_index do |val,i|
|
38
|
+
@handlers.find do |(handler,re)|
|
39
|
+
log_lines.shift.must_equal "Calling handlers.#{handler}#handle #{i+1}"
|
40
|
+
val =~ re
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -12,6 +12,10 @@ Alki do
|
|
12
12
|
]
|
13
13
|
end
|
14
14
|
|
15
|
+
func :run do |range|
|
16
|
+
range_handler.handle range
|
17
|
+
end
|
18
|
+
|
15
19
|
service :range_handler do
|
16
20
|
require 'range_handler'
|
17
21
|
RangeHandler.new lazy('handler')
|
@@ -22,8 +26,15 @@ Alki do
|
|
22
26
|
ArrayOutput.new
|
23
27
|
end
|
24
28
|
|
29
|
+
service :log_io do
|
30
|
+
require 'stringio'
|
31
|
+
StringIO.new
|
32
|
+
end
|
33
|
+
|
25
34
|
assembly :tlogger do
|
26
|
-
set :io
|
35
|
+
set :io do
|
36
|
+
log_io
|
37
|
+
end
|
27
38
|
end
|
28
39
|
|
29
40
|
service :log do
|
@@ -1,6 +1,5 @@
|
|
1
1
|
require_relative '../../test_helper'
|
2
2
|
require 'alki/dsls/assembly'
|
3
|
-
require 'alki/assembly_processor'
|
4
3
|
|
5
4
|
describe Alki::Dsls::Assembly do
|
6
5
|
it 'should work' do
|
@@ -17,12 +16,10 @@ describe Alki::Dsls::Assembly do
|
|
17
16
|
end
|
18
17
|
end
|
19
18
|
end
|
20
|
-
|
21
|
-
res[:class].
|
22
|
-
res[:class].
|
23
|
-
res[:class].assembly.children[:group1].children[:test2].block.call.must_equal :val2
|
19
|
+
res[:class].root.children[:file].name.must_equal 'file'
|
20
|
+
res[:class].root.children[:test].must_respond_to :block
|
21
|
+
res[:class].root.children[:group1].children[:test2].must_respond_to :block
|
24
22
|
|
25
|
-
r = res[:class].
|
26
|
-
p r
|
23
|
+
r = res[:class].root.lookup [:group1,:test2]
|
27
24
|
end
|
28
25
|
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.5.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-12-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -64,28 +64,28 @@ dependencies:
|
|
64
64
|
requirements:
|
65
65
|
- - "~>"
|
66
66
|
- !ruby/object:Gem::Version
|
67
|
-
version: '0.
|
67
|
+
version: '0.3'
|
68
68
|
type: :runtime
|
69
69
|
prerelease: false
|
70
70
|
version_requirements: !ruby/object:Gem::Requirement
|
71
71
|
requirements:
|
72
72
|
- - "~>"
|
73
73
|
- !ruby/object:Gem::Version
|
74
|
-
version: '0.
|
74
|
+
version: '0.3'
|
75
75
|
- !ruby/object:Gem::Dependency
|
76
76
|
name: alki-support
|
77
77
|
requirement: !ruby/object:Gem::Requirement
|
78
78
|
requirements:
|
79
79
|
- - "~>"
|
80
80
|
- !ruby/object:Gem::Version
|
81
|
-
version: '0.
|
81
|
+
version: '0.5'
|
82
82
|
type: :runtime
|
83
83
|
prerelease: false
|
84
84
|
version_requirements: !ruby/object:Gem::Requirement
|
85
85
|
requirements:
|
86
86
|
- - "~>"
|
87
87
|
- !ruby/object:Gem::Version
|
88
|
-
version: '0.
|
88
|
+
version: '0.5'
|
89
89
|
description: Base library for building applications. Provides tools for organizing
|
90
90
|
and connecting application units.
|
91
91
|
email:
|
@@ -103,6 +103,7 @@ files:
|
|
103
103
|
- config/dsls.rb
|
104
104
|
- lib/alki.rb
|
105
105
|
- lib/alki/assembly.rb
|
106
|
+
- lib/alki/assembly_builder.rb
|
106
107
|
- lib/alki/assembly_executor.rb
|
107
108
|
- lib/alki/assembly_handler_base.rb
|
108
109
|
- lib/alki/dsls/assembly.rb
|
@@ -112,13 +113,14 @@ files:
|
|
112
113
|
- lib/alki/dsls/assembly_types/group.rb
|
113
114
|
- lib/alki/dsls/assembly_types/load.rb
|
114
115
|
- lib/alki/dsls/assembly_types/overlay.rb
|
115
|
-
- lib/alki/dsls/assembly_types/
|
116
|
+
- lib/alki/dsls/assembly_types/value.rb
|
116
117
|
- lib/alki/dsls/service.rb
|
117
118
|
- lib/alki/overlay_delegator.rb
|
118
119
|
- lib/alki/service_delegator.rb
|
119
120
|
- lib/alki/test.rb
|
120
121
|
- lib/alki/version.rb
|
121
|
-
- test/feature/
|
122
|
+
- test/feature/alki_test.rb
|
123
|
+
- test/feature/example_test.rb
|
122
124
|
- test/fixtures/config.rb
|
123
125
|
- test/fixtures/example/config/assembly.rb
|
124
126
|
- test/fixtures/example/config/handlers.rb
|
@@ -161,7 +163,8 @@ signing_key:
|
|
161
163
|
specification_version: 4
|
162
164
|
summary: Base library for building applications.
|
163
165
|
test_files:
|
164
|
-
- test/feature/
|
166
|
+
- test/feature/alki_test.rb
|
167
|
+
- test/feature/example_test.rb
|
165
168
|
- test/fixtures/config.rb
|
166
169
|
- test/fixtures/example/config/assembly.rb
|
167
170
|
- test/fixtures/example/config/handlers.rb
|
@@ -1,25 +0,0 @@
|
|
1
|
-
Alki do
|
2
|
-
dsl_method :set do |name,value=nil,&blk|
|
3
|
-
add_service name, :service, (blk || -> { value })
|
4
|
-
end
|
5
|
-
|
6
|
-
dsl_method :service do |name,&blk|
|
7
|
-
add_service name, :service, blk
|
8
|
-
end
|
9
|
-
|
10
|
-
dsl_method :factory do |name,&blk|
|
11
|
-
add_service name, :factory, blk
|
12
|
-
end
|
13
|
-
|
14
|
-
element_type :service do
|
15
|
-
attr :type
|
16
|
-
attr :block
|
17
|
-
|
18
|
-
output do
|
19
|
-
last_clear = data[:overlays].rindex(:clear)
|
20
|
-
overlays = last_clear ? data[:overlays][(last_clear + 1)..-1] : data[:overlays]
|
21
|
-
scope = data[:scope].merge root: []
|
22
|
-
{type: type, block: block, overlays: overlays, scope: scope}
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
@@ -1,18 +0,0 @@
|
|
1
|
-
require_relative '../test_helper'
|
2
|
-
|
3
|
-
describe 'Alki.create_package!' do
|
4
|
-
describe 'example' do
|
5
|
-
it 'should do fizzbuzz' do
|
6
|
-
$LOAD_PATH << File.join(fixtures_path,'example','lib')
|
7
|
-
$LOAD_PATH << File.join(fixtures_path,'tlogger','lib')
|
8
|
-
require 'example'
|
9
|
-
app = Example.new
|
10
|
-
app.range_handler.handle 1..20
|
11
|
-
app.output.to_a.must_equal [
|
12
|
-
"1","2","Fizz!","4","Buzz!","Fizz!","7", "8", "Fizz!",
|
13
|
-
"Buzz!", "11", "Fizz!", "13", "14", "Fizzbuzz!", "16",
|
14
|
-
"17", "Fizz!", "19", "Buzz!"
|
15
|
-
]
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|