Required options for extensions
This commit is contained in:
parent
21c38b707c
commit
5e20fca73e
|
@ -70,13 +70,14 @@ module Middleman
|
|||
# @param [Symbol] key The name of the option
|
||||
# @param [Object] default The default value for the option
|
||||
# @param [String] description A human-readable description of what the option does
|
||||
# @param [Hash] options Additional options.
|
||||
# @return [ConfigSetting]
|
||||
def define_setting(key, default=nil, description=nil)
|
||||
def define_setting(key, default=nil, description=nil, options={})
|
||||
raise "Setting #{key} doesn't exist" if @finalized
|
||||
raise "Setting #{key} already defined" if @settings.key?(key)
|
||||
raise 'Setting key must be a Symbol' unless key.is_a? Symbol
|
||||
|
||||
@settings[key] = ConfigSetting.new(key, default, description)
|
||||
@settings[key] = ConfigSetting.new(key, default, description, options)
|
||||
end
|
||||
|
||||
# Switch the configuration manager is finalized, it switches to read-only
|
||||
|
@ -94,7 +95,7 @@ module Middleman
|
|||
# Load in a list of settings
|
||||
def load_settings(other_settings)
|
||||
other_settings.each do |setting|
|
||||
new_setting = define_setting(setting.key, setting.default, setting.description)
|
||||
new_setting = define_setting(setting.key, setting.default, setting.description, setting.options)
|
||||
new_setting.value = setting.value if setting.value_set?
|
||||
end
|
||||
end
|
||||
|
@ -124,11 +125,15 @@ module Middleman
|
|||
# A human-friendly description of the setting
|
||||
attr_accessor :description
|
||||
|
||||
def initialize(key, default, description)
|
||||
# Additional config.
|
||||
attr_accessor :options
|
||||
|
||||
def initialize(key, default, description, options={})
|
||||
@value_set = false
|
||||
self.key = key
|
||||
self.default = default
|
||||
self.description = description
|
||||
self.options = options
|
||||
end
|
||||
|
||||
# The user-supplied value for this setting, overriding the default
|
||||
|
|
|
@ -106,8 +106,8 @@ module Middleman
|
|||
# @param [Symbol] key The name of the option
|
||||
# @param [Object] default The default value for the option
|
||||
# @param [String] description A human-readable description of what the option does
|
||||
def option(key, default=nil, description=nil)
|
||||
config.define_setting(key, default, description)
|
||||
def option(key, default=nil, description=nil, options={})
|
||||
config.define_setting(key, default, description, options)
|
||||
end
|
||||
|
||||
# Declare helpers to be added the global Middleman application.
|
||||
|
@ -239,6 +239,13 @@ module Middleman
|
|||
end
|
||||
|
||||
yield @options if block_given?
|
||||
|
||||
@options.all_settings.each do |o|
|
||||
next unless o.options[:required] && !o.value_set?
|
||||
|
||||
logger.error "The `:#{o.key}` option of the `#{self.class.ext_name}` extension is required."
|
||||
exit(1)
|
||||
end
|
||||
end
|
||||
|
||||
def bind_before_configuration
|
||||
|
|
|
@ -1,31 +1,19 @@
|
|||
class Middleman::Extensions::ExternalPipeline < ::Middleman::Extension
|
||||
self.supports_multiple_instances = true
|
||||
|
||||
option :name, nil, 'The name of the pipeline'
|
||||
option :command, nil, 'The command to initialize'
|
||||
option :source, nil, 'Path to merge into sitemap'
|
||||
option :name, nil, 'The name of the pipeline', required: true
|
||||
option :command, nil, 'The command to initialize', required: true
|
||||
option :source, nil, 'Path to merge into sitemap', required: true
|
||||
option :latency, 0.25, 'Latency between refreshes of source'
|
||||
|
||||
def initialize(app, config={}, &block)
|
||||
super
|
||||
|
||||
if options[:name].nil?
|
||||
throw "Name is required"
|
||||
end
|
||||
|
||||
if options[:command].nil?
|
||||
throw "Command is required"
|
||||
end
|
||||
|
||||
if options[:source].nil?
|
||||
throw "Source is required"
|
||||
end
|
||||
|
||||
require 'thread'
|
||||
|
||||
app.files.watch :source,
|
||||
path: File.expand_path(options[:source], app.root),
|
||||
latency: options[:latency]
|
||||
path: File.expand_path(options[:source], app.root),
|
||||
latency: options[:latency]
|
||||
end
|
||||
|
||||
def after_configuration
|
||||
|
@ -41,7 +29,7 @@ class Middleman::Extensions::ExternalPipeline < ::Middleman::Extension
|
|||
def watch_command!
|
||||
::IO.popen(options[:command], 'r') do |pipe|
|
||||
while buf = pipe.gets
|
||||
without_newline = buf.sub(/\n$/,'')
|
||||
without_newline = buf.sub(/\n$/, '')
|
||||
logger.info "== External: #{without_newline}" if without_newline.length > 0
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue