ruby-terraform 0.65.0.pre.4 → 0.65.0.pre.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Gemfile +2 -0
- data/Gemfile.lock +8 -5
- data/Rakefile +7 -3
- data/bin/console +1 -0
- data/lib/ruby-terraform.rb +2 -0
- data/lib/ruby_terraform.rb +5 -2
- data/lib/ruby_terraform/commands.rb +2 -0
- data/lib/ruby_terraform/commands/apply.rb +32 -40
- data/lib/ruby_terraform/commands/base.rb +59 -18
- data/lib/ruby_terraform/commands/clean.rb +2 -0
- data/lib/ruby_terraform/commands/destroy.rb +28 -38
- data/lib/ruby_terraform/commands/format.rb +15 -17
- data/lib/ruby_terraform/commands/get.rb +15 -8
- data/lib/ruby_terraform/commands/import.rb +25 -34
- data/lib/ruby_terraform/commands/init.rb +21 -34
- data/lib/ruby_terraform/commands/output.rb +23 -22
- data/lib/ruby_terraform/commands/plan.rb +24 -37
- data/lib/ruby_terraform/commands/refresh.rb +22 -33
- data/lib/ruby_terraform/commands/remote_config.rb +14 -16
- data/lib/ruby_terraform/commands/show.rb +13 -13
- data/lib/ruby_terraform/commands/validate.rb +22 -30
- data/lib/ruby_terraform/commands/workspace.rb +15 -10
- data/lib/ruby_terraform/errors.rb +2 -0
- data/lib/ruby_terraform/errors/execution_error.rb +2 -0
- data/lib/ruby_terraform/options.rb +7 -0
- data/lib/ruby_terraform/options/factory.rb +118 -0
- data/lib/ruby_terraform/options/name.rb +45 -0
- data/lib/ruby_terraform/options/types/base.rb +26 -0
- data/lib/ruby_terraform/options/types/boolean.rb +18 -0
- data/lib/ruby_terraform/options/types/flag.rb +18 -0
- data/lib/ruby_terraform/options/types/standard.rb +43 -0
- data/lib/ruby_terraform/options/values/boolean.rb +31 -0
- data/lib/ruby_terraform/output.rb +17 -11
- data/lib/ruby_terraform/version.rb +3 -1
- data/ruby_terraform.gemspec +58 -0
- metadata +27 -4
| @@ -1,20 +1,25 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 1 3 | 
             
            require_relative 'base'
         | 
| 2 4 |  | 
| 3 5 | 
             
            module RubyTerraform
         | 
| 4 6 | 
             
              module Commands
         | 
| 5 7 | 
             
                class Workspace < Base
         | 
| 6 | 
            -
                  def  | 
| 7 | 
            -
                     | 
| 8 | 
            -
                     | 
| 9 | 
            -
             | 
| 8 | 
            +
                  def subcommands(parameters)
         | 
| 9 | 
            +
                    commands = ['workspace', parameters[:operation]]
         | 
| 10 | 
            +
                    if parameters[:workspace] && parameters[:operation] != 'list'
         | 
| 11 | 
            +
                      commands << parameters[:workspace]
         | 
| 12 | 
            +
                    else
         | 
| 13 | 
            +
                      commands
         | 
| 14 | 
            +
                    end
         | 
| 15 | 
            +
                  end
         | 
| 10 16 |  | 
| 11 | 
            -
             | 
| 12 | 
            -
             | 
| 13 | 
            -
             | 
| 17 | 
            +
                  def arguments(parameters)
         | 
| 18 | 
            +
                    [parameters[:directory]]
         | 
| 19 | 
            +
                  end
         | 
| 14 20 |  | 
| 15 | 
            -
             | 
| 16 | 
            -
             | 
| 17 | 
            -
                    builder.with_argument(directory)
         | 
| 21 | 
            +
                  def parameter_defaults(_parameters)
         | 
| 22 | 
            +
                    { directory: nil, operation: 'list', workspace: nil }
         | 
| 18 23 | 
             
                  end
         | 
| 19 24 | 
             
                end
         | 
| 20 25 | 
             
              end
         | 
| @@ -0,0 +1,118 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            require_relative 'name'
         | 
| 4 | 
            +
            require_relative 'types/boolean'
         | 
| 5 | 
            +
            require_relative 'types/flag'
         | 
| 6 | 
            +
            require_relative 'types/standard'
         | 
| 7 | 
            +
             | 
| 8 | 
            +
            module RubyTerraform
         | 
| 9 | 
            +
              module Options
         | 
| 10 | 
            +
                class Factory
         | 
| 11 | 
            +
                  PLURAL_OPTIONS =
         | 
| 12 | 
            +
                    Set.new(
         | 
| 13 | 
            +
                      %w[
         | 
| 14 | 
            +
                        -var
         | 
| 15 | 
            +
                        -target
         | 
| 16 | 
            +
                        -var-file
         | 
| 17 | 
            +
                      ]
         | 
| 18 | 
            +
                    ).freeze
         | 
| 19 | 
            +
             | 
| 20 | 
            +
                  BOOLEAN_OPTIONS =
         | 
| 21 | 
            +
                    Set.new(
         | 
| 22 | 
            +
                      %w[
         | 
| 23 | 
            +
                        -auto-approve
         | 
| 24 | 
            +
                        -backend
         | 
| 25 | 
            +
                        -get
         | 
| 26 | 
            +
                        -get-plugins
         | 
| 27 | 
            +
                        -input
         | 
| 28 | 
            +
                        -list
         | 
| 29 | 
            +
                        -lock
         | 
| 30 | 
            +
                        -refresh
         | 
| 31 | 
            +
                        -upgrade
         | 
| 32 | 
            +
                        -verify-plugins
         | 
| 33 | 
            +
                        -write
         | 
| 34 | 
            +
                      ]
         | 
| 35 | 
            +
                    ).freeze
         | 
| 36 | 
            +
             | 
| 37 | 
            +
                  FLAG_OPTIONS =
         | 
| 38 | 
            +
                    Set.new(
         | 
| 39 | 
            +
                      %w[
         | 
| 40 | 
            +
                        -allow-missing
         | 
| 41 | 
            +
                        -allow-missing-config
         | 
| 42 | 
            +
                        -check
         | 
| 43 | 
            +
                        -compact-warnings
         | 
| 44 | 
            +
                        -destroy
         | 
| 45 | 
            +
                        -detailed-exitcode
         | 
| 46 | 
            +
                        -diff
         | 
| 47 | 
            +
                        -draw-cycles
         | 
| 48 | 
            +
                        -force
         | 
| 49 | 
            +
                        -force-copy
         | 
| 50 | 
            +
                        -ignore-remote-version
         | 
| 51 | 
            +
                        -json
         | 
| 52 | 
            +
                        -no-color
         | 
| 53 | 
            +
                        -raw
         | 
| 54 | 
            +
                        -reconfigure
         | 
| 55 | 
            +
                        -recursive
         | 
| 56 | 
            +
                        -update
         | 
| 57 | 
            +
                      ]
         | 
| 58 | 
            +
                    ).freeze
         | 
| 59 | 
            +
             | 
| 60 | 
            +
                  OVERRIDE_OPTIONS =
         | 
| 61 | 
            +
                    {
         | 
| 62 | 
            +
                      config: :directory,
         | 
| 63 | 
            +
                      out: :plan
         | 
| 64 | 
            +
                    }.freeze
         | 
| 65 | 
            +
             | 
| 66 | 
            +
                  def self.from(names, parameters)
         | 
| 67 | 
            +
                    new(names, parameters).from
         | 
| 68 | 
            +
                  end
         | 
| 69 | 
            +
             | 
| 70 | 
            +
                  private_class_method :new
         | 
| 71 | 
            +
             | 
| 72 | 
            +
                  def initialize(names, parameters)
         | 
| 73 | 
            +
                    @names = names.map { |name| Name.new(name) }
         | 
| 74 | 
            +
                    @parameters = parameters
         | 
| 75 | 
            +
                  end
         | 
| 76 | 
            +
             | 
| 77 | 
            +
                  def from
         | 
| 78 | 
            +
                    names.each_with_object([]) do |name, options|
         | 
| 79 | 
            +
                      options.append(*options_from_name(name))
         | 
| 80 | 
            +
                    end
         | 
| 81 | 
            +
                  end
         | 
| 82 | 
            +
             | 
| 83 | 
            +
                  private
         | 
| 84 | 
            +
             | 
| 85 | 
            +
                  attr_reader :names, :parameters
         | 
| 86 | 
            +
             | 
| 87 | 
            +
                  def options_from_name(name)
         | 
| 88 | 
            +
                    return plural_options(name) if PLURAL_OPTIONS.include?(name)
         | 
| 89 | 
            +
                    return boolean_option(name) if BOOLEAN_OPTIONS.include?(name)
         | 
| 90 | 
            +
                    return flag_option(name) if FLAG_OPTIONS.include?(name)
         | 
| 91 | 
            +
                    return override_option(name) if OVERRIDE_OPTIONS.key?(name.as_key)
         | 
| 92 | 
            +
             | 
| 93 | 
            +
                    standard_option(name, name.as_key)
         | 
| 94 | 
            +
                  end
         | 
| 95 | 
            +
             | 
| 96 | 
            +
                  def boolean_option(name)
         | 
| 97 | 
            +
                    [Types::Boolean.new(name.to_s, parameters[name.as_key])]
         | 
| 98 | 
            +
                  end
         | 
| 99 | 
            +
             | 
| 100 | 
            +
                  def flag_option(name)
         | 
| 101 | 
            +
                    [Types::Flag.new(name.to_s, parameters[name.as_key])]
         | 
| 102 | 
            +
                  end
         | 
| 103 | 
            +
             | 
| 104 | 
            +
                  def standard_option(name, hash_key)
         | 
| 105 | 
            +
                    [Types::Standard.new(name.to_s, parameters[hash_key])]
         | 
| 106 | 
            +
                  end
         | 
| 107 | 
            +
             | 
| 108 | 
            +
                  def override_option(name)
         | 
| 109 | 
            +
                    standard_option(name, OVERRIDE_OPTIONS[name.as_key])
         | 
| 110 | 
            +
                  end
         | 
| 111 | 
            +
             | 
| 112 | 
            +
                  def plural_options(name)
         | 
| 113 | 
            +
                    standard_option(name.to_s, name.as_key) +
         | 
| 114 | 
            +
                      standard_option(name.to_s, name.as_plural_key)
         | 
| 115 | 
            +
                  end
         | 
| 116 | 
            +
                end
         | 
| 117 | 
            +
              end
         | 
| 118 | 
            +
            end
         | 
| @@ -0,0 +1,45 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module RubyTerraform
         | 
| 4 | 
            +
              module Options
         | 
| 5 | 
            +
                class Name
         | 
| 6 | 
            +
                  def initialize(name)
         | 
| 7 | 
            +
                    @name = name
         | 
| 8 | 
            +
                  end
         | 
| 9 | 
            +
             | 
| 10 | 
            +
                  def without_prefix
         | 
| 11 | 
            +
                    @name[0] == '-' ? @name[1..] : @name
         | 
| 12 | 
            +
                  end
         | 
| 13 | 
            +
             | 
| 14 | 
            +
                  def to_s
         | 
| 15 | 
            +
                    "-#{without_prefix}"
         | 
| 16 | 
            +
                  end
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                  def as_key
         | 
| 19 | 
            +
                    snake_case.to_sym
         | 
| 20 | 
            +
                  end
         | 
| 21 | 
            +
             | 
| 22 | 
            +
                  def as_plural_key
         | 
| 23 | 
            +
                    "#{snake_case}s".to_sym
         | 
| 24 | 
            +
                  end
         | 
| 25 | 
            +
             | 
| 26 | 
            +
                  def ==(other)
         | 
| 27 | 
            +
                    to_s == other
         | 
| 28 | 
            +
                  end
         | 
| 29 | 
            +
             | 
| 30 | 
            +
                  def eql?(other)
         | 
| 31 | 
            +
                    to_s == other
         | 
| 32 | 
            +
                  end
         | 
| 33 | 
            +
             | 
| 34 | 
            +
                  def hash
         | 
| 35 | 
            +
                    to_s.hash
         | 
| 36 | 
            +
                  end
         | 
| 37 | 
            +
             | 
| 38 | 
            +
                  private
         | 
| 39 | 
            +
             | 
| 40 | 
            +
                  def snake_case
         | 
| 41 | 
            +
                    without_prefix.gsub('-', '_')
         | 
| 42 | 
            +
                  end
         | 
| 43 | 
            +
                end
         | 
| 44 | 
            +
              end
         | 
| 45 | 
            +
            end
         | 
| @@ -0,0 +1,26 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module RubyTerraform
         | 
| 4 | 
            +
              module Options
         | 
| 5 | 
            +
                module Types
         | 
| 6 | 
            +
                  class Base
         | 
| 7 | 
            +
                    def initialize(name, value)
         | 
| 8 | 
            +
                      @name = name
         | 
| 9 | 
            +
                      coerce_value(value)
         | 
| 10 | 
            +
                    end
         | 
| 11 | 
            +
             | 
| 12 | 
            +
                    def apply(_builder)
         | 
| 13 | 
            +
                      raise 'not implemented'
         | 
| 14 | 
            +
                    end
         | 
| 15 | 
            +
             | 
| 16 | 
            +
                    private
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                    attr_reader :name, :value
         | 
| 19 | 
            +
             | 
| 20 | 
            +
                    def coerce_value(value)
         | 
| 21 | 
            +
                      @value = value
         | 
| 22 | 
            +
                    end
         | 
| 23 | 
            +
                  end
         | 
| 24 | 
            +
                end
         | 
| 25 | 
            +
              end
         | 
| 26 | 
            +
            end
         | 
| @@ -0,0 +1,18 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            require_relative 'base'
         | 
| 4 | 
            +
            require_relative '../values/boolean'
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            module RubyTerraform
         | 
| 7 | 
            +
              module Options
         | 
| 8 | 
            +
                module Types
         | 
| 9 | 
            +
                  class Boolean < Base
         | 
| 10 | 
            +
                    include Values::Boolean
         | 
| 11 | 
            +
             | 
| 12 | 
            +
                    def apply(builder)
         | 
| 13 | 
            +
                      builder.with_option(name, value)
         | 
| 14 | 
            +
                    end
         | 
| 15 | 
            +
                  end
         | 
| 16 | 
            +
                end
         | 
| 17 | 
            +
              end
         | 
| 18 | 
            +
            end
         | 
| @@ -0,0 +1,18 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            require_relative 'base'
         | 
| 4 | 
            +
            require_relative '../values/boolean'
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            module RubyTerraform
         | 
| 7 | 
            +
              module Options
         | 
| 8 | 
            +
                module Types
         | 
| 9 | 
            +
                  class Flag < Base
         | 
| 10 | 
            +
                    include Values::Boolean
         | 
| 11 | 
            +
             | 
| 12 | 
            +
                    def apply(builder)
         | 
| 13 | 
            +
                      value ? builder.with_flag(name) : builder
         | 
| 14 | 
            +
                    end
         | 
| 15 | 
            +
                  end
         | 
| 16 | 
            +
                end
         | 
| 17 | 
            +
              end
         | 
| 18 | 
            +
            end
         | 
| @@ -0,0 +1,43 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            require 'json'
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            require_relative 'base'
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            module RubyTerraform
         | 
| 8 | 
            +
              module Options
         | 
| 9 | 
            +
                module Types
         | 
| 10 | 
            +
                  class Standard < Base
         | 
| 11 | 
            +
                    def apply(builder)
         | 
| 12 | 
            +
                      if value.respond_to?(:keys)
         | 
| 13 | 
            +
                        apply_hash(builder)
         | 
| 14 | 
            +
                      elsif value.respond_to?(:each)
         | 
| 15 | 
            +
                        apply_array(builder)
         | 
| 16 | 
            +
                      else
         | 
| 17 | 
            +
                        builder.with_option(name, value)
         | 
| 18 | 
            +
                      end
         | 
| 19 | 
            +
                    end
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                    private
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                    def apply_hash(builder)
         | 
| 24 | 
            +
                      builder.with_repeated_option(
         | 
| 25 | 
            +
                        name,
         | 
| 26 | 
            +
                        value.map do |hash_key, hash_value|
         | 
| 27 | 
            +
                          "'#{hash_key}=#{as_string(hash_value)}'"
         | 
| 28 | 
            +
                        end,
         | 
| 29 | 
            +
                        separator: ' '
         | 
| 30 | 
            +
                      )
         | 
| 31 | 
            +
                    end
         | 
| 32 | 
            +
             | 
| 33 | 
            +
                    def apply_array(builder)
         | 
| 34 | 
            +
                      builder.with_repeated_option(name, value)
         | 
| 35 | 
            +
                    end
         | 
| 36 | 
            +
             | 
| 37 | 
            +
                    def as_string(value)
         | 
| 38 | 
            +
                      value.is_a?(String) ? value : JSON.generate(value)
         | 
| 39 | 
            +
                    end
         | 
| 40 | 
            +
                  end
         | 
| 41 | 
            +
                end
         | 
| 42 | 
            +
              end
         | 
| 43 | 
            +
            end
         | 
| @@ -0,0 +1,31 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module RubyTerraform
         | 
| 4 | 
            +
              module Options
         | 
| 5 | 
            +
                module Values
         | 
| 6 | 
            +
                  module Boolean
         | 
| 7 | 
            +
                    def coerce_value(value)
         | 
| 8 | 
            +
                      @value = to_boolean(value)
         | 
| 9 | 
            +
                    end
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                    private
         | 
| 12 | 
            +
             | 
| 13 | 
            +
                    def to_boolean(value)
         | 
| 14 | 
            +
                      return nil if value.nil?
         | 
| 15 | 
            +
                      return value if a_boolean?(value)
         | 
| 16 | 
            +
                      return true if true_as_string?(value)
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                      false
         | 
| 19 | 
            +
                    end
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                    def a_boolean?(value)
         | 
| 22 | 
            +
                      value.is_a?(TrueClass) || value.is_a?(FalseClass)
         | 
| 23 | 
            +
                    end
         | 
| 24 | 
            +
             | 
| 25 | 
            +
                    def true_as_string?(value)
         | 
| 26 | 
            +
                      value.respond_to?(:downcase) && value.downcase == 'true'
         | 
| 27 | 
            +
                    end
         | 
| 28 | 
            +
                  end
         | 
| 29 | 
            +
                end
         | 
| 30 | 
            +
              end
         | 
| 31 | 
            +
            end
         | 
| @@ -1,20 +1,26 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 1 3 | 
             
            module RubyTerraform
         | 
| 2 4 | 
             
              class Output
         | 
| 3 | 
            -
                 | 
| 4 | 
            -
                   | 
| 5 | 
            -
             | 
| 5 | 
            +
                class << self
         | 
| 6 | 
            +
                  def for(opts)
         | 
| 7 | 
            +
                    Dir.chdir(create_config_directory(opts)) do
         | 
| 8 | 
            +
                      RubyTerraform.init(backend_config: opts[:backend_config])
         | 
| 9 | 
            +
                      RubyTerraform.output(name: opts[:name])
         | 
| 10 | 
            +
                    end
         | 
| 11 | 
            +
                  end
         | 
| 6 12 |  | 
| 7 | 
            -
                   | 
| 8 | 
            -
                  work_directory = opts[:work_directory]
         | 
| 13 | 
            +
                  private
         | 
| 9 14 |  | 
| 10 | 
            -
                   | 
| 15 | 
            +
                  def create_config_directory(opts)
         | 
| 16 | 
            +
                    source_directory = opts[:source_directory]
         | 
| 17 | 
            +
                    work_directory = opts[:work_directory]
         | 
| 11 18 |  | 
| 12 | 
            -
             | 
| 13 | 
            -
             | 
| 19 | 
            +
                    configuration_directory = File.join(work_directory, source_directory)
         | 
| 20 | 
            +
                    FileUtils.mkdir_p File.dirname(configuration_directory)
         | 
| 21 | 
            +
                    FileUtils.cp_r source_directory, configuration_directory
         | 
| 14 22 |  | 
| 15 | 
            -
             | 
| 16 | 
            -
                    RubyTerraform.init(backend_config: backend_config)
         | 
| 17 | 
            -
                    RubyTerraform.output(name: name)
         | 
| 23 | 
            +
                    configuration_directory
         | 
| 18 24 | 
             
                  end
         | 
| 19 25 | 
             
                end
         | 
| 20 26 | 
             
              end
         | 
| @@ -0,0 +1,58 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            lib = File.expand_path('lib', __dir__)
         | 
| 4 | 
            +
            $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
         | 
| 5 | 
            +
            require 'ruby_terraform/version'
         | 
| 6 | 
            +
            require 'date'
         | 
| 7 | 
            +
             | 
| 8 | 
            +
            files = %w[
         | 
| 9 | 
            +
              bin
         | 
| 10 | 
            +
              lib
         | 
| 11 | 
            +
              CODE_OF_CONDUCT.md
         | 
| 12 | 
            +
              ruby_terraform.gemspec
         | 
| 13 | 
            +
              Gemfile
         | 
| 14 | 
            +
              LICENSE.txt
         | 
| 15 | 
            +
              Rakefile
         | 
| 16 | 
            +
              README.md
         | 
| 17 | 
            +
            ]
         | 
| 18 | 
            +
             | 
| 19 | 
            +
            Gem::Specification.new do |spec|
         | 
| 20 | 
            +
              spec.name = 'ruby-terraform'
         | 
| 21 | 
            +
              spec.version = RubyTerraform::VERSION
         | 
| 22 | 
            +
              spec.authors = ['Toby Clemson']
         | 
| 23 | 
            +
              spec.email = ['tobyclemson@gmail.com']
         | 
| 24 | 
            +
             | 
| 25 | 
            +
              spec.summary = 'A simple Ruby wrapper for invoking Terraform commands.'
         | 
| 26 | 
            +
              spec.description =
         | 
| 27 | 
            +
                'Wraps the Terraform CLI so that Terraform can be invoked from a Ruby ' \
         | 
| 28 | 
            +
                'script or Rakefile.'
         | 
| 29 | 
            +
              spec.homepage = 'https://github.com/infrablocks/ruby_terraform'
         | 
| 30 | 
            +
              spec.license = 'MIT'
         | 
| 31 | 
            +
             | 
| 32 | 
            +
              spec.files = `git ls-files -z`.split("\x0").select do |f|
         | 
| 33 | 
            +
                f.match(/^(#{files.map { |g| Regexp.escape(g) }.join('|')})/)
         | 
| 34 | 
            +
              end
         | 
| 35 | 
            +
              spec.bindir = 'exe'
         | 
| 36 | 
            +
              spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
         | 
| 37 | 
            +
              spec.require_paths = ['lib']
         | 
| 38 | 
            +
             | 
| 39 | 
            +
              spec.required_ruby_version = '>= 2.6'
         | 
| 40 | 
            +
             | 
| 41 | 
            +
              spec.add_dependency 'lino', '>= 2.3'
         | 
| 42 | 
            +
             | 
| 43 | 
            +
              spec.add_development_dependency 'bundler', '~> 2.0'
         | 
| 44 | 
            +
              spec.add_development_dependency 'faker', '~> 2.17'
         | 
| 45 | 
            +
              spec.add_development_dependency 'gem-release', '~> 2.1'
         | 
| 46 | 
            +
              spec.add_development_dependency 'guard', '~> 2.16'
         | 
| 47 | 
            +
              spec.add_development_dependency 'guard-rspec', '~> 4.7'
         | 
| 48 | 
            +
              spec.add_development_dependency 'rake', '~> 13.0'
         | 
| 49 | 
            +
              spec.add_development_dependency 'rake_circle_ci', '~> 0.9'
         | 
| 50 | 
            +
              spec.add_development_dependency 'rake_github', '~> 0.5'
         | 
| 51 | 
            +
              spec.add_development_dependency 'rake_gpg', '~> 0.12'
         | 
| 52 | 
            +
              spec.add_development_dependency 'rake_ssh', '~> 0.4'
         | 
| 53 | 
            +
              spec.add_development_dependency 'rspec', '~> 3.9'
         | 
| 54 | 
            +
              spec.add_development_dependency 'rubocop', '~> 1.12'
         | 
| 55 | 
            +
              spec.add_development_dependency 'rubocop-rake', '~> 0.5'
         | 
| 56 | 
            +
              spec.add_development_dependency 'rubocop-rspec', '~> 2.2'
         | 
| 57 | 
            +
              spec.add_development_dependency 'simplecov', '~> 0.21'
         | 
| 58 | 
            +
            end
         |