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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 86b3c33eb9fbe55a5ed070f96148396c637b5fbb
4
- data.tar.gz: 2a917840ba25b11141b89afbb64facc3472028c5
3
+ metadata.gz: 3bbada7ba7f3a9320332e73d98ec87b1e19162ad
4
+ data.tar.gz: 328c2661e806dee2d265da56e59e64683809954e
5
5
  SHA512:
6
- metadata.gz: 85abda997dc2d9f53889c0de62c83c02785342e516b1869644d34540ef24e11ab5e333853ccd884a60c58264dd76f97f5e223077258740699363df3924ad2869
7
- data.tar.gz: 05e05fe8cb0f7d1199b8d51a172a679529ad96ad5c530a7c850a66bb06130e46320f8cc2cb3fe9a6e121797dcd799fd3b287efa7a5d38401c27ffd0cfdd40723
6
+ metadata.gz: 9604a0947cb69443b966621bc337200e48dd9589e380b93039cc81af6fb5479316406d3c19a2112cfbfe72ae2d2b5f5d0e08201977d4ccfff6d23e31f166aaf0
7
+ data.tar.gz: 235b0dc2ebd06d5be3d5d0777f25f0081f225e120e5b492c1172dd933ae26358d943d43562218bb5351a2d603507856159d3902f285ab4f414cae6724aba0861
data/Gemfile CHANGED
@@ -1,6 +1,6 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
- gem 'alki-testing'
3
+ gem 'alki-testing', '= 0.3.0'
4
4
  gem 'rake'
5
5
 
6
6
  gemspec
@@ -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
- if @obj
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
- InstanceBuilder.build @assembly_module, @overrides do |instance,executor|
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, executor
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,executor)
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,executor)]
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,executor)
35
+ def wrap_assembly_instance(wrapper)
38
36
  [[],Meta::Overlay.new(
39
37
  :value,
40
38
  [:assembly_instance],
41
- -> obj { wrapper.call obj, executor },
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(executor,meta)
6
- @__executor__ = executor
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(@__executor__,@__meta__,path,args,blk)
17
+ Reference.new(@__instance__,@__meta__,path,args,blk)
14
18
  end
15
19
 
16
20
  def __execute__(path,args,blk)
@@ -22,7 +22,7 @@ module Alki
22
22
 
23
23
  methods[:"__raw_#{name}__"] = {
24
24
  body:->(*args,&blk) {
25
- @__executor__.execute @__meta__, path, args, blk
25
+ __executor__.execute @__meta__, path, args, blk
26
26
  },
27
27
  private: true
28
28
  }
@@ -1,17 +1,21 @@
1
1
  module Alki
2
2
  module Execution
3
3
  class Reference
4
- attr_accessor :executor, :meta, :path, :args, :blk
5
- def initialize(executor,meta,path,args,blk)
6
- @executor = executor
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
- @executor.execute @meta, @path, @args, @blk
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(self,meta).__call__ *args, &blk
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
@@ -1,3 +1,3 @@
1
1
  module Alki
2
- VERSION = "0.13.0"
2
+ VERSION = "0.13.1"
3
3
  end
@@ -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.0
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 00:00:00.000000000 Z
11
+ date: 2017-11-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: alki-dsl