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.
- checksums.yaml +4 -4
- data/Gemfile +2 -0
- data/README.md +1 -1
- data/alki.gemspec +3 -0
- data/config/dsls.rb +4 -0
- data/lib/alki/assembly.rb +43 -0
- data/lib/alki/assembly_executor.rb +137 -0
- data/lib/alki/assembly_handler_base.rb +19 -0
- data/lib/alki/dsls/assembly.rb +24 -0
- data/lib/alki/dsls/assembly_type.rb +48 -0
- data/lib/alki/dsls/assembly_type_dsl.rb +21 -0
- data/lib/alki/dsls/assembly_types/assembly.rb +84 -0
- data/lib/alki/dsls/assembly_types/group.rb +46 -0
- data/lib/alki/dsls/assembly_types/load.rb +37 -0
- data/lib/alki/dsls/assembly_types/overlay.rb +9 -0
- data/lib/alki/dsls/assembly_types/service.rb +25 -0
- data/lib/alki/dsls/service.rb +22 -0
- data/lib/alki/test.rb +38 -18
- data/lib/alki/version.rb +1 -1
- data/lib/alki.rb +27 -21
- data/test/feature/create_package_test.rb +4 -3
- data/test/fixtures/example/config/{package.rb → assembly.rb} +5 -2
- data/test/fixtures/example/config/handlers.rb +1 -1
- data/test/fixtures/example/lib/example.rb +1 -1
- data/test/fixtures/example/lib/switch_handler.rb +2 -2
- data/test/fixtures/tlogger/config/assembly.rb +10 -0
- data/test/fixtures/tlogger/lib/tlogger.rb +3 -0
- data/test/integration/dsls/assembly_test.rb +28 -0
- data/test/integration/dsls/assembly_type_test.rb +58 -0
- data/test/integration/dsls/service_dsl_test.rb +57 -0
- metadata +69 -21
- data/lib/alki/class_builder.rb +0 -41
- data/lib/alki/dsl_builder.rb +0 -43
- data/lib/alki/group_builder.rb +0 -25
- data/lib/alki/group_dsl.rb +0 -98
- data/lib/alki/loader.rb +0 -32
- data/lib/alki/package.rb +0 -33
- data/lib/alki/package_builder.rb +0 -2
- data/lib/alki/package_executor.rb +0 -120
- data/lib/alki/package_processor.rb +0 -167
- data/lib/alki/standard_package.rb +0 -19
- data/lib/alki/util.rb +0 -35
- data/test/integration/class_builder_test.rb +0 -130
- data/test/integration/loader_test.rb +0 -36
- data/test/unit/package_processor_test.rb +0 -319
    
        data/lib/alki.rb
    CHANGED
    
    | @@ -1,33 +1,39 @@ | |
| 1 | 
            -
             | 
| 2 | 
            -
             | 
| 3 | 
            -
             | 
| 4 | 
            -
             | 
| 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:: | 
| 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  | 
| 17 | 
            +
                    raise "Can't auto-detect name of assembly"
         | 
| 14 18 | 
             
                  end
         | 
| 15 19 | 
             
                  name = path[lib_dir.size..-4]
         | 
| 16 20 | 
             
                end
         | 
| 17 | 
            -
                 | 
| 18 | 
            -
             | 
| 19 | 
            -
             | 
| 20 | 
            -
             | 
| 21 | 
            -
             | 
| 22 | 
            -
                   | 
| 23 | 
            -
             | 
| 24 | 
            -
             | 
| 25 | 
            -
             | 
| 26 | 
            -
             | 
| 27 | 
            -
             | 
| 28 | 
            -
             | 
| 29 | 
            -
             | 
| 30 | 
            -
             | 
| 31 | 
            -
             | 
| 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 | 
            -
             | 
| 12 | 
            -
             | 
| 13 | 
            -
             | 
| 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
         | 
| @@ -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. | 
| 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- | 
| 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/ | 
| 57 | 
            -
            - lib/alki/ | 
| 58 | 
            -
            - lib/alki/ | 
| 59 | 
            -
            - lib/alki/ | 
| 60 | 
            -
            - lib/alki/ | 
| 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/ | 
| 84 | 
            -
            - test/ | 
| 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/ | 
| 125 | 
            -
            - test/ | 
| 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
         | 
    
        data/lib/alki/class_builder.rb
    DELETED
    
    | @@ -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
         | 
    
        data/lib/alki/dsl_builder.rb
    DELETED
    
    | @@ -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
         | 
    
        data/lib/alki/group_builder.rb
    DELETED
    
    | @@ -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
         | 
    
        data/lib/alki/group_dsl.rb
    DELETED
    
    | @@ -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
         |