diff --git a/.circleci/config.yml b/.circleci/config.yml index 454ea6a..b56f115 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -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 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..03aacc9 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +# Created by .ignore support plugin (hsz.mobi) +/.idea/* diff --git a/.rspec b/.rspec index 4e1e0d2..bc1b37b 100644 --- a/.rspec +++ b/.rspec @@ -1 +1 @@ ---color +--color diff --git a/.rubocop.yml b/.rubocop.yml index b6e7d57..8c09444 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -1,2 +1,2 @@ -Documentation: - Enabled: false +Documentation: + Enabled: false diff --git a/Exception/l_exception.rb b/Exception/l_exception.rb new file mode 100644 index 0000000..778a074 --- /dev/null +++ b/Exception/l_exception.rb @@ -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 diff --git a/Gemfile.lock b/Gemfile.lock index ae332f1..d7997be 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -35,6 +35,7 @@ GEM PLATFORMS ruby + x64-mingw32 DEPENDENCIES rspec @@ -44,4 +45,4 @@ RUBY VERSION ruby 2.4.1p111 BUNDLED WITH - 1.15.4 + 1.16.6 diff --git a/Readme.md b/Readme.md index 28ca9b0..5ab609c 100644 --- a/Readme.md +++ b/Readme.md @@ -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` мають бути зеленими diff --git a/lesson1.rb b/lesson1.rb index 5f2c9a4..b154ba0 100644 --- a/lesson1.rb +++ b/lesson1.rb @@ -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 diff --git a/my_array.rb b/my_array.rb index 5146e42..a619c90 100644 --- a/my_array.rb +++ b/my_array.rb @@ -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 diff --git a/spec/lesson1_spec.rb b/spec/lesson1_spec.rb index d32dba4..7be1494 100644 --- a/spec/lesson1_spec.rb +++ b/spec/lesson1_spec.rb @@ -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