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 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