alki 0.12.0 → 0.12.1

Sign up to get free protection for your applications and to get access to all the features.
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