alki 0.13.0 → 0.13.1
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 +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
|