Tag: Ruby

String to URL czyli jak zamienić nazwę lub tekst na link

Dzisiaj potrzebowałem napisać sobie metodę która nazwy działów zamieni na linki. Początkowo chciałem to zrealizować w modelu Menu gdzie po prostu wywoływałbym metodę to_url która zwracałaby mi adres w formie id-jakis-tam-link. Niestety wadą takiego rozwiązania jest fakt że wtedy linki mogłyby być generowane tylko z modelu Menu.

Aby tego uniknąć napisałem malutkie rozszerzenie do klasy String, które zamienia nam tekst na odpowiednik z samymi małymi literkami, usuwa nasze "ogonki", usuwa inne niechciane w URLach znaki oraz zamienia spacje na pauzy. Jest ona bardzo prosta i niezbyt elegancka ;) ale swoje robi. Sam proces zamiany znaków polskich na ich odpowiedniki "bezogonkowe" wzorowałem na kodzie Tomasha - ascii_tic. Jednak resztę miałem już napisaną zanim zacząłem szukać rozwiązania na usunięcie ogonków.

Poniżej zamieszczam cały kod rozwiązania:

# Dodatkowe metody klasy string

class String
  # Zwraca strina bez polskich literek, z małej litery, z usuniętymi innymi
  # znakami oraze z zamienioną spacją na pauze (-)
  def to_url
    temp = self.downcase
    temp
    temp.gsub!(/[âäàãáäå�?ăąǎǟǡǻ�?ȃȧẵặ]/,'a')
    temp.gsub!(/[ëêéèẽēĕėẻȅȇẹȩęḙḛ�?ếễểḕḗệ�?]/,'e')
    temp.gsub!(/[�?iìíîĩīĭïỉ�?ịįȉȋḭɨḯ]/,'i')
    temp.gsub!(/[òóôõ�?�?ȯö�?őǒ�?�?ơǫ�?ɵøồốỗổȱȫȭ�?�?ṑṓ�?ớỡởợǭộǿ]/,'o')
    temp.gsub!(/[ùúûũūŭüủůűǔȕȗưụṳųṷṵṹṻǖǜǘǖǚừứữửự]/,'u')
    temp.gsub!(/[ỳýŷỹȳ�?ÿỷẙƴỵ]/,'y')
    temp.gsub!(/[ñǹń]/,'n')
    temp.gsub!(/[çć]/,'c')
    temp.gsub!(/[ß]/,'ss')
    temp.gsub!(/[œ]/,'oe')
    temp.gsub!(/[ij]/,'ij')
    temp.gsub!(/[�?ł]/,'l')
    temp.gsub!(/[ś]/,'s')
    temp.gsub!(/[źż]/,'z')
    temp.gsub!(/[^a-zA-Z 0-9]/, "")
    temp.gsub!(/\s/,'-')
    temp.gsub!(/\-+$/,'')
    temp.gsub!(/^\-+/,'')
    temp
  end

  # to_url tylko wykonane na sobie
  def to_url!
    self.replace self.to_url
  end
end

Od teraz, mając jakikolwiek tekst, możemy na nim wywołac metodę to_url która zwróci nam jego "odpowiednik linkowy".

Ubuntu 10.04 + Rails 2.3.5 + Ruby 1.8 + [BUG] gc_sweep(): unknown data type

After moving to Ubuntu 10.04 and running mongrel - he crashes with this error message:

 [BUG] gc_sweep(): unknown data type

It is a bug in Ruby code. So I've moved to an older release (one without this bug). How to do it?

Update repos:

sudo apt-get update
sudo apt-get dist-upgrade

Install some "must have" libraries:

sudo apt-get install libssl-dev zlib1g zlib1g-dev ruby-dev  libopenssl-ruby1.8 irb ri rdoc libopenssl-ruby

Download ruby1.8_1.8.7.174.orig.tar.gz, from tutaj or Google it ;)

After downloading run your shell and type:

cd ruby-1.8.7-p174
sudo ./configure
sudo make
sudo make install
sudo apt-get install libncurses5-dev libreadline5-dev
cd ext/readline/
ruby extconf.rb
make
sudo make install
cd ..
cd ..
cd ..
rm -R ruby-1.8.7-p174

Check Ruby version:

ruby -v
ruby 1.8.7 (2009-06-12 patchlevel 174) [x86_64-linux]

Install other stuff:

sudo apt-get install mysql-server  sqlite3 libmysql-ruby
sudo apt-get install build-essential  libmysqlclient-dev libmysql-ruby libsqlite3-ruby libsqlite3-dev

Rubygems:

wget  http://production.cf.rubygems.org/rubygems/rubygems-1.3.6.zip
unzip rubygems-1.3.6.zip
cd rubygems-1.3.6
sudo ruby setup.rb
cd ..
rm -R rubygems-1.3.6
sudo ln -s /usr/bin/gem1.8 /usr/local/bin/gem

Gems, gems, gems:

sudo gem install mysql sqlite3-ruby mongrel

And finally:

sudo gem install rails -v=2.3.5

Copyright © 2026 Closer to Code

Theme by Anders NorenUp ↑