Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 7 additions & 6 deletions lib/proxy/pluggable.rb
Original file line number Diff line number Diff line change
Expand Up @@ -42,16 +42,17 @@ def initialize_after(*module_names)
raise "#{plugin_name}: 'initialize_after' method has been removed."
end

def validate_readable(*settings)
validate(*settings.push(:file_readable => true))
def validate_readable(*settings, **validator_params)
validator_params[:file_readable] = true
validate(*settings, **validator_params)
end

def validate_presence(*settings)
validate(*settings.push(:presence => true))
def validate_presence(*settings, **validator_params)
validator_params[:presence] = true
validate(*settings, **validator_params)
end

def validate(*settings)
validator_params = settings.pop
def validate(*settings, **validator_params)
predicate = validator_params.delete(:if)
validator_name = validator_params.keys.first
validator_args = validator_params[validator_name]
Expand Down
15 changes: 15 additions & 0 deletions test/plugins/module_loader_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,21 @@ def test_presence_validators_called_on_each_of_default_settings
assert results.include?(:class => ::Proxy::PluginValidators::Presence, :setting => :default_2, :args => nil, :predicate => nil)
end

VALIDATOR_PREDICATE = ->(settings) { false }
class TestPluginWithBuiltInValidators < ::Proxy::Plugin
default_settings :default_1 => "one", :default_2 => "two"
validate_presence :missing_setting, if: VALIDATOR_PREDICATE
validate_readable :missing_path, if: VALIDATOR_PREDICATE
end
def test_presence_validator_called_with_predicate
loader = ::Proxy::DefaultModuleLoader.new(TestPluginWithBuiltInValidators, nil)
results = loader.validate_settings(TestPluginWithBuiltInValidators, :default_1 => "one", :default_2 => "two")
assert_includes results, {:class => ::Proxy::PluginValidators::Presence, :setting => :default_1, :args => nil, :predicate => nil}
assert_includes results, {:class => ::Proxy::PluginValidators::Presence, :setting => :default_2, :args => nil, :predicate => nil}
assert_includes results, {:class => ::Proxy::PluginValidators::Presence, :setting => :missing_setting, :args => true, :predicate => VALIDATOR_PREDICATE}
assert_includes results, {:class => ::Proxy::PluginValidators::FileReadable, :setting => :missing_path, :args => true, :predicate => VALIDATOR_PREDICATE}
end

class TestValidator < ::Proxy::PluginValidators::Base
def validate!(settings)
true
Expand Down