[rspec-users] How to spec an attachment_fu model

Justin W. Reagor justinwr at gmail.com
Wed Aug 22 12:55:11 EDT 2007


I just got finished working with attachment_fu, and ended up modeling  
a plugin for my company since attachment_fu was slight over kill for  
our needs.

Have you opened up attachment_fu's source? upload_data is just  a  
method (so is upload_data=) which is inserted into a model that calls  
has_attachment. I have yet to spec my plugin so I'm interested to see  
what your results are.

Thanks,
:: Justin Reagor
:: justinwr at gmail.com



On Aug 22, 2007, at 12:46 PM, Matt Lins wrote:

> Sorry, attachment_fu is a plugin for handling binary data. It  
> handles storing the file in the file system and storing some  
> helpful data in the database about the file.
>
> The previous code is from the attachment_fu  plugin(no, I didn't  
> modify it). This property needs to be satisfied in order for the  
> model to validate. So I need to get my model to validate in the  
> spec so I can actually test other parts of my model. Here is my model:
>
> class Picture < ActiveRecord::Base
>
>   has_and_belongs_to_many :products
>
>   has_attachment :content_type => 'image/jpeg',
>                  :storage => :file_system,
>                  :max_size => 3.megabytes,
>                  :resize_to => '400x400>',
>                  :thumbnails => {:medium => '200x200>', :small =>  
> '100x100>'},
>                  :path_prefix => 'images/products'
>
>   validates_as_attachment
>
>   validates_uniqueness_of :filename
>   validates_presence_of :filename
>
>   def before_update
>     self.thumbnails.each do |t|
>       t.filename= thumbnail_name_for(t.thumbnail)
>       t.save
>     end
>   end
>
>   def full_filename(thumbnail = nil)
>     file_system_path = (thumbnail ? thumbnail_class :  
> self).attachment_options[:path_prefix].to_s
>     File.join(RAILS_ROOT, 'public/external', file_system_path,  
> thumbnail_name_for(thumbnail) + '.jpg')
>   end
>
>   def public_image
>     self.public_filename
>   end
>
> end
>
> aslak hellesoy wrote:
>> On 8/22/07, Matt Lins <mlins at webinforem.com> wrote:
>>
>>>  First off, I'm not trying to spec attachment_fu, I know it's  
>>> been tested.
>>>
>>>  But, I added some code to that model that I do need to test.  
>>> Basically, I
>>> need to somehow fulfill the "uploaded_data" property so I can  
>>> actually run
>>> my tests(otherwise they fail because of validations). The  
>>> "uploaded_data"
>>> field is what would grab the multipart data from form.  Here it is:
>>>
>>>        # This method handles the uploaded file object.  If you  
>>> set the field
>>> name to uploaded_data, you don't need
>>>        # any special code in your controller.
>>>        #
>>>        #   <% form_for :attachment, :html => { :multipart =>  
>>> true } do |f|
>>> -%>
>>>        #     <p><%= f.file_field :uploaded_data %></p>
>>>        #     <p><%= submit_tag :Save %>
>>>        #   <% end -%>
>>>        #
>>>        #   @attachment = Attachment.create! params[:attachment]
>>>        #
>>>        # TODO: Allow it to work with Merb tempfiles too.
>>>        def uploaded_data=(file_data)
>>>          return nil if file_data.nil? || file_data.size == 0
>>>          self.content_type = file_data.content_type
>>>          self.filename     = file_data.original_filename if
>>> respond_to?(:filename)
>>>          if file_data.is_a?(StringIO)
>>>            file_data.rewind
>>>            self.temp_data = file_data.read
>>>          else
>>>            self.temp_path = file_data.path
>>>          end
>>>        end
>>>
>>>
>> I'm not familiar with attachment_fu - is this code from attachment_fu
>> that you have modified? Or is it your code entirely? Attachment_fu's
>> entirely? Where does this code come from?
>>
>> Aslak
>>
>>
>>>  While I was digging I found out that "file_data" is a ruby  
>>> Tempfile object.
>>> So, I tried to create a dummy file and pass it, but it failed. I  
>>> found out
>>> in the CGI library, it actually extends the Tempfile object and  
>>> adds some
>>> methods/properties. It started to get messy, so I thought I'd ask  
>>> for
>>> advice.
>>>
>>>  How can I create a valid attachment_fu model spec(so I can start  
>>> tweaking
>>> it to test my other validations)?
>>>
>>> _______________________________________________
>>> rspec-users mailing list
>>> rspec-users at rubyforge.org
>>> http://rubyforge.org/mailman/listinfo/rspec-users
>>>
>>>
>> _______________________________________________
>> rspec-users mailing list
>> rspec-users at rubyforge.org
>> http://rubyforge.org/mailman/listinfo/rspec-users
>>
> _______________________________________________
> rspec-users mailing list
> rspec-users at rubyforge.org
> http://rubyforge.org/mailman/listinfo/rspec-users

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://rubyforge.org/pipermail/rspec-users/attachments/20070822/6ddf27a6/attachment.html 


More information about the rspec-users mailing list