middleman-core 3.3.2 → 3.3.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/features/helpers_select_tag.feature +6 -8
- data/lib/middleman-core.rb +1 -2
- data/lib/middleman-core/application.rb +10 -9
- data/lib/middleman-core/cli.rb +9 -13
- data/lib/middleman-core/cli/build.rb +26 -27
- data/lib/middleman-core/cli/bundler.rb +6 -7
- data/lib/middleman-core/cli/console.rb +10 -13
- data/lib/middleman-core/cli/extension.rb +2 -4
- data/lib/middleman-core/cli/init.rb +27 -28
- data/lib/middleman-core/cli/server.rb +43 -44
- data/lib/middleman-core/configuration.rb +13 -11
- data/lib/middleman-core/core_extensions/data.rb +21 -29
- data/lib/middleman-core/core_extensions/extensions.rb +8 -8
- data/lib/middleman-core/core_extensions/external_helpers.rb +3 -5
- data/lib/middleman-core/core_extensions/file_watcher.rb +7 -11
- data/lib/middleman-core/core_extensions/front_matter.rb +5 -6
- data/lib/middleman-core/core_extensions/rendering.rb +40 -30
- data/lib/middleman-core/core_extensions/request.rb +16 -19
- data/lib/middleman-core/core_extensions/routing.rb +37 -36
- data/lib/middleman-core/core_extensions/show_exceptions.rb +1 -5
- data/lib/middleman-core/extension.rb +14 -16
- data/lib/middleman-core/extensions.rb +4 -6
- data/lib/middleman-core/load_paths.rb +3 -6
- data/lib/middleman-core/logger.rb +1 -3
- data/lib/middleman-core/meta_pages.rb +11 -11
- data/lib/middleman-core/meta_pages/config_setting.rb +4 -4
- data/lib/middleman-core/meta_pages/sitemap_resource.rb +2 -2
- data/lib/middleman-core/meta_pages/sitemap_tree.rb +4 -4
- data/lib/middleman-core/preview_server.rb +12 -11
- data/lib/middleman-core/profiling.rb +6 -8
- data/lib/middleman-core/renderers/asciidoc.rb +12 -13
- data/lib/middleman-core/renderers/coffee_script.rb +2 -4
- data/lib/middleman-core/renderers/erb.rb +3 -4
- data/lib/middleman-core/renderers/haml.rb +2 -4
- data/lib/middleman-core/renderers/kramdown.rb +3 -4
- data/lib/middleman-core/renderers/less.rb +3 -9
- data/lib/middleman-core/renderers/liquid.rb +4 -8
- data/lib/middleman-core/renderers/markdown.rb +7 -11
- data/lib/middleman-core/renderers/redcarpet.rb +14 -16
- data/lib/middleman-core/renderers/sass.rb +36 -15
- data/lib/middleman-core/renderers/slim.rb +7 -10
- data/lib/middleman-core/renderers/stylus.rb +2 -6
- data/lib/middleman-core/sitemap.rb +6 -13
- data/lib/middleman-core/sitemap/extensions/ignores.rb +4 -10
- data/lib/middleman-core/sitemap/extensions/on_disk.rb +3 -7
- data/lib/middleman-core/sitemap/extensions/proxies.rb +7 -12
- data/lib/middleman-core/sitemap/extensions/redirects.rb +7 -15
- data/lib/middleman-core/sitemap/extensions/request_endpoints.rb +7 -15
- data/lib/middleman-core/sitemap/extensions/traversal.rb +4 -7
- data/lib/middleman-core/sitemap/queryable.rb +22 -27
- data/lib/middleman-core/sitemap/resource.rb +13 -25
- data/lib/middleman-core/sitemap/store.rb +11 -15
- data/lib/middleman-core/templates.rb +9 -12
- data/lib/middleman-core/templates/default.rb +6 -7
- data/lib/middleman-core/templates/empty.rb +0 -1
- data/lib/middleman-core/templates/extension/Gemfile +1 -1
- data/lib/middleman-core/templates/extension/Rakefile +2 -2
- data/lib/middleman-core/templates/extension/lib/lib.rb +0 -1
- data/lib/middleman-core/templates/html5.rb +6 -7
- data/lib/middleman-core/templates/local.rb +1 -2
- data/lib/middleman-core/templates/mobile.rb +3 -4
- data/lib/middleman-core/templates/shared/config.ru +1 -1
- data/lib/middleman-core/util.rb +5 -6
- data/lib/middleman-core/version.rb +1 -1
- data/lib/middleman-more/core_extensions/compass.rb +0 -1
- data/lib/middleman-more/core_extensions/default_helpers.rb +25 -16
- data/lib/middleman-more/core_extensions/i18n.rb +24 -23
- data/lib/middleman-more/extensions/asset_hash.rb +4 -6
- data/lib/middleman-more/extensions/asset_host.rb +1 -1
- data/lib/middleman-more/extensions/automatic_alt_tags.rb +2 -3
- data/lib/middleman-more/extensions/automatic_image_sizes.rb +4 -5
- data/lib/middleman-more/extensions/cache_buster.rb +0 -1
- data/lib/middleman-more/extensions/gzip.rb +1 -1
- data/lib/middleman-more/extensions/lorem.rb +8 -8
- data/lib/middleman-more/extensions/minify_css.rb +9 -8
- data/lib/middleman-more/extensions/minify_javascript.rb +5 -6
- data/lib/middleman-more/extensions/relative_assets.rb +0 -1
- data/lib/middleman-more/templates/smacss.rb +6 -7
- data/middleman-core.gemspec +1 -1
- metadata +5 -5
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
# CLI Module
|
|
2
2
|
module Middleman::Cli
|
|
3
|
-
|
|
4
3
|
# Server thor task
|
|
5
4
|
class Server < Thor
|
|
6
5
|
check_unknown_options!
|
|
@@ -9,54 +8,54 @@ module Middleman::Cli
|
|
|
9
8
|
|
|
10
9
|
desc 'server [options]', 'Start the preview server'
|
|
11
10
|
method_option :environment,
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
11
|
+
aliases: '-e',
|
|
12
|
+
default: ENV['MM_ENV'] || ENV['RACK_ENV'] || 'development',
|
|
13
|
+
desc: 'The environment Middleman will run under'
|
|
15
14
|
method_option :host,
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
15
|
+
type: :string,
|
|
16
|
+
aliases: '-h',
|
|
17
|
+
default: '0.0.0.0',
|
|
18
|
+
desc: 'Bind to HOST address'
|
|
20
19
|
method_option :port,
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
20
|
+
aliases: '-p',
|
|
21
|
+
default: '4567',
|
|
22
|
+
desc: 'The port Middleman will listen on'
|
|
24
23
|
method_option :verbose,
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
24
|
+
type: :boolean,
|
|
25
|
+
default: false,
|
|
26
|
+
desc: 'Print debug messages'
|
|
28
27
|
method_option :instrument,
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
28
|
+
type: :string,
|
|
29
|
+
default: false,
|
|
30
|
+
desc: 'Print instrument messages'
|
|
32
31
|
method_option :disable_watcher,
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
32
|
+
type: :boolean,
|
|
33
|
+
default: false,
|
|
34
|
+
desc: 'Disable the file change and delete watcher process'
|
|
36
35
|
method_option :profile,
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
36
|
+
type: :boolean,
|
|
37
|
+
default: false,
|
|
38
|
+
desc: 'Generate profiling report for server startup'
|
|
40
39
|
method_option :reload_paths,
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
40
|
+
type: :string,
|
|
41
|
+
default: false,
|
|
42
|
+
desc: 'Additional paths to auto-reload when files change'
|
|
44
43
|
method_option :force_polling,
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
44
|
+
type: :boolean,
|
|
45
|
+
default: false,
|
|
46
|
+
desc: 'Force file watcher into polling mode'
|
|
48
47
|
method_option :latency,
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
48
|
+
type: :numeric,
|
|
49
|
+
aliases: '-l',
|
|
50
|
+
default: 0.25,
|
|
51
|
+
desc: 'Set file watcher latency, in seconds'
|
|
53
52
|
|
|
54
53
|
# Start the server
|
|
55
54
|
def server
|
|
56
55
|
require 'middleman-core'
|
|
57
56
|
require 'middleman-core/preview_server'
|
|
58
57
|
|
|
59
|
-
|
|
58
|
+
unless ENV['MM_ROOT']
|
|
60
59
|
puts '== Could not find a Middleman project config.rb'
|
|
61
60
|
puts '== Treating directory as a static site to be served'
|
|
62
61
|
ENV['MM_ROOT'] = Dir.pwd
|
|
@@ -64,15 +63,15 @@ module Middleman::Cli
|
|
|
64
63
|
end
|
|
65
64
|
|
|
66
65
|
params = {
|
|
67
|
-
:
|
|
68
|
-
:
|
|
69
|
-
:
|
|
70
|
-
:
|
|
71
|
-
:
|
|
72
|
-
:
|
|
73
|
-
:
|
|
74
|
-
:
|
|
75
|
-
:
|
|
66
|
+
port: options['port'],
|
|
67
|
+
host: options['host'],
|
|
68
|
+
environment: options['environment'],
|
|
69
|
+
debug: options['verbose'],
|
|
70
|
+
instrumenting: options['instrument'],
|
|
71
|
+
disable_watcher: options['disable_watcher'],
|
|
72
|
+
reload_paths: options['reload_paths'],
|
|
73
|
+
force_polling: options['force_polling'],
|
|
74
|
+
latency: options['latency']
|
|
76
75
|
}
|
|
77
76
|
|
|
78
77
|
puts '== The Middleman is loading'
|
|
@@ -85,5 +84,5 @@ module Middleman::Cli
|
|
|
85
84
|
end
|
|
86
85
|
|
|
87
86
|
# Map "s" to "server"
|
|
88
|
-
Base.map(
|
|
87
|
+
Base.map('s' => 'server')
|
|
89
88
|
end
|
|
@@ -39,7 +39,7 @@ module Middleman
|
|
|
39
39
|
end
|
|
40
40
|
|
|
41
41
|
# Needed so that method_missing makes sense
|
|
42
|
-
def respond_to?(method, include_private
|
|
42
|
+
def respond_to?(method, include_private=false)
|
|
43
43
|
super || config.defines_setting?(method)
|
|
44
44
|
end
|
|
45
45
|
end
|
|
@@ -53,7 +53,7 @@ module Middleman
|
|
|
53
53
|
# @deprecated Prefer accessing settings through "config".
|
|
54
54
|
#
|
|
55
55
|
# @return [ConfigurationManager]
|
|
56
|
-
|
|
56
|
+
alias_method :settings, :config
|
|
57
57
|
|
|
58
58
|
# Set attributes (global variables)
|
|
59
59
|
#
|
|
@@ -80,7 +80,7 @@ module Middleman
|
|
|
80
80
|
end
|
|
81
81
|
|
|
82
82
|
# Needed so that method_missing makes sense
|
|
83
|
-
def respond_to?(method, include_private
|
|
83
|
+
def respond_to?(method, include_private=false)
|
|
84
84
|
super || config.defines_setting?(method)
|
|
85
85
|
end
|
|
86
86
|
end
|
|
@@ -111,16 +111,17 @@ module Middleman
|
|
|
111
111
|
# Get the value of a setting by key. Returns nil if there is no such setting.
|
|
112
112
|
# @return [Object]
|
|
113
113
|
def [](key)
|
|
114
|
-
|
|
115
|
-
|
|
114
|
+
setting_obj = setting(key)
|
|
115
|
+
setting_obj ? setting_obj.value : nil
|
|
116
116
|
end
|
|
117
117
|
|
|
118
118
|
# Set the value of a setting by key. Creates the setting if it doesn't exist.
|
|
119
119
|
# @param [Symbol] key
|
|
120
120
|
# @param [Object] val
|
|
121
|
+
# rubocop:disable UselessSetterCall
|
|
121
122
|
def []=(key, val)
|
|
122
|
-
|
|
123
|
-
|
|
123
|
+
setting_obj = setting(key) || define_setting(key)
|
|
124
|
+
setting_obj.value = val
|
|
124
125
|
end
|
|
125
126
|
|
|
126
127
|
# Allow configuration settings to be read and written via methods
|
|
@@ -135,7 +136,7 @@ module Middleman
|
|
|
135
136
|
end
|
|
136
137
|
|
|
137
138
|
# Needed so that method_missing makes sense
|
|
138
|
-
def respond_to?(method, include_private
|
|
139
|
+
def respond_to?(method, include_private=false)
|
|
139
140
|
super || defines_setting?(method) || (method =~ /^(\w+)=$/ && defines_setting?($1))
|
|
140
141
|
end
|
|
141
142
|
|
|
@@ -143,7 +144,7 @@ module Middleman
|
|
|
143
144
|
# @param [Symbol] key
|
|
144
145
|
# @return [Boolean]
|
|
145
146
|
def defines_setting?(key)
|
|
146
|
-
@settings.
|
|
147
|
+
@settings.key?(key)
|
|
147
148
|
end
|
|
148
149
|
|
|
149
150
|
# Define a new setting, with optional default and user-friendly description.
|
|
@@ -155,7 +156,7 @@ module Middleman
|
|
|
155
156
|
# @return [ConfigSetting]
|
|
156
157
|
def define_setting(key, default=nil, description=nil)
|
|
157
158
|
raise "Setting #{key} doesn't exist" if @finalized
|
|
158
|
-
raise "Setting #{key} already defined" if @settings.
|
|
159
|
+
raise "Setting #{key} already defined" if @settings.key?(key)
|
|
159
160
|
raise 'Setting key must be a Symbol' unless key.is_a? Symbol
|
|
160
161
|
|
|
161
162
|
@settings[key] = ConfigSetting.new(key, default, description)
|
|
@@ -170,7 +171,7 @@ module Middleman
|
|
|
170
171
|
|
|
171
172
|
# Deep duplicate of the configuration manager
|
|
172
173
|
def dup
|
|
173
|
-
ConfigurationManager.new.tap {|c| c.load_settings(
|
|
174
|
+
ConfigurationManager.new.tap { |c| c.load_settings(all_settings) }
|
|
174
175
|
end
|
|
175
176
|
|
|
176
177
|
# Load in a list of settings
|
|
@@ -227,6 +228,7 @@ module Middleman
|
|
|
227
228
|
end
|
|
228
229
|
|
|
229
230
|
# Whether or not there has been a value set beyond the default
|
|
231
|
+
# rubocop:disable TrivialAccessors
|
|
230
232
|
def value_set?
|
|
231
233
|
@value_set
|
|
232
234
|
end
|
|
@@ -1,10 +1,8 @@
|
|
|
1
1
|
module Middleman
|
|
2
2
|
module CoreExtensions
|
|
3
|
-
|
|
4
3
|
# The data extension parses YAML and JSON files in the data/ directory
|
|
5
4
|
# and makes them available to config.rb, templates and extensions
|
|
6
5
|
module Data
|
|
7
|
-
|
|
8
6
|
# Extension registered
|
|
9
7
|
class << self
|
|
10
8
|
# @private
|
|
@@ -16,7 +14,7 @@ module Middleman
|
|
|
16
14
|
app.config.define_setting :data_dir, 'data', 'The directory data files are stored in'
|
|
17
15
|
app.send :include, InstanceMethods
|
|
18
16
|
end
|
|
19
|
-
|
|
17
|
+
alias_method :included, :registered
|
|
20
18
|
end
|
|
21
19
|
|
|
22
20
|
# Instance methods
|
|
@@ -24,12 +22,12 @@ module Middleman
|
|
|
24
22
|
# Setup data files before anything else so they are available when
|
|
25
23
|
# parsing config.rb
|
|
26
24
|
def initialize
|
|
27
|
-
|
|
28
|
-
|
|
25
|
+
files.changed DataStore.matcher do |file|
|
|
26
|
+
data.touch_file(file) if file.start_with?("#{config[:data_dir]}/")
|
|
29
27
|
end
|
|
30
28
|
|
|
31
|
-
|
|
32
|
-
|
|
29
|
+
files.deleted DataStore.matcher do |file|
|
|
30
|
+
data.remove_file(file) if file.start_with?("#{config[:data_dir]}/")
|
|
33
31
|
end
|
|
34
32
|
|
|
35
33
|
super
|
|
@@ -45,10 +43,8 @@ module Middleman
|
|
|
45
43
|
|
|
46
44
|
# The core logic behind the data extension.
|
|
47
45
|
class DataStore
|
|
48
|
-
|
|
49
46
|
# Static methods
|
|
50
47
|
class << self
|
|
51
|
-
|
|
52
48
|
# The regex which tells Middleman which files are for data
|
|
53
49
|
#
|
|
54
50
|
# @return [Regexp]
|
|
@@ -137,7 +133,7 @@ module Middleman
|
|
|
137
133
|
data_branch = data_branch[dir]
|
|
138
134
|
end
|
|
139
135
|
|
|
140
|
-
data_branch.delete(basename) if data_branch.
|
|
136
|
+
data_branch.delete(basename) if data_branch.key?(basename)
|
|
141
137
|
end
|
|
142
138
|
|
|
143
139
|
# Get a hash from either internal static data or a callback
|
|
@@ -147,13 +143,10 @@ module Middleman
|
|
|
147
143
|
def data_for_path(path)
|
|
148
144
|
response = nil
|
|
149
145
|
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
response = self.store[path.to_s]
|
|
155
|
-
elsif self.callbacks.has_key?(path.to_s)
|
|
156
|
-
response = self.callbacks[path.to_s].call()
|
|
146
|
+
if store.key?(path.to_s)
|
|
147
|
+
response = store[path.to_s]
|
|
148
|
+
elsif callbacks.key?(path.to_s)
|
|
149
|
+
response = callbacks[path.to_s].call
|
|
157
150
|
end
|
|
158
151
|
|
|
159
152
|
response
|
|
@@ -164,22 +157,19 @@ module Middleman
|
|
|
164
157
|
# @param [String] path The namespace to search for
|
|
165
158
|
# @return [Hash, nil]
|
|
166
159
|
def method_missing(path)
|
|
167
|
-
if @local_data.
|
|
160
|
+
if @local_data.key?(path.to_s)
|
|
168
161
|
return @local_data[path.to_s]
|
|
169
162
|
else
|
|
170
163
|
result = data_for_path(path)
|
|
171
|
-
|
|
172
|
-
if result
|
|
173
|
-
return ::Middleman::Util.recursively_enhance(result)
|
|
174
|
-
end
|
|
164
|
+
return ::Middleman::Util.recursively_enhance(result) if result
|
|
175
165
|
end
|
|
176
166
|
|
|
177
167
|
super
|
|
178
168
|
end
|
|
179
169
|
|
|
180
170
|
# Needed so that method_missing makes sense
|
|
181
|
-
def respond_to?(method, include_private
|
|
182
|
-
super ||
|
|
171
|
+
def respond_to?(method, include_private=false)
|
|
172
|
+
super || key?(method)
|
|
183
173
|
end
|
|
184
174
|
|
|
185
175
|
# Make DataStore act like a hash. Return requested data, or
|
|
@@ -188,24 +178,26 @@ module Middleman
|
|
|
188
178
|
# @param [String, Symbol] key The name of the data namespace
|
|
189
179
|
# @return [Hash, nil]
|
|
190
180
|
def [](key)
|
|
191
|
-
__send__(key) if
|
|
181
|
+
__send__(key) if key?(key)
|
|
192
182
|
end
|
|
193
183
|
|
|
194
|
-
def
|
|
195
|
-
@local_data.
|
|
184
|
+
def key?(key)
|
|
185
|
+
@local_data.key?(key.to_s) || data_for_path(key)
|
|
196
186
|
end
|
|
197
187
|
|
|
188
|
+
alias_method :has_key?, :key?
|
|
189
|
+
|
|
198
190
|
# Convert all the data into a static hash
|
|
199
191
|
#
|
|
200
192
|
# @return [Hash]
|
|
201
193
|
def to_h
|
|
202
194
|
data = {}
|
|
203
195
|
|
|
204
|
-
|
|
196
|
+
store.each do |k, _|
|
|
205
197
|
data[k] = data_for_path(k)
|
|
206
198
|
end
|
|
207
199
|
|
|
208
|
-
|
|
200
|
+
callbacks.each do |k, _|
|
|
209
201
|
data[k] = data_for_path(k)
|
|
210
202
|
end
|
|
211
203
|
|
|
@@ -32,7 +32,6 @@
|
|
|
32
32
|
module Middleman
|
|
33
33
|
module CoreExtensions
|
|
34
34
|
module Extensions
|
|
35
|
-
|
|
36
35
|
# Register extension
|
|
37
36
|
class << self
|
|
38
37
|
# @private
|
|
@@ -49,9 +48,9 @@ module Middleman
|
|
|
49
48
|
|
|
50
49
|
app.extend ClassMethods
|
|
51
50
|
app.send :include, InstanceMethods
|
|
52
|
-
app.delegate :configure, :
|
|
51
|
+
app.delegate :configure, to: :"self.class"
|
|
53
52
|
end
|
|
54
|
-
|
|
53
|
+
alias_method :included, :registered
|
|
55
54
|
end
|
|
56
55
|
|
|
57
56
|
# Class methods
|
|
@@ -75,7 +74,7 @@ module Middleman
|
|
|
75
74
|
else
|
|
76
75
|
extend extension
|
|
77
76
|
if extension.respond_to?(:registered)
|
|
78
|
-
if extension.method(:registered).arity
|
|
77
|
+
if extension.method(:registered).arity == 1
|
|
79
78
|
extension.registered(self, &block)
|
|
80
79
|
else
|
|
81
80
|
extension.registered(self, options, &block)
|
|
@@ -96,6 +95,7 @@ module Middleman
|
|
|
96
95
|
#
|
|
97
96
|
# @param [Symbol, Module] ext Which extension to activate
|
|
98
97
|
# @return [void]
|
|
98
|
+
# rubocop:disable BlockNesting
|
|
99
99
|
def activate(ext, options={}, &block)
|
|
100
100
|
ext_module = if ext.is_a?(Module)
|
|
101
101
|
ext
|
|
@@ -157,7 +157,7 @@ module Middleman
|
|
|
157
157
|
|
|
158
158
|
# Check for and evaluate local configuration
|
|
159
159
|
local_config = File.join(root, 'config.rb')
|
|
160
|
-
if File.
|
|
160
|
+
if File.exist? local_config
|
|
161
161
|
logger.debug '== Reading: Local config'
|
|
162
162
|
instance_eval File.read(local_config), local_config, 1
|
|
163
163
|
end
|
|
@@ -172,16 +172,16 @@ module Middleman
|
|
|
172
172
|
# polluted with paths from other test app directories that don't
|
|
173
173
|
# exist anymore.
|
|
174
174
|
if ENV['TEST']
|
|
175
|
-
::I18n.load_path.delete_if {|path| path =~ %r{tmp/aruba}}
|
|
175
|
+
::I18n.load_path.delete_if { |path| path =~ %r{tmp/aruba} }
|
|
176
176
|
::I18n.reload!
|
|
177
177
|
end
|
|
178
178
|
|
|
179
179
|
run_hook :after_configuration
|
|
180
180
|
|
|
181
181
|
logger.debug 'Loaded extensions:'
|
|
182
|
-
|
|
182
|
+
extensions.each do |ext, klass|
|
|
183
183
|
if ext.is_a?(Hash)
|
|
184
|
-
ext.each do |k,_|
|
|
184
|
+
ext.each do |k, _|
|
|
185
185
|
logger.debug "== Extension: #{k}"
|
|
186
186
|
end
|
|
187
187
|
else
|
|
@@ -2,16 +2,14 @@
|
|
|
2
2
|
module Middleman
|
|
3
3
|
module CoreExtensions
|
|
4
4
|
module ExternalHelpers
|
|
5
|
-
|
|
6
5
|
# Setup extension
|
|
7
6
|
class << self
|
|
8
|
-
|
|
9
7
|
# once registered
|
|
10
8
|
def registered(app)
|
|
11
9
|
# Setup a default helpers paths
|
|
12
10
|
app.config.define_setting :helpers_dir, 'helpers', 'Directory to autoload helper modules from'
|
|
13
11
|
app.config.define_setting :helpers_filename_glob, '**.rb', 'Glob pattern for matching helper ruby files'
|
|
14
|
-
app.config.define_setting :helpers_filename_to_module_name_proc,
|
|
12
|
+
app.config.define_setting :helpers_filename_to_module_name_proc, proc { |filename|
|
|
15
13
|
basename = File.basename(filename, File.extname(filename))
|
|
16
14
|
basename.camelcase
|
|
17
15
|
}, 'Proc implementing the conversion from helper filename to module name'
|
|
@@ -19,7 +17,7 @@ module Middleman
|
|
|
19
17
|
# After config
|
|
20
18
|
app.after_configuration do
|
|
21
19
|
helpers_path = File.join(root, config[:helpers_dir])
|
|
22
|
-
next unless File.
|
|
20
|
+
next unless File.exist?(helpers_path)
|
|
23
21
|
|
|
24
22
|
Dir[File.join(helpers_path, config[:helpers_filename_glob])].each do |filename|
|
|
25
23
|
module_name = config[:helpers_filename_to_module_name_proc].call(filename)
|
|
@@ -32,7 +30,7 @@ module Middleman
|
|
|
32
30
|
end
|
|
33
31
|
end
|
|
34
32
|
end
|
|
35
|
-
|
|
33
|
+
alias_method :included, :registered
|
|
36
34
|
end
|
|
37
35
|
end
|
|
38
36
|
end
|
|
@@ -5,7 +5,6 @@ require 'set'
|
|
|
5
5
|
module Middleman
|
|
6
6
|
module CoreExtensions
|
|
7
7
|
module FileWatcher
|
|
8
|
-
|
|
9
8
|
IGNORE_LIST = [
|
|
10
9
|
/^bin(\/|$)/,
|
|
11
10
|
/^\.bundle(\/|$)/,
|
|
@@ -26,7 +25,6 @@ module Middleman
|
|
|
26
25
|
|
|
27
26
|
# Setup extension
|
|
28
27
|
class << self
|
|
29
|
-
|
|
30
28
|
# Once registered
|
|
31
29
|
def registered(app)
|
|
32
30
|
app.send :include, InstanceMethods
|
|
@@ -47,12 +45,11 @@ module Middleman
|
|
|
47
45
|
files.reload_path('.')
|
|
48
46
|
end
|
|
49
47
|
end
|
|
50
|
-
|
|
48
|
+
alias_method :included, :registered
|
|
51
49
|
end
|
|
52
50
|
|
|
53
51
|
# Instance methods
|
|
54
52
|
module InstanceMethods
|
|
55
|
-
|
|
56
53
|
# Access the file api
|
|
57
54
|
# @return [Middleman::CoreExtensions::FileWatcher::API]
|
|
58
55
|
def files
|
|
@@ -62,10 +59,9 @@ module Middleman
|
|
|
62
59
|
|
|
63
60
|
# Core File Change API class
|
|
64
61
|
class API
|
|
65
|
-
|
|
66
62
|
attr_reader :app
|
|
67
63
|
attr_reader :known_paths
|
|
68
|
-
delegate :logger, :
|
|
64
|
+
delegate :logger, to: :app
|
|
69
65
|
|
|
70
66
|
# Initialize api and internal path cache
|
|
71
67
|
def initialize(app)
|
|
@@ -102,7 +98,7 @@ module Middleman
|
|
|
102
98
|
path = Pathname(path)
|
|
103
99
|
logger.debug "== File Change: #{path}"
|
|
104
100
|
@known_paths << path
|
|
105
|
-
|
|
101
|
+
run_callbacks(path, :changed)
|
|
106
102
|
end
|
|
107
103
|
|
|
108
104
|
# Notify callbacks that a file was deleted
|
|
@@ -113,7 +109,7 @@ module Middleman
|
|
|
113
109
|
path = Pathname(path)
|
|
114
110
|
logger.debug "== File Deletion: #{path}"
|
|
115
111
|
@known_paths.delete(path)
|
|
116
|
-
|
|
112
|
+
run_callbacks(path, :deleted)
|
|
117
113
|
end
|
|
118
114
|
|
|
119
115
|
# Manually trigger update events
|
|
@@ -151,7 +147,7 @@ module Middleman
|
|
|
151
147
|
|
|
152
148
|
def exists?(path)
|
|
153
149
|
p = Pathname(path)
|
|
154
|
-
p = p.relative_path_from(Pathname(@app.root))
|
|
150
|
+
p = p.relative_path_from(Pathname(@app.root)) unless p.relative?
|
|
155
151
|
@known_paths.include?(p)
|
|
156
152
|
end
|
|
157
153
|
|
|
@@ -163,7 +159,7 @@ module Middleman
|
|
|
163
159
|
app.config[:file_watcher_ignore].any? { |r| path =~ r }
|
|
164
160
|
end
|
|
165
161
|
|
|
166
|
-
|
|
162
|
+
protected
|
|
167
163
|
|
|
168
164
|
# Notify callbacks for a file given an array of callbacks
|
|
169
165
|
#
|
|
@@ -172,7 +168,7 @@ module Middleman
|
|
|
172
168
|
# @return [void]
|
|
173
169
|
def run_callbacks(path, callbacks_name)
|
|
174
170
|
path = path.to_s
|
|
175
|
-
|
|
171
|
+
send(callbacks_name).each do |callback, matcher|
|
|
176
172
|
next unless matcher.nil? || path.match(matcher)
|
|
177
173
|
@app.instance_exec(path, &callback)
|
|
178
174
|
end
|