Sha256: 32230c75ca789a8cffd106101a5aef923a013b51f8f8d3bde52301731d26dc55

Contents?: true

Size: 1.86 KB

Versions: 6

Compression:

Stored size: 1.86 KB

Contents

ActiveAdmin.register ActiveAdminPro::SummernoteImage do
  actions :create
  menu false

  controller do
    def create
      @file = params[:file]
      if ENV["AWS_BUCKET"]
        @bucket = s3_bucket
      elsif ENV["GOOGLE_STORAGE_BUCKET"]
        @bucket = google_storage_bucket
      end
      if @bucket
        render text: upload_file
      else
        render json: { error: "No AWS or Google cloud storage bucket setup.  Please set the AWS_BUCKET or GOOGLE_STORAGE_BUCKET." }, status: :unprocessable_entity
      end
    end

  private

    # The storage object key used for saving the image uploaded from the Summernote editor.
    # @return [String]
    def storage_object_key
      file_ext = File.extname(@file.original_filename)
      file_base = File.basename(@file.original_filename, file_ext)
      time = Time.now.to_i
      "aap/si/#{file_base}_#{time}#{file_ext}"
    end

    def google_storage_bucket
      connection = Fog::Storage.new(
        provider:                         "Google",
        google_storage_access_key_id:     ENV.fetch("GOOGLE_STORAGE_ACCESS_KEY_ID"),
        google_storage_secret_access_key: ENV.fetch("GOOGLE_STORAGE_SECRET_ACCESS_KEY")
      )
      connection.directories.get(ENV.fetch("GOOGLE_STORAGE_BUCKET"))
    end

    def s3_bucket
      connection = Fog::Storage.new(
        provider:              "AWS",
        aws_access_key_id:     ENV.fetch("AWS_ACCESS_KEY_ID"),
        aws_secret_access_key: ENV.fetch("AWS_SECRET_ACCESS_KEY")
      )
      connection.directories.get(ENV.fetch("AWS_BUCKET"))
    end

    # Upload the image to the Amazon S3 bucket or Google Storage bucket.
    # @return [String] The public URL of the image
    def upload_file
      file = @bucket.files.create(
        key:    storage_object_key,
        body:   @file.tempfile,
        public: true
      )
      file.save
      file.public_url
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
active_admin_pro-0.1.5 lib/active_admin_pro/summernote_image/summernote_image.rb
active_admin_pro-0.1.4 lib/active_admin_pro/summernote_image/summernote_image.rb
active_admin_pro-0.1.3 lib/active_admin_pro/summernote_image/summernote_image.rb
active_admin_pro-0.1.2 lib/active_admin_pro/summernote_image/summernote_image.rb
active_admin_pro-0.1.1 lib/active_admin_pro/summernote_image/summernote_image.rb
active_admin_pro-0.1.0 lib/active_admin_pro/summernote_image/summernote_image.rb