diff --git a/lib/architect4r/adapters/carrier_wave.rb b/lib/architect4r/adapters/carrier_wave.rb new file mode 100644 index 0000000..e5e395b --- /dev/null +++ b/lib/architect4r/adapters/carrier_wave.rb @@ -0,0 +1,64 @@ +require "architect4r" +require "carrierwave" +require "carrierwave/validations/active_model" + +# In order to use this class include this file in your project +# require 'architect4r/adapters/carrier_wave' +# +module Architect4r + module Adapters + module CarrierWave + # Import default implementation + include ::CarrierWave::Mount + + def mount_uploader(column, uploader = nil, options = {}, &block) + property "#{column}_data", :cast_to => String + + # Init by calling default initializer + super + + # Enable validations + include ::CarrierWave::Validations::ActiveModel + validates_integrity_of column if uploader_option(column.to_sym, :validate_integrity) + validates_processing_of column if uploader_option(column.to_sym, :validate_processing) + + # Add hooks + after_save :"store_#{column}!" + before_save :"write_#{column}_identifier" + after_destroy :"remove_#{column}!" + + # These hooks cannot be used until dirty tracking is implemented + #before_update :"store_previous_model_for_#{column}" + #after_save :"remove_previously_stored_#{column}" + + class_eval <<-RUBY, __FILE__, __LINE__+1 + + public + + def read_uploader(column) + self.send("#{column}_data") + end + + def write_uploader(column, identifier) + self.send("#{column}_data=", identifier) + end + + RUBY + end + + end + end +end + +# Add this to all nodes and relationships (funky isn't it?) +module Architect4r + module Model + class Node + extend Architect4r::Adapters::CarrierWave + end + + class Relationship + extend Architect4r::Adapters::CarrierWave + end + end +end \ No newline at end of file