-
Notifications
You must be signed in to change notification settings - Fork 40
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #54 from mikhaelangelo/master
Adiciona Resolução das Atividades #32 e #33 por @mikhaelangelo
- Loading branch information
Showing
4 changed files
with
177 additions
and
0 deletions.
There are no files selected for viewing
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
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 | ||
|
||
|
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
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
13
#33 extensao_para_string/2018-2/mikhael_extensao_string.rb
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
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 |
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
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 |