require "sequel" cfg_internal = IniConfig.new() Sequel.connect(cfg_internal.get_db) class Repos < Sequel::Model(:repos) end class Recips < Sequel::Model(:recips) end class RepocRecips < Sequel::Model(:repos_recips) end class Projects < Sequel::Model(:projects) end class ReposProjects < Sequel::Model(:repos_projects) end class DBase attr :error, :last_id def creategit(project_name, description) @error = nil data = Repos.where(reponame: project_name).first if data.nil? id = Repos.insert(reponame: project_name, descr: description, public: 1) @last_id = id else @error = "Данный репозиторий уже существует" end @error end def get_repo_info_by_name(repo_name) Repos.where(reponame: repo_name) end def get_repo_info_by_id(id) Repos[id] end def get_recips() result = [] Recips.order(:id).map do |item| { :fname => item[:filepath], :descr => item[:descr], :id => item[:id] } end end def delete_repo_by_name(repo_name) rep_id = Repos.where(reponame: repo_name).first unless rep_id[:id].nil? id = rep_id[:id] RepocRecips.where(repo_id: id).delete ReposProjects.where(repo_id: id).delete end end def createrecip(filepath, description, codedata, gitlist) error_data = nil filepath_san = sanitize_rcptname(filepath) is_data = Recips.where(filepath: filepath_san).first if codedata.nil? || codedata.strip == "" error_data else if is_data.nil? id = Recips.insert(filepath: filepath_san, descr: description, content: codedata) @last_id = id if !gitlist.nil? && gitlist.length > 0 gitlist.each do |item| data = Repos.where(id: item.to_i).first unless data.nil? RepocRecips.insert(repo_id: data[:id], recip_id: id) end end end error_data else "Рецепт с таким именем #{filepath_san} уже существует" end end end def updaterecip(id, filepath, description, codedata, gitlist) error_data = nil filepath_san = sanitize_rcptname(filepath) is_data = Recips.where(filepath: filepath_san).first if codedata.nil? || codedata.strip == "" error_data else unless is_data.nil? Recips.where(id: id.to_i).update(filepath: filepath_san, descr: description, content: codedata) RepocRecips.where(recip_id: id.to_i).delete if !gitlist.nil? && gitlist.length > 0 gitlist.each do |item| data = Repos.where(id: item.to_i).first unless data.nil? RepocRecips.insert(repo_id: data[:id], recip_id: id) end end end error_data else "Рецепт с таким именем #{filepath_san} не существует" end end end def get_rcp_info_by_id(rcpi_id) info = Recips[rcpi_id.to_i] gits = RepocRecips.where(recip_id: info[:id]) info[:repos_list] = gits.map { |item| item[:repo_id].to_s } info end def delete_rcp(id) RepocRecips.where(recip_id: id.to_i).delete Recips.where(id: id.to_i).delete end def proj_list Projects.order(:id).all end def proj(id) Projects[id] end def proj_create(proj_name, proj_descr) @error = nil data = Projects.where(projname: proj_name).first if data.nil? id = Projects.insert(projname: proj_name, descr: proj_descr, public: 1) @last_id = id else @error = "Данный проект уже существует" end @error end def get_gits_for_projects(id) result = [] git_list = ReposProjects.where(proj_id: id.to_i).all unless git_list.nil? result = git_list.map do |item| Repos[item[:repo_id]] end.reject do |item| item.nil? end end result end def save_git_project(prj_id, git_id) result = ReposProjects.where(proj_id: prj_id, repo_id: git_id).first if result.nil? id = ReposProjects.insert(proj_id: prj_id, repo_id: git_id) @last_id = id end end end