dockercompose-generator 0.1.0 → 0.2.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b9fac07a73f25351f7d58ffc5bd6c141d9209e0c
4
- data.tar.gz: a568e7e7ffb7751bd0f0ebdfd6c658e1dda9238f
3
+ metadata.gz: ce43c3684c9259b4c1272324a0867c8e374164a5
4
+ data.tar.gz: 88c6897c33bb37782a46fb94264bb6f415ffbbfb
5
5
  SHA512:
6
- metadata.gz: fd20d5ce9e12194061ee61dabfa0c3eb5522e8bb8fc96328d74682a9d92a1639e75a224567224e65d7f20dfa903159bb7f3a07a13936e618d106f97f507c75f6
7
- data.tar.gz: d7600b74b259797e4158383b65850e8101044f04bc5d392599c4345d65a9ed479c2493259dd1b725539b32467e2cdf71dd86abdb759194c1c85caa44acb58fdb
6
+ metadata.gz: 0e760b9e7d2db5f11ef36f56633f07e8bc03654637b5d97576b57a637e451fb5dbd6a76a326df366779da077be30723be5eea9cda16597b81bc27771778c1545
7
+ data.tar.gz: 281853a06adff75a9df3869c844e06e298c19f16873f1eb33a68beaee563669ddb108772da000415092c1d5446159a8a988b09b34e4302df0befed72ae0d50b3
@@ -1,10 +1,19 @@
1
1
  language: ruby
2
2
  rvm:
3
- - "1.9.3"
4
- - "2.1.4"
5
- - "2.2.2"
3
+ - 1.9.3
4
+ - 2.0.0
5
+ - 2.1.4
6
+ - 2.2.2
6
7
  notifications:
7
8
  email: false
8
9
  addons:
9
- code_climate:
10
- repo_token: 668bb7c5d7f42d3e8dcb17598688bd650d21f6b600f54094f7da97d74c0b43ab
10
+ code_climate:
11
+ repo_token: 668bb7c5d7f42d3e8dcb17598688bd650d21f6b600f54094f7da97d74c0b43ab
12
+ deploy:
13
+ provider: rubygems
14
+ api_key:
15
+ secure: UQmEbIJ3z2ZJ1WOuGPQEtIHeDEEhCxol3kdL7CNFDzYge9gU2jqWfVbgBgB2fmhlOCsREy7VHettGpPoPQ0chYtOIAZcoL/8HBjnkcab6ucllCI90NDjQ8wTja2WTAPJQ3f6MeY3bu9bHlI+Wwn8dmPYnGu0NbDva5YdVZmA0jD2f8vOWBLr2RSg7MmP+cvAUMyBf+eNH/IcYdP9mz1/fney37Dy7fUu0mUuLTqP8/gO9uc2wom9GkFcMHZyfnUQwQVun4raimJX7R9i/3zVxPxrL6/IJ9qQ1NxwRRDhN12gmkviJ7vW+zTbjCQc/fXghoaeivJWtMSR3sfYRPBTjSU6YbNZjD0uFLuyHHLwhBbTZyY9vxaYbY9RFtbg5Fmc0MA4xrRNFzi25wUMm3XDDfvMmV6XCRsWFxej/c95AlKzGxaps0uDjnEoETUnz5Dg+pX4WqV788rajDcBFv3Obc5WyDVnelIzoZQ6MCh51ZtDSw3t1t2Go1XaKmjZxLtp0/UmaB4N4qlfN5pMaiVg3lhwuPBWifDSMnyIEmWHLzobIJTlCyEdavDXwFjBBXF1gktHSc+MNvdr4eECGUaxa4T1jMEXQ5IF4POFUFxQlVdp0h0dWFvCHMLlLWNv3ZlMoBa7tV6yl/gOkHH+kyRsEmZZTBgIT9o/YcgTzgd5VO8=
16
+ gem: dockercompose-generator
17
+ on:
18
+ tags: true
19
+ repo: jwhitcraft/dockercompose-generator
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # DockerCompose::Generator
2
2
 
3
- [![Build Status](https://travis-ci.org/jwhitcraft/dockercompose-generator.svg?branch=master)](https://travis-ci.org/jwhitcraft/dockercompose-generator) [![Coverage Status](https://coveralls.io/repos/jwhitcraft/dockercompose-generator/badge.svg?branch=master&service=github)](https://coveralls.io/github/jwhitcraft/dockercompose-generator?branch=master) [![Code Climate](https://codeclimate.com/github/jwhitcraft/dockercompose-generator/badges/gpa.svg)](https://codeclimate.com/github/jwhitcraft/dockercompose-generator)
3
+ [![Build Status](https://travis-ci.org/jwhitcraft/dockercompose-generator.svg?branch=master)](https://travis-ci.org/jwhitcraft/dockercompose-generator) [![Coverage Status](https://coveralls.io/repos/jwhitcraft/dockercompose-generator/badge.svg?branch=master&service=github)](https://coveralls.io/github/jwhitcraft/dockercompose-generator?branch=master) [![Code Climate](https://codeclimate.com/github/jwhitcraft/dockercompose-generator/badges/gpa.svg)](https://codeclimate.com/github/jwhitcraft/dockercompose-generator) [![Gem Version](https://badge.fury.io/rb/dockercompose-generator.svg)](http://badge.fury.io/rb/dockercompose-generator)
4
4
 
5
5
  Generate a Docker-Compose Yaml file
6
6
 
@@ -9,7 +9,7 @@ Generate a Docker-Compose Yaml file
9
9
  Add this line to your application's Gemfile:
10
10
 
11
11
  ```ruby
12
- gem 'docker-compose-generator'
12
+ gem 'dockercompose-generator'
13
13
  ```
14
14
 
15
15
  And then execute:
@@ -18,7 +18,7 @@ And then execute:
18
18
 
19
19
  Or install it yourself as:
20
20
 
21
- $ gem install docker-compose-generator
21
+ $ gem install dockercompose-generator
22
22
 
23
23
  ## Usage
24
24
 
@@ -55,9 +55,14 @@ web:
55
55
  - db:mysql
56
56
  ```
57
57
 
58
+ ## TODO
59
+
60
+ - Support more options than `links`, `ports`, and `environment` variables
61
+ - Add an Importer to seed the services
62
+
58
63
  ## Contributing
59
64
 
60
- 1. Fork it ( https://github.com/jwhitcraft/docker-compose-generator/fork )
65
+ 1. Fork it ( https://github.com/jwhitcraft/dockercompose-generator/fork )
61
66
  2. Create your feature branch (`git checkout -b my-new-feature`)
62
67
  3. Commit your changes (`git commit -am 'Add some feature'`)
63
68
  4. Push to the branch (`git push origin my-new-feature`)
@@ -17,6 +17,7 @@ Gem::Specification.new do |spec|
17
17
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
19
  spec.require_paths = ['lib']
20
+ spec.required_ruby_version = '>= 1.9.3'
20
21
 
21
22
  spec.add_development_dependency 'bundler', '~> 1.7'
22
23
  spec.add_development_dependency 'rake', '~> 10.0'
@@ -1,9 +1,32 @@
1
+ require 'docker-compose/generator/service/ports'
2
+ require 'docker-compose/generator/service/links'
3
+ require 'docker-compose/generator/service/environment'
4
+ require 'docker-compose/generator/service/labels'
5
+ require 'docker-compose/generator/service/net'
6
+ require 'docker-compose/generator/service/pid'
7
+ require 'docker-compose/generator/service/volumes'
8
+
1
9
  module DockerCompose
2
10
  module Generator
3
11
  # Service Class
4
12
  #
5
13
  # Used to interact with services
6
14
  class Service
15
+ # Handles Ports
16
+ include Ports
17
+ # Handles Links and External Links
18
+ include Links
19
+ # Handles Environment Variables
20
+ include Environment
21
+ # Handles Labels
22
+ include Labels
23
+ # Handles Net Setting
24
+ include Net
25
+ # Handles Pid Setting
26
+ include Pid
27
+ # Handles Volumes
28
+ include Volumes
29
+
7
30
  attr_reader :name, :attrs
8
31
 
9
32
  def initialize(name, image)
@@ -13,57 +36,40 @@ module DockerCompose
13
36
  }
14
37
  end
15
38
 
16
- def add_environment(name, value)
17
- add_to_object('environment', name.upcase, value)
18
- end
19
-
20
- def drop_environment(name)
21
- drop_from_object('environment', name.upcase)
22
- end
23
-
24
- def environment?(name)
25
- (@attrs['environment'] && @attrs['environment'][name.upcase])
26
- end
27
-
28
- def add_link(service, link_name = nil)
29
- name = service.name
30
- name = "#{name}:#{link_name}" unless link_name.nil?
31
-
32
- add_to_array('links', name)
33
- end
34
-
35
- def drop_link(service, link_name = nil)
36
- name = service.name
37
- name = "#{name}:#{link_name}" unless link_name.nil?
38
-
39
- drop_from_array('links', name)
40
- end
41
-
42
- def link?(service, link_name = nil)
43
- name = service.name
44
- name = "#{name}:#{link_name}" unless link_name.nil?
45
-
46
- links = @attrs['links'] || []
47
- links.include?(name)
39
+ # Variables that only allow one value
40
+ #
41
+ # Create the {method=} and {method?} methods dynamically
42
+ # since these only accept one value
43
+ [:build, :dockerfile, :command, :working_dir, :entrypoint, :user,
44
+ :hostname, :domainname, :mac_address, :mem_limit, :memswap_limit,
45
+ :privileged, :restart, :stdin_open, :tty, :cpu_shares, :cpuset,
46
+ :read_only, :volume_driver, :container_name].each do |method|
47
+ define_method "#{method}?" do
48
+ (@attrs["#{method}"])
49
+ end
50
+ define_method "#{method}=" do |value|
51
+ @attrs["#{method}"] = value
52
+ end
48
53
  end
49
54
 
50
- def add_port(source, target = nil, type = 'tcp')
51
- target ||= source
52
-
53
- add_to_array('ports', "#{source}:#{target}/#{type}")
54
- end
55
-
56
- def drop_port(source, target, type = 'tcp')
57
- target ||= source
58
-
59
- drop_from_array('ports', "#{source}:#{target}/#{type}")
60
- end
61
-
62
- def port?(source, target = nil, type = 'tcp')
63
- target ||= source
64
-
65
- ports = @attrs['ports'] || []
66
- ports.include?("#{source}:#{target}/#{type}")
55
+ # Variables that are a list of single items
56
+ #
57
+ # Create the {add_method}, {drop_method} and {method?} dynamically
58
+ # since they accept a list of single objects
59
+ [:expose, :volumes_from, :dns, :extra_hosts, :dns_search, :cap_add,
60
+ :cap_drop, :env_file].each do |method|
61
+ define_method "#{method}?" do |item|
62
+ items = @attrs["#{method}"] || []
63
+ items.include?(item)
64
+ end
65
+
66
+ define_method "add_#{method}" do |item|
67
+ add_to_array("#{method}", item)
68
+ end
69
+
70
+ define_method "drop_#{method}" do |item|
71
+ drop_from_array("#{method}", item)
72
+ end
67
73
  end
68
74
 
69
75
  private
@@ -0,0 +1,20 @@
1
+ module DockerCompose
2
+ module Generator
3
+ class Service
4
+ # Handles Environment Variables in the docker-compose file
5
+ module Environment
6
+ def add_environment(name, value)
7
+ add_to_object('environment', name.upcase, value)
8
+ end
9
+
10
+ def drop_environment(name)
11
+ drop_from_object('environment', name.upcase)
12
+ end
13
+
14
+ def environment?(name)
15
+ (@attrs['environment'] && @attrs['environment'][name.upcase])
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,20 @@
1
+ module DockerCompose
2
+ module Generator
3
+ class Service
4
+ # Handles Labels in the docker-compose file
5
+ module Labels
6
+ def add_label(name, value)
7
+ add_to_object('labels', name, value)
8
+ end
9
+
10
+ def drop_label(name)
11
+ drop_from_object('labels', name)
12
+ end
13
+
14
+ def label?(name)
15
+ (@attrs['labels'] && @attrs['labels'][name])
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,40 @@
1
+ module DockerCompose
2
+ module Generator
3
+ class Service
4
+ # Handles Service Links in the docker-compose file
5
+ module Links
6
+ def add_link(service, link_name = nil)
7
+ add_to_array('links', link_name(service.name, link_name))
8
+ end
9
+
10
+ def drop_link(service, link_name = nil)
11
+ drop_from_array('links', link_name(service.name, link_name))
12
+ end
13
+
14
+ def link?(service, link_name = nil)
15
+ links = @attrs['links'] || []
16
+ links.include?(link_name(service.name, link_name))
17
+ end
18
+
19
+ def add_external_link(service_name, link_name = nil)
20
+ add_to_array('external_links', link_name(service_name, link_name))
21
+ end
22
+
23
+ def drop_external_link(service_name, link_name = nil)
24
+ drop_from_array('external_links', link_name(service_name, link_name))
25
+ end
26
+
27
+ def external_link?(service_name, link_name = nil)
28
+ links = @attrs['external_links'] || []
29
+ links.include?(link_name(service_name, link_name))
30
+ end
31
+
32
+ private
33
+
34
+ def link_name(name, link_name = nil)
35
+ (link_name) ? "#{name}:#{link_name}" : "#{name}"
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,14 @@
1
+ module DockerCompose
2
+ module Generator
3
+ class Service
4
+ # Handles Net Option in the docker-compose file
5
+ module Net
6
+ def net=(value)
7
+ return @attrs.delete('net') if value.nil?
8
+ valid_values = %w(bridge none host container:name container:id)
9
+ @attrs['net'] = value if valid_values.include?(value)
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,13 @@
1
+ module DockerCompose
2
+ module Generator
3
+ class Service
4
+ # Handles Pid Option in the docker-compose file
5
+ module Pid
6
+ def pid=(value)
7
+ return @attrs['pid'] = 'host' if value.is_a?(TrueClass)
8
+ @attrs.delete('pid')
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,27 @@
1
+ module DockerCompose
2
+ module Generator
3
+ class Service
4
+ # Handles Ports in the docker-compose file
5
+ module Ports
6
+ def add_port(host, container = nil)
7
+ host = "#{host}:#{container}" if container
8
+
9
+ add_to_array('ports', "#{host}")
10
+ end
11
+
12
+ def drop_port(host, container)
13
+ host = "#{host}:#{container}" if container
14
+
15
+ drop_from_array('ports', "#{host}")
16
+ end
17
+
18
+ def port?(host, container = nil)
19
+ host = "#{host}:#{container}" if container
20
+
21
+ ports = @attrs['ports'] || []
22
+ ports.include?("#{host}")
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,30 @@
1
+ module DockerCompose
2
+ module Generator
3
+ class Service
4
+ # Handles Volumes in the docker-compose file
5
+ module Volumes
6
+ def add_volume(host, container = nil, mode = nil)
7
+ add_to_array('volumes', volume_name(host, container, mode))
8
+ end
9
+
10
+ def drop_volume(host, container, mode = nil)
11
+ drop_from_array('volumes', volume_name(host, container, mode))
12
+ end
13
+
14
+ def volume?(host, container = nil, mode = nil)
15
+ volumes = @attrs['volumes'] || []
16
+ volumes.include?(volume_name(host, container, mode))
17
+ end
18
+
19
+ private
20
+
21
+ def volume_name(host, container = nil, mode = nil)
22
+ volume = "#{host}:#{container}" if container
23
+ volume += ":#{mode}" if container && mode
24
+
25
+ volume
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -7,7 +7,7 @@ module DockerCompose
7
7
 
8
8
  # Current minor release.
9
9
  # @return [Integer]
10
- MINOR = 1
10
+ MINOR = 2
11
11
 
12
12
  # Current patch level.
13
13
  # @return [Integer]
@@ -2,6 +2,58 @@ require 'helper.rb'
2
2
 
3
3
  describe 'DockerCompose::Generator::Service' do
4
4
  let(:service) { DockerCompose::Generator::Service.new('rspec_test', 'test_image') }
5
+
6
+ shared_examples_for 'an array list' do
7
+ let(:variable) { '' }
8
+ context "array_list" do
9
+ it 'sets the value' do
10
+ service.send("add_#{variable}", 'test')
11
+ expect(service.send("#{variable}?", 'test')).to be_truthy
12
+ end
13
+ it 'does not have a value' do
14
+ expect(service.send("#{variable}?", 'test')).to be_falsey
15
+ end
16
+ it 'will drop the value' do
17
+ service.send("add_#{variable}", 'test')
18
+ expect(service.send("#{variable}?", 'test')).to be_truthy
19
+ service.send("drop_#{variable}", 'test')
20
+ expect(service.send("#{variable}?", 'test')).to be_falsey
21
+ end
22
+ end
23
+ end
24
+
25
+ [:expose, :volumes_from, :dns, :extra_hosts, :dns_search, :cap_add, :cap_drop, :env_file].each do |method|
26
+ context "##{method}" do
27
+ it_behaves_like 'an array list' do
28
+ let(:variable) { "#{method}" }
29
+ end
30
+ end
31
+ end
32
+
33
+ shared_examples_for 'a single value' do
34
+ let(:variable) { '' }
35
+ context 'single value' do
36
+ it 'sets the value' do
37
+ service.send("#{variable}=", 'test')
38
+ expect(service.send("#{variable}?")).to be_truthy
39
+ end
40
+ it 'does not have a value' do
41
+ expect(service.send("#{variable}?")).to be_falsey
42
+ end
43
+ end
44
+ end
45
+
46
+ [:build, :dockerfile, :command, :working_dir, :entrypoint, :user, :hostname, :domainname, :mac_address,
47
+ :mem_limit, :memswap_limit, :privileged, :restart, :stdin_open, :tty, :cpu_shares, :cpuset,
48
+ :read_only, :volume_driver, :container_name].each do |method|
49
+ context "##{method}" do
50
+ it_behaves_like 'a single value' do
51
+ let(:variable) { "#{method}" }
52
+ end
53
+ end
54
+ end
55
+
56
+
5
57
  context 'environment' do
6
58
  it 'sets environment variable' do
7
59
  service.add_environment('test_env', 'value')
@@ -13,33 +65,47 @@ describe 'DockerCompose::Generator::Service' do
13
65
  end
14
66
 
15
67
  it 'will drop environment variable' do
16
- expect(service.add_environment('test_env', 'value')).to eq('value')
17
- expect(service.drop_environment('test_env')).to eq('value')
68
+ service.add_environment('test_env', 'value')
69
+ expect(service).to be_environment('test_env')
70
+ service.drop_environment('test_env')
18
71
  expect(service).not_to be_environment('test_env')
19
72
  end
20
73
  end
21
74
 
75
+ context 'labels' do
76
+ it 'sets labels variable' do
77
+ service.add_label('com.test.label', 'value')
78
+ expect(service).to be_label('com.test.label')
79
+ end
80
+
81
+ it 'does not have labels variable' do
82
+ expect(service).not_to be_label('com.test.label')
83
+ end
84
+
85
+ it 'will drop labels variable' do
86
+ service.add_label('com.test.label', 'value')
87
+ expect(service).to be_label('com.test.label')
88
+ service.drop_label('com.test.label')
89
+ expect(service).not_to be_label('com.test.label')
90
+ end
91
+ end
92
+
22
93
  context 'ports' do
23
- it 'sets ports variable with no target' do
94
+ it 'sets ports variable with no container port' do
24
95
  service.add_port('80')
25
96
  expect(service).to be_port('80')
26
97
  end
27
98
 
28
- it 'sets ports variable with target' do
99
+ it 'sets ports variable with container port' do
29
100
  service.add_port('80', '8080')
30
101
  expect(service).to be_port('80', '8080')
31
102
  end
32
103
 
33
- it 'sets ports variable with target and type' do
34
- service.add_port('80', '8080', 'http')
35
- expect(service).to be_port('80', '8080', 'http')
36
- end
37
-
38
- it 'does not have ports variable' do
104
+ it 'does not have ports registered' do
39
105
  expect(service).not_to be_port('9090')
40
106
  end
41
107
 
42
- it 'will drop ports variable' do
108
+ it 'will drop ports' do
43
109
  service.add_port('80', '8080')
44
110
  service.drop_port('80', '8080')
45
111
  expect(service).not_to be_port('80', '8080')
@@ -47,33 +113,119 @@ describe 'DockerCompose::Generator::Service' do
47
113
  end
48
114
 
49
115
  context 'links' do
50
- let(:link_service) { DockerCompose::Generator::Service.new('link_service', 'test_link_image') }
51
- it 'sets link variable without a name' do
52
- service.add_link(link_service)
53
- expect(service).to be_link(link_service)
116
+ shared_examples_for 'a link list' do
117
+ let(:link) { DockerCompose::Generator::Service.new('link_service', 'test_link_image') }
118
+ let(:attribute) { 'link' }
119
+
120
+ context 'adds a link' do
121
+ it 'sets link variable without a name' do
122
+ service.send("add_#{attribute}", link)
123
+ expect(service.send("#{attribute}?", link)).to be_truthy
124
+ end
125
+
126
+ it 'sets link variable with a custom link name' do
127
+ service.send("add_#{attribute}", link, 'my_custom_name')
128
+ expect(service.send("#{attribute}?", link, 'my_custom_name')).to be_truthy
129
+ end
130
+ end
131
+
132
+ context 'does not have a link' do
133
+ it 'does not have a link' do
134
+ expect(service.send("#{attribute}?", link)).to be_falsey
135
+ end
136
+
137
+ it 'does not have a link with a custom_name' do
138
+ service.send("add_#{attribute}", link)
139
+ expect(service.send("#{attribute}?", link, 'my_custom_name')).to be_falsey
140
+ end
141
+ end
142
+
143
+ context 'drops a link' do
144
+ it 'will drop link without custom name' do
145
+ service.send("add_#{attribute}", link)
146
+ expect(service.send("#{attribute}?", link)).to be_truthy
147
+ service.send("drop_#{attribute}", link)
148
+ expect(service.send("#{attribute}?", link)).to be_falsey
149
+ end
150
+
151
+ it 'will drop link with a custom name' do
152
+ service.send("add_#{attribute}", link, 'my_custom_name')
153
+ expect(service.send("#{attribute}?", link, 'my_custom_name')).to be_truthy
154
+ service.send("drop_#{attribute}", link, 'my_custom_name')
155
+ expect(service.send("#{attribute}?", link, 'my_custom_name')).to be_falsey
156
+ end
157
+ end
158
+
54
159
  end
55
160
 
56
- it 'sets link variable with a custom link name' do
57
- service.add_link(link_service, 'my_custom_name')
58
- expect(service).to be_link(link_service, 'my_custom_name')
161
+ it_behaves_like 'a link list'
162
+
163
+ it_behaves_like 'a link list' do
164
+ let(:attribute) { 'external_link' }
165
+ let(:link) { 'my_external_link' }
59
166
  end
60
167
 
61
- it 'does not have a link' do
62
- expect(service).not_to be_link(link_service)
168
+ end
169
+
170
+ context '#net=' do
171
+ %w(bridge none host container:name container:id).each do |item|
172
+ it "sets net to #{item}" do
173
+ expect(service.net=item).to eq(item)
174
+ end
63
175
  end
64
176
 
65
- it 'will drop link without custom name' do
66
- service.add_link(link_service)
67
- expect(service).to be_link(link_service)
68
- service.drop_link(link_service)
69
- expect(service).not_to be_link(link_service)
177
+ it 'sets deletes net when nil passed in' do
178
+ expect(service.net='none').to eq('none')
179
+ service.net=nil
180
+ expect(service.attrs.include?('net')).to be_falsey
70
181
  end
182
+ end
183
+
184
+ context '#pid=' do
185
+ it 'sets pid to host when true is passed in' do
186
+ service.pid=true
187
+ expect(service.attrs.include?('pid')).to be_truthy
188
+ expect(service.attrs['pid']).to eq('host')
189
+ end
190
+ it 'does not set pid to host when non TrueClass passed in' do
191
+ service.pid = 'test'
192
+ expect(service.attrs.include?('pid')).to be_falsey
193
+ end
194
+ end
71
195
 
72
- it 'will drop link with a custom name' do
73
- service.add_link(link_service, 'my_custom_name')
74
- expect(service).to be_link(link_service, 'my_custom_name')
75
- service.drop_link(link_service, 'my_custom_name')
76
- expect(service).not_to be_link(link_service, 'my_custom_name')
196
+ context 'volumes' do
197
+ it 'does not have volume registered' do
198
+ expect(service).not_to be_volume('/dev/null')
77
199
  end
200
+
201
+ shared_examples_for 'volumes' do
202
+ let(:host) { '/dev/null' }
203
+ let(:container) { nil }
204
+ let(:mode) { nil }
205
+ context 'add' do
206
+ it 'adds volume' do
207
+ service.add_volume(host, container, mode)
208
+ expect(service).to be_volume(host, container, mode)
209
+ end
210
+ end
211
+ context 'drops volume' do
212
+ it 'will drop volume with container volume' do
213
+ service.add_volume(host, container, mode)
214
+ expect(service).to be_volume(host, container, mode)
215
+ service.drop_volume(host, container, mode)
216
+ expect(service).not_to be_volume(host, container, mode)
217
+ end
218
+ end
219
+ end
220
+
221
+ it_behaves_like 'volumes'
222
+ it_behaves_like 'volumes' do
223
+ let(:container) { '/dev/test' }
224
+ end
225
+ it_behaves_like 'volumes' do
226
+ let(:container) { '/dev/test' }
227
+ let(:mode) { 'ro' }
228
+ end
229
+
78
230
  end
79
231
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dockercompose-generator
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jon Whitcraft
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-09-25 00:00:00.000000000 Z
11
+ date: 2015-09-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -57,6 +57,13 @@ files:
57
57
  - docker-compose-generator.gemspec
58
58
  - lib/docker-compose/generator.rb
59
59
  - lib/docker-compose/generator/service.rb
60
+ - lib/docker-compose/generator/service/environment.rb
61
+ - lib/docker-compose/generator/service/labels.rb
62
+ - lib/docker-compose/generator/service/links.rb
63
+ - lib/docker-compose/generator/service/net.rb
64
+ - lib/docker-compose/generator/service/pid.rb
65
+ - lib/docker-compose/generator/service/ports.rb
66
+ - lib/docker-compose/generator/service/volumes.rb
60
67
  - lib/docker-compose/generator/version.rb
61
68
  - spec/docker-compose/generator/service_spec.rb
62
69
  - spec/docker-compose/generator_spec.rb
@@ -73,7 +80,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
73
80
  requirements:
74
81
  - - ">="
75
82
  - !ruby/object:Gem::Version
76
- version: '0'
83
+ version: 1.9.3
77
84
  required_rubygems_version: !ruby/object:Gem::Requirement
78
85
  requirements:
79
86
  - - ">="
@@ -81,7 +88,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
81
88
  version: '0'
82
89
  requirements: []
83
90
  rubyforge_project:
84
- rubygems_version: 2.4.5
91
+ rubygems_version: 2.2.2
85
92
  signing_key:
86
93
  specification_version: 4
87
94
  summary: Programmatically create a yaml file for docker-compose
@@ -89,3 +96,4 @@ test_files:
89
96
  - spec/docker-compose/generator/service_spec.rb
90
97
  - spec/docker-compose/generator_spec.rb
91
98
  - spec/helper.rb
99
+ has_rdoc: