From 799d593e920431c6cb3656932dcbe7ce8a202155 Mon Sep 17 00:00:00 2001 From: Mark IJbema Date: Wed, 7 Aug 2013 10:53:59 +0200 Subject: [PATCH] Made Pavlov.old_{stuff} use Pavlov.{stuff} --- CHANGELOG.md | 2 ++ UPGRADING.md | 4 +++ lib/pavlov.rb | 30 ++++++++++++++------ lib/pavlov/alpha_compatibility.rb | 22 ++++++-------- spec/integration/alpha_compatibility_spec.rb | 20 +++++++++++++ 5 files changed, 56 insertions(+), 22 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5ef1ca9..67f0f6d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,8 @@ ## HEAD +Made `Pavlov.old_command`, `old_query` and `old_interactor` use `Pavlov.command`, `Pavlov.query` and `Pavlov.interactor` so you can upgrade expectations in a forward compatible manner. + ## 0.1.4 Added license to gemspec diff --git a/UPGRADING.md b/UPGRADING.md index 167d5e1..08840cb 100644 --- a/UPGRADING.md +++ b/UPGRADING.md @@ -1,3 +1,7 @@ +## HEAD + +* Change your expectations to expect `Pavlov.command` with hash arguments instead of `Pavlov.old_command` with positional arguments. Same for `query` and `interactor` + ## 0.1.4 * If you use validations, you must now either use alpha_compatibility, or copy them to your own codebase. diff --git a/lib/pavlov.rb b/lib/pavlov.rb index 147c883..886bb3e 100644 --- a/lib/pavlov.rb +++ b/lib/pavlov.rb @@ -10,22 +10,36 @@ def self.string_to_classname string end def self.command command_name, *args - class_name = 'Commands::' + string_to_classname(command_name) - klass = get_class_by_string(class_name) + klass = class_for_command(command_name) klass.new(*args).call end - def self.interactor command_name, *args - class_name = 'Interactors::' + string_to_classname(command_name) - klass = get_class_by_string class_name + def self.interactor interactor_name, *args + klass = class_for_interactor(interactor_name) klass.new(*args).call end - def self.query command_name, *args - class_name = 'Queries::' + string_to_classname(command_name) - klass = get_class_by_string class_name + def self.query query_name, *args + klass = class_for_query(query_name) klass.new(*args).call end + + private + + def self.class_for_command command_name + class_name = 'Commands::' + string_to_classname(command_name) + get_class_by_string(class_name) + end + + def self.class_for_interactor interactor_name + class_name = 'Interactors::' + string_to_classname(interactor_name) + get_class_by_string(class_name) + end + + def self.class_for_query query_name + class_name = 'Queries::' + string_to_classname(query_name) + get_class_by_string(class_name) + end end require_relative 'pavlov/engine' if defined?(Rails) diff --git a/lib/pavlov/alpha_compatibility.rb b/lib/pavlov/alpha_compatibility.rb index d694c7d..b4d05e5 100644 --- a/lib/pavlov/alpha_compatibility.rb +++ b/lib/pavlov/alpha_compatibility.rb @@ -2,24 +2,18 @@ module Pavlov def self.old_command command_name, *args - class_name = 'Commands::' + string_to_classname(command_name) - klass = get_class_by_string(class_name) - attributes = arguments_to_attributes(klass, args) - klass.new(attributes).call + klass = class_for_command(command_name) + command command_name, arguments_to_attributes(klass, args) end - def self.old_interactor command_name, *args - class_name = 'Interactors::' + string_to_classname(command_name) - klass = get_class_by_string class_name - attributes = arguments_to_attributes(klass, args) - klass.new(attributes).call + def self.old_interactor interactor_name, *args + klass = class_for_interactor(interactor_name) + interactor interactor_name, arguments_to_attributes(klass, args) end - def self.old_query command_name, *args - class_name = 'Queries::' + string_to_classname(command_name) - klass = get_class_by_string class_name - attributes = arguments_to_attributes(klass, args) - klass.new(attributes).call + def self.old_query query_name, *args + klass = class_for_query(query_name) + query query_name, arguments_to_attributes(klass, args) end def self.arguments_to_attributes(operation_class, arguments) diff --git a/spec/integration/alpha_compatibility_spec.rb b/spec/integration/alpha_compatibility_spec.rb index 9cff5e8..be3dbce 100644 --- a/spec/integration/alpha_compatibility_spec.rb +++ b/spec/integration/alpha_compatibility_spec.rb @@ -65,4 +65,24 @@ def execute expect(old_interactor :shouty_greeting).to eq('OHAI, JOHN') end end + + describe 'old_command style helper' do + before do + stub_const 'Commands::Test', Class.new + class Commands::Test + include Pavlov::Command + + arguments :test_string + def execute + end + end + end + + it 'redirects to regular Pavlov.command etc' do + Pavlov.should_receive(:command) + .with(:test, test_string: 'test') + + old_command :test, 'test' + end + end end