middleman-core 3.0.0.alpha.9 → 3.0.0.beta.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (57) hide show
  1. data/.gemtest +0 -0
  2. data/Rakefile +45 -1
  3. data/bin/fsevent_watch_guard +0 -0
  4. data/bin/middleman +1 -1
  5. data/ext/extconf.rb +61 -0
  6. data/{lib/middleman-core/vendor/rb-fsevent-0.4.3.1/ext → ext}/fsevent/fsevent_watch.c +0 -0
  7. data/features/cli.feature +2 -3
  8. data/lib/middleman-core/base.rb +2 -2
  9. data/lib/middleman-core/cli/build.rb +1 -1
  10. data/lib/middleman-core/cli/server.rb +15 -10
  11. data/lib/middleman-core/core_extensions/data.rb +32 -50
  12. data/lib/middleman-core/core_extensions/file_watcher.rb +81 -34
  13. data/lib/middleman-core/core_extensions/front_matter.rb +4 -4
  14. data/lib/middleman-core/core_extensions/rendering.rb +3 -3
  15. data/lib/middleman-core/core_extensions/sitemap.rb +4 -4
  16. data/lib/middleman-core/sitemap/template.rb +1 -1
  17. data/lib/middleman-core/step_definitions/middleman_steps.rb +2 -2
  18. data/lib/middleman-core/templates/default/source/layouts/layout.erb +1 -1
  19. data/lib/middleman-core/templates/default/source/stylesheets/all.css +55 -0
  20. data/lib/middleman-core/templates/default/source/stylesheets/{_normalize.scss → normalize.css} +0 -0
  21. data/lib/middleman-core/templates/default.rb +2 -3
  22. data/lib/middleman-core/vendor/darwin/.gitignore +18 -0
  23. data/lib/middleman-core/vendor/darwin/Gemfile +6 -0
  24. data/lib/middleman-core/vendor/darwin/Guardfile +8 -0
  25. data/lib/middleman-core/vendor/{rb-fsevent-0.4.3.1 → darwin}/LICENSE +0 -0
  26. data/lib/middleman-core/vendor/{rb-fsevent-0.4.3.1 → darwin}/README.rdoc +0 -0
  27. data/lib/middleman-core/vendor/darwin/Rakefile +21 -0
  28. data/lib/middleman-core/vendor/{rb-fsevent-0.4.3.1 → darwin}/ext/extconf.rb +0 -0
  29. data/lib/middleman-core/vendor/darwin/ext/fsevent/fsevent_watch.c +226 -0
  30. data/lib/middleman-core/vendor/{rb-fsevent-0.4.3.1 → darwin}/lib/rb-fsevent/fsevent.rb +2 -2
  31. data/lib/middleman-core/vendor/{rb-fsevent-0.4.3.1 → darwin}/lib/rb-fsevent/version.rb +0 -0
  32. data/lib/middleman-core/vendor/{rb-fsevent-0.4.3.1 → darwin}/lib/rb-fsevent.rb +0 -0
  33. data/lib/middleman-core/vendor/darwin/rb-fsevent.gemspec +24 -0
  34. data/lib/middleman-core/vendor/darwin/spec/fixtures/custom 'path/.gitignore +0 -0
  35. data/lib/middleman-core/vendor/darwin/spec/fixtures/folder1/file1.txt +0 -0
  36. data/lib/middleman-core/vendor/darwin/spec/fixtures/folder1/folder2/file2.txt +0 -0
  37. data/lib/middleman-core/vendor/darwin/spec/rb-fsevent/fsevent_spec.rb +75 -0
  38. data/lib/middleman-core/vendor/darwin/spec/spec_helper.rb +24 -0
  39. data/lib/middleman-core/vendor/linux/.gitignore +3 -0
  40. data/lib/middleman-core/vendor/{rb-inotify-0.8.8 → linux}/.yardopts +0 -0
  41. data/lib/middleman-core/vendor/{rb-inotify-0.8.8 → linux}/MIT-LICENSE +0 -0
  42. data/lib/middleman-core/vendor/{rb-inotify-0.8.8 → linux}/README.md +0 -0
  43. data/lib/middleman-core/vendor/{rb-inotify-0.8.8 → linux}/Rakefile +0 -0
  44. data/lib/middleman-core/vendor/{rb-inotify-0.8.8 → linux}/VERSION +0 -0
  45. data/lib/middleman-core/vendor/{rb-inotify-0.8.8 → linux}/lib/rb-inotify/event.rb +0 -0
  46. data/lib/middleman-core/vendor/{rb-inotify-0.8.8 → linux}/lib/rb-inotify/native/flags.rb +0 -0
  47. data/lib/middleman-core/vendor/{rb-inotify-0.8.8 → linux}/lib/rb-inotify/native.rb +0 -0
  48. data/lib/middleman-core/vendor/{rb-inotify-0.8.8 → linux}/lib/rb-inotify/notifier.rb +0 -0
  49. data/lib/middleman-core/vendor/{rb-inotify-0.8.8 → linux}/lib/rb-inotify/watcher.rb +0 -0
  50. data/lib/middleman-core/vendor/{rb-inotify-0.8.8 → linux}/lib/rb-inotify.rb +0 -0
  51. data/lib/middleman-core/vendor/{rb-inotify-0.8.8 → linux}/rb-inotify.gemspec +0 -0
  52. data/lib/middleman-core/version.rb +1 -1
  53. data/lib/middleman-core/watcher.rb +19 -14
  54. data/middleman-core.gemspec +4 -4
  55. metadata +40 -26
  56. data/lib/middleman-core/templates/default/source/stylesheets/_animate.scss +0 -23
  57. data/lib/middleman-core/templates/default/source/stylesheets/all.css.scss +0 -40
data/.gemtest ADDED
File without changes
data/Rakefile CHANGED
@@ -2,4 +2,48 @@
2
2
  RAKE_ROOT = __FILE__
3
3
 
4
4
  require 'rubygems'
5
- require File.expand_path(File.dirname(__FILE__) + '/../gem_rake_helper')
5
+ require File.expand_path(File.dirname(__FILE__) + '/../gem_rake_helper')
6
+
7
+ desc "Build vendored gems"
8
+ task :build_vendor do
9
+ raise unless File.exist?('Rakefile')
10
+
11
+ # Destroy vendor
12
+ sh "rm -rf lib/middleman-core/vendor/darwin"
13
+ sh "rm -rf lib/middleman-core/vendor/linux"
14
+
15
+ # Clone the correct gems
16
+ sh "git clone https://github.com/thibaudgg/rb-fsevent.git lib/middleman-core/vendor/darwin"
17
+ sh "cd lib/middleman-core/vendor/darwin && git checkout 1ca42b987596f350ee7b19d8f8210b7b6ae8766b"
18
+ sh "git clone https://github.com/nex3/rb-inotify.git lib/middleman-core/vendor/linux"
19
+ sh "cd lib/middleman-core/vendor/linux && git checkout 01e7487e7a8d8f26b13c6835a321390c6618ccb7"
20
+
21
+ # Strip out the .git directories
22
+ %w[darwin linux].each {|platform| sh "rm -rf lib/middleman-core/vendor/#{platform}/.git"}
23
+
24
+ # Move ext directory of darwin to root
25
+ sh "mkdir -p ext"
26
+ sh "cp -r lib/middleman-core/vendor/darwin/ext/* ext/"
27
+
28
+ # Alter darwin extconf.rb
29
+ extconf_path = File.expand_path("../ext/extconf.rb", __FILE__)
30
+ extconf_contents = File.read(extconf_path)
31
+ extconf_contents.sub!(/puts "Warning/, '#\0')
32
+ extconf_contents.gsub!(/bin\/fsevent_watch/, 'bin/fsevent_watch_guard')
33
+ File.open(extconf_path, 'w') { |f| f << extconf_contents }
34
+
35
+ # Alter lib/middleman-core/vendor/darwin/lib/rb-fsevent/fsevent.rb
36
+ fsevent_path = File.expand_path("../lib/middleman-core/vendor/darwin/lib/rb-fsevent/fsevent.rb", __FILE__)
37
+ fsevent_contents = File.read(fsevent_path)
38
+ fsevent_contents.sub!(/fsevent_watch/, 'fsevent_watch_guard')
39
+ fsevent_contents.sub!(/'\.\.'/, "'..', '..', '..', '..', '..'")
40
+
41
+ File.open(fsevent_path, 'w') { |f| f << fsevent_contents }
42
+ end
43
+
44
+ desc "Compile mac executable"
45
+ task :build_mac_exec do
46
+ Dir.chdir(File.expand_path("../ext", __FILE__)) do
47
+ system("ruby extconf.rb") or raise
48
+ end
49
+ end
Binary file
data/bin/middleman CHANGED
@@ -31,7 +31,7 @@ if ENV["MM_ROOT"]
31
31
  end
32
32
 
33
33
  # Default command is server
34
- ARGV << "server" if ARGV.length < 1
34
+ ARGV.unshift("server") if ARGV.length < 1 || ARGV.first.include?("-")
35
35
 
36
36
  # Require Middleman
37
37
  require 'middleman-core'
data/ext/extconf.rb ADDED
@@ -0,0 +1,61 @@
1
+ # Workaround to make Rubygems believe it builds a native gem
2
+ require 'mkmf'
3
+ create_makefile('none')
4
+
5
+ # TODO: determine whether we really need to be working around instead of with mkmf
6
+
7
+ if `uname -s`.chomp != 'Darwin'
8
+ #puts "Warning! Only Darwin (Mac OS X) systems are supported, nothing will be compiled"
9
+ else
10
+ begin
11
+ xcode_path = %x[xcode-select -print-path].to_s.strip!
12
+ rescue Errno::ENOENT
13
+ end
14
+
15
+ raise "Could not find a suitable Xcode installation" unless xcode_path
16
+
17
+ gem_root = File.expand_path(File.join('..'))
18
+ darwin_version = `uname -r`.to_i
19
+ sdk_version = { 9 => '10.5', 10 => '10.6', 11 => '10.7' }[darwin_version]
20
+
21
+ raise "Only Darwin systems greater than 8 (Mac OS X 10.5+) are supported" unless sdk_version
22
+
23
+ core_flags = %W{
24
+ -isysroot #{xcode_path}/SDKs/MacOSX#{sdk_version}.sdk
25
+ -mmacosx-version-min=#{sdk_version} -mdynamic-no-pic -std=gnu99
26
+ }
27
+
28
+ cflags = core_flags + %w{-Os -pipe}
29
+
30
+ wflags = %w{
31
+ -Wmissing-prototypes -Wreturn-type -Wmissing-braces -Wparentheses -Wswitch
32
+ -Wunused-function -Wunused-label -Wunused-parameter -Wunused-variable
33
+ -Wunused-value -Wuninitialized -Wunknown-pragmas -Wshadow
34
+ -Wfour-char-constants -Wsign-compare -Wnewline-eof -Wconversion
35
+ -Wshorten-64-to-32 -Wglobal-constructors -pedantic
36
+ }
37
+
38
+ ldflags = %w{
39
+ -dead_strip -framework CoreServices
40
+ }
41
+
42
+ cc_opts = core_flags + ldflags
43
+
44
+ cc_opts += %w{
45
+ -D DEBUG=true
46
+ } if ENV['FWDEBUG'] == "true"
47
+
48
+ cc_bin = `which clang || which gcc`.to_s.strip!
49
+
50
+ compile_command = "CFLAGS='#{cflags.join(' ')} #{wflags.join(' ')}' #{cc_bin} #{cc_opts.join(' ')} -o '#{gem_root}/bin/fsevent_watch_guard' fsevent/fsevent_watch.c"
51
+
52
+ STDERR.puts(compile_command)
53
+
54
+ # Compile the actual fsevent_watch binary
55
+ system "mkdir -p #{File.join(gem_root, 'bin')}"
56
+ system compile_command
57
+
58
+ unless File.executable?("#{gem_root}/bin/fsevent_watch_guard")
59
+ raise "Compilation of fsevent_watch failed (see README)"
60
+ end
61
+ end
data/features/cli.feature CHANGED
@@ -11,9 +11,8 @@ Feature: Middleman CLI
11
11
  | source/images/middleman.png |
12
12
  | source/layouts/layout.erb |
13
13
  | source/javascripts/all.js |
14
- | source/stylesheets/all.css.scss |
15
- | source/stylesheets/_animate.scss |
16
- | source/stylesheets/_normalize.scss |
14
+ | source/stylesheets/all.css |
15
+ | source/stylesheets/normalize.css |
17
16
 
18
17
  Scenario: Create a new project (alias i)
19
18
  When I run `middleman i MY_PROJECT`
@@ -322,9 +322,9 @@ class Middleman::Base
322
322
 
323
323
  if env["PATH_INFO"] == "/__middleman__" && env["REQUEST_METHOD"] == "POST"
324
324
  if req.params.has_key?("change")
325
- file_did_change(req.params["change"])
325
+ self.files.did_change(req.params["change"])
326
326
  elsif req.params.has_key?("delete")
327
- file_did_delete(req.params["delete"])
327
+ self.files.did_delete(req.params["delete"])
328
328
  end
329
329
 
330
330
  res.status = 200
@@ -93,7 +93,7 @@ module Middleman::Cli
93
93
  # @param [String] destination
94
94
  # @param [Hash] config
95
95
  # @return [String] the actual destination file path that was created
96
- desc "private method", :hide => true
96
+ desc "", "", :hide => true
97
97
  def tilt_template(source, destination, config={})
98
98
  build_dir = self.class.shared_instance.build_dir
99
99
  request_path = destination.sub(/^#{build_dir}/, "")
@@ -8,38 +8,43 @@ module Middleman::Cli
8
8
  namespace :server
9
9
 
10
10
  desc "server [options]", "Start the preview server"
11
- method_option "environment",
11
+ method_option :environment,
12
12
  :aliases => "-e",
13
13
  :default => ENV['MM_ENV'] || ENV['RACK_ENV'] || 'development',
14
14
  :desc => "The environment Middleman will run under"
15
15
  method_option :host,
16
- :type => :string,
16
+ :type => :string,
17
17
  :aliases => "-h",
18
18
  :default => "0.0.0.0",
19
- :desc => "Bind to HOST address"
20
- method_option "port",
19
+ :desc => "Bind to HOST address"
20
+ method_option :port,
21
21
  :aliases => "-p",
22
22
  :default => "4567",
23
23
  :desc => "The port Middleman will listen on"
24
- method_option "verbose",
24
+ method_option :verbose,
25
25
  :type => :boolean,
26
26
  :default => false,
27
27
  :desc => 'Print debug messages'
28
+ method_option "disable-watcher",
29
+ :type => :boolean,
30
+ :default => false,
31
+ :desc => 'Disable the file change and delete watcher process'
28
32
 
29
33
  # Start the server
30
34
  def server
31
35
  if !ENV["MM_ROOT"]
32
- puts "== Warning: Could not find a Middleman project config.rb"
36
+ puts "== Could not find a Middleman project config.rb"
33
37
  puts "== Treating directory as a static site to be served"
34
38
  ENV["MM_ROOT"] = Dir.pwd
35
39
  ENV["MM_SOURCE"] = ""
36
40
  end
37
41
 
38
42
  params = {
39
- :port => options["port"],
40
- :host => options["host"],
41
- :environment => options["environment"],
42
- :debug => options["verbose"]
43
+ :port => options["port"],
44
+ :host => options["host"],
45
+ :environment => options["environment"],
46
+ :debug => options["verbose"],
47
+ :"disable-watcher" => options["disable-watcher"]
43
48
  }
44
49
 
45
50
  puts "== The Middleman is loading"
@@ -21,12 +21,12 @@ module Middleman::CoreExtensions::Data
21
21
  # Setup data files before anything else so they are available when
22
22
  # parsing config.rb
23
23
  def initialize
24
- file_changed DataStore.matcher do |file|
25
- data.touch_file(file) if file.match(%r{^#{data_dir}\/})
24
+ self.files.changed DataStore.matcher do |file|
25
+ self.data.touch_file(file) if file.match(%r{^#{self.data_dir}\/})
26
26
  end
27
27
 
28
- file_deleted DataStore.matcher do |file|
29
- data.remove_file(file) if file.match(%r{^#{data_dir}\/})
28
+ self.files.deleted DataStore.matcher do |file|
29
+ self.data.remove_file(file) if file.match(%r{^#{self.data_dir}\/})
30
30
  end
31
31
 
32
32
  super
@@ -36,24 +36,7 @@ module Middleman::CoreExtensions::Data
36
36
  #
37
37
  # @return [DataStore]
38
38
  def data
39
- @data ||= DataStore.new(self)
40
- end
41
-
42
- # Makes a hash available on the data var with a given name
43
- #
44
- # @param [Symbol] name Name of the data, used for namespacing
45
- # @param [Hash] content The content for this data
46
- # @return [void]
47
- def data_content(name, content)
48
- DataStore.data_content(name, content)
49
- end
50
-
51
- # Makes a hash available on the data var with a given name
52
- #
53
- # @param [Symbol] name Name of the data, used for namespacing
54
- # @return [void]
55
- def data_callback(name, &block)
56
- DataStore.data_callback(name, block)
39
+ @_data ||= DataStore.new(self)
57
40
  end
58
41
  end
59
42
 
@@ -69,26 +52,28 @@ module Middleman::CoreExtensions::Data
69
52
  def matcher
70
53
  %r{[\w-]+\.(yml|yaml|json)$}
71
54
  end
55
+ end
56
+
57
+ # Store static data hash
58
+ #
59
+ # @param [Symbol] name Name of the data, used for namespacing
60
+ # @param [Hash] content The content for this data
61
+ # @return [void]
62
+ def store(name=nil, content=nil)
63
+ @_local_sources ||= {}
64
+ @_local_sources[name.to_s] = content unless name.nil? || content.nil?
65
+ @_local_sources
66
+ end
72
67
 
73
- # Store static data hash
74
- #
75
- # @param [Symbol] name Name of the data, used for namespacing
76
- # @param [Hash] content The content for this data
77
- # @return [void]
78
- def data_content(name, content)
79
- @@local_sources ||= {}
80
- @@local_sources[name.to_s] = content
81
- end
82
-
83
- # Store callback-based data
84
- #
85
- # @param [Symbol] name Name of the data, used for namespacing
86
- # @param [Proc] proc The callback which will return data
87
- # @return [void]
88
- def data_callback(name, proc)
89
- @@callback_sources ||= {}
90
- @@callback_sources[name.to_s] = proc
91
- end
68
+ # Store callback-based data
69
+ #
70
+ # @param [Symbol] name Name of the data, used for namespacing
71
+ # @param [Proc] proc The callback which will return data
72
+ # @return [void]
73
+ def callbacks(name=nil, proc=nil)
74
+ @_callback_sources ||= {}
75
+ @_callback_sources[name.to_s] = proc unless name.nil? || proc.nil?
76
+ @_callback_sources
92
77
  end
93
78
 
94
79
  # Setup data store
@@ -139,10 +124,10 @@ module Middleman::CoreExtensions::Data
139
124
  @@local_sources ||= {}
140
125
  @@callback_sources ||= {}
141
126
 
142
- if @@local_sources.has_key?(path.to_s)
143
- response = @@local_sources[path.to_s]
144
- elsif @@callback_sources.has_key?(path.to_s)
145
- response = @@callback_sources[path.to_s].call()
127
+ if self.store.has_key?(path.to_s)
128
+ response = self.store[path.to_s]
129
+ elsif self.callbacks.has_key?(path.to_s)
130
+ response = self.callbacks[path.to_s].call()
146
131
  end
147
132
 
148
133
  response
@@ -172,14 +157,11 @@ module Middleman::CoreExtensions::Data
172
157
  def to_h
173
158
  data = {}
174
159
 
175
- @@local_sources ||= {}
176
- @@callback_sources ||= {}
177
-
178
- (@@local_sources || {}).each do |k, v|
160
+ self.store.each do |k, v|
179
161
  data[k] = data_for_path(k)
180
162
  end
181
163
 
182
- (@@callback_sources || {}).each do |k, v|
164
+ self.callbacks.each do |k, v|
183
165
  data[k] = data_for_path(k)
184
166
  end
185
167
 
@@ -2,30 +2,24 @@ require "find"
2
2
 
3
3
  # API for watching file change events
4
4
  module Middleman::CoreExtensions::FileWatcher
5
+
5
6
  # Setup extension
6
7
  class << self
7
- # @private
8
+
9
+ # Once registered
8
10
  def registered(app)
9
11
  app.extend ClassMethods
10
12
  app.send :include, InstanceMethods
11
13
 
12
- app.delegate :file_changed, :file_deleted, :to => :"self.class"
13
-
14
14
  # Before parsing config, load the data/ directory
15
15
  app.before_configuration do
16
- data_path = File.join(root, data_dir)
17
- Find.find(data_path) do |path|
18
- next if File.directory?(path)
19
- file_did_change(path.sub("#{root}/", ""))
20
- end if File.exists?(data_path)
16
+ data_path = File.join(self.root, self.data_dir)
17
+ self.files.reload_path(data_path) if File.exists?(data_path)
21
18
  end
22
19
 
23
20
  # After config, load everything else
24
21
  app.ready do
25
- Find.find(root) do |path|
26
- next if File.directory?(path)
27
- file_did_change(path.sub("#{root}/", ""))
28
- end
22
+ self.files.reload_path(self.root)
29
23
  end
30
24
  end
31
25
  alias :included :registered
@@ -33,52 +27,105 @@ module Middleman::CoreExtensions::FileWatcher
33
27
 
34
28
  # Class methods
35
29
  module ClassMethods
30
+
31
+ # Access the file api
32
+ # @return [Middleman::CoreExtensions::FileWatcher::API]
33
+ def files
34
+ @_files_api ||= API.new
35
+ end
36
+ end
37
+
38
+ # Instance methods
39
+ module InstanceMethods
40
+
41
+ # Access the file api
42
+ # @return [Middleman::CoreExtensions::FileWatcher::API]
43
+ def files
44
+ api = self.class.files
45
+ api.instance ||= self
46
+ api
47
+ end
48
+ end
49
+
50
+ # Core File Change API class
51
+ class API
52
+ attr_accessor :instance, :known_paths
53
+
54
+ # Initialize api and internal path cache
55
+ def initialize
56
+ self.known_paths = []
57
+ end
58
+
36
59
  # Add callback to be run on file change
37
60
  #
38
61
  # @param [nil,Regexp] matcher A Regexp to match the change path against
39
62
  # @return [Array<Proc>]
40
- def file_changed(matcher=nil, &block)
41
- @_file_changed ||= []
42
- @_file_changed << [block, matcher] if block_given?
43
- @_file_changed
63
+ def changed(matcher=nil, &block)
64
+ @_changed ||= []
65
+ @_changed << [block, matcher] if block_given?
66
+ @_changed
44
67
  end
45
68
 
46
69
  # Add callback to be run on file deletion
47
70
  #
48
71
  # @param [nil,Regexp] matcher A Regexp to match the deleted path against
49
72
  # @return [Array<Proc>]
50
- def file_deleted(matcher=nil, &block)
51
- @_file_deleted ||= []
52
- @_file_deleted << [block, matcher] if block_given?
53
- @_file_deleted
73
+ def deleted(matcher=nil, &block)
74
+ @_deleted ||= []
75
+ @_deleted << [block, matcher] if block_given?
76
+ @_deleted
54
77
  end
55
- end
56
78
 
57
- # Instance methods
58
- module InstanceMethods
59
79
  # Notify callbacks that a file changed
60
80
  #
61
81
  # @param [String] path The file that changed
62
82
  # @return [void]
63
- def file_did_change(path)
64
- return if ::Middleman::Watcher.ignore_list.any? { |r| path.match(r) }
65
- file_changed.each do |callback, matcher|
66
- next if path.match(%r{^#{build_dir}/})
67
- next if !matcher.nil? && !path.match(matcher)
68
- instance_exec(path, &callback)
69
- end
83
+ def did_change(path)
84
+ self.known_paths << path unless self.known_paths.include?(path)
85
+ self.run_callbacks(path, :changed)
70
86
  end
71
87
 
72
88
  # Notify callbacks that a file was deleted
73
89
  #
74
90
  # @param [String] path The file that was deleted
75
91
  # @return [void]
76
- def file_did_delete(path)
92
+ def did_delete(path)
93
+ self.known_paths.delete(path) if self.known_paths.include?(path)
94
+ self.run_callbacks(path, :deleted)
95
+ end
96
+
97
+ # Manually trigger update events
98
+ #
99
+ # @param [String] path The path to reload
100
+ # @return [void]
101
+ def reload_path(path)
102
+ subset = self.known_paths.select { |p| p.match(%r{^#{path}}) }
103
+
104
+ Find.find(path) do |path|
105
+ next if File.directory?(path)
106
+ relative_path = path.sub("#{self.instance.root}/", "")
107
+ subset.delete(relative_path) if subset.include?(relative_path)
108
+ self.did_change(relative_path)
109
+ end
110
+
111
+ subset.each do |removed_path|
112
+ self.did_delete(removed_path)
113
+ end
114
+ end
115
+
116
+ protected
117
+ # Notify callbacks for a file given an array of callbacks
118
+ #
119
+ # @param [String] path The file that was changed
120
+ # @param [Symbol] callbacks_name The name of the callbacks method
121
+ # @return [void]
122
+ def run_callbacks(path, callbacks_name)
77
123
  return if ::Middleman::Watcher.ignore_list.any? { |r| path.match(r) }
78
- file_deleted.each do |callback, matcher|
79
- next if path.match(%r{^#{build_dir}/})
124
+
125
+ self.send(callbacks_name).each do |callback, matcher|
126
+ next if path.match(%r{^#{self.instance.build_dir}/})
80
127
  next unless matcher.nil? || path.match(matcher)
81
- instance_exec(path, &callback)
128
+ self.instance.instance_exec(path, &callback)
82
129
  end
83
130
  end
84
131
  end
@@ -30,12 +30,12 @@ module Middleman::CoreExtensions::FrontMatter
30
30
 
31
31
  matcher = %r{#{static_path}.*(#{exts})}
32
32
 
33
- file_changed matcher do |file|
34
- frontmatter_extension.touch_file(file)
33
+ self.files.changed matcher do |file|
34
+ self.frontmatter_extension.touch_file(file)
35
35
  end
36
36
 
37
- file_deleted matcher do |file|
38
- frontmatter_extension.remove_file(file)
37
+ self.files.deleted matcher do |file|
38
+ self.frontmatter_extension.remove_file(file)
39
39
  end
40
40
 
41
41
  provides_metadata matcher do |path|
@@ -26,9 +26,9 @@ module Middleman::CoreExtensions::Rendering
26
26
  static_path = source_dir.sub(self.root, "").sub(/^\//, "")
27
27
  render_regex = static_path.empty? ? // : (%r{^#{static_path + "/"}})
28
28
 
29
- file_changed render_regex do |file|
30
- path = File.expand_path(file, root)
31
- cache.remove(:raw_template, path)
29
+ self.files.changed render_regex do |file|
30
+ path = File.expand_path(file, self.root)
31
+ self.cache.remove(:raw_template, path)
32
32
  end
33
33
  end
34
34
 
@@ -31,12 +31,12 @@ module Middleman::CoreExtensions::Sitemap
31
31
  static_path = source_dir.sub(self.root, "").sub(/^\//, "")
32
32
  sitemap_regex = static_path.empty? ? // : (%r{^#{static_path + "/"}})
33
33
 
34
- file_changed sitemap_regex do |file|
35
- sitemap.touch_file(file)
34
+ self.files.changed sitemap_regex do |file|
35
+ self.sitemap.touch_file(file)
36
36
  end
37
37
 
38
- file_deleted sitemap_regex do |file|
39
- sitemap.remove_file(file)
38
+ self.files.deleted sitemap_regex do |file|
39
+ self.sitemap.remove_file(file)
40
40
  end
41
41
  end
42
42
 
@@ -65,7 +65,7 @@ module Middleman::Sitemap
65
65
 
66
66
  # Forward remaining data to helpers
67
67
  if md.has_key?(:page)
68
- app.data_content("page", md[:page])
68
+ app.data.store("page", md[:page])
69
69
  end
70
70
 
71
71
  blocks.compact.each do |block|
@@ -9,9 +9,9 @@ Then /^the file "([^\"]*)" is removed$/ do |path|
9
9
  end
10
10
 
11
11
  Then /^the file "([^\"]*)" did change$/ do |path|
12
- @server_inst.file_did_change(path)
12
+ @server_inst.files.did_change(path)
13
13
  end
14
14
 
15
15
  Then /^the file "([^\"]*)" did delete$/ do |path|
16
- @server_inst.file_did_delete(path)
16
+ @server_inst.files.did_delete(path)
17
17
  end
@@ -9,7 +9,7 @@
9
9
  <!-- Use title if it's in the page YAML frontmatter -->
10
10
  <title><%= data.page.title || "The Middleman" %></title>
11
11
 
12
- <%= stylesheet_link_tag "all" %>
12
+ <%= stylesheet_link_tag "normalize", "all" %>
13
13
  <%= javascript_include_tag "all" %>
14
14
  </head>
15
15
 
@@ -0,0 +1,55 @@
1
+ @charset "utf-8";
2
+
3
+ body {
4
+ background: #d4d4d4 url("../images/background.png");
5
+ text-align: center;
6
+ font-family: sans-serif; }
7
+
8
+ h1 {
9
+ color: rgba(0, 0, 0, .3);
10
+ font-weight: bold;
11
+ font-size: 32px;
12
+ letter-spacing: -1px;
13
+ text-transform: uppercase;
14
+ text-shadow: 0 1px 0 rgba(255, 255, 255, .5);
15
+ background: url("../images/middleman.png") no-repeat center 100px;
16
+ padding: 350px 0 10px;
17
+ margin: 0; }
18
+
19
+ .doc {
20
+ font-size: 14px;
21
+ margin: 0; }
22
+ .doc:before,
23
+ .doc:after {
24
+ opacity: .2;
25
+ padding: 6px;
26
+ font-style: normal;
27
+ position: relative;
28
+ content: "•"; }
29
+ .doc a {
30
+ color: rgba(0, 0, 0, 0.3); }
31
+ .doc a:hover {
32
+ color: #666; }
33
+
34
+ .welcome {
35
+ -webkit-animation-name: welcome;
36
+ -webkit-animation-duration: .9s; }
37
+
38
+ @-webkit-keyframes welcome {
39
+ from {
40
+ -webkit-transform: scale(0);
41
+ opacity: 0;
42
+ }
43
+ 50% {
44
+ -webkit-transform: scale(0);
45
+ opacity: 0;
46
+ }
47
+ 82.5% {
48
+ -webkit-transform: scale(1.03);
49
+ -webkit-animation-timing-function: ease-out;
50
+ opacity: 1;
51
+ }
52
+ to {
53
+ -webkit-transform: scale(1);
54
+ }
55
+ }
@@ -14,9 +14,8 @@ class Middleman::Templates::Default < Middleman::Templates::Base
14
14
  copy_file "default/source/index.html.erb", File.join(location, "source/index.html.erb")
15
15
  copy_file "default/source/layouts/layout.erb", File.join(location, "source/layouts/layout.erb")
16
16
  empty_directory File.join(location, "source", options[:css_dir])
17
- copy_file "default/source/stylesheets/all.css.scss", File.join(location, "source", options[:css_dir], "all.css.scss")
18
- copy_file "default/source/stylesheets/_animate.scss", File.join(location, "source", options[:css_dir], "_animate.scss")
19
- copy_file "default/source/stylesheets/_normalize.scss", File.join(location, "source", options[:css_dir], "_normalize.scss")
17
+ copy_file "default/source/stylesheets/all.css", File.join(location, "source", options[:css_dir], "all.css")
18
+ copy_file "default/source/stylesheets/normalize.css", File.join(location, "source", options[:css_dir], "normalize.css")
20
19
  empty_directory File.join(location, "source", options[:js_dir])
21
20
  copy_file "default/source/javascripts/all.js", File.join(location, "source", options[:js_dir], "all.js")
22
21
  empty_directory File.join(location, "source", options[:images_dir])