alki 0.12.0 → 0.12.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.
Files changed (60) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +1 -0
  3. data/README.adoc +132 -20
  4. data/Rakefile +2 -27
  5. data/alki.gemspec +1 -3
  6. data/bin/bundler +17 -0
  7. data/bin/rake +17 -0
  8. data/doc/assemblies.adoc +2 -3
  9. data/doc/assembly_dsl.adoc +191 -30
  10. data/doc/{projects.adoc → executables.adoc} +40 -16
  11. data/doc/index.adoc +4 -3
  12. data/lib/alki.rb +3 -0
  13. data/lib/alki/assembly.rb +4 -34
  14. data/lib/alki/assembly/builder.rb +3 -3
  15. data/lib/alki/assembly/instance.rb +31 -5
  16. data/lib/alki/assembly/instance_builder.rb +48 -0
  17. data/lib/alki/assembly/meta/overlay.rb +7 -2
  18. data/lib/alki/assembly/meta/tags.rb +4 -4
  19. data/lib/alki/assembly/types.rb +9 -0
  20. data/lib/alki/assembly/types/assembly.rb +3 -3
  21. data/lib/alki/assembly/types/group.rb +16 -25
  22. data/lib/alki/assembly/types/original.rb +12 -0
  23. data/lib/alki/assembly/types/override.rb +0 -2
  24. data/lib/alki/assembly/types/service.rb +4 -4
  25. data/lib/alki/circular_reference_error.rb +25 -0
  26. data/lib/alki/dsls/assembly.rb +1 -1
  27. data/lib/alki/dsls/assembly_group.rb +28 -12
  28. data/lib/alki/execution/context_class_builder.rb +1 -1
  29. data/lib/alki/execution/helpers.rb +4 -4
  30. data/lib/alki/execution/overlay_map.rb +37 -0
  31. data/lib/alki/execution/tag_map.rb +42 -0
  32. data/lib/alki/executor.rb +140 -0
  33. data/lib/alki/override_builder.rb +30 -24
  34. data/lib/alki/overrides.rb +4 -0
  35. data/lib/alki/version.rb +1 -1
  36. data/test/feature/mounts_test.rb +15 -0
  37. data/test/feature/multithreading_test.rb +0 -3
  38. data/test/feature/overlays_test.rb +2 -2
  39. data/test/feature/overrides_test.rb +26 -1
  40. data/test/feature/references_test.rb +35 -0
  41. data/test/feature/try_mounts_test.rb +23 -0
  42. data/test/feature/values_test.rb +14 -0
  43. data/test/feature_test_helper.rb +1 -0
  44. data/test/fixtures/example/config/assembly.rb +17 -8
  45. data/test/fixtures/example/config/handlers.rb +10 -5
  46. data/test/fixtures/example/lib/dsls/num_handler.rb +2 -2
  47. data/test/fixtures/example/lib/example/array_output.rb +13 -0
  48. data/test/fixtures/example/lib/example/echo_handler.rb +11 -0
  49. data/test/fixtures/example/lib/example/log_overlay.rb +12 -0
  50. data/test/fixtures/example/lib/example/num_handler.rb +13 -0
  51. data/test/fixtures/example/lib/example/range_handler.rb +13 -0
  52. data/test/fixtures/example/lib/example/switch_handler.rb +11 -0
  53. metadata +39 -44
  54. data/lib/alki/assembly/executor.rb +0 -137
  55. data/test/fixtures/example/lib/array_output.rb +0 -11
  56. data/test/fixtures/example/lib/echo_handler.rb +0 -9
  57. data/test/fixtures/example/lib/log_overlay.rb +0 -10
  58. data/test/fixtures/example/lib/num_handler.rb +0 -11
  59. data/test/fixtures/example/lib/range_handler.rb +0 -11
  60. data/test/fixtures/example/lib/switch_handler.rb +0 -9
@@ -0,0 +1,4 @@
1
+ require 'concurrent/immutable_struct'
2
+ module Alki
3
+ Overrides = Concurrent::ImmutableStruct.new(:root,:meta)
4
+ end
@@ -1,3 +1,3 @@
1
1
  module Alki
2
- VERSION = "0.12.0"
2
+ VERSION = "0.12.1"
3
3
  end
@@ -0,0 +1,15 @@
1
+ require 'alki/feature_test'
2
+
3
+ describe 'Mounts' do
4
+ it 'should attach assembly to main assembly as a group' do
5
+ Alki.create_assembly(name: 'alki_test') do
6
+ set :val, :test
7
+ end
8
+
9
+ assembly = Alki.singleton_assembly do
10
+ mount :mounted, AlkiTest
11
+ end
12
+
13
+ assembly.mounted.val.must_equal :test
14
+ end
15
+ end
@@ -23,9 +23,6 @@ describe 'Multithreading' do
23
23
  sleep 0.1
24
24
  thread2.alive?.must_equal true
25
25
  e.set
26
- sleep 0.1
27
- thread2.alive?.must_equal false
28
-
29
26
  thread.join
30
27
  thread2.join
31
28
  end
@@ -196,12 +196,12 @@ describe 'Overlays' do
196
196
  :test
197
197
  end
198
198
  mount :mounted, child do
199
- overlay 'original.svc1', :test_overlay
199
+ overlay 'svc1', :test_overlay
200
200
  set :test_overlay, ->(value) {:parent}
201
201
  end
202
202
  end
203
203
  obj = assembly.new do
204
- overlay 'original.svc2', :test_overlay
204
+ overlay 'svc2', :test_overlay
205
205
  set :test_overlay, ->(value) {:child}
206
206
  end
207
207
  obj.svc2.must_equal :child
@@ -5,6 +5,10 @@ require 'stringio'
5
5
  describe 'Overrides' do
6
6
  before do
7
7
  @assembly = Alki.create_assembly do
8
+ set :val do
9
+ :value
10
+ end
11
+
8
12
  set :log_io do
9
13
  raise "Must set log_io"
10
14
  end
@@ -39,11 +43,32 @@ describe 'Overrides' do
39
43
  set :log_io, io
40
44
  group :util do
41
45
  service :logger do
42
- logger_class.new original.log_io
46
+ logger_class.new log_io
43
47
  end
44
48
  end
45
49
  end
46
50
  instance.util.logger.info "test"
47
51
  io.string.must_equal "INFO test"
48
52
  end
53
+
54
+ it 'should allow calling original when mounted' do
55
+ other = @assembly
56
+ instance = Alki.singleton_assembly do
57
+ mount :assembly, other do
58
+ set :val do
59
+ original.val
60
+ end
61
+ end
62
+ end
63
+ instance.assembly.val.must_equal :value
64
+ end
65
+
66
+ it 'should allow calling original service' do
67
+ instance = @assembly.new do
68
+ set :val do
69
+ original.val
70
+ end
71
+ end
72
+ instance.val.must_equal :value
73
+ end
49
74
  end
@@ -0,0 +1,35 @@
1
+ require 'alki/feature_test'
2
+
3
+ describe 'References' do
4
+ describe 'circular references' do
5
+ before do
6
+ @assembly = Alki.singleton_assembly do
7
+ set :a do
8
+ b
9
+ end
10
+
11
+ set :b do
12
+ c
13
+ end
14
+
15
+ set :c do
16
+ a
17
+ end
18
+
19
+ set :d do
20
+ a
21
+ end
22
+ end
23
+ end
24
+
25
+ it 'should raise CircularReferenceError' do
26
+ err = assert_raises Alki::CircularReferenceError do
27
+ @assembly.d
28
+ end
29
+
30
+ err.to_s.split("\n")[1..-1].must_equal(
31
+ [ ' d', '> a', ' b', ' c', '> a' ]
32
+ )
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,23 @@
1
+ require 'alki/feature_test'
2
+
3
+ describe 'Try mounts' do
4
+ it 'should not mount if other assembly can be found' do
5
+ obj = Alki.singleton_assembly do
6
+ try_mount :other, 'missing_assembly'
7
+ set :val do
8
+ respond_to? :other
9
+ end
10
+ end
11
+ obj.val.must_equal false
12
+ end
13
+
14
+ it 'should mount if other assembly can be found' do
15
+ obj = Alki.singleton_assembly do
16
+ try_mount :other, 'example' # example fixture assembly
17
+ set :val do
18
+ respond_to? :other
19
+ end
20
+ end
21
+ obj.val.must_equal true
22
+ end
23
+ end
@@ -0,0 +1,14 @@
1
+ require 'alki/feature_test'
2
+
3
+ describe 'Values' do
4
+ it 'should not be altered' do
5
+ obj = Class.new(MiniTest::Mock) do
6
+ def respond_to?(*_)
7
+ true
8
+ end
9
+ end.new
10
+ Alki.singleton_assembly do
11
+ set :obj, obj
12
+ end
13
+ end
14
+ end
@@ -27,6 +27,7 @@ class Minitest::Spec
27
27
  undefine :Example, false
28
28
  undefine :Tlogger, false
29
29
  undefine :AutoGroupTest, false
30
+ undefine :AlkiTest, false
30
31
  end
31
32
 
32
33
  def undefine(sym,force=true)
@@ -5,17 +5,26 @@ Alki do
5
5
  load :handlers
6
6
 
7
7
  factory :log_overlay do
8
- require 'log_overlay'
8
+ require 'example/log_overlay'
9
9
  -> (obj) {
10
- alki.delegate_overlay obj, LogOverlay.new(log), name: meta[:building]
10
+ # Don't overlay services in subgroups (names with multiple periods)
11
+ if meta[:building] =~ /\..*\./
12
+ obj
13
+ else
14
+ alki.delegate_overlay(
15
+ obj,
16
+ Example::LogOverlay.new(log),
17
+ name: meta[:building]
18
+ )
19
+ end
11
20
  }
12
21
  end
13
22
 
14
23
  overlay :handlers, :log_overlay
15
24
 
16
25
  service :handler do
17
- require 'switch_handler'
18
- SwitchHandler.new [
26
+ require 'example/switch_handler'
27
+ Example::SwitchHandler.new [
19
28
  handlers.fizzbuzz,
20
29
  handlers.fizz,
21
30
  handlers.buzz,
@@ -28,13 +37,13 @@ Alki do
28
37
  end
29
38
 
30
39
  service :range_handler do
31
- require 'range_handler'
32
- RangeHandler.new lazy('handler')
40
+ require 'example/range_handler'
41
+ Example::RangeHandler.new lazy('handler')
33
42
  end
34
43
 
35
44
  service :output do
36
- require 'array_output'
37
- ArrayOutput.new
45
+ require 'example/array_output'
46
+ Example::ArrayOutput.new
38
47
  end
39
48
 
40
49
  service :log_io do
@@ -2,16 +2,21 @@ Alki do
2
2
  use 'example/dsls/num_handler'
3
3
 
4
4
  factory :num_handler do
5
- require 'num_handler'
5
+ require 'example/num_handler'
6
6
  -> (num,str) {
7
- NumHandler.new(num, str, output)
7
+ Example::NumHandler.new(num, str, output)
8
8
  }
9
9
  end
10
10
 
11
11
  num_handler :fizz, 3
12
12
 
13
+
14
+ group :handlers do
15
+ num_handler :buzz, 5
16
+ end
17
+
13
18
  service :buzz do
14
- num_handler 5, settings.buzz
19
+ handlers.buzz
15
20
  end
16
21
 
17
22
  service :fizzbuzz do
@@ -19,7 +24,7 @@ Alki do
19
24
  end
20
25
 
21
26
  service :echo do
22
- require 'echo_handler'
23
- EchoHandler.new output
27
+ require 'example/echo_handler'
28
+ Example::EchoHandler.new output
24
29
  end
25
30
  end
@@ -1,8 +1,8 @@
1
1
  Alki do
2
2
  dsl_method :num_handler do |name, num|
3
3
  ctx[:module].service name do
4
- require 'num_handler'
5
- NumHandler.new(num,settings.send(name),output)
4
+ require 'example/num_handler'
5
+ Example::NumHandler.new(num,settings.send(name),output)
6
6
  end
7
7
  end
8
8
  end
@@ -0,0 +1,13 @@
1
+ module Example
2
+ class ArrayOutput
3
+ def initialize
4
+ @output = []
5
+ end
6
+ def <<(val)
7
+ @output << val
8
+ end
9
+ def to_a
10
+ @output.dup
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,11 @@
1
+ module Example
2
+ class EchoHandler
3
+ def initialize(output)
4
+ @output = output
5
+ end
6
+
7
+ def handle(val)
8
+ @output << val.to_s
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,12 @@
1
+ module Example
2
+ class LogOverlay
3
+ def initialize(log)
4
+ @log = log
5
+ end
6
+
7
+ def overlay_send(obj,info,method,*args,&blk)
8
+ @log << "Calling #{info[:name]}##{method} #{args.join(", ")}\n"
9
+ obj.public_send method, *args, &blk
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,13 @@
1
+ module Example
2
+ class NumHandler
3
+ def initialize(num,message,output)
4
+ @num = num
5
+ @msg = message
6
+ @output = output
7
+ end
8
+
9
+ def handle(val)
10
+ @output << @msg if val % @num == 0
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ module Example
2
+ class RangeHandler
3
+ def initialize(subhandler)
4
+ @subhandler = subhandler
5
+ end
6
+
7
+ def handle(range)
8
+ range.each do |i|
9
+ @subhandler.handle i
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,11 @@
1
+ module Example
2
+ class SwitchHandler
3
+ def initialize(handlers)
4
+ @types = handlers
5
+ end
6
+
7
+ def handle(val)
8
+ @types.find {|h| h.handle val }
9
+ end
10
+ end
11
+ end
metadata CHANGED
@@ -1,43 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: alki
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.12.0
4
+ version: 0.12.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-05-18 00:00:00.000000000 Z
11
+ date: 2017-08-31 00:00:00.000000000 Z
12
12
  dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: bundler
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - "~>"
18
- - !ruby/object:Gem::Version
19
- version: '1.6'
20
- type: :development
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - "~>"
25
- - !ruby/object:Gem::Version
26
- version: '1.6'
27
- - !ruby/object:Gem::Dependency
28
- name: rake
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - "~>"
32
- - !ruby/object:Gem::Version
33
- version: '10.0'
34
- type: :development
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - "~>"
39
- - !ruby/object:Gem::Version
40
- version: '10.0'
41
13
  - !ruby/object:Gem::Dependency
42
14
  name: alki-dsl
43
15
  requirement: !ruby/object:Gem::Requirement
@@ -45,6 +17,9 @@ dependencies:
45
17
  - - "~>"
46
18
  - !ruby/object:Gem::Version
47
19
  version: '0.5'
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 0.5.1
48
23
  type: :runtime
49
24
  prerelease: false
50
25
  version_requirements: !ruby/object:Gem::Requirement
@@ -52,6 +27,9 @@ dependencies:
52
27
  - - "~>"
53
28
  - !ruby/object:Gem::Version
54
29
  version: '0.5'
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 0.5.1
55
33
  - !ruby/object:Gem::Dependency
56
34
  name: alki-support
57
35
  requirement: !ruby/object:Gem::Requirement
@@ -110,30 +88,35 @@ files:
110
88
  - Rakefile
111
89
  - alki.gemspec
112
90
  - bin/alki
91
+ - bin/bundler
92
+ - bin/rake
113
93
  - config/assembly.rb
114
94
  - doc/assemblies.adoc
115
95
  - doc/assembly_dsl.adoc
96
+ - doc/executables.adoc
116
97
  - doc/index.adoc
117
- - doc/projects.adoc
118
98
  - exe/alki
119
99
  - lib/alki.rb
120
100
  - lib/alki/assembly.rb
121
101
  - lib/alki/assembly/builder.rb
122
- - lib/alki/assembly/executor.rb
123
102
  - lib/alki/assembly/handler.rb
124
103
  - lib/alki/assembly/instance.rb
104
+ - lib/alki/assembly/instance_builder.rb
125
105
  - lib/alki/assembly/meta/overlay.rb
126
106
  - lib/alki/assembly/meta/tags.rb
127
107
  - lib/alki/assembly/type.rb
108
+ - lib/alki/assembly/types.rb
128
109
  - lib/alki/assembly/types/assembly.rb
129
110
  - lib/alki/assembly/types/factory.rb
130
111
  - lib/alki/assembly/types/func.rb
131
112
  - lib/alki/assembly/types/group.rb
113
+ - lib/alki/assembly/types/original.rb
132
114
  - lib/alki/assembly/types/override.rb
133
115
  - lib/alki/assembly/types/proc_value.rb
134
116
  - lib/alki/assembly/types/service.rb
135
117
  - lib/alki/assembly/types/value.rb
136
118
  - lib/alki/bin.rb
119
+ - lib/alki/circular_reference_error.rb
137
120
  - lib/alki/dsls/assembly.rb
138
121
  - lib/alki/dsls/assembly_group.rb
139
122
  - lib/alki/dsls/assembly_type.rb
@@ -143,13 +126,17 @@ files:
143
126
  - lib/alki/execution/context_class_builder.rb
144
127
  - lib/alki/execution/factory.rb
145
128
  - lib/alki/execution/helpers.rb
129
+ - lib/alki/execution/overlay_map.rb
146
130
  - lib/alki/execution/reference.rb
131
+ - lib/alki/execution/tag_map.rb
147
132
  - lib/alki/execution/value_helpers.rb
133
+ - lib/alki/executor.rb
148
134
  - lib/alki/generator.rb
149
135
  - lib/alki/invalid_path_error.rb
150
136
  - lib/alki/overlay_delegator.rb
151
137
  - lib/alki/overlay_info.rb
152
138
  - lib/alki/override_builder.rb
139
+ - lib/alki/overrides.rb
153
140
  - lib/alki/service_delegator.rb
154
141
  - lib/alki/version.rb
155
142
  - lib/alki_loader.rb
@@ -157,13 +144,17 @@ files:
157
144
  - test/feature/auto_group_test.rb
158
145
  - test/feature/example_test.rb
159
146
  - test/feature/factories_test.rb
147
+ - test/feature/mounts_test.rb
160
148
  - test/feature/multithreading_test.rb
161
149
  - test/feature/overlays_test.rb
162
150
  - test/feature/overrides_test.rb
163
151
  - test/feature/pseudo_elements_test.rb
164
152
  - test/feature/reference_overlays_test.rb
153
+ - test/feature/references_test.rb
165
154
  - test/feature/reload_test.rb
166
155
  - test/feature/tags_test.rb
156
+ - test/feature/try_mounts_test.rb
157
+ - test/feature/values_test.rb
167
158
  - test/feature_test_helper.rb
168
159
  - test/fixtures/auto_group/lib/alki_loader.rb
169
160
  - test/fixtures/auto_group/lib/auto_group_dsl.rb
@@ -173,14 +164,14 @@ files:
173
164
  - test/fixtures/example/config/handlers.rb
174
165
  - test/fixtures/example/config/settings.rb
175
166
  - test/fixtures/example/lib/alki_loader.rb
176
- - test/fixtures/example/lib/array_output.rb
177
167
  - test/fixtures/example/lib/dsls/num_handler.rb
178
- - test/fixtures/example/lib/echo_handler.rb
179
168
  - test/fixtures/example/lib/example.rb
180
- - test/fixtures/example/lib/log_overlay.rb
181
- - test/fixtures/example/lib/num_handler.rb
182
- - test/fixtures/example/lib/range_handler.rb
183
- - test/fixtures/example/lib/switch_handler.rb
169
+ - test/fixtures/example/lib/example/array_output.rb
170
+ - test/fixtures/example/lib/example/echo_handler.rb
171
+ - test/fixtures/example/lib/example/log_overlay.rb
172
+ - test/fixtures/example/lib/example/num_handler.rb
173
+ - test/fixtures/example/lib/example/range_handler.rb
174
+ - test/fixtures/example/lib/example/switch_handler.rb
184
175
  - test/fixtures/tlogger/config/assembly.rb
185
176
  - test/fixtures/tlogger/lib/tlogger.rb
186
177
  - test/integration/dsls/assembly_test.rb
@@ -215,13 +206,17 @@ test_files:
215
206
  - test/feature/auto_group_test.rb
216
207
  - test/feature/example_test.rb
217
208
  - test/feature/factories_test.rb
209
+ - test/feature/mounts_test.rb
218
210
  - test/feature/multithreading_test.rb
219
211
  - test/feature/overlays_test.rb
220
212
  - test/feature/overrides_test.rb
221
213
  - test/feature/pseudo_elements_test.rb
222
214
  - test/feature/reference_overlays_test.rb
215
+ - test/feature/references_test.rb
223
216
  - test/feature/reload_test.rb
224
217
  - test/feature/tags_test.rb
218
+ - test/feature/try_mounts_test.rb
219
+ - test/feature/values_test.rb
225
220
  - test/feature_test_helper.rb
226
221
  - test/fixtures/auto_group/lib/alki_loader.rb
227
222
  - test/fixtures/auto_group/lib/auto_group_dsl.rb
@@ -231,14 +226,14 @@ test_files:
231
226
  - test/fixtures/example/config/handlers.rb
232
227
  - test/fixtures/example/config/settings.rb
233
228
  - test/fixtures/example/lib/alki_loader.rb
234
- - test/fixtures/example/lib/array_output.rb
235
229
  - test/fixtures/example/lib/dsls/num_handler.rb
236
- - test/fixtures/example/lib/echo_handler.rb
237
230
  - test/fixtures/example/lib/example.rb
238
- - test/fixtures/example/lib/log_overlay.rb
239
- - test/fixtures/example/lib/num_handler.rb
240
- - test/fixtures/example/lib/range_handler.rb
241
- - test/fixtures/example/lib/switch_handler.rb
231
+ - test/fixtures/example/lib/example/array_output.rb
232
+ - test/fixtures/example/lib/example/echo_handler.rb
233
+ - test/fixtures/example/lib/example/log_overlay.rb
234
+ - test/fixtures/example/lib/example/num_handler.rb
235
+ - test/fixtures/example/lib/example/range_handler.rb
236
+ - test/fixtures/example/lib/example/switch_handler.rb
242
237
  - test/fixtures/tlogger/config/assembly.rb
243
238
  - test/fixtures/tlogger/lib/tlogger.rb
244
239
  - test/integration/dsls/assembly_test.rb