Skip to content

Instantly share code, notes, and snippets.

@tuxes
Created April 9, 2011 14:31
Show Gist options
  • Save tuxes/911428 to your computer and use it in GitHub Desktop.
Save tuxes/911428 to your computer and use it in GitHub Desktop.
Dojo realizado no Flisol
#coding: utf-8
class AuthorsName
def initialize
@ignored = ["da", "de", "do", "das", "dos"]
end
def surname=(surname)
@surname = surname
end
def surname
@surname.unicode_upcase
end
def name=(name)
@name = name
end
def name
self.order_name
@name
end
def order_name
tokens = @name.split(' ')
@name = tokens[0]
index = 1
if @ignored.include?(tokens[1])
@name << " " << tokens[1]
index = 2
end
self.surname = tokens.slice(index, tokens.size + 1).join(" ")
@name = self.surname << ", " << @name
end
end
class String
def unicode_upcase
s = ""
char_map = {"á" => "Á", "à" => "À", "â" => "Â", "ã" => "Ã", "ç" => "Ç", "é" => "É", "è" => "È", "í" => "Í",
"ó" => "Ó", "ô" => "Ô", "ú" => "Ú"}
self.each_char do |c|
if char_map.include? c
s += char_map[c]
else
s += c.upcase
end
end
s
end
end
#coding:utf-8
require File.expand_path(File.dirname(__FILE__) + '/../authors_name')
describe AuthorsName do
before :all do
@author = AuthorsName.new
end
it 'deve retornar um sobrenome em caixa alta' do
@author.surname = "Silva"
@author.surname.should eql("SILVA")
end
it 'deve retornar um sobrenome em caixa alta na frente do nome' do
@author.name = "Andre Silva"
@author.name.should eql("SILVA, Andre")
end
it 'deve retornar dois sobrenomes em caixa alta na frente do nome' do
@author.name = "Caio Domingos Prado"
@author.name.should eql("DOMINGOS PRADO, Caio")
end
it 'deve ignorar de... como sobrenome' do
@author.name = "Jose de Bla"
@author.name.should eql "BLA, Jose de"
end
it 'deve resistir a um teste dificil' do
@author.name = "Pedro de Alcântara Francisco Antônio João Carlos Xavier de Paula Miguel Rafael Joaquim José Gonzaga Pascoal Cipriano Serafim de Bragança e Bourbon"
@author.name.should eql "ALCÂNTARA FRANCISCO ANTÔNIO JOÃO CARLOS XAVIER DE PAULA MIGUEL RAFAEL JOAQUIM JOSÉ GONZAGA PASCOAL CIPRIANO SERAFIM DE BRAGANÇA E BOURBON, Pedro de"
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment