Jano Svitok
5/29/2008 10:45:00 PM
On Thu, May 29, 2008 at 11:57 PM, S.D <s.d@comcast.net> wrote:
> In the following PHP function, both 'types' and 'groups' are associative
> arrays. I'm trying to rewrite this function in Ruby, using Hashes and I
> haven't yet got it right. If someone with some insight into PHP and Ruby
> could give it a look and see where my current code might be incorrect, I 'd
> appreciate any pointers that might correct the results. The PHP function is
> working; the Ruby version is not (yet) working. TIA for any tips, criticism
> and suggestions that you can submit.
>
> -- Steve
>
> The original PHP function:
> $this->types = array(
> 'aac' => 'audio/x-aac',
> 'ai' => 'application/postscript',
> 'aif' => 'audio/x-aiff',
> 'aiff' => 'audio/x-aiff',
> 'asf' => 'video/x-ms-asf',
> 'asx' => 'video/x-ms-asx',
> 'avi' => 'video/avi'
> );
>
> $groups['office'] =
> array('csv','doc','dot','pdf','pot','pps','ppt','rtf','txt','xls');
> $groups['image'] =
> array('ai','bmp','dxf','eps','gif','ico','jpg','jpe','jpeg','pdf','png','ps','swf','tif','tiff','wmf');
> $groups['compressed'] =
> array('bin','bz','bz2','gz','sit','tar','tgz','z','zip');
> $groups['video'] =
> array('asf','asx','avi','mov','mpg','mpeg','mp4','qt','ra','ram','swf','wmv');
> $groups['audio'] = array('mp3','m4a','ra','ram','wav','wma');
> $groups['web'] =
> array('css','gif','ico','jpg','jpeg','js','htm','html','pdf','php','phps','png','shtml','sql');
> $groups['media'] =
> array('mp3','jpg','mpg','mpeg','vob','avi','wma','wmv','bmp','jpeg','aac','wav');
>
> /*
> * Return array of mime types
> *
> * @param string/bool $group_type
> * @return array
> */
> public function getTypes($group_type=false) {
> if(!$group_type) {
> return $this->types;
> }
> else {
> if(array_key_exists($group_type,$this->groups)) {
> foreach($this->types as $key => $mt) {
> if(in_array($key,$this->groups[$group_type])) {
> $types[$key] = $mt;
> }
> }
> return $types;
> }
> else {
> return false;
> }
> }
> }
>
> The current Ruby translated function:
- types = { 'aac' => 'audio/x-aac',
+ TYPES = { 'aac' => 'audio/x-aac', # if it won't change, make it a constant
> 'ai' => 'application/postscript',
> 'aif' => 'audio/x-aiff',
> 'aiff' => 'audio/x-aiff',
> 'asf' => 'video/x-ms-asf',
> 'asx' => 'video/x-ms-asx',
> 'avi' => 'video/avi'
> }
- groups = {'office' =>
+ GROUPS = {'office' => # the same
> ['csv','doc','dot','pdf','pot','pps','ppt','rtf','txt','xls'],
> 'image' =>
> ['ai','bmp','dxf','eps','gif','ico','jpg','jpe','jpeg','pdf','png','ps','swf','tif','tiff','wmf'],
> 'compressed' => ['bin','bz','bz2','gz','sit','tar','tgz','z','zip'],
> 'video' =>
> ['asf','asx','avi','mov','mpg','mpeg','mp4','qt','ra','ram','swf','wmv'],
> 'audio' => ['mp3','m4a','ra','ram','wav','wma'],
> 'web' =>
> ['css','gif','ico','jpg','jpeg','js','htm','html','pdf','php','phps','png','shtml','sql'],
> 'media' =>
> ['mp3','jpg','mpg','mpeg','vob','avi','wma','wmv','bmp','jpeg','aac','wav']
> }
> #---------------------------------
> # Return array of mime types
> #---------------------------------
def get_types(group_type = nil) # in ruby lowercase_and_underscores
are used for methods and variables by convention
return TYPES unless group_type # == if !group_type == if group_type.nil?
return false unless GROUPS.has_key?(group_type) # no need to write
'then' or parentheses
GROUPS[group_type].inject({}) {|types, ext| types[ext] =
TYPES[ext] ; TYPES }
end
or replace the last line with
Hash[*GROUPS[group_type].collect {|ext| ext, types[ext]}.flatten] #
alternative 2
or
def ...
case group_type
when nil, false
TYPES
when *GROUP.keys
GROUPS[group_type].inject({}) {|types, ext| types[ext] =
TYPES[ext] ; TYPES }
else
false
end
end
WARNING: not tested code, might contain bugs!