From c3fd4d6a3912d0f12ac467c48ac542b6b5fce6d2 Mon Sep 17 00:00:00 2001 From: Jon Yurek Date: Thu, 25 Jul 2013 14:38:09 -0400 Subject: [PATCH] Reintroduce attachment_definitions --- lib/paperclip/has_attached_file.rb | 23 ++++++++++++++++++----- test/has_attached_file_test.rb | 18 +++++++++++++++++- 2 files changed, 35 insertions(+), 6 deletions(-) diff --git a/lib/paperclip/has_attached_file.rb b/lib/paperclip/has_attached_file.rb index 1a79146b4..ca53a18b4 100644 --- a/lib/paperclip/has_attached_file.rb +++ b/lib/paperclip/has_attached_file.rb @@ -12,7 +12,7 @@ def initialize(klass, name, options) def define define_flush_errors - define_getter + define_getters define_setter define_query register_new_attachment @@ -29,7 +29,12 @@ def define_flush_errors end end - def define_getter + def define_getters + define_instance_getter + define_class_getter + end + + def define_instance_getter name = @name options = @options @@ -50,9 +55,12 @@ def define_getter end end + def define_class_getter + @klass.extend(ClassMethods) + end + def define_setter name = @name - @klass.send :define_method, "#{@name}=" do |file| send(name).assign(file) end @@ -60,14 +68,13 @@ def define_setter def define_query name = @name - @klass.send :define_method, "#{@name}?" do send(name).file? end end def register_new_attachment - Paperclip::AttachmentRegistry.register(@klass, @name, @options) + Paperclip::AttachmentRegistry.register(@klass.name, @name, @options) end def add_active_record_callbacks @@ -82,5 +89,11 @@ def add_paperclip_callbacks :define_paperclip_callbacks, :post_process, :"#{@name}_post_process") end + + module ClassMethods + def attachment_definitions + Paperclip::AttachmentRegistry.definitions_for(self.class.name) + end + end end end diff --git a/test/has_attached_file_test.rb b/test/has_attached_file_test.rb index ecd8397f3..4e51f8dd1 100644 --- a/test/has_attached_file_test.rb +++ b/test/has_attached_file_test.rb @@ -15,6 +15,10 @@ class HasAttachedFileTest < Test::Unit::TestCase assert_adding_attachment('avatar').defines_method('avatar?') end + should 'define a method on the class to get all of its attachments' do + assert_adding_attachment('avatar').defines_class_method('attachment_definitions') + end + should 'flush errors as part of validations' do assert_adding_attachment('avatar').defines_validation end @@ -64,6 +68,17 @@ def defines_method(method_name) end end + def defines_class_method(method_name) + a_class = stub_class + a_class.class.stubs(:define_method) + + Paperclip::HasAttachedFile.define_on(a_class, @attachment_name, {}) + + assert_received(a_class, :extend) do |expect| + expect.with(Paperclip::HasAttachedFile::ClassMethods) + end + end + def defines_validation a_class = stub_class @@ -81,7 +96,7 @@ def registers_attachment Paperclip::HasAttachedFile.define_on(a_class, @attachment_name, {size: 1}) assert_received(Paperclip::AttachmentRegistry, :register) do |expect| - expect.with(a_class, @attachment_name, {size: 1}) + expect.with(a_class.name, @attachment_name, {size: 1}) end end @@ -103,6 +118,7 @@ def stub_class before_destroy: nil, after_destroy: nil, define_paperclip_callbacks: nil, + extend: nil, name: 'Billy') end end