Sep 13 2008

Dlaczego warto przejść na Rails 2.1?

Category: Ruby, Ruby on Railsadmin @ 9:33 am

Pora przejść na Ruby On Rails 2.1. We wcześniejszych wersjach odkryto dziurę umożliwiającą SQL Injection. Bug występuje przy parametrze :offset.

Przy użyciu bazy MySqlowej otrzymujemy ActiveRecord::StatementInvalid exceptions z uwagi na domyślne wyłączenie wielokrotnych zapytań przez API. Natomiast przy innych bazach np: PostreSQL lub SQLite niestety może dojść do wstrzyknięcia kodu. Przy zapytaniu

 Item.find(:all, :limit=>10, :offset=>params[:offset]

i podaniu jako parametr :offset ciągu: “‘; Drop table items; ” następuje usunięcie tabeli items.

Jeśli koniecznie nie chcemy robić na razie uaktualnienia, a mamy podobne zapytania u siebie najprościej jest rzutować to co podajemy do :offset na Integer (to_i) lub zainstalować odpowiedniech patcha do wersji <2.0 lub do wersji 2.0

.

To, że mysql domyślnie nie pozwala na wielokrotne zapytania z poziomu api na pierwszy rzut oka nie wygląda najlepiej, jednak w tym przypadku chroni to aplikacje przed dużymi problemami.


Aug 24 2008

Linguistics - pomoc przy zabawach z językiem i wyrazami w Ruby

Category: Rubyadmin @ 1:36 pm

Ostatnio pracując nad wersją anglojęzyczną faktury w programie do fakturowania on-line, szukałem biblioteki do przekształcania liczb na ich słowne odpowiedniki. Byłem przekonany, że coś takiego istnieje, gdyż w Active Record w Ruby On Rails zna liczbę mnogą rzeczowników, gdyż szuka tabeli w bazie danych będącej liczbą mnogą od nazwy modelu.

Do podobnych zastosowań mogę polecić Ruby Linguistics. Bibliotekę łatwo można zainstalować z gemów. Widząc kilka przykładów użycia nie trzeba się nawet wiele zagłębiać w dokumentacje projektu.

require ‘linguistics’
Linguistics::use( :en ) # extends Array, String, and Numeric

“book”.en.plural # => “boxes”
“mouse”.en.plural # => “mice”
“ruby”.en.plural # => “rubies”

Oprócz liczb mnogich rzeczowników biblioteka “zna” równiez przedimki:

“book”.en.a
# => “a book”

“article”.en.a
# => “an article”

liczebniki porządkowe

5.en.ordinal # => “5th”

2004.en.ordinal # => “2004th”

oraz potrafi zamieniać liczby na ich odpowiednik słowny:

5.en.numwords
# => “five”

2004.en.numwords
# => “two thousand and four”

2385762345876.en.numwords
# => “two trillion, three hundred and eighty-five billion, seven
# hundred and sixty-two million, three hundred and forty-five thousand,
# eight hundred and seventy-six”

Jedyną wadą jaką dotychczas znalazłem jest mała liczba języków dostępnych, a właściwie jest tylko angielski.

Więcej przykładów dostępnych jest poprzez wiki projektu.