cloud-templates 0.1.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 +7 -0
 - data/.rubocop.yml +29 -0
 - data/.simplecov +6 -0
 - data/Gemfile +2 -0
 - data/LICENSE +201 -0
 - data/NOTICE +13 -0
 - data/README.md +124 -0
 - data/Rakefile +27 -0
 - data/cloud-templates.gemspec +27 -0
 - data/examples/lib/user_directory/artifacts/catalogized.rb +11 -0
 - data/examples/lib/user_directory/artifacts/group.rb +37 -0
 - data/examples/lib/user_directory/artifacts/ided.rb +11 -0
 - data/examples/lib/user_directory/artifacts/organization.rb +17 -0
 - data/examples/lib/user_directory/artifacts/pathed.rb +22 -0
 - data/examples/lib/user_directory/artifacts/person.rb +20 -0
 - data/examples/lib/user_directory/artifacts/team.rb +31 -0
 - data/examples/lib/user_directory/artifacts/unit.rb +24 -0
 - data/examples/lib/user_directory/artifacts/user.rb +29 -0
 - data/examples/lib/user_directory/render/etc/artifact_view.rb +15 -0
 - data/examples/lib/user_directory/render/etc/composite_view.rb +26 -0
 - data/examples/lib/user_directory/render/etc/group_view.rb +23 -0
 - data/examples/lib/user_directory/render/etc/person_view.rb +19 -0
 - data/examples/lib/user_directory/render/etc/registry.rb +33 -0
 - data/examples/lib/user_directory/render/etc/user_view.rb +35 -0
 - data/examples/lib/user_directory/render/etc.rb +3 -0
 - data/examples/lib/user_directory/render/ldap/artifact_view.rb +27 -0
 - data/examples/lib/user_directory/render/ldap/composite_view.rb +32 -0
 - data/examples/lib/user_directory/render/ldap/group_view.rb +28 -0
 - data/examples/lib/user_directory/render/ldap/organization_view.rb +26 -0
 - data/examples/lib/user_directory/render/ldap/person_view.rb +39 -0
 - data/examples/lib/user_directory/render/ldap/registry.rb +16 -0
 - data/examples/lib/user_directory/render/ldap/unit_view.rb +26 -0
 - data/examples/lib/user_directory/render/ldap/user_view.rb +39 -0
 - data/examples/lib/user_directory/render/ldap.rb +3 -0
 - data/examples/lib/user_directory/utils.rb +18 -0
 - data/examples/lib/user_directory.rb +23 -0
 - data/examples/lib_path.rb +2 -0
 - data/examples/spec/spec_helper.rb +1 -0
 - data/examples/spec/user_directory_spec.rb +568 -0
 - data/lib/aws/templates/artifact.rb +140 -0
 - data/lib/aws/templates/composite.rb +178 -0
 - data/lib/aws/templates/exceptions.rb +221 -0
 - data/lib/aws/templates/render/registry.rb +60 -0
 - data/lib/aws/templates/render/utils/base_type_views.rb +131 -0
 - data/lib/aws/templates/render/view.rb +127 -0
 - data/lib/aws/templates/render.rb +72 -0
 - data/lib/aws/templates/utils/artifact_storage.rb +141 -0
 - data/lib/aws/templates/utils/contextualized/filters.rb +437 -0
 - data/lib/aws/templates/utils/contextualized/hash.rb +13 -0
 - data/lib/aws/templates/utils/contextualized/nil.rb +13 -0
 - data/lib/aws/templates/utils/contextualized/proc.rb +13 -0
 - data/lib/aws/templates/utils/contextualized.rb +113 -0
 - data/lib/aws/templates/utils/default.rb +185 -0
 - data/lib/aws/templates/utils/dependency/enumerable.rb +13 -0
 - data/lib/aws/templates/utils/dependency/object.rb +46 -0
 - data/lib/aws/templates/utils/dependency.rb +121 -0
 - data/lib/aws/templates/utils/dependent.rb +28 -0
 - data/lib/aws/templates/utils/inheritable.rb +52 -0
 - data/lib/aws/templates/utils/late_bound.rb +89 -0
 - data/lib/aws/templates/utils/memoized.rb +27 -0
 - data/lib/aws/templates/utils/named.rb +19 -0
 - data/lib/aws/templates/utils/options.rb +279 -0
 - data/lib/aws/templates/utils/parametrized/constraints.rb +423 -0
 - data/lib/aws/templates/utils/parametrized/getters.rb +293 -0
 - data/lib/aws/templates/utils/parametrized/guarded.rb +32 -0
 - data/lib/aws/templates/utils/parametrized/mapper.rb +73 -0
 - data/lib/aws/templates/utils/parametrized/nested.rb +72 -0
 - data/lib/aws/templates/utils/parametrized/transformations.rb +660 -0
 - data/lib/aws/templates/utils/parametrized.rb +240 -0
 - data/lib/aws/templates/utils.rb +219 -0
 - data/lib/aws/templates.rb +16 -0
 - data/spec/aws/templates/artifact_spec.rb +161 -0
 - data/spec/aws/templates/composite_spec.rb +361 -0
 - data/spec/aws/templates/render/utils/base_type_views_spec.rb +104 -0
 - data/spec/aws/templates/render_spec.rb +62 -0
 - data/spec/aws/templates/utils/as_named_spec.rb +31 -0
 - data/spec/aws/templates/utils/contextualized/filters_spec.rb +108 -0
 - data/spec/aws/templates/utils/contextualized_spec.rb +115 -0
 - data/spec/aws/templates/utils/late_bound_spec.rb +52 -0
 - data/spec/aws/templates/utils/options_spec.rb +67 -0
 - data/spec/aws/templates/utils/parametrized/constraint_spec.rb +175 -0
 - data/spec/aws/templates/utils/parametrized/getters_spec.rb +139 -0
 - data/spec/aws/templates/utils/parametrized/transformation_spec.rb +314 -0
 - data/spec/aws/templates/utils/parametrized_spec.rb +241 -0
 - data/spec/spec_helper.rb +6 -0
 - metadata +244 -0
 
| 
         @@ -0,0 +1,361 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'spec_helper'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'aws/templates/composite'
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            class A
         
     | 
| 
      
 5 
     | 
    
         
            +
              attr_reader :params
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
              def label
         
     | 
| 
      
 8 
     | 
    
         
            +
                @params[:label]
         
     | 
| 
      
 9 
     | 
    
         
            +
              end
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
              def initialize(p)
         
     | 
| 
      
 12 
     | 
    
         
            +
                @params = p
         
     | 
| 
      
 13 
     | 
    
         
            +
              end
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
              def eql?(other)
         
     | 
| 
      
 16 
     | 
    
         
            +
                (self.class == other.class) && (params.to_hash == other.params.to_hash)
         
     | 
| 
      
 17 
     | 
    
         
            +
              end
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
              def ==(other)
         
     | 
| 
      
 20 
     | 
    
         
            +
                eql?(other)
         
     | 
| 
      
 21 
     | 
    
         
            +
              end
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
              def !=(other)
         
     | 
| 
      
 24 
     | 
    
         
            +
                !eql?(other)
         
     | 
| 
      
 25 
     | 
    
         
            +
              end
         
     | 
| 
      
 26 
     | 
    
         
            +
            end
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
            describe Aws::Templates::Composite do
         
     | 
| 
      
 29 
     | 
    
         
            +
              let(:composite_class) do
         
     | 
| 
      
 30 
     | 
    
         
            +
                Class.new(Aws::Templates::Composite) do
         
     | 
| 
      
 31 
     | 
    
         
            +
                  default rocket: 'spacehawk'
         
     | 
| 
      
 32 
     | 
    
         
            +
                  default spaceship: 'martyr'
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
                  contextualize filter(:copy) &
         
     | 
| 
      
 35 
     | 
    
         
            +
                                { erased: 'forever' } &
         
     | 
| 
      
 36 
     | 
    
         
            +
                                (filter(:override) { { root: self } })
         
     | 
| 
      
 37 
     | 
    
         
            +
             
     | 
| 
      
 38 
     | 
    
         
            +
                  components do
         
     | 
| 
      
 39 
     | 
    
         
            +
                    artifact A, label: 'b'
         
     | 
| 
      
 40 
     | 
    
         
            +
                    artifact A, label: 'a', w: artifact(A, label: 'z')
         
     | 
| 
      
 41 
     | 
    
         
            +
                    artifact A, label: 'y', w: artifact(A, label: 'x').not_a_dependency
         
     | 
| 
      
 42 
     | 
    
         
            +
                    artifact(
         
     | 
| 
      
 43 
     | 
    
         
            +
                      A,
         
     | 
| 
      
 44 
     | 
    
         
            +
                      filter(:override) { { boomer: options[:rocket].upcase, vehicle: options[:spaceship] } } &
         
     | 
| 
      
 45 
     | 
    
         
            +
                      { label: 'c' }
         
     | 
| 
      
 46 
     | 
    
         
            +
                    )
         
     | 
| 
      
 47 
     | 
    
         
            +
                  end
         
     | 
| 
      
 48 
     | 
    
         
            +
                end
         
     | 
| 
      
 49 
     | 
    
         
            +
              end
         
     | 
| 
      
 50 
     | 
    
         
            +
             
     | 
| 
      
 51 
     | 
    
         
            +
              let(:parameters) { { label: 'q' } }
         
     | 
| 
      
 52 
     | 
    
         
            +
             
     | 
| 
      
 53 
     | 
    
         
            +
              let(:artifacts) do
         
     | 
| 
      
 54 
     | 
    
         
            +
                instance.artifacts.each_with_object({}) { |(k, v), memo| memo[k] = v.params.to_hash }
         
     | 
| 
      
 55 
     | 
    
         
            +
              end
         
     | 
| 
      
 56 
     | 
    
         
            +
             
     | 
| 
      
 57 
     | 
    
         
            +
              context 'a parameter is overriden' do
         
     | 
| 
      
 58 
     | 
    
         
            +
                let(:instance) { composite_class.new(parameters) }
         
     | 
| 
      
 59 
     | 
    
         
            +
             
     | 
| 
      
 60 
     | 
    
         
            +
                let(:result) do
         
     | 
| 
      
 61 
     | 
    
         
            +
                  {
         
     | 
| 
      
 62 
     | 
    
         
            +
                    'z' => {
         
     | 
| 
      
 63 
     | 
    
         
            +
                      label: 'z',
         
     | 
| 
      
 64 
     | 
    
         
            +
                      rocket: 'serenity',
         
     | 
| 
      
 65 
     | 
    
         
            +
                      spaceship: 'martyr',
         
     | 
| 
      
 66 
     | 
    
         
            +
                      erased: 'forever',
         
     | 
| 
      
 67 
     | 
    
         
            +
                      root: instance,
         
     | 
| 
      
 68 
     | 
    
         
            +
                      parent: instance
         
     | 
| 
      
 69 
     | 
    
         
            +
                    },
         
     | 
| 
      
 70 
     | 
    
         
            +
                    'x' => {
         
     | 
| 
      
 71 
     | 
    
         
            +
                      label: 'x',
         
     | 
| 
      
 72 
     | 
    
         
            +
                      rocket: 'serenity',
         
     | 
| 
      
 73 
     | 
    
         
            +
                      spaceship: 'martyr',
         
     | 
| 
      
 74 
     | 
    
         
            +
                      erased: 'forever',
         
     | 
| 
      
 75 
     | 
    
         
            +
                      root: instance,
         
     | 
| 
      
 76 
     | 
    
         
            +
                      parent: instance
         
     | 
| 
      
 77 
     | 
    
         
            +
                    },
         
     | 
| 
      
 78 
     | 
    
         
            +
                    'b' => {
         
     | 
| 
      
 79 
     | 
    
         
            +
                      label: 'b',
         
     | 
| 
      
 80 
     | 
    
         
            +
                      rocket: 'serenity',
         
     | 
| 
      
 81 
     | 
    
         
            +
                      spaceship: 'martyr',
         
     | 
| 
      
 82 
     | 
    
         
            +
                      erased: 'forever',
         
     | 
| 
      
 83 
     | 
    
         
            +
                      root: instance,
         
     | 
| 
      
 84 
     | 
    
         
            +
                      parent: instance
         
     | 
| 
      
 85 
     | 
    
         
            +
                    },
         
     | 
| 
      
 86 
     | 
    
         
            +
                    'a' => {
         
     | 
| 
      
 87 
     | 
    
         
            +
                      label: 'a',
         
     | 
| 
      
 88 
     | 
    
         
            +
                      rocket: 'serenity',
         
     | 
| 
      
 89 
     | 
    
         
            +
                      spaceship: 'martyr',
         
     | 
| 
      
 90 
     | 
    
         
            +
                      erased: 'forever',
         
     | 
| 
      
 91 
     | 
    
         
            +
                      w: Aws::Templates::Utils::Dependency.new(
         
     | 
| 
      
 92 
     | 
    
         
            +
                        A.new(
         
     | 
| 
      
 93 
     | 
    
         
            +
                          label: 'z',
         
     | 
| 
      
 94 
     | 
    
         
            +
                          rocket: 'serenity',
         
     | 
| 
      
 95 
     | 
    
         
            +
                          spaceship: 'martyr',
         
     | 
| 
      
 96 
     | 
    
         
            +
                          erased: 'forever',
         
     | 
| 
      
 97 
     | 
    
         
            +
                          root: instance,
         
     | 
| 
      
 98 
     | 
    
         
            +
                          parent: instance
         
     | 
| 
      
 99 
     | 
    
         
            +
                        )
         
     | 
| 
      
 100 
     | 
    
         
            +
                      ),
         
     | 
| 
      
 101 
     | 
    
         
            +
                      root: instance,
         
     | 
| 
      
 102 
     | 
    
         
            +
                      parent: instance
         
     | 
| 
      
 103 
     | 
    
         
            +
                    },
         
     | 
| 
      
 104 
     | 
    
         
            +
                    'y' => {
         
     | 
| 
      
 105 
     | 
    
         
            +
                      label: 'y',
         
     | 
| 
      
 106 
     | 
    
         
            +
                      rocket: 'serenity',
         
     | 
| 
      
 107 
     | 
    
         
            +
                      spaceship: 'martyr',
         
     | 
| 
      
 108 
     | 
    
         
            +
                      erased: 'forever',
         
     | 
| 
      
 109 
     | 
    
         
            +
                      w: A.new(
         
     | 
| 
      
 110 
     | 
    
         
            +
                        label: 'x',
         
     | 
| 
      
 111 
     | 
    
         
            +
                        rocket: 'serenity',
         
     | 
| 
      
 112 
     | 
    
         
            +
                        spaceship: 'martyr',
         
     | 
| 
      
 113 
     | 
    
         
            +
                        erased: 'forever',
         
     | 
| 
      
 114 
     | 
    
         
            +
                        root: instance,
         
     | 
| 
      
 115 
     | 
    
         
            +
                        parent: instance
         
     | 
| 
      
 116 
     | 
    
         
            +
                      ),
         
     | 
| 
      
 117 
     | 
    
         
            +
                      root: instance,
         
     | 
| 
      
 118 
     | 
    
         
            +
                      parent: instance
         
     | 
| 
      
 119 
     | 
    
         
            +
                    },
         
     | 
| 
      
 120 
     | 
    
         
            +
                    'c' => {
         
     | 
| 
      
 121 
     | 
    
         
            +
                      label: 'y',
         
     | 
| 
      
 122 
     | 
    
         
            +
                      rocket: 'serenity',
         
     | 
| 
      
 123 
     | 
    
         
            +
                      spaceship: 'martyr',
         
     | 
| 
      
 124 
     | 
    
         
            +
                      boomer: 'SERENITY',
         
     | 
| 
      
 125 
     | 
    
         
            +
                      vehicle: 'martyr',
         
     | 
| 
      
 126 
     | 
    
         
            +
                      erased: 'forever',
         
     | 
| 
      
 127 
     | 
    
         
            +
                      root: instance,
         
     | 
| 
      
 128 
     | 
    
         
            +
                      parent: instance
         
     | 
| 
      
 129 
     | 
    
         
            +
                    }
         
     | 
| 
      
 130 
     | 
    
         
            +
                  }
         
     | 
| 
      
 131 
     | 
    
         
            +
                end
         
     | 
| 
      
 132 
     | 
    
         
            +
             
     | 
| 
      
 133 
     | 
    
         
            +
                before { parameters[:rocket] = 'serenity' }
         
     | 
| 
      
 134 
     | 
    
         
            +
             
     | 
| 
      
 135 
     | 
    
         
            +
                it 'has predictable parameters distribution' do
         
     | 
| 
      
 136 
     | 
    
         
            +
                  v = instance['b'].params.to_hash
         
     | 
| 
      
 137 
     | 
    
         
            +
                  expect(v).to be == result['b']
         
     | 
| 
      
 138 
     | 
    
         
            +
                end
         
     | 
| 
      
 139 
     | 
    
         
            +
             
     | 
| 
      
 140 
     | 
    
         
            +
                it 'throws exception when unknown artifact is being extracted' do
         
     | 
| 
      
 141 
     | 
    
         
            +
                  expect { instance['w'] }.to raise_error RuntimeError, /There is no artifact/
         
     | 
| 
      
 142 
     | 
    
         
            +
                end
         
     | 
| 
      
 143 
     | 
    
         
            +
             
     | 
| 
      
 144 
     | 
    
         
            +
                it 'has all expected artifacts' do
         
     | 
| 
      
 145 
     | 
    
         
            +
                  expect(artifacts['a']).to be == result['a']
         
     | 
| 
      
 146 
     | 
    
         
            +
                end
         
     | 
| 
      
 147 
     | 
    
         
            +
              end
         
     | 
| 
      
 148 
     | 
    
         
            +
             
     | 
| 
      
 149 
     | 
    
         
            +
              describe 'search' do
         
     | 
| 
      
 150 
     | 
    
         
            +
                let(:instance) do
         
     | 
| 
      
 151 
     | 
    
         
            +
                  artifact_class = Class.new(Aws::Templates::Artifact) { parameter :yoke }
         
     | 
| 
      
 152 
     | 
    
         
            +
                  nested_class = composite_class
         
     | 
| 
      
 153 
     | 
    
         
            +
                  composite_class.new(parameters).components do
         
     | 
| 
      
 154 
     | 
    
         
            +
                    artifact artifact_class,
         
     | 
| 
      
 155 
     | 
    
         
            +
                             label: 'w',
         
     | 
| 
      
 156 
     | 
    
         
            +
                             yoke: Struct.new(:one, :two).new('fruit', 'veggie')
         
     | 
| 
      
 157 
     | 
    
         
            +
                    artifact nested_class, label: 'r'
         
     | 
| 
      
 158 
     | 
    
         
            +
                  end
         
     | 
| 
      
 159 
     | 
    
         
            +
                end
         
     | 
| 
      
 160 
     | 
    
         
            +
             
     | 
| 
      
 161 
     | 
    
         
            +
                describe 'search by label' do
         
     | 
| 
      
 162 
     | 
    
         
            +
                  let(:found_artifacts) { instance.search(label: 'c') }
         
     | 
| 
      
 163 
     | 
    
         
            +
             
     | 
| 
      
 164 
     | 
    
         
            +
                  it 'is only one artifact labeled c' do
         
     | 
| 
      
 165 
     | 
    
         
            +
                    expect(found_artifacts.size).to be == 1
         
     | 
| 
      
 166 
     | 
    
         
            +
                  end
         
     | 
| 
      
 167 
     | 
    
         
            +
             
     | 
| 
      
 168 
     | 
    
         
            +
                  it 'finds correct artifact' do
         
     | 
| 
      
 169 
     | 
    
         
            +
                    expect(found_artifacts.first.params[:boomer]).to be == 'SPACEHAWK'
         
     | 
| 
      
 170 
     | 
    
         
            +
                  end
         
     | 
| 
      
 171 
     | 
    
         
            +
                end
         
     | 
| 
      
 172 
     | 
    
         
            +
             
     | 
| 
      
 173 
     | 
    
         
            +
                describe 'search by field' do
         
     | 
| 
      
 174 
     | 
    
         
            +
                  let(:found_artifacts) { instance.search(parameters: { yoke: { two: 'veggie' } }) }
         
     | 
| 
      
 175 
     | 
    
         
            +
             
     | 
| 
      
 176 
     | 
    
         
            +
                  it 'is only one artifact which has field set' do
         
     | 
| 
      
 177 
     | 
    
         
            +
                    expect(found_artifacts.size).to be == 1
         
     | 
| 
      
 178 
     | 
    
         
            +
                  end
         
     | 
| 
      
 179 
     | 
    
         
            +
             
     | 
| 
      
 180 
     | 
    
         
            +
                  it 'finds correct artifact' do
         
     | 
| 
      
 181 
     | 
    
         
            +
                    v = found_artifacts.first
         
     | 
| 
      
 182 
     | 
    
         
            +
                    expect(v.yoke.two).to be == 'veggie'
         
     | 
| 
      
 183 
     | 
    
         
            +
                  end
         
     | 
| 
      
 184 
     | 
    
         
            +
                end
         
     | 
| 
      
 185 
     | 
    
         
            +
             
     | 
| 
      
 186 
     | 
    
         
            +
                describe 'search by class' do
         
     | 
| 
      
 187 
     | 
    
         
            +
                  let(:found_artifacts) { instance.search(klass: A) }
         
     | 
| 
      
 188 
     | 
    
         
            +
             
     | 
| 
      
 189 
     | 
    
         
            +
                  it 'has 3 found artifacts' do
         
     | 
| 
      
 190 
     | 
    
         
            +
                    expect(found_artifacts.size).to be == 6
         
     | 
| 
      
 191 
     | 
    
         
            +
                  end
         
     | 
| 
      
 192 
     | 
    
         
            +
             
     | 
| 
      
 193 
     | 
    
         
            +
                  it 'finds correct artifacts' do
         
     | 
| 
      
 194 
     | 
    
         
            +
                    expect(found_artifacts.map(&:label).sort).to be == %w[a b c x y z]
         
     | 
| 
      
 195 
     | 
    
         
            +
                  end
         
     | 
| 
      
 196 
     | 
    
         
            +
                end
         
     | 
| 
      
 197 
     | 
    
         
            +
             
     | 
| 
      
 198 
     | 
    
         
            +
                describe 'search recursively' do
         
     | 
| 
      
 199 
     | 
    
         
            +
                  let(:found_artifacts) { instance.search(klass: A, recursive: true) }
         
     | 
| 
      
 200 
     | 
    
         
            +
             
     | 
| 
      
 201 
     | 
    
         
            +
                  it 'has 6 found artifacts' do
         
     | 
| 
      
 202 
     | 
    
         
            +
                    expect(found_artifacts.size).to be == 12
         
     | 
| 
      
 203 
     | 
    
         
            +
                  end
         
     | 
| 
      
 204 
     | 
    
         
            +
             
     | 
| 
      
 205 
     | 
    
         
            +
                  it 'finds correct artifacts' do
         
     | 
| 
      
 206 
     | 
    
         
            +
                    expect(found_artifacts.map(&:label).sort).to be == %w[a a b b c c x x y y z z]
         
     | 
| 
      
 207 
     | 
    
         
            +
                  end
         
     | 
| 
      
 208 
     | 
    
         
            +
                end
         
     | 
| 
      
 209 
     | 
    
         
            +
              end
         
     | 
| 
      
 210 
     | 
    
         
            +
             
     | 
| 
      
 211 
     | 
    
         
            +
              describe 'adding artifacts' do
         
     | 
| 
      
 212 
     | 
    
         
            +
                shared_examples 'an artifact storage' do
         
     | 
| 
      
 213 
     | 
    
         
            +
                  it 'contains artifact t' do
         
     | 
| 
      
 214 
     | 
    
         
            +
                    expect(instance['t'].params.to_hash).to be == result['t']
         
     | 
| 
      
 215 
     | 
    
         
            +
                  end
         
     | 
| 
      
 216 
     | 
    
         
            +
             
     | 
| 
      
 217 
     | 
    
         
            +
                  it 'contains expected artifacts' do
         
     | 
| 
      
 218 
     | 
    
         
            +
                    expect(artifacts).to be == result
         
     | 
| 
      
 219 
     | 
    
         
            +
                  end
         
     | 
| 
      
 220 
     | 
    
         
            +
                end
         
     | 
| 
      
 221 
     | 
    
         
            +
             
     | 
| 
      
 222 
     | 
    
         
            +
                before { parameters[:postfix] = 'X' }
         
     | 
| 
      
 223 
     | 
    
         
            +
             
     | 
| 
      
 224 
     | 
    
         
            +
                let(:result) do
         
     | 
| 
      
 225 
     | 
    
         
            +
                  {
         
     | 
| 
      
 226 
     | 
    
         
            +
                    'z' => {
         
     | 
| 
      
 227 
     | 
    
         
            +
                      label: 'z',
         
     | 
| 
      
 228 
     | 
    
         
            +
                      rocket: 'spacehawk',
         
     | 
| 
      
 229 
     | 
    
         
            +
                      spaceship: 'martyr',
         
     | 
| 
      
 230 
     | 
    
         
            +
                      erased: 'forever',
         
     | 
| 
      
 231 
     | 
    
         
            +
                      postfix: 'X',
         
     | 
| 
      
 232 
     | 
    
         
            +
                      root: instance,
         
     | 
| 
      
 233 
     | 
    
         
            +
                      parent: instance
         
     | 
| 
      
 234 
     | 
    
         
            +
                    },
         
     | 
| 
      
 235 
     | 
    
         
            +
                    'x' => {
         
     | 
| 
      
 236 
     | 
    
         
            +
                      label: 'x',
         
     | 
| 
      
 237 
     | 
    
         
            +
                      rocket: 'spacehawk',
         
     | 
| 
      
 238 
     | 
    
         
            +
                      spaceship: 'martyr',
         
     | 
| 
      
 239 
     | 
    
         
            +
                      erased: 'forever',
         
     | 
| 
      
 240 
     | 
    
         
            +
                      postfix: 'X',
         
     | 
| 
      
 241 
     | 
    
         
            +
                      root: instance,
         
     | 
| 
      
 242 
     | 
    
         
            +
                      parent: instance
         
     | 
| 
      
 243 
     | 
    
         
            +
                    },
         
     | 
| 
      
 244 
     | 
    
         
            +
                    'b' => {
         
     | 
| 
      
 245 
     | 
    
         
            +
                      label: 'b',
         
     | 
| 
      
 246 
     | 
    
         
            +
                      rocket: 'spacehawk',
         
     | 
| 
      
 247 
     | 
    
         
            +
                      spaceship: 'martyr',
         
     | 
| 
      
 248 
     | 
    
         
            +
                      erased: 'forever',
         
     | 
| 
      
 249 
     | 
    
         
            +
                      postfix: 'X',
         
     | 
| 
      
 250 
     | 
    
         
            +
                      root: instance,
         
     | 
| 
      
 251 
     | 
    
         
            +
                      parent: instance
         
     | 
| 
      
 252 
     | 
    
         
            +
                    },
         
     | 
| 
      
 253 
     | 
    
         
            +
                    'a' => {
         
     | 
| 
      
 254 
     | 
    
         
            +
                      label: 'a',
         
     | 
| 
      
 255 
     | 
    
         
            +
                      rocket: 'spacehawk',
         
     | 
| 
      
 256 
     | 
    
         
            +
                      spaceship: 'martyr',
         
     | 
| 
      
 257 
     | 
    
         
            +
                      erased: 'forever',
         
     | 
| 
      
 258 
     | 
    
         
            +
                      postfix: 'X',
         
     | 
| 
      
 259 
     | 
    
         
            +
                      w: Aws::Templates::Utils::Dependency.new(
         
     | 
| 
      
 260 
     | 
    
         
            +
                        A.new(
         
     | 
| 
      
 261 
     | 
    
         
            +
                          label: 'z',
         
     | 
| 
      
 262 
     | 
    
         
            +
                          rocket: 'spacehawk',
         
     | 
| 
      
 263 
     | 
    
         
            +
                          spaceship: 'martyr',
         
     | 
| 
      
 264 
     | 
    
         
            +
                          erased: 'forever',
         
     | 
| 
      
 265 
     | 
    
         
            +
                          postfix: 'X',
         
     | 
| 
      
 266 
     | 
    
         
            +
                          root: instance,
         
     | 
| 
      
 267 
     | 
    
         
            +
                          parent: instance
         
     | 
| 
      
 268 
     | 
    
         
            +
                        )
         
     | 
| 
      
 269 
     | 
    
         
            +
                      ),
         
     | 
| 
      
 270 
     | 
    
         
            +
                      root: instance,
         
     | 
| 
      
 271 
     | 
    
         
            +
                      parent: instance
         
     | 
| 
      
 272 
     | 
    
         
            +
                    },
         
     | 
| 
      
 273 
     | 
    
         
            +
                    'y' => {
         
     | 
| 
      
 274 
     | 
    
         
            +
                      label: 'y',
         
     | 
| 
      
 275 
     | 
    
         
            +
                      rocket: 'spacehawk',
         
     | 
| 
      
 276 
     | 
    
         
            +
                      spaceship: 'martyr',
         
     | 
| 
      
 277 
     | 
    
         
            +
                      erased: 'forever',
         
     | 
| 
      
 278 
     | 
    
         
            +
                      postfix: 'X',
         
     | 
| 
      
 279 
     | 
    
         
            +
                      w: A.new(
         
     | 
| 
      
 280 
     | 
    
         
            +
                        label: 'x',
         
     | 
| 
      
 281 
     | 
    
         
            +
                        rocket: 'spacehawk',
         
     | 
| 
      
 282 
     | 
    
         
            +
                        spaceship: 'martyr',
         
     | 
| 
      
 283 
     | 
    
         
            +
                        erased: 'forever',
         
     | 
| 
      
 284 
     | 
    
         
            +
                        postfix: 'X',
         
     | 
| 
      
 285 
     | 
    
         
            +
                        root: instance,
         
     | 
| 
      
 286 
     | 
    
         
            +
                        parent: instance
         
     | 
| 
      
 287 
     | 
    
         
            +
                      ),
         
     | 
| 
      
 288 
     | 
    
         
            +
                      root: instance,
         
     | 
| 
      
 289 
     | 
    
         
            +
                      parent: instance
         
     | 
| 
      
 290 
     | 
    
         
            +
                    },
         
     | 
| 
      
 291 
     | 
    
         
            +
                    'c' => {
         
     | 
| 
      
 292 
     | 
    
         
            +
                      label: 'c',
         
     | 
| 
      
 293 
     | 
    
         
            +
                      rocket: 'spacehawk',
         
     | 
| 
      
 294 
     | 
    
         
            +
                      spaceship: 'martyr',
         
     | 
| 
      
 295 
     | 
    
         
            +
                      boomer: 'SPACEHAWK',
         
     | 
| 
      
 296 
     | 
    
         
            +
                      vehicle: 'martyr',
         
     | 
| 
      
 297 
     | 
    
         
            +
                      erased: 'forever',
         
     | 
| 
      
 298 
     | 
    
         
            +
                      postfix: 'X',
         
     | 
| 
      
 299 
     | 
    
         
            +
                      root: instance,
         
     | 
| 
      
 300 
     | 
    
         
            +
                      parent: instance
         
     | 
| 
      
 301 
     | 
    
         
            +
                    },
         
     | 
| 
      
 302 
     | 
    
         
            +
                    't' => {
         
     | 
| 
      
 303 
     | 
    
         
            +
                      label: 't',
         
     | 
| 
      
 304 
     | 
    
         
            +
                      rocket: 'spacehawk',
         
     | 
| 
      
 305 
     | 
    
         
            +
                      spaceship: 'martyr',
         
     | 
| 
      
 306 
     | 
    
         
            +
                      rumba: 'SPACEHAWKX',
         
     | 
| 
      
 307 
     | 
    
         
            +
                      postfix: 'X',
         
     | 
| 
      
 308 
     | 
    
         
            +
                      erased: 'forever',
         
     | 
| 
      
 309 
     | 
    
         
            +
                      root: instance,
         
     | 
| 
      
 310 
     | 
    
         
            +
                      parent: instance
         
     | 
| 
      
 311 
     | 
    
         
            +
                    }
         
     | 
| 
      
 312 
     | 
    
         
            +
                  }
         
     | 
| 
      
 313 
     | 
    
         
            +
                end
         
     | 
| 
      
 314 
     | 
    
         
            +
             
     | 
| 
      
 315 
     | 
    
         
            +
                context 'using constructor block' do
         
     | 
| 
      
 316 
     | 
    
         
            +
                  let(:instance) do
         
     | 
| 
      
 317 
     | 
    
         
            +
                    composite_class.new(parameters) do
         
     | 
| 
      
 318 
     | 
    
         
            +
                      artifact(
         
     | 
| 
      
 319 
     | 
    
         
            +
                        A,
         
     | 
| 
      
 320 
     | 
    
         
            +
                        filter(:override) { { rumba: artifacts['c'].params[:boomer] + options[:postfix] } } &
         
     | 
| 
      
 321 
     | 
    
         
            +
                        { label: 't' }
         
     | 
| 
      
 322 
     | 
    
         
            +
                      )
         
     | 
| 
      
 323 
     | 
    
         
            +
                    end
         
     | 
| 
      
 324 
     | 
    
         
            +
                  end
         
     | 
| 
      
 325 
     | 
    
         
            +
             
     | 
| 
      
 326 
     | 
    
         
            +
                  it_behaves_like 'an artifact storage'
         
     | 
| 
      
 327 
     | 
    
         
            +
                end
         
     | 
| 
      
 328 
     | 
    
         
            +
             
     | 
| 
      
 329 
     | 
    
         
            +
                context 'using instance components method' do
         
     | 
| 
      
 330 
     | 
    
         
            +
                  let(:instance) do
         
     | 
| 
      
 331 
     | 
    
         
            +
                    composite_class.new(parameters).components do
         
     | 
| 
      
 332 
     | 
    
         
            +
                      artifact(
         
     | 
| 
      
 333 
     | 
    
         
            +
                        A,
         
     | 
| 
      
 334 
     | 
    
         
            +
                        filter(:override) { { rumba: artifacts['c'].params[:boomer] + options[:postfix] } } &
         
     | 
| 
      
 335 
     | 
    
         
            +
                        { label: 't' }
         
     | 
| 
      
 336 
     | 
    
         
            +
                      )
         
     | 
| 
      
 337 
     | 
    
         
            +
                    end
         
     | 
| 
      
 338 
     | 
    
         
            +
                  end
         
     | 
| 
      
 339 
     | 
    
         
            +
             
     | 
| 
      
 340 
     | 
    
         
            +
                  it_behaves_like 'an artifact storage'
         
     | 
| 
      
 341 
     | 
    
         
            +
                end
         
     | 
| 
      
 342 
     | 
    
         
            +
             
     | 
| 
      
 343 
     | 
    
         
            +
                context 'using subclass' do
         
     | 
| 
      
 344 
     | 
    
         
            +
                  let(:subclass) do
         
     | 
| 
      
 345 
     | 
    
         
            +
                    Class.new(composite_class) do
         
     | 
| 
      
 346 
     | 
    
         
            +
                      components do
         
     | 
| 
      
 347 
     | 
    
         
            +
                        artifact(
         
     | 
| 
      
 348 
     | 
    
         
            +
                          A,
         
     | 
| 
      
 349 
     | 
    
         
            +
                          filter(:override) { { rumba: artifacts['c'].params[:boomer] + options[:postfix] } } &
         
     | 
| 
      
 350 
     | 
    
         
            +
                          { label: 't' }
         
     | 
| 
      
 351 
     | 
    
         
            +
                        )
         
     | 
| 
      
 352 
     | 
    
         
            +
                      end
         
     | 
| 
      
 353 
     | 
    
         
            +
                    end
         
     | 
| 
      
 354 
     | 
    
         
            +
                  end
         
     | 
| 
      
 355 
     | 
    
         
            +
             
     | 
| 
      
 356 
     | 
    
         
            +
                  let(:instance) { subclass.new(parameters) }
         
     | 
| 
      
 357 
     | 
    
         
            +
             
     | 
| 
      
 358 
     | 
    
         
            +
                  it_behaves_like 'an artifact storage'
         
     | 
| 
      
 359 
     | 
    
         
            +
                end
         
     | 
| 
      
 360 
     | 
    
         
            +
              end
         
     | 
| 
      
 361 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,104 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'spec_helper'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'aws/templates/render/utils/base_type_views'
         
     | 
| 
      
 3 
     | 
    
         
            +
            require 'aws/templates/render'
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            include Aws::Templates::Render::Utils::BaseTypeViews
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
            describe Aws::Templates::Render::Utils::BaseTypeViews do
         
     | 
| 
      
 8 
     | 
    
         
            +
              let(:render) do
         
     | 
| 
      
 9 
     | 
    
         
            +
                Module.new do
         
     | 
| 
      
 10 
     | 
    
         
            +
                  extend Aws::Templates::Render
         
     | 
| 
      
 11 
     | 
    
         
            +
                end
         
     | 
| 
      
 12 
     | 
    
         
            +
              end
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
              describe 'AsIs' do
         
     | 
| 
      
 15 
     | 
    
         
            +
                before { render.define_view(Object, AsIs) }
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
                it 'renders string' do
         
     | 
| 
      
 18 
     | 
    
         
            +
                  expect(render.view_for('123').to_rendered).to be == '123'
         
     | 
| 
      
 19 
     | 
    
         
            +
                end
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
                it 'renders random object' do
         
     | 
| 
      
 22 
     | 
    
         
            +
                  expect(render.view_for([123]).to_rendered).to be == [123]
         
     | 
| 
      
 23 
     | 
    
         
            +
                end
         
     | 
| 
      
 24 
     | 
    
         
            +
              end
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
              describe 'ToString' do
         
     | 
| 
      
 27 
     | 
    
         
            +
                before { render.define_view(Object, ToString) }
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
                it 'renders string' do
         
     | 
| 
      
 30 
     | 
    
         
            +
                  expect(render.view_for('123').to_rendered).to be == '123'
         
     | 
| 
      
 31 
     | 
    
         
            +
                end
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
                it 'renders number' do
         
     | 
| 
      
 34 
     | 
    
         
            +
                  expect(render.view_for(123).to_rendered).to be == '123'
         
     | 
| 
      
 35 
     | 
    
         
            +
                end
         
     | 
| 
      
 36 
     | 
    
         
            +
              end
         
     | 
| 
      
 37 
     | 
    
         
            +
             
     | 
| 
      
 38 
     | 
    
         
            +
              describe 'ToArray' do
         
     | 
| 
      
 39 
     | 
    
         
            +
                before do
         
     | 
| 
      
 40 
     | 
    
         
            +
                  render.define_view(Array, ToArray)
         
     | 
| 
      
 41 
     | 
    
         
            +
                  render.define_view(Object, ToString)
         
     | 
| 
      
 42 
     | 
    
         
            +
                end
         
     | 
| 
      
 43 
     | 
    
         
            +
             
     | 
| 
      
 44 
     | 
    
         
            +
                it 'renders array' do
         
     | 
| 
      
 45 
     | 
    
         
            +
                  expect(render.view_for([[1, 2, 3], '123']).to_rendered).to be == [%w[1 2 3], '123']
         
     | 
| 
      
 46 
     | 
    
         
            +
                end
         
     | 
| 
      
 47 
     | 
    
         
            +
              end
         
     | 
| 
      
 48 
     | 
    
         
            +
             
     | 
| 
      
 49 
     | 
    
         
            +
              describe 'ToHash' do
         
     | 
| 
      
 50 
     | 
    
         
            +
                before do
         
     | 
| 
      
 51 
     | 
    
         
            +
                  render.define_view(Object, ToString)
         
     | 
| 
      
 52 
     | 
    
         
            +
                  render.define_view(Hash, ToHash)
         
     | 
| 
      
 53 
     | 
    
         
            +
                end
         
     | 
| 
      
 54 
     | 
    
         
            +
             
     | 
| 
      
 55 
     | 
    
         
            +
                it 'renders hash' do
         
     | 
| 
      
 56 
     | 
    
         
            +
                  expect(render.view_for(q: 1, w: { e: 2, r: 3 }).to_rendered)
         
     | 
| 
      
 57 
     | 
    
         
            +
                    .to be == { 'q' => '1', 'w' => { 'e' => '2', 'r' => '3' } }
         
     | 
| 
      
 58 
     | 
    
         
            +
                end
         
     | 
| 
      
 59 
     | 
    
         
            +
              end
         
     | 
| 
      
 60 
     | 
    
         
            +
             
     | 
| 
      
 61 
     | 
    
         
            +
              describe 'ToFloat' do
         
     | 
| 
      
 62 
     | 
    
         
            +
                before { render.define_view(Object, ToFloat) }
         
     | 
| 
      
 63 
     | 
    
         
            +
             
     | 
| 
      
 64 
     | 
    
         
            +
                it 'renders integer' do
         
     | 
| 
      
 65 
     | 
    
         
            +
                  expect(render.view_for(1).to_rendered).to be == 1.0
         
     | 
| 
      
 66 
     | 
    
         
            +
                end
         
     | 
| 
      
 67 
     | 
    
         
            +
             
     | 
| 
      
 68 
     | 
    
         
            +
                it 'renders string' do
         
     | 
| 
      
 69 
     | 
    
         
            +
                  expect(render.view_for('1.3').to_rendered).to be == 1.3
         
     | 
| 
      
 70 
     | 
    
         
            +
                end
         
     | 
| 
      
 71 
     | 
    
         
            +
              end
         
     | 
| 
      
 72 
     | 
    
         
            +
             
     | 
| 
      
 73 
     | 
    
         
            +
              describe 'ToInteger' do
         
     | 
| 
      
 74 
     | 
    
         
            +
                before { render.define_view(Object, ToInteger) }
         
     | 
| 
      
 75 
     | 
    
         
            +
             
     | 
| 
      
 76 
     | 
    
         
            +
                it 'renders float' do
         
     | 
| 
      
 77 
     | 
    
         
            +
                  expect(render.view_for(1.3).to_rendered).to be == 1
         
     | 
| 
      
 78 
     | 
    
         
            +
                end
         
     | 
| 
      
 79 
     | 
    
         
            +
             
     | 
| 
      
 80 
     | 
    
         
            +
                it 'renders string' do
         
     | 
| 
      
 81 
     | 
    
         
            +
                  expect(render.view_for('23').to_rendered).to be == 23
         
     | 
| 
      
 82 
     | 
    
         
            +
                end
         
     | 
| 
      
 83 
     | 
    
         
            +
              end
         
     | 
| 
      
 84 
     | 
    
         
            +
             
     | 
| 
      
 85 
     | 
    
         
            +
              describe 'ToBoolean' do
         
     | 
| 
      
 86 
     | 
    
         
            +
                before { render.define_view(Object, ToBoolean) }
         
     | 
| 
      
 87 
     | 
    
         
            +
             
     | 
| 
      
 88 
     | 
    
         
            +
                it 'renders random object' do
         
     | 
| 
      
 89 
     | 
    
         
            +
                  expect(render.view_for([]).to_rendered).to be == true
         
     | 
| 
      
 90 
     | 
    
         
            +
                end
         
     | 
| 
      
 91 
     | 
    
         
            +
             
     | 
| 
      
 92 
     | 
    
         
            +
                it 'renders false' do
         
     | 
| 
      
 93 
     | 
    
         
            +
                  expect(render.view_for(false).to_rendered).to be == false
         
     | 
| 
      
 94 
     | 
    
         
            +
                end
         
     | 
| 
      
 95 
     | 
    
         
            +
             
     | 
| 
      
 96 
     | 
    
         
            +
                it 'renders false as a string' do
         
     | 
| 
      
 97 
     | 
    
         
            +
                  expect(render.view_for('false').to_rendered).to be == false
         
     | 
| 
      
 98 
     | 
    
         
            +
                end
         
     | 
| 
      
 99 
     | 
    
         
            +
             
     | 
| 
      
 100 
     | 
    
         
            +
                it 'renders true' do
         
     | 
| 
      
 101 
     | 
    
         
            +
                  expect(render.view_for(true).to_rendered).to be == true
         
     | 
| 
      
 102 
     | 
    
         
            +
                end
         
     | 
| 
      
 103 
     | 
    
         
            +
              end
         
     | 
| 
      
 104 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,62 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'spec_helper'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'aws/templates/render'
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            describe Aws::Templates::Render do
         
     | 
| 
      
 5 
     | 
    
         
            +
              let(:render) do
         
     | 
| 
      
 6 
     | 
    
         
            +
                Module.new { extend Aws::Templates::Render }
         
     | 
| 
      
 7 
     | 
    
         
            +
              end
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
              let(:artifact_class) { Class.new }
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
              let(:child_artifact_class1) { Class.new(artifact_class) }
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
              let(:child_artifact_class2) { Class.new(artifact_class) }
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
              let(:unknown_artifact) { Class.new }
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
              let(:view1) do
         
     | 
| 
      
 18 
     | 
    
         
            +
                k = Class.new(Aws::Templates::Render::View) do
         
     | 
| 
      
 19 
     | 
    
         
            +
                  def initialize(arg, params); end
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
                  def to_rendered
         
     | 
| 
      
 22 
     | 
    
         
            +
                    'Render 1'
         
     | 
| 
      
 23 
     | 
    
         
            +
                  end
         
     | 
| 
      
 24 
     | 
    
         
            +
                end
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
                k.register_in(render).artifact(artifact_class)
         
     | 
| 
      
 27 
     | 
    
         
            +
              end
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
              let(:view2) do
         
     | 
| 
      
 30 
     | 
    
         
            +
                k = Class.new(view1) do
         
     | 
| 
      
 31 
     | 
    
         
            +
                  def to_rendered
         
     | 
| 
      
 32 
     | 
    
         
            +
                    'Render 2'
         
     | 
| 
      
 33 
     | 
    
         
            +
                  end
         
     | 
| 
      
 34 
     | 
    
         
            +
                end
         
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
                k.artifact(child_artifact_class1)
         
     | 
| 
      
 37 
     | 
    
         
            +
              end
         
     | 
| 
      
 38 
     | 
    
         
            +
             
     | 
| 
      
 39 
     | 
    
         
            +
              before do
         
     | 
| 
      
 40 
     | 
    
         
            +
                view1
         
     | 
| 
      
 41 
     | 
    
         
            +
                view2
         
     | 
| 
      
 42 
     | 
    
         
            +
              end
         
     | 
| 
      
 43 
     | 
    
         
            +
             
     | 
| 
      
 44 
     | 
    
         
            +
              it 'renders class correctly' do
         
     | 
| 
      
 45 
     | 
    
         
            +
                expect(render.view_for(artifact_class.new).to_rendered).to be == 'Render 1'
         
     | 
| 
      
 46 
     | 
    
         
            +
              end
         
     | 
| 
      
 47 
     | 
    
         
            +
             
     | 
| 
      
 48 
     | 
    
         
            +
              it 'renders child class correctly' do
         
     | 
| 
      
 49 
     | 
    
         
            +
                expect(render.view_for(child_artifact_class1.new).to_rendered)
         
     | 
| 
      
 50 
     | 
    
         
            +
                  .to be == 'Render 2'
         
     | 
| 
      
 51 
     | 
    
         
            +
              end
         
     | 
| 
      
 52 
     | 
    
         
            +
             
     | 
| 
      
 53 
     | 
    
         
            +
              it 'renders yet another child class correctly' do
         
     | 
| 
      
 54 
     | 
    
         
            +
                expect(render.view_for(child_artifact_class2.new).to_rendered)
         
     | 
| 
      
 55 
     | 
    
         
            +
                  .to be == 'Render 1'
         
     | 
| 
      
 56 
     | 
    
         
            +
              end
         
     | 
| 
      
 57 
     | 
    
         
            +
             
     | 
| 
      
 58 
     | 
    
         
            +
              it 'throws an error once no classes are found' do
         
     | 
| 
      
 59 
     | 
    
         
            +
                expect { render.view_for(unknown_artifact.new).to_rendered }
         
     | 
| 
      
 60 
     | 
    
         
            +
                  .to raise_error Aws::Templates::ViewNotFound
         
     | 
| 
      
 61 
     | 
    
         
            +
              end
         
     | 
| 
      
 62 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,31 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'spec_helper'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'aws/templates/utils/named'
         
     | 
| 
      
 3 
     | 
    
         
            +
            require 'aws/templates/utils/parametrized/getters'
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            describe Aws::Templates::Utils::AsNamed do
         
     | 
| 
      
 6 
     | 
    
         
            +
              let(:named_class) do
         
     | 
| 
      
 7 
     | 
    
         
            +
                Class.new do
         
     | 
| 
      
 8 
     | 
    
         
            +
                  include Aws::Templates::Utils::Parametrized
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
                  include Aws::Templates::Utils::AsNamed
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
                  attr_reader :options
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
                  def self.getter
         
     | 
| 
      
 15 
     | 
    
         
            +
                    as_is
         
     | 
| 
      
 16 
     | 
    
         
            +
                  end
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
                  def initialize(hsh)
         
     | 
| 
      
 19 
     | 
    
         
            +
                    @options = hsh
         
     | 
| 
      
 20 
     | 
    
         
            +
                  end
         
     | 
| 
      
 21 
     | 
    
         
            +
                end
         
     | 
| 
      
 22 
     | 
    
         
            +
              end
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
              it 'returns name' do
         
     | 
| 
      
 25 
     | 
    
         
            +
                expect(named_class.new(name: 'orugva').name).to be == 'orugva'
         
     | 
| 
      
 26 
     | 
    
         
            +
              end
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
              it 'fails when name is not provided' do
         
     | 
| 
      
 29 
     | 
    
         
            +
                expect { named_class.new({}).name }.to raise_error(/Name of the object/)
         
     | 
| 
      
 30 
     | 
    
         
            +
              end
         
     | 
| 
      
 31 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,108 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'spec_helper'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'aws/templates/utils/contextualized'
         
     | 
| 
      
 3 
     | 
    
         
            +
            require 'aws/templates/utils/options'
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            describe Aws::Templates::Utils::Contextualized::Filter do
         
     | 
| 
      
 6 
     | 
    
         
            +
              let(:filtered_class) do
         
     | 
| 
      
 7 
     | 
    
         
            +
                Class.new do
         
     | 
| 
      
 8 
     | 
    
         
            +
                  include Aws::Templates::Utils::Contextualized
         
     | 
| 
      
 9 
     | 
    
         
            +
                end
         
     | 
| 
      
 10 
     | 
    
         
            +
              end
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
              let(:test_class) {}
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
              let(:instance) { test_class.new }
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
              describe 'override' do
         
     | 
| 
      
 17 
     | 
    
         
            +
                let(:test_class) do
         
     | 
| 
      
 18 
     | 
    
         
            +
                  Class.new(filtered_class) do
         
     | 
| 
      
 19 
     | 
    
         
            +
                    contextualize a: 'awesome'
         
     | 
| 
      
 20 
     | 
    
         
            +
                  end
         
     | 
| 
      
 21 
     | 
    
         
            +
                end
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
                it 'adds element into hash' do
         
     | 
| 
      
 24 
     | 
    
         
            +
                  opts = Aws::Templates::Utils::Options.new(b: 2, c: 3)
         
     | 
| 
      
 25 
     | 
    
         
            +
                  expect(opts.filter(&instance.context).to_hash).to be == { a: 'awesome' }
         
     | 
| 
      
 26 
     | 
    
         
            +
                end
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
                context 'when full context copied' do
         
     | 
| 
      
 29 
     | 
    
         
            +
                  let(:test_class) do
         
     | 
| 
      
 30 
     | 
    
         
            +
                    Class.new(filtered_class) do
         
     | 
| 
      
 31 
     | 
    
         
            +
                      contextualize filter(:copy) & { a: 'awesome' }
         
     | 
| 
      
 32 
     | 
    
         
            +
                    end
         
     | 
| 
      
 33 
     | 
    
         
            +
                  end
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
      
 35 
     | 
    
         
            +
                  it 'overrides element in the hash' do
         
     | 
| 
      
 36 
     | 
    
         
            +
                    opts = Aws::Templates::Utils::Options.new(a: 1, b: 2, c: 3)
         
     | 
| 
      
 37 
     | 
    
         
            +
                    expect(opts.filter(&instance.context).to_hash).to be == { a: 'awesome', b: 2, c: 3 }
         
     | 
| 
      
 38 
     | 
    
         
            +
                  end
         
     | 
| 
      
 39 
     | 
    
         
            +
                end
         
     | 
| 
      
 40 
     | 
    
         
            +
              end
         
     | 
| 
      
 41 
     | 
    
         
            +
             
     | 
| 
      
 42 
     | 
    
         
            +
              describe 'remove' do
         
     | 
| 
      
 43 
     | 
    
         
            +
                let(:test_class) do
         
     | 
| 
      
 44 
     | 
    
         
            +
                  Class.new(filtered_class) do
         
     | 
| 
      
 45 
     | 
    
         
            +
                    contextualize filter(:copy) & filter(:remove, :a, r: [:x])
         
     | 
| 
      
 46 
     | 
    
         
            +
                  end
         
     | 
| 
      
 47 
     | 
    
         
            +
                end
         
     | 
| 
      
 48 
     | 
    
         
            +
             
     | 
| 
      
 49 
     | 
    
         
            +
                it 'does nothing to hash without elements to remove' do
         
     | 
| 
      
 50 
     | 
    
         
            +
                  opts = Aws::Templates::Utils::Options.new(b: 2, c: 3)
         
     | 
| 
      
 51 
     | 
    
         
            +
                  expect(opts.filter(&instance.context).to_hash).to be == { b: 2, c: 3 }
         
     | 
| 
      
 52 
     | 
    
         
            +
                end
         
     | 
| 
      
 53 
     | 
    
         
            +
             
     | 
| 
      
 54 
     | 
    
         
            +
                it 'removes specified key from hash' do
         
     | 
| 
      
 55 
     | 
    
         
            +
                  opts = Aws::Templates::Utils::Options.new(a: 1, b: 2, c: 3, r: { x: 1, z: 0 })
         
     | 
| 
      
 56 
     | 
    
         
            +
                  expect(opts.filter(&instance.context).to_hash).to be == { b: 2, c: 3, r: { z: 0 } }
         
     | 
| 
      
 57 
     | 
    
         
            +
                end
         
     | 
| 
      
 58 
     | 
    
         
            +
              end
         
     | 
| 
      
 59 
     | 
    
         
            +
             
     | 
| 
      
 60 
     | 
    
         
            +
              describe 'add' do
         
     | 
| 
      
 61 
     | 
    
         
            +
                let(:test_class) do
         
     | 
| 
      
 62 
     | 
    
         
            +
                  Class.new(filtered_class) do
         
     | 
| 
      
 63 
     | 
    
         
            +
                    contextualize filter(:add, :a, r: [:x])
         
     | 
| 
      
 64 
     | 
    
         
            +
                  end
         
     | 
| 
      
 65 
     | 
    
         
            +
                end
         
     | 
| 
      
 66 
     | 
    
         
            +
             
     | 
| 
      
 67 
     | 
    
         
            +
                it 'adds the only key found' do
         
     | 
| 
      
 68 
     | 
    
         
            +
                  opts = Aws::Templates::Utils::Options.new(a: 1, b: 2, c: 3)
         
     | 
| 
      
 69 
     | 
    
         
            +
                  expect(opts.filter(&instance.context).to_hash).to be == { a: 1 }
         
     | 
| 
      
 70 
     | 
    
         
            +
                end
         
     | 
| 
      
 71 
     | 
    
         
            +
             
     | 
| 
      
 72 
     | 
    
         
            +
                it 'adds specified keys from hash' do
         
     | 
| 
      
 73 
     | 
    
         
            +
                  opts = Aws::Templates::Utils::Options.new(a: 1, b: 2, c: 3, r: { x: 1, z: 0 })
         
     | 
| 
      
 74 
     | 
    
         
            +
                  expect(opts.filter(&instance.context).to_hash).to be == { a: 1, r: { x: 1 } }
         
     | 
| 
      
 75 
     | 
    
         
            +
                end
         
     | 
| 
      
 76 
     | 
    
         
            +
              end
         
     | 
| 
      
 77 
     | 
    
         
            +
             
     | 
| 
      
 78 
     | 
    
         
            +
              describe 'chain' do
         
     | 
| 
      
 79 
     | 
    
         
            +
                let(:test_class) do
         
     | 
| 
      
 80 
     | 
    
         
            +
                  Class.new(filtered_class) do
         
     | 
| 
      
 81 
     | 
    
         
            +
                    contextualize filter(:copy) & filter(:remove, :a) & filter(:override, f: 10)
         
     | 
| 
      
 82 
     | 
    
         
            +
                  end
         
     | 
| 
      
 83 
     | 
    
         
            +
                end
         
     | 
| 
      
 84 
     | 
    
         
            +
             
     | 
| 
      
 85 
     | 
    
         
            +
                it 'does nothing to hash without elements to remove' do
         
     | 
| 
      
 86 
     | 
    
         
            +
                  opts = Aws::Templates::Utils::Options.new(b: 2, c: 3)
         
     | 
| 
      
 87 
     | 
    
         
            +
                  expect(opts.filter(&instance.context).to_hash).to be == { b: 2, c: 3, f: 10 }
         
     | 
| 
      
 88 
     | 
    
         
            +
                end
         
     | 
| 
      
 89 
     | 
    
         
            +
             
     | 
| 
      
 90 
     | 
    
         
            +
                it 'removes specified key from hash' do
         
     | 
| 
      
 91 
     | 
    
         
            +
                  opts = Aws::Templates::Utils::Options.new(a: 1, b: 2, c: 3)
         
     | 
| 
      
 92 
     | 
    
         
            +
                  expect(opts.filter(&instance.context).to_hash).to be == { b: 2, c: 3, f: 10 }
         
     | 
| 
      
 93 
     | 
    
         
            +
                end
         
     | 
| 
      
 94 
     | 
    
         
            +
              end
         
     | 
| 
      
 95 
     | 
    
         
            +
             
     | 
| 
      
 96 
     | 
    
         
            +
              describe 'identity' do
         
     | 
| 
      
 97 
     | 
    
         
            +
                let(:test_class) do
         
     | 
| 
      
 98 
     | 
    
         
            +
                  Class.new(filtered_class) do
         
     | 
| 
      
 99 
     | 
    
         
            +
                    contextualize filter(:copy) & filter(:identity)
         
     | 
| 
      
 100 
     | 
    
         
            +
                  end
         
     | 
| 
      
 101 
     | 
    
         
            +
                end
         
     | 
| 
      
 102 
     | 
    
         
            +
             
     | 
| 
      
 103 
     | 
    
         
            +
                it 'adds element into hash' do
         
     | 
| 
      
 104 
     | 
    
         
            +
                  opts = Aws::Templates::Utils::Options.new(b: 2, c: 3)
         
     | 
| 
      
 105 
     | 
    
         
            +
                  expect(opts.filter(&instance.context).to_hash).to be == { b: 2, c: 3 }
         
     | 
| 
      
 106 
     | 
    
         
            +
                end
         
     | 
| 
      
 107 
     | 
    
         
            +
              end
         
     | 
| 
      
 108 
     | 
    
         
            +
            end
         
     |