nanoc 3.5.0 → 3.6.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (107) hide show
  1. data/Gemfile +1 -0
  2. data/Gemfile.lock +20 -12
  3. data/NEWS.md +23 -0
  4. data/README.md +6 -3
  5. data/doc/yardoc_templates/default/layout/html/footer.erb +16 -7
  6. data/lib/nanoc.rb +1 -1
  7. data/lib/nanoc/base.rb +1 -0
  8. data/lib/nanoc/base/compilation/compiler_dsl.rb +31 -0
  9. data/lib/nanoc/base/compilation/filter.rb +34 -0
  10. data/lib/nanoc/base/result_data/item_rep.rb +3 -3
  11. data/lib/nanoc/base/source_data/code_snippet.rb +1 -1
  12. data/lib/nanoc/base/source_data/data_source.rb +12 -0
  13. data/lib/nanoc/base/source_data/item.rb +1 -1
  14. data/lib/nanoc/base/source_data/item_array.rb +62 -0
  15. data/lib/nanoc/base/source_data/layout.rb +1 -1
  16. data/lib/nanoc/base/source_data/site.rb +24 -3
  17. data/lib/nanoc/cli/cleaning_stream.rb +10 -0
  18. data/lib/nanoc/cli/command_runner.rb +25 -12
  19. data/lib/nanoc/cli/commands/autocompile.rb +5 -3
  20. data/lib/nanoc/cli/commands/check.rb +9 -1
  21. data/lib/nanoc/cli/commands/compile.rb +1 -1
  22. data/lib/nanoc/cli/commands/create-site.rb +5 -5
  23. data/lib/nanoc/cli/commands/prune.rb +1 -1
  24. data/lib/nanoc/cli/commands/shell.rb +37 -0
  25. data/lib/nanoc/cli/commands/show-data.rb +1 -1
  26. data/lib/nanoc/cli/commands/sync.rb +34 -0
  27. data/lib/nanoc/cli/error_handler.rb +11 -2
  28. data/lib/nanoc/extra/checking/checks/stale.rb +10 -2
  29. data/lib/nanoc/extra/pruner.rb +14 -11
  30. data/lib/nanoc/filters/asciidoc.rb +2 -2
  31. data/lib/nanoc/filters/bluecloth.rb +2 -2
  32. data/lib/nanoc/filters/coderay.rb +2 -2
  33. data/lib/nanoc/filters/coffeescript.rb +2 -2
  34. data/lib/nanoc/filters/colorize_syntax.rb +2 -4
  35. data/lib/nanoc/filters/erb.rb +2 -2
  36. data/lib/nanoc/filters/erubis.rb +2 -2
  37. data/lib/nanoc/filters/haml.rb +2 -2
  38. data/lib/nanoc/filters/handlebars.rb +2 -2
  39. data/lib/nanoc/filters/kramdown.rb +2 -2
  40. data/lib/nanoc/filters/less.rb +2 -2
  41. data/lib/nanoc/filters/markaby.rb +2 -2
  42. data/lib/nanoc/filters/maruku.rb +2 -2
  43. data/lib/nanoc/filters/mustache.rb +2 -2
  44. data/lib/nanoc/filters/pandoc.rb +2 -2
  45. data/lib/nanoc/filters/rainpress.rb +2 -2
  46. data/lib/nanoc/filters/rdiscount.rb +2 -2
  47. data/lib/nanoc/filters/rdoc.rb +3 -17
  48. data/lib/nanoc/filters/redcarpet.rb +7 -3
  49. data/lib/nanoc/filters/redcloth.rb +2 -2
  50. data/lib/nanoc/filters/rubypants.rb +2 -2
  51. data/lib/nanoc/filters/sass.rb +2 -3
  52. data/lib/nanoc/filters/slim.rb +2 -2
  53. data/lib/nanoc/filters/typogruby.rb +2 -2
  54. data/lib/nanoc/filters/uglify_js.rb +2 -2
  55. data/lib/nanoc/filters/xsl.rb +2 -1
  56. data/lib/nanoc/filters/yui_compressor.rb +2 -2
  57. data/lib/nanoc/helpers/blogging.rb +1 -1
  58. data/lib/nanoc/helpers/filtering.rb +1 -1
  59. data/lib/nanoc/helpers/rendering.rb +1 -1
  60. data/nanoc.gemspec +2 -2
  61. data/test/base/core_ext/array_spec.rb +4 -12
  62. data/test/base/core_ext/hash_spec.rb +4 -12
  63. data/test/base/test_compiler_dsl.rb +63 -0
  64. data/test/base/test_item.rb +3 -18
  65. data/test/base/test_item_array.rb +336 -0
  66. data/test/base/test_item_rep.rb +2 -12
  67. data/test/base/test_layout.rb +1 -6
  68. data/test/base/test_outdatedness_checker.rb +1 -1
  69. data/test/base/test_site.rb +9 -3
  70. data/test/cli/commands/test_check.rb +22 -0
  71. data/test/cli/commands/test_compile.rb +2 -2
  72. data/test/cli/commands/test_deploy.rb +6 -6
  73. data/test/cli/commands/test_prune.rb +23 -4
  74. data/test/cli/commands/test_sync.rb +31 -0
  75. data/test/cli/test_error_handler.rb +16 -11
  76. data/test/extra/checking/checks/test_stale.rb +24 -1
  77. data/test/extra/test_auto_compiler.rb +4 -4
  78. data/test/filters/test_asciidoc.rb +1 -1
  79. data/test/filters/test_bluecloth.rb +1 -1
  80. data/test/filters/test_coderay.rb +3 -3
  81. data/test/filters/test_coffeescript.rb +1 -1
  82. data/test/filters/test_colorize_syntax.rb +20 -20
  83. data/test/filters/test_erb.rb +10 -10
  84. data/test/filters/test_erubis.rb +6 -6
  85. data/test/filters/test_haml.rb +10 -10
  86. data/test/filters/test_handlebars.rb +3 -3
  87. data/test/filters/test_kramdown.rb +1 -1
  88. data/test/filters/test_less.rb +4 -4
  89. data/test/filters/test_markaby.rb +1 -1
  90. data/test/filters/test_maruku.rb +1 -1
  91. data/test/filters/test_mustache.rb +2 -2
  92. data/test/filters/test_pandoc.rb +1 -1
  93. data/test/filters/test_rainpress.rb +2 -2
  94. data/test/filters/test_rdiscount.rb +2 -2
  95. data/test/filters/test_rdoc.rb +1 -1
  96. data/test/filters/test_redcarpet.rb +21 -6
  97. data/test/filters/test_redcloth.rb +3 -3
  98. data/test/filters/test_relativize_paths.rb +27 -27
  99. data/test/filters/test_rubypants.rb +1 -1
  100. data/test/filters/test_sass.rb +8 -8
  101. data/test/filters/test_slim.rb +4 -4
  102. data/test/filters/test_typogruby.rb +1 -1
  103. data/test/filters/test_uglify_js.rb +2 -2
  104. data/test/filters/test_xsl.rb +2 -2
  105. data/test/filters/test_yui_compressor.rb +3 -3
  106. data/test/helper.rb +6 -1
  107. metadata +12 -6
data/Gemfile CHANGED
@@ -20,6 +20,7 @@ gem 'mime-types'
20
20
  gem 'mustache'
21
21
  gem 'nokogiri', '~> 1.5.5'
22
22
  gem 'pandoc-ruby'
23
+ gem 'pry'
23
24
  gem 'pygments.rb'
24
25
  gem 'rack'
25
26
  gem 'rake'
@@ -1,8 +1,8 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- nanoc (3.5.0b1)
5
- cri (~> 2.2)
4
+ nanoc (3.6.0)
5
+ cri (~> 2.3)
6
6
 
7
7
  GEM
8
8
  remote: http://rubygems.org/
@@ -36,11 +36,12 @@ GEM
36
36
  nokogiri (~> 1.5.0)
37
37
  ruby-hmac
38
38
  formatador (0.2.4)
39
- haml (3.1.7)
39
+ haml (4.0.0)
40
+ tilt
40
41
  handlebars (0.3.2)
41
42
  commonjs (~> 0.2.3)
42
43
  therubyracer (~> 0.11.1)
43
- json (1.7.6)
44
+ json (1.7.7)
44
45
  kramdown (0.14.2)
45
46
  less (2.2.2)
46
47
  commonjs (~> 0.2.6)
@@ -51,26 +52,31 @@ GEM
51
52
  maruku (0.6.1)
52
53
  syntax (>= 1.0.0)
53
54
  metaclass (0.0.1)
54
- mime-types (1.19)
55
- minitest (4.5.0)
55
+ method_source (0.8.1)
56
+ mime-types (1.21)
57
+ minitest (4.6.1)
56
58
  mocha (0.13.2)
57
59
  metaclass (~> 0.0.1)
58
- multi_json (1.5.0)
60
+ multi_json (1.6.1)
59
61
  mustache (0.99.4)
60
62
  net-scp (1.0.4)
61
63
  net-ssh (>= 1.99.1)
62
- net-ssh (2.6.3)
64
+ net-ssh (2.6.5)
63
65
  nokogiri (1.5.6)
64
66
  pandoc-ruby (0.6.0)
65
67
  posix-spawn (0.3.6)
68
+ pry (0.9.12)
69
+ coderay (~> 1.0.5)
70
+ method_source (~> 0.8)
71
+ slop (~> 3.4)
66
72
  pygments.rb (0.3.7)
67
73
  posix-spawn (~> 0.3.6)
68
74
  yajl-ruby (~> 1.1.0)
69
- rack (1.5.0)
75
+ rack (1.5.2)
70
76
  rainpress (1.0)
71
77
  rake (10.0.3)
72
- rdiscount (1.6.8)
73
- rdoc (3.12)
78
+ rdiscount (2.0.7)
79
+ rdoc (3.12.1)
74
80
  json (~> 1.4)
75
81
  redcarpet (2.2.2)
76
82
  ref (1.0.2)
@@ -80,6 +86,7 @@ GEM
80
86
  slim (1.3.6)
81
87
  temple (~> 0.5.5)
82
88
  tilt (~> 1.3.3)
89
+ slop (3.4.3)
83
90
  syntax (1.0.0)
84
91
  systemu (2.5.2)
85
92
  temple (0.5.5)
@@ -96,7 +103,7 @@ GEM
96
103
  json
97
104
  nokogiri
98
105
  yajl-ruby (1.1.0)
99
- yard (0.8.3)
106
+ yard (0.8.4.1)
100
107
  yuicompressor (1.2.0)
101
108
 
102
109
  PLATFORMS
@@ -125,6 +132,7 @@ DEPENDENCIES
125
132
  nanoc!
126
133
  nokogiri (~> 1.5.5)
127
134
  pandoc-ruby
135
+ pry
128
136
  pygments.rb
129
137
  rack
130
138
  rainpress
data/NEWS.md CHANGED
@@ -1,5 +1,28 @@
1
1
  # nanoc news
2
2
 
3
+ ## 3.6 (2013-02-24)
4
+
5
+ Features:
6
+
7
+ * Added `sync` command, allowing data sources to update local caches of
8
+ external data [Justin Hileman]
9
+ * Added `#ignore` compiler DSL method
10
+ * Allowed accessing items by identifier using e.g. `@items['/about/']`
11
+ * Added `shell` command
12
+
13
+ Enhancements:
14
+
15
+ * Renamed the nanoc configuration file from `config.yaml` to `nanoc.yaml`
16
+
17
+ Fixes:
18
+
19
+ * Updated references to old web site and old repository
20
+ * Made `require` errors mention Bundler if appropriate
21
+ * Fixed bug which caused pruner not to delete directories in some cases [@reima]
22
+ * Made `check` command exit with the proper exit status
23
+ * Added support for the `HTML_TOC` Redcarpet renderer
24
+ * Made `stale` check honor files excluded by the pruner
25
+
3
26
  ## 3.5 (2013-01-27)
4
27
 
5
28
  Major changes:
data/README.md CHANGED
@@ -1,3 +1,8 @@
1
+ [![Build Status](https://travis-ci.org/nanoc/nanoc.png)](https://travis-ci.org/nanoc/nanoc)
2
+ [![Code Climate](https://codeclimate.com/badge.png)](https://codeclimate.com/github/nanoc/nanoc)
3
+
4
+ **Please take a moment and [donate](http://pledgie.com/campaigns/9282) to nanoc. A lot of time has gone into developing nanoc, and I would like to keep the current pace. Your support will ensure that nanoc will continue to improve.**
5
+
1
6
  # nanoc 3
2
7
 
3
8
  nanoc is a simple but very flexible static site generator written in Ruby.
@@ -9,9 +14,7 @@ Note: This documentation looks best with Yardoc, not RDoc.
9
14
 
10
15
  ## Resources
11
16
 
12
- The [nanoc web site](http://nanoc.stoneship.org) contains a few useful
13
- resources to help you get started with nanoc. If you need further assistance,
14
- the following places will help you out:
17
+ The [nanoc web site](http://nanoc.ws) contains a few useful resources to help you get started with nanoc. If you need further assistance, the following places will help you out:
15
18
 
16
19
  * The [discussion group](http://groups.google.com/group/nanoc)
17
20
  * The [IRC channel](irc://chat.freenode.net/#nanoc)
@@ -1,10 +1,19 @@
1
1
  <%= superb %>
2
2
  <script type="text/javascript">
3
- var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
4
- document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
3
+ var _gaq = _gaq || [];
4
+ var pluginUrl = '//www.google-analytics.com/plugins/ga/inpage_linkid.js';
5
+ _gaq.push(['_require', 'inpage_linkid', pluginUrl]);
6
+ _gaq.push(['_setAccount', 'UA-15639968-1']);
7
+ _gaq.push(['_setDomainName', 'nanoc.ws']);
8
+ _gaq.push(['_setAllowLinker', true]);
9
+ _gaq.push(['_trackPageview']);
10
+
11
+ (function() {
12
+ var ga = document.createElement('script');
13
+ ga.type = 'text/javascript';
14
+ ga.async = true;
15
+ ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
16
+ var s = document.getElementsByTagName('script')[0];
17
+ s.parentNode.insertBefore(ga, s);
18
+ })();
5
19
  </script>
6
- <script type="text/javascript">
7
- try {
8
- var pageTracker = _gat._getTracker("UA-15639968-1");
9
- pageTracker._trackPageview();
10
- } catch(err) {}</script>
@@ -3,7 +3,7 @@
3
3
  module Nanoc
4
4
 
5
5
  # The current nanoc version.
6
- VERSION = '3.5.0'
6
+ VERSION = '3.6.0'
7
7
 
8
8
  # @return [String] A string containing information about this nanoc version
9
9
  # and its environment (Ruby engine and version, Rubygems version if any).
@@ -19,6 +19,7 @@ module Nanoc
19
19
  autoload 'Configuration', 'nanoc/base/source_data/configuration'
20
20
  autoload 'DataSource', 'nanoc/base/source_data/data_source'
21
21
  autoload 'Item', 'nanoc/base/source_data/item'
22
+ autoload 'ItemArray', 'nanoc/base/source_data/item_array'
22
23
  autoload 'Layout', 'nanoc/base/source_data/layout'
23
24
  autoload 'Site', 'nanoc/base/source_data/site'
24
25
 
@@ -190,6 +190,37 @@ module Nanoc
190
190
  @rules_collection.add_item_routing_rule(routing_rule)
191
191
  end
192
192
 
193
+ # Creates a pair of compilation and routing rules that indicate that the
194
+ # specified item(s) should be ignored, e.g. compiled and routed with an
195
+ # empty rule. The items are selected using an identifier, which may either
196
+ # be a string containing the `*` wildcard, or a regular expression.
197
+ #
198
+ # This meta-rule will be applicable to reps with a name equal to
199
+ # `:default`; this can be changed by giving an explicit `:rep` parameter.
200
+ #
201
+ # @param [String] identifier A pattern matching identifiers of items that
202
+ # should be processed using this meta-rule
203
+ #
204
+ # @option params [Symbol] :rep (:default) The name of the representation
205
+ # that should be routed using this rule
206
+ #
207
+ # @return [void]
208
+ #
209
+ # @example Suppressing compilation and output for all all `/foo/*` items.
210
+ #
211
+ # ignore '/foo/*'
212
+ def ignore(identifier, params={})
213
+ raise ArgumentError.new("#ignore does not require a block") if block_given?
214
+
215
+ rep_name = params[:rep] || :default
216
+
217
+ compilation_rule = Rule.new(identifier_to_regex(identifier), rep_name, proc { })
218
+ @rules_collection.add_item_compilation_rule(compilation_rule)
219
+
220
+ routing_rule = Rule.new(identifier_to_regex(identifier), rep_name, proc { }, :snapshot_name => :last)
221
+ @rules_collection.add_item_routing_rule(routing_rule)
222
+ end
223
+
193
224
  # Includes an additional rules file in the current rules collection.
194
225
  #
195
226
  # @param [String] name The name of the rules file — an ".rb" extension is
@@ -77,6 +77,31 @@ module Nanoc
77
77
  (@to || :text) == :binary
78
78
  end
79
79
 
80
+ # @overload requires(*requires)
81
+ # Sets the required libraries for this filter.
82
+ # @param [Array<String>] requires A list of library names that are required
83
+ # @return [void]
84
+ # @overload requires
85
+ # Returns the required libraries for this filter.
86
+ # @return [Enumerable<String>] This filter’s list of library names that are required
87
+ def requires(*requires)
88
+ if requires.size > 0
89
+ @requires = requires
90
+ else
91
+ @requires || []
92
+ end
93
+ end
94
+
95
+ # Requires the filter’s required library if necessary.
96
+ #
97
+ # @return [void]
98
+ def setup
99
+ @setup ||= begin
100
+ self.requires.each { |r| require r }
101
+ true
102
+ end
103
+ end
104
+
80
105
  end
81
106
 
82
107
  # Creates a new filter that has access to the given assigns.
@@ -88,6 +113,15 @@ module Nanoc
88
113
  super
89
114
  end
90
115
 
116
+ # Sets up the filter and runs the filter. This method passes its arguments
117
+ # to {#run} unchanged and returns the return value from {#run}.
118
+ #
119
+ # @see {#run}
120
+ def setup_and_run(*args)
121
+ self.class.setup
122
+ self.run(*args)
123
+ end
124
+
91
125
  # Runs the filter on the given content or filename.
92
126
  #
93
127
  # @abstract
@@ -333,7 +333,7 @@ module Nanoc
333
333
 
334
334
  # Run filter
335
335
  source = self.binary? ? temporary_filenames[:last] : @content[:last]
336
- result = filter.run(source, filter_args)
336
+ result = filter.setup_and_run(source, filter_args)
337
337
  if klass.to_binary?
338
338
  temporary_filenames[:last] = filter.output_filename
339
339
  else
@@ -398,7 +398,7 @@ module Nanoc
398
398
  Nanoc::NotificationCenter.post(:filtering_started, self, filter_name)
399
399
 
400
400
  # Layout
401
- @content[:last] = filter.run(layout.raw_content, filter_args)
401
+ @content[:last] = filter.setup_and_run(layout.raw_content, filter_args)
402
402
 
403
403
  # Create "post" snapshot
404
404
  snapshot(:post, :final => false)
@@ -458,7 +458,7 @@ module Nanoc
458
458
  end
459
459
 
460
460
  def inspect
461
- "<#{self.class} name=#{self.name} binary=#{self.binary?} raw_path=#{self.raw_path} item.identifier=#{self.item.identifier}>"
461
+ "<#{self.class} name=\"#{self.name}\" binary=#{self.binary?} raw_path=\"#{self.raw_path}\" item.identifier=\"#{self.item.identifier}\">"
462
462
  end
463
463
 
464
464
  private
@@ -44,7 +44,7 @@ module Nanoc
44
44
  end
45
45
 
46
46
  def inspect
47
- "<#{self.class} filename=#{self.filename}>"
47
+ "<#{self.class} filename=\"#{self.filename}\">"
48
48
  end
49
49
 
50
50
  # @return [String] The checksum for this object. If its contents change,
@@ -148,6 +148,18 @@ module Nanoc
148
148
  def update
149
149
  end
150
150
 
151
+ # Sync the content for this data source with an external source.
152
+ # This method is called by the `nanoc sync` command so that data sources may
153
+ # update local caches of external data, such as items fetched from
154
+ # third-party APIs.
155
+ #
156
+ # Subclasses may override this method, but are not required to do so; the
157
+ # default implementation simply does nothing.
158
+ #
159
+ # @return [void]
160
+ def sync
161
+ end
162
+
151
163
  # Returns the list of items (represented by {Nanoc::Item}) in this site.
152
164
  # The default implementation simply returns an empty array.
153
165
  #
@@ -240,7 +240,7 @@ module Nanoc
240
240
  end
241
241
 
242
242
  def inspect
243
- "<#{self.class} identifier=#{self.identifier} binary?=#{self.binary?}>"
243
+ "<#{self.class} identifier=\"#{self.identifier}\" binary?=#{self.binary?}>"
244
244
  end
245
245
 
246
246
  # @return [String] The checksum for this object. If its contents change,
@@ -0,0 +1,62 @@
1
+ # encoding: utf-8
2
+
3
+ module Nanoc
4
+
5
+ # Acts as an array, but allows fetching items using identifiers, e.g. `@items['/blah/']`.
6
+ class ItemArray
7
+
8
+ include Enumerable
9
+
10
+ extend Forwardable
11
+
12
+ DELEGATED_METHODS = Array.instance_methods + Enumerable.instance_methods - [ :[], :slice, :at, :initialize, :freeze ]
13
+ def_delegators :@items, *DELEGATED_METHODS
14
+
15
+ def initialize
16
+ @items = []
17
+ end
18
+
19
+ def freeze
20
+ @items.freeze
21
+ self.build_mapping
22
+ super
23
+ end
24
+
25
+ def [](*args)
26
+ if 1 == args.size && args.first.is_a?(String)
27
+ self.item_with_identifier(args.first)
28
+ else
29
+ @items[*args]
30
+ end
31
+ end
32
+ alias_method :slice, :[]
33
+
34
+ def at(arg)
35
+ if arg.is_a?(String)
36
+ self.item_with_identifier(arg)
37
+ else
38
+ @items[arg]
39
+ end
40
+ end
41
+
42
+ protected
43
+
44
+ def item_with_identifier(identifier)
45
+ if self.frozen?
46
+ @mapping[identifier]
47
+ else
48
+ @items.find { |i| i.identifier == identifier }
49
+ end
50
+ end
51
+
52
+ def build_mapping
53
+ @mapping = {}
54
+ @items.each do |item|
55
+ @mapping[item.identifier] = item
56
+ end
57
+ @mapping.freeze
58
+ end
59
+
60
+ end
61
+
62
+ end
@@ -82,7 +82,7 @@ module Nanoc
82
82
  end
83
83
 
84
84
  def inspect
85
- "<#{self.class} identifier=#{self.identifier}>"
85
+ "<#{self.class} identifier=\"#{self.identifier}\">"
86
86
  end
87
87
 
88
88
  # @return [String] The checksum for this object. If its contents change,
@@ -277,6 +277,21 @@ module Nanoc
277
277
  @unloading = false
278
278
  end
279
279
 
280
+ # @return [Boolean] true if the current working directory is a nanoc site, false otherwise
281
+ #
282
+ # @api private
283
+ def self.cwd_is_nanoc_site?
284
+ !self.config_filename_for_cwd.nil?
285
+ end
286
+
287
+ # @return [String] filename of the nanoc config file in the current working directory, or nil if there is none
288
+ #
289
+ # @api private
290
+ def self.config_filename_for_cwd
291
+ filenames = %w( nanoc.yaml config.yaml )
292
+ filenames.find { |f| File.file?(f) }
293
+ end
294
+
280
295
  private
281
296
 
282
297
  # Loads this site’s code and executes it.
@@ -305,7 +320,7 @@ module Nanoc
305
320
  @items_loaded = true
306
321
 
307
322
  # Get items
308
- @items = []
323
+ @items = Nanoc::ItemArray.new
309
324
  data_sources.each do |ds|
310
325
  items_in_ds = ds.items
311
326
  items_in_ds.each do |i|
@@ -340,8 +355,14 @@ module Nanoc
340
355
  warn 'WARNING: Calling Nanoc::Site.new with a directory that is not the current working directory is not supported. It is recommended to change the directory before calling Nanoc::Site.new. For example, instead of Nanoc::Site.new(\'abc\'), use Dir.chdir(\'abc\') { Nanoc::Site.new(\'.\') }.'
341
356
  end
342
357
 
343
- # Read config from config.yaml in given dir
344
- config_path = File.join(dir_or_config_hash, 'config.yaml')
358
+ # Read config from nanoc.yaml/config.yaml in given dir
359
+ config_path = Dir.chdir(dir_or_config_hash) do
360
+ filename = self.class.config_filename_for_cwd
361
+ if filename.nil?
362
+ raise Nanoc::Errors::GenericTrivial, 'Could not find nanoc.yaml or config.yaml in the current working directory'
363
+ end
364
+ File.join(dir_or_config_hash, filename)
365
+ end
345
366
  @config = DEFAULT_CONFIG.merge(YAML.load_file(config_path).symbolize_keys_recursively)
346
367
  @config[:data_sources].map! { |ds| ds.symbolize_keys_recursively }
347
368
  else