Ruby on Rails condition on a hash - ruby-on-rails

Can anyone help me with a bit of code:), I have the fallowing hash
selector = {
:fields => ['Id'],
:predicates => [
{:field => 'grpId', :operator => 'EQUALS', :values => [params_id]},
{:field => 'CrType', :operator => 'EQUALS', :values => ['KEYWORD']}
]
}
And I would like to create a condition for this line:
{:field => 'grpId', :operator => 'EQUALS', :values => [params_id]},
to be performed only if the params_id is not empty.
Thank you

selector = {
:fields => ['Id'],
:predicates => [
params_id ? {:field => 'grpId', :operator => 'EQUALS', :values => [params_id]} : nil,
{:field => 'CrType', :operator => 'EQUALS', :values => ['KEYWORD']}
].compact
}

Related

API POST with array using HTTP gem (or RestClient)

I'm having trouble with this api and can't seem to get over the hump. Using the HTTP gem (though I'm flexible and can use RestClient if that gets me an answer quicker!). Anyway, I'm having trouble posting an array. everything else is good, I just can't figure out this "itemsarray" in the printaura api found here in the addorder method: PrintAura API
I'm running this:
def self.submitorder
req = HTTP.post("https://api.printaura.com/api.php", :json => {
:key => APIKEY,
:hash => APIHASH,
:method => "addorder",
:businessname => "this is a secret too",
:businesscontact => "thats a secret",
:email => "my#email.com",
:your_order_id => "1",
:returnlabel => "FakeAddress",
:clientname => "ShippingName",
:address1 => "ShippingAddressLine1",
:address2 => "ShippingAddressLine2",
:city => "ShippingCity",
:state => "ShippingState",
:zip => "ShippingZip",
:country => "US",
:customerphone => "dontcallme",
:shipping_id => "1",
:itemsarray => {:item => [
:product_id => 423,
:brand_id => 33,
:color_id => 498,
:size_id => 4,
:front_print => 1389517,
:front_mockup => 1390615,
:quantity => 1
]}
})
puts JSON.parse(req)
end
And my output is this:
{"status"=>false, "error_code"=>19, "result"=>19, "message"=>"You cannot place an order without items, Please fill the items array with all the required information. Full API documentation can be found at https:/www.printaura.com/api/"}
Gosh, if someone could look at that and help me out I would forever appreciate it.
def self.submitorder
itemsarray = { :items => [ { :product_id => 423, :brand_id => 33, :color_id => 498, :size_id => 4, :quantity => 1, :front_print => 1389517,
:front_mockup => 1390617 } ] }
req = HTTP.post("https://api.printaura.com/api.php", :json => {
:key => APIKEY,
:hash => APIHASH,
:method => "addorder",
:businessname => "this is a secret too",
:businesscontact => "thats a secret",
:email => "my#email.com",
:your_order_id => "1",
:returnlabel => "FakeAddress",
:clientname => "ShippingName",
:address1 => "ShippingAddressLine1",
:address2 => "ShippingAddressLine2",
:city => "ShippingCity",
:state => "ShippingState",
:zip => "ShippingZip",
:country => "US",
:customerphone => "dontcallme",
:shipping_id => "1",
:items => Base64.encode64(itemsarray.to_json)}
)
puts JSON.parse(req)
I really hopes this helps somebody some years from now haha
To create a array in JSON you use an array in Ruby. Its that easy.
require 'json'
def self.submitorder
req = HTTP.post("https://api.printaura.com/api.php", :json => {
:key => APIKEY,
:hash => APIHASH,
:method => "addorder",
:businessname => "this is a secret too",
:businesscontact => "thats a secret",
:email => "my#email.com",
:your_order_id => "1",
:returnlabel => "FakeAddress",
:clientname => "ShippingName",
:address1 => "ShippingAddressLine1",
:address2 => "ShippingAddressLine2",
:city => "ShippingCity",
:state => "ShippingState",
:zip => "ShippingZip",
:country => "US",
:customerphone => "dontcallme",
:shipping_id => "1",
:items => [
{
:product_id => 423,
:brand_id => 33,
:color_id => 498,
:size_id => 4,
:front_print => 1389517,
:front_mockup => 1390615,
:quantity => 1
}
]
})
puts JSON.parse(req)
The API lists a items parameter which should contain an array of objects. It says nothing about itemsarray.

Why am I getting singleton cant be dumped err?

When I try to add a variable value into session, I am getting singleton cant be dumped err.
Here is the value in the varibale
[
[0] {
:id => "574ecb43a7a5bb44c000443b",
:_id => "574ecb43a7a5bb44c000443b",
:active => true,
:capabilities => {
:network_connections => [
[0] {
:type => "ethernet-wan",
:name => "wan"
},
[1] {
:type => "ethernet-lan",
:name => "lan"
},
[2] {
:type => "wifi",
:name => "wlan"
},
[3] {
:type => "cellular",
:name => "wwan"
}
]
},
:commander_ids => [],
:created_at => "2016-05-11T15:46:12+00:00",
:deleted_at => nil,
:firmware_upgradable => true,
:ingestor_ids => [],
:last_known_translator_port => nil,
:long_description => "this is a liong desc",
:manufacturer => "test_sushant",
:model => "sushant_test",
:name => "zxc",
:parent_gateway_data_source_type_id => nil,
:rule_ids => [],
:software => "qwe",
:translator => "edge",
:type => "asd",
:updated_at => "2016-05-11T15:46:12+00:00",
:user_id => "572adee5a7a5bb320b000852"
},
The variable is an array of objects. I do not know why this is causing an err.

how to download files with different extension with send_file command

I have the following code, I want to download files of different mime types. Ie docx, pdf etc. I have defined my download action, then bellow am trying to get the file extension for which i direct it to the correct mimetype. But this doesnot seem to work
def download
#uploadedfile = Uploadedfile.find(params[:id])
send_data(
#uploadedfile.upload_file.path,
:filename => #uploadedfile.name,
# :type => 'application/pdf',
# :type=>"*/*",
# :type=> "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
#:type=> MIME::Types.type_for(#uploadedfile.name).to_s,
#:content_type => %w(application/vnd.openxmlformats-officedocument.wordprocessingml.document application/pdf),
:type=> file_extension,
:stream => true,
:x_sendfile=>true,
:url_based_filename => true
)
flash[:notice] = "The file has been downloaded"
end
def file_extension
#uploadedfile = Uploadedfile.find(params[:id])
# ext = File.extname("#{#uploadedfile.name}")
ext = File.extname(#uploadedfile.name)
if (ext == ".pdf")
content_type = "application/pdf"
elsif (ext == ".doc") || ( ext == ".rtf") || ( ext == ".docx")
content_type = "application/vnd.openxmlformats-officedocument.wordprocessingml.document"
elsif (ext == ".txt")
content_type = "text/Plain"
elsif (ext == ".rar")
content_type = "Application/x-rar-compressed"
elsif (ext == ".jpeg" || ext==".jpg")
content_type = "image/jpeg"
else
content_type = "Application/octet-stream"
end
content_type
end
but this seems not to work, where am i going wrong? Please help
Here's how i do this.
In config/initializers/constants.rb
MIME_TYPES_FROM_EXTENSION = {
".3dm" => "x-world/x-3dmf",
".3dmf" => "x-world/x-3dmf",
".a" => "application/octet-stream",
".aab" => "application/x-authorware-bin",
".aam" => "application/x-authorware-map",
".aas" => "application/x-authorware-seg",
".abc" => "text/vnd.abc",
".acgi" => "text/html",
".afl" => "video/animaflex",
".ai" => "application/postscript",
".aif" => "audio/aiff",
".aif" => "audio/x-aiff",
".aifc" => "audio/aiff",
".aifc" => "audio/x-aiff",
".aiff" => "audio/aiff",
".aiff" => "audio/x-aiff",
".aim" => "application/x-aim",
".aip" => "text/x-audiosoft-intra",
".ani" => "application/x-navi-animation",
".aos" => "application/x-nokia-9000-communicator-add-on-software",
".aps" => "application/mime",
".arc" => "application/octet-stream",
".arj" => "application/arj",
".arj" => "application/octet-stream",
".art" => "image/x-jg",
".asf" => "video/x-ms-asf",
".asm" => "text/x-asm",
".asp" => "text/asp",
".asx" => "application/x-mplayer2",
".asx" => "video/x-ms-asf",
".asx" => "video/x-ms-asf-plugin",
".au" => "audio/basic",
".au" => "audio/x-au",
".avi" => "application/x-troff-msvideo",
".avi" => "video/avi",
".avi" => "video/msvideo",
".avi" => "video/x-msvideo",
".avs" => "video/avs-video",
".bcpio" => "application/x-bcpio",
".bin" => "application/mac-binary",
".bin" => "application/macbinary",
".bin" => "application/octet-stream",
".bin" => "application/x-binary",
".bin" => "application/x-macbinary",
".bm" => "image/bmp",
".bmp" => "image/bmp",
".bmp" => "image/x-windows-bmp",
".boo" => "application/book",
".book" => "application/book",
".boz" => "application/x-bzip2",
".bsh" => "application/x-bsh",
".bz" => "application/x-bzip",
".bz2" => "application/x-bzip2",
".c" => "text/plain",
".c" => "text/x-c",
".c++" => "text/plain",
".cat" => "application/vnd.ms-pki.seccat",
".cc" => "text/plain",
".cc" => "text/x-c",
".ccad" => "application/clariscad",
".cco" => "application/x-cocoa",
".cdf" => "application/cdf",
".cdf" => "application/x-cdf",
".cdf" => "application/x-netcdf",
".cer" => "application/pkix-cert",
".cer" => "application/x-x509-ca-cert",
".cha" => "application/x-chat",
".chat" => "application/x-chat",
".class" => "application/java",
".class" => "application/java-byte-code",
".class" => "application/x-java-class",
".com" => "application/octet-stream",
".com" => "text/plain",
".conf" => "text/plain",
".cpio" => "application/x-cpio",
".cpp" => "text/x-c",
".cpt" => "application/mac-compactpro",
".cpt" => "application/x-compactpro",
".cpt" => "application/x-cpt",
".crl" => "application/pkcs-crl",
".crl" => "application/pkix-crl",
".crt" => "application/pkix-cert",
".crt" => "application/x-x509-ca-cert",
".crt" => "application/x-x509-user-cert",
".csh" => "application/x-csh",
".csh" => "text/x-script.csh",
".css" => "application/x-pointplus",
".css" => "text/css",
".cxx" => "text/plain",
".dcr" => "application/x-director",
".deepv" => "application/x-deepv",
".def" => "text/plain",
".der" => "application/x-x509-ca-cert",
".dif" => "video/x-dv",
".dir" => "application/x-director",
".dl" => "video/dl",
".dl" => "video/x-dl",
".doc" => "application/msword",
".dot" => "application/msword",
".dp" => "application/commonground",
".drw" => "application/drafting",
".dump" => "application/octet-stream",
".dv" => "video/x-dv",
".dvi" => "application/x-dvi",
".dwf" => "drawing/x-dwf (old)",
".dwf" => "model/vnd.dwf",
".dwg" => "application/acad",
".dwg" => "image/vnd.dwg",
".dwg" => "image/x-dwg",
".dxf" => "application/dxf",
".dxf" => "image/vnd.dwg",
".dxf" => "image/x-dwg",
".dxr" => "application/x-director",
".el" => "text/x-script.elisp",
".elc" => "application/x-bytecode.elisp (compiled elisp)",
".elc" => "application/x-elc",
".env" => "application/x-envoy",
".eps" => "application/postscript",
".es" => "application/x-esrehber",
".etx" => "text/x-setext",
".evy" => "application/envoy",
".evy" => "application/x-envoy",
".exe" => "application/octet-stream",
".f" => "text/plain",
".f" => "text/x-fortran",
".f77" => "text/x-fortran",
".f90" => "text/plain",
".f90" => "text/x-fortran",
".fdf" => "application/vnd.fdf",
".fif" => "application/fractals",
".fif" => "image/fif",
".fli" => "video/fli",
".fli" => "video/x-fli",
".flo" => "image/florian",
".flx" => "text/vnd.fmi.flexstor",
".fmf" => "video/x-atomic3d-feature",
".for" => "text/plain",
".for" => "text/x-fortran",
".fpx" => "image/vnd.fpx",
".fpx" => "image/vnd.net-fpx",
".frl" => "application/freeloader",
".funk" => "audio/make",
".g" => "text/plain",
".g3" => "image/g3fax",
".gif" => "image/gif",
".gl" => "video/gl",
".gl" => "video/x-gl",
".gsd" => "audio/x-gsm",
".gsm" => "audio/x-gsm",
".gsp" => "application/x-gsp",
".gss" => "application/x-gss",
".gtar" => "application/x-gtar",
".gz" => "application/x-compressed",
".gz" => "application/x-gzip",
".gzip" => "application/x-gzip",
".gzip" => "multipart/x-gzip",
".h" => "text/plain",
".h" => "text/x-h",
".hdf" => "application/x-hdf",
".help" => "application/x-helpfile",
".hgl" => "application/vnd.hp-hpgl",
".hh" => "text/plain",
".hh" => "text/x-h",
".hlb" => "text/x-script",
".hlp" => "application/hlp",
".hlp" => "application/x-helpfile",
".hlp" => "application/x-winhelp",
".hpg" => "application/vnd.hp-hpgl",
".hpgl" => "application/vnd.hp-hpgl",
".hqx" => "application/binhex",
".hqx" => "application/binhex4",
".hqx" => "application/mac-binhex",
".hqx" => "application/mac-binhex40",
".hqx" => "application/x-binhex40",
".hqx" => "application/x-mac-binhex40",
".hta" => "application/hta",
".htc" => "text/x-component",
".htm" => "text/html",
".html" => "text/html",
".htmls" => "text/html",
".htt" => "text/webviewhtml",
".htx" => "text/html",
".ice" => "x-conference/x-cooltalk",
".ico" => "image/x-icon",
".idc" => "text/plain",
".ief" => "image/ief",
".iefs" => "image/ief",
".iges" => "application/iges",
".iges" => "model/iges",
".igs" => "application/iges",
".igs" => "model/iges",
".ima" => "application/x-ima",
".imap" => "application/x-httpd-imap",
".inf" => "application/inf",
".ins" => "application/x-internett-signup",
".ip" => "application/x-ip2",
".isu" => "video/x-isvideo",
".it" => "audio/it",
".iv" => "application/x-inventor",
".ivr" => "i-world/i-vrml",
".ivy" => "application/x-livescreen",
".jam" => "audio/x-jam",
".jav" => "text/plain",
".jav" => "text/x-java-source",
".java" => "text/plain",
".java" => "text/x-java-source",
".jcm" => "application/x-java-commerce",
".jfif" => "image/jpeg",
".jfif" => "image/pjpeg",
".jfif-tbnl" => "image/jpeg",
".jpe" => "image/jpeg",
".jpe" => "image/pjpeg",
".jpeg" => "image/jpeg",
".jpeg" => "image/pjpeg",
".jpg" => "image/jpeg",
".jpg" => "image/pjpeg",
".jps" => "image/x-jps",
".js" => "application/x-javascript",
".jut" => "image/jutvision",
".kar" => "audio/midi",
".kar" => "music/x-karaoke",
".ksh" => "application/x-ksh",
".ksh" => "text/x-script.ksh",
".la" => "audio/nspaudio",
".la" => "audio/x-nspaudio",
".lam" => "audio/x-liveaudio",
".latex" => "application/x-latex",
".lha" => "application/lha",
".lha" => "application/octet-stream",
".lha" => "application/x-lha",
".lhx" => "application/octet-stream",
".list" => "text/plain",
".lma" => "audio/nspaudio",
".lma" => "audio/x-nspaudio",
".log" => "text/plain",
".lsp" => "application/x-lisp",
".lsp" => "text/x-script.lisp",
".lst" => "text/plain",
".lsx" => "text/x-la-asf",
".ltx" => "application/x-latex",
".lzh" => "application/octet-stream",
".lzh" => "application/x-lzh",
".lzx" => "application/lzx",
".lzx" => "application/octet-stream",
".lzx" => "application/x-lzx",
".m" => "text/plain",
".m" => "text/x-m",
".m1v" => "video/mpeg",
".m2a" => "audio/mpeg",
".m2v" => "video/mpeg",
".m3u" => "audio/x-mpequrl",
".man" => "application/x-troff-man",
".map" => "application/x-navimap",
".mar" => "text/plain",
".mbd" => "application/mbedlet",
".mc$" => "application/x-magic-cap-package-1.0",
".mcd" => "application/mcad",
".mcd" => "application/x-mathcad",
".mcf" => "image/vasa",
".mcf" => "text/mcf",
".mcp" => "application/netmc",
".me" => "application/x-troff-me",
".mht" => "message/rfc822",
".mhtml" => "message/rfc822",
".mid" => "application/x-midi",
".mid" => "audio/midi",
".mid" => "audio/x-mid",
".mid" => "audio/x-midi",
".mid" => "music/crescendo",
".mid" => "x-music/x-midi",
".midi" => "application/x-midi",
".midi" => "audio/midi",
".midi" => "audio/x-mid",
".midi" => "audio/x-midi",
".midi" => "music/crescendo",
".midi" => "x-music/x-midi",
".mif" => "application/x-frame",
".mif" => "application/x-mif",
".mime" => "message/rfc822",
".mime" => "www/mime",
".mjf" => "audio/x-vnd.audioexplosion.mjuicemediafile",
".mjpg" => "video/x-motion-jpeg",
".mm" => "application/base64",
".mm" => "application/x-meme",
".mme" => "application/base64",
".mod" => "audio/mod",
".mod" => "audio/x-mod",
".moov" => "video/quicktime",
".mov" => "video/quicktime",
".movie" => "video/x-sgi-movie",
".mp2" => "audio/mpeg",
".mp2" => "audio/x-mpeg",
".mp2" => "video/mpeg",
".mp2" => "video/x-mpeg",
".mp2" => "video/x-mpeq2a",
".mp3" => "audio/mpeg3",
".mp3" => "audio/x-mpeg-3",
".mp3" => "video/mpeg",
".mp3" => "video/x-mpeg",
".mpa" => "audio/mpeg",
".mpa" => "video/mpeg",
".mpc" => "application/x-project",
".mpe" => "video/mpeg",
".mpeg" => "video/mpeg",
".mpg" => "audio/mpeg",
".mpg" => "video/mpeg",
".mpga" => "audio/mpeg",
".mpp" => "application/vnd.ms-project",
".mpt" => "application/x-project",
".mpv" => "application/x-project",
".mpx" => "application/x-project",
".mrc" => "application/marc",
".ms" => "application/x-troff-ms",
".mv" => "video/x-sgi-movie",
".my" => "audio/make",
".mzz" => "application/x-vnd.audioexplosion.mzz",
".nap" => "image/naplps",
".naplps" => "image/naplps",
".nc" => "application/x-netcdf",
".ncm" => "application/vnd.nokia.configuration-message",
".nif" => "image/x-niff",
".niff" => "image/x-niff",
".nix" => "application/x-mix-transfer",
".nsc" => "application/x-conference",
".nvd" => "application/x-navidoc",
".o" => "application/octet-stream",
".oda" => "application/oda",
".omc" => "application/x-omc",
".omcd" => "application/x-omcdatamaker",
".omcr" => "application/x-omcregerator",
".p" => "text/x-pascal",
".p10" => "application/pkcs10",
".p10" => "application/x-pkcs10",
".p12" => "application/pkcs-12",
".p12" => "application/x-pkcs12",
".p7a" => "application/x-pkcs7-signature",
".p7c" => "application/pkcs7-mime",
".p7c" => "application/x-pkcs7-mime",
".p7m" => "application/pkcs7-mime",
".p7m" => "application/x-pkcs7-mime",
".p7r" => "application/x-pkcs7-certreqresp",
".p7s" => "application/pkcs7-signature",
".part" => "application/pro_eng",
".pas" => "text/pascal",
".pbm" => "image/x-portable-bitmap",
".pcl" => "application/vnd.hp-pcl",
".pcl" => "application/x-pcl",
".pct" => "image/x-pict",
".pcx" => "image/x-pcx",
".pdb" => "chemical/x-pdb",
".pdf" => "application/pdf",
".pfunk" => "audio/make",
".pfunk" => "audio/make.my.funk",
".pgm" => "image/x-portable-graymap",
".pgm" => "image/x-portable-greymap",
".pic" => "image/pict",
".pict" => "image/pict",
".pkg" => "application/x-newton-compatible-pkg",
".pko" => "application/vnd.ms-pki.pko",
".pl" => "text/plain",
".pl" => "text/x-script.perl",
".plx" => "application/x-pixclscript",
".pm" => "image/x-xpixmap",
".pm" => "text/x-script.perl-module",
".pm4" => "application/x-pagemaker",
".pm5" => "application/x-pagemaker",
".png" => "image/png",
".pnm" => "application/x-portable-anymap",
".pnm" => "image/x-portable-anymap",
".pot" => "application/mspowerpoint",
".pot" => "application/vnd.ms-powerpoint",
".pov" => "model/x-pov",
".ppa" => "application/vnd.ms-powerpoint",
".ppm" => "image/x-portable-pixmap",
".pps" => "application/mspowerpoint",
".pps" => "application/vnd.ms-powerpoint",
".ppt" => "application/mspowerpoint",
".ppt" => "application/powerpoint",
".ppt" => "application/vnd.ms-powerpoint",
".ppt" => "application/x-mspowerpoint",
".ppz" => "application/mspowerpoint",
".pre" => "application/x-freelance",
".prt" => "application/pro_eng",
".ps" => "application/postscript",
".psd" => "application/octet-stream",
".pvu" => "paleovu/x-pv",
".pwz" => "application/vnd.ms-powerpoint",
".py" => "text/x-script.phyton",
".pyc" => "applicaiton/x-bytecode.python",
".qcp" => "audio/vnd.qcelp",
".qd3" => "x-world/x-3dmf",
".qd3d" => "x-world/x-3dmf",
".qif" => "image/x-quicktime",
".qt" => "video/quicktime",
".qtc" => "video/x-qtc",
".qti" => "image/x-quicktime",
".qtif" => "image/x-quicktime",
".ra" => "audio/x-pn-realaudio",
".ra" => "audio/x-pn-realaudio-plugin",
".ra" => "audio/x-realaudio",
".ram" => "audio/x-pn-realaudio",
".ras" => "application/x-cmu-raster",
".ras" => "image/cmu-raster",
".ras" => "image/x-cmu-raster",
".rast" => "image/cmu-raster",
".rexx" => "text/x-script.rexx",
".rf" => "image/vnd.rn-realflash",
".rgb" => "image/x-rgb",
".rm" => "application/vnd.rn-realmedia",
".rm" => "audio/x-pn-realaudio",
".rmi" => "audio/mid",
".rmm" => "audio/x-pn-realaudio",
".rmp" => "audio/x-pn-realaudio",
".rmp" => "audio/x-pn-realaudio-plugin",
".rng" => "application/ringing-tones",
".rng" => "application/vnd.nokia.ringing-tone",
".rnx" => "application/vnd.rn-realplayer",
".roff" => "application/x-troff",
".rp" => "image/vnd.rn-realpix",
".rpm" => "audio/x-pn-realaudio-plugin",
".rt" => "text/richtext",
".rt" => "text/vnd.rn-realtext",
".rtf" => "application/rtf",
".rtf" => "application/x-rtf",
".rtf" => "text/richtext",
".rtx" => "application/rtf",
".rtx" => "text/richtext",
".rv" => "video/vnd.rn-realvideo",
".s" => "text/x-asm",
".s3m" => "audio/s3m",
".saveme" => "application/octet-stream",
".sbk" => "application/x-tbook",
".scm" => "application/x-lotusscreencam",
".scm" => "text/x-script.guile",
".scm" => "text/x-script.scheme",
".scm" => "video/x-scm",
".sdml" => "text/plain",
".sdp" => "application/sdp",
".sdp" => "application/x-sdp",
".sdr" => "application/sounder",
".sea" => "application/sea",
".sea" => "application/x-sea",
".set" => "application/set",
".sgm" => "text/sgml",
".sgm" => "text/x-sgml",
".sgml" => "text/sgml",
".sgml" => "text/x-sgml",
".sh" => "application/x-bsh",
".sh" => "application/x-sh",
".sh" => "application/x-shar",
".sh" => "text/x-script.sh",
".shar" => "application/x-bsh",
".shar" => "application/x-shar",
".shtml" => "text/html",
".shtml" => "text/x-server-parsed-html",
".sid" => "audio/x-psid",
".sit" => "application/x-sit",
".sit" => "application/x-stuffit",
".skd" => "application/x-koan",
".skm" => "application/x-koan",
".skp" => "application/x-koan",
".skt" => "application/x-koan",
".sl" => "application/x-seelogo",
".smi" => "application/smil",
".smil" => "application/smil",
".snd" => "audio/basic",
".snd" => "audio/x-adpcm",
".sol" => "application/solids",
".spc" => "application/x-pkcs7-certificates",
".spc" => "text/x-speech",
".spl" => "application/futuresplash",
".spr" => "application/x-sprite",
".sprite" => "application/x-sprite",
".src" => "application/x-wais-source",
".ssi" => "text/x-server-parsed-html",
".ssm" => "application/streamingmedia",
".sst" => "application/vnd.ms-pki.certstore",
".step" => "application/step",
".stl" => "application/sla",
".stl" => "application/vnd.ms-pki.stl",
".stl" => "application/x-navistyle",
".stp" => "application/step",
".sv4cpio" => "application/x-sv4cpio",
".sv4crc" => "application/x-sv4crc",
".svf" => "image/vnd.dwg",
".svf" => "image/x-dwg",
".svr" => "application/x-world",
".svr" => "x-world/x-svr",
".swf" => "application/x-shockwave-flash",
".t" => "application/x-troff",
".talk" => "text/x-speech",
".tar" => "application/x-tar",
".tbk" => "application/toolbook",
".tbk" => "application/x-tbook",
".tcl" => "application/x-tcl",
".tcl" => "text/x-script.tcl",
".tcsh" => "text/x-script.tcsh",
".tex" => "application/x-tex",
".texi" => "application/x-texinfo",
".texinfo" => "application/x-texinfo",
".text" => "application/plain",
".text" => "text/plain",
".tgz" => "application/gnutar",
".tgz" => "application/x-compressed",
".tif" => "image/tiff",
".tif" => "image/x-tiff",
".tiff" => "image/tiff",
".tiff" => "image/x-tiff",
".tr" => "application/x-troff",
".tsi" => "audio/tsp-audio",
".tsp" => "application/dsptype",
".tsp" => "audio/tsplayer",
".tsv" => "text/tab-separated-values",
".turbot" => "image/florian",
".txt" => "text/plain",
".uil" => "text/x-uil",
".uni" => "text/uri-list",
".unis" => "text/uri-list",
".unv" => "application/i-deas",
".uri" => "text/uri-list",
".uris" => "text/uri-list",
".ustar" => "application/x-ustar",
".ustar" => "multipart/x-ustar",
".uu" => "application/octet-stream",
".uu" => "text/x-uuencode",
".uue" => "text/x-uuencode",
".vcd" => "application/x-cdlink",
".vcs" => "text/x-vcalendar",
".vda" => "application/vda",
".vdo" => "video/vdo",
".vew" => "application/groupwise",
".viv" => "video/vivo",
".viv" => "video/vnd.vivo",
".vivo" => "video/vivo",
".vivo" => "video/vnd.vivo",
".vmd" => "application/vocaltec-media-desc",
".vmf" => "application/vocaltec-media-file",
".voc" => "audio/voc",
".voc" => "audio/x-voc",
".vos" => "video/vosaic",
".vox" => "audio/voxware",
".vqe" => "audio/x-twinvq-plugin",
".vqf" => "audio/x-twinvq",
".vql" => "audio/x-twinvq-plugin",
".vrml" => "application/x-vrml",
".vrml" => "model/vrml",
".vrml" => "x-world/x-vrml",
".vrt" => "x-world/x-vrt",
".vsd" => "application/x-visio",
".vst" => "application/x-visio",
".vsw" => "application/x-visio",
".w60" => "application/wordperfect6.0",
".w61" => "application/wordperfect6.1",
".w6w" => "application/msword",
".wav" => "audio/wav",
".wav" => "audio/x-wav",
".wb1" => "application/x-qpro",
".wbmp" => "image/vnd.wap.wbmp",
".web" => "application/vnd.xara",
".wiz" => "application/msword",
".wk1" => "application/x-123",
".wmf" => "windows/metafile",
".wml" => "text/vnd.wap.wml",
".wmlc" => "application/vnd.wap.wmlc",
".wmls" => "text/vnd.wap.wmlscript",
".wmlsc" => "application/vnd.wap.wmlscriptc",
".word" => "application/msword",
".wp" => "application/wordperfect",
".wp5" => "application/wordperfect",
".wp5" => "application/wordperfect6.0",
".wp6" => "application/wordperfect",
".wpd" => "application/wordperfect",
".wpd" => "application/x-wpwin",
".wq1" => "application/x-lotus",
".wri" => "application/mswrite",
".wri" => "application/x-wri",
".wrl" => "application/x-world",
".wrl" => "model/vrml",
".wrl" => "x-world/x-vrml",
".wrz" => "model/vrml",
".wrz" => "x-world/x-vrml",
".wsc" => "text/scriplet",
".wsrc" => "application/x-wais-source",
".wtk" => "application/x-wintalk",
".xbm" => "image/x-xbitmap",
".xbm" => "image/x-xbm",
".xbm" => "image/xbm",
".xdr" => "video/x-amt-demorun",
".xgz" => "xgl/drawing",
".xif" => "image/vnd.xiff",
".xl" => "application/excel",
".xla" => "application/excel",
".xla" => "application/x-excel",
".xla" => "application/x-msexcel",
".xlb" => "application/excel",
".xlb" => "application/vnd.ms-excel",
".xlb" => "application/x-excel",
".xlc" => "application/excel",
".xlc" => "application/vnd.ms-excel",
".xlc" => "application/x-excel",
".xld" => "application/excel",
".xld" => "application/x-excel",
".xlk" => "application/excel",
".xlk" => "application/x-excel",
".xll" => "application/excel",
".xll" => "application/vnd.ms-excel",
".xll" => "application/x-excel",
".xlm" => "application/excel",
".xlm" => "application/vnd.ms-excel",
".xlm" => "application/x-excel",
".xls" => "application/excel",
".xls" => "application/vnd.ms-excel",
".xls" => "application/x-excel",
".xls" => "application/x-msexcel",
".xlt" => "application/excel",
".xlt" => "application/x-excel",
".xlv" => "application/excel",
".xlv" => "application/x-excel",
".xlw" => "application/excel",
".xlw" => "application/vnd.ms-excel",
".xlw" => "application/x-excel",
".xlw" => "application/x-msexcel",
".xm" => "audio/xm",
".xml" => "application/xml",
".xml" => "text/xml",
".xmz" => "xgl/movie",
".xpix" => "application/x-vnd.ls-xpix",
".xpm" => "image/x-xpixmap",
".xpm" => "image/xpm",
".x-png" => "image/png",
".xsr" => "video/x-amt-showrun",
".xwd" => "image/x-xwd",
".xwd" => "image/x-xwindowdump",
".xyz" => "chemical/x-pdb",
".z" => "application/x-compress",
".z" => "application/x-compressed",
".zip" => "application/x-compressed",
".zip" => "application/x-zip-compressed",
".zip" => "application/zip",
".zip" => "multipart/x-zip",
".zoo" => "application/octet-stream",
".zsh" => "text/x-script.zsh"
}
In lib/core_extensions.rb - this needs to be required somewhere in your config.
class File
def self.guess_filetype(filename)
`file --mime -b "#{filename}"`.split(";").first || MIME_TYPES_FROM_EXTENSION[File.extname(filename)]
end
end
Finally, in the controller, using your example, in the send_file call, i would do
:type=> File.guess_filetype(#uploadedfile.name)
The guess_filetype method makes a shell call to file, which is a command line utility. http://en.wikipedia.org/wiki/File_(command)
If file can't get the mimetype (it usually does, it's pretty good), then i fall back to my massive list of known mime types from extension, stored in that constant.
The reason i do file first, rather than just rely on the list of extensions, is that file looks inside the actual content of the file itself, so if somebody renamed a file's extension, file wouldn't be fooled: it would still know what mime type to return.
I solved this problem by making a slight change on the def file_extension to
def file_extension
up = Uploadedfile.find(params[:id])
ext = File.extname("#{up.upload_file}")
if (ext == ".pdf")
"application/pdf"
elsif (ext == ".doc") || ( ext == ".rtf") || ( ext == ".docx")
"application/vnd.openxmlformats-officedocument.wordprocessingml.document"
elsif (ext == ".txt")
"text/Plain"
elsif (ext == ".rar")
"Application/x-rar-compressed"
elsif (ext == ".jpeg" || ext==".jpg")
"image/jpeg"
else
"Application/octet-stream"
end
end
I changed this part to ext = File.extname(#uploadedfile.name) to ext = File.extname("#{up.upload_file}") where up = Uploadedfile.find(params[:id])

Active resource param serialization issue

I'm trying to pass the following ruby hash into an active resource(3.0.9) find(:from) call.
my_hash = {
:p => {:s => 100, :e => 2},
:k => "blah",
:f => [
{
:fl => :bt,
:tp => :trm,
:vl => "A::B"
},
{
:fl => :jcni,
:tp => :trm,
:vl => [133, 134]
},
{
:mnfl => :bmns,
:mxfl => :bmxs,
:tp => :rfstv,
:vl => 1e5
},
{
:fl => :bpo,
:tp => :rftv,
:op => :eta,
:vl => 1.months.ago.strftime("%Y-%m-%d")
}
]
}
Resource.find_by_x_and_y(:all, :from => :blah, params: my_hash)
On the server side action, when I print the params hash, its all messed up. ( last 3 hashes in the array mapped to :f )
{
"f" => [
{
"fl" => "bt",
"tp" => "trm",
"vl" => "A::B"
},
{
"fl" => "jcni",
"tp" => "trm",
"vl" => [
"133",
"134"
],
"mnfl" => "bmns",
"mxfl" => "bmxs"
},
{
"tp" => "rfstv",
"vl" => "100000.0",
"fl" => "bpo",
"op" => "eta"
},
{
"tp" => "rftv",
"vl" => "2013-01-25"
}
],
"k" => "blah",
"p" => {
"e" => "2",
"s" => "100"
},
"action" => "blah",
"controller" => "x/Y",
"format" => "json"
}
my_hash.to_query gives me
f[][fl]=bt&f[][tp]=trm&f[][vl]=A%3A%3AB&f[][fl]=jcni&f[][tp]=trm&f[][vl][]=133&f[][vl][]=134&f[][mnfl]=bmns&f[][mxfl]=bmxs&f[][tp]=rfstv&f[][vl]=100000.0&f[][fl]=bpo&f[][op]=eta&f[][tp]=rftv&f[][vl]=2013-01-25&k=blah&p[e]=2&p[s]=100
which doesn't have indices, hence the mixup.
Is there a name for this type of serialization using "[]" ? Is this guaranteed to serialize/deserialize arbitrarily nested hashes/arrays/primitives faithfully ? How do I make active resource behave sanely ?

Rails 3.1 - Split Column on Data import?

I'm importing sales data from iTunes successfully using:
FasterCSV.parse(uploaded_io, {:headers => true, :col_sep =>"\t"}).each do |row_data|
new_record = AppleSale.new(
'provider' => row_data[0],
'provider_country' => row_data[1],
'vendor_identifier' => row_data[2],
'upc' => row_data[3],
'isrc' => row_data[4],
'artist_show' => row_data[5],
'title' => row_data[6],
'label_studio_network' => row_data[7],
'product_type_identifier' => row_data[8],
'units' => row_data[9],
'royalty_price' => row_data[10],
'download_date' => row_data[11],
'order_id' => row_data[12],
'postal_code' => row_data[13],
'customer_identifier' => row_data[14],
'report_date' => row_data[15],
'sale_return' => row_data[16],
'customer_currency' => row_data[17],
'country_code' => row_data[18],
'royalty_currency' => row_data[19],
'preorder' => row_data[20],
'isan' => row_data[21],
'customer_price' => row_data[22],
'apple_identifier' => row_data[23],
'cma' => row_data[24],
'asset_content_flavor' => row_data[25],
'vendor_order_code' => row_data[26],
'grid' => row_data[27],
'promo_code' => row_data[28],
'parent_identifier' => row_data[29]
)
new_record.save
end
'vendor_order_code' however contains values like '0711297494143_CADE70900648' that i'd like to split on the underscore and store in two separate (new) columns. Not all entries have a value like this, some just contain the first part (a UPC). I realise there are already UPC and ISRC columns provided but these aren't populated in a way that's useful to me, splitting the vendor_order_code is the only way I can do what I need to do.
Can anyone suggest the correct way of doing this? I know the below is complete nonsense, but i'm thinking something along the lines of:
'vendor_order_code' => row_data[26],
'vendor_order_code_UPC' => row_data[26].split("_")...and save just the first half regardless of whether split occurred.
'vendor_order_code_ISRC' => row_data[26].split("_")..and save just the second half if it exists
No need for multiple splits and/or conditionals; just match once per row.
FasterCSV.parse(uploaded_io, {:headers => true, :col_sep =>"\t"}).each do |row_data|
full, upc, _discard, isrc = row_data[26].match(/^([^_]+)(_(.+))?/).to_a
new_record = AppleSale.new(
'provider' => row_data[0],
'provider_country' => row_data[1],
'vendor_identifier' => row_data[2],
'upc' => row_data[3],
'isrc' => row_data[4],
'artist_show' => row_data[5],
'title' => row_data[6],
'label_studio_network' => row_data[7],
'product_type_identifier' => row_data[8],
'units' => row_data[9],
'royalty_price' => row_data[10],
'download_date' => row_data[11],
'order_id' => row_data[12],
'postal_code' => row_data[13],
'customer_identifier' => row_data[14],
'report_date' => row_data[15],
'sale_return' => row_data[16],
'customer_currency' => row_data[17],
'country_code' => row_data[18],
'royalty_currency' => row_data[19],
'preorder' => row_data[20],
'isan' => row_data[21],
'customer_price' => row_data[22],
'apple_identifier' => row_data[23],
'cma' => row_data[24],
'asset_content_flavor' => row_data[25],
'vendor_order_code' => full,
'vendor_order_code_UPC' => upc,
'vendor_order_code_ISRC' => isrc,
'grid' => row_data[27],
'promo_code' => row_data[28],
'parent_identifier' => row_data[29]
)
new_record.save
end
You can try:
'vendor_order_code' => row_data[26],
'vendor_order_code_UPC' => row_data[26].split("_").first
'vendor_order_code_ISRC' => row_data[26].split("_").last if row_data[26].match(/_/)

Resources