Showing posts with label Ruby. Show all posts
Showing posts with label Ruby. Show all posts

Tuesday, January 26, 2016

Ruby Tail-recursion

Tail-recursion in ruby could be realized with some compile options for ruby VM:
 
RubyVM::InstructionSequence.compile_option = {
  :tailcall_optimization => true,
  :trace_instruction => false
}


More about Tail-recursion.

Saturday, September 27, 2014

Separate number by commas, format phone

Separate number by comma with using `gsub`:
def separate_by_comma(number)
  number.to_s.reverse.gsub(/(\d{3})/, '\1,').reverse
end
without:
def spearate_by_comma(number)
  number.to_s.chars.reverse.each_slice(3).map(&:join).join(",").reverse
end

Monday, August 25, 2014

Little bit ruby


% Notation
%q[ ] # Non-interpolated String (except for \\ \[ and \])
%Q[ ] # Interpolated String (default)
%r[ ] # Interpolated Regexp (flags can appear after the closing delimiter)
%i[ ] # Non-interpolated Array of symbols, separated by whitespace
%I[ ] # Interpolated Array of symbols, separated by whitespace
%w[ ] # Non-interpolated Array of words, separated by whitespace
%W[ ] # Interpolated Array of words, separated by whitespace
%x[ ] # Interpolated shell command

Sunday, August 24, 2014

ActiveSupport::Inflector

ActiveSupport::Inflector - transforms words from singular to plural, class names to table names, modularized class names to ones without, and class names to foreign keys. The default inflections for pluralization, singularization, and uncountable words are kept in inflections.rb. 

Saturday, September 7, 2013

Monday, July 1, 2013

Array

var = Array(1) # => [1]
var = *1       # => [1]

# * is the same as Array

var = Array([1,2,3]) #=> [1,2,3]
var = *[1,2,3]       #=> [1,2,3]

# its useful when we need array like
var = [var] unless var.is_a? Array
var = [var].flatten

# we can write
var = *var     # => [var]
# but can't
*var           # => syntax error

Sunday, June 30, 2013

Ruby Include and Extend

module Base
  def print
    p 'base'
  end
end

class A
  # add method for instance
  include Base
end

A.new.print


class B
  # add method for class
  extend Base
end

B.print

class C
  # include module for singleton
  # the same like extend
  class << self
    include Base
  end
end

C.print
include work the same as inheritance but its not the same:
  1. class have only one parent
  2. include extend only instance
# check include
A.new.kind_of? Base #=> true

# check extend
B.kind_of? Base #=> true


Saturday, June 29, 2013

Ruby singleton

# All is Object
# =============
#
# print - is singleton method for instance

instance = Document.new
def instance.print
end

class << instance
  def print; end
end

# print - is singleton method for Document
# Document - is instance too of Class object

def Document.pring
end

class Document
  class << self
    def print; end
  end
end


Ruby class variables

# B class redefine class variable

class A
  @@class_var = 'first'

  def first
    @@class_var
  end
end

class B < A
  @@class_var = 'second'

  def second
    @@class_var
  end
end

p B.new.first           # => second
p B.new.second          # => second
p B.singleton_methods   # => []


# A and B class have different variable
# In this case we have instance(singleton) variable for A and B

class A
  @class_var = 'first'

  class << self
    attr_accessor :class_var
  end

  def first
    A.class_var
  end
end

class B < A
  @class_var = 'second'

  class << self
    attr_accessor :class_var
  end

  def second
    B.class_var
  end
end

p B.new.first           # => first
p B.new.second          # => second
p B.singleton_methods   # => [:class_var, :class_var=]

Sunday, April 29, 2012

RVM

* RVM is not a function, selecting rubies with 'rvm use ...' will not work *

Після того як ви поставили RVM, як це вказано на оф-сайті, добавляємо наступний радок в кінець файлу ~/.profile для того щоб уникнути появу повідомлення яке наведено в заголовку:

 [[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm" # Load RVM function

і для встановлення цієї конфігурації пишемо:

source ~/.bashrc


* РОБОТА З ГЕМАМИ *

rvm gemset create rails321, rails323 # створюємо простір гемів
rvm 1.9.3@rails321 # застосувати простір для версії рубі
rvm install rails -v 3.2.1 # ставимо рельси для встановленого простору

Таким чином ми отримали простір для  ROR 3.2.1 з Ruby 1.9.3, не обмежуючи себе в кількості версій ROR навіть на одній версії Ruby, для прикладу rvm 1.9.3@rails3.2.3 буде використовувати ту ж версію рубі але іншу для рельсів( так як @rails3.2.3 вказує на інший прості то і відповіно для нього треба ставити свої рельси)

Докладніше і більше див. офіційний сайт!
А також нормальна стаття на хабрі.

* Альтернатива *
Оскільки в нас є bundle то відпадає необхідність в встановленні rvm, тож можна спокійно користуватисяь додатком chruby для версіонування рубі для встановлення рубі можна використовувати ruby-install

Для встановлення ruby-install:
wget -O ruby-install-0.2.1.tar.gz https://github.com/postmodern/ruby-install/archive/v0.2.1.tar.gz
tar -xzvf ruby-install-0.2.1.tar.gz
cd ruby-install-0.2.1/
sudo make install

Thursday, December 8, 2011

Ставимо Ruby та RoR

Як постaвити рубі? Відповідь на це питання я думаю ви уже знайшли, а якщо ні то це робиться так:
# sudo apt-get install ruby

При установці рубі разом з ним ставиться ще і gem! Для того щоб поставити останню версію RoR потрібно скористатись саме ним. Робиться це так:
# sudo gem install rails

можна ще вказати версію добавивши "-v=3.1.3". Ящо після цього ви введете
# rails -v

то побачите версію RoR, але якщо ви поставили рельси з репозиторія то версія не буде останньою, в мене це була версія 2.5.4). Особисто мені не підійшла версія з репозиторію по тій причині що команда "# rails server" не виконувалась і не запускала мій проект, а створювала новий з назвою "server". Нагадаю що в версії 3.0.0 така команда вже доступна і для створення нового проекту потрібно написати так "# rails new my_project".
Після того як я видалив RoR із репозиторія, захотівши подивитись версію я отримав відповідь про те що система незнає що таке "rails" хоча нова версія вже була поставлена з допомогою гема. Переустановка результату не дала, але пізніше я зрозумів що RoR є за наступною адресою "/lib/gems/1.8/bin/rails" якраз сюди його і кидав gem. Для того щоб рельси стали доступними ми можемо зробити символьний лінк на потрібний файл ось так:
# sudo ln -s /var/lib/gems/1.8/bin/rails /usr/bin/rails,