Skip to content

Commit

Permalink
Merge pull request #54 from mikhaelangelo/master
Browse files Browse the repository at this point in the history
Adiciona Resolução das Atividades #32 e #33 por @mikhaelangelo
  • Loading branch information
elissonmichael authored Oct 19, 2018
2 parents 0c08834 + cd7a3e2 commit 67ad36f
Show file tree
Hide file tree
Showing 4 changed files with 177 additions and 0 deletions.
32 changes: 32 additions & 0 deletions #32 modulo_para_numero/2018-2/mikhael_moeda.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
module MikhaelMoeda
def numero_para_moeda(numero, opcoes={})
unidade = opcoes[:unidade] || 'R$'
precisao = opcoes[:precisao] || 2
delimitador = opcoes[:delimitador] || '.'
separador = opcoes[:separador] || ','

separador = '' if precisao == 0
inteiro, decimal = numero.to_s.split('.')

i = inteiro.length

unless i <= 4
until i <= 2
i -= 3
inteiro = inteiro.insert(i, delimitador)
end
end

if precisao == 0
precisao_decimal = ''
else
decimal ||= "0"
decimal = decimal[0, precisao]
precisao_decimal = decimal.ljust(precisao, "0")
end

return unidade + inteiro + separador + precisao_decimal
end
end


82 changes: 82 additions & 0 deletions #32 modulo_para_numero/2018-2/mikhael_rspec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
require 'minitest/autorun'
require_relative '../2018-2/mikhael_moeda'

describe 'MikhaelMoeda' do

include MikhaelMoeda

describe '#numero_para_moeda' do

describe 'usando valores padrões' do

it "formata corretamente um inteiro" do
numero_para_moeda(200).must_equal "R$200,00"
numero_para_moeda(1051).must_equal "R$1051,00"
end

it "formata corretamente um float" do
numero_para_moeda(23.02).must_equal "R$23,02"
numero_para_moeda(0.5).must_equal "R$0,50"
numero_para_moeda(1050.23).must_equal "R$1050,23"
end

it "formata corretamente uma string" do
numero_para_moeda('2035').must_equal "R$2035,00"
numero_para_moeda('2035.5').must_equal "R$2035,50"
end

it "usa delimitadores para números muito grandes" do
numero_para_moeda(3_000_050_000).must_equal "R$3.000.050.000,00"
numero_para_moeda(3_000_050_000.5).must_equal "R$3.000.050.000,50"
numero_para_moeda(32_100_050_700).must_equal "R$32.100.050.700,00"
end

it "não tem delimitadores para números pequenos" do
numero_para_moeda(5).must_equal "R$5,00"
end
end

describe 'usando opções customizadas' do

it 'permite a mudança da :unidade' do
numero_para_moeda(25.5, {unidade: '$'}).must_equal "$25,50"
numero_para_moeda(64, {unidade: '&'}).must_equal "&64,00"
end

it 'permite a mudança da :precisao' do
numero_para_moeda(5, {precisao: 1}).must_equal "R$5,0"
numero_para_moeda(123, {precisao: 1}).must_equal "R$123,0"
numero_para_moeda(50.2, {precisao: 1}).must_equal "R$50,2"
numero_para_moeda(50.25, {precisao: 1}).must_equal "R$50,2"
numero_para_moeda(50.02, {precisao: 1}).must_equal "R$50,0"
end

it 'esconde o separador se a :precisao é 0' do
numero_para_moeda(25, {precisao: 0}).must_equal "R$25"
numero_para_moeda(25.5, {precisao: 0}).must_equal "R$25"
numero_para_moeda(23225.5, {precisao: 0}).must_equal "R$23.225"
end

it 'permite a mudança do :delimitador' do
numero_para_moeda(1000000, {delimitador: ';'}).must_equal "R$1;000;000,00"
numero_para_moeda(5050000, {delimitador: '%'}).must_equal "R$5%050%000,00"
end

it 'permite a mudança do :separador' do
numero_para_moeda(10, {separador: ';'}).must_equal "R$10;00"
numero_para_moeda(10.35, {separador: '*'}).must_equal "R$10*35"
end

it 'formata corretamente usando múltiplas opções' do
opcoes = { separador: ';', delimitador: '|', precisao: 2, unidade: '$' }
numero_para_moeda(10, opcoes).must_equal "$10;00"

opcoes2 = { separador: '#', delimitador: 'æ', precisao: 1, unidade: '&' }
numero_para_moeda(23, opcoes2).must_equal "&23#0"

opcoes3 = { separador: ';', delimitador: '|', precisao: 0, unidade: 'R$' }
numero_para_moeda(10050.23, opcoes3).must_equal "R$10|050"
end
end
end
end
13 changes: 13 additions & 0 deletions #33 extensao_para_string/2018-2/mikhael_extensao_string.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
class String

def titleize
return self if self == upcase
return split(' ').collect(&:capitalize).join(' ') if self[0] != self[0].capitalize
return upcase if split(' ').any?{|word| word = /[a-zA-Z]/ }
end

def blank?
/\A[[:space:]]*\z/ === self
end

end
50 changes: 50 additions & 0 deletions #33 extensao_para_string/2018-2/mikhael_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
require 'minitest/autorun'
require_relative 'mikhael_extensao_string'

describe 'String' do

describe '#titleize' do

it "escreve com letra maiúscula cada palavra em uma string" do
"mikhael".titleize.must_equal "Mikhael"
"mikhael ribeiro".titleize.must_equal "Mikhael Ribeiro"
end

it "funciona com strings de uma palavra" do
"mikhael".titleize.must_equal "Mikhael"
"mIKHAEL".titleize.must_equal "Mikhael"
end

it "escreve com letra maiúscula string toda em maiúsculo" do
"MIKHAEL".titleize.must_equal "MIKHAEL"
end

it "escreve com letra maiúscula strings com letras misturadas" do
"MiKhAeL".titleize.must_equal "MIKHAEL"
end
end

describe '#blank?' do

it "retorna true se a string é vazia" do
"".blank?.must_equal true
end

it "retorna true se a string contém apenas espaços" do
" ".blank?.must_equal true
end

it "retorna true se a string contém apenas tabs" do
"\t\t".blank?.must_equal true
end
it "retorna true se a string contém apenas espaços e tabs" do
"\t \t \t".blank?.must_equal true
end
it "retorna false se a string contém uma letra" do
"m".blank?.must_equal false
end
it "retorna false se a string contém um número" do
"1".blank?.must_equal false
end
end
end

0 comments on commit 67ad36f

Please sign in to comment.