bbc-cosmos-tools 0.3.1 → 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/README.md +14 -1
 - data/bin/bbc-cosmos-tools +1 -1
 - data/lib/bbc/cosmos/tools/cloudformation/generator.rb +2 -4
 - data/lib/bbc/cosmos/tools/commands/base.rb +1 -1
 - data/lib/bbc/cosmos/tools/commands/stack.rb +29 -18
 - data/lib/bbc/cosmos/tools/types/base_type.rb +47 -0
 - data/lib/bbc/cosmos/tools/types/cfndsl.rb +32 -0
 - data/lib/bbc/cosmos/tools/types/factory.rb +17 -0
 - data/lib/bbc/cosmos/tools/types/json.rb +18 -0
 - data/lib/bbc/cosmos/tools/types/yaml.rb +17 -0
 - data/lib/bbc/cosmos/tools/version.rb +1 -1
 - metadata +7 -2
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA1:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: d312899466e33b1d4a65a7335be17846bd070f73
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: f83b250a15485d6d15ae407c4f3e2d11c89d484e
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: abe8c0da8cdf40c91c63df435b7e858bb304830f73a7ceac96b335b15cdb704328462a959fc35b5c7c55af53465381446211daa91be15cb27575b0fc2631ba9a
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: d1b54bb031dc796f72a6692c491da4a3906a0b926e278f335ff3a2aefeb8714771decd417645f9b627f4f3b6cc8ca6ca2e388c356cd010e1c36dffdef993e27b
         
     | 
    
        data/README.md
    CHANGED
    
    | 
         @@ -159,7 +159,20 @@ bbc-cosmos-tools cf create 
     | 
|
| 
       159 
159 
     | 
    
         
             
            bbc-cosmos-tools cf update
         
     | 
| 
       160 
160 
     | 
    
         
             
            ```
         
     | 
| 
       161 
161 
     | 
    
         | 
| 
       162 
     | 
    
         
            -
             
     | 
| 
      
 162 
     | 
    
         
            +
            ### Help?
         
     | 
| 
      
 163 
     | 
    
         
            +
             
     | 
| 
      
 164 
     | 
    
         
            +
            You can use the built-in `help` command to see a list of parameters and options that need to be passed into the command you wish to execute. For example, if we were unsure of the options for the `stack` command then we would execute `bbc-cosmos-tools help stack` and this would display the following output:
         
     | 
| 
      
 165 
     | 
    
         
            +
             
     | 
| 
      
 166 
     | 
    
         
            +
            ```sh
         
     | 
| 
      
 167 
     | 
    
         
            +
            Commands:
         
     | 
| 
      
 168 
     | 
    
         
            +
              bbc-cosmos-tools stack help [COMMAND]                          # Describe subcommands or one specific subco...
         
     | 
| 
      
 169 
     | 
    
         
            +
              bbc-cosmos-tools stack create [COMPONENT, MAIN_STACK = false]  # Generates and create the cloudformation te...
         
     | 
| 
      
 170 
     | 
    
         
            +
              bbc-cosmos-tools stack delete [COMPONENT]                      # Deletes a stack
         
     | 
| 
      
 171 
     | 
    
         
            +
              bbc-cosmos-tools stack events [COMPONENT = nil]                # Shows the stack events for a component
         
     | 
| 
      
 172 
     | 
    
         
            +
              bbc-cosmos-tools stack generate [COMPONENT]                    # Generates a cloudformation template based ...
         
     | 
| 
      
 173 
     | 
    
         
            +
              bbc-cosmos-tools stack list [COMPONENT = nil]                  # Lists stacks for a component
         
     | 
| 
      
 174 
     | 
    
         
            +
              bbc-cosmos-tools stack update [COMPONENT = nil]                # Generates and updates the cloudformation t...
         
     | 
| 
      
 175 
     | 
    
         
            +
            ```
         
     | 
| 
       163 
176 
     | 
    
         | 
| 
       164 
177 
     | 
    
         
             
            ## Contributing
         
     | 
| 
       165 
178 
     | 
    
         | 
    
        data/bin/bbc-cosmos-tools
    CHANGED
    
    | 
         @@ -4,11 +4,11 @@ require 'pathname' 
     | 
|
| 
       4 
4 
     | 
    
         | 
| 
       5 
5 
     | 
    
         
             
            root        = Pathname.new(__FILE__).dirname.parent
         
     | 
| 
       6 
6 
     | 
    
         
             
            lib_path    = (root + 'lib').realdirpath
         
     | 
| 
       7 
     | 
    
         
            -
            config_path = root + 'configs'
         
     | 
| 
       8 
7 
     | 
    
         | 
| 
       9 
8 
     | 
    
         
             
            $LOAD_PATH.unshift(lib_path)
         
     | 
| 
       10 
9 
     | 
    
         | 
| 
       11 
10 
     | 
    
         
             
            require 'bbc/cosmos/tools/app'
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
       12 
12 
     | 
    
         
             
            include BBC::Cosmos::Tools
         
     | 
| 
       13 
13 
     | 
    
         | 
| 
       14 
14 
     | 
    
         
             
            App.start
         
     | 
| 
         @@ -16,11 +16,10 @@ module BBC 
     | 
|
| 
       16 
16 
     | 
    
         
             
                      end
         
     | 
| 
       17 
17 
     | 
    
         | 
| 
       18 
18 
     | 
    
         
             
                      def self.create(component, config, options, to_json = false, &block)
         
     | 
| 
       19 
     | 
    
         
            -
             
     | 
| 
       20 
19 
     | 
    
         
             
                        template = CfnDsl::CloudFormationTemplate.new
         
     | 
| 
       21 
20 
     | 
    
         
             
                        template.declare(&block)
         
     | 
| 
       22 
21 
     | 
    
         | 
| 
       23 
     | 
    
         
            -
                        if template.checkRefs 
     | 
| 
      
 22 
     | 
    
         
            +
                        if template.checkRefs || CfnDsl::Errors.errors?
         
     | 
| 
       24 
23 
     | 
    
         
             
                          self.raise_error template
         
     | 
| 
       25 
24 
     | 
    
         
             
                        else
         
     | 
| 
       26 
25 
     | 
    
         
             
                          hash = JSON.parse(template.to_json)
         
     | 
| 
         @@ -33,12 +32,11 @@ module BBC 
     | 
|
| 
       33 
32 
     | 
    
         | 
| 
       34 
33 
     | 
    
         
             
                          to_json ? JSON.pretty_generate(hash) : hash
         
     | 
| 
       35 
34 
     | 
    
         
             
                        end
         
     | 
| 
       36 
     | 
    
         
            -
             
     | 
| 
       37 
35 
     | 
    
         
             
                      end
         
     | 
| 
       38 
36 
     | 
    
         | 
| 
       39 
37 
     | 
    
         
             
                      def self.parameters(data)
         
     | 
| 
       40 
38 
     | 
    
         
             
                        if data['Parameters']
         
     | 
| 
       41 
     | 
    
         
            -
                           
     | 
| 
      
 39 
     | 
    
         
            +
                          data['Parameters'].reduce({}) do |object, (key, value)|
         
     | 
| 
       42 
40 
     | 
    
         
             
                            object.tap { |o| o[key] = value['Default'] }
         
     | 
| 
       43 
41 
     | 
    
         
             
                          end
         
     | 
| 
       44 
42 
     | 
    
         
             
                        else
         
     | 
| 
         @@ -14,7 +14,7 @@ module BBC 
     | 
|
| 
       14 
14 
     | 
    
         | 
| 
       15 
15 
     | 
    
         
             
                      package_name "BBC Cosmos config tool"
         
     | 
| 
       16 
16 
     | 
    
         | 
| 
       17 
     | 
    
         
            -
                      class_option :key_path, :type => :string, :default => ENV[' 
     | 
| 
      
 17 
     | 
    
         
            +
                      class_option :key_path, :type => :string, :default => ENV['BBC_COSMOS_TOOLS_CERT'], :desc => "The path to your dev cert, by default the value of the env variable $BBC_COSMOS_TOOLS_CERT is used"
         
     | 
| 
       18 
18 
     | 
    
         
             
                      class_option :env, :type => :string, :default => 'int', :desc => "The environment to target"
         
     | 
| 
       19 
19 
     | 
    
         
             
                      class_option :base, :type => :string, :desc => "The base path for the configs repo"
         
     | 
| 
       20 
20 
     | 
    
         
             
                      class_option :project, :type => :string, :default => ENV['BBC_COSMOS_TOOLS_PROJECT'], :desc => "The name of the project, by default the value of the env variable $BBC_COSMOS_TOOLS_PROJECT is used"
         
     | 
| 
         @@ -1,6 +1,8 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require "json"
         
     | 
| 
       1 
2 
     | 
    
         
             
            require "bbc/cosmos/tools/config"
         
     | 
| 
       2 
3 
     | 
    
         
             
            require 'bbc/cosmos/tools/commands/base'
         
     | 
| 
       3 
4 
     | 
    
         
             
            require 'bbc/cosmos/tools/cloudformation/generator'
         
     | 
| 
      
 5 
     | 
    
         
            +
            require "bbc/cosmos/tools/types/factory"
         
     | 
| 
       4 
6 
     | 
    
         | 
| 
       5 
7 
     | 
    
         
             
            module BBC
         
     | 
| 
       6 
8 
     | 
    
         
             
              module Cosmos
         
     | 
| 
         @@ -10,9 +12,17 @@ module BBC 
     | 
|
| 
       10 
12 
     | 
    
         
             
                      attr_accessor :api
         
     | 
| 
       11 
13 
     | 
    
         | 
| 
       12 
14 
     | 
    
         
             
                      class_option :stack, :type => :string, :default => 'main', :desc => "The name of the stack to use"
         
     | 
| 
      
 15 
     | 
    
         
            +
                      class_option :type, :type => :string, :default => 'cfndsl', :desc => "The format of your your CloudFormation (default is cfndsl, but can also be json or yaml)", :enum => ["cfndsl", "json", "yaml"]
         
     | 
| 
       13 
16 
     | 
    
         | 
| 
       14 
17 
     | 
    
         
             
                      def initialize(args = [], local_options = {}, thor_config = {})
         
     | 
| 
       15 
18 
     | 
    
         
             
                        super(args, local_options, thor_config)
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
                        @l = -> data, component, environment do
         
     | 
| 
      
 21 
     | 
    
         
            +
                          if data['Parameters'] && data['Parameters']['ImageId']
         
     | 
| 
      
 22 
     | 
    
         
            +
                            data['Parameters']['ImageId']['Default'] = latest_ami_for(component, environment)
         
     | 
| 
      
 23 
     | 
    
         
            +
                          end
         
     | 
| 
      
 24 
     | 
    
         
            +
                        end
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
       16 
26 
     | 
    
         
             
                        @api = BBC::Cosmos::Tools::API.new(config.app['api'], options[:key_path])
         
     | 
| 
       17 
27 
     | 
    
         
             
                      end
         
     | 
| 
       18 
28 
     | 
    
         | 
| 
         @@ -57,7 +67,13 @@ module BBC 
     | 
|
| 
       57 
67 
     | 
    
         
             
                      def generate(component)
         
     | 
| 
       58 
68 
     | 
    
         | 
| 
       59 
69 
     | 
    
         
             
                        say "#{banner(component)}\n"
         
     | 
| 
       60 
     | 
    
         
            -
             
     | 
| 
      
 70 
     | 
    
         
            +
             
     | 
| 
      
 71 
     | 
    
         
            +
                        type = Tools::Types::Factory.create(component, options, config)
         
     | 
| 
      
 72 
     | 
    
         
            +
                        data = type.generate_data.tap do |d|
         
     | 
| 
      
 73 
     | 
    
         
            +
                          @l.(d, component, options[:env])
         
     | 
| 
      
 74 
     | 
    
         
            +
                        end
         
     | 
| 
      
 75 
     | 
    
         
            +
             
     | 
| 
      
 76 
     | 
    
         
            +
                        say data, :white
         
     | 
| 
       61 
77 
     | 
    
         | 
| 
       62 
78 
     | 
    
         
             
                      end
         
     | 
| 
       63 
79 
     | 
    
         | 
| 
         @@ -72,7 +88,10 @@ module BBC 
     | 
|
| 
       72 
88 
     | 
    
         
             
                          components(options, component).each do |id|
         
     | 
| 
       73 
89 
     | 
    
         
             
                            say get_key_value("\nComponent", id)
         
     | 
| 
       74 
90 
     | 
    
         | 
| 
       75 
     | 
    
         
            -
                             
     | 
| 
      
 91 
     | 
    
         
            +
                            type = Tools::Types::Factory.create(id, options, config)
         
     | 
| 
      
 92 
     | 
    
         
            +
                            data = type.generate_data.tap do |d|
         
     | 
| 
      
 93 
     | 
    
         
            +
                              @l.(d, id, options[:env])
         
     | 
| 
      
 94 
     | 
    
         
            +
                            end
         
     | 
| 
       76 
95 
     | 
    
         | 
| 
       77 
96 
     | 
    
         
             
                            post_data = {
         
     | 
| 
       78 
97 
     | 
    
         
             
                              'name_suffix'   => options[:stack],
         
     | 
| 
         @@ -106,11 +125,17 @@ module BBC 
     | 
|
| 
       106 
125 
     | 
    
         
             
                          say get_key_value("\nComponent", id)
         
     | 
| 
       107 
126 
     | 
    
         | 
| 
       108 
127 
     | 
    
         
             
                          stack_name = "#{options[:env]}-#{id}-#{options[:stack]}"
         
     | 
| 
       109 
     | 
    
         
            -
             
     | 
| 
      
 128 
     | 
    
         
            +
             
     | 
| 
      
 129 
     | 
    
         
            +
                          type = Tools::Types::Factory.create(id, options, config)
         
     | 
| 
      
 130 
     | 
    
         
            +
                          data = type.generate_data.tap do |d|
         
     | 
| 
      
 131 
     | 
    
         
            +
                            @l.(d, id, options[:env])
         
     | 
| 
      
 132 
     | 
    
         
            +
                          end
         
     | 
| 
      
 133 
     | 
    
         
            +
             
     | 
| 
      
 134 
     | 
    
         
            +
                          params = Tools::Cloudformation::Generator.parameters(data)
         
     | 
| 
       110 
135 
     | 
    
         | 
| 
       111 
136 
     | 
    
         
             
                          post_data = {
         
     | 
| 
       112 
137 
     | 
    
         
             
                            'template'    => data,
         
     | 
| 
       113 
     | 
    
         
            -
                            'parameters'  =>  
     | 
| 
      
 138 
     | 
    
         
            +
                            'parameters'  => params
         
     | 
| 
       114 
139 
     | 
    
         
             
                          }
         
     | 
| 
       115 
140 
     | 
    
         | 
| 
       116 
141 
     | 
    
         
             
                          response = api.post sprintf(config.app['stack_update_endpoint'], options[:env], id, stack_name), JSON.pretty_generate(post_data)
         
     | 
| 
         @@ -187,20 +212,6 @@ module BBC 
     | 
|
| 
       187 
212 
     | 
    
         
             
                        api_error response unless response.success?
         
     | 
| 
       188 
213 
     | 
    
         
             
                        JSON.parse(response.body).first['image']['ami_id']
         
     | 
| 
       189 
214 
     | 
    
         
             
                      end
         
     | 
| 
       190 
     | 
    
         
            -
             
     | 
| 
       191 
     | 
    
         
            -
                      def cloudformation(component, options, to_json = true)
         
     | 
| 
       192 
     | 
    
         
            -
                        config_data = config
         
     | 
| 
       193 
     | 
    
         
            -
             
     | 
| 
       194 
     | 
    
         
            -
                        Tools::Cloudformation::Generator.create(component, config, options, to_json) do
         
     | 
| 
       195 
     | 
    
         
            -
                          component_identifier = options[:group].nil? ? component : options[:group]
         
     | 
| 
       196 
     | 
    
         
            -
                          instance_eval config_data.cf_templates(component_identifier, options[:stack])
         
     | 
| 
       197 
     | 
    
         
            -
                        end.tap do |data|
         
     | 
| 
       198 
     | 
    
         
            -
                          if data['Parameters'] && data['Parameters']['ImageId']
         
     | 
| 
       199 
     | 
    
         
            -
                            data['Parameters']['ImageId']['Default'] = latest_ami_for(component, options[:env])
         
     | 
| 
       200 
     | 
    
         
            -
                          end
         
     | 
| 
       201 
     | 
    
         
            -
             
     | 
| 
       202 
     | 
    
         
            -
                        end
         
     | 
| 
       203 
     | 
    
         
            -
                      end
         
     | 
| 
       204 
215 
     | 
    
         
             
                    end
         
     | 
| 
       205 
216 
     | 
    
         
             
                  end
         
     | 
| 
       206 
217 
     | 
    
         
             
                end
         
     | 
| 
         @@ -0,0 +1,47 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require "bbc/cosmos/tools/cloudformation/generator"
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            module BBC
         
     | 
| 
      
 4 
     | 
    
         
            +
              module Cosmos
         
     | 
| 
      
 5 
     | 
    
         
            +
                module Tools
         
     | 
| 
      
 6 
     | 
    
         
            +
                  module Types
         
     | 
| 
      
 7 
     | 
    
         
            +
                    class BaseType
         
     | 
| 
      
 8 
     | 
    
         
            +
                      def initialize(id, options, config)
         
     | 
| 
      
 9 
     | 
    
         
            +
                        @id      = id
         
     | 
| 
      
 10 
     | 
    
         
            +
                        @options = options
         
     | 
| 
      
 11 
     | 
    
         
            +
                        @config  = config
         
     | 
| 
      
 12 
     | 
    
         
            +
                      end
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
                      def generate_data
         
     | 
| 
      
 15 
     | 
    
         
            +
                        if valid_component_and_stack
         
     | 
| 
      
 16 
     | 
    
         
            +
                          get_parameters.each do |key, value|
         
     | 
| 
      
 17 
     | 
    
         
            +
                            data['Parameters'][key]['Default'] = value if data['Parameters'][key]
         
     | 
| 
      
 18 
     | 
    
         
            +
                          end
         
     | 
| 
      
 19 
     | 
    
         
            +
                          data
         
     | 
| 
      
 20 
     | 
    
         
            +
                        end
         
     | 
| 
      
 21 
     | 
    
         
            +
                      end
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
                      protected
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
                      def data
         
     | 
| 
      
 26 
     | 
    
         
            +
                        raise NotImplementedError
         
     | 
| 
      
 27 
     | 
    
         
            +
                      end
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
                      def construct_file_path type
         
     | 
| 
      
 30 
     | 
    
         
            +
                        File.join(@config.base_path, 'stacks', @id, "#{@options[:stack]}.#{type}")
         
     | 
| 
      
 31 
     | 
    
         
            +
                      end
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
                      private
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
      
 35 
     | 
    
         
            +
                      def valid_component_and_stack
         
     | 
| 
      
 36 
     | 
    
         
            +
                        Tools::Cloudformation::Generator.component_exists?(@id, @config) &&
         
     | 
| 
      
 37 
     | 
    
         
            +
                        Tools::Cloudformation::Generator.stack_exists?(@id, @config, @options[:stack])
         
     | 
| 
      
 38 
     | 
    
         
            +
                      end
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
                      def get_parameters
         
     | 
| 
      
 41 
     | 
    
         
            +
                        @config.resources['cloudformation']['components'][@id][@options[:stack]]['variants'][@options[:variant]]
         
     | 
| 
      
 42 
     | 
    
         
            +
                      end
         
     | 
| 
      
 43 
     | 
    
         
            +
                    end
         
     | 
| 
      
 44 
     | 
    
         
            +
                  end
         
     | 
| 
      
 45 
     | 
    
         
            +
                end
         
     | 
| 
      
 46 
     | 
    
         
            +
              end
         
     | 
| 
      
 47 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,32 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require "bbc/cosmos/tools/cloudformation/generator"
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            module BBC
         
     | 
| 
      
 4 
     | 
    
         
            +
              module Cosmos
         
     | 
| 
      
 5 
     | 
    
         
            +
                module Tools
         
     | 
| 
      
 6 
     | 
    
         
            +
                  module Types
         
     | 
| 
      
 7 
     | 
    
         
            +
                    class Cfndsl
         
     | 
| 
      
 8 
     | 
    
         
            +
                      def initialize(id, options, config)
         
     | 
| 
      
 9 
     | 
    
         
            +
                        @id      = id
         
     | 
| 
      
 10 
     | 
    
         
            +
                        @options = options
         
     | 
| 
      
 11 
     | 
    
         
            +
                        @config  = config
         
     | 
| 
      
 12 
     | 
    
         
            +
                      end
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
                      def generate_data
         
     | 
| 
      
 15 
     | 
    
         
            +
                        to_json = false
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
                        # Because the block is evaluated in the context of another class
         
     | 
| 
      
 18 
     | 
    
         
            +
                        # i.e. instance_eval &block
         
     | 
| 
      
 19 
     | 
    
         
            +
                        # we need to store off the values first and *then* reference them inside the block
         
     | 
| 
      
 20 
     | 
    
         
            +
                        component_identifier = @options[:group].nil? ? @id : @options[:group]
         
     | 
| 
      
 21 
     | 
    
         
            +
                        config = @config
         
     | 
| 
      
 22 
     | 
    
         
            +
                        stack = @options[:stack]
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
                        Tools::Cloudformation::Generator.create(@id, @config, @options, to_json) {
         
     | 
| 
      
 25 
     | 
    
         
            +
                          instance_eval config.cf_templates(component_identifier, stack)
         
     | 
| 
      
 26 
     | 
    
         
            +
                        }
         
     | 
| 
      
 27 
     | 
    
         
            +
                      end
         
     | 
| 
      
 28 
     | 
    
         
            +
                    end
         
     | 
| 
      
 29 
     | 
    
         
            +
                  end
         
     | 
| 
      
 30 
     | 
    
         
            +
                end
         
     | 
| 
      
 31 
     | 
    
         
            +
              end
         
     | 
| 
      
 32 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,17 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require "bbc/cosmos/tools/types/yaml"
         
     | 
| 
      
 2 
     | 
    
         
            +
            require "bbc/cosmos/tools/types/json"
         
     | 
| 
      
 3 
     | 
    
         
            +
            require "bbc/cosmos/tools/types/cfndsl"
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            module BBC
         
     | 
| 
      
 6 
     | 
    
         
            +
              module Cosmos
         
     | 
| 
      
 7 
     | 
    
         
            +
                module Tools
         
     | 
| 
      
 8 
     | 
    
         
            +
                  module Types
         
     | 
| 
      
 9 
     | 
    
         
            +
                    class Factory
         
     | 
| 
      
 10 
     | 
    
         
            +
                      def self.create(id, options, config)
         
     | 
| 
      
 11 
     | 
    
         
            +
                        BBC::Cosmos::Tools::Types.const_get(options[:type].capitalize).new(id, options, config)
         
     | 
| 
      
 12 
     | 
    
         
            +
                      end
         
     | 
| 
      
 13 
     | 
    
         
            +
                    end
         
     | 
| 
      
 14 
     | 
    
         
            +
                  end
         
     | 
| 
      
 15 
     | 
    
         
            +
                end
         
     | 
| 
      
 16 
     | 
    
         
            +
              end
         
     | 
| 
      
 17 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,18 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require "json"
         
     | 
| 
      
 2 
     | 
    
         
            +
            require "bbc/cosmos/tools/types/base_type"
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            module BBC
         
     | 
| 
      
 5 
     | 
    
         
            +
              module Cosmos
         
     | 
| 
      
 6 
     | 
    
         
            +
                module Tools
         
     | 
| 
      
 7 
     | 
    
         
            +
                  module Types
         
     | 
| 
      
 8 
     | 
    
         
            +
                    class Json < BaseType
         
     | 
| 
      
 9 
     | 
    
         
            +
                      protected
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
                      def data
         
     | 
| 
      
 12 
     | 
    
         
            +
                        JSON.parse(IO.read(construct_file_path "json"))
         
     | 
| 
      
 13 
     | 
    
         
            +
                      end
         
     | 
| 
      
 14 
     | 
    
         
            +
                    end
         
     | 
| 
      
 15 
     | 
    
         
            +
                  end
         
     | 
| 
      
 16 
     | 
    
         
            +
                end
         
     | 
| 
      
 17 
     | 
    
         
            +
              end
         
     | 
| 
      
 18 
     | 
    
         
            +
            end
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,14 +1,14 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: bbc-cosmos-tools
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 0. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.4.0
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Steven Jack
         
     | 
| 
       8 
8 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date: 2014- 
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2014-09-24 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies:
         
     | 
| 
       13 
13 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       14 
14 
     | 
    
         
             
              name: bundler
         
     | 
| 
         @@ -120,6 +120,11 @@ files: 
     | 
|
| 
       120 
120 
     | 
    
         
             
            - lib/bbc/cosmos/tools/commands/stack.rb
         
     | 
| 
       121 
121 
     | 
    
         
             
            - lib/bbc/cosmos/tools/config.rb
         
     | 
| 
       122 
122 
     | 
    
         
             
            - lib/bbc/cosmos/tools/cosmos_configuration.rb
         
     | 
| 
      
 123 
     | 
    
         
            +
            - lib/bbc/cosmos/tools/types/base_type.rb
         
     | 
| 
      
 124 
     | 
    
         
            +
            - lib/bbc/cosmos/tools/types/cfndsl.rb
         
     | 
| 
      
 125 
     | 
    
         
            +
            - lib/bbc/cosmos/tools/types/factory.rb
         
     | 
| 
      
 126 
     | 
    
         
            +
            - lib/bbc/cosmos/tools/types/json.rb
         
     | 
| 
      
 127 
     | 
    
         
            +
            - lib/bbc/cosmos/tools/types/yaml.rb
         
     | 
| 
       123 
128 
     | 
    
         
             
            - lib/bbc/cosmos/tools/version.rb
         
     | 
| 
       124 
129 
     | 
    
         
             
            homepage: ''
         
     | 
| 
       125 
130 
     | 
    
         
             
            licenses:
         
     |