alki 0.6.0 → 0.6.1

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: d43f615a01e47c804aef85ffd38c686eee21bf51
4
- data.tar.gz: 87ed48fa6b70d31c1afecc2d8e79c2bced1f3faa
3
+ metadata.gz: bfc0e6ec1368d9f0df28e72d8978aef6afe37ecf
4
+ data.tar.gz: a251bd8975e08e982b0cf18710bb5abbea957cb0
5
5
  SHA512:
6
- metadata.gz: 3111b599c8899e0962810df466bd66141a40720cddd03425084cb7ac8eb435a48b1212bd098449ae08fb6f2c175c70c176280b5a38b7a0afc02ca23d45f92ab4
7
- data.tar.gz: 96e3b8c35bb8998d1cee45664a407c16b9f348f3140f17a69d48279835b4d84015e4f0996538a0b2607a6cba2201b909182af184f8ec14b8a26b1fe5975d74e0
6
+ metadata.gz: 6203b1f5a0914be306e711733aabe161f11346e286a4a2011eeea8d97cff7a2ebc8e5ed6ea41df0506917062b54dab07175b6061a6ccae32bf1cb29294009b91
7
+ data.tar.gz: 3a8d1da8bc5a4396fb5124c7e6b823747942f38b56e046e5933b77d806656b8567276f3e5d129caf1998f415ace2287e722adaf42958d951aa05a7083485467c
data/README.md CHANGED
@@ -9,7 +9,7 @@ It's goal is to remove uncertainty and friction when building Ruby projects, all
9
9
  Best place to start would be to check out some examples:
10
10
 
11
11
  * https://github.com/alki-project/alki-example
12
- * https://github.com/alki-project/alki/test/fixtures/example
12
+ * https://github.com/alki-project/alki/tree/master/test/fixtures/example
13
13
 
14
14
  # The Alki Assembly
15
15
 
data/alki.gemspec CHANGED
@@ -21,6 +21,6 @@ Gem::Specification.new do |spec|
21
21
  spec.add_development_dependency "bundler", "~> 1.6"
22
22
  spec.add_development_dependency "rake", '~> 10.0'
23
23
  spec.add_dependency "minitest", "~> 5.9", '>= 5.9.1'
24
- spec.add_dependency "alki-dsl", "~> 0.3"
24
+ spec.add_dependency "alki-dsl", "~> 0.3", '>= 0.3.1'
25
25
  spec.add_dependency "alki-support", "~> 0.5"
26
26
  end
data/lib/alki/assembly.rb CHANGED
@@ -1,21 +1,52 @@
1
1
  require 'alki/assembly_executor'
2
+ require 'alki/dsls/assembly'
2
3
 
3
4
  module Alki
4
5
  module Assembly
5
- def new
6
- Alki::Assembly::Instance.new assembly, self.assembly_options
7
- end
8
-
9
- def assembly
10
- self.definition.assembly
6
+ def new(overrides={})
7
+ Alki::Assembly::Instance.new create_assembly(overrides), self.assembly_options
11
8
  end
12
9
 
13
10
  def root
14
11
  self.definition.root
15
12
  end
16
13
 
14
+ private
15
+
16
+ def create_assembly(overrides={})
17
+ config_dir = if assembly_options[:load_path]
18
+ build_type :value, assembly_options[:load_path]
19
+ else
20
+ nil
21
+ end
22
+
23
+ build_type :assembly, root, config_dir, create_override_group(overrides)
24
+ end
25
+
26
+
27
+ def create_override_group(overrides)
28
+ unless overrides.empty?
29
+ root = build_type(:group)
30
+ overrides.each do |path,value|
31
+ set_override root, *path.to_s.split('.'), value
32
+ end
33
+ root
34
+ end
35
+ end
36
+
37
+ def set_override(root,*parent_keys,key,value)
38
+ parent = parent_keys.inject(root) do |parent,key|
39
+ parent.children[key.to_sym] ||= build_type(:group)
40
+ end
41
+ parent.children[key.to_sym] = build_type(:value, value)
42
+ end
43
+
44
+ def build_type(type,*args)
45
+ Alki::Support.load_class("alki/assembly_types/#{type}").new *args
46
+ end
47
+
17
48
  class Instance
18
- def initialize(assembly,opts={})
49
+ def initialize(assembly,opts)
19
50
  @assembly = assembly
20
51
  @cache = {}
21
52
  @opts = opts
@@ -55,7 +55,7 @@ module Alki
55
55
  end
56
56
 
57
57
  def set_config_directory(config_dir)
58
- Alki::Dsl.register_dir config_dir, 'alki/dsls/assembly'
58
+ Alki::Dsl.register_dir config_dir, 'alki/dsls/assembly', {config_dir: config_dir}
59
59
  @assembly_options[:load_path] = config_dir
60
60
  end
61
61
 
@@ -49,13 +49,6 @@ module Alki
49
49
  res.elem[:block].call evaluator
50
50
  end
51
51
 
52
- def service(res,path)
53
- with_scope_context(res) do |ctx,blk|
54
- svc = apply_overlays res, path, ctx.instance_exec(&blk)
55
- -> { svc }
56
- end
57
- end
58
-
59
52
  def apply_overlays(res,path,obj)
60
53
  res.elem[:overlays].inject(obj) do |obj,overlay_elem|
61
54
  unless res.cache[overlay_elem[:block]]
@@ -68,15 +61,6 @@ module Alki
68
61
  end
69
62
  end
70
63
 
71
- def factory(res)
72
- with_scope_context(res) do |ctx,blk|
73
- factory = ctx.instance_exec(&blk)
74
- -> (*args,&blk) {
75
- factory.call *args, &blk
76
- }
77
- end
78
- end
79
-
80
64
  def group(res)
81
65
  proc = -> (name,*args,&blk) {
82
66
  call res.pkg, res.cache, res.elem[:scope][name], *args, &blk
@@ -13,12 +13,8 @@ Alki do
13
13
 
14
14
  finish do
15
15
  root = build_group(ctx[:elems], ctx[:overlays])
16
- assembly = build_assembly root, nil
17
16
  add_class_method :root do
18
17
  root
19
18
  end
20
- add_class_method :assembly do
21
- assembly
22
- end
23
19
  end
24
20
  end
@@ -2,36 +2,44 @@ require 'alki/support'
2
2
 
3
3
  Alki do
4
4
  require_dsl 'alki/dsls/assembly_types/group'
5
+ require_dsl 'alki/dsls/assembly_types/value'
5
6
 
6
7
  dsl_method :assembly do |name,pkg=name.to_s,&blk|
7
8
  klass = Alki::Support.load_class pkg
8
-
9
- elem = if blk
10
- build_assembly klass.root, build_group_dsl(blk)
11
- else
12
- klass.root
9
+ config_dir = klass.assembly_options[:load_path]
10
+ config_dir = build_value config_dir if config_dir
11
+ overrides = if blk
12
+ build_group_dsl(blk)
13
13
  end
14
- add name, elem
14
+
15
+ add_assembly name, klass.root, config_dir, overrides
15
16
  end
16
17
 
17
18
  element_type :assembly do
18
19
  attr :root
20
+ attr :config_dir
19
21
  attr :overrides, nil
20
22
 
21
23
  index do
22
- if overrides
23
- data.replace(
24
- main: data.merge(main_data),
25
- override: data.dup,
26
- )
27
- override.index data, key
24
+ if key == :config_dir
25
+ data.merge! main_data
26
+ config_dir
28
27
  else
29
- root.index data.merge!(main_data), key
28
+ if overrides
29
+ data.replace(
30
+ main: data.merge(main_data),
31
+ override: data.dup,
32
+ )
33
+ override.index data, key
34
+ else
35
+ root.index data.merge!(main_data), key
36
+ end
30
37
  end
31
38
  end
32
39
 
33
40
  output do
34
41
  scope = root.output(data)[:scope]
42
+ scope[:config_dir] = (data[:prefix]||[]) + [:config_dir]
35
43
  scope.merge! overrides.output(data)[:scope] if overrides
36
44
  {
37
45
  type: :group,
@@ -12,7 +12,7 @@ Alki do
12
12
 
13
13
  element_type :group do
14
14
  attr :children, {}
15
- attr :overlays
15
+ attr :overlays, []
16
16
 
17
17
  index do
18
18
  data[:scope] ||= {}
@@ -1,54 +1,100 @@
1
1
  Alki do
2
2
  dsl_method :set do |name,value=nil,&blk|
3
- add_value name, false, -> (evaluator) {
4
- val = if blk
5
- evaluator.call blk
6
- else
7
- value
8
- end
9
- -> { val }
10
- }
3
+ if blk
4
+ add_proc_value name, blk
5
+ else
6
+ add_value name, value
7
+ end
11
8
  end
12
9
 
13
10
  dsl_method :service do |name,&blk|
14
- add_value name, true, -> (evaluator) {
15
- svc = evaluator.call blk
16
- -> { svc }
17
- }
11
+ add_service name, blk
18
12
  end
19
13
 
20
14
  dsl_method :factory do |name,&blk|
21
- add_value name, false, -> (evaluator) {
22
- factory = evaluator.call blk
23
- -> (*args,&blk) {
24
- factory.call *args, &blk
15
+ add_factory name, blk
16
+ end
17
+
18
+ dsl_method :func do |name,&blk|
19
+ add_func name, blk
20
+ end
21
+
22
+ element_type :value do
23
+ attr :value
24
+
25
+ output do
26
+ {
27
+ type: :value,
28
+ block: ->(_) {
29
+ val = value
30
+ ->{ val }
31
+ },
32
+ scope: {}
33
+ }
34
+ end
35
+ end
36
+
37
+ element_type :proc_value do
38
+ attr :proc
39
+
40
+ output do
41
+ {
42
+ type: :value,
43
+ block: ->(e) {
44
+ val = e.call proc
45
+ ->{ val }
46
+ },
47
+ scope: data[:scope]
25
48
  }
26
- }
49
+ end
27
50
  end
28
51
 
29
- dsl_method :func do |name,&value_blk|
30
- add_value name, false, -> (evaluator) {
31
- -> (*args,&blk) {
32
- evaluator.call(value_blk,*args,&blk)
52
+ element_type :service do
53
+ attr :block
54
+ output do
55
+ last_clear = data[:overlays].rindex(:clear)
56
+ overlays = last_clear ? data[:overlays][(last_clear + 1)..-1] : data[:overlays]
57
+ {
58
+ type: :value,
59
+ block: -> (evaluator) {
60
+ svc = evaluator.call block
61
+ -> { svc }
62
+ },
63
+ scope: data[:scope],
64
+ overlays: overlays
33
65
  }
34
- }
66
+ end
35
67
  end
36
68
 
37
- element_type :value do
38
- attr :apply_overlays
69
+ element_type :factory do
39
70
  attr :block
71
+ output do
72
+ {
73
+ type: :value,
74
+ block: -> (evaluator) {
75
+ factory = evaluator.call block
76
+ -> (*args,&blk) {
77
+ factory.call *args, &blk
78
+ }
79
+ },
80
+ scope: data[:scope]
81
+ }
82
+ end
83
+ end
40
84
 
85
+ element_type :func do
86
+ attr :block
41
87
  output do
42
- result = {
88
+ {
43
89
  type: :value,
44
- block: block,
45
- scope: data[:scope].merge(root: [])
90
+ block: ->(evaluator) {
91
+ value_blk = block
92
+ -> (*args,&blk) {
93
+ evaluator.call(value_blk,*args,&blk)
94
+ }
95
+ },
96
+ scope: data[:scope]
46
97
  }
47
- if apply_overlays
48
- last_clear = data[:overlays].rindex(:clear)
49
- result[:overlays] = last_clear ? data[:overlays][(last_clear + 1)..-1] : data[:overlays]
50
- end
51
- result
52
98
  end
53
99
  end
54
100
  end
data/lib/alki/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Alki
2
- VERSION = "0.6.0"
2
+ VERSION = "0.6.1"
3
3
  end
data/lib/alki.rb CHANGED
@@ -1,3 +1,4 @@
1
+ require 'alki/dsl'
1
2
  require 'alki/assembly_builder'
2
3
 
3
4
  module Alki
@@ -9,7 +9,6 @@ describe Alki do
9
9
 
10
10
  it 'should return module with ::assembly, ::root, and ::new methods' do
11
11
  klass = build
12
- klass.must_respond_to :assembly
13
12
  klass.must_respond_to :root
14
13
  klass.must_respond_to :new
15
14
  end
@@ -42,4 +42,8 @@ describe 'Example' do
42
42
  end
43
43
  end
44
44
  end
45
+
46
+ it 'should have config_dir value' do
47
+ Example.new.config_dir.must_equal Alki::Test.fixture_path('example','config')
48
+ end
45
49
  end
@@ -0,0 +1,18 @@
1
+ require_relative '../test_helper'
2
+
3
+ $LOAD_PATH.unshift Alki::Test.fixture_path('tlogger','lib')
4
+ require 'tlogger'
5
+ require 'stringio'
6
+
7
+ describe 'Overrides' do
8
+ it 'should be possibly to override assembly values on initialize' do
9
+ assert_raises RuntimeError do
10
+ Tlogger.new.log << "test"
11
+ end
12
+ io = StringIO.new
13
+ logger = Tlogger.new(io: io)
14
+ logger.log << "test"
15
+ logger.log << "test"
16
+ io.string.must_equal "testtest"
17
+ end
18
+ 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.6.0
4
+ version: 0.6.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: 2016-12-02 00:00:00.000000000 Z
11
+ date: 2016-12-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -65,6 +65,9 @@ dependencies:
65
65
  - - "~>"
66
66
  - !ruby/object:Gem::Version
67
67
  version: '0.3'
68
+ - - ">="
69
+ - !ruby/object:Gem::Version
70
+ version: 0.3.1
68
71
  type: :runtime
69
72
  prerelease: false
70
73
  version_requirements: !ruby/object:Gem::Requirement
@@ -72,6 +75,9 @@ dependencies:
72
75
  - - "~>"
73
76
  - !ruby/object:Gem::Version
74
77
  version: '0.3'
78
+ - - ">="
79
+ - !ruby/object:Gem::Version
80
+ version: 0.3.1
75
81
  - !ruby/object:Gem::Dependency
76
82
  name: alki-support
77
83
  requirement: !ruby/object:Gem::Requirement
@@ -121,6 +127,7 @@ files:
121
127
  - lib/alki/version.rb
122
128
  - test/feature/alki_test.rb
123
129
  - test/feature/example_test.rb
130
+ - test/feature/overrides_test.rb
124
131
  - test/fixtures/example/config/assembly.rb
125
132
  - test/fixtures/example/config/handlers.rb
126
133
  - test/fixtures/example/config/settings.rb
@@ -164,6 +171,7 @@ summary: Base library for building applications.
164
171
  test_files:
165
172
  - test/feature/alki_test.rb
166
173
  - test/feature/example_test.rb
174
+ - test/feature/overrides_test.rb
167
175
  - test/fixtures/example/config/assembly.rb
168
176
  - test/fixtures/example/config/handlers.rb
169
177
  - test/fixtures/example/config/settings.rb