From f79493aa715344f64cb12c2d1b807438a9033341 Mon Sep 17 00:00:00 2001 From: guidohcosta Date: Wed, 12 Jul 2017 14:22:32 -0300 Subject: [PATCH 1/8] Desafio 1 --- lib/challenge_1.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 lib/challenge_1.md diff --git a/lib/challenge_1.md b/lib/challenge_1.md new file mode 100644 index 0000000..8952454 --- /dev/null +++ b/lib/challenge_1.md @@ -0,0 +1,14 @@ +# Desafio 1 + +> O que esta expressão retorna e por quê? +> +> `true and 0 && !nil and 3 > 2` + +A expressão acima retorna `true`, pois é uma sequência de `and`s onde todos os valores são avaliados para `true`. +Simplificando a expressão: + +```ruby +true and true && true and true +``` + +Neste caso, `and` e `&&` podem ser tratados como equivalentes. O que leva ao resultado `true`. From 228549f26517cf81b59328b9a4d60ba3304c1678 Mon Sep 17 00:00:00 2001 From: guidohcosta Date: Wed, 12 Jul 2017 14:22:41 -0300 Subject: [PATCH 2/8] Desafio 2 --- lib/challenge_2.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 lib/challenge_2.md diff --git a/lib/challenge_2.md b/lib/challenge_2.md new file mode 100644 index 0000000..c0844ec --- /dev/null +++ b/lib/challenge_2.md @@ -0,0 +1,14 @@ +# Desafio 2 + +> Explique o funcionamento do operador _Or Equals_ +> +> `a ||= b` + +O operador _Or_Equals_, na expressão `a ||= b` faz com que ela seja equivalente à expressão `a || a = b`. +Isso é utilizado para tirar proveito de que o operador `||` é _lazy_. Sendo assim, caso _a_ seja logicamente verdadeiro, mantém o seu valor. Mas se _a_ é logicamente falso, recebe o valor da expressão do lado direito do operador. + +Um exemplo de uso do operador é garantir que uma variável tenha um valor sempre: + +```ruby +name ||= "Default Name" +``` From 04eceec62b87443bd14627ce1e9e9d7389904e82 Mon Sep 17 00:00:00 2001 From: guidohcosta Date: Wed, 12 Jul 2017 16:54:08 -0300 Subject: [PATCH 3/8] Desafio 3 --- Gemfile | 4 ++++ Gemfile.lock | 30 ++++++++++++++++++++++++++++++ lib/challenge_3.rb | 26 ++++++++++++++++++++++++++ spec/challenge_3_spec.rb | 29 +++++++++++++++++++++++++++++ 4 files changed, 89 insertions(+) create mode 100644 Gemfile create mode 100644 Gemfile.lock create mode 100644 lib/challenge_3.rb create mode 100644 spec/challenge_3_spec.rb diff --git a/Gemfile b/Gemfile new file mode 100644 index 0000000..32c9c3e --- /dev/null +++ b/Gemfile @@ -0,0 +1,4 @@ +# A sample Gemfile +source "https://rubygems.org" + +gem "rspec" diff --git a/Gemfile.lock b/Gemfile.lock new file mode 100644 index 0000000..b3225ea --- /dev/null +++ b/Gemfile.lock @@ -0,0 +1,30 @@ +GEM + remote: https://rubygems.org/ + specs: + ZenTest (4.11.1) + autotest (4.4.6) + ZenTest (>= 4.4.1) + diff-lcs (1.3) + rspec (3.6.0) + rspec-core (~> 3.6.0) + rspec-expectations (~> 3.6.0) + rspec-mocks (~> 3.6.0) + rspec-core (3.6.0) + rspec-support (~> 3.6.0) + rspec-expectations (3.6.0) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.6.0) + rspec-mocks (3.6.0) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.6.0) + rspec-support (3.6.0) + +PLATFORMS + ruby + +DEPENDENCIES + autotest + rspec + +BUNDLED WITH + 1.15.1 diff --git a/lib/challenge_3.rb b/lib/challenge_3.rb new file mode 100644 index 0000000..db990e1 --- /dev/null +++ b/lib/challenge_3.rb @@ -0,0 +1,26 @@ +class DevMagic + class << self + def print(number) + result = String.new + + result << "Dev" if dev?(number) + result << "Magic" if magic?(number) + result << number.to_s if result.empty? + result + end + + private + + def dev?(number) + number % 3 == 0 + end + + def magic?(number) + number % 5 == 0 + end + end +end + +(1..100).each do |n| + p DevMagic.print(n) +end diff --git a/spec/challenge_3_spec.rb b/spec/challenge_3_spec.rb new file mode 100644 index 0000000..d39ef82 --- /dev/null +++ b/spec/challenge_3_spec.rb @@ -0,0 +1,29 @@ +require './lib/challenge_3' + +describe DevMagic do + subject { DevMagic.print(number) } + + context "regular number" do + let(:number) { [ 1, 2, 4, 7 ].sample } + + it "prints the number" do + is_expected.to eq number.to_s + end + end + + context "divisible by 3" do + let(:number) { [ 3, 6, 9, 12 ].sample } + + it "prints dev" do + is_expected.to eq "Dev" + end + end + + context "divisible by 5" do + let(:number) { [ 5, 10, 15, 20 ].sample } + + it "prints dev" do + is_expected.to eq "Magic" + end + end +end From bc314b342a1d485cd377a1bf174228c310961f9a Mon Sep 17 00:00:00 2001 From: guidohcosta Date: Wed, 12 Jul 2017 17:07:01 -0300 Subject: [PATCH 4/8] estrutura de diretorios do desafio 3 alterada e desafio 4 --- lib/{challenge_3.rb => challenge_3/dev_magic.rb} | 4 ---- lib/challenge_3/script.rb | 5 +++++ lib/challenge_4.rb | 9 +++++++++ spec/challenge_3_spec.rb | 2 +- spec/challenge_4_spec.rb | 15 +++++++++++++++ 5 files changed, 30 insertions(+), 5 deletions(-) rename lib/{challenge_3.rb => challenge_3/dev_magic.rb} (88%) create mode 100644 lib/challenge_3/script.rb create mode 100644 lib/challenge_4.rb create mode 100644 spec/challenge_4_spec.rb diff --git a/lib/challenge_3.rb b/lib/challenge_3/dev_magic.rb similarity index 88% rename from lib/challenge_3.rb rename to lib/challenge_3/dev_magic.rb index db990e1..5d7abd5 100644 --- a/lib/challenge_3.rb +++ b/lib/challenge_3/dev_magic.rb @@ -20,7 +20,3 @@ def magic?(number) end end end - -(1..100).each do |n| - p DevMagic.print(n) -end diff --git a/lib/challenge_3/script.rb b/lib/challenge_3/script.rb new file mode 100644 index 0000000..db7a4cf --- /dev/null +++ b/lib/challenge_3/script.rb @@ -0,0 +1,5 @@ +require 'dev_magic' + +(1..100).each do |n| + p DevMagic.print(n) +end diff --git a/lib/challenge_4.rb b/lib/challenge_4.rb new file mode 100644 index 0000000..60d4ef5 --- /dev/null +++ b/lib/challenge_4.rb @@ -0,0 +1,9 @@ +module Extensions + module String + module Palindrome + def palindrome? + self == self.reverse + end + end + end +end diff --git a/spec/challenge_3_spec.rb b/spec/challenge_3_spec.rb index d39ef82..b5151e8 100644 --- a/spec/challenge_3_spec.rb +++ b/spec/challenge_3_spec.rb @@ -1,4 +1,4 @@ -require './lib/challenge_3' +require './lib/challenge_3/dev_magic' describe DevMagic do subject { DevMagic.print(number) } diff --git a/spec/challenge_4_spec.rb b/spec/challenge_4_spec.rb new file mode 100644 index 0000000..dc90563 --- /dev/null +++ b/spec/challenge_4_spec.rb @@ -0,0 +1,15 @@ +require './lib/challenge_4' + +String.include Extensions::String::Palindrome + +describe "a" do + it { is_expected.to be_palindrome } +end + +describe "girafarig" do + it { is_expected.to be_palindrome } +end + +describe "devMagic" do + it { is_expected.not_to be_palindrome } +end From bffa278f9ad899dfda7673cbd3ff46cb37356c1b Mon Sep 17 00:00:00 2001 From: guidohcosta Date: Wed, 12 Jul 2017 17:47:28 -0300 Subject: [PATCH 5/8] Arruma teste para Magic e adiciona testes faltantes para DevMagic --- spec/challenge_3_spec.rb | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/spec/challenge_3_spec.rb b/spec/challenge_3_spec.rb index b5151e8..c242860 100644 --- a/spec/challenge_3_spec.rb +++ b/spec/challenge_3_spec.rb @@ -20,10 +20,18 @@ end context "divisible by 5" do - let(:number) { [ 5, 10, 15, 20 ].sample } + let(:number) { [ 5, 10, 20, 25 ].sample } it "prints dev" do is_expected.to eq "Magic" end end + + context "divisible by both" do + let(:number) { [ 15, 30, 45, 60 ].sample } + + it "prints dev" do + is_expected.to eq "DevMagic" + end + end end From 73a380bc56be30f02fcb36ae5f2b98f14006b391 Mon Sep 17 00:00:00 2001 From: guidohcosta Date: Wed, 12 Jul 2017 17:47:39 -0300 Subject: [PATCH 6/8] Desafio 5 --- lib/challenge_5.rb | 15 +++++++++++++++ spec/challenge_5_spec.rb | 19 +++++++++++++++++++ 2 files changed, 34 insertions(+) create mode 100644 lib/challenge_5.rb create mode 100644 spec/challenge_5_spec.rb diff --git a/lib/challenge_5.rb b/lib/challenge_5.rb new file mode 100644 index 0000000..417c7b9 --- /dev/null +++ b/lib/challenge_5.rb @@ -0,0 +1,15 @@ +class IntegerConverter + class << self + def to_string(number) + validate(number) + + "#{ number }" + end + + private + + def validate(number) + raise ArgumentError unless number.is_a? Integer + end + end +end diff --git a/spec/challenge_5_spec.rb b/spec/challenge_5_spec.rb new file mode 100644 index 0000000..f313827 --- /dev/null +++ b/spec/challenge_5_spec.rb @@ -0,0 +1,19 @@ +require './lib/challenge_5' + +describe IntegerConverter do + subject(:convert) { IntegerConverter.to_string(number) } + + context "given a number" do + let(:number) { rand(100) } + + it { is_expected.to eq number.to_s } + end + + context "given an invalid input" do + let(:number) { nil } + + it "throws an exception" do + expect { convert }.to raise_error ArgumentError + end + end +end From aadcbe999d0154957f24154b977886b3f648b452 Mon Sep 17 00:00:00 2001 From: guidohcosta Date: Wed, 12 Jul 2017 17:51:54 -0300 Subject: [PATCH 7/8] =?UTF-8?q?mudan=C3=A7as=20na=20estrutura=20de=20arqui?= =?UTF-8?q?vos?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/{ => ruby-dev-challenge}/challenge_1.md | 0 lib/{ => ruby-dev-challenge}/challenge_2.md | 0 lib/{ => ruby-dev-challenge}/challenge_3/dev_magic.rb | 0 lib/{ => ruby-dev-challenge}/challenge_3/script.rb | 0 lib/{ => ruby-dev-challenge}/challenge_4.rb | 0 lib/{ => ruby-dev-challenge}/challenge_5.rb | 0 spec/challenge_3_spec.rb | 2 +- spec/challenge_4_spec.rb | 2 +- spec/challenge_5_spec.rb | 2 +- 9 files changed, 3 insertions(+), 3 deletions(-) rename lib/{ => ruby-dev-challenge}/challenge_1.md (100%) rename lib/{ => ruby-dev-challenge}/challenge_2.md (100%) rename lib/{ => ruby-dev-challenge}/challenge_3/dev_magic.rb (100%) rename lib/{ => ruby-dev-challenge}/challenge_3/script.rb (100%) rename lib/{ => ruby-dev-challenge}/challenge_4.rb (100%) rename lib/{ => ruby-dev-challenge}/challenge_5.rb (100%) diff --git a/lib/challenge_1.md b/lib/ruby-dev-challenge/challenge_1.md similarity index 100% rename from lib/challenge_1.md rename to lib/ruby-dev-challenge/challenge_1.md diff --git a/lib/challenge_2.md b/lib/ruby-dev-challenge/challenge_2.md similarity index 100% rename from lib/challenge_2.md rename to lib/ruby-dev-challenge/challenge_2.md diff --git a/lib/challenge_3/dev_magic.rb b/lib/ruby-dev-challenge/challenge_3/dev_magic.rb similarity index 100% rename from lib/challenge_3/dev_magic.rb rename to lib/ruby-dev-challenge/challenge_3/dev_magic.rb diff --git a/lib/challenge_3/script.rb b/lib/ruby-dev-challenge/challenge_3/script.rb similarity index 100% rename from lib/challenge_3/script.rb rename to lib/ruby-dev-challenge/challenge_3/script.rb diff --git a/lib/challenge_4.rb b/lib/ruby-dev-challenge/challenge_4.rb similarity index 100% rename from lib/challenge_4.rb rename to lib/ruby-dev-challenge/challenge_4.rb diff --git a/lib/challenge_5.rb b/lib/ruby-dev-challenge/challenge_5.rb similarity index 100% rename from lib/challenge_5.rb rename to lib/ruby-dev-challenge/challenge_5.rb diff --git a/spec/challenge_3_spec.rb b/spec/challenge_3_spec.rb index c242860..d8dffa2 100644 --- a/spec/challenge_3_spec.rb +++ b/spec/challenge_3_spec.rb @@ -1,4 +1,4 @@ -require './lib/challenge_3/dev_magic' +require './lib/ruby-dev-challenge/challenge_3/dev_magic' describe DevMagic do subject { DevMagic.print(number) } diff --git a/spec/challenge_4_spec.rb b/spec/challenge_4_spec.rb index dc90563..a7fb091 100644 --- a/spec/challenge_4_spec.rb +++ b/spec/challenge_4_spec.rb @@ -1,4 +1,4 @@ -require './lib/challenge_4' +require './lib/ruby-dev-challenge/challenge_4' String.include Extensions::String::Palindrome diff --git a/spec/challenge_5_spec.rb b/spec/challenge_5_spec.rb index f313827..9b0bbee 100644 --- a/spec/challenge_5_spec.rb +++ b/spec/challenge_5_spec.rb @@ -1,4 +1,4 @@ -require './lib/challenge_5' +require './lib/ruby-dev-challenge/challenge_5' describe IntegerConverter do subject(:convert) { IntegerConverter.to_string(number) } From b0cf3f4127dcfe2afed45e5a4137dfef279529ac Mon Sep 17 00:00:00 2001 From: guidohcosta Date: Wed, 12 Jul 2017 17:56:55 -0300 Subject: [PATCH 8/8] atualizando gems e removendo conteudo desnecessario --- Gemfile.lock | 4 ---- 1 file changed, 4 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index b3225ea..a8657ed 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,9 +1,6 @@ GEM remote: https://rubygems.org/ specs: - ZenTest (4.11.1) - autotest (4.4.6) - ZenTest (>= 4.4.1) diff-lcs (1.3) rspec (3.6.0) rspec-core (~> 3.6.0) @@ -23,7 +20,6 @@ PLATFORMS ruby DEPENDENCIES - autotest rspec BUNDLED WITH