From 0711dc1413da17d6622138faa7b7aafb0818ff24 Mon Sep 17 00:00:00 2001 From: Paul Elliott Date: Sun, 7 Aug 2011 22:07:40 -0400 Subject: [PATCH] Add decorator method to decorated model --- lib/draper.rb | 1 + lib/draper/base.rb | 1 + lib/draper/model_support.rb | 5 +++++ spec/base_spec.rb | 6 ++++++ spec/draper/model_support_spec.rb | 10 ++++++++++ 5 files changed, 23 insertions(+) create mode 100644 lib/draper/model_support.rb create mode 100644 spec/draper/model_support_spec.rb diff --git a/lib/draper.rb b/lib/draper.rb index 2f9b9a6..8e87eab 100644 --- a/lib/draper.rb +++ b/lib/draper.rb @@ -3,5 +3,6 @@ require 'draper/system' require 'draper/all_helpers' require 'draper/base' require 'draper/lazy_helpers' +require 'draper/model_support' Draper::System.setup \ No newline at end of file diff --git a/lib/draper/base.rb b/lib/draper/base.rb index 3e46b88..3a7d93d 100644 --- a/lib/draper/base.rb +++ b/lib/draper/base.rb @@ -21,6 +21,7 @@ module Draper def self.decorates(input) self.model_class = input.to_s.classify.constantize + model_class.send :include, Draper::ModelSupport end def self.denies(*input_denied) diff --git a/lib/draper/model_support.rb b/lib/draper/model_support.rb new file mode 100644 index 0000000..4fb671a --- /dev/null +++ b/lib/draper/model_support.rb @@ -0,0 +1,5 @@ +module Draper::ModelSupport + def decorator + @decorator ||= "#{self.class.name}Decorator".constantize.decorate(self) + end +end diff --git a/spec/base_spec.rb b/spec/base_spec.rb index 61aecfd..adf5cab 100644 --- a/spec/base_spec.rb +++ b/spec/base_spec.rb @@ -56,6 +56,12 @@ describe Draper::Base do end end + context 'the decorated model' do + it 'receives the mixin' do + source.class.ancestors.include?(Draper::ModelSupport) + end + end + it "should wrap source methods so they still accept blocks" do subject.block{"marker"}.should == "marker" end diff --git a/spec/draper/model_support_spec.rb b/spec/draper/model_support_spec.rb new file mode 100644 index 0000000..fb97264 --- /dev/null +++ b/spec/draper/model_support_spec.rb @@ -0,0 +1,10 @@ +require 'spec_helper' + +describe Draper::ModelSupport do + subject { Product.new } + + describe '#decorator' do + its(:decorator) { should be_kind_of(ProductDecorator) } + its(:decorator) { should be(subject.decorator) } + end +end