Skip to content

Instantly share code, notes, and snippets.

@m3nd3s
Created September 15, 2011 12:45
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save m3nd3s/1219144 to your computer and use it in GitHub Desktop.
Save m3nd3s/1219144 to your computer and use it in GitHub Desktop.
Nomes de Autores de Obras Bibliográficas - Dojo Ruby [http://dojopuzzles.com/problemas/exibe/nomes-de-autores-de-obras-bibliograficas/]
# coding: utf-8
class Autor
attr_accessor :nomes
def initialize(nomes=[])
@nomes = nomes
@nomes_especiais = ["Neto", "Filho", "Sobrinho", "Neta", "Filha", "Sobrinha", "Junior"]
@preposicoes = ["da", "de", "do", "das", "dos"]
end
def nome_para_livro
res = []
@nomes.each do |nome|
tmp = nome.split(" ")
if tmp.size > 1
last_last_name = tmp.delete_at(tmp.size - 1) # retira o último elemento
if @nomes_especiais.include?(last_last_name.capitalize)
if tmp.size > 1 and not @preposicoes.include?(tmp.last)
last_name = tmp.delete_at(tmp.size - 1)
res << last_name.unicode_upcase+" "+last_last_name.unicode_upcase+", "+capitalize_name(tmp).join(" ")
else
res << last_last_name.unicode_upcase+", "+capitalize_name(tmp).join(" ")
end
else
res << last_last_name.unicode_upcase+", "+capitalize_name( tmp ).join(" ")
end
else
res << tmp.join.upcase
end
end
res
end
def capitalize_name(nomes)
nomes.map do |n|
@preposicoes.include?(n.downcase) ? n.downcase : n.unicode_capitalize
end
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
def unicode_capitalize
s = self.downcase
char_map = {"á" => "Á", "à" => "À", "â" => "Â", "ã" => "Ã", "ç" => "Ç", "é" => "É", "è" => "È", "í" => "Í",
"ó" => "Ó", "ô" => "Ô", "ú" => "Ú"}
if char_map.include? s[0]
s[0] = char_map[s[0]]
else
s.capitalize!
end
s
end
end
#coding: utf-8
require "autor"
describe Autor do
it 'deveria retorna MENDES, Almir' do
autor = Autor.new(["Almir Mendes"])
autor.nome_para_livro.should eql([ "MENDES, Almir" ])
end
it "deveria retorna SFALSIN, Marcio" do
autor = Autor.new(["Marcio Sfalsin"])
autor.nome_para_livro.should eql([ "SFALSIN, Marcio" ])
end
it "deveria retorna VALLE, Uriel Juliatti" do
autor = Autor.new(["Uriel Juliatti Valle"])
autor.nome_para_livro.should eql([ "VALLE, Uriel Juliatti" ])
end
it "deveria retorna ANDREIA" do
autor = Autor.new(["Andreia"])
autor.nome_para_livro.should eql([ "ANDREIA" ])
end
it "deveria retornar MENDES, Almir e TAGLIATI, Andre" do
autor = Autor.new(["Almir Mendes","Andre Tagliati"])
autor.nome_para_livro.should eql(["MENDES, Almir","TAGLIATI, Andre"])
end
it 'deveria retorna "MENDES NETO, Almir"' do
autor = Autor.new(["Almir Mendes Neto"])
autor.nome_para_livro.should eql(["MENDES NETO, Almir"])
end
it 'deveria retorna "SYMEONIDIS JUNIOR, Petros"' do
autor = Autor.new(["Petros Symeonidis Junior"])
autor.nome_para_livro.should eql(["SYMEONIDIS JUNIOR, Petros"])
end
it 'deveria retorna "JUNIOR, Petros"' do
autor = Autor.new(["Petros Junior"])
autor.nome_para_livro.should eql(["JUNIOR, Petros"])
end
it 'deveria retorna "JULIATTI SOBRINHO, Urielzinho"' do
autor = Autor.new(["Urielzinho Juliatti Sobrinho"])
autor.nome_para_livro.should eql(["JULIATTI SOBRINHO, Urielzinho"])
end
it 'deveria retorna "JULIATTI SOBRINHO, Urielzinho" e "FILHO, Urielzinho"' do
autor = Autor.new(["Urielzinho Juliatti Sobrinho", "Urielzinho Filho"])
autor.nome_para_livro.should eql(["JULIATTI SOBRINHO, Urielzinho", "FILHO, Urielzinho"])
end
it 'deveria retornar "MENDES, Andreia"' do
autor = Autor.new(["andreia mendes"])
autor.nome_para_livro.should eql(["MENDES, Andreia"])
end
it 'deveria retornar "MENDES, Andreia"' do
autor = Autor.new(["ANDREIA MENDES"])
autor.nome_para_livro.should eql(["MENDES, Andreia"])
end
it 'deveria retornar "MENDES, Andreia de"' do
autor = Autor.new(["ANDREIA de MENDES"])
autor.nome_para_livro.should eql(["MENDES, Andreia de"])
end
it 'deveria retornar "MENDES, Andreia de"' do
autor = Autor.new(["ANDREIA DE MENDES"])
autor.nome_para_livro.should eql(["MENDES, Andreia de"])
end
it 'deveria retornar "MENDES, Andreia de"' do
autor = Autor.new(["ANDREIA De MENDES"])
autor.nome_para_livro.should eql(["MENDES, Andreia de"])
end
it 'deveria retornar "MENDES, Ághata de"' do
autor = Autor.new(["ághata De MENDES"])
autor.nome_para_livro.should eql(["MENDES, Ághata de"])
end
it 'deveria retornar "JUNIOR, Uriel de"' do
autor = Autor.new(["Uriel de Junior"])
autor.nome_para_livro.should eql(["JUNIOR, Uriel de"])
end
it 'deveria retornar "SANTOS NETO, João Sem Braço da Silva dos"' do
autor = Autor.new(["João sem braço da silva dos santos neto"])
autor.nome_para_livro.should eql(["SANTOS NETO, João Sem Braço da Silva dos"])
end
it 'deveria retornar "NETO, João Sem Braço da Silva dos Santos de"' do
autor = Autor.new(["João sem braço da silva dos santos de neto"])
autor.nome_para_livro.should eql(["NETO, João Sem Braço da Silva dos Santos de"])
end
it 'deveria retornar "NETO, Silva "' do
autor = Autor.new(["silva neto"])
autor.nome_para_livro.should eql(["NETO, Silva"])
end
it 'deveria retornar "NETO JUNIOR, Silva dos Santos"' do
autor = Autor.new(["silva dos santos neto junior"])
autor.nome_para_livro.should eql(["NETO JUNIOR, Silva dos Santos"])
end
it 'deveria retornar "NETÃO, Silva"' do
autor = Autor.new(["silva netão"])
autor.nome_para_livro.should eql(["NETÃO, Silva"])
end
it 'deveria retornar "MC\'LOUD, John"' do
autor = Autor.new(["John Mc'loud"])
autor.nome_para_livro.should eql(["MC'LOUD, John"])
end
it 'deveria retornar "C3PO, Petros"' do
autor = Autor.new(["Petros c3po"])
autor.nome_para_livro.should eql(["C3PO, Petros"])
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment