Class: AuthorDBDataSource

Inherits:
Object
  • Object
show all
Defined in:
lib/author/author_db_data_source.rb

Instance Method Summary collapse

Constructor Details

#initializeAuthorDBDataSource

Returns a new instance of AuthorDBDataSource.



5
6
7
# File 'lib/author/author_db_data_source.rb', line 5

def initialize
  @client = DBClient.instance
end

Instance Method Details

#add(author) ⇒ Object

добавляет нового автора в базу данных, возвращает созданную запись.



17
18
19
20
21
22
# File 'lib/author/author_db_data_source.rb', line 17

def add(author)
  query = "INSERT INTO Author (FirstName, LastName, FatherName) VALUES ('#{author.first_name}', '#{author.last_name}', #{author.father_name.nil? ? 'NULL' : "'#{author.father_name}'"})"
  @client.query(query)
  author_id = @client.last_id
  get(author_id)
end

#change(author) ⇒ Object

изменяет данные об авторе в базе данных, возвращает измененную запись.



25
26
27
28
29
# File 'lib/author/author_db_data_source.rb', line 25

def change(author)
  query = "UPDATE Author SET FirstName='#{author.first_name}', LastName='#{author.last_name}', FatherName=#{author.father_name.nil? ? 'NULL' : "'#{author.father_name}'"} WHERE AuthorID=#{author.author_id}"
  @client.query(query)
  get(author.author_id)
end

#countObject

возвращает количество записей об авторах в базе данных.



84
85
86
87
88
89
# File 'lib/author/author_db_data_source.rb', line 84

def count
  query = "SELECT COUNT(*) FROM Author"
  result = @client.query(query).first

  result[:'COUNT(*)']
end

#delete(id) ⇒ Object

удаляет запись об авторе из базы данных.



32
33
34
35
# File 'lib/author/author_db_data_source.rb', line 32

def delete(id)
  query = "DELETE FROM Author WHERE AuthorID=#{id}"
  @client.query(query)
end

#get(id) ⇒ Object

возвращает запись об авторе по заданному id.



38
39
40
41
42
43
44
45
46
# File 'lib/author/author_db_data_source.rb', line 38

def get(id)
  query = "SELECT * FROM Author WHERE AuthorID=#{id}"
  result = @client.query(query).first
  if result
    Author.new(result[:'AuthorID'], result[:'FirstName'], result[:'LastName'], result[:'FatherName'])
  else
    nil
  end
end

#get_list(page_size, page_num, sort_field, sort_direction, has_father_name = nil) ⇒ Object

возвращает список авторов с учетом фильтра по наличию отчества и сортировки, позволяет задавать количество элементов на странице и номер страницы.



62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
# File 'lib/author/author_db_data_source.rb', line 62

def get_list(page_size, page_num, sort_field, sort_direction, has_father_name = nil)
  offset = (page_num - 1) * page_size
  query = "SELECT * FROM Author"

  if has_father_name == true
    query += " WHERE FatherName IS NOT NULL"
  elsif has_father_name == false
    query += " WHERE FatherName IS NULL"
  end

  query += " ORDER BY #{sort_field} #{sort_direction} LIMIT #{page_size} OFFSET #{offset}"
  results = @client.query(query)

  authors = []
  results.each do |result|
    authors << Author.new(result[:'AuthorID'], result[:'FirstName'], result[:'LastName'], result[:'FatherName'])
  end

  authors
end