Module: Docker::Stack::Service

Included in:
FedoraGenerator, PostgresGenerator, RedisGenerator, SolrGenerator
Defined in:
lib/generators/docker/stack/service.rb,
lib/generators/docker/stack/service/solr_generator.rb,
lib/generators/docker/stack/service/redis_generator.rb,
lib/generators/docker/stack/service/fedora_generator.rb,
lib/generators/docker/stack/service/postgres_generator.rb

Defined Under Namespace

Classes: FedoraGenerator, PostgresGenerator, RedisGenerator, SolrGenerator

Class Method Summary collapse

Class Method Details

.included(base) ⇒ Object



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/generators/docker/stack/service.rb', line 8

def self.included(base)
  base.include Util

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

  base.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_offset: port_offset).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

    def port_offset
      { 'development' => 0, 'test' => 2 }[@env] || 0
    end
  end
end