From f9d26b1a6f0556eb62f5aeb1c27b237b82427ddc Mon Sep 17 00:00:00 2001 From: Hauke Klement Date: Thu, 5 Feb 2015 09:24:13 +0100 Subject: [PATCH] extended Docker::Container with utility methods --- config/initializers/mixins.rb | 1 + lib/docker_client.rb | 8 +++----- lib/docker_container_mixin.rb | 9 +++++++++ spec/lib/docker_container_mixin_spec.rb | 11 +++++++++++ 4 files changed, 24 insertions(+), 5 deletions(-) create mode 100644 config/initializers/mixins.rb create mode 100644 lib/docker_container_mixin.rb create mode 100644 spec/lib/docker_container_mixin_spec.rb diff --git a/config/initializers/mixins.rb b/config/initializers/mixins.rb new file mode 100644 index 00000000..ca527e2d --- /dev/null +++ b/config/initializers/mixins.rb @@ -0,0 +1 @@ +Docker::Container::send(:include, DockerContainerMixin) diff --git a/lib/docker_client.rb b/lib/docker_client.rb index 00fd8872..c3a87c51 100644 --- a/lib/docker_client.rb +++ b/lib/docker_client.rb @@ -62,11 +62,9 @@ class DockerClient def self.destroy_container(container) container.stop.kill - if container.json['HostConfig']['PortBindings'] - container.json['HostConfig']['PortBindings'].values.each do |configuration| - port = configuration.first['HostPort'].to_i - PortPool.release(port) - end + (container.port_bindings.try(:values) || []).each do |configuration| + port = configuration.first['HostPort'].to_i + PortPool.release(port) end container.delete(force: true) end diff --git a/lib/docker_container_mixin.rb b/lib/docker_container_mixin.rb new file mode 100644 index 00000000..0563831f --- /dev/null +++ b/lib/docker_container_mixin.rb @@ -0,0 +1,9 @@ +module DockerContainerMixin + def binds + json['HostConfig']['Binds'] + end + + def port_bindings + json['HostConfig']['PortBindings'] + end +end diff --git a/spec/lib/docker_container_mixin_spec.rb b/spec/lib/docker_container_mixin_spec.rb new file mode 100644 index 00000000..24e45be9 --- /dev/null +++ b/spec/lib/docker_container_mixin_spec.rb @@ -0,0 +1,11 @@ +require 'rails_helper' + +describe DockerContainerMixin do + [:binds, :port_bindings].each do |method| + describe "##{method}" do + it 'is defined for Docker::Container' do + expect(Docker::Container.instance_methods).to include(method) + end + end + end +end