alki 0.6.0 → 0.6.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.
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