alki 0.3.0 → 0.4.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.
Files changed (45) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +2 -0
  3. data/README.md +1 -1
  4. data/alki.gemspec +3 -0
  5. data/config/dsls.rb +4 -0
  6. data/lib/alki/assembly.rb +43 -0
  7. data/lib/alki/assembly_executor.rb +137 -0
  8. data/lib/alki/assembly_handler_base.rb +19 -0
  9. data/lib/alki/dsls/assembly.rb +24 -0
  10. data/lib/alki/dsls/assembly_type.rb +48 -0
  11. data/lib/alki/dsls/assembly_type_dsl.rb +21 -0
  12. data/lib/alki/dsls/assembly_types/assembly.rb +84 -0
  13. data/lib/alki/dsls/assembly_types/group.rb +46 -0
  14. data/lib/alki/dsls/assembly_types/load.rb +37 -0
  15. data/lib/alki/dsls/assembly_types/overlay.rb +9 -0
  16. data/lib/alki/dsls/assembly_types/service.rb +25 -0
  17. data/lib/alki/dsls/service.rb +22 -0
  18. data/lib/alki/test.rb +38 -18
  19. data/lib/alki/version.rb +1 -1
  20. data/lib/alki.rb +27 -21
  21. data/test/feature/create_package_test.rb +4 -3
  22. data/test/fixtures/example/config/{package.rb → assembly.rb} +5 -2
  23. data/test/fixtures/example/config/handlers.rb +1 -1
  24. data/test/fixtures/example/lib/example.rb +1 -1
  25. data/test/fixtures/example/lib/switch_handler.rb +2 -2
  26. data/test/fixtures/tlogger/config/assembly.rb +10 -0
  27. data/test/fixtures/tlogger/lib/tlogger.rb +3 -0
  28. data/test/integration/dsls/assembly_test.rb +28 -0
  29. data/test/integration/dsls/assembly_type_test.rb +58 -0
  30. data/test/integration/dsls/service_dsl_test.rb +57 -0
  31. metadata +69 -21
  32. data/lib/alki/class_builder.rb +0 -41
  33. data/lib/alki/dsl_builder.rb +0 -43
  34. data/lib/alki/group_builder.rb +0 -25
  35. data/lib/alki/group_dsl.rb +0 -98
  36. data/lib/alki/loader.rb +0 -32
  37. data/lib/alki/package.rb +0 -33
  38. data/lib/alki/package_builder.rb +0 -2
  39. data/lib/alki/package_executor.rb +0 -120
  40. data/lib/alki/package_processor.rb +0 -167
  41. data/lib/alki/standard_package.rb +0 -19
  42. data/lib/alki/util.rb +0 -35
  43. data/test/integration/class_builder_test.rb +0 -130
  44. data/test/integration/loader_test.rb +0 -36
  45. data/test/unit/package_processor_test.rb +0 -319
data/lib/alki.rb CHANGED
@@ -1,33 +1,39 @@
1
- module Alki
2
- def self.create_package!(name=nil,root=nil)
3
- require 'alki/util'
4
- require 'alki/standard_package'
1
+ require 'alki/support'
2
+ require 'alki/assembly'
3
+ require 'alki/class_builder'
4
+ require 'alki/dsl'
5
5
 
6
+ module Alki
7
+ def self.create_assembly!(name=nil,root=nil)
6
8
  if !root
7
- root = Alki::Util.find_pkg_root(caller_locations(1, 1)[0].absolute_path)
9
+ root = Alki::Support.find_root(caller_locations(1, 1)[0].absolute_path) do |dir|
10
+ File.exists?(File.join(dir,'config','assembly.rb'))
11
+ end
8
12
  end
9
13
  if !name
10
14
  path = caller_locations(1,1)[0].absolute_path
11
15
  lib_dir = File.join(root,'lib','')
12
16
  unless path.start_with?(lib_dir) && path.end_with?('.rb')
13
- raise "Can't auto-detect name of package"
17
+ raise "Can't auto-detect name of assembly"
14
18
  end
15
19
  name = path[lib_dir.size..-4]
16
20
  end
17
- unless name =~ /[A-Z]/
18
- name = Alki::Util.classify(name)
19
- end
20
- klass = Class.new(Alki::StandardPackage)
21
- klass.send :define_method, :initialize do
22
- super root
23
- end
24
-
25
- mod = Module.new
26
- mod.const_set :Package, klass
27
- mod.send :define_singleton_method, :new do
28
- klass.new
29
- end
30
-
31
- Alki::Util.create_class(name,mod)
21
+ config_root = File.join(root,'config')
22
+ Alki::ClassBuilder.build(
23
+ name: name,
24
+ class_modules: [Alki::Assembly],
25
+ type: :module,
26
+ class_methods: {
27
+ assembly_class: {
28
+ body: ->{
29
+ @assembly_class ||= Alki::Dsl.load(File.join(config_root,'assembly.rb'))[:class]
30
+ }
31
+ },
32
+ config_root: {
33
+ body: ->{ config_root }
34
+ }
35
+ }
36
+ )
37
+ Alki::Dsl.register_dir config_root, 'alki/dsls/assembly', prefix: File.join(name,'assembly')
32
38
  end
33
39
  end
@@ -4,13 +4,14 @@ describe 'Alki.create_package!' do
4
4
  describe 'example' do
5
5
  it 'should do fizzbuzz' do
6
6
  $LOAD_PATH << File.join(fixtures_path,'example','lib')
7
+ $LOAD_PATH << File.join(fixtures_path,'tlogger','lib')
7
8
  require 'example'
8
9
  app = Example.new
9
10
  app.range_handler.handle 1..20
10
11
  app.output.to_a.must_equal [
11
- "1","2","Fizz!","4","Buzz!","Fizz!","7", "8", "Fizz!",
12
- "Buzz!", "11", "Fizz!", "13", "14", "Fizzbuzz!", "16",
13
- "17", "Fizz!", "19", "Buzz!"
12
+ "1","2","Fizz!","4","Buzz!","Fizz!","7", "8", "Fizz!",
13
+ "Buzz!", "11", "Fizz!", "13", "14", "Fizzbuzz!", "16",
14
+ "17", "Fizz!", "19", "Buzz!"
14
15
  ]
15
16
  end
16
17
  end
@@ -22,9 +22,12 @@ Alki do
22
22
  ArrayOutput.new
23
23
  end
24
24
 
25
+ assembly :tlogger do
26
+ set :io, STDERR
27
+ end
28
+
25
29
  service :log do
26
- require 'logger'
27
- Logger.new STDERR
30
+ tlogger.log
28
31
  end
29
32
 
30
33
  service :message_proc do
@@ -25,6 +25,6 @@ Alki do
25
25
 
26
26
  overlay do
27
27
  require 'log_overlay'
28
- LogOverlay.new log
28
+ LogOverlay.new lazy('log')
29
29
  end
30
30
  end
@@ -1,3 +1,3 @@
1
1
  require 'alki'
2
2
 
3
- Alki.create_package!
3
+ Alki.create_assembly!
@@ -1,9 +1,9 @@
1
1
  class SwitchHandler
2
2
  def initialize(handlers)
3
- @handlers = handlers
3
+ @types = handlers
4
4
  end
5
5
 
6
6
  def handle(val)
7
- @handlers.find {|h| h.handle val }
7
+ @types.find {|h| h.handle val }
8
8
  end
9
9
  end
@@ -0,0 +1,10 @@
1
+ Alki do
2
+ set :io do
3
+ raise "Most override io service"
4
+ end
5
+
6
+ service :log do
7
+ require 'logger'
8
+ Logger.new io
9
+ end
10
+ end
@@ -0,0 +1,3 @@
1
+ require 'alki'
2
+
3
+ Alki.create_assembly!
@@ -0,0 +1,28 @@
1
+ require_relative '../../test_helper'
2
+ require 'alki/dsls/assembly'
3
+ require 'alki/assembly_processor'
4
+
5
+ describe Alki::Dsls::Assembly do
6
+ it 'should work' do
7
+ res = Alki::Dsls::Assembly.build do
8
+ service :test do
9
+ :val
10
+ end
11
+
12
+ load 'file'
13
+
14
+ group :group1 do
15
+ service :test2 do
16
+ :val2
17
+ end
18
+ end
19
+ end
20
+ p res[:class].assembly
21
+ res[:class].assembly.children[:file].name.must_equal 'file'
22
+ res[:class].assembly.children[:test].block.call.must_equal :val
23
+ res[:class].assembly.children[:group1].children[:test2].block.call.must_equal :val2
24
+
25
+ r = res[:class].assembly.lookup [:group1,:test2]
26
+ p r
27
+ end
28
+ end
@@ -0,0 +1,58 @@
1
+ require_relative '../../test_helper'
2
+ require 'alki/dsls/assembly_type'
3
+
4
+ describe Alki::Dsls::AssemblyType do
5
+ def build(&blk)
6
+ @klass = Alki::Dsls::AssemblyType.build(&blk)[:class]
7
+ end
8
+
9
+ def klass
10
+ @klass
11
+ end
12
+
13
+ describe :build do
14
+ it 'should create struct class with given attributes' do
15
+ build do
16
+ attr :attr1
17
+ attr :attr2
18
+ end
19
+ obj = klass.new(:val1,:val2)
20
+ obj.attr1.must_equal :val1
21
+ obj.attr2.must_equal :val2
22
+ end
23
+
24
+ it 'should create index and output methods using given blocks' do
25
+ build do
26
+ index do
27
+ :val1
28
+ end
29
+
30
+ output do
31
+ :val2
32
+ end
33
+ end
34
+
35
+ obj = klass.new
36
+ obj.index(:data,:key).must_equal :val1
37
+ obj.output(:data).must_equal :val2
38
+ end
39
+
40
+ it 'should allow accessing attrs and processor/data/key from index/output methods' do
41
+ build do
42
+ attr :attr1
43
+
44
+ index do
45
+ [attr1,data,key].map(&:to_s).join
46
+ end
47
+
48
+ output do
49
+ [attr1,data].map(&:to_s).join
50
+ end
51
+ end
52
+
53
+ obj = klass.new(1)
54
+ obj.index(2,3).must_equal "123"
55
+ obj.output(2).must_equal "12"
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,57 @@
1
+ require_relative '../../test_helper'
2
+ require 'alki/dsls/service'
3
+
4
+ describe Alki::Dsls::Service do
5
+ def build(&blk)
6
+ @c = Alki::Dsls::Service.build(&blk)[:class]
7
+ end
8
+
9
+ describe :use do
10
+ it 'should add second argument to ::uses' do
11
+ build do
12
+ use :test, 'test_service'
13
+ use :test2, :test_service2
14
+ end.uses.must_equal(['test_service','test_service2'])
15
+ end
16
+
17
+ it 'should set instance variable for each use from new arguments' do
18
+ build do
19
+ use :test, 'test_service'
20
+ use :test2, 'test_service2'
21
+ end
22
+ obj = @c.new :val1, :val2
23
+ obj.instance_variable_get(:@test).must_equal :val1
24
+ obj.instance_variable_get(:@test2).must_equal :val2
25
+ end
26
+
27
+ it 'should raise error if number of new arguments doesn\'t match number of use statements' do
28
+ build do
29
+ use :test, 'test_service'
30
+ use :test2, 'test_service2'
31
+ end
32
+ assert_raises ArgumentError do
33
+ @c.new
34
+ end
35
+ assert_raises ArgumentError do
36
+ @c.new :val1
37
+ end
38
+ assert_raises ArgumentError do
39
+ @c.new :val1, :val2, :val3
40
+ end
41
+ end
42
+
43
+ it 'should use first argument as service name if none provided' do
44
+ build do
45
+ use :test
46
+ use :test2
47
+ end.uses.must_equal(['test','test2'])
48
+ end
49
+
50
+ it 'should allow hash syntax for arguments' do
51
+ build do
52
+ use test: 'ts'
53
+ use test2: 'ts2'
54
+ end.uses.must_equal(['ts','ts2'])
55
+ end
56
+ end
57
+ 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.3.0
4
+ version: 0.4.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: 2016-10-04 00:00:00.000000000 Z
11
+ date: 2016-11-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -38,6 +38,48 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: minitest
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '5.9'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '5.9'
55
+ - !ruby/object:Gem::Dependency
56
+ name: alki-dsl
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '0.2'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '0.2'
69
+ - !ruby/object:Gem::Dependency
70
+ name: alki-support
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '0.4'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '0.4'
41
83
  description: Base library for building applications. Provides tools for organizing
42
84
  and connection application units.
43
85
  email:
@@ -52,26 +94,28 @@ files:
52
94
  - README.md
53
95
  - Rakefile
54
96
  - alki.gemspec
97
+ - config/dsls.rb
55
98
  - lib/alki.rb
56
- - lib/alki/class_builder.rb
57
- - lib/alki/dsl_builder.rb
58
- - lib/alki/group_builder.rb
59
- - lib/alki/group_dsl.rb
60
- - lib/alki/loader.rb
99
+ - lib/alki/assembly.rb
100
+ - lib/alki/assembly_executor.rb
101
+ - lib/alki/assembly_handler_base.rb
102
+ - lib/alki/dsls/assembly.rb
103
+ - lib/alki/dsls/assembly_type.rb
104
+ - lib/alki/dsls/assembly_type_dsl.rb
105
+ - lib/alki/dsls/assembly_types/assembly.rb
106
+ - lib/alki/dsls/assembly_types/group.rb
107
+ - lib/alki/dsls/assembly_types/load.rb
108
+ - lib/alki/dsls/assembly_types/overlay.rb
109
+ - lib/alki/dsls/assembly_types/service.rb
110
+ - lib/alki/dsls/service.rb
61
111
  - lib/alki/overlay_delegator.rb
62
- - lib/alki/package.rb
63
- - lib/alki/package_builder.rb
64
- - lib/alki/package_executor.rb
65
- - lib/alki/package_processor.rb
66
112
  - lib/alki/service_delegator.rb
67
- - lib/alki/standard_package.rb
68
113
  - lib/alki/test.rb
69
- - lib/alki/util.rb
70
114
  - lib/alki/version.rb
71
115
  - test/feature/create_package_test.rb
72
116
  - test/fixtures/config.rb
117
+ - test/fixtures/example/config/assembly.rb
73
118
  - test/fixtures/example/config/handlers.rb
74
- - test/fixtures/example/config/package.rb
75
119
  - test/fixtures/example/config/settings.rb
76
120
  - test/fixtures/example/lib/array_output.rb
77
121
  - test/fixtures/example/lib/echo_handler.rb
@@ -80,10 +124,12 @@ files:
80
124
  - test/fixtures/example/lib/num_handler.rb
81
125
  - test/fixtures/example/lib/range_handler.rb
82
126
  - test/fixtures/example/lib/switch_handler.rb
83
- - test/integration/class_builder_test.rb
84
- - test/integration/loader_test.rb
127
+ - test/fixtures/tlogger/config/assembly.rb
128
+ - test/fixtures/tlogger/lib/tlogger.rb
129
+ - test/integration/dsls/assembly_test.rb
130
+ - test/integration/dsls/assembly_type_test.rb
131
+ - test/integration/dsls/service_dsl_test.rb
85
132
  - test/test_helper.rb
86
- - test/unit/package_processor_test.rb
87
133
  homepage: https://github.com/medlefsen/alki
88
134
  licenses:
89
135
  - MIT
@@ -111,8 +157,8 @@ summary: Base library for building applications.
111
157
  test_files:
112
158
  - test/feature/create_package_test.rb
113
159
  - test/fixtures/config.rb
160
+ - test/fixtures/example/config/assembly.rb
114
161
  - test/fixtures/example/config/handlers.rb
115
- - test/fixtures/example/config/package.rb
116
162
  - test/fixtures/example/config/settings.rb
117
163
  - test/fixtures/example/lib/array_output.rb
118
164
  - test/fixtures/example/lib/echo_handler.rb
@@ -121,7 +167,9 @@ test_files:
121
167
  - test/fixtures/example/lib/num_handler.rb
122
168
  - test/fixtures/example/lib/range_handler.rb
123
169
  - test/fixtures/example/lib/switch_handler.rb
124
- - test/integration/class_builder_test.rb
125
- - test/integration/loader_test.rb
170
+ - test/fixtures/tlogger/config/assembly.rb
171
+ - test/fixtures/tlogger/lib/tlogger.rb
172
+ - test/integration/dsls/assembly_test.rb
173
+ - test/integration/dsls/assembly_type_test.rb
174
+ - test/integration/dsls/service_dsl_test.rb
126
175
  - test/test_helper.rb
127
- - test/unit/package_processor_test.rb
@@ -1,41 +0,0 @@
1
- require 'alki/dsl_builder'
2
-
3
- module Alki
4
- class ClassBuilder
5
- def initialize(*dsl_factories)
6
- @dsl_factories = dsl_factories.flatten
7
- end
8
-
9
- def build(name=nil,&blk)
10
- self.class.build(name,@dsl_factories,&blk)
11
- end
12
-
13
- def self.build(name=nil,dsl_factories,&blk)
14
- Class.new.tap do |c|
15
- builder = -> {
16
- Module.new.tap do |m|
17
- m.define_singleton_method :klass do
18
- c
19
- end
20
- end
21
- }
22
- m = DslBuilder.build(c,dsl_factories,
23
- builder: builder,exec: :class_exec,
24
- &blk)
25
- c.include m
26
- if name
27
- *ans, ln = name.to_s.split(/::/)
28
- parent = Object
29
- ans.each do |a|
30
- unless parent.const_defined? a
31
- parent.const_set a, Module.new
32
- end
33
- parent = parent.const_get a
34
- end
35
-
36
- parent.const_set ln, c
37
- end
38
- end
39
- end
40
- end
41
- end
@@ -1,43 +0,0 @@
1
- module Alki
2
- class DslBuilder
3
- def initialize(*dsl_factories,builder: nil, exec: nil)
4
- @builder = builder
5
- @exec = exec
6
- @dsl_factories = dsl_factories.flatten
7
- end
8
-
9
- def build(obj,&blk)
10
- self.class.build(obj,@dsl_factories,
11
- builder: @builder,
12
- exec: @exec,
13
- &blk)
14
- end
15
-
16
- def self.build(obj,dsl_factories,builder: nil, exec: nil, &blk)
17
- builder ||= Object.method(:new)
18
- exec ||= :instance_exec
19
- unless dsl_factories.is_a?(Array)
20
- dsl_factories = [dsl_factories]
21
- end
22
- builder = builder.call
23
- dsls = []
24
- dsl_factories.each do |dsl_factory|
25
- if dsl_factory.respond_to? :new_dsl
26
- dsl = dsl_factory.new_dsl obj
27
- else
28
- dsl = dsl_factory.new obj
29
- end
30
- dsl.dsl_methods.each do |method_name|
31
- method = dsl.method(method_name)
32
- builder.define_singleton_method method_name do |*args,&blk|
33
- method.call *args, &blk
34
- end
35
- end
36
- dsls << dsl
37
- end
38
- builder.send(exec,&blk)
39
- dsls.each {|dsl| dsl.finalize if dsl.respond_to? :finalize }
40
- builder
41
- end
42
- end
43
- end
@@ -1,25 +0,0 @@
1
- require 'alki/group_dsl'
2
- require 'alki/dsl_builder'
3
-
4
- module Alki
5
- class GroupBuilder
6
- def self.build(loader,obj = {},&dsl)
7
- Alki::GroupBuilder.new(loader).build(obj,&dsl)
8
- obj
9
- end
10
-
11
- def initialize(loader)
12
- @loader = loader
13
- @builder = Alki::DslBuilder.new(self)
14
- end
15
-
16
- def new_dsl(obj)
17
- GroupDsl.new(obj,loader: @loader, group_builder: @builder)
18
- end
19
-
20
- def build(group={},&dsl)
21
- @builder.build(group,&dsl)
22
- group
23
- end
24
- end
25
- end
@@ -1,98 +0,0 @@
1
- require 'alki/util'
2
-
3
- module Alki
4
- class GroupDsl
5
- def initialize(root,group_builder:,loader:)
6
- @root = root
7
- @group_builder = group_builder
8
- @loader = loader
9
- end
10
-
11
- def dsl_methods
12
- [:set,:service,:factory,:load,:import,:group,:overlay,:clear_overlays]
13
- end
14
-
15
- def set(name,value=nil,&blk)
16
- service name, &(blk || -> { value })
17
- end
18
-
19
- def service(name,&blk)
20
- name = name.to_sym
21
- @root[name] = {
22
- type: :service,
23
- block: blk
24
- }
25
- end
26
-
27
- def factory(name,&blk)
28
- name = name.to_sym
29
- @root[name] = {
30
- type: :factory,
31
- block: blk
32
- }
33
- end
34
-
35
- def import(name)
36
- instance_exec &@loader.load(name.to_s)
37
- end
38
-
39
- def load(name)
40
- group(name.to_sym) do
41
- import(name)
42
- end
43
- end
44
-
45
- def package(name,pkg,klass=nil,&blk)
46
- if pkg.is_a? String
47
- require pkg
48
- if klass == nil
49
- pkg = Alki::Util.classify(pkg)
50
- else
51
- pkg = klass
52
- end
53
- end
54
- if pkg.is_a? Class
55
- pkg = pkg.new
56
- end
57
- if pkg.response_to? :package_definition
58
- pkg = pkg.package_definition
59
- end
60
- unless pkg.is_a? Hash
61
- raise "Invalid package: #{pkg.inspect}"
62
- end
63
- name = name.to_sym
64
- overrides = {}
65
- @group_builder.build(overrides,&blk) if blk
66
- overrides[:original] = {
67
- type: :package,
68
- children: pkg,
69
- overrides: {}
70
- }
71
- @root[name] = {
72
- type: :package,
73
- children: pkg,
74
- overrides: overrides
75
- }
76
- end
77
-
78
- def group(name,&blk)
79
- name = name.to_sym
80
- children = {}
81
- @group_builder.build(children,&blk)
82
- @root[name] = {
83
- type: :group,
84
- children: children
85
- }
86
- end
87
-
88
- def overlay(&blk)
89
- @root['overlays'] ||= []
90
- @root['overlays'] << blk
91
- end
92
-
93
- def clear_overlays
94
- @root['overlays'] ||= []
95
- @root['overlays'] << :clear
96
- end
97
- end
98
- end
data/lib/alki/loader.rb DELETED
@@ -1,32 +0,0 @@
1
- module Alki
2
- class Loader
3
- def self.load(config_file)
4
- Fiber.new do
5
- Kernel.load config_file
6
- Thread.current[:alki_loader_current]
7
- end.resume
8
- end
9
-
10
- def initialize(root_dir)
11
- @root_dir = root_dir
12
- end
13
-
14
- def load_all
15
- Dir[File.join(@root_dir,'**','*.rb')].inject({}) do |h,path|
16
- file = path.gsub(File.join(@root_dir,''),'').gsub(/\.rb$/,'')
17
- h.merge!(file => Loader.load(path))
18
- end
19
- end
20
-
21
- def load(file)
22
- Loader.load File.expand_path("#{file}.rb",@root_dir)
23
- end
24
- end
25
- end
26
-
27
- module Kernel
28
- def Alki(&blk)
29
- Thread.current[:alki_loader_current] = blk if blk
30
- ::Alki
31
- end
32
- end