Fork me on GitHub


Rails + strefy czasowe

Domyślna strefa czasowa:

config/application.rb

config.time_zone = 'Warsaw'

Preferencje użytkowników:

Dodaj pole timezone do modelu.

walidacja w modelu

validates :timezone, 
  :inclusion => { :in => ActiveSupport::TimeZone.all.map(&:name) }

widok

<%= label_tag t('users.form.timezone') %> <br/>
<%= time_zone_select(:user, :timezone) %>

app/controllers/application_controller.rb

before_filter :set_user_time_zone
 
protected
def set_user_time_zone
  Time.zone = current_user.timezone if logged_in?
end

Posted on : lip 10 2011
Kategorie: programowanie, Rails, Ruby |

Rails app + Git revision na stronie

Podanie bieżącej wersji aplikacji gdzieś na stronie jest przydatne – dodatkowe informacje przy zgłaszaniu błędów + lanserski efekt.

Bardzo często serwujemy aplikację wprost z repozytorium Gita, więc czemu nie podać rewizji?

Użyjemy git describe, które wyświetla wersję w postaci:
ostani_tag-odległość_od_taga-początek_sha1

Z przełącznikiem --dirty dodaje na końcu -dirty jeśli working tree nie jest czyste.
(musi być przynajmniej jeden tag w repozytorium)

Wydobądźmy interesujące nas informacje raz, przy ładowaniu aplikacji.
lib/git_info.rb

module GitInfo
  BRANCH = `git status`.split[3]
  REPO_VERSION = `git describe --dirty`
end

Można to zrobić za pomocą gemu grit, jednak zrezygnowałem z dodawania zależności.

Rails 3 nie ładuje automatycznie plików z lib/. Można go załadować pojedynczo lub włączyć ładowanie wszystkiego z lib:
config/application.rb

    config.autoload_paths += %W(#{config.root}/lib)

app/views/layouts/application.html.erb

...
<div id="footer">
    <div id="version">
        <span id="branch"><%= GitInfo::BRANCH %> branch</span>
        <span id="revision">
            rev. 
            <span id="number">
                <%= GitInfo::REPO_VERSION %>;
            </span>
        </span>
    </div>
</div>
...

+ trochę magii w CSSie i otrzymujemy przyjemny rezultat z początku wpisu.


Posted on : lip 03 2011
Kategorie: Git, programowanie, Rails, Ruby |