Ruby is one of the popular programming languages which was developed by Yukihiro Matsumoto in the mid-1990s. Ruby is a general-purpose language and is easy to learn. So, today we will be talking about the top 14 most asked questions about Ruby. So, let’s get started. 14 Most Asked Questions About Ruby 1. How to write a switch statement in Ruby? Answer: You can use . expression case <code><span = > </span><span = > x </span><span = >when</span> <span = > </span><span = >.</span><span = > </span> <span = > </span> <span = >when</span> <span = > </span> <span = > </span> <span = >when</span> <span = > </span><span = >,</span> <span = > </span> <span = > </span> <span = >when</span> <span = >String</span> <span = > </span> <span = > </span> <span = > </span> <span = >end</span></code> class "kwd" case class "pln" class "kwd" class "lit" 1. class "pun" class "lit" 5 class "str" "It's between 1 and 5" class "kwd" class "lit" 6 class "str" "It's 6" class "kwd" class "str" "foo" class "pun" class "str" "bar" class "str" "It's either foo or bar" class "kwd" class "typ" class "str" "You passed a string" class "kwd" else class "str" "You gave me #{x} -- I have no idea what to do with that." class "kwd" Ruby compares the object in the clause with the object in the clause using the operator. For example, , and not . when case === 1..5 === x x === 1..5 This allows for sophisticated clauses as seen above. Ranges, classes, and all sorts of things can be tested for rather than just equality. when Unlike statements in many other languages, Ruby’s does not have , so there is no need to end each with a . You can also specify multiple matches in a single clause like . switch case fall-through when break when when "foo", "bar" Alternative Answer: behaves a bit unexpectedly when handling classes. This is due to the fact that it uses the operator. case...when === That operator works as expected with literals, but not with classes: <code> <span = >=== <span = > < span> <span = >=== <span = >Fixnum< span> 1 < = > span class "lit" </ > span class "pun" </ > span class "lit" 1 /span> <span class="com"># =&gt; true</ Fixnum < = > span class "typ" </ > span class "pun" </ > span class "typ" /span> <span class="com"># =&gt; false</ </ > code This means that if you want to do a over an object’s class, this will not work: case ... when <code><span = >obj </span><span = >=</span> <span = > o'</span> <span = > </span><span = > obj</span><span = >.</span><span = > <span = >when</span> <span = > </span><span = > print</span><span = >(</span><span = > is a string'</span><span = >)</span> <span = >when</span> <span = > </span><span = > print</span><span = >(</span><span = > is a number'</span><span = >)</span> <span = > </span><span = > print</span><span = >(</span><span = > is not a string or number'</span><span = >)</span> <span = >end</span></code> class "pln" class "pun" class "str" 'hell class "kwd" case class "pln" class "pun" class "kwd" class </span> class "kwd" class "typ" String class "pln" class "pun" class "str" 'It class "pun" class "kwd" class "typ" Fixnum class "pln" class "pun" class "str" 'It class "pun" class "kwd" else class "pln" class "pun" class "str" 'It class "pun" class "kwd" Will print “It is not a string or number”. Fortunately, this is easily solved. The operator has been defined so that it returns if you use it with a class and supply an instance of that class as the second operand: === true <code> <span = >=== <span = > < span> Fixnum < = > span class "typ" </ > span class "pun" </ > span class "lit" 1 /span> <span class="com"># =&gt; true</ </ > code In short, the code above can be fixed by removing the : .class <code><span = >obj </span><span = >=</span> <span = > o'</span> <span = > </span><span = > obj </span><span = ># was obj. </span> <span = >when</span> <span = > </span><span = > print</span><span = >(</span><span = > is a string'</span><span = >)</span> <span = >when</span> <span = > </span><span = > print</span><span = >(</span><span = > is a number'</span><span = >)</span> <span = > </span><span = > print</span><span = >(</span><span = > is not a string or number'</span><span = >)</span> <span = >end</span></code> class "pln" class "pun" class "str" 'hell class "kwd" case class "pln" class "com" case class class "kwd" class "typ" String class "pln" class "pun" class "str" 'It class "pun" class "kwd" class "typ" Fixnum class "pln" class "pun" class "str" 'It class "pun" class "kwd" else class "pln" class "pun" class "str" 'It class "pun" class "kwd" 2. How to check if a value exists in an array in Ruby? Answer: You can use : include? <code><span = >&gt;&gt;</span> <span = >[</span><span = > </span><span = >,</span> <span = > </span><span = >,</span> <span = > </span><span = >].</span><span = >include</span><span = >?</span> <span = > </span> <span = >=&gt;</span> <span = > </span></code> class "pun" class "pun" class "str" 'Cat' class "pun" class "str" 'Dog' class "pun" class "str" 'Bird' class "pun" class "pln" class "pun" class "str" 'Dog' class "pun" class "kwd" true Alternative Answer: There is an in (part of Rails) since v3.1. So within Rails, or if you , you can write: method in? ActiveSupport require 'active_support' <code><span = > </span><span = >.</span><span = > </span><span = >?([</span><span = > </span><span = >,</span> <span = > </span><span = >,</span> <span = > </span><span = >])</span> <span = > class "str" 'Unicorn' class "pun" class "kwd" in class "pun" class "str" 'Cat' class "pun" class "str" 'Dog' class "pun" class "str" 'Bird' class "pun" class "com" # =&gt; false</span></code> On the other hand, there is no operator or ? method in Ruby itself, even though it has been proposed before, a top-notch member of ruby-core. in #in in particular by Yusuke Endoh On the other hand, the reverse method exists, for all s including , , , : include? Enumerable Array Hash Set Range <code><span = >[</span><span = > </span><span = >,</span> <span = > </span><span = >,</span> <span = > </span><span = >].</span><span = >include</span><span = >?(</span><span = > </span><span = >)</span> <span = > class "pun" class "str" 'Cat' class "pun" class "str" 'Dog' class "pun" class "str" 'Bird' class "pun" class "pln" class "pun" class "str" 'Unicorn' class "pun" class "com" # =&gt; false</span></code> Note that if you have many values in your array, they will all be checked one after the other (i.e. ), while that lookup for a hash will be constant time (i.e ). So if your array is constant, for example, it is a good idea to use a instead. E.g: O(n) O(1) Set <code><span = >require </span><span = > </span><span = > ALLOWED_METHODS </span><span = >=</span> <span = >Set</span><span = >[:</span><span = >to_s</span><span = >,</span> <span = >:</span><span = >to_i</span><span = >,</span> <span = >:</span><span = >upcase</span><span = >,</span> <span = >:</span><span = >downcase </span><span = > <span = >]</span> <span = >def</span><span = > foo</span><span = >(</span><span = >what</span><span = >)</span><span = > raise </span><span = > </span> <span = >unless</span><span = > ALLOWED_METHODS</span><span = >.</span><span = >include</span><span = >?(</span><span = >what</span><span = >.</span><span = >to_sym</span><span = >)</span><span = > bar</span><span = >.</span><span = >send</span><span = >(</span><span = >what</span><span = >)</span> <span = >end</span></code> class "pln" class "str" 'set' class "pln" class "pun" class "typ" class "pun" class "pln" class "pun" class "pun" class "pln" class "pun" class "pun" class "pln" class "pun" class "pun" class "pln" class "com" # etc</span> class "pun" class "kwd" class "pln" class "pun" class "pln" class "pun" class "pln" class "str" "Not allowed" class "kwd" class "pln" class "pun" class "pln" class "pun" class "pln" class "pun" class "pln" class "pun" class "pln" class "pun" class "pln" class "pun" class "pln" class "pun" class "kwd" A quick test reveals that calling on a 10 element is about 3.5x faster than calling it on the equivalent (if the element is not found). include? Set Array But, be wary when using on a , there are subtleties, so refer to and compare with include? Range the doc cover? 3. How to convert a string to a lower or upper case in Ruby? Answer: Ruby has a few methods for changing the case of strings. To convert to lowercase, use : downcase <code> "hello James!" < = > span class "str" </ > span . < = > span class "pun" </ > span downcase < = > span class "pln" </ > span #=&gt; "hello james!" < = > span class "com" </ > span </ > code Similarly, capitalizes every letter and capitalizes the first letter of the string but lowercases the rest: upcase capitalize <code> <span = > < span> <span = > < span> "hello James!" < = > span class "str" </ > span . < = > span class "pun" </ > span upcase < = > span class "pln" </ > span #=&gt; "HELLO JAMES!" < = > span class "com" </ > span class "str" "hello James!" /span><span class="pun">.</ capitalize < = > span class "pln" </ > span #=&gt; "Hello james!" < = > span class "com" </ > span class "str" "hello James!" /span><span class="pun">.</ titleize < = > span class "pln" </ > span #=&gt; "Hello James!" < = > span class "com" </ > span </ > code If you want to modify a string in place, you can add an exclamation point to any of those methods: <code><span = > </span><span = >=</span> <span = > </span><span = > </span><span = >.</span><span = >downcase</span><span = >!</span><span = > </span><span = > class "pln" string class "pun" class "str" "hello James!" class "pln" string class "pun" class "pln" class "pun" class "pln" string class "com" #=&gt; "hello james!"</span></code> Alternative Answer: You can find out all the methods available on a String by opening irb and running: <code> "MyString" < = > span class "str" </ > span . < = > span class "pun" </ > span methods < = > span class "pln" </ > span . < = > span class "pun" </ > span sort < = > span class "pln" </ > span </ > code And for a list of the methods available for strings in particular: <code> "MyString" < = > span class "str" </ > span . < = > span class "pun" </ > span own_methods < = > span class "pln" </ > span . < = > span class "pun" </ > span sort < = > span class "pln" </ > span </ > code 4. How to pass command-line arguments to a rake task? Answer: Options and dependencies need to be inside arrays: <code><span = >namespace </span><span = >:</span><span = >thing </span><span = >do</span><span = > desc </span><span = > </span><span = > task </span><span = >:</span><span = >work</span><span = >,</span> <span = >[:</span><span = >option</span><span = >,</span> <span = >:</span><span = >foo</span><span = >,</span> <span = >:</span><span = >bar</span><span = >]</span> <span = >do</span> <span = >|</span><span = >task</span><span = >,</span><span = > args</span><span = >|</span><span = > puts </span><span = > </span><span = >,</span><span = > args </span><span = >end</span><span = > task </span><span = >:</span><span = >another</span><span = >,</span> <span = >[:</span><span = >option</span><span = >,</span> <span = >:</span><span = >foo</span><span = >,</span> <span = >:</span><span = >bar</span><span = >]</span> <span = >do</span> <span = >|</span><span = >task</span><span = >,</span><span = > args</span><span = >|</span><span = > puts </span><span = > </span> <span = > </span><span = >::</span><span = > </span><span = >[</span><span = > </span><span = >].</span><span = >invoke</span><span = >(</span><span = >args</span><span = >[:</span><span = >option</span><span = >],</span><span = > args</span><span = >[:</span><span = >foo</span><span = >],</span><span = > args</span><span = >[:</span><span = >bar</span><span = >])</span> <span = ># or splat the args</span> <span = ># :: [ ].invoke(*args)</span> <span = >end</span> <span = >end</span></code> class "pln" class "pun" class "pln" class "kwd" class "pln" class "str" "it does a thing" class "pln" class "pun" class "pln" class "pun" class "pun" class "pln" class "pun" class "pun" class "pln" class "pun" class "pun" class "pln" class "pun" class "kwd" class "pun" class "pln" class "pun" class "pln" class "pun" class "pln" class "str" "work" class "pun" class "pln" class "kwd" class "pln" class "pun" class "pln" class "pun" class "pun" class "pln" class "pun" class "pun" class "pln" class "pun" class "pun" class "pln" class "pun" class "kwd" class "pun" class "pln" class "pun" class "pln" class "pun" class "pln" class "str" "another #{args}" class "typ" Rake class "pun" class "typ" Task class "pun" class "str" "thing:work" class "pun" class "pln" class "pun" class "pln" class "pun" class "pln" class "pun" class "pln" class "pun" class "pln" class "pun" class "pln" class "pun" class "pln" class "pun" class "com" class "com" Rake Task "thing:work" class "kwd" class "kwd" Then <code> <span = >=&gt; <span = >{: <span = >: <span = >: <span = >=&gt; <span = >: <span = >: <span = >=&gt; <span = >{: <span = >: <span = >: rake thing < = > span class "pln" </ > span : < = > span class "pun" </ > span work < = > span class "pln" </ > span [ < = > span class "pun" </ > span 1 < = > span class "lit" </ > span , < = > span class "pun" </ > span 2 < = > span class "lit" </ > span , < = > span class "pun" </ > span 3 < = > span class "lit" </ > span ] < = > span class "pun" </ > span class "pun" </ > span work < = > span class "pln" </ > span : < = > span class "pun" </ > span class "pun" </ > span option < = > span class "pln" </ > span =&gt; < = > span class "pun" </ > span "1" < = > span class "str" </ > span , < = > span class "pun" </ > span class "pun" </ > span foo < = > span class "pln" </ > span =&gt; < = > span class "pun" </ > span "2" < = > span class "str" </ > span , < = > span class "pun" </ > span class "pun" </ > span bar < = > span class "pln" </ > span =&gt; < = > span class "pun" </ > span "3" < = > span class "str" </ > span } < = > span class "pun" </ > span rake thing < = > span class "pln" </ > span : < = > span class "pun" </ > span another < = > span class "pln" </ > span [ < = > span class "pun" </ > span 1 < = > span class "lit" </ > span , < = > span class "pun" </ > span 2 < = > span class "lit" </ > span , < = > span class "pun" </ > span 3 < = > span class "lit" </ > span ] < = > span class "pun" </ > span class "pun" </ > span another < = > span class "pln" </ > span {: < = > span class "pun" </ > span option < = > span class "pln" </ > span =&gt; < = > span class "pun" </ > span "1" < = > span class "str" </ > span , < = > span class "pun" </ > span class "pun" </ > span foo < = > span class "pln" </ > span =&gt; < = > span class "pun" </ > span "2" < = > span class "str" </ > span , < = > span class "pun" </ > span class "pun" </ > span bar < = > span class "pln" </ > span =&gt; < = > span class "pun" </ > span "3" < = > span class "str" </ > span } < = > span class "pun" </ > span class "pun" </ > span work < = > span class "pln" </ > span : < = > span class "pun" </ > span class "pun" </ > span option < = > span class "pln" </ > span =&gt; < = > span class "pun" </ > span "1" < = > span class "str" </ > span , < = > span class "pun" </ > span class "pun" </ > span foo < = > span class "pln" </ > span =&gt; < = > span class "pun" </ > span "2" < = > span class "str" </ > span , < = > span class "pun" </ > span class "pun" </ > span bar < = > span class "pln" </ > span =&gt; < = > span class "pun" </ > span "3" < = > span class "str" </ > span } < = > span class "pun" </ > span </ > code NOTE: variable is the task object, not very helpful unless you know/care about Rake internals. task If running the task from rails, it is best to preload the environment by adding which is a way to set up tasks. Rails Note: => [:environment] dependent <code> <span = >[: <span = >: <span = >: <span = >=&gt; <span = >[: <span = > < span> task < = > span class "pln" </ > span : < = > span class "pun" </ > span work < = > span class "pln" </ > span , < = > span class "pun" </ > span class "pun" </ > span option < = > span class "pln" </ > span , < = > span class "pun" </ > span class "pun" </ > span foo < = > span class "pln" </ > span , < = > span class "pun" </ > span class "pun" </ > span bar < = > span class "pln" </ > span ] < = > span class "pun" </ > span class "pun" </ > span class "pun" </ > span environment < = > span class "pln" </ > span ] < = > span class "pun" </ > span class "kwd" do /span> <span class="pun">|</ task < = > span class "pln" </ > span , < = > span class "pun" </ > span args < = > span class "pln" </ > span | < = > span class "pun" </ > span puts < = > span class "pln" </ > span "work" < = > span class "str" </ > span , < = > span class "pun" </ > span args < = > span class "pln" </ > span end < = > span class "kwd" </ > span </ > code Alternative Answer: You can specify formal arguments in rake by adding symbol arguments to the task call. For example: require 'rake' task : my_task , [: arg1 , : arg2 ] do | t , args | puts "Args were: # < > code < = > span class "pln" </ > span < = > span class "str" </ > span < = > span class "pln" </ > span < = > span class "pun" </ > span < = > span class "pln" </ > span < = > span class "pun" </ > span < = > span class "pun" </ > span < = > span class "pln" </ > span < = > span class "pun" </ > span < = > span class "pun" </ > span < = > span class "pln" </ > span < = > span class "pun" </ > span < = > span class "kwd" </ > span < = > span class "pun" </ > span < = > span class "pln" </ > span < = > span class "pun" </ > span < = > span class "pln" </ > span < = > span class "pun" </ > span < = > span class "pln" </ > span < = > span class "str" {args} of class # {args.class} " puts "arg1 was: '# </ > span < = > span class "pln" </ > span < = > span class "str" {args[:arg1]} ' of class # {args[:arg1].class} " puts "arg2 was: '# </ > span < = > span class "pln" </ > span < = > span class "str" {args[:arg2]} ' of class # {args[:arg2].class} " end task : invoke_my_task do Rake . application . invoke_task ( "my_task[1, 2]" ) end # or if you prefer this syntax... task : invoke_my_task_2 do Rake :: Task [: my_task ]. invoke ( 3 , 4 ) end # a task with prerequisites passes its # arguments to it prerequisites task : with_prerequisite , [: arg1 , : arg2 ] =&gt; : my_task #&lt;- name of prerequisite task # to specify default values, # we take advantage of args being a Rake::TaskArguments object task : with_defaults , : arg1 , : arg2 do | t , args | args . with_defaults (: arg1 =&gt; : default_1 , : arg2 =&gt; : default_2 ) puts "Args with defaults were: # </ > span < = > span class "kwd" </ > span < = > span class "pln" </ > span < = > span class "pun" </ > span < = > span class "pln" </ > span < = > span class "kwd" </ > span < = > span class "typ" </ > span < = > span class "pun" </ > span < = > span class "pln" </ > span < = > span class "pun" </ > span < = > span class "pln" </ > span < = > span class "pun" </ > span < = > span class "str" </ > span < = > span class "pun" </ > span < = > span class "kwd" </ > span < = > span class "com" </ > span < = > span class "pln" </ > span < = > span class "pun" </ > span < = > span class "pln" </ > span < = > span class "kwd" </ > span < = > span class "typ" </ > span < = > span class "pun" </ > span < = > span class "typ" </ > span < = > span class "pun" </ > span < = > span class "pln" </ > span < = > span class "pun" </ > span < = > span class "pln" </ > span < = > span class "pun" </ > span < = > span class "lit" </ > span < = > span class "pun" </ > span < = > span class "lit" </ > span < = > span class "pun" </ > span < = > span class "kwd" </ > span < = > span class "com" </ > span < = > span class "com" </ > span < = > span class "pln" </ > span < = > span class "pun" </ > span < = > span class "pln" </ > span < = > span class "pun" </ > span < = > span class "pun" </ > span < = > span class "pln" </ > span < = > span class "pun" </ > span < = > span class "pun" </ > span < = > span class "pln" </ > span < = > span class "pun" </ > span < = > span class "pun" </ > span < = > span class "pun" </ > span < = > span class "pln" </ > span < = > span class "com" </ > span < = > span class "com" </ > span < = > span class "com" </ > span < = > span class "pln" </ > span < = > span class "pun" </ > span < = > span class "pln" </ > span < = > span class "pun" </ > span < = > span class "pun" </ > span < = > span class "pln" </ > span < = > span class "pun" </ > span < = > span class "pun" </ > span < = > span class "pln" </ > span < = > span class "kwd" </ > span < = > span class "pun" </ > span < = > span class "pln" </ > span < = > span class "pun" </ > span < = > span class "pln" </ > span < = > span class "pun" </ > span < = > span class "pln" </ > span < = > span class "pun" </ > span < = > span class "pln" </ > span < = > span class "pun" </ > span < = > span class "pln" </ > span < = > span class "pun" </ > span < = > span class "pun" </ > span < = > span class "pln" </ > span < = > span class "pun" </ > span < = > span class "pun" </ > span < = > span class "pln" </ > span < = > span class "pun" </ > span < = > span class "pun" </ > span < = > span class "pln" </ > span < = > span class "pun" </ > span < = > span class "pln" </ > span < = > span class "str" {args} " end </ > span < = > span class "kwd" </ > span </ > code Then, from the command line: &gt; rake my_task[ , ] Args { ; , ; } of arg1 of arg2 of &gt; rake Args { ; , ; } &gt; rake invoke_my_task Args { ; , ; } &gt; rake invoke_my_task_2 Args { ; , ; } &gt; rake with_prerequisite[ , ] Args { ; , ; } &gt; rake with_defaults Args with defaults { ; , ; } &gt; rake with_defaults[ , ] Args with defaults { ; , ; } 1 false were: :arg1=&gt "1" :arg2=&gt "false" class Rake::TaskArguments was: '1' class String was: 'false' class String "my_task[1, 2]" were: :arg1=&gt "1" :arg2=&gt "2" were: :arg1=&gt "1" :arg2=&gt "2" were: :arg1=&gt 3 :arg2=&gt 4 5 6 were: :arg1=&gt "5" :arg2=&gt "6" were: :arg1=&gt :default_1 :arg2=&gt :default_2 'x' 'y' were: :arg1=&gt "x" :arg2=&gt "y" As demonstrated in the second example, if you want to use spaces, the quotes around the target name are necessary to keep the shell from splitting up the arguments at the space. Looking at the code in , it appears that rake does not parse task strings to extract arguments for prerequisites, so you can’t do . The only way to specify different arguments for a prerequisite would be to invoke it explicitly within the dependent task action, as in and . rake.rb task :t1 => "dep[1,2]" :invoke_my_task :invoke_my_task_2 Note that some shells (like zsh) require you to escape the brackets: rake my_task\['arg1'\] 5. How to call shell commands from Ruby? Answer: First, note that when Ruby calls out to a shell, it typically calls , Bash. Some Bash syntax is not supported by on all systems. /bin/sh not /bin/sh Here are ways to execute a shell script: <code><span =" "> </ >< =" ">=</ > < =" ">" ' '"</ > < =" "># </ ></ > class pln cmd span span class pun span span class str echo hi span span class com Sample string that can be used span code , commonly called backticks – This is like many other languages, including Bash, PHP, and Perl. It returns the result (i.e. standard output) of the shell command. Docs: Kernel#` `cmd` http://ruby-doc.org/core/Kernel.html#method-i-60 <code><span =" "> </ > < =" ">=</ > < =" ">` ' '`</ > < =" "> </ > < =" ">=</ > < =" ">`#{cmd}`</span></code> class kwd value span span class pun span span class str echo hi span span class kwd value span span class pun span span class str Built-in syntax, Following the character is a delimiter, which can be any character. If the delimiter is one of the characters , , , or , the literal consists of the characters up to the matching closing delimiter, taking account of nested delimiter pairs. For all other delimiters, the literal comprises the characters up to the next occurrence of the delimiter character. String interpolation is allowed. It returns the result (i.e. standard output) of the shell command, just like the backticks. Docs: %x( cmd ) x ( [ { < #{ ... } http://www.ruby-doc.org/docs/ProgrammingRuby/html/language.html <code><span =" "> </ > < =" ">=</ > < =" ">%</ >< =" "> </ >< =" ">(</ >< =" "> </ >< =" ">' '</ > < =" ">)</ > < =" "> </ > < =" ">=</ > < =" ">%</ >< =" "> </ >< =" ">[</ > < =" ">#{cmd} ]</span></code> class kwd value span span class pun span span class pun span span class pln x span span class pun span span class pln echo span span class str hi span span class pun span span class kwd value span span class pun span span class pun span span class pln x span span class pun span span class com Executes the given command in a subshell. Returns if the command was found and run successfully, otherwise. Docs: Kernel#system true false http://ruby-doc.org/core/Kernel.html#method-i-system <code><span =" "> </ >< =" ">=</ >< =" "> </ >< =" ">(</ > < =" ">" ' '"</ > < =" ">)</ >< =" "> </ >< =" ">=</ >< =" "> </ >< =" ">(</ >< =" "> </ >< =" ">)</ ></ > class pln wasGood span span class pun span span class pln system span span class pun span span class str echo hi span span class pun span span class pln wasGood span span class pun span span class pln system span span class pun span span class pln cmd span span class pun span code Replaces the current process by running the given external command. Returns none, the current process is replaced and never continues. Docs: Kernel#exec http://ruby-doc.org/core/Kernel.html#method-i-exec <code><span =" "> </ >< =" ">(</ > < =" ">" ' '"</ > < =" ">)</ > < =" "> </ >< =" ">(</ >< =" "> </ >< =" ">)</ > < =" "># </ ></ > class kwd exec span span class pun span span class str echo hi span span class pun span span class kwd exec span span class pun span span class pln cmd span span class pun span span class com Note: this will never be reached because of the line above span code Here’s some extra advice: , which is the same as , accesses the status of the last system executed command if you use the backticks, or . You can then access the and properties: $? $CHILD_STATUS system() %x{} exitstatus pid <code> $ < = > span class "pln" </ > span ?. < = > span class "pun" </ > span exitstatus < = > span class "pln" </ > span </ > code Alternative Answer: Using the literal, which makes it easy (and readable!) to use quotes in a command, like so: %x <code> <span = >% <span = >- <span = >| directorylist < = > span class "pln" </ > span = < = > span class "pun" </ > span class "pun" </ > span x < = > span class "pln" </ > span [ < = > span class "pun" </ > span find < = > span class "pln" </ > span . < = > span class "pun" </ > span class "pun" </ > span name < = > span class "pln" </ > span '*test.rb' < = > span class "str" </ > span class "pun" </ > span sort < = > span class "pln" </ > span ] < = > span class "pun" </ > span </ > code Which, in this case, will populate file list with all test files under the current directory, which you can process as expected: directorylist . each do | filename | filename . chomp ! # work with file end < > code < = > span class "pln" </ > span < = > span class "pun" </ > span < = > span class "pln" </ > span < = > span class "kwd" </ > span < = > span class "pun" </ > span < = > span class "pln" </ > span < = > span class "pun" </ > span < = > span class "pln" </ > span < = > span class "pun" </ > span < = > span class "pln" </ > span < = > span class "pun" </ > span < = > span class "com" </ > span < = > span class "kwd" </ > span </ > code 6. How to make –no-ri –no-rdoc the default for gem install? Answer: You just add the following line to your local file (it is in your folder): ~/.gemrc home <code> <span = >-- gem < = > span class "pln" </ > span : < = > span class "pun" </ > span class "pun" </ > span no < = > span class "pln" </ > span - < = > span class "pun" </ > span document < = > span class "pln" </ > span </ > code or you can add this line to the global config file. gemrc Here is how to find it (in Linux): <code> <span = >| strace gem source < = > span class "pln" </ > span 2 < = > span class "lit" </ > span &gt;&amp; < = > span class "pun" </ > span 1 < = > span class "lit" </ > span class "pun" </ > span grep gemrc < = > span class "pln" </ > span </ > code Alternative Answers: 1) From : RVM’s documentation Just add this line to your or : ~/.gemrc /etc/gemrc <code> <span = >-- gem < = > span class "pln" </ > span : < = > span class "pun" </ > span class "pun" </ > span no < = > span class "pln" </ > span - < = > span class "pun" </ > span rdoc < = > span class "pln" </ > span -- < = > span class "pun" </ > span no < = > span class "pln" </ > span - < = > span class "pun" </ > span ri < = > span class "pln" </ > span </ > code The original answer was: Note: <code> <span = >-- <span = >-- install < = > span class "pln" </ > span : < = > span class "pun" </ > span class "pun" </ > span no < = > span class "pln" </ > span - < = > span class "pun" </ > span rdoc < = > span class "pln" </ > span -- < = > span class "pun" </ > span no < = > span class "pln" </ > span - < = > span class "pun" </ > span ri update < = > span class "pln" </ > span : < = > span class "pun" </ > span class "pun" </ > span no < = > span class "pln" </ > span - < = > span class "pun" </ > span rdoc < = > span class "pln" </ > span -- < = > span class "pun" </ > span no < = > span class "pln" </ > span - < = > span class "pun" </ > span ri < = > span class "pln" </ > span </ > code This is no longer valid; the RVM docs have since been updated, thus the current answer to only include the directive is the correct one. gem 2) Note that and have been deprecated according to the new . The recommended way is to use in or . --no-ri --no-rdoc guides --no-document ~/.gemrc /etc/gemrc <code> <span = >-- <span = >-- install < = > span class "pln" </ > span : < = > span class "pun" </ > span class "pun" </ > span no < = > span class "pln" </ > span - < = > span class "pun" </ > span document update < = > span class "pln" </ > span : < = > span class "pun" </ > span class "pun" </ > span no < = > span class "pln" </ > span - < = > span class "pun" </ > span document < = > span class "pln" </ > span </ > code or <code> <span = >-- gem < = > span class "pln" </ > span : < = > span class "pun" </ > span class "pun" </ > span no < = > span class "pln" </ > span - < = > span class "pun" </ > span document < = > span class "pln" </ > span </ > code 7. What is attr_accessor in Ruby? Answer: Let’s say you have a class . Person class Person end person = Person . new person . name # =&gt; no method error < > code < = > span class "kwd" </ > span < = > span class "typ" </ > span < = > span class "kwd" </ > span < = > span class "pln" </ > span < = > span class "pun" </ > span < = > span class "typ" </ > span < = > span class "pun" </ > span < = > span class "pln" </ > span < = > span class "pun" </ > span < = > span class "pln" </ > span < = > span class "com" </ > span </ > code Obviously we never defined method . Let’s do that. name class Person def name @name # simply returning an instance variable @name end end person = Person . new person . name # =&gt; nil person . name = "Dennis" # =&gt; no method error < > code < = > span class "kwd" </ > span < = > span class "typ" </ > span < = > span class "kwd" </ > span < = > span class "pln" </ > span < = > span class "lit" </ > span < = > span class "com" </ > span < = > span class "kwd" </ > span < = > span class "kwd" </ > span < = > span class "pln" </ > span < = > span class "pun" </ > span < = > span class "typ" </ > span < = > span class "pun" </ > span < = > span class "pln" </ > span < = > span class "pun" </ > span < = > span class "pln" </ > span < = > span class "com" </ > span < = > span class "pln" </ > span < = > span class "pun" </ > span < = > span class "pln" </ > span < = > span class "pun" </ > span < = > span class "str" </ > span < = > span class "com" </ > span </ > code We can read the name, but that doesn’t mean we can assign the name. Those are two different methods. The former is called and the latter is called . We didn’t create the writer yet so let’s do that. reader writer class Person def name @name end def name =( str ) @name = str end end person = Person . new person . name = 'Dennis' person . name # =&gt; "Dennis" < > code < = > span class "kwd" </ > span < = > span class "typ" </ > span < = > span class "kwd" </ > span < = > span class "pln" </ > span < = > span class "lit" </ > span < = > span class "kwd" </ > span < = > span class "kwd" </ > span < = > span class "pln" </ > span < = > span class "pun" </ > span < = > span class "pln" </ > span < = > span class "pun" </ > span < = > span class "lit" </ > span < = > span class "pun" </ > span < = > span class "pln" </ > span < = > span class "kwd" </ > span < = > span class "kwd" </ > span < = > span class "pln" </ > span < = > span class "pun" </ > span < = > span class "typ" </ > span < = > span class "pun" </ > span < = > span class "pln" </ > span < = > span class "pun" </ > span < = > span class "pln" </ > span < = > span class "pun" </ > span < = > span class "str" </ > span < = > span class "pln" </ > span < = > span class "pun" </ > span < = > span class "pln" </ > span < = > span class "com" </ > span </ > code Now we can write and read instance variable using reader and writer methods. Except, this is done so frequently, why waste time writing these methods every time? We can do it easier. @name <code><span =" "> </ > < =" "> </ >< =" "> </ >< =" ">:</ >< =" "> </ >< =" ">:</ >< =" "> </ >< =" "> </ ></ > class kwd class span span class typ Person span span class pln attr_reader span span class pun span span class pln name attr_writer span span class pun span span class pln name span span class kwd end span code Even this can get repetitive. When you want both reader and writer just use accessor! class Person attr_accessor : name end person = Person . new person . name = "Dennis" person . name # =&gt; "Dennis" < > code < = > span class "kwd" </ > span < = > span class "typ" </ > span < = > span class "pln" </ > span < = > span class "pun" </ > span < = > span class "pln" </ > span < = > span class "kwd" </ > span < = > span class "pln" </ > span < = > span class "pun" </ > span < = > span class "typ" </ > span < = > span class "pun" </ > span < = > span class "pln" </ > span < = > span class "pun" </ > span < = > span class "pln" </ > span < = > span class "pun" </ > span < = > span class "str" </ > span < = > span class "pln" </ > span < = > span class "pun" </ > span < = > span class "pln" </ > span < = > span class "com" </ > span </ > code Works the same way! And guess what: the instance variable in our person object will be set just like when we did it manually, so you can use it in other methods. @name class Person attr_accessor : name def greeting "Hello # < > code < = > span class "kwd" </ > span < = > span class "typ" </ > span < = > span class "pln" </ > span < = > span class "pun" </ > span < = > span class "pln" </ > span < = > span class "kwd" </ > span < = > span class "pln" </ > span < = > span class "str" {@name} " end end person = Person . new person . name = "Dennis" person . greeting # =&gt; "Hello Dennis" </ > span < = > span class "kwd" </ > span < = > span class "kwd" </ > span < = > span class "pln" </ > span < = > span class "pun" </ > span < = > span class "typ" </ > span < = > span class "pun" </ > span < = > span class "pln" </ > span < = > span class "pun" </ > span < = > span class "pln" </ > span < = > span class "pun" </ > span < = > span class "str" </ > span < = > span class "pln" </ > span < = > span class "pun" </ > span < = > span class "pln" </ > span < = > span class "com" </ > span </ > code Alternative Answer: is . attr_accessor just a method The trick is that is in Ruby (it is “just a definition” in languages like C++ and Java), but it is an . It is during this evaluation when the method is invoked which in turn modifies the current class – remember the implicit receiver: , where is the “open” class object at this point. class not a definition expression that evaluates attr_accessor self.attr_accessor self The need for , is, well: attr_accessor Ruby, like Smalltalk, does not allow instance variables to be accessed outside of methods for that object. That is, instance variables cannot be accessed in the form as is common in say, Java or even Python. In Ruby is always taken as a message to send (or “method to call”). Thus the methods create wrappers which proxy the instance access through dynamically created methods. x.y y attr_* @variable 8. Why is it bad style to `rescue Exception => e` in Ruby? Answer: Use instead for general exception catching. When the original exception is re-raised (e.g. when rescuing to log the exception only), rescuing is probably okay. StandardError Exception is the root of , so when you you rescue from , including subclasses such as , , and . Exception Ruby’s exception hierarchy rescue Exception everything SyntaxError LoadError Interrupt Rescuing prevents the user from using CTRLC to exit the program. Interrupt Rescuing prevents the program from responding correctly to signals. It will be unkillable except by . SignalException kill -9 Rescuing means that s that fail will do so silently. SyntaxError eval All of these can be shown by running this program, and trying to or it: CTRLC kill <code><span =" "> </ >< =" "> </ > < =" "> </ >< =" "> </ >< =" "> </ >< =" "> </ >< =" ">" += "</ > < =" "> </ > < =" "> </ >< =" "> </ >< =" ">" !"</ > < =" "> </ > < =" "> </ ></ > class pln loop span span class kwd do span span class kwd begin span span class pln sleep span span class lit 1 span span class pln eval span span class str djsakru3924r9eiuorwju3498 5u84fior8u8t4ruyf8ihiure span span class kwd rescue span span class typ Exception span span class pln puts span span class str I refuse to fail or be stopped span span class kwd end span span class kwd end span code Rescuing from isn’t even the default. Doing Exception <code><span =" "> </ > < =" "># !</ > < =" "> </ > < =" "># </ > < =" "> </ ></ > class kwd begin span span class com iceberg span span class kwd rescue span span class com lifeboats span span class kwd end span code does not rescue from , it rescues from . You should generally specify something more specific than the default , but rescuing from the scope rather than narrowing it, and can have catastrophic results and make bug-hunting extremely difficult. Exception StandardError StandardError Exception broadens If you have a situation where you do want to rescue from and you need a variable with the exception, you can use this form: StandardError begin # iceberg! rescue =&gt; e # lifeboats end < > code < = > span class "kwd" </ > span < = > span class "com" </ > span < = > span class "kwd" </ > span < = > span class "pun" </ > span < = > span class "pln" </ > span < = > span class "com" </ > span < = > span class "kwd" </ > span </ > code which is equivalent to: begin # iceberg! rescue StandardError =&gt; e # lifeboats end < > code < = > span class "kwd" </ > span < = > span class "com" </ > span < = > span class "kwd" </ > span < = > span class "typ" </ > span < = > span class "pun" </ > span < = > span class "pln" </ > span < = > span class "com" </ > span < = > span class "kwd" </ > span </ > code One of the few common cases where it’s sane to rescue from is for logging/reporting purposes, in which case you should immediately re-raise the exception: Exception begin # iceberg? rescue Exception =&gt; e # do some logging raise # not enough lifeboats ;) end < > code < = > span class "kwd" </ > span < = > span class "com" </ > span < = > span class "kwd" </ > span < = > span class "typ" </ > span < = > span class "pun" </ > span < = > span class "pln" </ > span < = > span class "com" </ > span < = > span class "pln" </ > span < = > span class "com" </ > span < = > span class "kwd" </ > span </ > code Alternative Answer: The rule is: Don’t throw away exceptions. The objectivity of the author of your quote is questionable, as evidenced by the fact that it ends with real or I will stab you Of course, be aware that signals (by default) throw exceptions, and normally long-running processes are terminated through a signal, so catching Exception and not terminating on signal exceptions will make your program very hard to stop. So don’t do this: <code><span = > <span = > </span> <span = > </span> <span = > </span> <span = >begin</span><span = > line </span><span = >=</span><span = > STDIN</span><span = >.</span><span = >gets </span><span = > <span = >rescue</span> <span = >Exception</span> <span = >=&gt;</span><span = > e puts </span><span = > </span> <span = >end</span> <span = >end</span></code> class "com" #! /usr/bin/ruby</span> class "kwd" while class "kwd" true class "kwd" do class "kwd" class "pln" class "pun" class "pln" class "pun" class "pln" class "com" # heavy processing</span> class "kwd" class "typ" class "pun" class "pln" class "str" "caught exception #{e}! ohnoes!" class "kwd" class "kwd" No, really, don’t do it. Don’t even run that to see if it works. However, say you have a threaded server and you want all exceptions to not: be ignored (the default) stop the server (which happens if you say ). thread.abort_on_exception = true Then this is perfectly acceptable in your connection handling thread: <code><span = >begin</span> <span = > <span = >rescue</span> <span = >Exception</span> <span = >=&gt;</span><span = > e myLogger</span><span = >.</span><span = >error</span><span = >(</span><span = > </span><span = >)</span><span = > myLogger</span><span = >.</span><span = >error</span><span = >(</span><span = > </span> <span = > <span = >end</span></code> class "kwd" class "com" # do stuff</span> class "kwd" class "typ" class "pun" class "pln" class "pun" class "pln" class "pun" class "str" "uncaught #{e} exception while handling connection: #{e.message}" class "pun" class "pln" class "pun" class "pln" class "pun" class "str" "Stack trace: #{backtrace.map {|l| " class "com" #{l}\n"}.join}")</span> class "kwd" The above works out to a variation of Ruby’s default exception handler, with the advantage that it doesn’t also kill your program. Rails does this in its request handler. Signal exceptions are raised in the main thread. Background threads won’t get them, so there is no point in trying to catch them there. This is particularly useful in a production environment, where you do want your program to simply stop whenever something goes wrong. Then you can take the stack dumps in your logs and add to your code to deal with specific exception further down the call chain and in a more graceful manner. not Note also that there is another Ruby idiom which has much the same effect: <code><span =" "> </ >< =" ">=</ >< =" "> </ >< =" "> </ > < =" ">" "</ ></ > class pln a span span class pun span span class pln do_something span span class kwd rescue span span class str something else span code In this line, if raises an exception, it is caught by Ruby, thrown away, and is assigned . do_something a "something else" Generally, don’t do that, except in special cases where you you don’t need to worry. One example: know <code><span =" "> </ >< =" "> </ > < =" "> </ ></ > class pln debugger span span class kwd rescue span span class kwd nil span code The function is a rather nice way to set a breakpoint in your code, but if running outside a debugger, and Rails, it raises an exception. Now theoretically you shouldn’t be leaving debug code lying around in your program but you might want to keep it there for a while for some reason, but not continually run your debugger. debugger Note: If you’ve run someone else’s program that catches signal exceptions and ignores them, (say the code above) then: i. In Linux, in a shell, type , or , look for your offending program’s PID, and then run . ii. In Windows, use the Task Manager ( go to the “processes” tab, find your process, right-click it, and select “End process”. pgrep ruby ps | grep ruby kill -9 <PID> CTRL–SHIFT–ESC), If you are working with someone else’s program which is, for whatever reason, peppered with these ignore-exception blocks, then putting this at the top of the mainline is one possible cop-out: <code> <span = >| <span = >}< code> % < = > span class "pun" </ > span W < = > span class "pln" </ > span / < = > span class "pun" </ > span INT QUIT TERM < = > span class "pln" </ > span /. < = > span class "pun" </ > span each < = > span class "pln" </ > span { < = > span class "pun" </ > span class "pun" </ > span sig < = > span class "pln" </ > span | < = > span class "pun" </ > span trap sig < = > span class "pln" </ > span , < = > span class "pun" </ > span "SYSTEM_DEFAULT" < = > span class "str" </ > span class "pun" /span></ This causes the program to respond to the normal termination signals by immediately terminating, bypassing exception handlers, . So it could cause data loss or similar. Be careful! with no cleanup If you need to do this: <code> <span = >Exception< span> begin < = > span class "kwd" </ > span do_something < = > span class "pln" </ > span rescue < = > span class "kwd" </ > span class "typ" /span> <span class="pun">=&gt;</ e critical_cleanup raise < = > span class "pln" </ > span end < = > span class "kwd" </ > span </ > code you can actually do this: <code><span =" "> </ >< =" "> </ >< =" "> </ >< =" "> </ >< =" "> </ ></ > class kwd begin span span class pln do_something span span class kwd ensure span span class pln critical_cleanup span span class kwd end span code In the second case, will be called every time, whether or not an exception is thrown. critical cleanup 9. How to install a specific version of a ruby gem? Answer: Use the flag: -v <code> $ gem install fog < = > span class "pln" </ > span - < = > span class "pun" </ > span v < = > span class "pln" </ > span 1.8 < = > span class "lit" </ > span </ > code Alternative Answer: Use the parameter (shortcut -v): --version <code> $ gem install rails < = > span class "pln" </ > span - < = > span class "pun" </ > span v < = > span class "pln" </ > span 0.14 < = > span class "lit" </ > span . < = > span class "pun" </ > span 1 < = > span class "lit" </ > span </ > code You can also use version comparators like or >= ~> <code> $ gem install rails < = > span class "pln" </ > span - < = > span class "pun" </ > span v < = > span class "pln" </ > span '~&gt; 0.14.0' < = > span class "str" </ > span </ > code Or with newer versions of even: gem $ gem install rails : 0.14 . 4 rubyzip : '&lt; 1' … Successfully installed rails - 0.14 . 4 Successfully installed rubyzip - 0.9 . 9 < > code < = > span class "pln" </ > span < = > span class "pun" </ > span < = > span class "lit" </ > span < = > span class "pun" </ > span < = > span class "lit" </ > span < = > span class "pln" </ > span < = > span class "pun" </ > span < = > span class "str" </ > span < = > span class "pun" </ > span < = > span class "typ" </ > span < = > span class "pln" </ > span < = > span class "pun" </ > span < = > span class "lit" </ > span < = > span class "pun" </ > span < = > span class "lit" </ > span < = > span class "typ" </ > span < = > span class "pln" </ > span < = > span class "pun" </ > span < = > span class "lit" </ > span < = > span class "pun" </ > span < = > span class "lit" </ > span </ > code 10. What does do in ? class << self Ruby Answer: First, the syntax opens up ‘s singleton class (eigenclass). This allows you to specialize the behavior of methods called on that specific object. class << foo foo <code><span = >a </span><span = >=</span> <span = > o'</span> <span = > ;&lt;</span><span = > a </span><span = > </span><span = >' '</span> <span = >end</span> <span = >end</span><span = > a</span><span = >.</span><span = >inspect </span><span = ># =&gt; </span><span = > a </span><span = >=</span> <span = > o'</span> <span = ># a</span><span = >.</span><span = >inspect </span><span = ># =&gt; </span></code> class "pln" class "pun" class "str" 'fo class "kwd" " " class </span> <span class= pun >&lt class "pln" class "kwd" " " def </span><span class= pln > inspect class "str" "bar" class "kwd" class "kwd" class "pln" class "pun" class "pln" class "com" "bar" class "pln" class "pun" class "str" 'fo class "com" new , " " object new singleton class</span><span class= pln > class "pun" class "pln" class "com" "foo" Now, to answer the question: opens up ‘s singleton class, so that methods can be redefined for the current object (which inside a class or module body is the class or module ). Usually, this is used to define class/module (“static”) methods: class << self self self itself class String class &lt;&lt; self def value_of obj obj . to_s end end end String . value_of 42 # =&gt; "42" < > code < = > span class "kwd" </ > span < = > span class "typ" </ > span < = > span class "kwd" </ > span < = > span class "pun" </ > span < = > span class "kwd" </ > span < = > span class "kwd" </ > span < = > span class "pln" </ > span < = > span class "pun" </ > span < = > span class "pln" </ > span < = > span class "kwd" </ > span < = > span class "kwd" </ > span < = > span class "kwd" </ > span < = > span class "typ" </ > span < = > span class "pun" </ > span < = > span class "pln" </ > span < = > span class "lit" </ > span < = > span class "com" </ > span </ > code This can also be written as a shorthand: class String def self . value_of obj obj . to_s end end < > code < = > span class "kwd" </ > span < = > span class "typ" </ > span < = > span class "kwd" </ > span < = > span class "kwd" </ > span < = > span class "pun" </ > span < = > span class "pln" </ > span < = > span class "pun" </ > span < = > span class "pln" </ > span < = > span class "kwd" </ > span < = > span class "kwd" </ > span </ > code Or even shorter: <code> <span = > < span> def < = > span class "kwd" </ > span class "typ" String /span><span class="pun">.</ value_of obj obj < = > span class "pln" </ > span . < = > span class "pun" </ > span to_s < = > span class "pln" </ > span end < = > span class "kwd" </ > span </ > code When inside a function definition, refers to the object the function is being called with. In this case, opens the singleton class for that object; one use of that is to implement a poor man’s state machine: self class << self class StateMachineExample def process obj process_hook obj end private def process_state_1 obj # ... class &lt;&lt; self alias process_hook process_state_2 end end def process_state_2 obj # ... class &lt;&lt; self alias process_hook process_state_1 end end # Set up initial state alias process_hook process_state_1 end < > code < = > span class "kwd" </ > span < = > span class "typ" </ > span < = > span class "kwd" </ > span < = > span class "pln" </ > span < = > span class "kwd" </ > span < = > span class "pln" </ > span < = > span class "kwd" </ > span < = > span class "pln" </ > span < = > span class "com" </ > span < = > span class "kwd" </ > span < = > span class "pun" </ > span < = > span class "kwd" </ > span < = > span class "kwd" </ > span < = > span class "pln" </ > span < = > span class "kwd" </ > span < = > span class "kwd" </ > span < = > span class "kwd" </ > span < = > span class "pln" </ > span < = > span class "com" </ > span < = > span class "kwd" </ > span < = > span class "pun" </ > span < = > span class "kwd" </ > span < = > span class "kwd" </ > span < = > span class "pln" </ > span < = > span class "kwd" </ > span < = > span class "kwd" </ > span < = > span class "com" </ > span < = > span class "kwd" </ > span < = > span class "pln" </ > span < = > span class "kwd" </ > span </ > code So, in the example above, each instance of has aliased to , but note how in the latter, it can redefine (for only, not affecting other instances) to . So, each time a caller calls the method (which calls the redefinable ), the behavior changes depending on what state it’s in. StateMachineExample process_hook process_state_1 process_hook self StateMachineExample process_state_2 process process_hook Alternative Answer: In Ruby, there are three types of methods that can be applied to a class: Instance methods Singleton methods Class methods Instance methods and class methods are almost similar to their homonymous in other programming languages. class Foo def an_instance_method puts "I am an instance method" end def self . a_class_method puts "I am a class method" end end foo = Foo . new def foo . a_singleton_method puts "I am a singletone method" end < > code < = > span class "kwd" </ > span < = > span class "typ" </ > span < = > span class "kwd" </ > span < = > span class "pln" </ > span < = > span class "str" </ > span < = > span class "kwd" </ > span < = > span class "kwd" </ > span < = > span class "kwd" </ > span < = > span class "pun" </ > span < = > span class "pln" </ > span < = > span class "str" </ > span < = > span class "kwd" </ > span < = > span class "kwd" </ > span < = > span class "pln" </ > span < = > span class "pun" </ > span < = > span class "typ" </ > span < = > span class "pun" </ > span < = > span class "pln" </ > span < = > span class "kwd" </ > span < = > span class "pln" </ > span < = > span class "pun" </ > span < = > span class "pln" </ > span < = > span class "str" </ > span < = > span class "kwd" </ > span </ > code Another way of accessing an (which includes singleton methods) is with the following syntax ( ): Eigenclass class << foo = Foo . new class &lt;&lt; foo def a_singleton_method puts "I am a singleton method" end end < > code < = > span class "pln" </ > span < = > span class "pun" </ > span < = > span class "typ" </ > span < = > span class "pun" </ > span < = > span class "pln" </ > span < = > span class "kwd" </ > span < = > span class "pun" </ > span < = > span class "pln" </ > span < = > span class "kwd" </ > span < = > span class "pln" </ > span < = > span class "str" </ > span < = > span class "kwd" </ > span < = > span class "kwd" </ > span </ > code Now you can define a singleton method for which is the class itself in this context: self Foo class Foo class &lt;&lt; self def a_singleton_and_class_method puts "I am a singleton method for self and a class method for Foo" end end end < > code < = > span class "kwd" </ > span < = > span class "typ" </ > span < = > span class "kwd" </ > span < = > span class "pun" </ > span < = > span class "kwd" </ > span < = > span class "kwd" </ > span < = > span class "pln" </ > span < = > span class "str" </ > span < = > span class "kwd" </ > span < = > span class "kwd" </ > span < = > span class "kwd" </ > span </ > code 11. What does %w(array) mean? Answer: is a shortcut for . Meaning it’s a notation to write an array of strings separated by spaces instead of commas and without quotes around them. You can find a list of ways of writing literals in . %w(foo bar) ["foo", "bar"] zenspider’s quickref Alternative Answer: is a “word array” – the elements are delimited by spaces and it returns an array of strings. %w() There are other % literals: is another way to write a regular expression. %r() is another way to write a single-quoted string (and can be multi-line, which is useful) %q() gives a double-quoted string %Q() is a shell command %x() gives an array of symbols (Ruby >= 2.0.0) %i() turns into a symbol ( ) %s() foo :foo 12. How to generate a random string in Ruby? Answer: <code> <span = >( <span = >+ ( < = > span class "pun" </ > span 0. < = > span class "lit" </ > span .. < = > span class "pun" </ > span 8 < = > span class "lit" </ > span ). < = > span class "pun" </ > span map < = > span class "pln" </ > span { < = > span class "pun" </ > span class "pun" </ > span 65 < = > span class "lit" </ > span class "pun" </ > span rand < = > span class "pln" </ > span ( < = > span class "pun" </ > span 26 < = > span class "lit" </ > span )). < = > span class "pun" </ > span chr < = > span class "pln" </ > span }. < = > span class "pun" </ > span join < = > span class "pln" </ > span </ > code <code> <span = >( <span = >}.< span> ( < = > span class "pun" </ > span 0. < = > span class "lit" </ > span .. < = > span class "pun" </ > span 50 < = > span class "lit" </ > span ). < = > span class "pun" </ > span map < = > span class "pln" </ > span { < = > span class "pun" </ > span class "pun" </ > span 'a' < = > span class "str" </ > span .. < = > span class "pun" </ > span 'z' < = > span class "str" </ > span ). < = > span class "pun" </ > span to_a < = > span class "pln" </ > span [ < = > span class "pun" </ > span rand < = > span class "pln" </ > span ( < = > span class "pun" </ > span 26 < = > span class "lit" </ > span )] < = > span class "pun" </ > span class "pun" /span><span class="pln">join</ </ > code And the last one that’s even more confusing, but more flexible and wastes fewer cycles: <code> <span = >[( <span = >( <span = >( <span = >}.< span> o < = > span class "pln" </ > span = < = > span class "pun" </ > span class "pun" </ > span 'a' < = > span class "str" </ > span .. < = > span class "pun" </ > span 'z' < = > span class "str" </ > span ), < = > span class "pun" </ > span class "pun" </ > span 'A' < = > span class "str" </ > span .. < = > span class "pun" </ > span 'Z' < = > span class "str" </ > span )]. < = > span class "pun" </ > span map < = > span class "pln" </ > span (&amp;: < = > span class "pun" </ > span to_a < = > span class "pln" </ > span ). < = > span class "pun" </ > span flatten string < = > span class "pln" </ > span = < = > span class "pun" </ > span class "pun" </ > span 0. < = > span class "lit" </ > span .. < = > span class "pun" </ > span 50 < = > span class "lit" </ > span ). < = > span class "pun" </ > span map < = > span class "pln" </ > span { < = > span class "pun" </ > span o < = > span class "pln" </ > span [ < = > span class "pun" </ > span rand < = > span class "pln" </ > span ( < = > span class "pun" </ > span o < = > span class "pln" </ > span . < = > span class "pun" </ > span length < = > span class "pln" </ > span )] < = > span class "pun" </ > span class "pun" /span><span class="pln">join</ </ > code Alternative Answer: <code> <span = >SecureRandom< span> require < = > span class "pln" </ > span 'securerandom' < = > span class "str" </ > span random_string < = > span class "pln" </ > span = < = > span class "pun" </ > span class "typ" /span><span class="pun">.</ hex < = > span class "pln" </ > span # outputs: 5b5cd0da3121fc53b4bc84d0c8af2e81 (i.e. 32 chars of 0..9, a..f) < = > span class "com" </ > span </ > code SecureRandom also has methods for: base64 random_bytes random_number 13. How to check whether a string contains a substring in Ruby? Answer: You can use the method: include? <code><span = >my_string </span><span = >=</span> <span = > </span> <span = > </span><span = > my_string</span><span = >.</span><span = >include</span><span = >?</span> <span = > </span><span = > puts </span><span = > </span> <span = >end</span></code> class "pln" class "pun" class "str" "abcdefg" class "kwd" if class "pln" class "pun" class "pln" class "pun" class "str" "cde" class "pln" class "str" "String includes 'cde'" class "kwd" Alternative Answer: If the case is irrelevant, then a is a good solution: case-insensitive regular expression <code><span =" ">' '</ > < =" ">=~</ > < =" ">/</ >< =" "> </ >< =" ">/</ >< =" "> </ >< =" "># </ ></ > class str aBcDe span span class pun span span class pun span span class pln bcd span span class pun span span class pln i span span class com evaluates as true span code This will also work for multi-line strings. 14. Multi-Line Comments in Ruby? Answer: #!/usr/bin/env ruby = begin Every body mentioned this way to have multiline comments . The = begin and = end must be at the beginning of the line or it will be a syntax error . = end puts "Hello world!" &lt;&lt;- DOC Also , you could create a docstring . which ... DOC puts "Hello world!" "..is kinda ugly and creates a String instance, but I know one guy with a Smalltalk background, who does this." puts "Hello world!" ## # most # people # do # this < > code < = > span class "com" </ > span < = > span class "pun" </ > span < = > span class "kwd" </ > span < = > span class "typ" </ > span < = > span class "pln" </ > span < = > span class "pun" </ > span < = > span class "typ" </ > span < = > span class "pun" </ > span < = > span class "kwd" </ > span < = > span class "kwd" </ > span < = > span class "pun" </ > span < = > span class "kwd" </ > span < = > span class "pln" </ > span < = > span class "kwd" </ > span < = > span class "pln" </ > span < = > span class "pun" </ > span < = > span class "pun" </ > span < = > span class "kwd" </ > span < = > span class "pln" </ > span < = > span class "str" </ > span < = > span class "pun" </ > span < = > span class "pln" </ > span < = > span class "typ" </ > span < = > span class "pun" </ > span < = > span class "pln" </ > span < = > span class "pun" </ > span < = > span class "pln" </ > span < = > span class "pun" </ > span < = > span class "pln" </ > span < = > span class "str" </ > span < = > span class "str" </ > span < = > span class "pln" </ > span < = > span class "str" </ > span < = > span class "com" </ > span < = > span class "com" </ > span < = > span class "com" </ > span < = > span class "com" </ > span < = > span class "com" </ > span </ > code Alternative Answer: <code><span =" ">=</ >< =" "> </ > < =" "> </ >< =" "> </ >< =" ">=</ >< =" "> </ ></ > class pun span span class kwd begin span span class typ My span span class pln multiline comment here span span class pun span span class kwd end span code In Conclusion These are the most asked questions about the Ruby programming language. If you have any suggestions or any confusion, please comment below. We will be glad to help you. Hope this article helped you. This post was originally posted on DevPost.