Module: Nozzle::Adapter
- Included in:
- DataMapper
- Defined in:
- lib/nozzle/adapter.rb,
lib/nozzle/adapter/base.rb,
lib/nozzle/adapter/image.rb,
lib/nozzle/adapter/outlet.rb
Defined Under Namespace
Modules: Outlet Classes: Base, Image
Instance Method Summary collapse
-
#adapter_classes ⇒ Object
:nodoc:.
-
#adapter_options ⇒ Object
:nodoc:.
-
#install_adapter(column, adapter = nil, options = {}) ⇒ Object
Installs default or custom adapter to a class.
Instance Method Details
#adapter_classes ⇒ Object
:nodoc:
67 68 69 |
# File 'lib/nozzle/adapter.rb', line 67 def adapter_classes # :nodoc: @adapter_classes ||= {} end |
#adapter_options ⇒ Object
:nodoc:
71 72 73 |
# File 'lib/nozzle/adapter.rb', line 71 def # :nodoc: ||= {} end |
#install_adapter(column, adapter = nil, options = {}) ⇒ Object
Installs default or custom adapter to a class.
class Example
attr_accessor :file, :avatar, :thumb
include Nozzle::Adapter
install_adapter( :file )
install_adapter( :avatar, CustomAdapter )
install_adapter( :thumb, Nozzle::Adapter::Image, :thumb_size => '90x60' )
def save
file_after_save; avatar_after_save; thumb_after_save
end
def destroy
file_after_destroy; avatar_after_destroy; thumb_after_destroy
end
enc
The class MUST have readers and writers to install corresponding adapters. install_adapter overrides these methods and saves the originals in original_avatar and original_avatar= aliases. The originals are called to save and load the filename of stored asset.
The class MUST call avatar_after_save and avatar_after_destroy after the corresponding events. avatar_after_save does some IO to move or copy temporary file. avatar_after_destroy deletes the stored file.
Note: options are only supported when adapter is specified.
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
# File 'lib/nozzle/adapter.rb', line 31 def install_adapter( column, adapter = nil, = {} ) attr_accessor :"#{column}_adapter" adapter_classes[column] = adapter || Base [column] = class_eval " unless instance_methods.map(&:to_s).include?('original_\#{column}')\n alias_method :original_\#{column}, :\#{column}\n alias_method :original_\#{column}=, :\#{column}=\n end\n\n def \#{column}_adapter\n @\#{column}_adapter ||= self.class.adapter_classes[:\#{column}].new( \n self, :\#{column}, nil, self.class.adapter_options[:\#{column}] ) \n end\n\n def \#{column}\n \#{column}_adapter.load send( :original_\#{column} )\n end\n\n def \#{column}=(value)\n send( :original_\#{column}=, \#{column}_adapter.dump(value) )\n end\n\n def \#{column}_after_save\n \#{column}_adapter.store!\n end\n\n def \#{column}_after_destroy\n \#{column}\n \#{column}_adapter.cleanup!\n \#{column}_adapter.unlink!\n end\n RUBY\nend\n", __FILE__, __LINE__+1 |