Implement `mkdir' task action

This commit is contained in:
Thibault Jouan 2014-01-21 15:50:07 +00:00
parent f147ce7d65
commit 7f5d1a4085
9 changed files with 75 additions and 1 deletions

View File

@ -0,0 +1,14 @@
@sshd
Feature: `mkdir' task action
Scenario: creates directory given as argument
Given a recipe with:
"""
target 'some_host.test'
task :create_some_dir do
mkdir 'some_directory'
end
"""
When I successfully execute the recipe
Then the remote directory "some_directory" must exists

View File

@ -6,6 +6,10 @@ Given /^a remote file named "([^"]+)"$/ do |file_name|
write_file file_name, '' write_file file_name, ''
end end
Then /^the remote directory "([^"]+)" should exists$/ do |path|
check_directory_presence([path], true)
end
Then /^the remote file "([^"]+)" should contain "([^"]+)"/ do |path, content| Then /^the remote file "([^"]+)" should contain "([^"]+)"/ do |path, content|
check_file_content path, content, true check_file_content path, content, true
end end

View File

@ -2,6 +2,7 @@
require 'producer/core/action' require 'producer/core/action'
require 'producer/core/actions/echo' require 'producer/core/actions/echo'
require 'producer/core/actions/shell_command' require 'producer/core/actions/shell_command'
require 'producer/core/actions/mkdir'
require 'producer/core/actions/file_writer' require 'producer/core/actions/file_writer'
# condition tests (need to be defined before the condition DSL) # condition tests (need to be defined before the condition DSL)

View File

@ -0,0 +1,15 @@
module Producer
module Core
module Actions
class Mkdir < Action
def apply
fs.mkdir path
end
def path
arguments.first
end
end
end
end
end

View File

@ -26,6 +26,10 @@ module Producer
false false
end end
def mkdir(path)
sftp.mkdir! path
end
def file_write(path, content) def file_write(path, content)
sftp.file.open path, 'w' do |f| sftp.file.open path, 'w' do |f|
f.write content f.write content

View File

@ -13,6 +13,7 @@ module Producer
define_action :echo, Actions::Echo define_action :echo, Actions::Echo
define_action :sh, Actions::ShellCommand define_action :sh, Actions::ShellCommand
define_action :mkdir, Actions::Mkdir
define_action :file_write, Actions::FileWriter define_action :file_write, Actions::FileWriter
attr_reader :env, :block, :actions attr_reader :env, :block, :actions

View File

@ -0,0 +1,23 @@
require 'spec_helper'
module Producer::Core
describe Actions::Mkdir do
let(:env) { Env.new }
let(:path) { 'some_path' }
subject(:mkdir) { Actions::Mkdir.new(env, path) }
describe '#apply' do
it 'creates directory on remote filesystem' do
expect(mkdir.fs).to receive(:mkdir).with(path)
mkdir.apply
end
end
describe '#path' do
it 'returns the path' do
expect(mkdir.path).to eq path
end
end
end
end

View File

@ -112,6 +112,18 @@ module Producer::Core
end end
end end
describe '#mkdir' do
let(:sftp) { double 'sftp' }
let(:path) { 'some_directory_path' }
before { allow(fs).to receive(:sftp) { sftp } }
it 'creates the directory' do
expect(sftp).to receive(:mkdir!).with(path)
fs.mkdir path
end
end
describe '#file_write' do describe '#file_write' do
let(:sftp) { double('sftp').as_null_object } let(:sftp) { double('sftp').as_null_object }
let(:file) { double('sftp').as_null_object } let(:file) { double('sftp').as_null_object }

View File

@ -6,7 +6,7 @@ module Producer::Core
let(:env) { Env.new } let(:env) { Env.new }
subject(:dsl) { Task::DSL.new(env, &block) } subject(:dsl) { Task::DSL.new(env, &block) }
%w[echo sh file_write].each do |action| %w[echo sh mkdir file_write].each do |action|
it "has `#{action}' action defined" do it "has `#{action}' action defined" do
expect(dsl).to respond_to action.to_sym expect(dsl).to respond_to action.to_sym
end end