producer-core 0.2.3 → 0.2.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 5a041918f9bce8b0f9b2e02f487f3f988a4a9f7d
4
+ data.tar.gz: bcbc76158d5d64315c987bf864f85710d91e40e3
5
+ SHA512:
6
+ metadata.gz: 97ef8f650adc1065c930d87b20f2b03de4cc24086960752afcad1f0f455a24deaaeec2684037c3e732c3b5b6abc3092b8e90101c5e55a45f2addc6730cedd590
7
+ data.tar.gz: 3fc76e61d6eb8f70bafa2dcb7e175594d0db480fde82e9730e22290a9fe1fdd4ac7d51c5b16de640670fa640ba26117f36115e2635333e2b704aaa4d0f2cd689
@@ -0,0 +1,11 @@
1
+ Feature: CLI dry run option
2
+
3
+ Scenario: perfoms a trial run without applying actions
4
+ Given a recipe with:
5
+ """
6
+ task :say_hello do
7
+ echo 'hello'
8
+ end
9
+ """
10
+ When I successfully execute the recipe with option -n
11
+ Then the output must not contain "hello"
@@ -5,5 +5,5 @@ Feature: CLI usage
5
5
  Then the exit status must be 64
6
6
  And the output must contain exactly:
7
7
  """
8
- Usage: producer recipe_file
8
+ Usage: producer [-v] recipe_file
9
9
  """
@@ -0,0 +1,42 @@
1
+ Feature: CLI verbose option
2
+
3
+ Scenario: prints tasks name
4
+ Given a recipe with:
5
+ """
6
+ task :say_hello do
7
+ end
8
+ """
9
+ When I successfully execute the recipe with option -v
10
+ Then the output must match /Task:.+say_hello/
11
+
12
+ Scenario: prints whether condition is met
13
+ Given a recipe with:
14
+ """
15
+ task :task_ok do
16
+ condition { true }
17
+ end
18
+ task :task_ko do
19
+ condition { false }
20
+ end
21
+ """
22
+ When I successfully execute the recipe with option -v
23
+ Then the output must match /task_ok.+ condition: met.*task_ko.* condition: NOT met/
24
+
25
+ Scenario: prints actions info
26
+ Given a recipe with:
27
+ """
28
+ task :say_hello do
29
+ echo 'hello message'
30
+ end
31
+ """
32
+ When I successfully execute the recipe with option -v
33
+ Then the output must match /say_hello.+ action: echo/
34
+
35
+ Scenario: formats message with our simple logger
36
+ Given a recipe with:
37
+ """
38
+ task :say_hello do
39
+ end
40
+ """
41
+ When I successfully execute the recipe with option -v
42
+ Then the output must match /\ATask:.+say_hello.*\n.*condition/
@@ -11,6 +11,11 @@ When /^I successfully execute the recipe$/ do
11
11
  assert_exit_status 0
12
12
  end
13
13
 
14
+ When /^I successfully execute the recipe with option (-\w)$/ do |option|
15
+ run_simple "producer #{option} recipe.rb", false
16
+ assert_exit_status 0
17
+ end
18
+
14
19
  When /^I execute the recipe interactively$/ do
15
20
  run_interactive 'producer recipe.rb'
16
21
  end
data/lib/producer/core.rb CHANGED
@@ -28,6 +28,7 @@ require 'producer/core/condition'
28
28
  require 'producer/core/condition/dsl'
29
29
  require 'producer/core/env'
30
30
  require 'producer/core/errors'
31
+ require 'producer/core/logger_formatter'
31
32
  require 'producer/core/prompter'
32
33
  require 'producer/core/recipe'
33
34
  require 'producer/core/recipe/dsl'
@@ -11,6 +11,14 @@ module Producer
11
11
  @env = env
12
12
  @arguments = args
13
13
  end
14
+
15
+ def name
16
+ self.class.name.split('::').last.downcase
17
+ end
18
+
19
+ def to_s
20
+ name
21
+ end
14
22
  end
15
23
  end
16
24
  end
@@ -2,6 +2,10 @@ module Producer
2
2
  module Core
3
3
  module Actions
4
4
  class Echo < Action
5
+ def name
6
+ 'echo'
7
+ end
8
+
5
9
  def apply
6
10
  output.puts arguments.first
7
11
  end
@@ -2,6 +2,10 @@ module Producer
2
2
  module Core
3
3
  module Actions
4
4
  class FileAppend < Action
5
+ def name
6
+ 'file_append'
7
+ end
8
+
5
9
  def apply
6
10
  fs.file_write path, combined_content
7
11
  end
@@ -2,6 +2,10 @@ module Producer
2
2
  module Core
3
3
  module Actions
4
4
  class FileReplaceContent < Action
5
+ def name
6
+ 'file_replace_content'
7
+ end
8
+
5
9
  def apply
6
10
  fs.file_write path, replaced_content
7
11
  end
@@ -2,6 +2,10 @@ module Producer
2
2
  module Core
3
3
  module Actions
4
4
  class FileWriter < Action
5
+ def name
6
+ 'file_write'
7
+ end
8
+
5
9
  def apply
6
10
  case arguments.size
7
11
  when 2
@@ -2,6 +2,10 @@ module Producer
2
2
  module Core
3
3
  module Actions
4
4
  class Mkdir < Action
5
+ def name
6
+ 'mkdir'
7
+ end
8
+
5
9
  def apply
6
10
  case arguments.size
7
11
  when 1
@@ -2,6 +2,10 @@ module Producer
2
2
  module Core
3
3
  module Actions
4
4
  class ShellCommand < Action
5
+ def name
6
+ 'sh'
7
+ end
8
+
5
9
  def apply
6
10
  remote.execute(arguments.first, output)
7
11
  end
@@ -3,7 +3,7 @@ module Producer
3
3
  class CLI
4
4
  ArgumentError = Class.new(::ArgumentError)
5
5
 
6
- USAGE = "Usage: #{File.basename $0} recipe_file"
6
+ USAGE = "Usage: #{File.basename $0} [-v] recipe_file"
7
7
 
8
8
  EX_USAGE = 64
9
9
 
@@ -11,6 +11,7 @@ module Producer
11
11
  def run!(arguments, output: $stderr)
12
12
  begin
13
13
  cli = new(arguments)
14
+ cli.parse_arguments!
14
15
  rescue ArgumentError
15
16
  output.puts USAGE
16
17
  exit EX_USAGE
@@ -19,21 +20,41 @@ module Producer
19
20
  end
20
21
  end
21
22
 
22
- attr_reader :arguments, :stdout, :recipe
23
+ attr_reader :arguments, :stdout, :env, :recipe
23
24
 
24
- def initialize(arguments, stdout: $stdout)
25
- raise ArgumentError unless arguments.any?
26
- @arguments = arguments
25
+ def initialize(args, stdout: $stdout)
26
+ @arguments = args
27
27
  @stdout = stdout
28
+ @env = Env.new(output: stdout)
28
29
  end
29
30
 
30
- def run(worker: Worker.new)
31
+ def parse_arguments!
32
+ @arguments = arguments.inject([]) do |m, e|
33
+ case e
34
+ when '-v'
35
+ env.log_level = Logger::INFO
36
+ when '-n'
37
+ env.dry_run = true
38
+ else
39
+ m << e
40
+ end
41
+ m
42
+ end
43
+
44
+ raise ArgumentError unless arguments.any?
45
+ end
46
+
47
+ def run(worker: build_worker)
31
48
  load_recipe
32
49
  worker.process recipe.tasks
33
50
  end
34
51
 
35
52
  def load_recipe
36
- @recipe = Recipe.evaluate_from_file(@arguments.first, Env.new)
53
+ @recipe = Recipe.evaluate_from_file(@arguments.first, env)
54
+ end
55
+
56
+ def build_worker
57
+ Worker.new(env)
37
58
  end
38
59
  end
39
60
  end
@@ -1,15 +1,15 @@
1
1
  module Producer
2
2
  module Core
3
3
  class Env
4
- attr_reader :input, :output, :registry
5
- attr_accessor :target
4
+ attr_reader :input, :output, :registry, :logger
5
+ attr_accessor :target, :dry_run
6
6
 
7
7
  def initialize(input: $stdin, output: $stdout, remote: nil, registry: {})
8
8
  @input = input
9
9
  @output = output
10
10
  @registry = registry
11
11
  @remote = remote
12
- @target = nil
12
+ @dry_run = false
13
13
  end
14
14
 
15
15
  def remote
@@ -23,6 +23,31 @@ module Producer
23
23
  def []=(key, value)
24
24
  @registry[key] = value
25
25
  end
26
+
27
+ def logger
28
+ @logger ||= begin
29
+ logger = Logger.new(output)
30
+ logger.level = Logger::ERROR
31
+ logger.formatter = LoggerFormatter.new
32
+ logger
33
+ end
34
+ end
35
+
36
+ def log(message)
37
+ logger.info message
38
+ end
39
+
40
+ def log_level
41
+ logger.level
42
+ end
43
+
44
+ def log_level=(level)
45
+ logger.level = level
46
+ end
47
+
48
+ def dry_run?
49
+ @dry_run
50
+ end
26
51
  end
27
52
  end
28
53
  end
@@ -0,0 +1,9 @@
1
+ module Producer
2
+ module Core
3
+ class LoggerFormatter < Logger::Formatter
4
+ def call(severity, datetime, progname, message)
5
+ message + "\n"
6
+ end
7
+ end
8
+ end
9
+ end
@@ -17,6 +17,10 @@ module Producer
17
17
  @condition = condition
18
18
  end
19
19
 
20
+ def to_s
21
+ name.to_s
22
+ end
23
+
20
24
  def condition_met?
21
25
  !!@condition
22
26
  end
@@ -1,5 +1,5 @@
1
1
  module Producer
2
2
  module Core
3
- VERSION = '0.2.3'
3
+ VERSION = '0.2.4'
4
4
  end
5
5
  end
@@ -1,12 +1,27 @@
1
1
  module Producer
2
2
  module Core
3
3
  class Worker
4
+ attr_accessor :env
5
+
6
+ def initialize(env)
7
+ @env = env
8
+ end
9
+
4
10
  def process(tasks)
5
11
  tasks.each { |t| process_task t }
6
12
  end
7
13
 
8
14
  def process_task(task)
9
- task.actions.each(&:apply) if task.condition_met?
15
+ env.log "Task: #{task} applying"
16
+ if task.condition_met?
17
+ env.log ' condition: met'
18
+ task.actions.each do |e|
19
+ env.log " action: #{e} applying"
20
+ e.apply unless env.dry_run?
21
+ end
22
+ else
23
+ env.log ' condition: NOT met'
24
+ end
10
25
  end
11
26
  end
12
27
  end
@@ -3,5 +3,13 @@ require 'spec_helper'
3
3
  module Producer::Core
4
4
  describe Action do
5
5
  it_behaves_like 'action'
6
+
7
+ describe '#name' do
8
+ subject(:action) { described_class.new(double 'env') }
9
+
10
+ it 'infers action name from class name' do
11
+ expect(action.name).to eq 'action'
12
+ end
13
+ end
6
14
  end
7
15
  end
@@ -6,29 +6,41 @@ module Producer::Core
6
6
  include FixturesHelpers
7
7
 
8
8
  let(:recipe_file) { fixture_path_for 'recipes/some_recipe.rb' }
9
- let(:arguments) { [recipe_file] }
9
+ let(:options) { [] }
10
+ let(:arguments) { [*options, recipe_file] }
10
11
  let(:stdout) { StringIO.new }
11
12
 
12
13
  subject(:cli) { CLI.new(arguments, stdout: stdout) }
13
14
 
14
15
  describe '.run!' do
16
+ let(:cli) { double('cli').as_null_object }
15
17
  let(:output) { StringIO.new }
16
18
  subject(:run) { described_class.run! arguments, output: output }
17
19
 
18
20
  it 'builds a new CLI with given arguments' do
19
- expect(CLI).to receive(:new).with(arguments).and_call_original
21
+ expect(described_class)
22
+ .to receive(:new).with(arguments).and_call_original
20
23
  run
21
24
  end
22
25
 
23
26
  it 'runs the CLI' do
24
- cli = double 'cli'
25
- allow(CLI).to receive(:new) { cli }
27
+ allow(described_class).to receive(:new) { cli }
26
28
  expect(cli).to receive :run
27
29
  run
28
30
  end
29
31
 
30
- context 'when recipe argument is missing' do
31
- let(:arguments) { [] }
32
+ it 'parses CLI arguments' do
33
+ allow(described_class).to receive(:new) { cli }
34
+ expect(cli).to receive :parse_arguments!
35
+ run
36
+ end
37
+
38
+ context 'when an argument error is raised' do
39
+ before do
40
+ allow(described_class).to receive(:new) { cli }
41
+ allow(cli).to receive(:parse_arguments!)
42
+ .and_raise described_class::ArgumentError
43
+ end
32
44
 
33
45
  it 'exits with a return status of 64' do
34
46
  expect { run }.to raise_error(SystemExit) { |e|
@@ -44,17 +56,15 @@ module Producer::Core
44
56
  end
45
57
 
46
58
  describe '#initialize' do
47
- subject(:cli) { CLI.new(arguments) }
48
-
49
- it 'assigns $stdout as the default standard output' do
50
- expect(cli.stdout).to be $stdout
59
+ it 'assigns the env with CLI output' do
60
+ expect(cli.env.output).to be stdout
51
61
  end
52
62
 
53
- context 'without arguments' do
54
- let(:arguments) { [] }
63
+ context 'without options' do
64
+ subject(:cli) { described_class.new(arguments) }
55
65
 
56
- it 'raises our ArgumentError exception' do
57
- expect { cli }.to raise_error described_class::ArgumentError
66
+ it 'assigns $stdout as the default standard output' do
67
+ expect(cli.stdout).to be $stdout
58
68
  end
59
69
  end
60
70
  end
@@ -71,6 +81,40 @@ module Producer::Core
71
81
  end
72
82
  end
73
83
 
84
+ describe '#parse_arguments!' do
85
+ context 'with options' do
86
+ let(:options) { %w[-v] }
87
+
88
+ before { cli.parse_arguments! }
89
+
90
+ it 'removes options from arguments' do
91
+ expect(cli.arguments).to eq [recipe_file]
92
+ end
93
+
94
+ context 'verbose' do
95
+ it 'sets env logger level to INFO' do
96
+ expect(cli.env.log_level).to eq Logger::INFO
97
+ end
98
+ end
99
+
100
+ context 'dry run' do
101
+ let(:options) { %w[-n] }
102
+
103
+ it 'enables env dry run' do
104
+ expect(cli.env).to be_dry_run
105
+ end
106
+ end
107
+ end
108
+
109
+ context 'without arguments' do
110
+ let(:arguments) { [] }
111
+
112
+ it 'raises the argument error exception' do
113
+ expect { cli.parse_arguments! }.to raise_error described_class::ArgumentError
114
+ end
115
+ end
116
+ end
117
+
74
118
  describe '#run' do
75
119
  it 'loads the recipe' do
76
120
  cli.run
@@ -84,10 +128,16 @@ module Producer::Core
84
128
  end
85
129
  end
86
130
 
131
+ describe '#env' do
132
+ it 'returns an env' do
133
+ expect(cli.env).to be_an Env
134
+ end
135
+ end
136
+
87
137
  describe '#load_recipe' do
88
- it 'evaluates the recipe file with an env' do
138
+ it 'evaluates the recipe file with the CLI env' do
89
139
  expect(Recipe)
90
- .to receive(:evaluate_from_file).with(recipe_file, kind_of(Env))
140
+ .to receive(:evaluate_from_file).with(recipe_file, cli.env)
91
141
  cli.load_recipe
92
142
  end
93
143
 
@@ -96,5 +146,15 @@ module Producer::Core
96
146
  expect(cli.recipe.tasks.count).to be 2
97
147
  end
98
148
  end
149
+
150
+ describe '#build_worker' do
151
+ it 'returns a worker' do
152
+ expect(cli.build_worker).to be_a Worker
153
+ end
154
+
155
+ it 'assigns the CLI env' do
156
+ expect(cli.build_worker.env).to eq cli.env
157
+ end
158
+ end
99
159
  end
100
160
  end
@@ -2,17 +2,14 @@ require 'spec_helper'
2
2
 
3
3
  module Producer::Core
4
4
  describe Env do
5
- subject(:env) { Env.new }
5
+ let(:output) { StringIO.new }
6
+ subject(:env) { Env.new(output: output) }
6
7
 
7
8
  describe '#initialize' do
8
9
  it 'assigns $stdin as the default output' do
9
10
  expect(env.input).to be $stdin
10
11
  end
11
12
 
12
- it 'assigns $stdout as the default output' do
13
- expect(env.output).to be $stdout
14
- end
15
-
16
13
  it 'assigns no default target' do
17
14
  expect(env.target).not_to be
18
15
  end
@@ -21,6 +18,18 @@ module Producer::Core
21
18
  expect(env.registry).to be_empty
22
19
  end
23
20
 
21
+ it 'assigns dry run as false' do
22
+ expect(env.dry_run).to be false
23
+ end
24
+
25
+ context 'when output is not given as argument' do
26
+ subject(:env) { Env.new }
27
+
28
+ it 'assigns $stdout as the default output' do
29
+ expect(env.output).to be $stdout
30
+ end
31
+ end
32
+
24
33
  context 'when input is given as argument' do
25
34
  let(:input) { double 'input' }
26
35
  subject(:env) { described_class.new(input: input) }
@@ -31,7 +40,6 @@ module Producer::Core
31
40
  end
32
41
 
33
42
  context 'when output is given as argument' do
34
- let(:output) { double 'output' }
35
43
  subject(:env) { described_class.new(output: output) }
36
44
 
37
45
  it 'assigns the given output' do
@@ -58,6 +66,25 @@ module Producer::Core
58
66
  end
59
67
  end
60
68
 
69
+ describe '#logger' do
70
+ it 'returns a logger' do
71
+ expect(env.logger).to be_a Logger
72
+ end
73
+
74
+ it 'uses env output' do
75
+ env.logger.error 'some message'
76
+ expect(output.string).to include 'some message'
77
+ end
78
+
79
+ it 'has a log level of ERROR' do
80
+ expect(env.log_level).to eq Logger::ERROR
81
+ end
82
+
83
+ it 'uses our formatter' do
84
+ expect(env.logger.formatter).to be_a LoggerFormatter
85
+ end
86
+ end
87
+
61
88
  describe '#remote' do
62
89
  it 'builds a Remote with the current target' do
63
90
  env.target = 'some_hostname.example'
@@ -90,5 +117,33 @@ module Producer::Core
90
117
  expect(env[:some_key]).to eq :some_value
91
118
  end
92
119
  end
120
+
121
+ describe '#log' do
122
+ it 'logs an info message through the assigned logger' do
123
+ expect(env.logger).to receive(:info).with 'message'
124
+ env.log 'message'
125
+ end
126
+ end
127
+
128
+ describe '#log_level' do
129
+ it 'returns the logger level' do
130
+ expect(env.log_level).to eq env.logger.level
131
+ end
132
+ end
133
+
134
+ describe '#log_level=' do
135
+ it 'sets the logger level' do
136
+ env.log_level = Logger::DEBUG
137
+ expect(env.logger.level).to eq Logger::DEBUG
138
+ end
139
+ end
140
+
141
+ describe '#dry_run?' do
142
+ before { env.dry_run = true }
143
+
144
+ it 'returns true when dry run is enabled' do
145
+ expect(env.dry_run?).to be true
146
+ end
147
+ end
93
148
  end
94
149
  end
@@ -0,0 +1,18 @@
1
+ require 'spec_helper'
2
+
3
+ module Producer::Core
4
+ describe LoggerFormatter do
5
+ describe '#call' do
6
+ let(:severity) { double 'severity' }
7
+ let(:datetime) { double 'datetime' }
8
+ let(:progname) { double 'progname' }
9
+ let(:message) { 'some message' }
10
+
11
+ subject { described_class.new.call(severity, datetime, progname, message) }
12
+
13
+ it 'returns the given message with a line separator' do
14
+ expect(subject).to eq "#{message}\n"
15
+ end
16
+ end
17
+ end
18
+ end
@@ -61,6 +61,12 @@ module Producer::Core
61
61
  end
62
62
  end
63
63
 
64
+ describe '#to_s' do
65
+ it 'includes the task name' do
66
+ expect(task.to_s).to include name.to_s
67
+ end
68
+ end
69
+
64
70
  describe '#condition_met?' do
65
71
  context 'when condition is truthy' do
66
72
  let(:condition) { Condition.new([], true) }
@@ -2,7 +2,8 @@ require 'spec_helper'
2
2
 
3
3
  module Producer::Core
4
4
  describe Worker do
5
- subject(:worker) { described_class.new }
5
+ let(:env) { double 'env', log: nil, dry_run?: false }
6
+ subject(:worker) { described_class.new(env) }
6
7
 
7
8
  describe '#process' do
8
9
  it 'processes each task' do
@@ -12,23 +13,59 @@ module Producer::Core
12
13
  end
13
14
 
14
15
  describe '#process_task' do
15
- let(:action) { double 'action' }
16
- let(:task) { double('task', actions: [action]).as_null_object }
16
+ let(:action) { double('action', to_s: 'echo').as_null_object }
17
+ let(:task_name) { 'some_task' }
18
+ let(:task) { Task.new(task_name, [action]) }
19
+
20
+ it 'logs task info' do
21
+ expect(env).to receive(:log).with /\ATask: #{task_name}/
22
+ worker.process_task task
23
+ end
17
24
 
18
25
  context 'when task condition is met' do
19
26
  it 'applies the actions' do
20
27
  expect(action).to receive :apply
21
28
  worker.process_task task
22
29
  end
30
+
31
+ it 'logs condition info' do
32
+ expect(env).to receive(:log).with(' condition: met')
33
+ worker.process_task task
34
+ end
35
+
36
+ it 'logs action info' do
37
+ expect(env).to receive(:log).with /\A action: echo/
38
+ worker.process_task task
39
+ end
40
+
41
+ context 'when dry run is enabled' do
42
+ before { allow(env).to receive(:dry_run?) { true } }
43
+
44
+ it 'does not apply the actions' do
45
+ expect(action).not_to receive :apply
46
+ worker.process_task task
47
+ end
48
+ end
23
49
  end
24
50
 
25
51
  context 'when task condition is not met' do
26
- before { allow(task).to receive(:condition_met?) { false } }
52
+ let(:task) { Task.new(task_name, [action], false) }
27
53
 
28
54
  it 'does not apply the actions' do
29
55
  expect(action).not_to receive :apply
30
56
  worker.process_task task
31
57
  end
58
+
59
+ it 'logs condition info' do
60
+ expect(env).to receive(:log).with(' condition: NOT met')
61
+ worker.process_task task
62
+ end
63
+ end
64
+ end
65
+
66
+ describe '#env' do
67
+ it 'returns the assigned env' do
68
+ expect(worker.env).to be env
32
69
  end
33
70
  end
34
71
  end
@@ -40,5 +40,17 @@ module Producer::Core
40
40
  expect(action.fs).to be env.remote.fs
41
41
  end
42
42
  end
43
+
44
+ describe '#name' do
45
+ it 'returns a word' do
46
+ expect(action.name).to match /\A\w+\z/
47
+ end
48
+ end
49
+
50
+ describe '#to_s' do
51
+ it 'returns a word' do
52
+ expect(action.to_s).to eq action.name
53
+ end
54
+ end
43
55
  end
44
56
  end
metadata CHANGED
@@ -1,20 +1,18 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: producer-core
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.3
5
- prerelease:
4
+ version: 0.2.4
6
5
  platform: ruby
7
6
  authors:
8
7
  - Thibault Jouan
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2014-05-09 00:00:00.000000000 Z
11
+ date: 2014-05-25 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: net-ssh
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
17
  - - "~>"
20
18
  - !ruby/object:Gem::Version
@@ -22,7 +20,6 @@ dependencies:
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
24
  - - "~>"
28
25
  - !ruby/object:Gem::Version
@@ -30,7 +27,6 @@ dependencies:
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: net-sftp
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
31
  - - "~>"
36
32
  - !ruby/object:Gem::Version
@@ -38,7 +34,6 @@ dependencies:
38
34
  type: :runtime
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
38
  - - "~>"
44
39
  - !ruby/object:Gem::Version
@@ -46,7 +41,6 @@ dependencies:
46
41
  - !ruby/object:Gem::Dependency
47
42
  name: rspec
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
45
  - - "~>"
52
46
  - !ruby/object:Gem::Version
@@ -54,7 +48,6 @@ dependencies:
54
48
  type: :development
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
52
  - - "~>"
60
53
  - !ruby/object:Gem::Version
@@ -62,7 +55,6 @@ dependencies:
62
55
  - !ruby/object:Gem::Dependency
63
56
  name: cucumber
64
57
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
58
  requirements:
67
59
  - - "~>"
68
60
  - !ruby/object:Gem::Version
@@ -70,7 +62,6 @@ dependencies:
70
62
  type: :development
71
63
  prerelease: false
72
64
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
65
  requirements:
75
66
  - - "~>"
76
67
  - !ruby/object:Gem::Version
@@ -78,7 +69,6 @@ dependencies:
78
69
  - !ruby/object:Gem::Dependency
79
70
  name: aruba
80
71
  requirement: !ruby/object:Gem::Requirement
81
- none: false
82
72
  requirements:
83
73
  - - "~>"
84
74
  - !ruby/object:Gem::Version
@@ -86,7 +76,6 @@ dependencies:
86
76
  type: :development
87
77
  prerelease: false
88
78
  version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
79
  requirements:
91
80
  - - "~>"
92
81
  - !ruby/object:Gem::Version
@@ -94,7 +83,6 @@ dependencies:
94
83
  - !ruby/object:Gem::Dependency
95
84
  name: cucumber-sshd
96
85
  requirement: !ruby/object:Gem::Requirement
97
- none: false
98
86
  requirements:
99
87
  - - "~>"
100
88
  - !ruby/object:Gem::Version
@@ -102,7 +90,6 @@ dependencies:
102
90
  type: :development
103
91
  prerelease: false
104
92
  version_requirements: !ruby/object:Gem::Requirement
105
- none: false
106
93
  requirements:
107
94
  - - "~>"
108
95
  - !ruby/object:Gem::Version
@@ -110,7 +97,6 @@ dependencies:
110
97
  - !ruby/object:Gem::Dependency
111
98
  name: rake
112
99
  requirement: !ruby/object:Gem::Requirement
113
- none: false
114
100
  requirements:
115
101
  - - "~>"
116
102
  - !ruby/object:Gem::Version
@@ -118,7 +104,6 @@ dependencies:
118
104
  type: :development
119
105
  prerelease: false
120
106
  version_requirements: !ruby/object:Gem::Requirement
121
- none: false
122
107
  requirements:
123
108
  - - "~>"
124
109
  - !ruby/object:Gem::Version
@@ -143,7 +128,9 @@ files:
143
128
  - features/actions/file_write.feature
144
129
  - features/actions/mkdir.feature
145
130
  - features/actions/sh.feature
131
+ - features/cli/dry_run.feature
146
132
  - features/cli/usage.feature
133
+ - features/cli/verbose.feature
147
134
  - features/recipes/ask.feature
148
135
  - features/recipes/evaluation.feature
149
136
  - features/recipes/macro.feature
@@ -183,6 +170,7 @@ files:
183
170
  - lib/producer/core/condition/dsl.rb
184
171
  - lib/producer/core/env.rb
185
172
  - lib/producer/core/errors.rb
173
+ - lib/producer/core/logger_formatter.rb
186
174
  - lib/producer/core/prompter.rb
187
175
  - lib/producer/core/recipe.rb
188
176
  - lib/producer/core/recipe/dsl.rb
@@ -217,6 +205,7 @@ files:
217
205
  - spec/producer/core/condition/dsl_spec.rb
218
206
  - spec/producer/core/condition_spec.rb
219
207
  - spec/producer/core/env_spec.rb
208
+ - spec/producer/core/logger_formatter_spec.rb
220
209
  - spec/producer/core/prompter_spec.rb
221
210
  - spec/producer/core/recipe/dsl_spec.rb
222
211
  - spec/producer/core/recipe_spec.rb
@@ -243,27 +232,26 @@ files:
243
232
  - spec/support/test_env_helpers.rb
244
233
  homepage: https://rubygems.org/gems/producer-core
245
234
  licenses: []
235
+ metadata: {}
246
236
  post_install_message:
247
237
  rdoc_options: []
248
238
  require_paths:
249
239
  - lib
250
240
  required_ruby_version: !ruby/object:Gem::Requirement
251
- none: false
252
241
  requirements:
253
242
  - - ">="
254
243
  - !ruby/object:Gem::Version
255
244
  version: '0'
256
245
  required_rubygems_version: !ruby/object:Gem::Requirement
257
- none: false
258
246
  requirements:
259
247
  - - ">="
260
248
  - !ruby/object:Gem::Version
261
249
  version: '0'
262
250
  requirements: []
263
251
  rubyforge_project:
264
- rubygems_version: 1.8.29
252
+ rubygems_version: 2.2.2
265
253
  signing_key:
266
- specification_version: 3
254
+ specification_version: 4
267
255
  summary: Provisioning tool
268
256
  test_files:
269
257
  - features/actions/echo.feature
@@ -272,7 +260,9 @@ test_files:
272
260
  - features/actions/file_write.feature
273
261
  - features/actions/mkdir.feature
274
262
  - features/actions/sh.feature
263
+ - features/cli/dry_run.feature
275
264
  - features/cli/usage.feature
265
+ - features/cli/verbose.feature
276
266
  - features/recipes/ask.feature
277
267
  - features/recipes/evaluation.feature
278
268
  - features/recipes/macro.feature
@@ -313,6 +303,7 @@ test_files:
313
303
  - spec/producer/core/condition/dsl_spec.rb
314
304
  - spec/producer/core/condition_spec.rb
315
305
  - spec/producer/core/env_spec.rb
306
+ - spec/producer/core/logger_formatter_spec.rb
316
307
  - spec/producer/core/prompter_spec.rb
317
308
  - spec/producer/core/recipe/dsl_spec.rb
318
309
  - spec/producer/core/recipe_spec.rb