Sha256: f17e28517f796a99a756c243f6a265b5ccbda3b03729cb15cc1e3294d6e86743

Contents?: true

Size: 1.03 KB

Versions: 6

Compression:

Stored size: 1.03 KB

Contents

class Lalala::ExtRack::MultipleFileUploadSupport

  METHODS = /^POST|PUT|PATCH$/

  def initialize(app)
    @app = app
  end

  def call(env)
    if METHODS === env["REQUEST_METHOD"]
      params = env["rack.request.form_hash"]
      correct_assets_hash_nesting(params)
    end

    @app.call(env)
  end

  def correct_assets_hash_nesting(params, key=nil)
    if key and key.to_s.ends_with?("_attributes")
      return if params.size == 0

      last_id = params.keys.sort_by(&:to_i).last
      last_id = "#{last_id}"

      return if params[last_id]["asset"].nil?

      last = params.delete(last_id)
      assets = last["asset"]

      return unless Array === assets

      assets.each do |file|
        if file.present?
          params[last_id] = { "asset" => file }.with_indifferent_access
          last_id.succ!
        end
      end

    else
      case params
      when Hash then params.each { |k, v| correct_assets_hash_nesting(v, k) }
      when Array then params.each { |v| correct_assets_hash_nesting(v) }
      end

    end
  end

end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
lalala-4.0.0.dev.146 lib/lalala/ext_rack/multiple_file_upload_support.rb
lalala-4.0.0.dev.144 lib/lalala/ext_rack/multiple_file_upload_support.rb
lalala-4.0.0.dev.141 lib/lalala/ext_rack/multiple_file_upload_support.rb
lalala-4.0.0.dev.136 lib/lalala/ext_rack/multiple_file_upload_support.rb
lalala-4.0.0.dev.135 lib/lalala/ext_rack/multiple_file_upload_support.rb
lalala-4.0.0.dev.134 lib/lalala/ext_rack/multiple_file_upload_support.rb