[:koshtech] language = [ :english, :português ]

@navigation.posts

post.title = "Primeiro [:startonrails] de Sábado (06/10/12)"

post.published_at = "08/10, 12:56 h"

post.body = "


O primeiro [:startonrails] de Sábado foi um sucesso!
Aconteceu aqui, na [:KoshTech], no dia 06/10/12 de 10:00h às 14:30h.
Lotamos o escritório com 18 pessoas que possuem o que, para nós, é essencial: VONTADE DE APRENDER.
Nossos encontros são gratuitos, os monitores não recebem nenhuma quantia para passar o conhecimento adiante. A idéia é apenas termos bons desenvolvedores Ruby on Rails no Brasil.
Abaixo, fotos da galera que marcou presença:




Algumas pessoas já estavam presentes, e iniciamos a instalação do RVM.




A galera foi chegando, e começando a instalar.




A tela de erro faz parte da rotina do programador. Alguns cansados com a demora da instalação do RVM.




Com a lotação da casa, improviso na cozinha. (Ainda na instalação.)




Quem terminava a instalação, ia para a sala ao lado e aprendia a fazer um site básico em 10 minutos. (A parte boa!!)




Galera sorridente após ver um site RÁPIDO feito pelas próprias mãos! :)




Rails Girls! Meninas marcando presença e monitorando os meninos.




Uma pequena pausa para repor as energias! Parte da galera na foto.




O monitor Vagner ensinando a galera a usar o GIT.




Demonstração de GIT na prática.


Se você também tem vontade de aprender, te aguardamos no nosso próximo encontro!
E, se você já tem conhecimento da linguagem e quer nos ajudar nesse projeto, também será bem-vindo!

"

post.tag_list = [ startonrails encontro devel treinamento ]

puts post.title, post.body, post.tag_list # By Maryana Feijó

post.comments.length = 0

post.title = "StartOnRails aos sábados, começa dia 06/10"

post.published_at = "26/09, 17:19 h"

post.body = "

Como muita gente não tem disponibilidade durante a semana devido à compromissos diversos, falamos aqui sobre a possibilidade de iniciar uma turma aos sábados. Pensamos em fazer um encontro quinzenal com mais horas de duração do que o encontro semanal. Como a maioria dos até agora interessados são pessoas que não tem conhecimento algum de Rails e da infra necessária para tê-lo executando, penso em fazer um "plano de aula" no qual seriam abordadas questões de SO (Linux e Mac), instalações de pacotes e Git, entre outras, antes de chegar no RVM e Cia.

Inicialmente, não tínhamos um modelo definido para o StartOnRails, mas depois de algumas sessões, foi adotado o modelo utilizado pelo Coding Dojo, no qual há um "piloto" com um co-piloto, se revesando de tempos em tempos para que todos os participantes possam opinar e também codificar. Mas este modelo somente pode ser adotado após um tempo, já que antes de começar a codificar os participantes devem ter um mínimo de conhecimento, bem como ambiente preparado e outras noções. Por este motivo foi pensado no plano de aula inicial.

O evento está marcado para o dia 06/10 e convido a todos os que puderem comparecer para ajudar na tarefa. A capacidade total da sala aqui será utilizada, sendo disponibilizadas as duas mesas, gerando um total de 12 lugares em cadeiras. Além destes, ainda comportamos mais 6 pessoas.

O calendário do StartOnRails pode ser acompanhado pela agenda do RubyOnRio, no endereço: http://minim.in/2jw

Blog no Github desenvolvido pelos participantes do evento semanal: https://github.com/KoshTech/startonrails

"

post.tag_list = [ startonrails encontro devel treinamento ]

puts post.title, post.body, post.tag_list # By Fernando Kosh

post.comments.length = 4

post.title = "Authlogic + CanCan no Rails 3: Autenticação e autorização de usuários - Parte 2"

post.published_at = "22/05, 12:32 h"

post.body = "

Nesse segundo post sobre autenticação e autorização de usuários falaremos sobre autorização utilizando a gem Cancan desenvolvida por Ryan Bates (https://github.com/ryanb/cancan). Tendo como base uma aplicação que se deseje aplicar permissionamento com um scaffold simples de Posts e mais as modificações feitas nas parte 1, siga os seguintes passos para entender o funcionamento da gem Cancan e como aplica-la em um projeto.
Para adicionar a gem Cancan adicione ao seu Gemfile a linha abaixo e rode o comando bundle no terminal.



gem 'cancan'

Adicione o modelo Ability com o seguinte código:



class Ability
include CanCan::Ability

def initialize(user)
end
end


No método initialize, user será passado como parâmetro e dentro do método serão definidas as permissões asscoiadas ao Post de acordo com o role do usuário. Crie uma migração para adicionar a coluna role ao User. No código abaixo foram definidos dois roles para o usuário (admin e moderator) e permissões para os mesmos gerenciarem, atualizarem e lerem os posts.



class Ability
include CanCan::Ability

def initialize(user)
user ||= User.new
if user.role == "admin"
can :manage, Post
elsif user.role == "moderator"
can :update, Post
can :read, Post
else
can :read, Post
end
end
end

Desse modo, já podemos adicionar condições à view de acordo com as permissões dos usuários.



<% if can? :update, @post %>
<%= link_to 'Edit', edit_post_path(@post) %> |
<% end %>
<% if can? :destroy, @post %>
<%
=
link_to 'Destroy', post_path(@post), :method => :delete %> |
<% end %>

Para que o usuário não tenha acesso à uma página que ele não tenha permissão para entrar através da url, adicione ao controller o seguinte método:



load_and_authorize_resource

Para adicionar uma notificação na tela, que será ativada se o usuário não tiver permissão de acesso em uma página, adicione o seguinte código no arquivo app/controllers/application_controller.rb.



rescue_from CanCan::AccessDenied do |exception|
flash[:notice] = "Access denied!"
redirect_to root_url
end

Seguindo esses passos e mais algumas modificações de acordo com o objetivo da sua aplicação pode-se implementar as permissões necessárias para seu projeto.

"

post.tag_list = [ rails cancan ]

puts post.title, post.body, post.tag_list # By Vinicius Rodrigues

post.comments.length = 3

post.title = "Authlogic + CanCan no Rails 3: Autenticação e autorização de usuários - Parte 1"

post.published_at = "17/05, 11:42 h"

post.body = "

Você fez sua aplicação rails, mas espere aí: vai querer que só você acesse ela? Se você quiser que outras pessoas (usuários) tenham acesso a sua aplicação você vai precisar utilizar ferramentas de autenticação e autorização. Aqui estaremos em dois posts explicando como funciona o Authlogic e o CanCan. Antes uma breve explicação de o que é exatamente cada um deles.
Authlogic
O Authlogic é uma solução de autenticação escrito em Ruby, mas diferente do Devise ele faz com que você realmente tenha que colocar a mão na massa e construir os models e controllers dos usuários e da sessão. Mas se você tem que fazer boa parte na mão porque utilizar ele? Uma das razões de utilizar o Authlogic é que ele gera tokens de autenticação da sessão, ou seja, apesar dele não gerar os controllers ele quem lida com toda a parte de autenticação em si, dando mais flexibilidade para a sua aplicação.
CanCan
O CanCan tem esse nome devido ao verbo can (poder) em inglês (The user can do this task/O usuário pode fazer esta tarefa). Basicamente o CanCan restringe os usuários atráves de regras (roles) dando ele acesso ou não a realizar determinadas tarefas.



Nesta primeira parte estaremos mostrando como configurar o Authlogic, deixaremos o CanCan para próxima parte. Vamos então para instalação do Authlogic.
Primeiro adicione dentro do seu arquivo Gemfile a seguinte linha:


gem 'authlogic', '>= 3.1.0'

Depois disso no seu shell rode o comando bundle.
Com isto a gem do authlogic já estará instalada, será necessário então criar o model e controller do usuário. Primeiro vamos criar o model, para isto rode o comando



rails g model User



rails g model user
Como observado na imagem anterior, quando você cria um model é gerada uma migração. Vamos editá-la para ter os campos que precisamos da seguinte maneira:


class CreateUsers < ActiveRecord::Migration
def change
create_table :users do |t|
t.string :username
t.string :email
t.string :crypted_password
t.string :password_salt
t.string :persistence_token

t.timestamps
end
end
end


Os campos email, crypted_password, password_salt e persistence_token são reconhecidos automaticamente pelo Authlogic, portanto, ele sabe como lidar com estes campos e nós só precisamos adicionar eles.
Depois disto basta rodar a migração



rake db:migrate

O model gerado é um model padrão do rails, para funcionar com o authlogic, basta adicionar as seguintes linhas



class User < ActiveRecord::Base
attr_accessible :username, :email, :password, :password_confirmation
acts_as_authentic
end

Agora que o model está pronto, vamos gerar o controller para isto, basta rodar o seguinte comando no terminal


        

rails g controller users new edit

rails f controller users new edit
Note que neste comando colocamos para serem inseridos apenas os métodos new e edit, fizemos isto pois não são necessários os demais métodos dos controllers.
Agora basta você editar este controller para que ele fique assim:



def new
@user = User.new
end

def edit
@user = current_user
end

def create
@user = User.new(params[:user])
if @user.save
flash[:notice] = "Create successful!"
redirect_to "/"
else
render :action => 'new'
end
end

def update
@user = current_user

if @user.update_attributes params[:user]
flash[:notice] = "Update successful!"
redirect_to "/my_account"
else
render :action => :edit
end
end


Junto com o controller é criado também as views, pra elas funcionarem direitinho, nós as editamos para ficar assim:
users/_form.html.erb



<%= form_for(@user) do |f| %>
<% if @user.errors.any? %>
<div id
=
"error_explanation">
<h2><%= pluralize(@user.errors.count, "error") %> prohibited this user from being saved:</h2>

<ul>
<% @user.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
<
/
div>
<% end %>

<div class="field">
<%= f.label :username %><br />
<%
=
f.text_field :username %>
</div>
<div class="field">
<%= f.label :email %><br
/
>
<%= f.text_field :email %>
</div>
<div class
=
"field">
<%= f.label :password %><br />
<%
=
f.text_field :password %>
</div>
<div class="field">
<%= f.label :password_confirmation %><br
/
>
<%= f.text_field :password_confirmation %>
</div>
<div class
=
"actions">
<%= f.submit %>
</div>
<% end %>


users/new.html.erb



<h1>New user</h1>

<%= render 'form' %>

<%= link_to 'Back', users_path %>


users/edit.html.erb



<h1>Editing user</h1>

<%= render 'form' %>

<%= link_to 'Show', @user %> |
<%= link_to 'Back', users_path %>


O legal do authlogic é que ele já insere as validações necessárias de tamanho de senha, tamanho do nome do usuários, entre outras.
validações
Agora é necessário criar a sessão do usuário, para isso rodamos um comando que o Authlogic adiciona aos comandos que o rails já possui



rails g model user_session

Depois disto é necessário editar o arquivo para que o modelo fique desta maneira:



class UserSession < Authlogic::Session::Base
def to_key
new_record? ? nil : [ self.send(self.class.primary_key) ]
end

def persisted?
false
end
end


Para que a sessão funcione plenamente é necessário fazer também um controller, fazemos com o comando



rails g controller UserSessions new

Depois como fizemos antes com o users, editamos o arquivo do controller para que ele fique assim:



class UserSessionsController < ApplicationController

def new
@user_session = UserSession.new
end

def create
@user_session = UserSession.new(params[:user_session])
if @user_session.save
flash[:notice] = "Login successful!"
redirect_to '/posts'
else
flash[:notice] = "Login error!"
render :action => :new
end
end

def destroy
@user_session = UserSession.find
@user_session.destroy
flash[:notice] = "Successfully logged out."
redirect_to "/posts"
end

end


Aqui vemos que o método destroy serve para basicamente destruir a sessão do usuário, mas não é necessário pegar o id dela, o Authlogic faz a mágica de destruir de acordo com o usuário que está logado.
A view que é gerada é utilizada para fazer o login de fato do usuário, então editamos ela e deixamos ela assim
user_session/new.html.erb



<% title "Log in" %>

<% form_for @user_session do |form| %>
<%= form.error_messages %
>

<ol class="formList">
<li>
<%= form.label :username, "Username" %>
<%
=
form.text_field :username %>
</li>
<li>
<%= form.label :password, "Password" %>
<%= form.password_field :password %>
<
/
li>
<li>
<%= form.submit "Submit" %>
</li>
</ol>
<% end %>


Para finalizar a parte de logout da aplicação é necessário adicionar alguns métodos dentro do application_controller.rb conforme abaixo:



class ApplicationController < ActionController::Base
protect_from_forgery
helper_method :current_user_session, :current_user
before_filter :new_user_session
private
def current_user_session
return @current_user_session if defined?(@current_user_session)
@current_user_session = UserSession.find
end

def current_user
return @current_user if defined?(@current_user)
@current_user = current_user_session && current_user_session.record
end

def new_user_session
@new_user_session = UserSession.new
end
end


Estes métodos que estamos adicionando servem para manipular a sessão do usuário o current_user_session pega a sessão do usuário que está logado no momento e a current_user pega o usuário que está logado. Isto faz com que o método current_user esteja disponível para utilizar nas views, como já foi feito antes nesse tutorial.

Bom com isto terminamos a configuração básica do Authlogic, no próximo post veremos como fazer ele funcionar junto com o CanCan para realizar o permissionamento das áreas do seu projeto.

"

post.tag_list = [ dev ruby authlogic ]

puts post.title, post.body, post.tag_list # By Anna Cruz

post.comments.length = 2