nelson corrêa viana júnior

setembro 11, 2007

Ruby com MySQL (Básico)

Filed under: mysql, programação, ruby on rails, software livre — nelson @ 22:33:24

Primeiramente tenha o módulo do mysql instalado. Caso não tenha:
gem install mysql

Agora algo bem simples.
Nada mais simples de início como uma conexão com o banco. 🙂
require “mysql”

#Como de custume vamos instanciar algumas variáveis com os valores ‘usuário’, ‘senha’ e ‘host’.
user_mysql = “root”
pass_mysql = “pass”
host_mysql = “localhost”

database_mysql = “nome-da-database”

#Criando uma variável chamando a classe do MySQL.
mydb = Mysql.new(user_mysql, pass_mysql, host_mysql)

#Se você já tem uma database criada, para seleciona-la use:
selecionar = mydb.select_db(database_mysql)
#Caso contrário pode cria-la:
novadb = mydb.query(“CREATE DATABASE #{database_mysql}”)

#Agora o essencial do banco de dados: a listagem.
#Vou colocar com todos os passos já citados.

mydb = Mysql.new(user_mysql, pass_mysql, host_mysql)
selecionar = mydb.select_db(database_mysql)
sqllistar = mydb.query(“SELECT * FROM tabela“)
listar = sqllistar.fetch_fields
listar.each do |lista|
puts lista.name
end

mydb.close

De início, simples e fácil.
🙂

(Essa merda de editor do wordpress acaba com toda minha identação)

setembro 6, 2007

RoR: Sistema simples de autenticação

Filed under: programação, ruby on rails, software livre — nelson @ 16:45:02

Model

1) script/generate model user
1.1) edite o arquivo db/migrate/XXX_create_users.rb

class CreateUsers < ActiveRecord::Migration
def self.up
create_table :users do |t|
t.column :firstname, :string
t.column :lastname, :string
t.column :username, :string, :null => false
t.column :password, :string, :null => false
t.column :hashed_password, :string, :limit => 40, :null => false
t.column :admin, :boolean, :default => 0
end
end

def self.down
drop_table :users
end
end

1.2) edite o app/models/user.rb

require ‘sha1’

class User < ActiveRecord::Base

attr_accessor :password
attr_protected :hashed_password

validates_presence_of :password, :password_confirmation

validates_uniqueness_of :username
validates_confirmation_of :password, :on => :create,
:if => lambda { |user| user.new_record? or not user.password.blank? }
validates_length_of :password, :within => 5..40,
:if => lambda { |user| user.new_record? or not user.password.blank? }

def self.hashed(str)
SHA1.new(str).to_s
end

def self.authenticate(user_info)
user = find_by_username(user_info[:username])
if user && user.hashed_password == hashed(user_info[:password])
return user
end
end

before_save :hashed_password
before_update :hashed_password

def hashed_password
if not password.blank?
self.hashed_password = self.class.hashed(password)
end
end
end

Controller

2) script/generate controller user index login process_login logout update_password
2.1) edite o arquivo app/controllers/user_controller.rb

class UserController < ApplicationController

before_filter :login_required, :only => :my_account

def index
render :action => “login”
end

def login
@user = User.new
@user.username = params[:username]
end

def process_login
if user = User.authenticate(params[:user])
session[:user] = user.id
redirect_to session[:return_to] || “/”
else
flash[:error] = “Invalid login.”
redirect_to :action => “login”, :username => params[:user][:username]
end
end

def logout
session[:user] = nil
flash[:message] = “Logout successfully.”
redirect_to :action => “login”
end

def update_password

if request.post?
#Store password fields
password = params[:user][:password]
password_confirmation = params[:user][:password_confirmation]

@user = User.find(session_user.id)
if @user
if password == password_confirmation
if password.blank? or password_confirmation.blank?
flash[“error”] = “Password and/or Password Confirm is blank.”
else
@user.password_confirmation = password_confirmation
@user.update_attribute(“password”, password)
if @user.save
flash[“message”] = “Password was successfully changed.”
end
end
else
flash[“error”] = “Password and/or Password Confirm invalid.”
end
end
redirect_to :action => “my_account”
end
end

def my_account
end
end

3) agora edite o app/controllers/application.rb

class ApplicationController < ActionController::Base
before_filter :set_user
helper_method :session_user

User.content_columns.each do |column|
in_place_edit_for :user, column.name
end

def set_user
@user = User.find(session[:user]) if @user.nil? && session[:user]
end

def session_user
@session_user ||= User.find(:first, :conditions => [“id = ?”, session[:user]])
end

def login_required
return true if @user
access_denied
return false
end

def access_denied
session[:return_to] = request.request_uri
flash[:error] = “Oops. You need to login before you can view that page.”
redirect_to :controller => “user”, :action => “login”
end
end

Views

<!– app/views/user/login.rhtml –>
<% if @flash[:message] %><div><%= @flash[:message] %></div><% end %>
<% if @flash[:error] %><div><%= @flash[:error] %></div><% end %>
<%= form_tag :action => ‘process_login’ %>
Username: <%= text_field “user”, “username” %>
Password: <%= password_field “user”, “password” %>
<%= submit_tag %>
<%= end_form_tag %>

<!– app/views/user/my_account.rhtml –>
<h2>Account Info</h2>

<%= error_messages_for “user” %>
<% if flash[“error”] %><p><%= flash[“error”] %></p><% end %>
<% if flash[“message”] %><p><%= flash[“message”] %></p><% end %>

<h3>Hello! <%= session_user.lastname %>, <%= session_user.firstname %></h3>

<cite>P.S: If you want edit some field, click on value.</cite>
<p><strong>Firstname:</strong> <%= in_place_editor_field :user, :firstname %></p>
<p><strong>Lastname:</strong> <%= in_place_editor_field :user, :lastname %></p>
<p><strong>Username:</strong> <%= in_place_editor_field :user, :username %></p>
<p>
<%= form_tag :action => “update_password” %>
<strong>New password:</strong>
<br />
<%= password_field “user”, “password” %>
<br />
<strong>Confirm:</strong>
<br />
<%= password_field “user”, “password_confirmation” %>
<br /><br />
<%= submit_tag “Change my password” %>
<%= end_form_tag %>
</p>

Layouts

4) crie ou edite o app/views/layouts/application.rhtml

<html>
<head>
<title>título</title>
<%= javascript_include_tag :defaults %>
</head>
<body>
<div id=”all”>
<div id=”header”>
<h1>header</h1>
</div>
<div id=”contents”>
<%= yield %>
</div>
</div>
</body>
</html>

setembro 4, 2007

RoR: in place editor

Filed under: javascript, programação, ruby on rails, software livre — nelson @ 0:07:25

Hoje quando estava criando a parte de ‘Account Info’ resolvi colocar um ‘ajax in place editor’ para facilitar a edição dos campos. Pra falar a verdade eu nunca havia usado essa propriedade do ajax, apesar de achar muito bacana.

Eu não costumo – apesar que a partir de agora eu posso dizer: não costumava – usar javascript pelo motivo da acessibilidade do usuário final.

Mais em vista que sites de grande porte não se preocupa tanto com essa parte de javascript não-obstrutivo, porquê eu preocupar? Partindo disso eu fui atrás de algum código que facilitasse a inserção do ‘in place editor’ no Ruby On Rails.

E não é que eu achei algo?! 🙂

O código é o seguinte:

Primeiramente você adiciona a linha abaixo no app/views/layouts/application.rhtml (caso não exista o arquivo, pode criar, sem problemas).

<%= javascript_include_tag :defaults %>

Obs: Insira essa linha entre a tag <head></head>.

Agora, vá em app/views/user/arquivo.rhtml e insira este código:

<% for column in User.content_columns %>

 <p>

 	<b><%= column.human_name %>:</b>

 	<%= in_place_editor_field :user, column.name %>

 </p>

<% end %>

Caso você queira usar:

<%= in_place_editor_field :user, :username

Pode usar, não há problema.

E no arquivo app/controllers/application.rhtml insira:

User.content_columns.each do |column|

 in_place_edit_for :user, column.name

end

Obs: Aonde está negrito quer dizer que você terá que adaptar.

agosto 24, 2007

Instalando Ruby on Rails (Ubuntu 7.04 Feisty Fawm)

Filed under: apache, mysql, programação, ruby on rails, software livre — nelson @ 14:16:36

A instalação é muito mais simples do que tenho olhado em vários links por ai. 🙂

1° Passo

Instalando o Ruby

sudo apt-get install ruby rdoc ri irb libyaml-ruby libzlib-ruby ri ruby1.8-dev

2° Passo

Instalando RubyGems

2.1) Download rubygems
wget http://rubyforge.org/frs/download.php/11289/rubygems-0.9.0.tgz

2.2) Descompactando
tar zxvf rubygems-0.9.0.tgz

2.3) Entrando no dir
cd rubygems-0.9.0

2.4) Instalando
sudo ruby setup.rb

2.5) Atualizando gem
gem update –system

3° Passo

Instalando Rails

sudo gem install rails –include-dependencies

4° Passo

Instalando a lib de ligação com o MySQL

sudo apt-get install libmysql-ruby

5° Passo

Instalando mongrel

sudo gem install mongrel –include-dependencies

fevereiro 3, 2007

BrasilTelecom – Em qual mundo eles estão?!

Filed under: cotidiano, software livre — nelson @ 14:10:49

Ontem a tarde a conexão estava muito ruim na parte da tarde, provavelmente era água na linha telefônica.
O modem ligava quando eu apertava o botão ‘ligar’ no telefone residêncial. Passava um tempo caia novamente, então eu apertava novamente o botão pra conectar.
Encucado com isso, liguei pra BrasilTelecom.
Ao ligar pra empresa, obviamente uma atendente  me perguntou o nome, número do aparelho, qual modem eu uso e qual era o problema(o famoso procedimento padrão).
Expliquei o que estava acontecendo e como sempre, aquela ladanhinha:

“Verefique se esta fixa a luz da adsl. Caso não esteja, troque os cabos.”
Ela ao começar a falar essa merda eu falei: “Bom! Isso não é problema de cabo, os cabos estão como sempre estiveram.”

Ela pegou e falou a proxima ladanhinha:

“Então vai no menu iniciar > executar …” – eu cortei ela novamente e disse: “Eu não estou no windows. Estou no Linux.”

Ela insistiu em dizer: “menu iniciar -> executar …” – cortei ela novamente(3x) e voltei a dizer: “Não estou no windows, estou no LINUX e esse problema não é no Sistema Operacional, ou hardware é na linha telefonônica!”

Então ela me deu uma ótima resposta: “Senhor, nós da BrasilTelecom só damos suporte à windows.

UAU! Que resposta linda, não?! 😀
Uma pu¨#52 empresa como a BrasilTelecom e não existe suporte à Linux?! Em que época eles estão?
Acho que ela podia ter ficado quieta. Afinal, eu já havia dito que não era problema no OS.

Na época em que estamos, na evolução do software livre… pelo menos poderia ser uma resposta do tipo: “Vou encaminha-lo para os atendentes suporte Linux.”
E os que usam Mac? Também não têm suporte?

Que vexame.

Crie um website ou blog gratuito no WordPress.com.