alki 0.11.0 → 0.12.0

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