module Docker::Stack::Service

Public Class Methods

included(base) click to toggle source
# File lib/generators/docker/stack/service.rb, line 11
def self.included(base)
  base.include Util

  base.class_option :env, type: :string, default: 'development,test'

  base.send(:define_method, :add_service) do
    options[:env].split(/,/).each do |env|
      @env = env
      add_service_for_environment
    end
  end

  base.no_tasks do
    def service
      self.class.generator_name
    end

    def add_service_for_environment
      new_service_config = current_service_config.deep_merge(service_from_template(service))
      say_status :update, "#{relative_to_original_destination_root(compose_file_full_path)} [#{service}]", true
      File.open(compose_file_full_path, 'w') do |f|
        YAML.dump(new_service_config, f)
      end
    end

    def service_from_template(service)
      source  = File.expand_path(find_in_source_paths("services/#{service}.yml.erb"))
      context = OpenStruct.new(env: @env, port: Docker::Stack.port_for(service, @env)).instance_eval { binding }
      yaml = Thor::Actions::CapturableERB.new(::File.binread(source), nil, '-', '@output_buffer').tap do |erb|
        erb.filename = source
      end.result(context)
      YAML.safe_load(yaml)
    end
  end
end

Public Instance Methods

add_service_for_environment() click to toggle source
# File lib/generators/docker/stack/service.rb, line 28
def add_service_for_environment
  new_service_config = current_service_config.deep_merge(service_from_template(service))
  say_status :update, "#{relative_to_original_destination_root(compose_file_full_path)} [#{service}]", true
  File.open(compose_file_full_path, 'w') do |f|
    YAML.dump(new_service_config, f)
  end
end
service() click to toggle source
# File lib/generators/docker/stack/service.rb, line 24
def service
  self.class.generator_name
end
service_from_template(service) click to toggle source
# File lib/generators/docker/stack/service.rb, line 36
def service_from_template(service)
  source  = File.expand_path(find_in_source_paths("services/#{service}.yml.erb"))
  context = OpenStruct.new(env: @env, port: Docker::Stack.port_for(service, @env)).instance_eval { binding }
  yaml = Thor::Actions::CapturableERB.new(::File.binread(source), nil, '-', '@output_buffer').tap do |erb|
    erb.filename = source
  end.result(context)
  YAML.safe_load(yaml)
end