From 3990a7a499b743c827dae44e50747457261f10de Mon Sep 17 00:00:00 2001 From: dzemlianoi Date: Tue, 18 Oct 2016 11:53:53 +0300 Subject: [PATCH 1/5] ready for checking commit --- data/library.yml | 124 +++++++++++++++++++++++++++++++++++++++++++++++ index.rb | 62 ++++++++++++++++++++++++ lib/author.rb | 12 +++++ lib/book.rb | 20 ++++++++ lib/library.rb | 80 ++++++++++++++++++++++++++++++ lib/loader.rb | 36 ++++++++++++++ lib/order.rb | 13 +++++ lib/reader.rb | 15 ++++++ 8 files changed, 362 insertions(+) create mode 100644 data/library.yml create mode 100644 index.rb create mode 100644 lib/author.rb create mode 100644 lib/book.rb create mode 100644 lib/library.rb create mode 100644 lib/loader.rb create mode 100644 lib/order.rb create mode 100644 lib/reader.rb diff --git a/data/library.yml b/data/library.yml new file mode 100644 index 0000000..ff8841c --- /dev/null +++ b/data/library.yml @@ -0,0 +1,124 @@ +--- +:authors: +- &1 !ruby/object:Author + name: J. Roaling + biography: Hi +- &2 !ruby/object:Author + name: S. King + biography: Hello +- &3 !ruby/object:Author + name: M. Molier + biography: Hello +- &4 !ruby/object:Author + name: G. Martin + biography: Hello +- &5 !ruby/object:Author + name: M. Tven + biography: Hello +- !ruby/object:Author + name: F. Kafka + biography: Hello +- &6 !ruby/object:Author + name: R. Somsmert + biography: Hello +:books: +- &8 !ruby/object:Book + title: Harry Potter I + author: *1 +- &10 !ruby/object:Book + title: Harry Potter II + author: *1 +- &12 !ruby/object:Book + title: Harry Potter III + author: *1 +- &14 !ruby/object:Book + title: Dark Tower + author: *2 +- &16 !ruby/object:Book + title: Mizo + author: *3 +- &17 !ruby/object:Book + title: Game of thrones I + author: *4 +- !ruby/object:Book + title: Tom Sawyer + author: *5 +- !ruby/object:Book + title: All about us + author: *6 +:readers: +- &7 !ruby/object:Reader + name: Denis + email: dzem@gmail.com + city: Dnipro + street: GS + house: 140 +- &11 !ruby/object:Reader + name: Test + email: test@gmail.com + city: Kiev + street: KM + house: 101 +- &13 !ruby/object:Reader + name: Testovskiy + email: testovskiy@gmail.com + city: Uzhgorod + street: KL + house: 22 +- &15 !ruby/object:Reader + name: Testarius + email: testarius@gmail.com + city: Odessa + street: BH + house: 71 +- &9 !ruby/object:Reader + name: Testevich + email: testarich@gmail.com + city: Kharkiv + street: YM + house: 41 +:orders: +- !ruby/object:Order + reader: *7 + book: *8 + date: 2016-10-18 +- !ruby/object:Order + reader: *9 + book: *10 + date: 2016-10-18 +- !ruby/object:Order + reader: *11 + book: *12 + date: 2016-10-18 +- !ruby/object:Order + reader: *13 + book: *14 + date: 2016-10-18 +- !ruby/object:Order + reader: *15 + book: *16 + date: 2016-10-18 +- !ruby/object:Order + reader: *9 + book: *17 + date: 2016-10-18 +- !ruby/object:Order + reader: *9 + book: *14 + date: 2016-10-18 +- !ruby/object:Order + reader: *7 + book: *14 + date: 2016-10-18 +- !ruby/object:Order + reader: *15 + book: *14 + date: 2016-10-18 +- !ruby/object:Order + reader: *13 + book: *12 + date: 2016-10-18 +- !ruby/object:Order + reader: *11 + book: *10 + date: 2016-10-18 diff --git a/index.rb b/index.rb new file mode 100644 index 0000000..69f595b --- /dev/null +++ b/index.rb @@ -0,0 +1,62 @@ +require 'yaml' +Dir['./lib/*.rb'].each { |file| require file } + +library = Library.new +library.load('library') +author1 = Author.new('J. Roaling', 'Hi') +author2 = Author.new('S. King', 'Hello') +author3 = Author.new('M. Molier', 'Hello') +author4 = Author.new('G. Martin', 'Hello') +author5 = Author.new('M. Tven', 'Hello') +author6 = Author.new('F. Kafka', 'Hello') +author7 = Author.new('R. Somsmert', 'Hello') +# +library.add_authors(author1, author2, author3, author4, author5, author6, author7) +# +book = Book.new('Harry Potter I', author1) +book1 = Book.new('Harry Potter II', author1) +book2 = Book.new('Harry Potter III', author1) +book3 = Book.new('Dark Tower', author2) +book4 = Book.new('Mizo', author3) +book5 = Book.new('Game of thrones I', author4) +book6 = Book.new('Game of thrones II', author4) +book6 = Book.new('Tom Sawyer', author5) +book7 = Book.new('All about us', author7) +# +library.add_books(book, book1, book2, book3, book4, book5, book6, book7) +# +reader1 = Reader.new('Denis', 'dzem@gmail.com', 'Dnipro', 'GS', 140) +reader2 = Reader.new('Test', 'test@gmail.com', 'Kiev', 'KM', 101) +reader3 = Reader.new('Testovskiy', 'testovskiy@gmail.com', 'Uzhgorod', 'KL', 22) +reader4 = Reader.new('Testarius', 'testarius@gmail.com', 'Odessa', 'BH', 71) +reader5 = Reader.new('Testevich', 'testarich@gmail.com', 'Kharkiv', 'YM', 41) +library.add_readers(reader1, reader2, reader3, reader4, reader5) +# +order = Order.new(library.readers[0], library.books[0]) +order1 = Order.new(library.readers[4], library.books[1]) +order2 = Order.new(library.readers[1], library.books[2]) +order3 = Order.new(library.readers[2], library.books[3]) +order4 = Order.new(library.readers[3], library.books[4]) +order5 = Order.new(library.readers[4], library.books[5]) +order6 = Order.new(library.readers[4], library.books[3]) +order7 = Order.new(library.readers[0], library.books[3]) +order8 = Order.new(library.readers[3], library.books[3]) +order9 = Order.new(library.readers[2], library.books[2]) +order10 = Order.new(library.readers[1], library.books[1]) + +# library.add_orders(Order.new(library.readers[0], library.books[3])) +# library.add_orders(order,order1,order2,order3,order4,order5,order6,order7,order8,order9,order10) + +library.save('library') + +# puts 'Books -------------------' +# puts library.books.inspect +# puts 'Authors -----------------' +# puts library.authors.inspect +# puts 'Readers -----------------' +# puts library.readers.inspect +# puts 'Orders ------------------' +# puts library.orders.inspect +puts library.top_reader.name +puts library.top_book.title +puts library.top_books_statistics(3) diff --git a/lib/author.rb b/lib/author.rb new file mode 100644 index 0000000..65dbef4 --- /dev/null +++ b/lib/author.rb @@ -0,0 +1,12 @@ +class Author + attr_accessor :name, :biography + + def initialize(name, biography = 'No biography yet') + @name = name + @biography = biography + end + + def ==(other) + name == other.name if other.instance_of? Author + end +end diff --git a/lib/book.rb b/lib/book.rb new file mode 100644 index 0000000..9517665 --- /dev/null +++ b/lib/book.rb @@ -0,0 +1,20 @@ +class Book + attr_accessor :title, :author + + def initialize(title, author) + @title = title + @author = author + end + + def ==(other) + check_author(other) && check_title(other) if other.is_a? Book + end + + def check_author(other) + author == other.author + end + + def check_title(other) + title == other.title + end +end diff --git a/lib/library.rb b/lib/library.rb new file mode 100644 index 0000000..1e6a104 --- /dev/null +++ b/lib/library.rb @@ -0,0 +1,80 @@ +class Library + include Loader + attr_accessor :authors, :readers, :books, :orders + def initialize + @authors = [] + @books = [] + @readers = [] + @orders = [] + end + + def add_books(*books) + books.each do |book| + @books.push(book) if check(book, Book, @books) && @authors.include?(book.author) + end + end + + def add_authors(*authors) + authors.each do |author| + @authors.push(author) if check(author, Author, @authors) + end + end + + def add_readers(*readers) + readers.each do |reader| + @readers.push(reader) if check(reader, Reader, @readers) + end + end + + def add_orders(*orders) + orders.each do |order| + if @readers.include?(order.reader) && @books.include?(order.book) + @orders.push(order) + else + raise 'No such reader or Book in the Library' + end + end + end + + def check(item, type, collection) + item.is_a?(type) && !collection.include?(item) + end + + def grouping_by(flag) + @orders.group_by do |order| + order.public_send(flag) + end + end + + def sort_grouped(data) + sorted = data.sort_by{ |k,v| v.size } + sorted.reverse.to_h + end + + def top_of(flag) + grouped_orders = grouping_by(flag) + sorted_orders = sort_grouped(grouped_orders) + sorted_orders.keys + end + + def top_reader + top_of(:reader).first + end + + def top_book + top_of(:book).first + end + + def top_books_statistics(number) + top_books_readers = [] + raise 'Annormal quantity of books' if number > top_of(:book).count + first_n_books = top_of(:book).first(number) + books_data = grouping_by(:book) + first_n_books.each do |book| + books_data[book].each do |order| + top_books_readers.push(order.reader) + end + end + top_books_readers.uniq.size + end +end diff --git a/lib/loader.rb b/lib/loader.rb new file mode 100644 index 0000000..3ab95d6 --- /dev/null +++ b/lib/loader.rb @@ -0,0 +1,36 @@ +module Loader + BACKUP_NAME = 'data' + PATH = './data/' + EXTENSION = '.yml' + + def load(file_name = BACKUP_NAME) + file_name += EXTENSION.to_s + pull_data(file_name) if File.exist?(PATH + file_name) + end + + def aquire_data + { + authors: @authors, + books: @books, + readers: @readers, + orders: @orders + } + end + + def pull_data(filename) + file = File.open(PATH + filename) + data = YAML.load(file) + @authors = data[:authors] + @books = data[:books] + @readers = data[:readers] + @orders = data[:orders] + file.close + end + + def save(file_name = BACKUP_NAME) + full_path = PATH.to_s + file_name.to_s + EXTENSION + data = YAML.dump(aquire_data) + File.new(full_path, 'w') unless File.exist?(full_path) + File.write(full_path, data) + end +end diff --git a/lib/order.rb b/lib/order.rb new file mode 100644 index 0000000..710ee99 --- /dev/null +++ b/lib/order.rb @@ -0,0 +1,13 @@ +class Order + attr_accessor :reader, :book, :date + + def initialize(reader, book, date = Date.today) + if reader.instance_of?(Reader) && book.instance_of?(Book) + @reader = reader + @book = book + @date = date + else + raise 'Unnormed data' + end + end +end diff --git a/lib/reader.rb b/lib/reader.rb new file mode 100644 index 0000000..593ddbc --- /dev/null +++ b/lib/reader.rb @@ -0,0 +1,15 @@ +class Reader + attr_accessor :name, :email, :city, :street, :house + + def initialize(name, email, city, street, house) + @name = name + @email = email + @city = city + @street = street + @house = house + end + + def ==(other) + @email == other.email if other.instance_of?Reader + end +end From bcbceeed0f36998299938b41da7f149e24677224 Mon Sep 17 00:00:00 2001 From: dzemlianoi Date: Tue, 18 Oct 2016 11:58:16 +0300 Subject: [PATCH 2/5] small ref --- index.rb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/index.rb b/index.rb index 69f595b..22293e2 100644 --- a/index.rb +++ b/index.rb @@ -44,11 +44,14 @@ order9 = Order.new(library.readers[2], library.books[2]) order10 = Order.new(library.readers[1], library.books[1]) -# library.add_orders(Order.new(library.readers[0], library.books[3])) # library.add_orders(order,order1,order2,order3,order4,order5,order6,order7,order8,order9,order10) library.save('library') +puts library.top_reader.name +puts library.top_book.title +puts library.top_books_statistics(3) + # puts 'Books -------------------' # puts library.books.inspect # puts 'Authors -----------------' @@ -57,6 +60,3 @@ # puts library.readers.inspect # puts 'Orders ------------------' # puts library.orders.inspect -puts library.top_reader.name -puts library.top_book.title -puts library.top_books_statistics(3) From bd016ac14753c7cd11a2ecac4d2316b7bcf6eb30 Mon Sep 17 00:00:00 2001 From: dzemlianoi Date: Wed, 19 Oct 2016 15:24:17 +0300 Subject: [PATCH 3/5] ref done --- data/library.yml | 62 +++++++++++++++++++---------------------- index.rb | 14 ++++++---- lib/library.rb | 72 ++++++++++++++++++++---------------------------- 3 files changed, 67 insertions(+), 81 deletions(-) diff --git a/data/library.yml b/data/library.yml index ff8841c..cb9b53b 100644 --- a/data/library.yml +++ b/data/library.yml @@ -22,22 +22,22 @@ name: R. Somsmert biography: Hello :books: -- &8 !ruby/object:Book +- !ruby/object:Book title: Harry Potter I author: *1 -- &10 !ruby/object:Book +- &8 !ruby/object:Book title: Harry Potter II author: *1 -- &12 !ruby/object:Book +- &10 !ruby/object:Book title: Harry Potter III author: *1 -- &14 !ruby/object:Book +- &12 !ruby/object:Book title: Dark Tower author: *2 -- &16 !ruby/object:Book +- &14 !ruby/object:Book title: Mizo author: *3 -- &17 !ruby/object:Book +- &15 !ruby/object:Book title: Game of thrones I author: *4 - !ruby/object:Book @@ -47,31 +47,31 @@ title: All about us author: *6 :readers: -- &7 !ruby/object:Reader +- &16 !ruby/object:Reader name: Denis email: dzem@gmail.com city: Dnipro street: GS house: 140 -- &11 !ruby/object:Reader +- &9 !ruby/object:Reader name: Test email: test@gmail.com city: Kiev street: KM house: 101 -- &13 !ruby/object:Reader +- &11 !ruby/object:Reader name: Testovskiy email: testovskiy@gmail.com city: Uzhgorod street: KL house: 22 -- &15 !ruby/object:Reader +- &13 !ruby/object:Reader name: Testarius email: testarius@gmail.com city: Odessa street: BH house: 71 -- &9 !ruby/object:Reader +- &7 !ruby/object:Reader name: Testevich email: testarich@gmail.com city: Kharkiv @@ -81,44 +81,40 @@ - !ruby/object:Order reader: *7 book: *8 - date: 2016-10-18 + date: 2016-10-19 - !ruby/object:Order reader: *9 book: *10 - date: 2016-10-18 + date: 2016-10-19 - !ruby/object:Order reader: *11 book: *12 - date: 2016-10-18 + date: 2016-10-19 - !ruby/object:Order reader: *13 book: *14 - date: 2016-10-18 -- !ruby/object:Order - reader: *15 - book: *16 - date: 2016-10-18 -- !ruby/object:Order - reader: *9 - book: *17 - date: 2016-10-18 + date: 2016-10-19 - !ruby/object:Order - reader: *9 - book: *14 - date: 2016-10-18 + reader: *7 + book: *15 + date: 2016-10-19 - !ruby/object:Order reader: *7 - book: *14 - date: 2016-10-18 + book: *12 + date: 2016-10-19 - !ruby/object:Order - reader: *15 - book: *14 - date: 2016-10-18 + reader: *16 + book: *12 + date: 2016-10-19 - !ruby/object:Order reader: *13 book: *12 - date: 2016-10-18 + date: 2016-10-19 - !ruby/object:Order reader: *11 book: *10 - date: 2016-10-18 + date: 2016-10-19 +- !ruby/object:Order + reader: *9 + book: *8 + date: 2016-10-19 diff --git a/index.rb b/index.rb index 22293e2..f1e618d 100644 --- a/index.rb +++ b/index.rb @@ -11,8 +11,6 @@ author6 = Author.new('F. Kafka', 'Hello') author7 = Author.new('R. Somsmert', 'Hello') # -library.add_authors(author1, author2, author3, author4, author5, author6, author7) -# book = Book.new('Harry Potter I', author1) book1 = Book.new('Harry Potter II', author1) book2 = Book.new('Harry Potter III', author1) @@ -23,14 +21,17 @@ book6 = Book.new('Tom Sawyer', author5) book7 = Book.new('All about us', author7) # -library.add_books(book, book1, book2, book3, book4, book5, book6, book7) -# reader1 = Reader.new('Denis', 'dzem@gmail.com', 'Dnipro', 'GS', 140) reader2 = Reader.new('Test', 'test@gmail.com', 'Kiev', 'KM', 101) reader3 = Reader.new('Testovskiy', 'testovskiy@gmail.com', 'Uzhgorod', 'KL', 22) reader4 = Reader.new('Testarius', 'testarius@gmail.com', 'Odessa', 'BH', 71) reader5 = Reader.new('Testevich', 'testarich@gmail.com', 'Kharkiv', 'YM', 41) -library.add_readers(reader1, reader2, reader3, reader4, reader5) +# +library.add( + author1, author2, author3, author4, author5, author6, author7, + book, book1, book2, book3, book4, book5, book6, book7, + reader1, reader2, reader3, reader4, reader5 +) # order = Order.new(library.readers[0], library.books[0]) order1 = Order.new(library.readers[4], library.books[1]) @@ -43,8 +44,9 @@ order8 = Order.new(library.readers[3], library.books[3]) order9 = Order.new(library.readers[2], library.books[2]) order10 = Order.new(library.readers[1], library.books[1]) +order11 = Order.new(library.readers[4], library.books[3]) -# library.add_orders(order,order1,order2,order3,order4,order5,order6,order7,order8,order9,order10) +library.add(order1, order2, order3, order4, order5, order6, order7, order8, order9, order10) library.save('library') diff --git a/lib/library.rb b/lib/library.rb index 1e6a104..47d42b7 100644 --- a/lib/library.rb +++ b/lib/library.rb @@ -1,6 +1,7 @@ class Library include Loader attr_accessor :authors, :readers, :books, :orders + def initialize @authors = [] @books = [] @@ -8,37 +9,45 @@ def initialize @orders = [] end - def add_books(*books) - books.each do |book| - @books.push(book) if check(book, Book, @books) && @authors.include?(book.author) + def add(*items) + items.each do |item| + case item + when Book + @books.push(item) if !@books.include?(item) && @authors.include?(item.author) + when Order + @orders.push(item) if @readers.include?(item.reader) && @books.include?(item.book) + when Reader + @readers.push(item) unless @readers.include?(item) + when Author + @authors.push(item) unless @authors.include?(item) + else + raise 'Undefined element' + end end end - def add_authors(*authors) - authors.each do |author| - @authors.push(author) if check(author, Author, @authors) - end + def top_reader + top_of(:reader).first end - def add_readers(*readers) - readers.each do |reader| - @readers.push(reader) if check(reader, Reader, @readers) - end + def top_book + top_of(:book).first end - def add_orders(*orders) - orders.each do |order| - if @readers.include?(order.reader) && @books.include?(order.book) - @orders.push(order) - else - raise 'No such reader or Book in the Library' + def top_books_statistics(number) + raise 'Annormal quantity of books' if number > top_of(:book).count + top_books_readers = [] + first_n_books = top_of(:book).first(number) + groups_by_book = grouping_by(:book) + first_n_books.each do |book| + groups_by_book[book].each do |order| + top_books_readers.push(order.reader) end end + top_books_readers.uniq.size end - def check(item, type, collection) - item.is_a?(type) && !collection.include?(item) - end + private def grouping_by(flag) @orders.group_by do |order| @@ -47,7 +56,7 @@ def grouping_by(flag) end def sort_grouped(data) - sorted = data.sort_by{ |k,v| v.size } + sorted = data.sort_by { |_, v| v.size } sorted.reverse.to_h end @@ -56,25 +65,4 @@ def top_of(flag) sorted_orders = sort_grouped(grouped_orders) sorted_orders.keys end - - def top_reader - top_of(:reader).first - end - - def top_book - top_of(:book).first - end - - def top_books_statistics(number) - top_books_readers = [] - raise 'Annormal quantity of books' if number > top_of(:book).count - first_n_books = top_of(:book).first(number) - books_data = grouping_by(:book) - first_n_books.each do |book| - books_data[book].each do |order| - top_books_readers.push(order.reader) - end - end - top_books_readers.uniq.size - end end From e30d68449fd2e5b212a45ad801e6748a4990da1e Mon Sep 17 00:00:00 2001 From: dzemlianoi Date: Wed, 19 Oct 2016 16:16:54 +0300 Subject: [PATCH 4/5] ref done once more --- lib/library.rb | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/lib/library.rb b/lib/library.rb index 47d42b7..6a262a0 100644 --- a/lib/library.rb +++ b/lib/library.rb @@ -13,13 +13,13 @@ def add(*items) items.each do |item| case item when Book - @books.push(item) if !@books.include?(item) && @authors.include?(item.author) + books.push(item) if !books.include?(item) && authors.include?(item.author) when Order - @orders.push(item) if @readers.include?(item.reader) && @books.include?(item.book) + orders.push(item) if readers.include?(item.reader) && books.include?(item.book) when Reader - @readers.push(item) unless @readers.include?(item) + readers.push(item) unless readers.include?(item) when Author - @authors.push(item) unless @authors.include?(item) + authors.push(item) unless authors.include?(item) else raise 'Undefined element' end @@ -50,7 +50,7 @@ def top_books_statistics(number) private def grouping_by(flag) - @orders.group_by do |order| + orders.group_by do |order| order.public_send(flag) end end From 68c858e13eb6313c2675a95adbcba65082e8bbc3 Mon Sep 17 00:00:00 2001 From: dzemlianoi Date: Sun, 20 Nov 2016 10:22:46 +0200 Subject: [PATCH 5/5] task redone --- index.rb | 13 +------------ lib/library.rb | 36 ++++++++---------------------------- lib/order.rb | 5 +---- 3 files changed, 10 insertions(+), 44 deletions(-) diff --git a/index.rb b/index.rb index f1e618d..d9f777e 100644 --- a/index.rb +++ b/index.rb @@ -46,19 +46,8 @@ order10 = Order.new(library.readers[1], library.books[1]) order11 = Order.new(library.readers[4], library.books[3]) -library.add(order1, order2, order3, order4, order5, order6, order7, order8, order9, order10) - library.save('library') puts library.top_reader.name puts library.top_book.title -puts library.top_books_statistics(3) - -# puts 'Books -------------------' -# puts library.books.inspect -# puts 'Authors -----------------' -# puts library.authors.inspect -# puts 'Readers -----------------' -# puts library.readers.inspect -# puts 'Orders ------------------' -# puts library.orders.inspect +puts library.top_books_statistics(12) diff --git a/lib/library.rb b/lib/library.rb index 6a262a0..acacf61 100644 --- a/lib/library.rb +++ b/lib/library.rb @@ -9,7 +9,7 @@ def initialize @orders = [] end - def add(*items) + def add(name, *items, username) items.each do |item| case item when Book @@ -27,42 +27,22 @@ def add(*items) end def top_reader - top_of(:reader).first + sort_by(:reader).first end def top_book - top_of(:book).first + sort_by(:book).first end def top_books_statistics(number) - raise 'Annormal quantity of books' if number > top_of(:book).count - top_books_readers = [] - first_n_books = top_of(:book).first(number) - groups_by_book = grouping_by(:book) - first_n_books.each do |book| - groups_by_book[book].each do |order| - top_books_readers.push(order.reader) - end - end - top_books_readers.uniq.size + raise 'Annormal quantity of books' if number > orders.count + top_n_books = sort_by(:book, number) + top_n_books.map{|(_,orders)| orders}.flatten.map(&:reader).uniq.count end private - def grouping_by(flag) - orders.group_by do |order| - order.public_send(flag) - end - end - - def sort_grouped(data) - sorted = data.sort_by { |_, v| v.size } - sorted.reverse.to_h - end - - def top_of(flag) - grouped_orders = grouping_by(flag) - sorted_orders = sort_grouped(grouped_orders) - sorted_orders.keys + def sort_by(by, quantity = nil) + orders.group_by(&by).max_by(quantity){|_, orders| orders.count} end end diff --git a/lib/order.rb b/lib/order.rb index 710ee99..c9da86d 100644 --- a/lib/order.rb +++ b/lib/order.rb @@ -2,12 +2,9 @@ class Order attr_accessor :reader, :book, :date def initialize(reader, book, date = Date.today) - if reader.instance_of?(Reader) && book.instance_of?(Book) + raise 'Unnormed data' unless reader.instance_of?(Reader) && book.instance_of?(Book) @reader = reader @book = book @date = date - else - raise 'Unnormed data' - end end end