Need help converting Ruby code to php code

Posted by newprog on Stack Overflow See other posts from Stack Overflow or by newprog
Published on 2011-01-11T08:06:26Z Indexed on 2011/01/11 22:53 UTC
Read the original article Hit count: 268

Filed under:
|

Yesterday I posted this queston. Today I found the code which I need but written in Ruby. Some parts of code I have understood (I don't know Ruby) but there is one part that I can't. I think people who know ruby and php can help me understand this code.

def do_create(image)
    # Clear any old info in case of a re-submit
    FIELDS_TO_CLEAR.each { |field| image.send(field+'=', nil) }
    image.save

    # Compose request

    vm_params = Hash.new

    # Submitting a file in ruby requires opening it and then reading the contents into the post body
    file = File.open(image.filename_in, "rb")

    # Populate the parameters and compute the signature
    # Normally you would do this in a subroutine - for maximum clarity all 
    # parameters are explicitly spelled out here. 
    vm_params["image"]             = file # Contents will be read by the multipart object created below
    vm_params["image_checksum"]    = image.image_checksum
    vm_params["start_job"]         = 'vectorize'
    vm_params["image_type"]        = image.image_type       if image.image_type != 'none'
    vm_params["image_complexity"]  = image.image_complexity if image.image_complexity != 'none'
    vm_params["image_num_colors"]  = image.image_num_colors if image.image_num_colors != ''
    vm_params["image_colors"]      = image.image_colors     if image.image_colors != ''
    vm_params["expire_at"]         = image.expire_at        if image.expire_at != ''

    vm_params["licensee_id"]       = DEVELOPER_ID

    #in php it's like this $vm_params["sequence_number"] = -rand(100000000);?????
    vm_params["sequence_number"]   = Kernel.rand(1000000000) # Use a negative value to force an error when calling the test server
    vm_params["timestamp"]         = Time.new.utc.httpdate

    string_to_sign =
    CREATE_URL +                             # Start out with the URL being called...
    #vm_params["image"].to_s +               # ... don't include the file per se - use the checksum instead
    vm_params["image_checksum"].to_s +       # ... then include all regular parameters
    vm_params["start_job"].to_s +
    vm_params["image_type"].to_s +           
    vm_params["image_complexity"].to_s +     # (nil.to_s => '', so this is fine for vm_params we don't use)
    vm_params["image_num_colors"].to_s + 
    vm_params["image_colors"].to_s + 
    vm_params["expire_at"].to_s + 

    vm_params["licensee_id"].to_s +          # ... then do all the security parameters
    vm_params["sequence_number"].to_s + 
    vm_params["timestamp"].to_s

    vm_params["signature"]         = sign(string_to_sign) #no problem 

    # Workaround class for handling multipart posts
    mp = Multipart::MultipartPost.new
    query, headers = mp.prepare_query(vm_params) # Handles the file parameter in a special way (see /lib/multipart.rb)
    file.close # mp has read the contents, we can close the file now

    response = post_form(URI.parse(CREATE_URL), query, headers)    
    logger.info(response.body)
    response_hash = ActiveSupport::JSON.decode(response.body) # Decode the JSON response string
 ##I have understood below                 
 def sign(string_to_sign)          
    #logger.info("String to sign: '#{string_to_sign}'")
    Base64.encode64(HMAC::SHA1.digest(DEVELOPER_KEY, string_to_sign))    
  end 

# Within  Multipart  modul I have this:         
 class MultipartPost              
    BOUNDARY = 'tarsiers-rule0000'      
    HEADER = {"Content-type" => "multipart/form-data, boundary=" + BOUNDARY + " "}

    def prepare_query (params)     
      fp = []
      params.each {|k,v|
        if v.respond_to?(:read)
          fp.push(FileParam.new(k, v.path, v.read))
        else
          fp.push(Param.new(k,v))
        end
      }
      query = fp.collect {|p| "--" + BOUNDARY + "\r\n" + p.to_multipart }.join("") + "--" + BOUNDARY + "--"
      return query, HEADER
    end
  end  
end

Thanks for your help.

© Stack Overflow or respective owner

Related posts about php

Related posts about ruby