alki 0.11.0 → 0.12.0

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: 3555b8b45ee20ff856590c5bd5b38cd91042d93a
4
- data.tar.gz: d97785bfd1cc1cb00da4166f08af02dc959149ee
3
+ metadata.gz: d65c6ea707a3c2b160cf29edcb6cdd092a9239f3
4
+ data.tar.gz: 9ec9b017122f9a6a0cd2c5741835e2a0b0bd570b
5
5
  SHA512:
6
- metadata.gz: 47710dd291c0d8d8c4bdcff0d01bf9d4c4c370697183aba0a846ddfbef1ffe1022eab6848227af07eccdf2c48773fce4856bf1c5f56c0ba78a44440e04bce1b3
7
- data.tar.gz: 844374a0d77f694b1b7075326b5fbe5528dea1835a93bfe619a8289703edb2988c1d9ba385acaf32d2eeba93efda4a23e44d54755d21fa475d3cd73cd6820aae
6
+ metadata.gz: ad08a969ea2df6707a7e92139a52d70d1cbf5549d5bf5566dfe11f1253b5b014d2e4db986dd94585db0a85faf9a0aacc93cffcd04d7e01efe41695f940e47216
7
+ data.tar.gz: b0ba6db2280081859a064f287b144ec7425de30f0d090370c900c8b0e37c2b56562a4599e9be97f4b2ba6044f9a4fb7f9102db2cb6cb1bec7e1c266777b03f9c
data/Gemfile CHANGED
@@ -1,5 +1,5 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
- gem 'alki-testing', path: '/home/matt/Projects/personal/alki/alki-testing'
3
+ gem 'alki-testing'
4
4
 
5
5
  gemspec
data/alki.gemspec CHANGED
@@ -20,7 +20,7 @@ Gem::Specification.new do |spec|
20
20
 
21
21
  spec.add_development_dependency "bundler", "~> 1.6"
22
22
  spec.add_development_dependency "rake", '~> 10.0'
23
- spec.add_dependency "alki-dsl", "~> 0.4", ">= 0.4.2"
23
+ spec.add_dependency "alki-dsl", "~> 0.5"
24
24
  spec.add_dependency "alki-support", "~> 0.7"
25
25
  spec.add_dependency "concurrent-ruby", "~> 1.0"
26
26
  spec.add_dependency "ice_nine", "~> 0.11"
data/config/assembly.rb CHANGED
@@ -7,13 +7,11 @@ Alki do
7
7
  end
8
8
 
9
9
  factory :build_service do
10
- -> (klass, grp=nil) {
10
+ -> (klass, grp=nil, args=[]) {
11
11
  klass = Alki.load klass
12
12
  grp ||= parent
13
- args = if klass.respond_to? :uses
14
- klass.uses.map {|path| grp.lookup path }
15
- else
16
- []
13
+ if klass.respond_to? :uses
14
+ args += klass.uses.map {|path| grp.lookup path }
17
15
  end
18
16
  klass.new *args
19
17
  }
@@ -1,7 +1,6 @@
1
1
  require 'delegate'
2
2
  require 'concurrent'
3
3
  require 'alki/support'
4
- require 'concurrent'
5
4
 
6
5
  module Alki
7
6
  module Assembly
@@ -8,8 +8,8 @@ module Alki
8
8
 
9
9
  def process(_executor,from,data)
10
10
  data[:tags]||={}
11
- @tags.each do |tag|
12
- (data[:tags][tag.to_sym]||=[]) << from
11
+ @tags.each do |tag,value|
12
+ (data[:tags][tag.to_sym]||={})[from] = value
13
13
  end
14
14
  end
15
15
  end
@@ -1,5 +1,6 @@
1
1
  Alki do
2
2
  require 'alki/execution/value_helpers'
3
+ require 'alki/execution/factory'
3
4
 
4
5
  attr :block
5
6
 
@@ -19,7 +20,7 @@ Alki do
19
20
  if !args.empty? || blk
20
21
  __create__ *args, &blk
21
22
  else
22
- method(:__create__)
23
+ Alki::Execution::Factory.new method(:__create__)
23
24
  end
24
25
  }
25
26
  }
@@ -1,4 +1,5 @@
1
1
  Alki do
2
+ require 'ostruct'
2
3
  require 'alki/execution/helpers'
3
4
 
4
5
  attr(:children){ {} }
@@ -8,9 +9,9 @@ Alki do
8
9
 
9
10
  data[:tags] ||= {}
10
11
  data[:tags] = data[:tags].inject({}) do |tags,(tag,tagged)|
11
- tagged.each do |path|
12
+ tagged.each do |path,value|
12
13
  if path.empty? || path[0] == key.to_sym
13
- tags[tag] = (tags[tag]||[]) | [path[1..-1]]
14
+ (tags[tag]||={})[(path[1..-1]||[])] = value
14
15
  end
15
16
  end
16
17
  tags
@@ -22,8 +23,8 @@ Alki do
22
23
  if target.size == 1 && target[0].to_s.start_with?('%')
23
24
  tags = data[:tags][target[0].to_s[1..-1].to_sym]
24
25
  if tags
25
- tags.each do |target|
26
- (no[target]||=[]).push *overlays
26
+ tags.keys.each do |path|
27
+ (no[path]||=[]).push *overlays
27
28
  end
28
29
  end
29
30
  elsif target.empty? || target.shift == key.to_sym
@@ -46,7 +47,7 @@ Alki do
46
47
  methods: {
47
48
  children: -> {
48
49
  children_names
49
- }
50
+ },
50
51
  },
51
52
  proc: ->{self}
52
53
  }
@@ -7,6 +7,7 @@ Alki do
7
7
  overlays = (data[:overlays][[]]||[]).sort_by(&:order).group_by(&:type)
8
8
  value_overlays = overlays[:value]||[]
9
9
  reference_overlays = overlays[:reference]||[]
10
+ tags = data[:tags].inject({}){|tags,(tag,tagged)| tags[tag] = tagged[[]]; tags}
10
11
  methods = {
11
12
  __build__: block,
12
13
  __apply_overlays__: -> obj, overlays {
@@ -34,6 +35,7 @@ Alki do
34
35
  },
35
36
  modules: [Alki::Execution::Helpers],
36
37
  scope: data[:scope],
38
+ meta: {tags: tags}
37
39
  }
38
40
  end
39
41
  end
@@ -6,6 +6,10 @@ Alki do
6
6
  init do
7
7
  ctx[:root] = build(:group,{})
8
8
  ctx[:meta] = []
9
+ @addons = Array ctx[:addons]
10
+ @addons.each do |addon|
11
+ require_dsl addon
12
+ end
9
13
  end
10
14
 
11
15
  helper :add do |name,elem|
@@ -25,7 +29,7 @@ Alki do
25
29
  Alki.load("alki/assembly/meta/#{type}").new *args
26
30
  end
27
31
 
28
- dsl_method :add_overlay do |type,target,overlay,args|
32
+ helper :add_overlay do |type,target,overlay,args|
29
33
  (ctx[:meta]||=[]) << [
30
34
  [],
31
35
  build_meta(
@@ -48,11 +52,21 @@ Alki do
48
52
  ctx[:meta].push *prefix_meta(*prefix,meta)
49
53
  end
50
54
 
51
- dsl_method :tag do |*tags|
55
+ dsl_method :use do |addon_name|
56
+ addon = Alki.load addon_name
57
+ if addon.respond_to?(:alki_addon)
58
+ addon = addon.alki_addon
59
+ end
60
+ require_dsl addon
61
+ @addons << addon
62
+ end
63
+
64
+ dsl_method :tag do |*tags,**value_tags|
52
65
  unless tags.all?{|t| t.is_a? Symbol }
53
66
  raise "Tags must be symbols"
54
67
  end
55
- @tags = tags
68
+ tags.each {|tag| value_tags[tag] = true }
69
+ @tags = value_tags
56
70
  end
57
71
 
58
72
  dsl_method :config_dir do
@@ -0,0 +1,16 @@
1
+ require 'forwardable'
2
+
3
+ module Alki
4
+ module Execution
5
+ class Factory
6
+ extend Forwardable
7
+
8
+ def initialize(method)
9
+ @method = method
10
+ end
11
+
12
+ def_delegators :@method, :call, :to_proc, :to_s, :[]
13
+ def_delegator :@method, :call, :new
14
+ end
15
+ end
16
+ end
@@ -10,7 +10,11 @@ module Alki
10
10
  end
11
11
  elem.to_s.split('.').inject(group) do |group,name|
12
12
  raise "Invalid lookup elem" unless group.is_a? Helpers
13
- group.send name.to_sym
13
+ if name =~ /^\d/
14
+ group[name.to_i]
15
+ else
16
+ group.send name.to_sym
17
+ end
14
18
  end
15
19
  end
16
20
  end
data/lib/alki/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Alki
2
- VERSION = "0.11.0"
2
+ VERSION = "0.12.0"
3
3
  end
@@ -36,13 +36,31 @@ describe 'Factories' do
36
36
  proc_counter.must_equal 2
37
37
  end
38
38
 
39
- it 'should return Proc of factory if no arguments are provided when referenced' do
40
- assembly do
41
- factory :test do
42
- -> (val) { val + 1 }
39
+ describe 'if no arguments are provided' do
40
+ before do
41
+ assembly do
42
+ factory :test do
43
+ -> (val) { val + 1 }
44
+ end
43
45
  end
44
46
  end
45
- proc = obj.test
46
- proc.call(1).must_equal 2
47
+
48
+ def just_yield(*args)
49
+ yield *args
50
+ end
51
+
52
+ it 'should return object with call methods' do
53
+ obj.test.call(1).must_equal 2
54
+ obj.test[1].must_equal 2
55
+ obj.test.(1).must_equal 2
56
+ end
57
+
58
+ it 'should return object with #new method' do
59
+ obj.test.new(1).must_equal 2
60
+ end
61
+
62
+ it 'should return object that is convertible to a proc' do
63
+ just_yield(1,&obj.test).must_equal 2
64
+ end
47
65
  end
48
66
  end
@@ -21,4 +21,36 @@ describe 'Reference Overlays' do
21
21
  end
22
22
  assembly.new.svc.must_equal :oval_osvc_ofunc_of1_of2
23
23
  end
24
+
25
+ it 'should work on tags across mounts' do
26
+ child = Alki.create_assembly do
27
+ set :val, :svc1
28
+
29
+ tag :tag1
30
+ service :svc1 do
31
+ val
32
+ end
33
+
34
+ reference_overlay '%tag2', :overlay
35
+ set :overlay, -> val { :"child_#{val.call}"}
36
+ end
37
+
38
+ assembly = Alki.create_assembly do
39
+ mount :child, child
40
+
41
+ set :val2, :svc2
42
+
43
+ tag :tag2
44
+ service :svc2 do
45
+ val2
46
+ end
47
+
48
+ reference_overlay '%tag1', :overlay
49
+ set :overlay, -> val { :"parent_#{val.call}"}
50
+ end
51
+ obj = assembly.new
52
+
53
+ obj.svc2.must_equal :child_svc2
54
+ obj.child.svc1.must_equal :parent_svc1
55
+ end
24
56
  end
@@ -1,6 +1,20 @@
1
1
  require 'alki/feature_test'
2
2
 
3
3
  describe 'Tags' do
4
+ it 'should allow accessing tags in services' do
5
+ assembly = Alki.create_assembly do
6
+ tag :tag1, tag2: false
7
+ group :grp do
8
+ tag :tag2, tag3: :value
9
+ service :svc1 do
10
+ meta[:tags]
11
+ end
12
+ end
13
+ end
14
+ obj = assembly.new
15
+ obj.grp.svc1.must_equal tag1: true, tag2: true, tag3: :value
16
+ end
17
+
4
18
  it 'should allow setting overlays via tags' do
5
19
  assembly = Alki.create_assembly do
6
20
  tag :tag1, :tag2
@@ -1,4 +1,6 @@
1
1
  Alki do
2
+ use 'example/dsls/num_handler'
3
+
2
4
  factory :num_handler do
3
5
  require 'num_handler'
4
6
  -> (num,str) {
@@ -6,9 +8,7 @@ Alki do
6
8
  }
7
9
  end
8
10
 
9
- service :fizz do
10
- num_handler 3, settings.fizz
11
- end
11
+ num_handler :fizz, 3
12
12
 
13
13
  service :buzz do
14
14
  num_handler 5, settings.buzz
@@ -0,0 +1 @@
1
+ Alki::Loader.register 'dsls', builder: 'alki/dsls/dsl', name: 'example/dsls'
@@ -0,0 +1,8 @@
1
+ Alki do
2
+ dsl_method :num_handler do |name, num|
3
+ ctx[:module].service name do
4
+ require 'num_handler'
5
+ NumHandler.new(num,settings.send(name),output)
6
+ end
7
+ end
8
+ 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.11.0
4
+ version: 0.12.0
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-03-05 00:00:00.000000000 Z
11
+ date: 2017-05-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -44,20 +44,14 @@ dependencies:
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '0.4'
48
- - - ">="
49
- - !ruby/object:Gem::Version
50
- version: 0.4.2
47
+ version: '0.5'
51
48
  type: :runtime
52
49
  prerelease: false
53
50
  version_requirements: !ruby/object:Gem::Requirement
54
51
  requirements:
55
52
  - - "~>"
56
53
  - !ruby/object:Gem::Version
57
- version: '0.4'
58
- - - ">="
59
- - !ruby/object:Gem::Version
60
- version: 0.4.2
54
+ version: '0.5'
61
55
  - !ruby/object:Gem::Dependency
62
56
  name: alki-support
63
57
  requirement: !ruby/object:Gem::Requirement
@@ -147,6 +141,7 @@ files:
147
141
  - lib/alki/execution/cache_entry.rb
148
142
  - lib/alki/execution/context.rb
149
143
  - lib/alki/execution/context_class_builder.rb
144
+ - lib/alki/execution/factory.rb
150
145
  - lib/alki/execution/helpers.rb
151
146
  - lib/alki/execution/reference.rb
152
147
  - lib/alki/execution/value_helpers.rb
@@ -177,7 +172,9 @@ files:
177
172
  - test/fixtures/example/config/assembly.rb
178
173
  - test/fixtures/example/config/handlers.rb
179
174
  - test/fixtures/example/config/settings.rb
175
+ - test/fixtures/example/lib/alki_loader.rb
180
176
  - test/fixtures/example/lib/array_output.rb
177
+ - test/fixtures/example/lib/dsls/num_handler.rb
181
178
  - test/fixtures/example/lib/echo_handler.rb
182
179
  - test/fixtures/example/lib/example.rb
183
180
  - test/fixtures/example/lib/log_overlay.rb
@@ -233,7 +230,9 @@ test_files:
233
230
  - test/fixtures/example/config/assembly.rb
234
231
  - test/fixtures/example/config/handlers.rb
235
232
  - test/fixtures/example/config/settings.rb
233
+ - test/fixtures/example/lib/alki_loader.rb
236
234
  - test/fixtures/example/lib/array_output.rb
235
+ - test/fixtures/example/lib/dsls/num_handler.rb
237
236
  - test/fixtures/example/lib/echo_handler.rb
238
237
  - test/fixtures/example/lib/example.rb
239
238
  - test/fixtures/example/lib/log_overlay.rb