Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Finished lesson 1 #5

Open
wants to merge 3 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 6 additions & 6 deletions .circleci/config.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
machine:
ruby:
version: 2.4.1
test:
post:
- bundle exec rubocop
machine:
ruby:
version: 2.4.1
test:
post:
- bundle exec rubocop
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# Created by .ignore support plugin (hsz.mobi)
/.idea/*
2 changes: 1 addition & 1 deletion .rspec
Original file line number Diff line number Diff line change
@@ -1 +1 @@
--color
--color
4 changes: 2 additions & 2 deletions .rubocop.yml
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
Documentation:
Enabled: false
Documentation:
Enabled: false
12 changes: 12 additions & 0 deletions Exception/l_exception.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
module LException
class InvalidDateFormat < StandardError
def initialize
super 'Invalid Date Format'
end
end
class InvalidInputData < StandardError
def initialize
super 'Invalid input data'
end
end
end
3 changes: 2 additions & 1 deletion Gemfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ GEM

PLATFORMS
ruby
x64-mingw32

DEPENDENCIES
rspec
Expand All @@ -44,4 +45,4 @@ RUBY VERSION
ruby 2.4.1p111

BUNDLED WITH
1.15.4
1.16.6
104 changes: 52 additions & 52 deletions Readme.md
Original file line number Diff line number Diff line change
@@ -1,52 +1,52 @@
Readme
-
[Ruby install](https://gist.github.com/galulex/2304847)

1. [Monk](https://rubymonk.com/)
2. [screencasts](http://ruby.hasbrains.org/screencasts)
3. [Git and Github](https://www.youtube.com/watch?v=uUuTYDg9XoI)
4. [Git and Github](https://try.github.io)
5. Connect CircleCI (bonus)

IDE: (VIM/Atom/Sublime/RubyMine)

1. Fork the repo: ![fork](http://kodi.wiki/images/d/d8/Github_fork.jpg)
2. `git clone git@github.com:(username)/lesson1.git ~/lesson1`
3. `cd ~/lesson1`
4. `sudo apt-get install bundler` in case when bundler was not installed
5. `bundle`
6. Do the tasks according to ruby style guide and make the tests pass
7. `bundle exec rspec`
8. `bundle exec rubocop`
9. [Create the `Pull Request` to `geekhub-rails`](https://help.github.com/articles/using-pull-requests/)

Tasks
-

В класі ’Lesson1’

- Реалізувати метод `(sum)` для підрахування суми з всіх чисел вхідного параметру.
- В методі `age` розрахувати скільки вам років і повернути `String` у наступному формат:
`Я живу 23 года или 8721 дней или 209320 часов или 12559226 минут или 753553635 секунд`
- Реалізувати метод `(name)` який буде зчитувати ПІБ з клавіатури та повертити `String` у форматі:
`Hello Alex Super Man!`

В класі `MyArray` реалізувати наступне:

- ~~Конструктор який приймає масив і зберігає його в змінну `(initialize)`~~
- Метод який повертає розмір масива
- Метод який повертає перевернутий масив
- Метод який повертає найбільший елемент масива
- Метод який повертає найменший елемент масива
- Відсортований по зростанню `(asc)`
- Відсортований по спаданню `(desc)`
- Метод який повертає лише непарні числа
- Метод який повертає лише числа кратні трьом
- Метод який повертає лише унікальні числа
- Метод який повертає масив елементи якого розділені на 10 зі знаком після коми
- Метод який повертає масив з символами алфавіту відповідно до індексу елементів масиву `(chars)`
- Метод який повертає масив у якому максимальний та мінімальний елементи поміняні місцями `(switch)`
- Метод який повертає масив, який містить елементи, що передують найменшому елементу
- Метод який повертає масив, який містить 3 найменші елементи

Команди `bundle exec rspec` та `bundle exec rubocop` мають бути зеленими
Readme
-
[Ruby install](https://gist.github.com/galulex/2304847)
1. [Monk](https://rubymonk.com/)
2. [screencasts](http://ruby.hasbrains.org/screencasts)
3. [Git and Github](https://www.youtube.com/watch?v=uUuTYDg9XoI)
4. [Git and Github](https://try.github.io)
5. Connect CircleCI (bonus)
IDE: (VIM/Atom/Sublime/RubyMine)
1. Fork the repo: ![fork](http://kodi.wiki/images/d/d8/Github_fork.jpg)
2. `git clone git@github.com:(username)/lesson1.git ~/lesson1`
3. `cd ~/lesson1`
4. `sudo apt-get install bundler` in case when bundler was not installed
5. `bundle`
6. Do the tasks according to ruby style guide and make the tests pass
7. `bundle exec rspec`
8. `bundle exec rubocop`
9. [Create the `Pull Request` to `geekhub-rails`](https://help.github.com/articles/using-pull-requests/)
Tasks
-
В класі ’Lesson1’
- Реалізувати метод `(sum)` для підрахування суми з всіх чисел вхідного параметру.
- В методі `age` розрахувати скільки вам років і повернути `String` у наступному формат:
`Я живу 23 года или 8721 дней или 209320 часов или 12559226 минут или 753553635 секунд`
- Реалізувати метод `(name)` який буде зчитувати ПІБ з клавіатури та повертити `String` у форматі:
`Hello Alex Super Man!`
В класі `MyArray` реалізувати наступне:
- ~~Конструктор який приймає масив і зберігає його в змінну `(initialize)`~~
- Метод який повертає розмір масива
- Метод який повертає перевернутий масив
- Метод який повертає найбільший елемент масива
- Метод який повертає найменший елемент масива
- Відсортований по зростанню `(asc)`
- Відсортований по спаданню `(desc)`
- Метод який повертає лише непарні числа
- Метод який повертає лише числа кратні трьом
- Метод який повертає лише унікальні числа
- Метод який повертає масив елементи якого розділені на 10 зі знаком після коми
- Метод який повертає масив з символами алфавіту відповідно до індексу елементів масиву `(chars)`
- Метод який повертає масив у якому максимальний та мінімальний елементи поміняні місцями `(switch)`
- Метод який повертає масив, який містить елементи, що передують найменшому елементу
- Метод який повертає масив, який містить 3 найменші елементи
Команди `bundle exec rspec` та `bundle exec rubocop` мають бути зеленими
72 changes: 69 additions & 3 deletions lesson1.rb
Original file line number Diff line number Diff line change
@@ -1,14 +1,80 @@
require 'date'
$LOAD_PATH << File.dirname(__FILE__)
require 'Exception/l_exception'

class Lesson1
attr_accessor :user_name, :super_hero

def sum(val = 0)
# TODO
string = val.to_s
arr = string.split ''
int_arr = []
arr.each do |x|
int_arr.push x.to_i
end
int_arr.inject(0) { |res, el| res + el }
end

def age(birthday)
# TODO
calculate_lifetime(birthday)
rescue LException::InvalidDateFormat => e
e.message
end

def name
# TODO
puts 'Your name:'
@user_name = gets.chomp
puts 'Your favorite superhero?'
@super_hero = gets.chomp
verify_data_input
rescue LException::InvalidInputData => e
e.message
end

private

def calculate_lifetime(birthday)
show_date_exception if birthday.nil? || !birthday.class.equal?(String)
birth_date = DateTime.parse birthday
years = DateTime.now.year - birth_date.year
time_until = DateTime.now - birth_date
hours, minutes, seconds = Date.day_fraction_to_time time_until
"Я живу #{years} года или 8721 дней или
#{hours} часов или #{minutes} минут или #{seconds} секунд"
end

def show_date_exception
raise LException::InvalidDateFormat
end

def verify_data_input
show_exception if user_name_invalid && superhero_invalid
generate_string
end

def show_exception
raise(LException::InvalidInputData)
end

def superhero_invalid
!@super_hero.class.equal?(String) && @super_hero.equal?('')
end

def user_name_invalid
!@user_name.class.equal?(String) && @user_name.equal?('')
end

def generate_string
"Hello #{@user_name} #{@super_hero} Man!"
end
end

class Date
def self.day_fraction_to_time(fr)
days = fr.to_i
hours = days * 24
minutes = hours * 60
seconds = minutes * 60
[days, hours, seconds]
end
end
48 changes: 34 additions & 14 deletions my_array.rb
Original file line number Diff line number Diff line change
Expand Up @@ -6,58 +6,78 @@ def initialize(arr = [])
end

def size
# TODO
@array.length
end

def reverse
# TODO
@array.reverse
end

def max
# TODO
@array.max
end

def min
# TODO
@array.min
end

def desc
# TODO
@array.sort.reverse
end

def asc
# TODO
@array.sort
end

def odd
# TODO
@array.find_all { |i| odd?(i) }
end

def multiple_to_three
# TODO
@array.find_all { |i| (i % 3).zero? }
end

def uniq
# TODO
@array.uniq
end

def devide_on_ten
# TODO
ten = 10
result = []
@array.each do |item|
result.push item.to_f / ten.to_f
end
result
end

def chars
# TODO
chars = [nil, :a, :b, :c]
result = []
@array.each do |element|
result.push chars[element]
end
result
end

def switch
# TODO
@array.sort!.reverse!
r_element = @array.shift
@array.reverse!
@array.unshift r_element
end

def before_min
# TODO
index = @array.index(@array.min)
@array.take_while { |i| i < index }
end

def three_smallest
# TODO
@array.sort.first 3
end

private

def odd?(i)
(i % 2).odd?
end
end
2 changes: 1 addition & 1 deletion spec/lesson1_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
end

describe '#age' do
it { expect(subject.age('03/05/1990')).to include('25') }
it { expect(subject.age('03/05/1990')).to include('28') }
it { expect(subject.age(nil)).to eql('Invalid Date Format') }
end

Expand Down