alki 0.13.0 → 0.13.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +1 -1
- data/lib/alki/assembly/instance.rb +5 -4
- data/lib/alki/assembly/instance_builder.rb +6 -8
- data/lib/alki/execution/context.rb +7 -3
- data/lib/alki/execution/context_class_builder.rb +1 -1
- data/lib/alki/execution/reference.rb +8 -4
- data/lib/alki/executor.rb +3 -2
- data/lib/alki/version.rb +1 -1
- data/test/feature/references_test.rb +20 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3bbada7ba7f3a9320332e73d98ec87b1e19162ad
|
4
|
+
data.tar.gz: 328c2661e806dee2d265da56e59e64683809954e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9604a0947cb69443b966621bc337200e48dd9589e380b93039cc81af6fb5479316406d3c19a2112cfbfe72ae2d2b5f5d0e08201977d4ccfff6d23e31f166aaf0
|
7
|
+
data.tar.gz: 235b0dc2ebd06d5be3d5d0777f25f0081f225e120e5b492c1172dd933ae26358d943d43562218bb5351a2d603507856159d3902f285ab4f414cae6724aba0861
|
data/Gemfile
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'delegate'
|
2
2
|
require 'concurrent'
|
3
3
|
require 'alki/support'
|
4
|
+
require 'alki/executor'
|
4
5
|
require 'alki/assembly/instance_builder'
|
5
6
|
|
6
7
|
module Alki
|
@@ -18,10 +19,10 @@ module Alki
|
|
18
19
|
|
19
20
|
def __reload__
|
20
21
|
@lock.with_read_lock do
|
21
|
-
|
22
|
+
unless @needs_load
|
22
23
|
@lock.with_write_lock do
|
24
|
+
@version += 1
|
23
25
|
@needs_load = true
|
24
|
-
@version+=1
|
25
26
|
end
|
26
27
|
end
|
27
28
|
end
|
@@ -69,9 +70,9 @@ module Alki
|
|
69
70
|
@lock.with_write_lock do
|
70
71
|
@needs_load = false
|
71
72
|
@obj.__unload__ if @obj.respond_to?(:__unload__)
|
72
|
-
|
73
|
+
@executor = Executor.new(self)
|
74
|
+
InstanceBuilder.build @executor,@assembly_module, @overrides do |instance|
|
73
75
|
@obj = instance
|
74
|
-
@executor = executor
|
75
76
|
self
|
76
77
|
end
|
77
78
|
end
|
@@ -1,5 +1,4 @@
|
|
1
1
|
require 'alki/assembly/types'
|
2
|
-
require 'alki/executor'
|
3
2
|
require 'alki/override_builder'
|
4
3
|
require 'alki/assembly/meta/overlay'
|
5
4
|
require 'alki/overrides'
|
@@ -9,11 +8,10 @@ module Alki
|
|
9
8
|
module Assembly
|
10
9
|
module InstanceBuilder
|
11
10
|
class << self
|
12
|
-
def build(assembly,overrides,&instance_wrapper)
|
11
|
+
def build(executor, assembly,overrides,&instance_wrapper)
|
13
12
|
assembly = Alki.load(assembly)
|
14
|
-
executor = Executor.new
|
15
13
|
|
16
|
-
overrides = inject_assembly_instance overrides, instance_wrapper
|
14
|
+
overrides = inject_assembly_instance overrides, instance_wrapper
|
17
15
|
|
18
16
|
executor.root = Types.build :assembly, assembly.root, overrides.root
|
19
17
|
executor.meta = IceNine.deep_freeze(assembly.meta+overrides.meta)
|
@@ -23,10 +21,10 @@ module Alki
|
|
23
21
|
|
24
22
|
private
|
25
23
|
|
26
|
-
def inject_assembly_instance(overrides,instance_wrapper
|
24
|
+
def inject_assembly_instance(overrides,instance_wrapper)
|
27
25
|
root = overrides.root.dup
|
28
26
|
root.children = root.children.merge(assembly_instance: assembly_instance)
|
29
|
-
meta = overrides.meta + [wrap_assembly_instance(instance_wrapper
|
27
|
+
meta = overrides.meta + [wrap_assembly_instance(instance_wrapper)]
|
30
28
|
Overrides.new(root,meta)
|
31
29
|
end
|
32
30
|
|
@@ -34,11 +32,11 @@ module Alki
|
|
34
32
|
Types.build(:service,-> { root })
|
35
33
|
end
|
36
34
|
|
37
|
-
def wrap_assembly_instance(wrapper
|
35
|
+
def wrap_assembly_instance(wrapper)
|
38
36
|
[[],Meta::Overlay.new(
|
39
37
|
:value,
|
40
38
|
[:assembly_instance],
|
41
|
-
|
39
|
+
wrapper,
|
42
40
|
[]
|
43
41
|
)]
|
44
42
|
end
|
@@ -2,15 +2,19 @@ require 'alki/execution/reference'
|
|
2
2
|
module Alki
|
3
3
|
module Execution
|
4
4
|
class Context
|
5
|
-
def initialize(
|
6
|
-
@
|
5
|
+
def initialize(instance,meta)
|
6
|
+
@__instance__ = instance
|
7
7
|
@__meta__ = meta
|
8
8
|
end
|
9
9
|
|
10
10
|
private
|
11
11
|
|
12
|
+
def __executor__
|
13
|
+
@__instance__.__executor__
|
14
|
+
end
|
15
|
+
|
12
16
|
def __reference__(path,args,blk)
|
13
|
-
Reference.new(@
|
17
|
+
Reference.new(@__instance__,@__meta__,path,args,blk)
|
14
18
|
end
|
15
19
|
|
16
20
|
def __execute__(path,args,blk)
|
@@ -1,17 +1,21 @@
|
|
1
1
|
module Alki
|
2
2
|
module Execution
|
3
3
|
class Reference
|
4
|
-
attr_accessor :
|
5
|
-
def initialize(
|
6
|
-
@
|
4
|
+
attr_accessor :instance, :meta, :path, :args, :blk
|
5
|
+
def initialize(instance,meta,path,args,blk)
|
6
|
+
@instance = instance
|
7
7
|
@meta = meta
|
8
8
|
@path = path
|
9
9
|
@args = args
|
10
10
|
@blk = blk
|
11
11
|
end
|
12
12
|
|
13
|
+
def executor
|
14
|
+
@instance.__executor__
|
15
|
+
end
|
16
|
+
|
13
17
|
def call
|
14
|
-
|
18
|
+
executor.execute @meta, @path, @args, @blk
|
15
19
|
end
|
16
20
|
end
|
17
21
|
end
|
data/lib/alki/executor.rb
CHANGED
@@ -8,12 +8,13 @@ module Alki
|
|
8
8
|
class Executor
|
9
9
|
attr_accessor :root, :meta
|
10
10
|
|
11
|
-
def initialize
|
11
|
+
def initialize(instance)
|
12
12
|
@semaphore = Concurrent::ReentrantReadWriteLock.new
|
13
13
|
@lookup_cache = {}
|
14
14
|
@call_cache = {}
|
15
15
|
@context_cache = {}
|
16
16
|
@data = nil
|
17
|
+
@instance = instance
|
17
18
|
end
|
18
19
|
|
19
20
|
def lock
|
@@ -123,7 +124,7 @@ module Alki
|
|
123
124
|
case type
|
124
125
|
when :value then value
|
125
126
|
when :proc then proc.call *args, &blk
|
126
|
-
when :class then value.new(
|
127
|
+
when :class then value.new(@instance,meta).__call__ *args, &blk
|
127
128
|
end
|
128
129
|
end
|
129
130
|
|
data/lib/alki/version.rb
CHANGED
@@ -32,4 +32,24 @@ describe 'References' do
|
|
32
32
|
)
|
33
33
|
end
|
34
34
|
end
|
35
|
+
|
36
|
+
describe 'reference objects' do
|
37
|
+
before do
|
38
|
+
@obj = Alki.singleton_assembly do
|
39
|
+
service :broken do
|
40
|
+
1.foo
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
it 'should raise errors correctly after reload' do
|
45
|
+
ref = @obj.__reference_broken__
|
46
|
+
assert_raises NoMethodError do
|
47
|
+
ref.call
|
48
|
+
end
|
49
|
+
@obj.__reload__
|
50
|
+
assert_raises NoMethodError do
|
51
|
+
ref.call
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
35
55
|
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.13.
|
4
|
+
version: 0.13.1
|
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-
|
11
|
+
date: 2017-11-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: alki-dsl
|