Sha256: 40015636634c11751e626f4775b81ba19f35ca33d1ed36e3877709ccc531388b

Contents?: true

Size: 1.06 KB

Versions: 4

Compression:

Stored size: 1.06 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, parent=nil, 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, params, k) }
      when Array then params.each { |v|    correct_assets_hash_nesting(v)            }
      end

    end
  end

end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
lalala-4.0.0.dev.157 lib/lalala/ext_rack/multiple_file_upload_support.rb
lalala-4.0.0.dev.156 lib/lalala/ext_rack/multiple_file_upload_support.rb
lalala-4.0.0.dev.155 lib/lalala/ext_rack/multiple_file_upload_support.rb
lalala-4.0.0.dev.154 lib/lalala/ext_rack/multiple_file_upload_support.rb