Created
September 15, 2011 12:45
-
-
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/]
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#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