alki 0.4.1 → 0.5.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 +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
|