nanoc 4.4.7 → 4.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (70) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +9 -7
  3. data/NEWS.md +6 -0
  4. data/lib/nanoc.rb +1 -0
  5. data/lib/nanoc/base.rb +0 -1
  6. data/lib/nanoc/base/feature.rb +1 -1
  7. data/lib/nanoc/base/repos/data_source.rb +1 -1
  8. data/lib/nanoc/base/repos/site_loader.rb +1 -1
  9. data/lib/nanoc/base/services/action_provider.rb +1 -1
  10. data/lib/nanoc/base/services/filter.rb +1 -1
  11. data/lib/nanoc/checking.rb +7 -9
  12. data/lib/nanoc/checking/check.rb +1 -1
  13. data/lib/nanoc/checking/checks.rb +9 -17
  14. data/lib/nanoc/checking/checks/internal_links.rb +2 -0
  15. data/lib/nanoc/checking/checks/mixed_content.rb +2 -0
  16. data/lib/nanoc/checking/checks/stale.rb +2 -0
  17. data/lib/nanoc/checking/runner.rb +2 -2
  18. data/lib/nanoc/cli.rb +9 -6
  19. data/lib/nanoc/cli/commands/deploy.rb +4 -4
  20. data/lib/nanoc/cli/commands/show-plugins.rb +12 -12
  21. data/lib/nanoc/cli/stream_cleaners.rb +7 -7
  22. data/lib/nanoc/data_sources.rb +0 -3
  23. data/lib/nanoc/data_sources/filesystem.rb +2 -0
  24. data/lib/nanoc/deploying/deployer.rb +1 -1
  25. data/lib/nanoc/deploying/deployers.rb +6 -9
  26. data/lib/nanoc/deploying/deployers/fog.rb +2 -0
  27. data/lib/nanoc/deploying/deployers/git.rb +118 -0
  28. data/lib/nanoc/deploying/deployers/rsync.rb +2 -0
  29. data/lib/nanoc/extra.rb +5 -6
  30. data/lib/nanoc/filters.rb +28 -55
  31. data/lib/nanoc/filters/asciidoc.rb +2 -0
  32. data/lib/nanoc/filters/bluecloth.rb +2 -0
  33. data/lib/nanoc/filters/coffeescript.rb +2 -0
  34. data/lib/nanoc/filters/colorize_syntax.rb +2 -0
  35. data/lib/nanoc/filters/erb.rb +2 -0
  36. data/lib/nanoc/filters/erubis.rb +9 -8
  37. data/lib/nanoc/filters/haml.rb +2 -0
  38. data/lib/nanoc/filters/handlebars.rb +2 -0
  39. data/lib/nanoc/filters/kramdown.rb +2 -0
  40. data/lib/nanoc/filters/less.rb +2 -0
  41. data/lib/nanoc/filters/markaby.rb +2 -0
  42. data/lib/nanoc/filters/maruku.rb +2 -0
  43. data/lib/nanoc/filters/mustache.rb +2 -0
  44. data/lib/nanoc/filters/pandoc.rb +2 -0
  45. data/lib/nanoc/filters/rainpress.rb +2 -0
  46. data/lib/nanoc/filters/rdiscount.rb +2 -0
  47. data/lib/nanoc/filters/rdoc.rb +2 -0
  48. data/lib/nanoc/filters/redcarpet.rb +2 -0
  49. data/lib/nanoc/filters/redcloth.rb +2 -0
  50. data/lib/nanoc/filters/relativize_paths.rb +2 -0
  51. data/lib/nanoc/filters/rubypants.rb +2 -0
  52. data/lib/nanoc/filters/sass.rb +2 -0
  53. data/lib/nanoc/filters/slim.rb +2 -0
  54. data/lib/nanoc/filters/typogruby.rb +2 -0
  55. data/lib/nanoc/filters/uglify_js.rb +2 -0
  56. data/lib/nanoc/filters/xsl.rb +2 -0
  57. data/lib/nanoc/filters/yui_compressor.rb +2 -0
  58. data/lib/nanoc/helpers.rb +12 -11
  59. data/lib/nanoc/version.rb +1 -1
  60. data/nanoc.gemspec +1 -0
  61. data/spec/nanoc/base/filter_spec.rb +2 -2
  62. data/spec/nanoc/cli/commands/deploy_spec.rb +2 -2
  63. data/spec/nanoc/cli/commands/show_plugins_spec.rb +18 -0
  64. data/spec/nanoc/deploying/git_spec.rb +302 -0
  65. data/spec/spec_helper.rb +2 -0
  66. data/test/deploying/test_git.rb +261 -0
  67. metadata +20 -5
  68. data/lib/nanoc/base/plugin_registry.rb +0 -219
  69. data/spec/nanoc/base/plugin_registry_spec.rb +0 -29
  70. data/test/base/test_plugin.rb +0 -26
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: '0167178257988b6aaf09493db7ca9913b18d2961'
4
- data.tar.gz: ff4d70d12e3e147010857f60f216d102f17e5ba3
3
+ metadata.gz: e9fe24df25829104e02f16485e69acb439b50860
4
+ data.tar.gz: fd6c49bc1c0bf21d94cfd0a74b436a70ead571d3
5
5
  SHA512:
6
- metadata.gz: 561f6907b5ae8fe75ac79038a9ca563846c6015b83c78bce7e20f2fdbdcd63f9d9df8d0d052f3810b49be3fa388fa56ec47a52c285ba86312bc5fb8506e64a67
7
- data.tar.gz: d28b4eb99ca9dba7e154018201a19f3cef48d6aa0af69e671324e9b5548c675eade4549a9b9d81ef7257c958e3f79a5b6a5986bfbfdf3e8f09ac15aa6cfbccee
6
+ metadata.gz: 1ec49097ecfdc9ad9de7e70fe52368d13c5a6ddcc1ffa4a6894ce26de86a94385c4dc173c4e0f5051a89046ecdd6df782d1fc9c85b20feda26414d92a2daee14
7
+ data.tar.gz: 0d05e92cab7232aa0fb057d0e3ed2159cdb25309f884e372271e2123baf7d4b67ddaa159791d7a62ee4e040ea261cbd4b572b7f96d008d52f5830747f2e10201
data/Gemfile.lock CHANGED
@@ -1,6 +1,6 @@
1
1
  GIT
2
2
  remote: git://github.com/bbatsov/rubocop.git
3
- revision: 7c95534e1906539e53341cd53265fadfc0aba0e2
3
+ revision: 1121924ee2ebe09053b7ca95b50aac03e01acada
4
4
  specs:
5
5
  rubocop (0.46.0)
6
6
  parser (>= 2.3.3.1, < 3.0)
@@ -11,7 +11,7 @@ GIT
11
11
 
12
12
  GIT
13
13
  remote: git://github.com/cowboyd/therubyracer.git
14
- revision: a635aee79b2057c396f8af92417cadf93415c275
14
+ revision: 466a1f0d4f696acfe971899272359623ec0a7a97
15
15
  specs:
16
16
  therubyracer (0.12.3)
17
17
  libv8 (~> 3.16.14.15)
@@ -27,8 +27,9 @@ GIT
27
27
  PATH
28
28
  remote: .
29
29
  specs:
30
- nanoc (4.4.7)
30
+ nanoc (4.5.0)
31
31
  cri (~> 2.3)
32
+ ddplugin (~> 1.0)
32
33
  hamster (~> 3.0)
33
34
  ref (~> 2.0)
34
35
 
@@ -80,6 +81,7 @@ GEM
80
81
  safe_yaml (~> 1.0.0)
81
82
  cri (2.7.1)
82
83
  colored (~> 1.2)
84
+ ddplugin (1.0.0)
83
85
  diff-lcs (1.2.5)
84
86
  docile (1.1.5)
85
87
  erubis (2.7.0)
@@ -159,7 +161,7 @@ GEM
159
161
  multi_json (~> 1.10)
160
162
  fog-local (0.3.1)
161
163
  fog-core (~> 1.27)
162
- fog-openstack (0.1.18)
164
+ fog-openstack (0.1.19)
163
165
  fog-core (>= 1.40)
164
166
  fog-json (>= 1.0)
165
167
  ipaddress (>= 0.8)
@@ -170,7 +172,7 @@ GEM
170
172
  fog-profitbricks (3.0.0)
171
173
  fog-core (~> 1.42)
172
174
  fog-json (~> 1.0)
173
- fog-rackspace (0.1.2)
175
+ fog-rackspace (0.1.3)
174
176
  fog-core (>= 1.35)
175
177
  fog-json (>= 1.0)
176
178
  fog-xml (>= 0.1)
@@ -241,7 +243,7 @@ GEM
241
243
  inflecto (0.0.2)
242
244
  ipaddress (0.8.3)
243
245
  json (2.0.2)
244
- kramdown (1.13.1)
246
+ kramdown (1.13.2)
245
247
  less (2.6.0)
246
248
  commonjs (~> 0.2.7)
247
249
  libv8 (3.16.14.17)
@@ -352,7 +354,7 @@ GEM
352
354
  crack (>= 0.3.2)
353
355
  hashdiff
354
356
  xml-simple (1.1.5)
355
- yard (0.9.5)
357
+ yard (0.9.6)
356
358
  yard-contracts (0.1.5)
357
359
  contracts (~> 0.7)
358
360
  yard (~> 0.8)
data/NEWS.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # Nanoc news
2
2
 
3
+ ## 4.5.0 (2017-01-09)
4
+
5
+ Features:
6
+
7
+ * Added Git deployer (#997)
8
+
3
9
  ## 4.4.7 (2017-01-05)
4
10
 
5
11
  Fixes:
data/lib/nanoc.rb CHANGED
@@ -23,6 +23,7 @@ end
23
23
  # Load external dependencies
24
24
  require 'hamster'
25
25
  require 'ref'
26
+ require 'ddplugin'
26
27
 
27
28
  # Load general requirements
28
29
  require 'digest'
data/lib/nanoc/base.rb CHANGED
@@ -5,7 +5,6 @@ end
5
5
  require_relative 'base/core_ext'
6
6
  require_relative 'base/contracts_support'
7
7
  require_relative 'base/memoization'
8
- require_relative 'base/plugin_registry'
9
8
  require_relative 'base/error'
10
9
  require_relative 'base/errors'
11
10
 
@@ -89,4 +89,4 @@ module Nanoc
89
89
  end
90
90
  end
91
91
 
92
- Nanoc::Feature.define('profiler', version: '4.4')
92
+ Nanoc::Feature.define('profiler', version: '4.5')
@@ -27,7 +27,7 @@ module Nanoc
27
27
  # online data sources could contain authentication details.
28
28
  attr_reader :config
29
29
 
30
- extend Nanoc::Int::PluginRegistry::PluginMethods
30
+ extend DDPlugin::Plugin
31
31
 
32
32
  def initialize(site_config, items_root, layouts_root, config)
33
33
  @site_config = site_config
@@ -61,7 +61,7 @@ module Nanoc::Int
61
61
  def create_data_sources(config)
62
62
  config[:data_sources].map do |data_source_hash|
63
63
  # Get data source class
64
- data_source_class = Nanoc::DataSource.named(data_source_hash[:type])
64
+ data_source_class = Nanoc::DataSource.named(data_source_hash[:type].to_sym)
65
65
  if data_source_class.nil?
66
66
  raise Nanoc::Int::Errors::UnknownDataSource.new(data_source_hash[:type])
67
67
  end
@@ -1,7 +1,7 @@
1
1
  module Nanoc::Int
2
2
  # @private
3
3
  class ActionProvider
4
- extend Nanoc::Int::PluginRegistry::PluginMethods
4
+ extend DDPlugin::Plugin
5
5
 
6
6
  def self.for(_site)
7
7
  raise NotImplementedError
@@ -35,7 +35,7 @@ module Nanoc
35
35
  # @api private
36
36
  attr_reader :assigns
37
37
 
38
- extend Nanoc::Int::PluginRegistry::PluginMethods
38
+ extend DDPlugin::Plugin
39
39
 
40
40
  class << self
41
41
  def define(ident, &block)
@@ -1,11 +1,9 @@
1
- module Nanoc
2
- # @api private
3
- module Checking
4
- autoload 'Check', 'nanoc/checking/check'
5
- autoload 'DSL', 'nanoc/checking/dsl'
6
- autoload 'Runner', 'nanoc/checking/runner.rb'
7
- autoload 'Issue', 'nanoc/checking/issue'
8
- end
1
+ # @api private
2
+ module Nanoc::Checking
9
3
  end
10
4
 
11
- require 'nanoc/checking/checks'
5
+ require_relative 'checking/check'
6
+ require_relative 'checking/checks'
7
+ require_relative 'checking/dsl'
8
+ require_relative 'checking/runner.rb'
9
+ require_relative 'checking/issue'
@@ -8,7 +8,7 @@ module Nanoc::Checking
8
8
 
9
9
  # @api private
10
10
  class Check < Nanoc::Int::Context
11
- extend Nanoc::Int::PluginRegistry::PluginMethods
11
+ extend DDPlugin::Plugin
12
12
 
13
13
  attr_reader :issues
14
14
 
@@ -1,20 +1,12 @@
1
- require_relative 'checks/w3c_validator'
2
-
3
1
  # @api private
4
2
  module Nanoc::Checking::Checks
5
- autoload 'CSS', 'nanoc/checking/checks/css'
6
- autoload 'ExternalLinks', 'nanoc/checking/checks/external_links'
7
- autoload 'HTML', 'nanoc/checking/checks/html'
8
- autoload 'InternalLinks', 'nanoc/checking/checks/internal_links'
9
- autoload 'Stale', 'nanoc/checking/checks/stale'
10
- autoload 'MixedContent', 'nanoc/checking/checks/mixed_content'
11
-
12
- Nanoc::Checking::Check.register '::Nanoc::Checking::Checks::CSS', :css
13
- Nanoc::Checking::Check.register '::Nanoc::Checking::Checks::ExternalLinks', :external_links
14
- Nanoc::Checking::Check.register '::Nanoc::Checking::Checks::ExternalLinks', :elinks
15
- Nanoc::Checking::Check.register '::Nanoc::Checking::Checks::HTML', :html
16
- Nanoc::Checking::Check.register '::Nanoc::Checking::Checks::InternalLinks', :internal_links
17
- Nanoc::Checking::Check.register '::Nanoc::Checking::Checks::InternalLinks', :ilinks
18
- Nanoc::Checking::Check.register '::Nanoc::Checking::Checks::Stale', :stale
19
- Nanoc::Checking::Check.register '::Nanoc::Checking::Checks::MixedContent', :mixed_content
20
3
  end
4
+
5
+ require_relative 'checks/w3c_validator'
6
+
7
+ require_relative 'checks/css'
8
+ require_relative 'checks/external_links'
9
+ require_relative 'checks/html'
10
+ require_relative 'checks/internal_links'
11
+ require_relative 'checks/mixed_content'
12
+ require_relative 'checks/stale'
@@ -5,6 +5,8 @@ module Nanoc::Checking::Checks
5
5
  #
6
6
  # @api private
7
7
  class InternalLinks < ::Nanoc::Checking::Check
8
+ identifiers :internal_links, :ilinks
9
+
8
10
  # Starts the validator. The results will be printed to stdout.
9
11
  #
10
12
  # Internal links that match a regexp pattern in `@config[:checks][:internal_links][:exclude]` will
@@ -4,6 +4,8 @@ module Nanoc::Checking::Checks
4
4
  #
5
5
  # @api private
6
6
  class MixedContent < ::Nanoc::Checking::Check
7
+ identifier :mixed_content
8
+
7
9
  PROTOCOL_PATTERN = /^(\w+):\/\//
8
10
 
9
11
  def run
@@ -1,6 +1,8 @@
1
1
  module Nanoc::Checking::Checks
2
2
  # @api private
3
3
  class Stale < ::Nanoc::Checking::Check
4
+ identifier :stale
5
+
4
6
  def run
5
7
  require 'set'
6
8
 
@@ -93,12 +93,12 @@ module Nanoc::Checking
93
93
  end
94
94
 
95
95
  def all_check_classes
96
- Nanoc::Checking::Check.all.map(&:last).uniq
96
+ Nanoc::Checking::Check.all
97
97
  end
98
98
 
99
99
  def check_classes_named(n)
100
100
  n.map do |a|
101
- klass = Nanoc::Checking::Check.named(a)
101
+ klass = Nanoc::Checking::Check.named(a.to_sym)
102
102
  raise Nanoc::Int::Errors::GenericTrivial, "Unknown check: #{a}" if klass.nil?
103
103
  klass
104
104
  end
data/lib/nanoc/cli.rb CHANGED
@@ -10,14 +10,17 @@ end
10
10
  module Nanoc::CLI
11
11
  module Commands
12
12
  end
13
+ end
13
14
 
14
- autoload 'ANSIStringColorizer', 'nanoc/cli/ansi_string_colorizer'
15
- autoload 'Logger', 'nanoc/cli/logger'
16
- autoload 'CommandRunner', 'nanoc/cli/command_runner'
17
- autoload 'CleaningStream', 'nanoc/cli/cleaning_stream'
18
- autoload 'StreamCleaners', 'nanoc/cli/stream_cleaners'
19
- autoload 'ErrorHandler', 'nanoc/cli/error_handler'
15
+ require_relative 'cli/ansi_string_colorizer'
16
+ require_relative 'cli/logger'
17
+ require_relative 'cli/command_runner'
18
+ require_relative 'cli/cleaning_stream'
19
+ require_relative 'cli/stream_cleaners'
20
+ require_relative 'cli/error_handler'
20
21
 
22
+ # @api private
23
+ module Nanoc::CLI
21
24
  # @return [Boolean] true if debug output is enabled, false if not
22
25
  def self.debug?
23
26
  @debug || false
@@ -27,8 +27,8 @@ module Nanoc::CLI::Commands
27
27
  private
28
28
 
29
29
  def list_deployers
30
- deployers = Nanoc::Int::PluginRegistry.instance.find_all(Nanoc::Deploying::Deployer)
31
- deployer_names = deployers.keys.sort_by(&:to_s)
30
+ deployers = Nanoc::Deploying::Deployer.all
31
+ deployer_names = deployers.map(&:identifier).sort
32
32
  puts 'Available deployers:'
33
33
  deployer_names.each do |name|
34
34
  puts " #{name}"
@@ -105,14 +105,14 @@ module Nanoc::CLI::Commands
105
105
  end
106
106
 
107
107
  def deployer_class_for_config(config)
108
- names = Nanoc::Deploying::Deployer.all.keys
109
108
  name = config.fetch(:kind) do
110
109
  $stderr.puts 'Warning: The specified deploy target does not have a kind attribute. Assuming rsync.'
111
110
  'rsync'
112
111
  end
113
112
 
114
- deployer_class = Nanoc::Deploying::Deployer.named(name)
113
+ deployer_class = Nanoc::Deploying::Deployer.named(name.to_sym)
115
114
  if deployer_class.nil?
115
+ names = Nanoc::Deploying::Deployer.all.map(&:identifier)
116
116
  raise Nanoc::Int::Errors::GenericTrivial, "The specified deploy target has an unrecognised kind “#{name}” (expected one of #{names.join(', ')})."
117
117
  end
118
118
  deployer_class
@@ -15,24 +15,24 @@ module Nanoc::CLI::Commands
15
15
  end
16
16
 
17
17
  # Get list of plugins (before and after)
18
- plugins_before = Nanoc::Int::PluginRegistry.instance.all
18
+ plugins_before = PLUGIN_CLASSES.keys.each_with_object({}) { |c, acc| acc[c] = c.all }
19
19
  site.code_snippets if site
20
- plugins_after = Nanoc::Int::PluginRegistry.instance.all
20
+ plugins_after = PLUGIN_CLASSES.keys.each_with_object({}) { |c, acc| acc[c] = c.all }
21
21
 
22
22
  # Divide list of plugins into builtin and custom
23
23
  plugins_builtin = plugins_before
24
- plugins_custom = plugins_after - plugins_before
24
+ plugins_custom = plugins_after.each_with_object({}) do |(superclass, klasses), acc|
25
+ acc[superclass] = klasses - plugins_before[superclass]
26
+ end
25
27
 
26
28
  # Find max identifiers length
27
- plugin_with_longest_identifiers = plugins_after.reduce do |longest, current|
28
- longest[:identifiers].join(', ').size > current[:identifiers].join(', ').size ? longest : current
29
- end
30
- max_identifiers_length = plugin_with_longest_identifiers[:identifiers].join(', ').size
29
+ all_identifiers = plugins_after.values.flatten.map(&:identifiers)
30
+ max_identifiers_length = all_identifiers.map(&:to_s).map(&:size).max
31
31
 
32
32
  PLUGIN_CLASS_ORDER.each do |superclass|
33
33
  plugins_with_this_superclass = {
34
- builtin: plugins_builtin.select { |p| p[:superclass] == superclass },
35
- custom: plugins_custom.select { |p| p[:superclass] == superclass },
34
+ builtin: plugins_builtin.fetch(superclass, []),
35
+ custom: plugins_custom.fetch(superclass, []),
36
36
  }
37
37
 
38
38
  # Print kind
@@ -53,12 +53,12 @@ module Nanoc::CLI::Commands
53
53
  end
54
54
 
55
55
  # Print plugins
56
- relevant_plugins.sort_by { |k| k[:identifiers].join(', ') }.each do |plugin|
56
+ relevant_plugins.sort_by { |k| k.identifiers.join(', ') }.each do |plugin|
57
57
  # Display
58
58
  puts format(
59
59
  " %-#{max_identifiers_length}s (%s)",
60
- plugin[:identifiers].join(', '),
61
- plugin[:class].to_s.sub(/^::/, ''),
60
+ plugin.identifiers.join(', '),
61
+ plugin.to_s.sub(/^::/, ''),
62
62
  )
63
63
  end
64
64
  end
@@ -1,8 +1,8 @@
1
- module Nanoc::CLI
2
- # @api private
3
- module StreamCleaners
4
- autoload 'Abstract', 'nanoc/cli/stream_cleaners/abstract'
5
- autoload 'ANSIColors', 'nanoc/cli/stream_cleaners/ansi_colors'
6
- autoload 'UTF8', 'nanoc/cli/stream_cleaners/utf8'
7
- end
1
+ # @api private
2
+ module Nanoc::CLI::StreamCleaners
8
3
  end
4
+
5
+ require_relative 'stream_cleaners/abstract'
6
+
7
+ require_relative 'stream_cleaners/ansi_colors'
8
+ require_relative 'stream_cleaners/utf8'
@@ -3,6 +3,3 @@ module Nanoc::DataSources
3
3
  end
4
4
 
5
5
  require_relative 'data_sources/filesystem'
6
-
7
- Nanoc::DataSource.register ::Nanoc::DataSources::Filesystem, :filesystem
8
- Nanoc::DataSource.register ::Nanoc::DataSources::Filesystem, :filesystem_unified
@@ -46,6 +46,8 @@ module Nanoc::DataSources
46
46
  #
47
47
  # @api private
48
48
  class Filesystem < Nanoc::DataSource
49
+ identifiers :filesystem, :filesystem_unified
50
+
49
51
  # See {Nanoc::DataSource#up}.
50
52
  def up; end
51
53
 
@@ -6,7 +6,7 @@ module Nanoc::Deploying
6
6
  #
7
7
  # @api private
8
8
  class Deployer
9
- extend Nanoc::Int::PluginRegistry::PluginMethods
9
+ extend DDPlugin::Plugin
10
10
 
11
11
  # @return [String] The path to the directory that contains the files to
12
12
  # upload. It should not have a trailing slash.
@@ -1,10 +1,7 @@
1
- module Nanoc::Deploying
2
- # @api private
3
- module Deployers
4
- autoload 'Fog', 'nanoc/deploying/deployers/fog'
5
- autoload 'Rsync', 'nanoc/deploying/deployers/rsync'
6
-
7
- Nanoc::Deploying::Deployer.register '::Nanoc::Deploying::Deployers::Fog', :fog
8
- Nanoc::Deploying::Deployer.register '::Nanoc::Deploying::Deployers::Rsync', :rsync
9
- end
1
+ # @api private
2
+ module Nanoc::Deploying::Deployers
10
3
  end
4
+
5
+ require_relative 'deployers/fog'
6
+ require_relative 'deployers/git'
7
+ require_relative 'deployers/rsync'
@@ -21,6 +21,8 @@ module Nanoc::Deploying::Deployers
21
21
  #
22
22
  # @api private
23
23
  class Fog < ::Nanoc::Deploying::Deployer
24
+ identifier :fog
25
+
24
26
  class FogWrapper
25
27
  def initialize(directory, is_dry_run)
26
28
  @directory = directory